<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">!function(t,e){"use strict";"object"==typeof module&amp;&amp;"object"==typeof module.exports?module.exports=t.document?e(t,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return e(t)}:e(t)}("undefined"!=typeof window?window:this,function(k,t){"use strict";function g(t){return null!=t&amp;&amp;t===t.window}var e=[],n=Object.getPrototypeOf,a=e.slice,m=e.flat?function(t){return e.flat.call(t)}:function(t){return e.concat.apply([],t)},l=e.push,s=e.indexOf,i={},o=i.toString,v=i.hasOwnProperty,r=v.toString,h=r.call(Object),y={},_=function(t){return"function"==typeof t&amp;&amp;"number"!=typeof t.nodeType&amp;&amp;"function"!=typeof t.item},D=k.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function b(t,e,i){var n,s,o=(i=i||D).createElement("script");if(o.text=t,e)for(n in u)(s=e[n]||e.getAttribute&amp;&amp;e.getAttribute(n))&amp;&amp;o.setAttribute(n,s);i.head.appendChild(o).parentNode.removeChild(o)}function w(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?i[o.call(t)]||"object":typeof t}var c="3.6.0",C=function(t,e){return new C.fn.init(t,e)};function d(t){var e=!!t&amp;&amp;"length"in t&amp;&amp;t.length,i=w(t);return!_(t)&amp;&amp;!g(t)&amp;&amp;("array"===i||0===e||"number"==typeof e&amp;&amp;0&lt;e&amp;&amp;e-1 in t)}C.fn=C.prototype={jquery:c,constructor:C,length:0,toArray:function(){return a.call(this)},get:function(t){return null==t?a.call(this):t&lt;0?this[t+this.length]:this[t]},pushStack:function(t){var e=C.merge(this.constructor(),t);return e.prevObject=this,e},each:function(t){return C.each(this,t)},map:function(i){return this.pushStack(C.map(this,function(t,e){return i.call(t,e,t)}))},slice:function(){return this.pushStack(a.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(C.grep(this,function(t,e){return(e+1)%2}))},odd:function(){return this.pushStack(C.grep(this,function(t,e){return e%2}))},eq:function(t){var e=this.length,i=+t+(t&lt;0?e:0);return this.pushStack(0&lt;=i&amp;&amp;i&lt;e?[this[i]]:[])},end:function(){return this.prevObject||this.constructor()},push:l,sort:e.sort,splice:e.splice},C.extend=C.fn.extend=function(){var t,e,i,n,s,o,r=arguments[0]||{},a=1,l=arguments.length,h=!1;for("boolean"==typeof r&amp;&amp;(h=r,r=arguments[a]||{},a++),"object"==typeof r||_(r)||(r={}),a===l&amp;&amp;(r=this,a--);a&lt;l;a++)if(null!=(t=arguments[a]))for(e in t)n=t[e],"__proto__"!==e&amp;&amp;r!==n&amp;&amp;(h&amp;&amp;n&amp;&amp;(C.isPlainObject(n)||(s=Array.isArray(n)))?(i=r[e],o=s&amp;&amp;!Array.isArray(i)?[]:s||C.isPlainObject(i)?i:{},s=!1,r[e]=C.extend(h,o,n)):void 0!==n&amp;&amp;(r[e]=n));return r},C.extend({expando:"jQuery"+(c+Math.random()).replace(/\D/g,""),isReady:!0,error:function(t){throw new Error(t)},noop:function(){},isPlainObject:function(t){var e,i;return!(!t||"[object Object]"!==o.call(t))&amp;&amp;(!(e=n(t))||"function"==typeof(i=v.call(e,"constructor")&amp;&amp;e.constructor)&amp;&amp;r.call(i)===h)},isEmptyObject:function(t){var e;for(e in t)return!1;return!0},globalEval:function(t,e,i){b(t,{nonce:e&amp;&amp;e.nonce},i)},each:function(t,e){var i,n=0;if(d(t))for(i=t.length;n&lt;i&amp;&amp;!1!==e.call(t[n],n,t[n]);n++);else for(n in t)if(!1===e.call(t[n],n,t[n]))break;return t},makeArray:function(t,e){var i=e||[];return null!=t&amp;&amp;(d(Object(t))?C.merge(i,"string"==typeof t?[t]:t):l.call(i,t)),i},inArray:function(t,e,i){return null==e?-1:s.call(e,t,i)},merge:function(t,e){for(var i=+e.length,n=0,s=t.length;n&lt;i;n++)t[s++]=e[n];return t.length=s,t},grep:function(t,e,i){for(var n=[],s=0,o=t.length,r=!i;s&lt;o;s++)!e(t[s],s)!=r&amp;&amp;n.push(t[s]);return n},map:function(t,e,i){var n,s,o=0,r=[];if(d(t))for(n=t.length;o&lt;n;o++)null!=(s=e(t[o],o,i))&amp;&amp;r.push(s);else for(o in t)null!=(s=e(t[o],o,i))&amp;&amp;r.push(s);return m(r)},guid:1,support:y}),"function"==typeof Symbol&amp;&amp;(C.fn[Symbol.iterator]=e[Symbol.iterator]),C.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(t,e){i["[object "+e+"]"]=e.toLowerCase()});var p=function(i){function c(t,e){var i="0x"+t.slice(1)-65536;return e||(i&lt;0?String.fromCharCode(65536+i):String.fromCharCode(i&gt;&gt;10|55296,1023&amp;i|56320))}function s(){x()}var t,p,b,o,r,f,d,g,w,l,h,x,k,a,D,m,u,v,y,C="sizzle"+ +new Date,_=i.document,T=0,n=0,S=lt(),M=lt(),I=lt(),P=lt(),A=function(t,e){return t===e&amp;&amp;(h=!0),0},E={}.hasOwnProperty,e=[],N=e.pop,H=e.push,O=e.push,z=e.slice,W=function(t,e){for(var i=0,n=t.length;i&lt;n;i++)if(t[i]===e)return i;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",j="[\\x20\\t\\r\\n\\f]",F="(?:\\\\[\\da-fA-F]{1,6}"+j+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",R="\\["+j+"*("+F+")(?:"+j+"*([*^$|!~]?=)"+j+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+F+"))|)"+j+"*\\]",q=":("+F+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+R+")*)|.*)\\)|)",B=new RegExp(j+"+","g"),Y=new RegExp("^"+j+"+|((?:^|[^\\\\])(?:\\\\.)*)"+j+"+$","g"),U=new RegExp("^"+j+"*,"+j+"*"),$=new RegExp("^"+j+"*([&gt;+~]|"+j+")"+j+"*"),K=new RegExp(j+"|&gt;"),V=new RegExp(q),X=new RegExp("^"+F+"$"),G={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),TAG:new RegExp("^("+F+"|[*])"),ATTR:new RegExp("^"+R),PSEUDO:new RegExp("^"+q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+j+"*(even|odd|(([+-]|)(\\d*)n|)"+j+"*(?:([+-]|)"+j+"*(\\d+)|))"+j+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+j+"*[&gt;+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+j+"*((?:-\\d)?\\d*)"+j+"*\\)|)(?=[^-]|$)","i")},J=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,tt=/^[^{]+\{\s*\[native \w/,et=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,it=/[+~]/,nt=new RegExp("\\\\[\\da-fA-F]{1,6}"+j+"?|\\\\([^\\r\\n\\f])","g"),st=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ot=function(t,e){return e?"\0"===t?"ï¿½":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t},rt=yt(function(t){return!0===t.disabled&amp;&amp;"fieldset"===t.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{O.apply(e=z.call(_.childNodes),_.childNodes),e[_.childNodes.length].nodeType}catch(t){O={apply:e.length?function(t,e){H.apply(t,z.call(e))}:function(t,e){for(var i=t.length,n=0;t[i++]=e[n++];);t.length=i-1}}}function at(e,t,i,n){var s,o,r,a,l,h,u,c=t&amp;&amp;t.ownerDocument,d=t?t.nodeType:9;if(i=i||[],"string"!=typeof e||!e||1!==d&amp;&amp;9!==d&amp;&amp;11!==d)return i;if(!n&amp;&amp;(x(t),t=t||k,D)){if(11!==d&amp;&amp;(l=et.exec(e)))if(s=l[1]){if(9===d){if(!(r=t.getElementById(s)))return i;if(r.id===s)return i.push(r),i}else if(c&amp;&amp;(r=c.getElementById(s))&amp;&amp;y(t,r)&amp;&amp;r.id===s)return i.push(r),i}else{if(l[2])return O.apply(i,t.getElementsByTagName(e)),i;if((s=l[3])&amp;&amp;p.getElementsByClassName&amp;&amp;t.getElementsByClassName)return O.apply(i,t.getElementsByClassName(s)),i}if(p.qsa&amp;&amp;!P[e+" "]&amp;&amp;(!m||!m.test(e))&amp;&amp;(1!==d||"object"!==t.nodeName.toLowerCase())){if(u=e,c=t,1===d&amp;&amp;(K.test(e)||$.test(e))){for((c=it.test(e)&amp;&amp;gt(t.parentNode)||t)===t&amp;&amp;p.scope||((a=t.getAttribute("id"))?a=a.replace(st,ot):t.setAttribute("id",a=C)),o=(h=f(e)).length;o--;)h[o]=(a?"#"+a:":scope")+" "+vt(h[o]);u=h.join(",")}try{return O.apply(i,c.querySelectorAll(u)),i}catch(t){P(e,!0)}finally{a===C&amp;&amp;t.removeAttribute("id")}}}return g(e.replace(Y,"$1"),t,i,n)}function lt(){var i=[];function n(t,e){return i.push(t+" ")&gt;b.cacheLength&amp;&amp;delete n[i.shift()],n[t+" "]=e}return n}function ht(t){return t[C]=!0,t}function ut(t){var e=k.createElement("fieldset");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&amp;&amp;e.parentNode.removeChild(e),e=null}}function ct(t,e){for(var i=t.split("|"),n=i.length;n--;)b.attrHandle[i[n]]=e}function dt(t,e){var i=e&amp;&amp;t,n=i&amp;&amp;1===t.nodeType&amp;&amp;1===e.nodeType&amp;&amp;t.sourceIndex-e.sourceIndex;if(n)return n;if(i)for(;i=i.nextSibling;)if(i===e)return-1;return t?1:-1}function pt(e){return function(t){return"form"in t?t.parentNode&amp;&amp;!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&amp;&amp;rt(t)===e:t.disabled===e:"label"in t&amp;&amp;t.disabled===e}}function ft(r){return ht(function(o){return o=+o,ht(function(t,e){for(var i,n=r([],t.length,o),s=n.length;s--;)t[i=n[s]]&amp;&amp;(t[i]=!(e[i]=t[i]))})})}function gt(t){return t&amp;&amp;void 0!==t.getElementsByTagName&amp;&amp;t}for(t in p=at.support={},r=at.isXML=function(t){var e=t&amp;&amp;t.namespaceURI,i=t&amp;&amp;(t.ownerDocument||t).documentElement;return!J.test(e||i&amp;&amp;i.nodeName||"HTML")},x=at.setDocument=function(t){var e,i,n=t?t.ownerDocument||t:_;return n!=k&amp;&amp;9===n.nodeType&amp;&amp;n.documentElement&amp;&amp;(a=(k=n).documentElement,D=!r(k),_!=k&amp;&amp;(i=k.defaultView)&amp;&amp;i.top!==i&amp;&amp;(i.addEventListener?i.addEventListener("unload",s,!1):i.attachEvent&amp;&amp;i.attachEvent("onunload",s)),p.scope=ut(function(t){return a.appendChild(t).appendChild(k.createElement("div")),void 0!==t.querySelectorAll&amp;&amp;!t.querySelectorAll(":scope fieldset div").length}),p.attributes=ut(function(t){return t.className="i",!t.getAttribute("className")}),p.getElementsByTagName=ut(function(t){return t.appendChild(k.createComment("")),!t.getElementsByTagName("*").length}),p.getElementsByClassName=tt.test(k.getElementsByClassName),p.getById=ut(function(t){return a.appendChild(t).id=C,!k.getElementsByName||!k.getElementsByName(C).length}),p.getById?(b.filter.ID=function(t){var e=t.replace(nt,c);return function(t){return t.getAttribute("id")===e}},b.find.ID=function(t,e){if(void 0!==e.getElementById&amp;&amp;D){var i=e.getElementById(t);return i?[i]:[]}}):(b.filter.ID=function(t){var i=t.replace(nt,c);return function(t){var e=void 0!==t.getAttributeNode&amp;&amp;t.getAttributeNode("id");return e&amp;&amp;e.value===i}},b.find.ID=function(t,e){if(void 0!==e.getElementById&amp;&amp;D){var i,n,s,o=e.getElementById(t);if(o){if((i=o.getAttributeNode("id"))&amp;&amp;i.value===t)return[o];for(s=e.getElementsByName(t),n=0;o=s[n++];)if((i=o.getAttributeNode("id"))&amp;&amp;i.value===t)return[o]}return[]}}),b.find.TAG=p.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):p.qsa?e.querySelectorAll(t):void 0}:function(t,e){var i,n=[],s=0,o=e.getElementsByTagName(t);if("*"!==t)return o;for(;i=o[s++];)1===i.nodeType&amp;&amp;n.push(i);return n},b.find.CLASS=p.getElementsByClassName&amp;&amp;function(t,e){if(void 0!==e.getElementsByClassName&amp;&amp;D)return e.getElementsByClassName(t)},u=[],m=[],(p.qsa=tt.test(k.querySelectorAll))&amp;&amp;(ut(function(t){var e;a.appendChild(t).innerHTML="&lt;a id='"+C+"'&gt;&lt;/a&gt;&lt;select id='"+C+"-\r\\' msallowcapture=''&gt;&lt;option selected=''&gt;&lt;/option&gt;&lt;/select&gt;",t.querySelectorAll("[msallowcapture^='']").length&amp;&amp;m.push("[*^$]="+j+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||m.push("\\["+j+"*(?:value|"+L+")"),t.querySelectorAll("[id~="+C+"-]").length||m.push("~="),(e=k.createElement("input")).setAttribute("name",""),t.appendChild(e),t.querySelectorAll("[name='']").length||m.push("\\["+j+"*name"+j+"*="+j+"*(?:''|\"\")"),t.querySelectorAll(":checked").length||m.push(":checked"),t.querySelectorAll("a#"+C+"+*").length||m.push(".#.+[+~]"),t.querySelectorAll("\\\f"),m.push("[\\r\\n\\f]")}),ut(function(t){t.innerHTML="&lt;a href='' disabled='disabled'&gt;&lt;/a&gt;&lt;select disabled='disabled'&gt;&lt;option/&gt;&lt;/select&gt;";var e=k.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&amp;&amp;m.push("name"+j+"*[*^$|!~]?="),2!==t.querySelectorAll(":enabled").length&amp;&amp;m.push(":enabled",":disabled"),a.appendChild(t).disabled=!0,2!==t.querySelectorAll(":disabled").length&amp;&amp;m.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),m.push(",.*:")})),(p.matchesSelector=tt.test(v=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&amp;&amp;ut(function(t){p.disconnectedMatch=v.call(t,"*"),v.call(t,"[s!='']:x"),u.push("!=",q)}),m=m.length&amp;&amp;new RegExp(m.join("|")),u=u.length&amp;&amp;new RegExp(u.join("|")),e=tt.test(a.compareDocumentPosition),y=e||tt.test(a.contains)?function(t,e){var i=9===t.nodeType?t.documentElement:t,n=e&amp;&amp;e.parentNode;return t===n||!(!n||1!==n.nodeType||!(i.contains?i.contains(n):t.compareDocumentPosition&amp;&amp;16&amp;t.compareDocumentPosition(n)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},A=e?function(t,e){if(t===e)return h=!0,0;var i=!t.compareDocumentPosition-!e.compareDocumentPosition;return i||(1&amp;(i=(t.ownerDocument||t)==(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!p.sortDetached&amp;&amp;e.compareDocumentPosition(t)===i?t==k||t.ownerDocument==_&amp;&amp;y(_,t)?-1:e==k||e.ownerDocument==_&amp;&amp;y(_,e)?1:l?W(l,t)-W(l,e):0:4&amp;i?-1:1)}:function(t,e){if(t===e)return h=!0,0;var i,n=0,s=t.parentNode,o=e.parentNode,r=[t],a=[e];if(!s||!o)return t==k?-1:e==k?1:s?-1:o?1:l?W(l,t)-W(l,e):0;if(s===o)return dt(t,e);for(i=t;i=i.parentNode;)r.unshift(i);for(i=e;i=i.parentNode;)a.unshift(i);for(;r[n]===a[n];)n++;return n?dt(r[n],a[n]):r[n]==_?-1:a[n]==_?1:0}),k},at.matches=function(t,e){return at(t,null,null,e)},at.matchesSelector=function(t,e){if(x(t),p.matchesSelector&amp;&amp;D&amp;&amp;!P[e+" "]&amp;&amp;(!u||!u.test(e))&amp;&amp;(!m||!m.test(e)))try{var i=v.call(t,e);if(i||p.disconnectedMatch||t.document&amp;&amp;11!==t.document.nodeType)return i}catch(t){P(e,!0)}return 0&lt;at(e,k,null,[t]).length},at.contains=function(t,e){return(t.ownerDocument||t)!=k&amp;&amp;x(t),y(t,e)},at.attr=function(t,e){(t.ownerDocument||t)!=k&amp;&amp;x(t);var i=b.attrHandle[e.toLowerCase()],n=i&amp;&amp;E.call(b.attrHandle,e.toLowerCase())?i(t,e,!D):void 0;return void 0!==n?n:p.attributes||!D?t.getAttribute(e):(n=t.getAttributeNode(e))&amp;&amp;n.specified?n.value:null},at.escape=function(t){return(t+"").replace(st,ot)},at.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},at.uniqueSort=function(t){var e,i=[],n=0,s=0;if(h=!p.detectDuplicates,l=!p.sortStable&amp;&amp;t.slice(0),t.sort(A),h){for(;e=t[s++];)e===t[s]&amp;&amp;(n=i.push(s));for(;n--;)t.splice(i[n],1)}return l=null,t},o=at.getText=function(t){var e,i="",n=0,s=t.nodeType;if(s){if(1===s||9===s||11===s){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)i+=o(t)}else if(3===s||4===s)return t.nodeValue}else for(;e=t[n++];)i+=o(e);return i},(b=at.selectors={cacheLength:50,createPseudo:ht,match:G,attrHandle:{},find:{},relative:{"&gt;":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(nt,c),t[3]=(t[3]||t[4]||t[5]||"").replace(nt,c),"~="===t[2]&amp;&amp;(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||at.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&amp;&amp;at.error(t[0]),t},PSEUDO:function(t){var e,i=!t[6]&amp;&amp;t[2];return G.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":i&amp;&amp;V.test(i)&amp;&amp;(e=f(i,!0))&amp;&amp;(e=i.indexOf(")",i.length-e)-i.length)&amp;&amp;(t[0]=t[0].slice(0,e),t[2]=i.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(nt,c).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&amp;&amp;t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=S[t+" "];return e||(e=new RegExp("(^|"+j+")"+t+"("+j+"|$)"))&amp;&amp;S(t,function(t){return e.test("string"==typeof t.className&amp;&amp;t.className||void 0!==t.getAttribute&amp;&amp;t.getAttribute("class")||"")})},ATTR:function(i,n,s){return function(t){var e=at.attr(t,i);return null==e?"!="===n:!n||(e+="","="===n?e===s:"!="===n?e!==s:"^="===n?s&amp;&amp;0===e.indexOf(s):"*="===n?s&amp;&amp;-1&lt;e.indexOf(s):"$="===n?s&amp;&amp;e.slice(-s.length)===s:"~="===n?-1&lt;(" "+e.replace(B," ")+" ").indexOf(s):"|="===n&amp;&amp;(e===s||e.slice(0,s.length+1)===s+"-"))}},CHILD:function(f,t,e,g,m){var v="nth"!==f.slice(0,3),y="last"!==f.slice(-4),_="of-type"===t;return 1===g&amp;&amp;0===m?function(t){return!!t.parentNode}:function(t,e,i){var n,s,o,r,a,l,h=v!=y?"nextSibling":"previousSibling",u=t.parentNode,c=_&amp;&amp;t.nodeName.toLowerCase(),d=!i&amp;&amp;!_,p=!1;if(u){if(v){for(;h;){for(r=t;r=r[h];)if(_?r.nodeName.toLowerCase()===c:1===r.nodeType)return!1;l=h="only"===f&amp;&amp;!l&amp;&amp;"nextSibling"}return!0}if(l=[y?u.firstChild:u.lastChild],y&amp;&amp;d){for(p=(a=(n=(s=(o=(r=u)[C]||(r[C]={}))[r.uniqueID]||(o[r.uniqueID]={}))[f]||[])[0]===T&amp;&amp;n[1])&amp;&amp;n[2],r=a&amp;&amp;u.childNodes[a];r=++a&amp;&amp;r&amp;&amp;r[h]||(p=a=0)||l.pop();)if(1===r.nodeType&amp;&amp;++p&amp;&amp;r===t){s[f]=[T,a,p];break}}else if(d&amp;&amp;(p=a=(n=(s=(o=(r=t)[C]||(r[C]={}))[r.uniqueID]||(o[r.uniqueID]={}))[f]||[])[0]===T&amp;&amp;n[1]),!1===p)for(;(r=++a&amp;&amp;r&amp;&amp;r[h]||(p=a=0)||l.pop())&amp;&amp;((_?r.nodeName.toLowerCase()!==c:1!==r.nodeType)||!++p||(d&amp;&amp;((s=(o=r[C]||(r[C]={}))[r.uniqueID]||(o[r.uniqueID]={}))[f]=[T,p]),r!==t)););return(p-=m)===g||p%g==0&amp;&amp;0&lt;=p/g}}},PSEUDO:function(t,o){var e,r=b.pseudos[t]||b.setFilters[t.toLowerCase()]||at.error("unsupported pseudo: "+t);return r[C]?r(o):1&lt;r.length?(e=[t,t,"",o],b.setFilters.hasOwnProperty(t.toLowerCase())?ht(function(t,e){for(var i,n=r(t,o),s=n.length;s--;)t[i=W(t,n[s])]=!(e[i]=n[s])}):function(t){return r(t,0,e)}):r}},pseudos:{not:ht(function(t){var n=[],s=[],a=d(t.replace(Y,"$1"));return a[C]?ht(function(t,e,i,n){for(var s,o=a(t,null,n,[]),r=t.length;r--;)(s=o[r])&amp;&amp;(t[r]=!(e[r]=s))}):function(t,e,i){return n[0]=t,a(n,null,i,s),n[0]=null,!s.pop()}}),has:ht(function(e){return function(t){return 0&lt;at(e,t).length}}),contains:ht(function(e){return e=e.replace(nt,c),function(t){return-1&lt;(t.textContent||o(t)).indexOf(e)}}),lang:ht(function(i){return X.test(i||"")||at.error("unsupported lang: "+i),i=i.replace(nt,c).toLowerCase(),function(t){var e;do{if(e=D?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(e=e.toLowerCase())===i||0===e.indexOf(i+"-")}while((t=t.parentNode)&amp;&amp;1===t.nodeType);return!1}}),target:function(t){var e=i.location&amp;&amp;i.location.hash;return e&amp;&amp;e.slice(1)===t.id},root:function(t){return t===a},focus:function(t){return t===k.activeElement&amp;&amp;(!k.hasFocus||k.hasFocus())&amp;&amp;!!(t.type||t.href||~t.tabIndex)},enabled:pt(!1),disabled:pt(!0),checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&amp;&amp;!!t.checked||"option"===e&amp;&amp;!!t.selected},selected:function(t){return t.parentNode&amp;&amp;t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType&lt;6)return!1;return!0},parent:function(t){return!b.pseudos.empty(t)},header:function(t){return Z.test(t.nodeName)},input:function(t){return Q.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&amp;&amp;"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&amp;&amp;"text"===t.type&amp;&amp;(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:ft(function(){return[0]}),last:ft(function(t,e){return[e-1]}),eq:ft(function(t,e,i){return[i&lt;0?i+e:i]}),even:ft(function(t,e){for(var i=0;i&lt;e;i+=2)t.push(i);return t}),odd:ft(function(t,e){for(var i=1;i&lt;e;i+=2)t.push(i);return t}),lt:ft(function(t,e,i){for(var n=i&lt;0?i+e:e&lt;i?e:i;0&lt;=--n;)t.push(n);return t}),gt:ft(function(t,e,i){for(var n=i&lt;0?i+e:i;++n&lt;e;)t.push(n);return t})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[t]=function(e){return function(t){return"input"===t.nodeName.toLowerCase()&amp;&amp;t.type===e}}(t);for(t in{submit:!0,reset:!0})b.pseudos[t]=function(i){return function(t){var e=t.nodeName.toLowerCase();return("input"===e||"button"===e)&amp;&amp;t.type===i}}(t);function mt(){}function vt(t){for(var e=0,i=t.length,n="";e&lt;i;e++)n+=t[e].value;return n}function yt(a,t,e){var l=t.dir,h=t.next,u=h||l,c=e&amp;&amp;"parentNode"===u,d=n++;return t.first?function(t,e,i){for(;t=t[l];)if(1===t.nodeType||c)return a(t,e,i);return!1}:function(t,e,i){var n,s,o,r=[T,d];if(i){for(;t=t[l];)if((1===t.nodeType||c)&amp;&amp;a(t,e,i))return!0}else for(;t=t[l];)if(1===t.nodeType||c)if(s=(o=t[C]||(t[C]={}))[t.uniqueID]||(o[t.uniqueID]={}),h&amp;&amp;h===t.nodeName.toLowerCase())t=t[l]||t;else{if((n=s[u])&amp;&amp;n[0]===T&amp;&amp;n[1]===d)return r[2]=n[2];if((s[u]=r)[2]=a(t,e,i))return!0}return!1}}function _t(s){return 1&lt;s.length?function(t,e,i){for(var n=s.length;n--;)if(!s[n](t,e,i))return!1;return!0}:s[0]}function bt(t,e,i,n,s){for(var o,r=[],a=0,l=t.length,h=null!=e;a&lt;l;a++)(o=t[a])&amp;&amp;(i&amp;&amp;!i(o,n,s)||(r.push(o),h&amp;&amp;e.push(a)));return r}function wt(p,f,g,m,v,t){return m&amp;&amp;!m[C]&amp;&amp;(m=wt(m)),v&amp;&amp;!v[C]&amp;&amp;(v=wt(v,t)),ht(function(t,e,i,n){var s,o,r,a=[],l=[],h=e.length,u=t||function(t,e,i){for(var n=0,s=e.length;n&lt;s;n++)at(t,e[n],i);return i}(f||"*",i.nodeType?[i]:i,[]),c=!p||!t&amp;&amp;f?u:bt(u,a,p,i,n),d=g?v||(t?p:h||m)?[]:e:c;if(g&amp;&amp;g(c,d,i,n),m)for(s=bt(d,l),m(s,[],i,n),o=s.length;o--;)(r=s[o])&amp;&amp;(d[l[o]]=!(c[l[o]]=r));if(t){if(v||p){if(v){for(s=[],o=d.length;o--;)(r=d[o])&amp;&amp;s.push(c[o]=r);v(null,d=[],s,n)}for(o=d.length;o--;)(r=d[o])&amp;&amp;-1&lt;(s=v?W(t,r):a[o])&amp;&amp;(t[s]=!(e[s]=r))}}else d=bt(d===e?d.splice(h,d.length):d),v?v(null,e,d,n):O.apply(e,d)})}function xt(m,v){function t(t,e,i,n,s){var o,r,a,l=0,h="0",u=t&amp;&amp;[],c=[],d=w,p=t||_&amp;&amp;b.find.TAG("*",s),f=T+=null==d?1:Math.random()||.1,g=p.length;for(s&amp;&amp;(w=e==k||e||s);h!==g&amp;&amp;null!=(o=p[h]);h++){if(_&amp;&amp;o){for(r=0,e||o.ownerDocument==k||(x(o),i=!D);a=m[r++];)if(a(o,e||k,i)){n.push(o);break}s&amp;&amp;(T=f)}y&amp;&amp;((o=!a&amp;&amp;o)&amp;&amp;l--,t&amp;&amp;u.push(o))}if(l+=h,y&amp;&amp;h!==l){for(r=0;a=v[r++];)a(u,c,e,i);if(t){if(0&lt;l)for(;h--;)u[h]||c[h]||(c[h]=N.call(n));c=bt(c)}O.apply(n,c),s&amp;&amp;!t&amp;&amp;0&lt;c.length&amp;&amp;1&lt;l+v.length&amp;&amp;at.uniqueSort(n)}return s&amp;&amp;(T=f,w=d),u}var y=0&lt;v.length,_=0&lt;m.length;return y?ht(t):t}return mt.prototype=b.filters=b.pseudos,b.setFilters=new mt,f=at.tokenize=function(t,e){var i,n,s,o,r,a,l,h=M[t+" "];if(h)return e?0:h.slice(0);for(r=t,a=[],l=b.preFilter;r;){for(o in i&amp;&amp;!(n=U.exec(r))||(n&amp;&amp;(r=r.slice(n[0].length)||r),a.push(s=[])),i=!1,(n=$.exec(r))&amp;&amp;(i=n.shift(),s.push({value:i,type:n[0].replace(Y," ")}),r=r.slice(i.length)),b.filter)!(n=G[o].exec(r))||l[o]&amp;&amp;!(n=l[o](n))||(i=n.shift(),s.push({value:i,type:o,matches:n}),r=r.slice(i.length));if(!i)break}return e?r.length:r?at.error(t):M(t,a).slice(0)},d=at.compile=function(t,e){var i,n=[],s=[],o=I[t+" "];if(!o){for(i=(e=e||f(t)).length;i--;)(o=function t(e){for(var s,i,n,o=e.length,r=b.relative[e[0].type],a=r||b.relative[" "],l=r?1:0,h=yt(function(t){return t===s},a,!0),u=yt(function(t){return-1&lt;W(s,t)},a,!0),c=[function(t,e,i){var n=!r&amp;&amp;(i||e!==w)||((s=e).nodeType?h:u)(t,e,i);return s=null,n}];l&lt;o;l++)if(i=b.relative[e[l].type])c=[yt(_t(c),i)];else{if((i=b.filter[e[l].type].apply(null,e[l].matches))[C]){for(n=++l;n&lt;o&amp;&amp;!b.relative[e[n].type];n++);return wt(1&lt;l&amp;&amp;_t(c),1&lt;l&amp;&amp;vt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(Y,"$1"),i,l&lt;n&amp;&amp;t(e.slice(l,n)),n&lt;o&amp;&amp;t(e=e.slice(n)),n&lt;o&amp;&amp;vt(e))}c.push(i)}return _t(c)}(e[i]))[C]?n.push(o):s.push(o);(o=I(t,xt(s,n))).selector=t}return o},g=at.select=function(t,e,i,n){var s,o,r,a,l,h="function"==typeof t&amp;&amp;t,u=!n&amp;&amp;f(t=h.selector||t);if(i=i||[],1===u.length){if(2&lt;(o=u[0]=u[0].slice(0)).length&amp;&amp;"ID"===(r=o[0]).type&amp;&amp;9===e.nodeType&amp;&amp;D&amp;&amp;b.relative[o[1].type]){if(!(e=(b.find.ID(r.matches[0].replace(nt,c),e)||[])[0]))return i;h&amp;&amp;(e=e.parentNode),t=t.slice(o.shift().value.length)}for(s=G.needsContext.test(t)?0:o.length;s--&amp;&amp;(r=o[s],!b.relative[a=r.type]);)if((l=b.find[a])&amp;&amp;(n=l(r.matches[0].replace(nt,c),it.test(o[0].type)&amp;&amp;gt(e.parentNode)||e))){if(o.splice(s,1),!(t=n.length&amp;&amp;vt(o)))return O.apply(i,n),i;break}}return(h||d(t,u))(n,e,!D,i,!e||it.test(t)&amp;&amp;gt(e.parentNode)||e),i},p.sortStable=C.split("").sort(A).join("")===C,p.detectDuplicates=!!h,x(),p.sortDetached=ut(function(t){return 1&amp;t.compareDocumentPosition(k.createElement("fieldset"))}),ut(function(t){return t.innerHTML="&lt;a href='#'&gt;&lt;/a&gt;","#"===t.firstChild.getAttribute("href")})||ct("type|href|height|width",function(t,e,i){if(!i)return t.getAttribute(e,"type"===e.toLowerCase()?1:2)}),p.attributes&amp;&amp;ut(function(t){return t.innerHTML="&lt;input/&gt;",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")})||ct("value",function(t,e,i){if(!i&amp;&amp;"input"===t.nodeName.toLowerCase())return t.defaultValue}),ut(function(t){return null==t.getAttribute("disabled")})||ct(L,function(t,e,i){var n;if(!i)return!0===t[e]?e.toLowerCase():(n=t.getAttributeNode(e))&amp;&amp;n.specified?n.value:null}),at}(k);C.find=p,C.expr=p.selectors,C.expr[":"]=C.expr.pseudos,C.uniqueSort=C.unique=p.uniqueSort,C.text=p.getText,C.isXMLDoc=p.isXML,C.contains=p.contains,C.escapeSelector=p.escape;function f(t,e,i){for(var n=[],s=void 0!==i;(t=t[e])&amp;&amp;9!==t.nodeType;)if(1===t.nodeType){if(s&amp;&amp;C(t).is(i))break;n.push(t)}return n}function x(t,e){for(var i=[];t;t=t.nextSibling)1===t.nodeType&amp;&amp;t!==e&amp;&amp;i.push(t);return i}var T=C.expr.match.needsContext;function S(t,e){return t.nodeName&amp;&amp;t.nodeName.toLowerCase()===e.toLowerCase()}var M=/^&lt;([a-z][^\/\0&gt;:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?&gt;(?:&lt;\/\1&gt;|)$/i;function I(t,i,n){return _(i)?C.grep(t,function(t,e){return!!i.call(t,e,t)!==n}):i.nodeType?C.grep(t,function(t){return t===i!==n}):"string"!=typeof i?C.grep(t,function(t){return-1&lt;s.call(i,t)!==n}):C.filter(i,t,n)}C.filter=function(t,e,i){var n=e[0];return i&amp;&amp;(t=":not("+t+")"),1===e.length&amp;&amp;1===n.nodeType?C.find.matchesSelector(n,t)?[n]:[]:C.find.matches(t,C.grep(e,function(t){return 1===t.nodeType}))},C.fn.extend({find:function(t){var e,i,n=this.length,s=this;if("string"!=typeof t)return this.pushStack(C(t).filter(function(){for(e=0;e&lt;n;e++)if(C.contains(s[e],this))return!0}));for(i=this.pushStack([]),e=0;e&lt;n;e++)C.find(t,s[e],i);return 1&lt;n?C.uniqueSort(i):i},filter:function(t){return this.pushStack(I(this,t||[],!1))},not:function(t){return this.pushStack(I(this,t||[],!0))},is:function(t){return!!I(this,"string"==typeof t&amp;&amp;T.test(t)?C(t):t||[],!1).length}});var P,A=/^(?:\s*(&lt;[\w\W]+&gt;)[^&gt;]*|#([\w-]+))$/;(C.fn.init=function(t,e,i){var n,s;if(!t)return this;if(i=i||P,"string"!=typeof t)return t.nodeType?(this[0]=t,this.length=1,this):_(t)?void 0!==i.ready?i.ready(t):t(C):C.makeArray(t,this);if(!(n="&lt;"===t[0]&amp;&amp;"&gt;"===t[t.length-1]&amp;&amp;3&lt;=t.length?[null,t,null]:A.exec(t))||!n[1]&amp;&amp;e)return!e||e.jquery?(e||i).find(t):this.constructor(e).find(t);if(n[1]){if(e=e instanceof C?e[0]:e,C.merge(this,C.parseHTML(n[1],e&amp;&amp;e.nodeType?e.ownerDocument||e:D,!0)),M.test(n[1])&amp;&amp;C.isPlainObject(e))for(n in e)_(this[n])?this[n](e[n]):this.attr(n,e[n]);return this}return(s=D.getElementById(n[2]))&amp;&amp;(this[0]=s,this.length=1),this}).prototype=C.fn,P=C(D);var E=/^(?:parents|prev(?:Until|All))/,N={children:!0,contents:!0,next:!0,prev:!0};function H(t,e){for(;(t=t[e])&amp;&amp;1!==t.nodeType;);return t}C.fn.extend({has:function(t){var e=C(t,this),i=e.length;return this.filter(function(){for(var t=0;t&lt;i;t++)if(C.contains(this,e[t]))return!0})},closest:function(t,e){var i,n=0,s=this.length,o=[],r="string"!=typeof t&amp;&amp;C(t);if(!T.test(t))for(;n&lt;s;n++)for(i=this[n];i&amp;&amp;i!==e;i=i.parentNode)if(i.nodeType&lt;11&amp;&amp;(r?-1&lt;r.index(i):1===i.nodeType&amp;&amp;C.find.matchesSelector(i,t))){o.push(i);break}return this.pushStack(1&lt;o.length?C.uniqueSort(o):o)},index:function(t){return t?"string"==typeof t?s.call(C(t),this[0]):s.call(this,t.jquery?t[0]:t):this[0]&amp;&amp;this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(C.uniqueSort(C.merge(this.get(),C(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),C.each({parent:function(t){var e=t.parentNode;return e&amp;&amp;11!==e.nodeType?e:null},parents:function(t){return f(t,"parentNode")},parentsUntil:function(t,e,i){return f(t,"parentNode",i)},next:function(t){return H(t,"nextSibling")},prev:function(t){return H(t,"previousSibling")},nextAll:function(t){return f(t,"nextSibling")},prevAll:function(t){return f(t,"previousSibling")},nextUntil:function(t,e,i){return f(t,"nextSibling",i)},prevUntil:function(t,e,i){return f(t,"previousSibling",i)},siblings:function(t){return x((t.parentNode||{}).firstChild,t)},children:function(t){return x(t.firstChild)},contents:function(t){return null!=t.contentDocument&amp;&amp;n(t.contentDocument)?t.contentDocument:(S(t,"template")&amp;&amp;(t=t.content||t),C.merge([],t.childNodes))}},function(n,s){C.fn[n]=function(t,e){var i=C.map(this,s,t);return"Until"!==n.slice(-5)&amp;&amp;(e=t),e&amp;&amp;"string"==typeof e&amp;&amp;(i=C.filter(e,i)),1&lt;this.length&amp;&amp;(N[n]||C.uniqueSort(i),E.test(n)&amp;&amp;i.reverse()),this.pushStack(i)}});var O=/[^\x20\t\r\n\f]+/g;function z(t){return t}function W(t){throw t}function L(t,e,i,n){var s;try{t&amp;&amp;_(s=t.promise)?s.call(t).done(e).fail(i):t&amp;&amp;_(s=t.then)?s.call(t,e,i):e.apply(void 0,[t].slice(n))}catch(t){i.apply(void 0,[t])}}C.Callbacks=function(n){var t,i;n="string"==typeof n?(t=n,i={},C.each(t.match(O)||[],function(t,e){i[e]=!0}),i):C.extend({},n);function s(){for(a=a||n.once,r=o=!0;h.length;u=-1)for(e=h.shift();++u&lt;l.length;)!1===l[u].apply(e[0],e[1])&amp;&amp;n.stopOnFalse&amp;&amp;(u=l.length,e=!1);n.memory||(e=!1),o=!1,a&amp;&amp;(l=e?[]:"")}var o,e,r,a,l=[],h=[],u=-1,c={add:function(){return l&amp;&amp;(e&amp;&amp;!o&amp;&amp;(u=l.length-1,h.push(e)),function i(t){C.each(t,function(t,e){_(e)?n.unique&amp;&amp;c.has(e)||l.push(e):e&amp;&amp;e.length&amp;&amp;"string"!==w(e)&amp;&amp;i(e)})}(arguments),e&amp;&amp;!o&amp;&amp;s()),this},remove:function(){return C.each(arguments,function(t,e){for(var i;-1&lt;(i=C.inArray(e,l,i));)l.splice(i,1),i&lt;=u&amp;&amp;u--}),this},has:function(t){return t?-1&lt;C.inArray(t,l):0&lt;l.length},empty:function(){return l=l&amp;&amp;[],this},disable:function(){return a=h=[],l=e="",this},disabled:function(){return!l},lock:function(){return a=h=[],e||o||(l=e=""),this},locked:function(){return!!a},fireWith:function(t,e){return a||(e=[t,(e=e||[]).slice?e.slice():e],h.push(e),o||s()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},C.extend({Deferred:function(t){var o=[["notify","progress",C.Callbacks("memory"),C.Callbacks("memory"),2],["resolve","done",C.Callbacks("once memory"),C.Callbacks("once memory"),0,"resolved"],["reject","fail",C.Callbacks("once memory"),C.Callbacks("once memory"),1,"rejected"]],s="pending",r={state:function(){return s},always:function(){return a.done(arguments).fail(arguments),this},catch:function(t){return r.then(null,t)},pipe:function(){var s=arguments;return C.Deferred(function(n){C.each(o,function(t,e){var i=_(s[e[4]])&amp;&amp;s[e[4]];a[e[1]](function(){var t=i&amp;&amp;i.apply(this,arguments);t&amp;&amp;_(t.promise)?t.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[e[0]+"With"](this,i?[t]:arguments)})}),s=null}).promise()},then:function(e,i,n){var l=0;function h(s,o,r,a){return function(){function t(){var t,e;if(!(s&lt;l)){if((t=r.apply(i,n))===o.promise())throw new TypeError("Thenable self-resolution");e=t&amp;&amp;("object"==typeof t||"function"==typeof t)&amp;&amp;t.then,_(e)?a?e.call(t,h(l,o,z,a),h(l,o,W,a)):(l++,e.call(t,h(l,o,z,a),h(l,o,W,a),h(l,o,z,o.notifyWith))):(r!==z&amp;&amp;(i=void 0,n=[t]),(a||o.resolveWith)(i,n))}}var i=this,n=arguments,e=a?t:function(){try{t()}catch(t){C.Deferred.exceptionHook&amp;&amp;C.Deferred.exceptionHook(t,e.stackTrace),l&lt;=s+1&amp;&amp;(r!==W&amp;&amp;(i=void 0,n=[t]),o.rejectWith(i,n))}};s?e():(C.Deferred.getStackHook&amp;&amp;(e.stackTrace=C.Deferred.getStackHook()),k.setTimeout(e))}}return C.Deferred(function(t){o[0][3].add(h(0,t,_(n)?n:z,t.notifyWith)),o[1][3].add(h(0,t,_(e)?e:z)),o[2][3].add(h(0,t,_(i)?i:W))}).promise()},promise:function(t){return null!=t?C.extend(t,r):r}},a={};return C.each(o,function(t,e){var i=e[2],n=e[5];r[e[1]]=i.add,n&amp;&amp;i.add(function(){s=n},o[3-t][2].disable,o[3-t][3].disable,o[0][2].lock,o[0][3].lock),i.add(e[3].fire),a[e[0]]=function(){return a[e[0]+"With"](this===a?void 0:this,arguments),this},a[e[0]+"With"]=i.fireWith}),r.promise(a),t&amp;&amp;t.call(a,a),a},when:function(t){function e(e){return function(t){s[e]=this,o[e]=1&lt;arguments.length?a.call(arguments):t,--i||r.resolveWith(s,o)}}var i=arguments.length,n=i,s=Array(n),o=a.call(arguments),r=C.Deferred();if(i&lt;=1&amp;&amp;(L(t,r.done(e(n)).resolve,r.reject,!i),"pending"===r.state()||_(o[n]&amp;&amp;o[n].then)))return r.then();for(;n--;)L(o[n],e(n),r.reject);return r.promise()}});var j=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;C.Deferred.exceptionHook=function(t,e){k.console&amp;&amp;k.console.warn&amp;&amp;t&amp;&amp;j.test(t.name)&amp;&amp;k.console.warn("jQuery.Deferred exception: "+t.message,t.stack,e)},C.readyException=function(t){k.setTimeout(function(){throw t})};var F=C.Deferred();function R(){D.removeEventListener("DOMContentLoaded",R),k.removeEventListener("load",R),C.ready()}C.fn.ready=function(t){return F.then(t).catch(function(t){C.readyException(t)}),this},C.extend({isReady:!1,readyWait:1,ready:function(t){(!0===t?--C.readyWait:C.isReady)||(C.isReady=!0)!==t&amp;&amp;0&lt;--C.readyWait||F.resolveWith(D,[C])}}),C.ready.then=F.then,"complete"===D.readyState||"loading"!==D.readyState&amp;&amp;!D.documentElement.doScroll?k.setTimeout(C.ready):(D.addEventListener("DOMContentLoaded",R),k.addEventListener("load",R));var q=function(t,e,i,n,s,o,r){var a=0,l=t.length,h=null==i;if("object"===w(i))for(a in s=!0,i)q(t,e,a,i[a],!0,o,r);else if(void 0!==n&amp;&amp;(s=!0,_(n)||(r=!0),h&amp;&amp;(e=r?(e.call(t,n),null):(h=e,function(t,e,i){return h.call(C(t),i)})),e))for(;a&lt;l;a++)e(t[a],i,r?n:n.call(t[a],a,e(t[a],i)));return s?t:h?e.call(t):l?e(t[0],i):o},B=/^-ms-/,Y=/-([a-z])/g;function U(t,e){return e.toUpperCase()}function $(t){return t.replace(B,"ms-").replace(Y,U)}function K(t){return 1===t.nodeType||9===t.nodeType||!+t.nodeType}function V(){this.expando=C.expando+V.uid++}V.uid=1,V.prototype={cache:function(t){var e=t[this.expando];return e||(e={},K(t)&amp;&amp;(t.nodeType?t[this.expando]=e:Object.defineProperty(t,this.expando,{value:e,configurable:!0}))),e},set:function(t,e,i){var n,s=this.cache(t);if("string"==typeof e)s[$(e)]=i;else for(n in e)s[$(n)]=e[n];return s},get:function(t,e){return void 0===e?this.cache(t):t[this.expando]&amp;&amp;t[this.expando][$(e)]},access:function(t,e,i){return void 0===e||e&amp;&amp;"string"==typeof e&amp;&amp;void 0===i?this.get(t,e):(this.set(t,e,i),void 0!==i?i:e)},remove:function(t,e){var i,n=t[this.expando];if(void 0!==n){if(void 0!==e){i=(e=Array.isArray(e)?e.map($):(e=$(e))in n?[e]:e.match(O)||[]).length;for(;i--;)delete n[e[i]]}void 0!==e&amp;&amp;!C.isEmptyObject(n)||(t.nodeType?t[this.expando]=void 0:delete t[this.expando])}},hasData:function(t){var e=t[this.expando];return void 0!==e&amp;&amp;!C.isEmptyObject(e)}};var X=new V,G=new V,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Q=/[A-Z]/g;function Z(t,e,i){var n,s;if(void 0===i&amp;&amp;1===t.nodeType)if(n="data-"+e.replace(Q,"-$&amp;").toLowerCase(),"string"==typeof(i=t.getAttribute(n))){try{i="true"===(s=i)||"false"!==s&amp;&amp;("null"===s?null:s===+s+""?+s:J.test(s)?JSON.parse(s):s)}catch(t){}G.set(t,e,i)}else i=void 0;return i}C.extend({hasData:function(t){return G.hasData(t)||X.hasData(t)},data:function(t,e,i){return G.access(t,e,i)},removeData:function(t,e){G.remove(t,e)},_data:function(t,e,i){return X.access(t,e,i)},_removeData:function(t,e){X.remove(t,e)}}),C.fn.extend({data:function(i,t){var e,n,s,o=this[0],r=o&amp;&amp;o.attributes;if(void 0!==i)return"object"==typeof i?this.each(function(){G.set(this,i)}):q(this,function(t){var e;return o&amp;&amp;void 0===t?void 0!==(e=G.get(o,i))||void 0!==(e=Z(o,i))?e:void 0:void this.each(function(){G.set(this,i,t)})},null,t,1&lt;arguments.length,null,!0);if(this.length&amp;&amp;(s=G.get(o),1===o.nodeType&amp;&amp;!X.get(o,"hasDataAttrs"))){for(e=r.length;e--;)r[e]&amp;&amp;0===(n=r[e].name).indexOf("data-")&amp;&amp;(n=$(n.slice(5)),Z(o,n,s[n]));X.set(o,"hasDataAttrs",!0)}return s},removeData:function(t){return this.each(function(){G.remove(this,t)})}}),C.extend({queue:function(t,e,i){var n;if(t)return e=(e||"fx")+"queue",n=X.get(t,e),i&amp;&amp;(!n||Array.isArray(i)?n=X.access(t,e,C.makeArray(i)):n.push(i)),n||[]},dequeue:function(t,e){e=e||"fx";var i=C.queue(t,e),n=i.length,s=i.shift(),o=C._queueHooks(t,e);"inprogress"===s&amp;&amp;(s=i.shift(),n--),s&amp;&amp;("fx"===e&amp;&amp;i.unshift("inprogress"),delete o.stop,s.call(t,function(){C.dequeue(t,e)},o)),!n&amp;&amp;o&amp;&amp;o.empty.fire()},_queueHooks:function(t,e){var i=e+"queueHooks";return X.get(t,i)||X.access(t,i,{empty:C.Callbacks("once memory").add(function(){X.remove(t,[e+"queue",i])})})}}),C.fn.extend({queue:function(e,i){var t=2;return"string"!=typeof e&amp;&amp;(i=e,e="fx",t--),arguments.length&lt;t?C.queue(this[0],e):void 0===i?this:this.each(function(){var t=C.queue(this,e,i);C._queueHooks(this,e),"fx"===e&amp;&amp;"inprogress"!==t[0]&amp;&amp;C.dequeue(this,e)})},dequeue:function(t){return this.each(function(){C.dequeue(this,t)})},clearQueue:function(t){return this.queue(t||"fx",[])},promise:function(t,e){function i(){--s||o.resolveWith(r,[r])}var n,s=1,o=C.Deferred(),r=this,a=this.length;for("string"!=typeof t&amp;&amp;(e=t,t=void 0),t=t||"fx";a--;)(n=X.get(r[a],t+"queueHooks"))&amp;&amp;n.empty&amp;&amp;(s++,n.empty.add(i));return i(),o.promise(e)}});var tt=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,et=new RegExp("^(?:([+-])=|)("+tt+")([a-z%]*)$","i"),it=["Top","Right","Bottom","Left"],nt=D.documentElement,st=function(t){return C.contains(t.ownerDocument,t)},ot={composed:!0};nt.getRootNode&amp;&amp;(st=function(t){return C.contains(t.ownerDocument,t)||t.getRootNode(ot)===t.ownerDocument});var rt=function(t,e){return"none"===(t=e||t).style.display||""===t.style.display&amp;&amp;st(t)&amp;&amp;"none"===C.css(t,"display")};function at(t,e,i,n){var s,o,r=20,a=n?function(){return n.cur()}:function(){return C.css(t,e,"")},l=a(),h=i&amp;&amp;i[3]||(C.cssNumber[e]?"":"px"),u=t.nodeType&amp;&amp;(C.cssNumber[e]||"px"!==h&amp;&amp;+l)&amp;&amp;et.exec(C.css(t,e));if(u&amp;&amp;u[3]!==h){for(l/=2,h=h||u[3],u=+l||1;r--;)C.style(t,e,u+h),(1-o)*(1-(o=a()/l||.5))&lt;=0&amp;&amp;(r=0),u/=o;u*=2,C.style(t,e,u+h),i=i||[]}return i&amp;&amp;(u=+u||+l||0,s=i[1]?u+(i[1]+1)*i[2]:+i[2],n&amp;&amp;(n.unit=h,n.start=u,n.end=s)),s}var lt={};function ht(t,e){for(var i,n,s,o,r,a,l,h=[],u=0,c=t.length;u&lt;c;u++)(n=t[u]).style&amp;&amp;(i=n.style.display,e?("none"===i&amp;&amp;(h[u]=X.get(n,"display")||null,h[u]||(n.style.display="")),""===n.style.display&amp;&amp;rt(n)&amp;&amp;(h[u]=(l=a=r=o=void 0,r=(s=n).ownerDocument,a=s.nodeName,(l=lt[a])||(o=r.body.appendChild(r.createElement(a)),l=C.css(o,"display"),o.parentNode.removeChild(o),"none"===l&amp;&amp;(l="block"),lt[a]=l)))):"none"!==i&amp;&amp;(h[u]="none",X.set(n,"display",i)));for(u=0;u&lt;c;u++)null!=h[u]&amp;&amp;(t[u].style.display=h[u]);return t}C.fn.extend({show:function(){return ht(this,!0)},hide:function(){return ht(this)},toggle:function(t){return"boolean"==typeof t?t?this.show():this.hide():this.each(function(){rt(this)?C(this).show():C(this).hide()})}});var ut,ct,dt=/^(?:checkbox|radio)$/i,pt=/&lt;([a-z][^\/\0&gt;\x20\t\r\n\f]*)/i,ft=/^$|^module$|\/(?:java|ecma)script/i;ut=D.createDocumentFragment().appendChild(D.createElement("div")),(ct=D.createElement("input")).setAttribute("type","radio"),ct.setAttribute("checked","checked"),ct.setAttribute("name","t"),ut.appendChild(ct),y.checkClone=ut.cloneNode(!0).cloneNode(!0).lastChild.checked,ut.innerHTML="&lt;textarea&gt;x&lt;/textarea&gt;",y.noCloneChecked=!!ut.cloneNode(!0).lastChild.defaultValue,ut.innerHTML="&lt;option&gt;&lt;/option&gt;",y.option=!!ut.lastChild;var gt={thead:[1,"&lt;table&gt;","&lt;/table&gt;"],col:[2,"&lt;table&gt;&lt;colgroup&gt;","&lt;/colgroup&gt;&lt;/table&gt;"],tr:[2,"&lt;table&gt;&lt;tbody&gt;","&lt;/tbody&gt;&lt;/table&gt;"],td:[3,"&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;","&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;"],_default:[0,"",""]};function mt(t,e){var i=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||"*"):void 0!==t.querySelectorAll?t.querySelectorAll(e||"*"):[];return void 0===e||e&amp;&amp;S(t,e)?C.merge([t],i):i}function vt(t,e){for(var i=0,n=t.length;i&lt;n;i++)X.set(t[i],"globalEval",!e||X.get(e[i],"globalEval"))}gt.tbody=gt.tfoot=gt.colgroup=gt.caption=gt.thead,gt.th=gt.td,y.option||(gt.optgroup=gt.option=[1,"&lt;select multiple='multiple'&gt;","&lt;/select&gt;"]);var yt=/&lt;|&amp;#?\w+;/;function _t(t,e,i,n,s){for(var o,r,a,l,h,u,c=e.createDocumentFragment(),d=[],p=0,f=t.length;p&lt;f;p++)if((o=t[p])||0===o)if("object"===w(o))C.merge(d,o.nodeType?[o]:o);else if(yt.test(o)){for(r=r||c.appendChild(e.createElement("div")),a=(pt.exec(o)||["",""])[1].toLowerCase(),l=gt[a]||gt._default,r.innerHTML=l[1]+C.htmlPrefilter(o)+l[2],u=l[0];u--;)r=r.lastChild;C.merge(d,r.childNodes),(r=c.firstChild).textContent=""}else d.push(e.createTextNode(o));for(c.textContent="",p=0;o=d[p++];)if(n&amp;&amp;-1&lt;C.inArray(o,n))s&amp;&amp;s.push(o);else if(h=st(o),r=mt(c.appendChild(o),"script"),h&amp;&amp;vt(r),i)for(u=0;o=r[u++];)ft.test(o.type||"")&amp;&amp;i.push(o);return c}var bt=/^([^.]*)(?:\.(.+)|)/;function wt(){return!0}function xt(){return!1}function kt(t,e){return t===function(){try{return D.activeElement}catch(t){}}()==("focus"===e)}function Dt(t,e,i,n,s,o){var r,a;if("object"==typeof e){for(a in"string"!=typeof i&amp;&amp;(n=n||i,i=void 0),e)Dt(t,a,i,n,e[a],o);return t}if(null==n&amp;&amp;null==s?(s=i,n=i=void 0):null==s&amp;&amp;("string"==typeof i?(s=n,n=void 0):(s=n,n=i,i=void 0)),!1===s)s=xt;else if(!s)return t;return 1===o&amp;&amp;(r=s,(s=function(t){return C().off(t),r.apply(this,arguments)}).guid=r.guid||(r.guid=C.guid++)),t.each(function(){C.event.add(this,e,s,n,i)})}function Ct(t,s,o){o?(X.set(t,s,!1),C.event.add(t,s,{namespace:!1,handler:function(t){var e,i,n=X.get(this,s);if(1&amp;t.isTrigger&amp;&amp;this[s]){if(n.length)(C.event.special[s]||{}).delegateType&amp;&amp;t.stopPropagation();else if(n=a.call(arguments),X.set(this,s,n),e=o(this,s),this[s](),n!==(i=X.get(this,s))||e?X.set(this,s,!1):i={},n!==i)return t.stopImmediatePropagation(),t.preventDefault(),i&amp;&amp;i.value}else n.length&amp;&amp;(X.set(this,s,{value:C.event.trigger(C.extend(n[0],C.Event.prototype),n.slice(1),this)}),t.stopImmediatePropagation())}})):void 0===X.get(t,s)&amp;&amp;C.event.add(t,s,wt)}C.event={global:{},add:function(e,t,i,n,s){var o,r,a,l,h,u,c,d,p,f,g,m=X.get(e);if(K(e))for(i.handler&amp;&amp;(i=(o=i).handler,s=o.selector),s&amp;&amp;C.find.matchesSelector(nt,s),i.guid||(i.guid=C.guid++),(l=m.events)||(l=m.events=Object.create(null)),(r=m.handle)||(r=m.handle=function(t){return void 0!==C&amp;&amp;C.event.triggered!==t.type?C.event.dispatch.apply(e,arguments):void 0}),h=(t=(t||"").match(O)||[""]).length;h--;)p=g=(a=bt.exec(t[h])||[])[1],f=(a[2]||"").split(".").sort(),p&amp;&amp;(c=C.event.special[p]||{},p=(s?c.delegateType:c.bindType)||p,c=C.event.special[p]||{},u=C.extend({type:p,origType:g,data:n,handler:i,guid:i.guid,selector:s,needsContext:s&amp;&amp;C.expr.match.needsContext.test(s),namespace:f.join(".")},o),(d=l[p])||((d=l[p]=[]).delegateCount=0,c.setup&amp;&amp;!1!==c.setup.call(e,n,f,r)||e.addEventListener&amp;&amp;e.addEventListener(p,r)),c.add&amp;&amp;(c.add.call(e,u),u.handler.guid||(u.handler.guid=i.guid)),s?d.splice(d.delegateCount++,0,u):d.push(u),C.event.global[p]=!0)},remove:function(t,e,i,n,s){var o,r,a,l,h,u,c,d,p,f,g,m=X.hasData(t)&amp;&amp;X.get(t);if(m&amp;&amp;(l=m.events)){for(h=(e=(e||"").match(O)||[""]).length;h--;)if(p=g=(a=bt.exec(e[h])||[])[1],f=(a[2]||"").split(".").sort(),p){for(c=C.event.special[p]||{},d=l[p=(n?c.delegateType:c.bindType)||p]||[],a=a[2]&amp;&amp;new RegExp("(^|\\.)"+f.join("\\.(?:.*\\.|)")+"(\\.|$)"),r=o=d.length;o--;)u=d[o],!s&amp;&amp;g!==u.origType||i&amp;&amp;i.guid!==u.guid||a&amp;&amp;!a.test(u.namespace)||n&amp;&amp;n!==u.selector&amp;&amp;("**"!==n||!u.selector)||(d.splice(o,1),u.selector&amp;&amp;d.delegateCount--,c.remove&amp;&amp;c.remove.call(t,u));r&amp;&amp;!d.length&amp;&amp;(c.teardown&amp;&amp;!1!==c.teardown.call(t,f,m.handle)||C.removeEvent(t,p,m.handle),delete l[p])}else for(p in l)C.event.remove(t,p+e[h],i,n,!0);C.isEmptyObject(l)&amp;&amp;X.remove(t,"handle events")}},dispatch:function(t){var e,i,n,s,o,r,a=new Array(arguments.length),l=C.event.fix(t),h=(X.get(this,"events")||Object.create(null))[l.type]||[],u=C.event.special[l.type]||{};for(a[0]=l,e=1;e&lt;arguments.length;e++)a[e]=arguments[e];if(l.delegateTarget=this,!u.preDispatch||!1!==u.preDispatch.call(this,l)){for(r=C.event.handlers.call(this,l,h),e=0;(s=r[e++])&amp;&amp;!l.isPropagationStopped();)for(l.currentTarget=s.elem,i=0;(o=s.handlers[i++])&amp;&amp;!l.isImmediatePropagationStopped();)l.rnamespace&amp;&amp;!1!==o.namespace&amp;&amp;!l.rnamespace.test(o.namespace)||(l.handleObj=o,l.data=o.data,void 0!==(n=((C.event.special[o.origType]||{}).handle||o.handler).apply(s.elem,a))&amp;&amp;!1===(l.result=n)&amp;&amp;(l.preventDefault(),l.stopPropagation()));return u.postDispatch&amp;&amp;u.postDispatch.call(this,l),l.result}},handlers:function(t,e){var i,n,s,o,r,a=[],l=e.delegateCount,h=t.target;if(l&amp;&amp;h.nodeType&amp;&amp;!("click"===t.type&amp;&amp;1&lt;=t.button))for(;h!==this;h=h.parentNode||this)if(1===h.nodeType&amp;&amp;("click"!==t.type||!0!==h.disabled)){for(o=[],r={},i=0;i&lt;l;i++)void 0===r[s=(n=e[i]).selector+" "]&amp;&amp;(r[s]=n.needsContext?-1&lt;C(s,this).index(h):C.find(s,this,null,[h]).length),r[s]&amp;&amp;o.push(n);o.length&amp;&amp;a.push({elem:h,handlers:o})}return h=this,l&lt;e.length&amp;&amp;a.push({elem:h,handlers:e.slice(l)}),a},addProp:function(e,t){Object.defineProperty(C.Event.prototype,e,{enumerable:!0,configurable:!0,get:_(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(t){return t[C.expando]?t:new C.Event(t)},special:{load:{noBubble:!0},click:{setup:function(t){var e=this||t;return dt.test(e.type)&amp;&amp;e.click&amp;&amp;S(e,"input")&amp;&amp;Ct(e,"click",wt),!1},trigger:function(t){var e=this||t;return dt.test(e.type)&amp;&amp;e.click&amp;&amp;S(e,"input")&amp;&amp;Ct(e,"click"),!0},_default:function(t){var e=t.target;return dt.test(e.type)&amp;&amp;e.click&amp;&amp;S(e,"input")&amp;&amp;X.get(e,"click")||S(e,"a")}},beforeunload:{postDispatch:function(t){void 0!==t.result&amp;&amp;t.originalEvent&amp;&amp;(t.originalEvent.returnValue=t.result)}}}},C.removeEvent=function(t,e,i){t.removeEventListener&amp;&amp;t.removeEventListener(e,i)},C.Event=function(t,e){if(!(this instanceof C.Event))return new C.Event(t,e);t&amp;&amp;t.type?(this.originalEvent=t,this.type=t.type,this.isDefaultPrevented=t.defaultPrevented||void 0===t.defaultPrevented&amp;&amp;!1===t.returnValue?wt:xt,this.target=t.target&amp;&amp;3===t.target.nodeType?t.target.parentNode:t.target,this.currentTarget=t.currentTarget,this.relatedTarget=t.relatedTarget):this.type=t,e&amp;&amp;C.extend(this,e),this.timeStamp=t&amp;&amp;t.timeStamp||Date.now(),this[C.expando]=!0},C.Event.prototype={constructor:C.Event,isDefaultPrevented:xt,isPropagationStopped:xt,isImmediatePropagationStopped:xt,isSimulated:!1,preventDefault:function(){var t=this.originalEvent;this.isDefaultPrevented=wt,t&amp;&amp;!this.isSimulated&amp;&amp;t.preventDefault()},stopPropagation:function(){var t=this.originalEvent;this.isPropagationStopped=wt,t&amp;&amp;!this.isSimulated&amp;&amp;t.stopPropagation()},stopImmediatePropagation:function(){var t=this.originalEvent;this.isImmediatePropagationStopped=wt,t&amp;&amp;!this.isSimulated&amp;&amp;t.stopImmediatePropagation(),this.stopPropagation()}},C.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},C.event.addProp),C.each({focus:"focusin",blur:"focusout"},function(t,e){C.event.special[t]={setup:function(){return Ct(this,t,kt),!1},trigger:function(){return Ct(this,t),!0},_default:function(){return!0},delegateType:e}}),C.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(t,s){C.event.special[t]={delegateType:s,bindType:s,handle:function(t){var e,i=t.relatedTarget,n=t.handleObj;return i&amp;&amp;(i===this||C.contains(this,i))||(t.type=n.origType,e=n.handler.apply(this,arguments),t.type=s),e}}}),C.fn.extend({on:function(t,e,i,n){return Dt(this,t,e,i,n)},one:function(t,e,i,n){return Dt(this,t,e,i,n,1)},off:function(t,e,i){var n,s;if(t&amp;&amp;t.preventDefault&amp;&amp;t.handleObj)return n=t.handleObj,C(t.delegateTarget).off(n.namespace?n.origType+"."+n.namespace:n.origType,n.selector,n.handler),this;if("object"!=typeof t)return!1!==e&amp;&amp;"function"!=typeof e||(i=e,e=void 0),!1===i&amp;&amp;(i=xt),this.each(function(){C.event.remove(this,t,i,e)});for(s in t)this.off(s,e,t[s]);return this}});var Tt=/&lt;script|&lt;style|&lt;link/i,St=/checked\s*(?:[^=]|=\s*.checked.)/i,Mt=/^\s*&lt;!(?:\[CDATA\[|--)|(?:\]\]|--)&gt;\s*$/g;function It(t,e){return S(t,"table")&amp;&amp;S(11!==e.nodeType?e:e.firstChild,"tr")&amp;&amp;C(t).children("tbody")[0]||t}function Pt(t){return t.type=(null!==t.getAttribute("type"))+"/"+t.type,t}function At(t){return"true/"===(t.type||"").slice(0,5)?t.type=t.type.slice(5):t.removeAttribute("type"),t}function Et(t,e){var i,n,s,o,r,a;if(1===e.nodeType){if(X.hasData(t)&amp;&amp;(a=X.get(t).events))for(s in X.remove(e,"handle events"),a)for(i=0,n=a[s].length;i&lt;n;i++)C.event.add(e,s,a[s][i]);G.hasData(t)&amp;&amp;(o=G.access(t),r=C.extend({},o),G.set(e,r))}}function Nt(i,n,s,o){n=m(n);var t,e,r,a,l,h,u=0,c=i.length,d=c-1,p=n[0],f=_(p);if(f||1&lt;c&amp;&amp;"string"==typeof p&amp;&amp;!y.checkClone&amp;&amp;St.test(p))return i.each(function(t){var e=i.eq(t);f&amp;&amp;(n[0]=p.call(this,t,e.html())),Nt(e,n,s,o)});if(c&amp;&amp;(e=(t=_t(n,i[0].ownerDocument,!1,i,o)).firstChild,1===t.childNodes.length&amp;&amp;(t=e),e||o)){for(a=(r=C.map(mt(t,"script"),Pt)).length;u&lt;c;u++)l=t,u!==d&amp;&amp;(l=C.clone(l,!0,!0),a&amp;&amp;C.merge(r,mt(l,"script"))),s.call(i[u],l,u);if(a)for(h=r[r.length-1].ownerDocument,C.map(r,At),u=0;u&lt;a;u++)l=r[u],ft.test(l.type||"")&amp;&amp;!X.access(l,"globalEval")&amp;&amp;C.contains(h,l)&amp;&amp;(l.src&amp;&amp;"module"!==(l.type||"").toLowerCase()?C._evalUrl&amp;&amp;!l.noModule&amp;&amp;C._evalUrl(l.src,{nonce:l.nonce||l.getAttribute("nonce")},h):b(l.textContent.replace(Mt,""),l,h))}return i}function Ht(t,e,i){for(var n,s=e?C.filter(e,t):t,o=0;null!=(n=s[o]);o++)i||1!==n.nodeType||C.cleanData(mt(n)),n.parentNode&amp;&amp;(i&amp;&amp;st(n)&amp;&amp;vt(mt(n,"script")),n.parentNode.removeChild(n));return t}C.extend({htmlPrefilter:function(t){return t},clone:function(t,e,i){var n,s,o,r,a,l,h,u=t.cloneNode(!0),c=st(t);if(!(y.noCloneChecked||1!==t.nodeType&amp;&amp;11!==t.nodeType||C.isXMLDoc(t)))for(r=mt(u),n=0,s=(o=mt(t)).length;n&lt;s;n++)a=o[n],l=r[n],h=void 0,"input"===(h=l.nodeName.toLowerCase())&amp;&amp;dt.test(a.type)?l.checked=a.checked:"input"!==h&amp;&amp;"textarea"!==h||(l.defaultValue=a.defaultValue);if(e)if(i)for(o=o||mt(t),r=r||mt(u),n=0,s=o.length;n&lt;s;n++)Et(o[n],r[n]);else Et(t,u);return 0&lt;(r=mt(u,"script")).length&amp;&amp;vt(r,!c&amp;&amp;mt(t,"script")),u},cleanData:function(t){for(var e,i,n,s=C.event.special,o=0;void 0!==(i=t[o]);o++)if(K(i)){if(e=i[X.expando]){if(e.events)for(n in e.events)s[n]?C.event.remove(i,n):C.removeEvent(i,n,e.handle);i[X.expando]=void 0}i[G.expando]&amp;&amp;(i[G.expando]=void 0)}}}),C.fn.extend({detach:function(t){return Ht(this,t,!0)},remove:function(t){return Ht(this,t)},text:function(t){return q(this,function(t){return void 0===t?C.text(this):this.empty().each(function(){1!==this.nodeType&amp;&amp;11!==this.nodeType&amp;&amp;9!==this.nodeType||(this.textContent=t)})},null,t,arguments.length)},append:function(){return Nt(this,arguments,function(t){1!==this.nodeType&amp;&amp;11!==this.nodeType&amp;&amp;9!==this.nodeType||It(this,t).appendChild(t)})},prepend:function(){return Nt(this,arguments,function(t){var e;1!==this.nodeType&amp;&amp;11!==this.nodeType&amp;&amp;9!==this.nodeType||(e=It(this,t)).insertBefore(t,e.firstChild)})},before:function(){return Nt(this,arguments,function(t){this.parentNode&amp;&amp;this.parentNode.insertBefore(t,this)})},after:function(){return Nt(this,arguments,function(t){this.parentNode&amp;&amp;this.parentNode.insertBefore(t,this.nextSibling)})},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&amp;&amp;(C.cleanData(mt(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null!=t&amp;&amp;t,e=null==e?t:e,this.map(function(){return C.clone(this,t,e)})},html:function(t){return q(this,function(t){var e=this[0]||{},i=0,n=this.length;if(void 0===t&amp;&amp;1===e.nodeType)return e.innerHTML;if("string"==typeof t&amp;&amp;!Tt.test(t)&amp;&amp;!gt[(pt.exec(t)||["",""])[1].toLowerCase()]){t=C.htmlPrefilter(t);try{for(;i&lt;n;i++)1===(e=this[i]||{}).nodeType&amp;&amp;(C.cleanData(mt(e,!1)),e.innerHTML=t);e=0}catch(t){}}e&amp;&amp;this.empty().append(t)},null,t,arguments.length)},replaceWith:function(){var i=[];return Nt(this,arguments,function(t){var e=this.parentNode;C.inArray(this,i)&lt;0&amp;&amp;(C.cleanData(mt(this)),e&amp;&amp;e.replaceChild(t,this))},i)}}),C.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(t,r){C.fn[t]=function(t){for(var e,i=[],n=C(t),s=n.length-1,o=0;o&lt;=s;o++)e=o===s?this:this.clone(!0),C(n[o])[r](e),l.apply(i,e.get());return this.pushStack(i)}});function Ot(t,e,i){var n,s,o={};for(s in e)o[s]=t.style[s],t.style[s]=e[s];for(s in n=i.call(t),e)t.style[s]=o[s];return n}var zt,Wt,Lt,jt,Ft,Rt,qt,Bt,Yt=new RegExp("^("+tt+")(?!px)[a-z%]+$","i"),Ut=function(t){var e=t.ownerDocument.defaultView;return e&amp;&amp;e.opener||(e=k),e.getComputedStyle(t)},$t=new RegExp(it.join("|"),"i");function Kt(){var t;Bt&amp;&amp;(qt.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",Bt.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",nt.appendChild(qt).appendChild(Bt),t=k.getComputedStyle(Bt),zt="1%"!==t.top,Rt=12===Vt(t.marginLeft),Bt.style.right="60%",jt=36===Vt(t.right),Wt=36===Vt(t.width),Bt.style.position="absolute",Lt=12===Vt(Bt.offsetWidth/3),nt.removeChild(qt),Bt=null)}function Vt(t){return Math.round(parseFloat(t))}function Xt(t,e,i){var n,s,o,r,a=t.style;return(i=i||Ut(t))&amp;&amp;(""!==(r=i.getPropertyValue(e)||i[e])||st(t)||(r=C.style(t,e)),!y.pixelBoxStyles()&amp;&amp;Yt.test(r)&amp;&amp;$t.test(e)&amp;&amp;(n=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=i.width,a.width=n,a.minWidth=s,a.maxWidth=o)),void 0!==r?r+"":r}function Gt(t,e){return{get:function(){if(!t())return(this.get=e).apply(this,arguments);delete this.get}}}qt=D.createElement("div"),(Bt=D.createElement("div")).style&amp;&amp;(Bt.style.backgroundClip="content-box",Bt.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===Bt.style.backgroundClip,C.extend(y,{boxSizingReliable:function(){return Kt(),Wt},pixelBoxStyles:function(){return Kt(),jt},pixelPosition:function(){return Kt(),zt},reliableMarginLeft:function(){return Kt(),Rt},scrollboxSize:function(){return Kt(),Lt},reliableTrDimensions:function(){var t,e,i,n;return null==Ft&amp;&amp;(t=D.createElement("table"),e=D.createElement("tr"),i=D.createElement("div"),t.style.cssText="position:absolute;left:-11111px;border-collapse:separate",e.style.cssText="border:1px solid",e.style.height="1px",i.style.height="9px",i.style.display="block",nt.appendChild(t).appendChild(e).appendChild(i),n=k.getComputedStyle(e),Ft=parseInt(n.height,10)+parseInt(n.borderTopWidth,10)+parseInt(n.borderBottomWidth,10)===e.offsetHeight,nt.removeChild(t)),Ft}}));var Jt=["Webkit","Moz","ms"],Qt=D.createElement("div").style,Zt={};function te(t){var e=C.cssProps[t]||Zt[t];return e||(t in Qt?t:Zt[t]=function(t){for(var e=t[0].toUpperCase()+t.slice(1),i=Jt.length;i--;)if((t=Jt[i]+e)in Qt)return t}(t)||t)}var ee=/^(none|table(?!-c[ea]).+)/,ie=/^--/,ne={position:"absolute",visibility:"hidden",display:"block"},se={letterSpacing:"0",fontWeight:"400"};function oe(t,e,i){var n=et.exec(e);return n?Math.max(0,n[2]-(i||0))+(n[3]||"px"):e}function re(t,e,i,n,s,o){var r="width"===e?1:0,a=0,l=0;if(i===(n?"border":"content"))return 0;for(;r&lt;4;r+=2)"margin"===i&amp;&amp;(l+=C.css(t,i+it[r],!0,s)),n?("content"===i&amp;&amp;(l-=C.css(t,"padding"+it[r],!0,s)),"margin"!==i&amp;&amp;(l-=C.css(t,"border"+it[r]+"Width",!0,s))):(l+=C.css(t,"padding"+it[r],!0,s),"padding"!==i?l+=C.css(t,"border"+it[r]+"Width",!0,s):a+=C.css(t,"border"+it[r]+"Width",!0,s));return!n&amp;&amp;0&lt;=o&amp;&amp;(l+=Math.max(0,Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-o-l-a-.5))||0),l}function ae(t,e,i){var n=Ut(t),s=(!y.boxSizingReliable()||i)&amp;&amp;"border-box"===C.css(t,"boxSizing",!1,n),o=s,r=Xt(t,e,n),a="offset"+e[0].toUpperCase()+e.slice(1);if(Yt.test(r)){if(!i)return r;r="auto"}return(!y.boxSizingReliable()&amp;&amp;s||!y.reliableTrDimensions()&amp;&amp;S(t,"tr")||"auto"===r||!parseFloat(r)&amp;&amp;"inline"===C.css(t,"display",!1,n))&amp;&amp;t.getClientRects().length&amp;&amp;(s="border-box"===C.css(t,"boxSizing",!1,n),(o=a in t)&amp;&amp;(r=t[a])),(r=parseFloat(r)||0)+re(t,e,i||(s?"border":"content"),o,n,r)+"px"}function le(t,e,i,n,s){return new le.prototype.init(t,e,i,n,s)}C.extend({cssHooks:{opacity:{get:function(t,e){if(e){var i=Xt(t,"opacity");return""===i?"1":i}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(t,e,i,n){if(t&amp;&amp;3!==t.nodeType&amp;&amp;8!==t.nodeType&amp;&amp;t.style){var s,o,r,a=$(e),l=ie.test(e),h=t.style;if(l||(e=te(a)),r=C.cssHooks[e]||C.cssHooks[a],void 0===i)return r&amp;&amp;"get"in r&amp;&amp;void 0!==(s=r.get(t,!1,n))?s:h[e];"string"===(o=typeof i)&amp;&amp;(s=et.exec(i))&amp;&amp;s[1]&amp;&amp;(i=at(t,e,s),o="number"),null!=i&amp;&amp;i==i&amp;&amp;("number"!==o||l||(i+=s&amp;&amp;s[3]||(C.cssNumber[a]?"":"px")),y.clearCloneStyle||""!==i||0!==e.indexOf("background")||(h[e]="inherit"),r&amp;&amp;"set"in r&amp;&amp;void 0===(i=r.set(t,i,n))||(l?h.setProperty(e,i):h[e]=i))}},css:function(t,e,i,n){var s,o,r,a=$(e);return ie.test(e)||(e=te(a)),(r=C.cssHooks[e]||C.cssHooks[a])&amp;&amp;"get"in r&amp;&amp;(s=r.get(t,!0,i)),void 0===s&amp;&amp;(s=Xt(t,e,n)),"normal"===s&amp;&amp;e in se&amp;&amp;(s=se[e]),""===i||i?(o=parseFloat(s),!0===i||isFinite(o)?o||0:s):s}}),C.each(["height","width"],function(t,l){C.cssHooks[l]={get:function(t,e,i){if(e)return!ee.test(C.css(t,"display"))||t.getClientRects().length&amp;&amp;t.getBoundingClientRect().width?ae(t,l,i):Ot(t,ne,function(){return ae(t,l,i)})},set:function(t,e,i){var n,s=Ut(t),o=!y.scrollboxSize()&amp;&amp;"absolute"===s.position,r=(o||i)&amp;&amp;"border-box"===C.css(t,"boxSizing",!1,s),a=i?re(t,l,i,r,s):0;return r&amp;&amp;o&amp;&amp;(a-=Math.ceil(t["offset"+l[0].toUpperCase()+l.slice(1)]-parseFloat(s[l])-re(t,l,"border",!1,s)-.5)),a&amp;&amp;(n=et.exec(e))&amp;&amp;"px"!==(n[3]||"px")&amp;&amp;(t.style[l]=e,e=C.css(t,l)),oe(0,e,a)}}}),C.cssHooks.marginLeft=Gt(y.reliableMarginLeft,function(t,e){if(e)return(parseFloat(Xt(t,"marginLeft"))||t.getBoundingClientRect().left-Ot(t,{marginLeft:0},function(){return t.getBoundingClientRect().left}))+"px"}),C.each({margin:"",padding:"",border:"Width"},function(s,o){C.cssHooks[s+o]={expand:function(t){for(var e=0,i={},n="string"==typeof t?t.split(" "):[t];e&lt;4;e++)i[s+it[e]+o]=n[e]||n[e-2]||n[0];return i}},"margin"!==s&amp;&amp;(C.cssHooks[s+o].set=oe)}),C.fn.extend({css:function(t,e){return q(this,function(t,e,i){var n,s,o={},r=0;if(Array.isArray(e)){for(n=Ut(t),s=e.length;r&lt;s;r++)o[e[r]]=C.css(t,e[r],!1,n);return o}return void 0!==i?C.style(t,e,i):C.css(t,e)},t,e,1&lt;arguments.length)}}),(C.Tween=le).prototype={constructor:le,init:function(t,e,i,n,s,o){this.elem=t,this.prop=i,this.easing=s||C.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=n,this.unit=o||(C.cssNumber[i]?"":"px")},cur:function(){var t=le.propHooks[this.prop];return t&amp;&amp;t.get?t.get(this):le.propHooks._default.get(this)},run:function(t){var e,i=le.propHooks[this.prop];return this.options.duration?this.pos=e=C.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&amp;&amp;this.options.step.call(this.elem,this.now,this),i&amp;&amp;i.set?i.set(this):le.propHooks._default.set(this),this}},le.prototype.init.prototype=le.prototype,le.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&amp;&amp;null==t.elem.style[t.prop]?t.elem[t.prop]:(e=C.css(t.elem,t.prop,""))&amp;&amp;"auto"!==e?e:0},set:function(t){C.fx.step[t.prop]?C.fx.step[t.prop](t):1!==t.elem.nodeType||!C.cssHooks[t.prop]&amp;&amp;null==t.elem.style[te(t.prop)]?t.elem[t.prop]=t.now:C.style(t.elem,t.prop,t.now+t.unit)}}},le.propHooks.scrollTop=le.propHooks.scrollLeft={set:function(t){t.elem.nodeType&amp;&amp;t.elem.parentNode&amp;&amp;(t.elem[t.prop]=t.now)}},C.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:"swing"},C.fx=le.prototype.init,C.fx.step={};var he,ue,ce,de,pe=/^(?:toggle|show|hide)$/,fe=/queueHooks$/;function ge(){ue&amp;&amp;(!1===D.hidden&amp;&amp;k.requestAnimationFrame?k.requestAnimationFrame(ge):k.setTimeout(ge,C.fx.interval),C.fx.tick())}function me(){return k.setTimeout(function(){he=void 0}),he=Date.now()}function ve(t,e){var i,n=0,s={height:t};for(e=e?1:0;n&lt;4;n+=2-e)s["margin"+(i=it[n])]=s["padding"+i]=t;return e&amp;&amp;(s.opacity=s.width=t),s}function ye(t,e,i){for(var n,s=(_e.tweeners[e]||[]).concat(_e.tweeners["*"]),o=0,r=s.length;o&lt;r;o++)if(n=s[o].call(i,e,t))return n}function _e(o,t,e){var i,r,n=0,s=_e.prefilters.length,a=C.Deferred().always(function(){delete l.elem}),l=function(){if(r)return!1;for(var t=he||me(),e=Math.max(0,h.startTime+h.duration-t),i=1-(e/h.duration||0),n=0,s=h.tweens.length;n&lt;s;n++)h.tweens[n].run(i);return a.notifyWith(o,[h,i,e]),i&lt;1&amp;&amp;s?e:(s||a.notifyWith(o,[h,1,0]),a.resolveWith(o,[h]),!1)},h=a.promise({elem:o,props:C.extend({},t),opts:C.extend(!0,{specialEasing:{},easing:C.easing._default},e),originalProperties:t,originalOptions:e,startTime:he||me(),duration:e.duration,tweens:[],createTween:function(t,e){var i=C.Tween(o,h.opts,t,e,h.opts.specialEasing[t]||h.opts.easing);return h.tweens.push(i),i},stop:function(t){var e=0,i=t?h.tweens.length:0;if(r)return this;for(r=!0;e&lt;i;e++)h.tweens[e].run(1);return t?(a.notifyWith(o,[h,1,0]),a.resolveWith(o,[h,t])):a.rejectWith(o,[h,t]),this}}),u=h.props;for(!function(t,e){var i,n,s,o,r;for(i in t)if(s=e[n=$(i)],o=t[i],Array.isArray(o)&amp;&amp;(s=o[1],o=t[i]=o[0]),i!==n&amp;&amp;(t[n]=o,delete t[i]),(r=C.cssHooks[n])&amp;&amp;"expand"in r)for(i in o=r.expand(o),delete t[n],o)i in t||(t[i]=o[i],e[i]=s);else e[n]=s}(u,h.opts.specialEasing);n&lt;s;n++)if(i=_e.prefilters[n].call(h,o,u,h.opts))return _(i.stop)&amp;&amp;(C._queueHooks(h.elem,h.opts.queue).stop=i.stop.bind(i)),i;return C.map(u,ye,h),_(h.opts.start)&amp;&amp;h.opts.start.call(o,h),h.progress(h.opts.progress).done(h.opts.done,h.opts.complete).fail(h.opts.fail).always(h.opts.always),C.fx.timer(C.extend(l,{elem:o,anim:h,queue:h.opts.queue})),h}C.Animation=C.extend(_e,{tweeners:{"*":[function(t,e){var i=this.createTween(t,e);return at(i.elem,t,et.exec(e),i),i}]},tweener:function(t,e){for(var i,n=0,s=(t=_(t)?(e=t,["*"]):t.match(O)).length;n&lt;s;n++)i=t[n],_e.tweeners[i]=_e.tweeners[i]||[],_e.tweeners[i].unshift(e)},prefilters:[function(t,e,i){var n,s,o,r,a,l,h,u,c="width"in e||"height"in e,d=this,p={},f=t.style,g=t.nodeType&amp;&amp;rt(t),m=X.get(t,"fxshow");for(n in i.queue||(null==(r=C._queueHooks(t,"fx")).unqueued&amp;&amp;(r.unqueued=0,a=r.empty.fire,r.empty.fire=function(){r.unqueued||a()}),r.unqueued++,d.always(function(){d.always(function(){r.unqueued--,C.queue(t,"fx").length||r.empty.fire()})})),e)if(s=e[n],pe.test(s)){if(delete e[n],o=o||"toggle"===s,s===(g?"hide":"show")){if("show"!==s||!m||void 0===m[n])continue;g=!0}p[n]=m&amp;&amp;m[n]||C.style(t,n)}if((l=!C.isEmptyObject(e))||!C.isEmptyObject(p))for(n in c&amp;&amp;1===t.nodeType&amp;&amp;(i.overflow=[f.overflow,f.overflowX,f.overflowY],null==(h=m&amp;&amp;m.display)&amp;&amp;(h=X.get(t,"display")),"none"===(u=C.css(t,"display"))&amp;&amp;(h?u=h:(ht([t],!0),h=t.style.display||h,u=C.css(t,"display"),ht([t]))),("inline"===u||"inline-block"===u&amp;&amp;null!=h)&amp;&amp;"none"===C.css(t,"float")&amp;&amp;(l||(d.done(function(){f.display=h}),null==h&amp;&amp;(u=f.display,h="none"===u?"":u)),f.display="inline-block")),i.overflow&amp;&amp;(f.overflow="hidden",d.always(function(){f.overflow=i.overflow[0],f.overflowX=i.overflow[1],f.overflowY=i.overflow[2]})),l=!1,p)l||(m?"hidden"in m&amp;&amp;(g=m.hidden):m=X.access(t,"fxshow",{display:h}),o&amp;&amp;(m.hidden=!g),g&amp;&amp;ht([t],!0),d.done(function(){for(n in g||ht([t]),X.remove(t,"fxshow"),p)C.style(t,n,p[n])})),l=ye(g?m[n]:0,n,d),n in m||(m[n]=l.start,g&amp;&amp;(l.end=l.start,l.start=0))}],prefilter:function(t,e){e?_e.prefilters.unshift(t):_e.prefilters.push(t)}}),C.speed=function(t,e,i){var n=t&amp;&amp;"object"==typeof t?C.extend({},t):{complete:i||!i&amp;&amp;e||_(t)&amp;&amp;t,duration:t,easing:i&amp;&amp;e||e&amp;&amp;!_(e)&amp;&amp;e};return C.fx.off?n.duration=0:"number"!=typeof n.duration&amp;&amp;(n.duration in C.fx.speeds?n.duration=C.fx.speeds[n.duration]:n.duration=C.fx.speeds._default),null!=n.queue&amp;&amp;!0!==n.queue||(n.queue="fx"),n.old=n.complete,n.complete=function(){_(n.old)&amp;&amp;n.old.call(this),n.queue&amp;&amp;C.dequeue(this,n.queue)},n},C.fn.extend({fadeTo:function(t,e,i,n){return this.filter(rt).css("opacity",0).show().end().animate({opacity:e},t,i,n)},animate:function(e,t,i,n){function s(){var t=_e(this,C.extend({},e),r);(o||X.get(this,"finish"))&amp;&amp;t.stop(!0)}var o=C.isEmptyObject(e),r=C.speed(t,i,n);return s.finish=s,o||!1===r.queue?this.each(s):this.queue(r.queue,s)},stop:function(s,t,o){function r(t){var e=t.stop;delete t.stop,e(o)}return"string"!=typeof s&amp;&amp;(o=t,t=s,s=void 0),t&amp;&amp;this.queue(s||"fx",[]),this.each(function(){var t=!0,e=null!=s&amp;&amp;s+"queueHooks",i=C.timers,n=X.get(this);if(e)n[e]&amp;&amp;n[e].stop&amp;&amp;r(n[e]);else for(e in n)n[e]&amp;&amp;n[e].stop&amp;&amp;fe.test(e)&amp;&amp;r(n[e]);for(e=i.length;e--;)i[e].elem!==this||null!=s&amp;&amp;i[e].queue!==s||(i[e].anim.stop(o),t=!1,i.splice(e,1));!t&amp;&amp;o||C.dequeue(this,s)})},finish:function(r){return!1!==r&amp;&amp;(r=r||"fx"),this.each(function(){var t,e=X.get(this),i=e[r+"queue"],n=e[r+"queueHooks"],s=C.timers,o=i?i.length:0;for(e.finish=!0,C.queue(this,r,[]),n&amp;&amp;n.stop&amp;&amp;n.stop.call(this,!0),t=s.length;t--;)s[t].elem===this&amp;&amp;s[t].queue===r&amp;&amp;(s[t].anim.stop(!0),s.splice(t,1));for(t=0;t&lt;o;t++)i[t]&amp;&amp;i[t].finish&amp;&amp;i[t].finish.call(this);delete e.finish})}}),C.each(["toggle","show","hide"],function(t,n){var s=C.fn[n];C.fn[n]=function(t,e,i){return null==t||"boolean"==typeof t?s.apply(this,arguments):this.animate(ve(n,!0),t,e,i)}}),C.each({slideDown:ve("show"),slideUp:ve("hide"),slideToggle:ve("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(t,n){C.fn[t]=function(t,e,i){return this.animate(n,t,e,i)}}),C.timers=[],C.fx.tick=function(){var t,e=0,i=C.timers;for(he=Date.now();e&lt;i.length;e++)(t=i[e])()||i[e]!==t||i.splice(e--,1);i.length||C.fx.stop(),he=void 0},C.fx.timer=function(t){C.timers.push(t),C.fx.start()},C.fx.interval=13,C.fx.start=function(){ue||(ue=!0,ge())},C.fx.stop=function(){ue=null},C.fx.speeds={slow:600,fast:200,_default:400},C.fn.delay=function(n,t){return n=C.fx&amp;&amp;C.fx.speeds[n]||n,t=t||"fx",this.queue(t,function(t,e){var i=k.setTimeout(t,n);e.stop=function(){k.clearTimeout(i)}})},ce=D.createElement("input"),de=D.createElement("select").appendChild(D.createElement("option")),ce.type="checkbox",y.checkOn=""!==ce.value,y.optSelected=de.selected,(ce=D.createElement("input")).value="t",ce.type="radio",y.radioValue="t"===ce.value;var be,we=C.expr.attrHandle;C.fn.extend({attr:function(t,e){return q(this,C.attr,t,e,1&lt;arguments.length)},removeAttr:function(t){return this.each(function(){C.removeAttr(this,t)})}}),C.extend({attr:function(t,e,i){var n,s,o=t.nodeType;if(3!==o&amp;&amp;8!==o&amp;&amp;2!==o)return void 0===t.getAttribute?C.prop(t,e,i):(1===o&amp;&amp;C.isXMLDoc(t)||(s=C.attrHooks[e.toLowerCase()]||(C.expr.match.bool.test(e)?be:void 0)),void 0!==i?null===i?void C.removeAttr(t,e):s&amp;&amp;"set"in s&amp;&amp;void 0!==(n=s.set(t,i,e))?n:(t.setAttribute(e,i+""),i):!(s&amp;&amp;"get"in s&amp;&amp;null!==(n=s.get(t,e)))&amp;&amp;null==(n=C.find.attr(t,e))?void 0:n)},attrHooks:{type:{set:function(t,e){if(!y.radioValue&amp;&amp;"radio"===e&amp;&amp;S(t,"input")){var i=t.value;return t.setAttribute("type",e),i&amp;&amp;(t.value=i),e}}}},removeAttr:function(t,e){var i,n=0,s=e&amp;&amp;e.match(O);if(s&amp;&amp;1===t.nodeType)for(;i=s[n++];)t.removeAttribute(i)}}),be={set:function(t,e,i){return!1===e?C.removeAttr(t,i):t.setAttribute(i,i),i}},C.each(C.expr.match.bool.source.match(/\w+/g),function(t,e){var r=we[e]||C.find.attr;we[e]=function(t,e,i){var n,s,o=e.toLowerCase();return i||(s=we[o],we[o]=n,n=null!=r(t,e,i)?o:null,we[o]=s),n}});var xe=/^(?:input|select|textarea|button)$/i,ke=/^(?:a|area)$/i;function De(t){return(t.match(O)||[]).join(" ")}function Ce(t){return t.getAttribute&amp;&amp;t.getAttribute("class")||""}function Te(t){return Array.isArray(t)?t:"string"==typeof t&amp;&amp;t.match(O)||[]}C.fn.extend({prop:function(t,e){return q(this,C.prop,t,e,1&lt;arguments.length)},removeProp:function(t){return this.each(function(){delete this[C.propFix[t]||t]})}}),C.extend({prop:function(t,e,i){var n,s,o=t.nodeType;if(3!==o&amp;&amp;8!==o&amp;&amp;2!==o)return 1===o&amp;&amp;C.isXMLDoc(t)||(e=C.propFix[e]||e,s=C.propHooks[e]),void 0!==i?s&amp;&amp;"set"in s&amp;&amp;void 0!==(n=s.set(t,i,e))?n:t[e]=i:s&amp;&amp;"get"in s&amp;&amp;null!==(n=s.get(t,e))?n:t[e]},propHooks:{tabIndex:{get:function(t){var e=C.find.attr(t,"tabindex");return e?parseInt(e,10):xe.test(t.nodeName)||ke.test(t.nodeName)&amp;&amp;t.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),y.optSelected||(C.propHooks.selected={get:function(t){var e=t.parentNode;return e&amp;&amp;e.parentNode&amp;&amp;e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&amp;&amp;(e.selectedIndex,e.parentNode&amp;&amp;e.parentNode.selectedIndex)}}),C.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){C.propFix[this.toLowerCase()]=this}),C.fn.extend({addClass:function(e){var t,i,n,s,o,r,a,l=0;if(_(e))return this.each(function(t){C(this).addClass(e.call(this,t,Ce(this)))});if((t=Te(e)).length)for(;i=this[l++];)if(s=Ce(i),n=1===i.nodeType&amp;&amp;" "+De(s)+" "){for(r=0;o=t[r++];)n.indexOf(" "+o+" ")&lt;0&amp;&amp;(n+=o+" ");s!==(a=De(n))&amp;&amp;i.setAttribute("class",a)}return this},removeClass:function(e){var t,i,n,s,o,r,a,l=0;if(_(e))return this.each(function(t){C(this).removeClass(e.call(this,t,Ce(this)))});if(!arguments.length)return this.attr("class","");if((t=Te(e)).length)for(;i=this[l++];)if(s=Ce(i),n=1===i.nodeType&amp;&amp;" "+De(s)+" "){for(r=0;o=t[r++];)for(;-1&lt;n.indexOf(" "+o+" ");)n=n.replace(" "+o+" "," ");s!==(a=De(n))&amp;&amp;i.setAttribute("class",a)}return this},toggleClass:function(s,e){var o=typeof s,r="string"==o||Array.isArray(s);return"boolean"==typeof e&amp;&amp;r?e?this.addClass(s):this.removeClass(s):_(s)?this.each(function(t){C(this).toggleClass(s.call(this,t,Ce(this),e),e)}):this.each(function(){var t,e,i,n;if(r)for(e=0,i=C(this),n=Te(s);t=n[e++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==s&amp;&amp;"boolean"!=o||((t=Ce(this))&amp;&amp;X.set(this,"__className__",t),this.setAttribute&amp;&amp;this.setAttribute("class",!t&amp;&amp;!1!==s&amp;&amp;X.get(this,"__className__")||""))})},hasClass:function(t){for(var e,i=0,n=" "+t+" ";e=this[i++];)if(1===e.nodeType&amp;&amp;-1&lt;(" "+De(Ce(e))+" ").indexOf(n))return!0;return!1}});var Se=/\r/g;C.fn.extend({val:function(i){var n,t,s,e=this[0];return arguments.length?(s=_(i),this.each(function(t){var e;1===this.nodeType&amp;&amp;(null==(e=s?i.call(this,t,C(this).val()):i)?e="":"number"==typeof e?e+="":Array.isArray(e)&amp;&amp;(e=C.map(e,function(t){return null==t?"":t+""})),(n=C.valHooks[this.type]||C.valHooks[this.nodeName.toLowerCase()])&amp;&amp;"set"in n&amp;&amp;void 0!==n.set(this,e,"value")||(this.value=e))})):e?(n=C.valHooks[e.type]||C.valHooks[e.nodeName.toLowerCase()])&amp;&amp;"get"in n&amp;&amp;void 0!==(t=n.get(e,"value"))?t:"string"==typeof(t=e.value)?t.replace(Se,""):null==t?"":t:void 0}}),C.extend({valHooks:{option:{get:function(t){var e=C.find.attr(t,"value");return null!=e?e:De(C.text(t))}},select:{get:function(t){for(var e,i,n=t.options,s=t.selectedIndex,o="select-one"===t.type,r=o?null:[],a=o?s+1:n.length,l=s&lt;0?a:o?s:0;l&lt;a;l++)if(((i=n[l]).selected||l===s)&amp;&amp;!i.disabled&amp;&amp;(!i.parentNode.disabled||!S(i.parentNode,"optgroup"))){if(e=C(i).val(),o)return e;r.push(e)}return r},set:function(t,e){for(var i,n,s=t.options,o=C.makeArray(e),r=s.length;r--;)((n=s[r]).selected=-1&lt;C.inArray(C.valHooks.option.get(n),o))&amp;&amp;(i=!0);return i||(t.selectedIndex=-1),o}}}}),C.each(["radio","checkbox"],function(){C.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=-1&lt;C.inArray(C(t).val(),e)}},y.checkOn||(C.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})}),y.focusin="onfocusin"in k;function Me(t){t.stopPropagation()}var Ie=/^(?:focusinfocus|focusoutblur)$/;C.extend(C.event,{trigger:function(t,e,i,n){var s,o,r,a,l,h,u,c=[i||D],d=v.call(t,"type")?t.type:t,p=v.call(t,"namespace")?t.namespace.split("."):[],f=u=o=i=i||D;if(3!==i.nodeType&amp;&amp;8!==i.nodeType&amp;&amp;!Ie.test(d+C.event.triggered)&amp;&amp;(-1&lt;d.indexOf(".")&amp;&amp;(d=(p=d.split(".")).shift(),p.sort()),a=d.indexOf(":")&lt;0&amp;&amp;"on"+d,(t=t[C.expando]?t:new C.Event(d,"object"==typeof t&amp;&amp;t)).isTrigger=n?2:3,t.namespace=p.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),e=null==e?[t]:C.makeArray(e,[t]),h=C.event.special[d]||{},n||!h.trigger||!1!==h.trigger.apply(i,e))){if(!n&amp;&amp;!h.noBubble&amp;&amp;!g(i)){for(r=h.delegateType||d,Ie.test(r+d)||(f=f.parentNode);f;f=f.parentNode)c.push(f),o=f;o===(i.ownerDocument||D)&amp;&amp;c.push(o.defaultView||o.parentWindow||k)}for(s=0;(f=c[s++])&amp;&amp;!t.isPropagationStopped();)u=f,t.type=1&lt;s?r:h.bindType||d,(l=(X.get(f,"events")||Object.create(null))[t.type]&amp;&amp;X.get(f,"handle"))&amp;&amp;l.apply(f,e),(l=a&amp;&amp;f[a])&amp;&amp;l.apply&amp;&amp;K(f)&amp;&amp;(t.result=l.apply(f,e),!1===t.result&amp;&amp;t.preventDefault());return t.type=d,n||t.isDefaultPrevented()||h._default&amp;&amp;!1!==h._default.apply(c.pop(),e)||!K(i)||a&amp;&amp;_(i[d])&amp;&amp;!g(i)&amp;&amp;((o=i[a])&amp;&amp;(i[a]=null),C.event.triggered=d,t.isPropagationStopped()&amp;&amp;u.addEventListener(d,Me),i[d](),t.isPropagationStopped()&amp;&amp;u.removeEventListener(d,Me),C.event.triggered=void 0,o&amp;&amp;(i[a]=o)),t.result}},simulate:function(t,e,i){var n=C.extend(new C.Event,i,{type:t,isSimulated:!0});C.event.trigger(n,null,e)}}),C.fn.extend({trigger:function(t,e){return this.each(function(){C.event.trigger(t,e,this)})},triggerHandler:function(t,e){var i=this[0];if(i)return C.event.trigger(t,e,i,!0)}}),y.focusin||C.each({focus:"focusin",blur:"focusout"},function(i,n){function s(t){C.event.simulate(n,t.target,C.event.fix(t))}C.event.special[n]={setup:function(){var t=this.ownerDocument||this.document||this,e=X.access(t,n);e||t.addEventListener(i,s,!0),X.access(t,n,(e||0)+1)},teardown:function(){var t=this.ownerDocument||this.document||this,e=X.access(t,n)-1;e?X.access(t,n,e):(t.removeEventListener(i,s,!0),X.remove(t,n))}}});var Pe=k.location,Ae={guid:Date.now()},Ee=/\?/;C.parseXML=function(t){var e,i;if(!t||"string"!=typeof t)return null;try{e=(new k.DOMParser).parseFromString(t,"text/xml")}catch(t){}return i=e&amp;&amp;e.getElementsByTagName("parsererror")[0],e&amp;&amp;!i||C.error("Invalid XML: "+(i?C.map(i.childNodes,function(t){return t.textContent}).join("\n"):t)),e};var Ne=/\[\]$/,He=/\r?\n/g,Oe=/^(?:submit|button|image|reset|file)$/i,ze=/^(?:input|select|textarea|keygen)/i;C.param=function(t,e){function i(t,e){var i=_(e)?e():e;s[s.length]=encodeURIComponent(t)+"="+encodeURIComponent(null==i?"":i)}var n,s=[];if(null==t)return"";if(Array.isArray(t)||t.jquery&amp;&amp;!C.isPlainObject(t))C.each(t,function(){i(this.name,this.value)});else for(n in t)!function i(n,t,s,o){var e;if(Array.isArray(t))C.each(t,function(t,e){s||Ne.test(n)?o(n,e):i(n+"["+("object"==typeof e&amp;&amp;null!=e?t:"")+"]",e,s,o)});else if(s||"object"!==w(t))o(n,t);else for(e in t)i(n+"["+e+"]",t[e],s,o)}(n,t[n],e,i);return s.join("&amp;")},C.fn.extend({serialize:function(){return C.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=C.prop(this,"elements");return t?C.makeArray(t):this}).filter(function(){var t=this.type;return this.name&amp;&amp;!C(this).is(":disabled")&amp;&amp;ze.test(this.nodeName)&amp;&amp;!Oe.test(t)&amp;&amp;(this.checked||!dt.test(t))}).map(function(t,e){var i=C(this).val();return null==i?null:Array.isArray(i)?C.map(i,function(t){return{name:e.name,value:t.replace(He,"\r\n")}}):{name:e.name,value:i.replace(He,"\r\n")}}).get()}});var We=/%20/g,Le=/#.*$/,je=/([?&amp;])_=[^&amp;]*/,Fe=/^(.*?):[ \t]*([^\r\n]*)$/gm,Re=/^(?:GET|HEAD)$/,qe=/^\/\//,Be={},Ye={},Ue="*/".concat("*"),$e=D.createElement("a");function Ke(o){return function(t,e){"string"!=typeof t&amp;&amp;(e=t,t="*");var i,n=0,s=t.toLowerCase().match(O)||[];if(_(e))for(;i=s[n++];)"+"===i[0]?(i=i.slice(1)||"*",(o[i]=o[i]||[]).unshift(e)):(o[i]=o[i]||[]).push(e)}}function Ve(e,s,o,r){var a={},l=e===Ye;function h(t){var n;return a[t]=!0,C.each(e[t]||[],function(t,e){var i=e(s,o,r);return"string"!=typeof i||l||a[i]?l?!(n=i):void 0:(s.dataTypes.unshift(i),h(i),!1)}),n}return h(s.dataTypes[0])||!a["*"]&amp;&amp;h("*")}function Xe(t,e){var i,n,s=C.ajaxSettings.flatOptions||{};for(i in e)void 0!==e[i]&amp;&amp;((s[i]?t:n=n||{})[i]=e[i]);return n&amp;&amp;C.extend(!0,t,n),t}$e.href=Pe.href,C.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Pe.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Pe.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Ue,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":C.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?Xe(Xe(t,C.ajaxSettings),e):Xe(C.ajaxSettings,t)},ajaxPrefilter:Ke(Be),ajaxTransport:Ke(Ye),ajax:function(t,e){"object"==typeof t&amp;&amp;(e=t,t=void 0),e=e||{};var u,c,d,i,p,n,f,g,s,o,m=C.ajaxSetup({},e),v=m.context||m,y=m.context&amp;&amp;(v.nodeType||v.jquery)?C(v):C.event,_=C.Deferred(),b=C.Callbacks("once memory"),w=m.statusCode||{},r={},a={},l="canceled",x={readyState:0,getResponseHeader:function(t){var e;if(f){if(!i)for(i={};e=Fe.exec(d);)i[e[1].toLowerCase()+" "]=(i[e[1].toLowerCase()+" "]||[]).concat(e[2]);e=i[t.toLowerCase()+" "]}return null==e?null:e.join(", ")},getAllResponseHeaders:function(){return f?d:null},setRequestHeader:function(t,e){return null==f&amp;&amp;(t=a[t.toLowerCase()]=a[t.toLowerCase()]||t,r[t]=e),this},overrideMimeType:function(t){return null==f&amp;&amp;(m.mimeType=t),this},statusCode:function(t){var e;if(t)if(f)x.always(t[x.status]);else for(e in t)w[e]=[w[e],t[e]];return this},abort:function(t){var e=t||l;return u&amp;&amp;u.abort(e),h(0,e),this}};if(_.promise(x),m.url=((t||m.url||Pe.href)+"").replace(qe,Pe.protocol+"//"),m.type=e.method||e.type||m.method||m.type,m.dataTypes=(m.dataType||"*").toLowerCase().match(O)||[""],null==m.crossDomain){n=D.createElement("a");try{n.href=m.url,n.href=n.href,m.crossDomain=$e.protocol+"//"+$e.host!=n.protocol+"//"+n.host}catch(t){m.crossDomain=!0}}if(m.data&amp;&amp;m.processData&amp;&amp;"string"!=typeof m.data&amp;&amp;(m.data=C.param(m.data,m.traditional)),Ve(Be,m,e,x),f)return x;for(s in(g=C.event&amp;&amp;m.global)&amp;&amp;0==C.active++&amp;&amp;C.event.trigger("ajaxStart"),m.type=m.type.toUpperCase(),m.hasContent=!Re.test(m.type),c=m.url.replace(Le,""),m.hasContent?m.data&amp;&amp;m.processData&amp;&amp;0===(m.contentType||"").indexOf("application/x-www-form-urlencoded")&amp;&amp;(m.data=m.data.replace(We,"+")):(o=m.url.slice(c.length),m.data&amp;&amp;(m.processData||"string"==typeof m.data)&amp;&amp;(c+=(Ee.test(c)?"&amp;":"?")+m.data,delete m.data),!1===m.cache&amp;&amp;(c=c.replace(je,"$1"),o=(Ee.test(c)?"&amp;":"?")+"_="+Ae.guid+++o),m.url=c+o),m.ifModified&amp;&amp;(C.lastModified[c]&amp;&amp;x.setRequestHeader("If-Modified-Since",C.lastModified[c]),C.etag[c]&amp;&amp;x.setRequestHeader("If-None-Match",C.etag[c])),(m.data&amp;&amp;m.hasContent&amp;&amp;!1!==m.contentType||e.contentType)&amp;&amp;x.setRequestHeader("Content-Type",m.contentType),x.setRequestHeader("Accept",m.dataTypes[0]&amp;&amp;m.accepts[m.dataTypes[0]]?m.accepts[m.dataTypes[0]]+("*"!==m.dataTypes[0]?", "+Ue+"; q=0.01":""):m.accepts["*"]),m.headers)x.setRequestHeader(s,m.headers[s]);if(m.beforeSend&amp;&amp;(!1===m.beforeSend.call(v,x,m)||f))return x.abort();if(l="abort",b.add(m.complete),x.done(m.success),x.fail(m.error),u=Ve(Ye,m,e,x)){if(x.readyState=1,g&amp;&amp;y.trigger("ajaxSend",[x,m]),f)return x;m.async&amp;&amp;0&lt;m.timeout&amp;&amp;(p=k.setTimeout(function(){x.abort("timeout")},m.timeout));try{f=!1,u.send(r,h)}catch(t){if(f)throw t;h(-1,t)}}else h(-1,"No Transport");function h(t,e,i,n){var s,o,r,a,l,h=e;f||(f=!0,p&amp;&amp;k.clearTimeout(p),u=void 0,d=n||"",x.readyState=0&lt;t?4:0,s=200&lt;=t&amp;&amp;t&lt;300||304===t,i&amp;&amp;(a=function(t,e,i){for(var n,s,o,r,a=t.contents,l=t.dataTypes;"*"===l[0];)l.shift(),void 0===n&amp;&amp;(n=t.mimeType||e.getResponseHeader("Content-Type"));if(n)for(s in a)if(a[s]&amp;&amp;a[s].test(n)){l.unshift(s);break}if(l[0]in i)o=l[0];else{for(s in i){if(!l[0]||t.converters[s+" "+l[0]]){o=s;break}r=r||s}o=o||r}if(o)return o!==l[0]&amp;&amp;l.unshift(o),i[o]}(m,x,i)),!s&amp;&amp;-1&lt;C.inArray("script",m.dataTypes)&amp;&amp;C.inArray("json",m.dataTypes)&lt;0&amp;&amp;(m.converters["text script"]=function(){}),a=function(t,e,i,n){var s,o,r,a,l,h={},u=t.dataTypes.slice();if(u[1])for(r in t.converters)h[r.toLowerCase()]=t.converters[r];for(o=u.shift();o;)if(t.responseFields[o]&amp;&amp;(i[t.responseFields[o]]=e),!l&amp;&amp;n&amp;&amp;t.dataFilter&amp;&amp;(e=t.dataFilter(e,t.dataType)),l=o,o=u.shift())if("*"===o)o=l;else if("*"!==l&amp;&amp;l!==o){if(!(r=h[l+" "+o]||h["* "+o]))for(s in h)if((a=s.split(" "))[1]===o&amp;&amp;(r=h[l+" "+a[0]]||h["* "+a[0]])){!0===r?r=h[s]:!0!==h[s]&amp;&amp;(o=a[0],u.unshift(a[1]));break}if(!0!==r)if(r&amp;&amp;t.throws)e=r(e);else try{e=r(e)}catch(t){return{state:"parsererror",error:r?t:"No conversion from "+l+" to "+o}}}return{state:"success",data:e}}(m,a,x,s),s?(m.ifModified&amp;&amp;((l=x.getResponseHeader("Last-Modified"))&amp;&amp;(C.lastModified[c]=l),(l=x.getResponseHeader("etag"))&amp;&amp;(C.etag[c]=l)),204===t||"HEAD"===m.type?h="nocontent":304===t?h="notmodified":(h=a.state,o=a.data,s=!(r=a.error))):(r=h,!t&amp;&amp;h||(h="error",t&lt;0&amp;&amp;(t=0))),x.status=t,x.statusText=(e||h)+"",s?_.resolveWith(v,[o,h,x]):_.rejectWith(v,[x,h,r]),x.statusCode(w),w=void 0,g&amp;&amp;y.trigger(s?"ajaxSuccess":"ajaxError",[x,m,s?o:r]),b.fireWith(v,[x,h]),g&amp;&amp;(y.trigger("ajaxComplete",[x,m]),--C.active||C.event.trigger("ajaxStop")))}return x},getJSON:function(t,e,i){return C.get(t,e,i,"json")},getScript:function(t,e){return C.get(t,void 0,e,"script")}}),C.each(["get","post"],function(t,s){C[s]=function(t,e,i,n){return _(e)&amp;&amp;(n=n||i,i=e,e=void 0),C.ajax(C.extend({url:t,type:s,dataType:n,data:e,success:i},C.isPlainObject(t)&amp;&amp;t))}}),C.ajaxPrefilter(function(t){var e;for(e in t.headers)"content-type"===e.toLowerCase()&amp;&amp;(t.contentType=t.headers[e]||"")}),C._evalUrl=function(t,e,i){return C.ajax({url:t,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(t){C.globalEval(t,e,i)}})},C.fn.extend({wrapAll:function(t){var e;return this[0]&amp;&amp;(_(t)&amp;&amp;(t=t.call(this[0])),e=C(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&amp;&amp;e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t}).append(this)),this},wrapInner:function(i){return _(i)?this.each(function(t){C(this).wrapInner(i.call(this,t))}):this.each(function(){var t=C(this),e=t.contents();e.length?e.wrapAll(i):t.append(i)})},wrap:function(e){var i=_(e);return this.each(function(t){C(this).wrapAll(i?e.call(this,t):e)})},unwrap:function(t){return this.parent(t).not("body").each(function(){C(this).replaceWith(this.childNodes)}),this}}),C.expr.pseudos.hidden=function(t){return!C.expr.pseudos.visible(t)},C.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)},C.ajaxSettings.xhr=function(){try{return new k.XMLHttpRequest}catch(t){}};var Ge={0:200,1223:204},Je=C.ajaxSettings.xhr();y.cors=!!Je&amp;&amp;"withCredentials"in Je,y.ajax=Je=!!Je,C.ajaxTransport(function(s){var o,r;if(y.cors||Je&amp;&amp;!s.crossDomain)return{send:function(t,e){var i,n=s.xhr();if(n.open(s.type,s.url,s.async,s.username,s.password),s.xhrFields)for(i in s.xhrFields)n[i]=s.xhrFields[i];for(i in s.mimeType&amp;&amp;n.overrideMimeType&amp;&amp;n.overrideMimeType(s.mimeType),s.crossDomain||t["X-Requested-With"]||(t["X-Requested-With"]="XMLHttpRequest"),t)n.setRequestHeader(i,t[i]);o=function(t){return function(){o&amp;&amp;(o=r=n.onload=n.onerror=n.onabort=n.ontimeout=n.onreadystatechange=null,"abort"===t?n.abort():"error"===t?"number"!=typeof n.status?e(0,"error"):e(n.status,n.statusText):e(Ge[n.status]||n.status,n.statusText,"text"!==(n.responseType||"text")||"string"!=typeof n.responseText?{binary:n.response}:{text:n.responseText},n.getAllResponseHeaders()))}},n.onload=o(),r=n.onerror=n.ontimeout=o("error"),void 0!==n.onabort?n.onabort=r:n.onreadystatechange=function(){4===n.readyState&amp;&amp;k.setTimeout(function(){o&amp;&amp;r()})},o=o("abort");try{n.send(s.hasContent&amp;&amp;s.data||null)}catch(t){if(o)throw t}},abort:function(){o&amp;&amp;o()}}}),C.ajaxPrefilter(function(t){t.crossDomain&amp;&amp;(t.contents.script=!1)}),C.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return C.globalEval(t),t}}}),C.ajaxPrefilter("script",function(t){void 0===t.cache&amp;&amp;(t.cache=!1),t.crossDomain&amp;&amp;(t.type="GET")}),C.ajaxTransport("script",function(i){var n,s;if(i.crossDomain||i.scriptAttrs)return{send:function(t,e){n=C("&lt;script&gt;").attr(i.scriptAttrs||{}).prop({charset:i.scriptCharset,src:i.url}).on("load error",s=function(t){n.remove(),s=null,t&amp;&amp;e("error"===t.type?404:200,t.type)}),D.head.appendChild(n[0])},abort:function(){s&amp;&amp;s()}}});var Qe,Ze=[],ti=/(=)\?(?=&amp;|$)|\?\?/;C.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var t=Ze.pop()||C.expando+"_"+Ae.guid++;return this[t]=!0,t}}),C.ajaxPrefilter("json jsonp",function(t,e,i){var n,s,o,r=!1!==t.jsonp&amp;&amp;(ti.test(t.url)?"url":"string"==typeof t.data&amp;&amp;0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&amp;&amp;ti.test(t.data)&amp;&amp;"data");if(r||"jsonp"===t.dataTypes[0])return n=t.jsonpCallback=_(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,r?t[r]=t[r].replace(ti,"$1"+n):!1!==t.jsonp&amp;&amp;(t.url+=(Ee.test(t.url)?"&amp;":"?")+t.jsonp+"="+n),t.converters["script json"]=function(){return o||C.error(n+" was not called"),o[0]},t.dataTypes[0]="json",s=k[n],k[n]=function(){o=arguments},i.always(function(){void 0===s?C(k).removeProp(n):k[n]=s,t[n]&amp;&amp;(t.jsonpCallback=e.jsonpCallback,Ze.push(n)),o&amp;&amp;_(s)&amp;&amp;s(o[0]),o=s=void 0}),"script"}),y.createHTMLDocument=((Qe=D.implementation.createHTMLDocument("").body).innerHTML="&lt;form&gt;&lt;/form&gt;&lt;form&gt;&lt;/form&gt;",2===Qe.childNodes.length),C.parseHTML=function(t,e,i){return"string"!=typeof t?[]:("boolean"==typeof e&amp;&amp;(i=e,e=!1),e||(y.createHTMLDocument?((n=(e=D.implementation.createHTMLDocument("")).createElement("base")).href=D.location.href,e.head.appendChild(n)):e=D),o=!i&amp;&amp;[],(s=M.exec(t))?[e.createElement(s[1])]:(s=_t([t],e,o),o&amp;&amp;o.length&amp;&amp;C(o).remove(),C.merge([],s.childNodes)));var n,s,o},C.fn.load=function(t,e,i){var n,s,o,r=this,a=t.indexOf(" ");return-1&lt;a&amp;&amp;(n=De(t.slice(a)),t=t.slice(0,a)),_(e)?(i=e,e=void 0):e&amp;&amp;"object"==typeof e&amp;&amp;(s="POST"),0&lt;r.length&amp;&amp;C.ajax({url:t,type:s||"GET",dataType:"html",data:e}).done(function(t){o=arguments,r.html(n?C("&lt;div&gt;").append(C.parseHTML(t)).find(n):t)}).always(i&amp;&amp;function(t,e){r.each(function(){i.apply(this,o||[t.responseText,e,t])})}),this},C.expr.pseudos.animated=function(e){return C.grep(C.timers,function(t){return e===t.elem}).length},C.offset={setOffset:function(t,e,i){var n,s,o,r,a,l,h=C.css(t,"position"),u=C(t),c={};"static"===h&amp;&amp;(t.style.position="relative"),a=u.offset(),o=C.css(t,"top"),l=C.css(t,"left"),s=("absolute"===h||"fixed"===h)&amp;&amp;-1&lt;(o+l).indexOf("auto")?(r=(n=u.position()).top,n.left):(r=parseFloat(o)||0,parseFloat(l)||0),_(e)&amp;&amp;(e=e.call(t,i,C.extend({},a))),null!=e.top&amp;&amp;(c.top=e.top-a.top+r),null!=e.left&amp;&amp;(c.left=e.left-a.left+s),"using"in e?e.using.call(t,c):u.css(c)}},C.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){C.offset.setOffset(this,e,t)});var t,i,n=this[0];return n?n.getClientRects().length?(t=n.getBoundingClientRect(),i=n.ownerDocument.defaultView,{top:t.top+i.pageYOffset,left:t.left+i.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var t,e,i,n=this[0],s={top:0,left:0};if("fixed"===C.css(n,"position"))e=n.getBoundingClientRect();else{for(e=this.offset(),i=n.ownerDocument,t=n.offsetParent||i.documentElement;t&amp;&amp;(t===i.body||t===i.documentElement)&amp;&amp;"static"===C.css(t,"position");)t=t.parentNode;t&amp;&amp;t!==n&amp;&amp;1===t.nodeType&amp;&amp;((s=C(t).offset()).top+=C.css(t,"borderTopWidth",!0),s.left+=C.css(t,"borderLeftWidth",!0))}return{top:e.top-s.top-C.css(n,"marginTop",!0),left:e.left-s.left-C.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent;t&amp;&amp;"static"===C.css(t,"position");)t=t.offsetParent;return t||nt})}}),C.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,s){var o="pageYOffset"===s;C.fn[e]=function(t){return q(this,function(t,e,i){var n;return g(t)?n=t:9===t.nodeType&amp;&amp;(n=t.defaultView),void 0===i?n?n[s]:t[e]:void(n?n.scrollTo(o?n.pageXOffset:i,o?i:n.pageYOffset):t[e]=i)},e,t,arguments.length)}}),C.each(["top","left"],function(t,i){C.cssHooks[i]=Gt(y.pixelPosition,function(t,e){if(e)return e=Xt(t,i),Yt.test(e)?C(t).position()[i]+"px":e})}),C.each({Height:"height",Width:"width"},function(r,a){C.each({padding:"inner"+r,content:a,"":"outer"+r},function(n,o){C.fn[o]=function(t,e){var i=arguments.length&amp;&amp;(n||"boolean"!=typeof t),s=n||(!0===t||!0===e?"margin":"border");return q(this,function(t,e,i){var n;return g(t)?0===o.indexOf("outer")?t["inner"+r]:t.document.documentElement["client"+r]:9===t.nodeType?(n=t.documentElement,Math.max(t.body["scroll"+r],n["scroll"+r],t.body["offset"+r],n["offset"+r],n["client"+r])):void 0===i?C.css(t,e,s):C.style(t,e,i,s)},a,i?t:void 0,i)}})}),C.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(t,e){C.fn[e]=function(t){return this.on(e,t)}}),C.fn.extend({bind:function(t,e,i){return this.on(t,null,e,i)},unbind:function(t,e){return this.off(t,null,e)},delegate:function(t,e,i,n){return this.on(e,t,i,n)},undelegate:function(t,e,i){return 1===arguments.length?this.off(t,"**"):this.off(e,t||"**",i)},hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)}}),C.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(t,i){C.fn[i]=function(t,e){return 0&lt;arguments.length?this.on(i,null,t,e):this.trigger(i)}});var ei=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;C.proxy=function(t,e){var i,n,s;if("string"==typeof e&amp;&amp;(i=t[e],e=t,t=i),_(t))return n=a.call(arguments,2),(s=function(){return t.apply(e||this,n.concat(a.call(arguments)))}).guid=t.guid=t.guid||C.guid++,s},C.holdReady=function(t){t?C.readyWait++:C.ready(!0)},C.isArray=Array.isArray,C.parseJSON=JSON.parse,C.nodeName=S,C.isFunction=_,C.isWindow=g,C.camelCase=$,C.type=w,C.now=Date.now,C.isNumeric=function(t){var e=C.type(t);return("number"===e||"string"===e)&amp;&amp;!isNaN(t-parseFloat(t))},C.trim=function(t){return null==t?"":(t+"").replace(ei,"")},"function"==typeof define&amp;&amp;define.amd&amp;&amp;define("jquery",[],function(){return C});var ii=k.jQuery,ni=k.$;return C.noConflict=function(t){return k.$===C&amp;&amp;(k.$=ni),t&amp;&amp;k.jQuery===C&amp;&amp;(k.jQuery=ii),C},void 0===t&amp;&amp;(k.jQuery=k.$=C),C}),function(t){"function"==typeof define&amp;&amp;define.amd?define(["jquery"],t):t(jQuery)}(function(k){k.ui=k.ui||{};k.ui.version="1.12.1";var s,i=0,a=Array.prototype.slice;k.cleanData=(s=k.cleanData,function(t){for(var e,i,n=0;null!=(i=t[n]);n++)try{(e=k._data(i,"events"))&amp;&amp;e.remove&amp;&amp;k(i).triggerHandler("remove")}catch(t){}s(t)}),k.widget=function(t,i,e){var n,s,o,r={},a=t.split(".")[0],l=a+"-"+(t=t.split(".")[1]);return e||(e=i,i=k.Widget),Array.isArray(e)&amp;&amp;(e=k.extend.apply(null,[{}].concat(e))),k.expr[":"][l.toLowerCase()]=function(t){return!!k.data(t,l)},k[a]=k[a]||{},n=k[a][t],s=k[a][t]=function(t,e){if(!this._createWidget)return new s(t,e);arguments.length&amp;&amp;this._createWidget(t,e)},k.extend(s,n,{version:e.version,_proto:k.extend({},e),_childConstructors:[]}),(o=new i).options=k.widget.extend({},o.options),k.each(e,function(e,n){function s(){return i.prototype[e].apply(this,arguments)}function o(t){return i.prototype[e].apply(this,t)}k.isFunction(n)?r[e]=function(){var t,e=this._super,i=this._superApply;return this._super=s,this._superApply=o,t=n.apply(this,arguments),this._super=e,this._superApply=i,t}:r[e]=n}),s.prototype=k.widget.extend(o,{widgetEventPrefix:n&amp;&amp;o.widgetEventPrefix||t},r,{constructor:s,namespace:a,widgetName:t,widgetFullName:l}),n?(k.each(n._childConstructors,function(t,e){var i=e.prototype;k.widget(i.namespace+"."+i.widgetName,s,e._proto)}),delete n._childConstructors):i._childConstructors.push(s),k.widget.bridge(t,s),s},k.widget.extend=function(t){for(var e,i,n=a.call(arguments,1),s=0,o=n.length;s&lt;o;s++)for(e in n[s])i=n[s][e],n[s].hasOwnProperty(e)&amp;&amp;void 0!==i&amp;&amp;(k.isPlainObject(i)?t[e]=k.isPlainObject(t[e])?k.widget.extend({},t[e],i):k.widget.extend({},i):t[e]=i);return t},k.widget.bridge=function(o,e){var r=e.prototype.widgetFullName||o;k.fn[o]=function(i){var t="string"==typeof i,n=a.call(arguments,1),s=this;return t?this.length||"instance"!==i?this.each(function(){var t,e=k.data(this,r);return"instance"===i?(s=e,!1):e?k.isFunction(e[i])&amp;&amp;"_"!==i.charAt(0)?(t=e[i].apply(e,n))!==e&amp;&amp;void 0!==t?(s=t&amp;&amp;t.jquery?s.pushStack(t.get()):t,!1):void 0:k.error("no such method '"+i+"' for "+o+" widget instance"):k.error("cannot call methods on "+o+" prior to initialization; attempted to call method '"+i+"'")}):s=void 0:(n.length&amp;&amp;(i=k.widget.extend.apply(null,[i].concat(n))),this.each(function(){var t=k.data(this,r);t?(t.option(i||{}),t._init&amp;&amp;t._init()):k.data(this,r,new e(i,this))})),s}},k.Widget=function(){},k.Widget._childConstructors=[],k.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"&lt;div&gt;",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=k(e||this.defaultElement||this)[0],this.element=k(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=k(),this.hoverable=k(),this.focusable=k(),this.classesElementLookup={},e!==this&amp;&amp;(k.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&amp;&amp;this.destroy()}}),this.document=k(e.style?e.ownerDocument:e.document||e),this.window=k(this.document[0].defaultView||this.document[0].parentWindow)),this.options=k.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&amp;&amp;this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:k.noop,_create:k.noop,_init:k.noop,destroy:function(){var i=this;this._destroy(),k.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:k.noop,widget:function(){return this.element},option:function(t,e){var i,n,s,o=t;if(0===arguments.length)return k.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(n=o[t]=k.widget.extend({},this.options[t]),s=0;s&lt;i.length-1;s++)n[i[s]]=n[i[s]]||{},n=n[i[s]];if(t=i.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=e}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=e}return this._setOptions(o),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&amp;&amp;this._setOptionClasses(e),this.options[t]=e,"disabled"===t&amp;&amp;this._setOptionDisabled(e),this},_setOptionClasses:function(t){var e,i,n;for(e in t)n=this.classesElementLookup[e],t[e]!==this.options.classes[e]&amp;&amp;n&amp;&amp;n.length&amp;&amp;(i=k(n.get()),this._removeClass(n,e),i.addClass(this._classes({element:i,keys:e,classes:t,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&amp;&amp;(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(s){var o=[],r=this;function t(t,e){for(var i,n=0;n&lt;t.length;n++)i=r.classesElementLookup[t[n]]||k(),i=s.add?k(k.unique(i.get().concat(s.element.get()))):k(i.not(s.element).get()),r.classesElementLookup[t[n]]=i,o.push(t[n]),e&amp;&amp;s.classes[t[n]]&amp;&amp;o.push(s.classes[t[n]])}return s=k.extend({element:this.element,classes:this.options.classes||{}},s),this._on(s.element,{remove:"_untrackClassesElement"}),s.keys&amp;&amp;t(s.keys.match(/\S+/g)||[],!0),s.extra&amp;&amp;t(s.extra.match(/\S+/g)||[]),o.join(" ")},_untrackClassesElement:function(i){var n=this;k.each(n.classesElementLookup,function(t,e){-1!==k.inArray(i.target,e)&amp;&amp;(n.classesElementLookup[t]=k(e.not(i.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,n){n="boolean"==typeof n?n:i;var s="string"==typeof t||null===t,o={extra:s?e:i,keys:s?t:e,element:s?this.element:t,add:n};return o.element.toggleClass(this._classes(o),n),this},_on:function(r,a,t){var l,h=this;"boolean"!=typeof r&amp;&amp;(t=a,a=r,r=!1),t?(a=l=k(a),this.bindings=this.bindings.add(a)):(t=a,a=this.element,l=this.widget()),k.each(t,function(t,e){function i(){if(r||!0!==h.options.disabled&amp;&amp;!k(this).hasClass("ui-state-disabled"))return("string"==typeof e?h[e]:e).apply(h,arguments)}"string"!=typeof e&amp;&amp;(i.guid=e.guid=e.guid||i.guid||k.guid++);var n=t.match(/^([\w:-]*)\s*(.*)$/),s=n[1]+h.eventNamespace,o=n[2];o?l.on(s,o,i):a.on(s,i)})},_off:function(t,e){e=(e||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.off(e).off(e),this.bindings=k(this.bindings.not(t).get()),this.focusable=k(this.focusable.not(t).get()),this.hoverable=k(this.hoverable.not(t).get())},_delay:function(t,e){var i=this;return setTimeout(function(){return("string"==typeof t?i[t]:t).apply(i,arguments)},e||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){this._addClass(k(t.currentTarget),null,"ui-state-hover")},mouseleave:function(t){this._removeClass(k(t.currentTarget),null,"ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){this._addClass(k(t.currentTarget),null,"ui-state-focus")},focusout:function(t){this._removeClass(k(t.currentTarget),null,"ui-state-focus")}})},_trigger:function(t,e,i){var n,s,o=this.options[t];if(i=i||{},(e=k.Event(e)).type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),e.target=this.element[0],s=e.originalEvent)for(n in s)n in e||(e[n]=s[n]);return this.element.trigger(e,i),!(k.isFunction(o)&amp;&amp;!1===o.apply(this.element[0],[e].concat(i))||e.isDefaultPrevented())}},k.each({show:"fadeIn",hide:"fadeOut"},function(o,r){k.Widget.prototype["_"+o]=function(e,t,i){var n;"string"==typeof t&amp;&amp;(t={effect:t});var s=t?!0!==t&amp;&amp;"number"!=typeof t&amp;&amp;t.effect||r:o;"number"==typeof(t=t||{})&amp;&amp;(t={duration:t}),n=!k.isEmptyObject(t),t.complete=i,t.delay&amp;&amp;e.delay(t.delay),n&amp;&amp;k.effects&amp;&amp;k.effects.effect[s]?e[o](t):s!==o&amp;&amp;e[s]?e[s](t.duration,t.easing,i):e.queue(function(t){k(this)[o](),i&amp;&amp;i.call(e[0]),t()})}});var o,x,D,n,r,l,h,u,C;k.widget;function T(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function S(t,e){return parseInt(k.css(t,e),10)||0}x=Math.max,D=Math.abs,n=/left|center|right/,r=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,h=/^\w+/,u=/%$/,C=k.fn.position,k.position={scrollbarWidth:function(){if(void 0!==o)return o;var t,e,i=k("&lt;div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'&gt;&lt;div style='height:100px;width:auto;'&gt;&lt;/div&gt;&lt;/div&gt;"),n=i.children()[0];return k("body").append(i),t=n.offsetWidth,i.css("overflow","scroll"),t===(e=n.offsetWidth)&amp;&amp;(e=i[0].clientWidth),i.remove(),o=t-e},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),n="scroll"===e||"auto"===e&amp;&amp;t.width&lt;t.element[0].scrollWidth;return{width:"scroll"===i||"auto"===i&amp;&amp;t.height&lt;t.element[0].scrollHeight?k.position.scrollbarWidth():0,height:n?k.position.scrollbarWidth():0}},getWithinInfo:function(t){var e=k(t||window),i=k.isWindow(e[0]),n=!!e[0]&amp;&amp;9===e[0].nodeType;return{element:e,isWindow:i,isDocument:n,offset:!i&amp;&amp;!n?k(t).offset():{left:0,top:0},scrollLeft:e.scrollLeft(),scrollTop:e.scrollTop(),width:e.outerWidth(),height:e.outerHeight()}}},k.fn.position=function(c){if(!c||!c.of)return C.apply(this,arguments);c=k.extend({},c);var d,p,f,g,m,t,e,v=k(c.of),y=k.position.getWithinInfo(c.within),_=k.position.getScrollInfo(y),b=(c.collision||"flip").split(" "),w={},i=9===(e=(t=v)[0]).nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:k.isWindow(e)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:e.preventDefault?{width:0,height:0,offset:{top:e.pageY,left:e.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()};return v[0].preventDefault&amp;&amp;(c.at="left top"),p=i.width,f=i.height,g=i.offset,m=k.extend({},g),k.each(["my","at"],function(){var t,e,i=(c[this]||"").split(" ");1===i.length&amp;&amp;(i=n.test(i[0])?i.concat(["center"]):r.test(i[0])?["center"].concat(i):["center","center"]),i[0]=n.test(i[0])?i[0]:"center",i[1]=r.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),w[this]=[t?t[0]:0,e?e[0]:0],c[this]=[h.exec(i[0])[0],h.exec(i[1])[0]]}),1===b.length&amp;&amp;(b[1]=b[0]),"right"===c.at[0]?m.left+=p:"center"===c.at[0]&amp;&amp;(m.left+=p/2),"bottom"===c.at[1]?m.top+=f:"center"===c.at[1]&amp;&amp;(m.top+=f/2),d=T(w.at,p,f),m.left+=d[0],m.top+=d[1],this.each(function(){var i,t,r=k(this),a=r.outerWidth(),l=r.outerHeight(),e=S(this,"marginLeft"),n=S(this,"marginTop"),s=a+e+S(this,"marginRight")+_.width,o=l+n+S(this,"marginBottom")+_.height,h=k.extend({},m),u=T(w.my,r.outerWidth(),r.outerHeight());"right"===c.my[0]?h.left-=a:"center"===c.my[0]&amp;&amp;(h.left-=a/2),"bottom"===c.my[1]?h.top-=l:"center"===c.my[1]&amp;&amp;(h.top-=l/2),h.left+=u[0],h.top+=u[1],i={marginLeft:e,marginTop:n},k.each(["left","top"],function(t,e){k.ui.position[b[t]]&amp;&amp;k.ui.position[b[t]][e](h,{targetWidth:p,targetHeight:f,elemWidth:a,elemHeight:l,collisionPosition:i,collisionWidth:s,collisionHeight:o,offset:[d[0]+u[0],d[1]+u[1]],my:c.my,at:c.at,within:y,elem:r})}),c.using&amp;&amp;(t=function(t){var e=g.left-h.left,i=e+p-a,n=g.top-h.top,s=n+f-l,o={target:{element:v,left:g.left,top:g.top,width:p,height:f},element:{element:r,left:h.left,top:h.top,width:a,height:l},horizontal:i&lt;0?"left":0&lt;e?"right":"center",vertical:s&lt;0?"top":0&lt;n?"bottom":"middle"};p&lt;a&amp;&amp;D(e+i)&lt;p&amp;&amp;(o.horizontal="center"),f&lt;l&amp;&amp;D(n+s)&lt;f&amp;&amp;(o.vertical="middle"),x(D(e),D(i))&gt;x(D(n),D(s))?o.important="horizontal":o.important="vertical",c.using.call(this,t,o)}),r.offset(k.extend(h,{using:t}))})},k.ui.position={fit:{left:function(t,e){var i,n=e.within,s=n.isWindow?n.scrollLeft:n.offset.left,o=n.width,r=t.left-e.collisionPosition.marginLeft,a=s-r,l=r+e.collisionWidth-o-s;e.collisionWidth&gt;o?0&lt;a&amp;&amp;l&lt;=0?(i=t.left+a+e.collisionWidth-o-s,t.left+=a-i):t.left=!(0&lt;l&amp;&amp;a&lt;=0)&amp;&amp;l&lt;a?s+o-e.collisionWidth:s:0&lt;a?t.left+=a:0&lt;l?t.left-=l:t.left=x(t.left-r,t.left)},top:function(t,e){var i,n=e.within,s=n.isWindow?n.scrollTop:n.offset.top,o=e.within.height,r=t.top-e.collisionPosition.marginTop,a=s-r,l=r+e.collisionHeight-o-s;e.collisionHeight&gt;o?0&lt;a&amp;&amp;l&lt;=0?(i=t.top+a+e.collisionHeight-o-s,t.top+=a-i):t.top=!(0&lt;l&amp;&amp;a&lt;=0)&amp;&amp;l&lt;a?s+o-e.collisionHeight:s:0&lt;a?t.top+=a:0&lt;l?t.top-=l:t.top=x(t.top-r,t.top)}},flip:{left:function(t,e){var i,n,s=e.within,o=s.offset.left+s.scrollLeft,r=s.width,a=s.isWindow?s.scrollLeft:s.offset.left,l=t.left-e.collisionPosition.marginLeft,h=l-a,u=l+e.collisionWidth-r-a,c="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,d="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,p=-2*e.offset[0];h&lt;0?((i=t.left+c+d+p+e.collisionWidth-r-o)&lt;0||i&lt;D(h))&amp;&amp;(t.left+=c+d+p):0&lt;u&amp;&amp;(0&lt;(n=t.left-e.collisionPosition.marginLeft+c+d+p-a)||D(n)&lt;u)&amp;&amp;(t.left+=c+d+p)},top:function(t,e){var i,n,s=e.within,o=s.offset.top+s.scrollTop,r=s.height,a=s.isWindow?s.scrollTop:s.offset.top,l=t.top-e.collisionPosition.marginTop,h=l-a,u=l+e.collisionHeight-r-a,c="top"===e.my[1]?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,d="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,p=-2*e.offset[1];h&lt;0?((n=t.top+c+d+p+e.collisionHeight-r-o)&lt;0||n&lt;D(h))&amp;&amp;(t.top+=c+d+p):0&lt;u&amp;&amp;(0&lt;(i=t.top-e.collisionPosition.marginTop+c+d+p-a)||D(i)&lt;u)&amp;&amp;(t.top+=c+d+p)}},flipfit:{left:function(){k.ui.position.flip.left.apply(this,arguments),k.ui.position.fit.left.apply(this,arguments)},top:function(){k.ui.position.flip.top.apply(this,arguments),k.ui.position.fit.top.apply(this,arguments)}}};k.ui.position,k.extend(k.expr[":"],{data:k.expr.createPseudo?k.expr.createPseudo(function(e){return function(t){return!!k.data(t,e)}}):function(t,e,i){return!!k.data(t,i[3])}}),k.fn.extend({disableSelection:(t="onselectstart"in document.createElement("div")?"selectstart":"mousedown",function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}),enableSelection:function(){return this.off(".ui-disableSelection")}});var t,c,d,p,f,e,g,m,v,y,_,b,w,M,I,P,A,E,N,H,O,z,W="ui-effects-",L="ui-effects-style",j="ui-effects-animated",F=k;function R(t,e,i){var n=v[e.type]||{};return null==t?i||!e.def?null:e.def:(t=n.floor?~~t:parseFloat(t),isNaN(t)?e.def:n.mod?(t+n.mod)%n.mod:t&lt;0?0:n.max&lt;t?n.max:t)}function q(r){var a=g(),l=a._rgba=[];return r=r.toLowerCase(),b(e,function(t,e){var i,n=e.re.exec(r),s=n&amp;&amp;e.parse(n),o=e.space||"rgba";if(s)return i=a[o](s),a[m[o].cache]=i[m[o].cache],l=a._rgba=i._rgba,!1}),l.length?("0,0,0,0"===l.join()&amp;&amp;c.extend(l,p.transparent),a):p[r]}function B(t,e,i){return 6*(i=(i+1)%1)&lt;1?t+(e-t)*i*6:2*i&lt;1?e:3*i&lt;2?t+(e-t)*(2/3-i)*6:t}function Y(t){var e,i,n=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,s={};if(n&amp;&amp;n.length&amp;&amp;n[0]&amp;&amp;n[n[0]])for(i=n.length;i--;)"string"==typeof n[e=n[i]]&amp;&amp;(s[k.camelCase(e)]=n[e]);else for(e in n)"string"==typeof n[e]&amp;&amp;(s[e]=n[e]);return s}function U(t,e,i,n){return k.isPlainObject(t)&amp;&amp;(t=(e=t).effect),t={effect:t},null==e&amp;&amp;(e={}),k.isFunction(e)&amp;&amp;(n=e,i=null,e={}),"number"!=typeof e&amp;&amp;!k.fx.speeds[e]||(n=i,i=e,e={}),k.isFunction(i)&amp;&amp;(n=i,i=null),e&amp;&amp;k.extend(t,e),i=i||e.duration,t.duration=k.fx.off?0:"number"==typeof i?i:i in k.fx.speeds?k.fx.speeds[i]:k.fx.speeds._default,t.complete=n||e.complete,t}function $(t){return!t||"number"==typeof t||k.fx.speeds[t]||("string"==typeof t&amp;&amp;!k.effects.effect[t]||(k.isFunction(t)||"object"==typeof t&amp;&amp;!t.effect))}function K(t,e){var i=e.outerWidth(),n=e.outerHeight(),s=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/.exec(t)||["",0,i,n,0];return{top:parseFloat(s[1])||0,right:"auto"===s[2]?i:parseFloat(s[2]),bottom:"auto"===s[3]?n:parseFloat(s[3]),left:parseFloat(s[4])||0}}k.effects={effect:{}},f=/^([\-+])=\s*(\d+\.?\d*)/,e=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],g=(c=F).Color=function(t,e,i,n){return new c.Color.fn.parse(t,e,i,n)},m={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},v={byte:{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},y=g.support={},_=c("&lt;p&gt;")[0],b=c.each,_.style.cssText="background-color:rgba(1,1,1,.5)",y.rgba=-1&lt;_.style.backgroundColor.indexOf("rgba"),b(m,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),g.fn=c.extend(g.prototype,{parse:function(s,t,e,i){if(s===d)return this._rgba=[null,null,null,null],this;(s.jquery||s.nodeType)&amp;&amp;(s=c(s).css(t),t=d);var o=this,n=c.type(s),r=this._rgba=[];return t!==d&amp;&amp;(s=[s,t,e,i],n="array"),"string"===n?this.parse(q(s)||p._default):"array"===n?(b(m.rgba.props,function(t,e){r[e.idx]=R(s[e.idx],e)}),this):"object"===n?(b(m,s instanceof g?function(t,e){s[e.cache]&amp;&amp;(o[e.cache]=s[e.cache].slice())}:function(t,i){var n=i.cache;b(i.props,function(t,e){if(!o[n]&amp;&amp;i.to){if("alpha"===t||null==s[t])return;o[n]=i.to(o._rgba)}o[n][e.idx]=R(s[t],e,!0)}),o[n]&amp;&amp;c.inArray(null,o[n].slice(0,3))&lt;0&amp;&amp;(o[n][3]=1,i.from&amp;&amp;(o._rgba=i.from(o[n])))}),this):void 0},is:function(t){var s=g(t),o=!0,r=this;return b(m,function(t,e){var i,n=s[e.cache];return n&amp;&amp;(i=r[e.cache]||e.to&amp;&amp;e.to(r._rgba)||[],b(e.props,function(t,e){if(null!=n[e.idx])return o=n[e.idx]===i[e.idx]})),o}),o},_space:function(){var i=[],n=this;return b(m,function(t,e){n[e.cache]&amp;&amp;i.push(t)}),i.pop()},transition:function(t,r){var e=(h=g(t))._space(),i=m[e],n=0===this.alpha()?g("transparent"):this,a=n[i.cache]||i.to(n._rgba),l=a.slice(),h=h[i.cache];return b(i.props,function(t,e){var i=e.idx,n=a[i],s=h[i],o=v[e.type]||{};null!==s&amp;&amp;(null===n?l[i]=s:(o.mod&amp;&amp;(o.mod/2&lt;s-n?n+=o.mod:o.mod/2&lt;n-s&amp;&amp;(n-=o.mod)),l[i]=R((s-n)*r+n,e)))}),this[e](l)},blend:function(t){if(1===this._rgba[3])return this;var e=this._rgba.slice(),i=e.pop(),n=g(t)._rgba;return g(c.map(e,function(t,e){return(1-i)*n[e]+i*t}))},toRgbaString:function(){var t="rgba(",e=c.map(this._rgba,function(t,e){return null==t?2&lt;e?1:0:t});return 1===e[3]&amp;&amp;(e.pop(),t="rgb("),t+e.join()+")"},toHslaString:function(){var t="hsla(",e=c.map(this.hsla(),function(t,e){return null==t&amp;&amp;(t=2&lt;e?1:0),e&amp;&amp;e&lt;3&amp;&amp;(t=Math.round(100*t)+"%"),t});return 1===e[3]&amp;&amp;(e.pop(),t="hsl("),t+e.join()+")"},toHexString:function(t){var e=this._rgba.slice(),i=e.pop();return t&amp;&amp;e.push(~~(255*i)),"#"+c.map(e,function(t){return 1===(t=(t||0).toString(16)).length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),g.fn.parse.prototype=g.fn,m.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/255,i=t[1]/255,n=t[2]/255,s=t[3],o=Math.max(e,i,n),r=Math.min(e,i,n),a=o-r,l=o+r,h=.5*l,u=r===o?0:e===o?60*(i-n)/a+360:i===o?60*(n-e)/a+120:60*(e-i)/a+240,c=0==a?0:h&lt;=.5?a/l:a/(2-l);return[Math.round(u)%360,c,h,null==s?1:s]},m.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],n=t[2],s=t[3],o=n&lt;=.5?n*(1+i):n+i-n*i,r=2*n-o;return[Math.round(255*B(r,o,e+1/3)),Math.round(255*B(r,o,e)),Math.round(255*B(r,o,e-1/3)),s]},b(m,function(l,t){var i=t.props,r=t.cache,a=t.to,h=t.from;g.fn[l]=function(t){if(a&amp;&amp;!this[r]&amp;&amp;(this[r]=a(this._rgba)),t===d)return this[r].slice();var e,n=c.type(t),s="array"===n||"object"===n?t:arguments,o=this[r].slice();return b(i,function(t,e){var i=s["object"===n?t:e.idx];null==i&amp;&amp;(i=o[e.idx]),o[e.idx]=R(i,e)}),h?((e=g(h(o)))[r]=o,e):g(o)},b(i,function(r,a){g.fn[r]||(g.fn[r]=function(t){var e,i=c.type(t),n="alpha"===r?this._hsla?"hsla":"rgba":l,s=this[n](),o=s[a.idx];return"undefined"===i?o:("function"===i&amp;&amp;(t=t.call(this,o),i=c.type(t)),null==t&amp;&amp;a.empty?this:("string"===i&amp;&amp;(e=f.exec(t))&amp;&amp;(t=o+parseFloat(e[2])*("+"===e[1]?1:-1)),s[a.idx]=t,this[n](s)))})})}),g.hook=function(t){var e=t.split(" ");b(e,function(t,o){c.cssHooks[o]={set:function(t,e){var i,n,s="";if("transparent"!==e&amp;&amp;("string"!==c.type(e)||(i=q(e)))){if(e=g(i||e),!y.rgba&amp;&amp;1!==e._rgba[3]){for(n="backgroundColor"===o?t.parentNode:t;(""===s||"transparent"===s)&amp;&amp;n&amp;&amp;n.style;)try{s=c.css(n,"backgroundColor"),n=n.parentNode}catch(t){}e=e.blend(s&amp;&amp;"transparent"!==s?s:"_default")}e=e.toRgbaString()}try{t.style[o]=e}catch(t){}}},c.fx.step[o]=function(t){t.colorInit||(t.start=g(t.elem,o),t.end=g(t.end),t.colorInit=!0),c.cssHooks[o].set(t.elem,t.start.transition(t.end,t.pos))}})},g.hook("backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor"),c.cssHooks.borderColor={expand:function(i){var n={};return b(["Top","Right","Bottom","Left"],function(t,e){n["border"+e+"Color"]=i}),n}},p=c.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"},P=["add","remove","toggle"],A={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1},k.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,e){k.fx.step[e]=function(t){("none"!==t.end&amp;&amp;!t.setAttr||1===t.pos&amp;&amp;!t.setAttr)&amp;&amp;(F.style(t.elem,e,t.end),t.setAttr=!0)}}),k.fn.addBack||(k.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),k.effects.animateClass=function(s,t,e,i){var o=k.speed(t,e,i);return this.queue(function(){var i=k(this),t=i.attr("class")||"",e=(e=o.children?i.find("*").addBack():i).map(function(){return{el:k(this),start:Y(this)}}),n=function(){k.each(P,function(t,e){s[e]&amp;&amp;i[e+"Class"](s[e])})};n(),e=e.map(function(){return this.end=Y(this.el[0]),this.diff=function(t,e){var i,n,s={};for(i in e)n=e[i],t[i]!==n&amp;&amp;(A[i]||!k.fx.step[i]&amp;&amp;isNaN(parseFloat(n))||(s[i]=n));return s}(this.start,this.end),this}),i.attr("class",t),e=e.map(function(){var t=this,e=k.Deferred(),i=k.extend({},o,{queue:!1,complete:function(){e.resolve(t)}});return this.el.animate(this.diff,i),e.promise()}),k.when.apply(k,e.get()).done(function(){n(),k.each(arguments,function(){var e=this.el;k.each(this.diff,function(t){e.css(t,"")})}),o.complete.call(i[0])})})},k.fn.extend({addClass:(I=k.fn.addClass,function(t,e,i,n){return e?k.effects.animateClass.call(this,{add:t},e,i,n):I.apply(this,arguments)}),removeClass:(M=k.fn.removeClass,function(t,e,i,n){return 1&lt;arguments.length?k.effects.animateClass.call(this,{remove:t},e,i,n):M.apply(this,arguments)}),toggleClass:(w=k.fn.toggleClass,function(t,e,i,n,s){return"boolean"==typeof e||void 0===e?i?k.effects.animateClass.call(this,e?{add:t}:{remove:t},i,n,s):w.apply(this,arguments):k.effects.animateClass.call(this,{toggle:t},e,i,n)}),switchClass:function(t,e,i,n,s){return k.effects.animateClass.call(this,{add:e,remove:t},i,n,s)}}),k.expr&amp;&amp;k.expr.filters&amp;&amp;k.expr.filters.animated&amp;&amp;(k.expr.filters.animated=(E=k.expr.filters.animated,function(t){return!!k(t).data(j)||E(t)})),!1!==k.uiBackCompat&amp;&amp;k.extend(k.effects,{save:function(t,e){for(var i=0,n=e.length;i&lt;n;i++)null!==e[i]&amp;&amp;t.data(W+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,n=0,s=e.length;n&lt;s;n++)null!==e[n]&amp;&amp;(i=t.data(W+e[n]),t.css(e[n],i))},setMode:function(t,e){return"toggle"===e&amp;&amp;(e=t.is(":hidden")?"show":"hide"),e},createWrapper:function(i){if(i.parent().is(".ui-effects-wrapper"))return i.parent();var n={width:i.outerWidth(!0),height:i.outerHeight(!0),float:i.css("float")},t=k("&lt;div&gt;&lt;/div&gt;").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e={width:i.width(),height:i.height()},s=document.activeElement;try{s.id}catch(t){s=document.body}return i.wrap(t),i[0]!==s&amp;&amp;!k.contains(i[0],s)||k(s).trigger("focus"),t=i.parent(),"static"===i.css("position")?(t.css({position:"relative"}),i.css({position:"relative"})):(k.extend(n,{position:i.css("position"),zIndex:i.css("z-index")}),k.each(["top","left","bottom","right"],function(t,e){n[e]=i.css(e),isNaN(parseInt(n[e],10))&amp;&amp;(n[e]="auto")}),i.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),i.css(e),t.css(n).show()},removeWrapper:function(t){var e=document.activeElement;return t.parent().is(".ui-effects-wrapper")&amp;&amp;(t.parent().replaceWith(t),t[0]!==e&amp;&amp;!k.contains(t[0],e)||k(e).trigger("focus")),t}}),k.extend(k.effects,{version:"1.12.1",define:function(t,e,i){return i||(i=e,e="effect"),k.effects.effect[t]=i,k.effects.effect[t].mode=e,i},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var n="horizontal"!==i?(e||100)/100:1,s="vertical"!==i?(e||100)/100:1;return{height:t.height()*s,width:t.width()*n,outerHeight:t.outerHeight()*s,outerWidth:t.outerWidth()*n}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var n=t.queue();1&lt;e&amp;&amp;n.splice.apply(n,[1,0].concat(n.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data(L,t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data(L)||"",t.removeData(L)},mode:function(t,e){var i=t.is(":hidden");return"toggle"===e&amp;&amp;(e=i?"show":"hide"),(i?"hide"===e:"show"===e)&amp;&amp;(e="none"),e},getBaseline:function(t,e){var i,n;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":n=0;break;case"center":n=.5;break;case"right":n=1;break;default:n=t[1]/e.width}return{x:n,y:i}},createPlaceholder:function(t){var e,i=t.css("position"),n=t.position();return t.css({marginTop:t.css("marginTop"),marginBottom:t.css("marginBottom"),marginLeft:t.css("marginLeft"),marginRight:t.css("marginRight")}).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()),/^(static|relative)/.test(i)&amp;&amp;(i="absolute",e=k("&lt;"+t[0].nodeName+"&gt;").insertAfter(t).css({display:/^(inline|ruby)/.test(t.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:t.css("marginTop"),marginBottom:t.css("marginBottom"),marginLeft:t.css("marginLeft"),marginRight:t.css("marginRight"),float:t.css("float")}).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).addClass("ui-effects-placeholder"),t.data(W+"placeholder",e)),t.css({position:i,left:n.left,top:n.top}),e},removePlaceholder:function(t){var e=W+"placeholder",i=t.data(e);i&amp;&amp;(i.remove(),t.removeData(e))},cleanUp:function(t){k.effects.restoreStyle(t),k.effects.removePlaceholder(t)},setTransition:function(n,t,s,o){return o=o||{},k.each(t,function(t,e){var i=n.cssUnit(e);0&lt;i[0]&amp;&amp;(o[e]=i[0]*s+i[1])}),o}}),k.fn.extend({effect:function(){function t(t){var e=k(this),i=k.effects.mode(e,a)||o;e.data(j,!0),l.push(i),o&amp;&amp;("show"===i||i===o&amp;&amp;"hide"===i)&amp;&amp;e.show(),o&amp;&amp;"none"===i||k.effects.saveStyle(e),k.isFunction(t)&amp;&amp;t()}var n=U.apply(this,arguments),s=k.effects.effect[n.effect],o=s.mode,e=n.queue,i=e||"fx",r=n.complete,a=n.mode,l=[];if(k.fx.off||!s)return a?this[a](n.duration,r):this.each(function(){r&amp;&amp;r.call(this)});function h(t){var e=k(this);function i(){k.isFunction(r)&amp;&amp;r.call(e[0]),k.isFunction(t)&amp;&amp;t()}n.mode=l.shift(),!1===k.uiBackCompat||o?"none"===n.mode?(e[a](),i()):s.call(e[0],n,function(){e.removeData(j),k.effects.cleanUp(e),"hide"===n.mode&amp;&amp;e.hide(),i()}):(e.is(":hidden")?"hide"===a:"show"===a)?(e[a](),i()):s.call(e[0],n,i)}return!1===e?this.each(t).each(h):this.queue(i,t).queue(i,h)},show:(O=k.fn.show,function(t){if($(t))return O.apply(this,arguments);var e=U.apply(this,arguments);return e.mode="show",this.effect.call(this,e)}),hide:(H=k.fn.hide,function(t){if($(t))return H.apply(this,arguments);var e=U.apply(this,arguments);return e.mode="hide",this.effect.call(this,e)}),toggle:(N=k.fn.toggle,function(t){if($(t)||"boolean"==typeof t)return N.apply(this,arguments);var e=U.apply(this,arguments);return e.mode="toggle",this.effect.call(this,e)}),cssUnit:function(t){var i=this.css(t),n=[];return k.each(["em","px","%","pt"],function(t,e){0&lt;i.indexOf(e)&amp;&amp;(n=[parseFloat(i),e])}),n},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):K(this.css("clip"),this)},transfer:function(t,e){var i=k(this),n=k(t.to),s="fixed"===n.css("position"),o=k("body"),r=s?o.scrollTop():0,a=s?o.scrollLeft():0,l=n.offset(),h={top:l.top-r,left:l.left-a,height:n.innerHeight(),width:n.innerWidth()},u=i.offset(),c=k("&lt;div class='ui-effects-transfer'&gt;&lt;/div&gt;").appendTo("body").addClass(t.className).css({top:u.top-r,left:u.left-a,height:i.innerHeight(),width:i.innerWidth(),position:s?"fixed":"absolute"}).animate(h,t.duration,t.easing,function(){c.remove(),k.isFunction(e)&amp;&amp;e()})}}),k.fx.step.clip=function(t){t.clipInit||(t.start=k(t.elem).cssClip(),"string"==typeof t.end&amp;&amp;(t.end=K(t.end,t.elem)),t.clipInit=!0),k(t.elem).cssClip({top:t.pos*(t.end.top-t.start.top)+t.start.top,right:t.pos*(t.end.right-t.start.right)+t.start.right,bottom:t.pos*(t.end.bottom-t.start.bottom)+t.start.bottom,left:t.pos*(t.end.left-t.start.left)+t.start.left})},z={},k.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,t){z[t]=function(t){return Math.pow(t,e+2)}}),k.extend(z,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;t&lt;((e=Math.pow(2,--i))-1)/11;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),k.each(z,function(t,e){k.easing["easeIn"+t]=e,k.easing["easeOut"+t]=function(t){return 1-e(1-t)},k.easing["easeInOut"+t]=function(t){return t&lt;.5?e(2*t)/2:1-e(-2*t+2)/2}});k.effects,k.effects.define("blind","hide",function(t,e){var i={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},n=k(this),s=t.direction||"up",o=n.cssClip(),r={clip:k.extend({},o)},a=k.effects.createPlaceholder(n);r.clip[i[s][0]]=r.clip[i[s][1]],"show"===t.mode&amp;&amp;(n.cssClip(r.clip),a&amp;&amp;a.css(k.effects.clipToBox(r)),r.clip=o),a&amp;&amp;a.animate(k.effects.clipToBox(r),t.duration,t.easing),n.animate(r,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),k.effects.define("bounce",function(t,e){var i,n,s,o=k(this),r=t.mode,a="hide"===r,l="show"===r,h=t.direction||"up",u=t.distance,c=t.times||5,d=2*c+(l||a?1:0),p=t.duration/d,f=t.easing,g="up"===h||"down"===h?"top":"left",m="up"===h||"left"===h,v=0,y=o.queue().length;for(k.effects.createPlaceholder(o),s=o.css(g),u=u||o["top"==g?"outerHeight":"outerWidth"]()/3,l&amp;&amp;((n={opacity:1})[g]=s,o.css("opacity",0).css(g,m?2*-u:2*u).animate(n,p,f)),a&amp;&amp;(u/=Math.pow(2,c-1)),(n={})[g]=s;v&lt;c;v++)(i={})[g]=(m?"-=":"+=")+u,o.animate(i,p,f).animate(n,p,f),u=a?2*u:u/2;a&amp;&amp;((i={opacity:0})[g]=(m?"-=":"+=")+u,o.animate(i,p,f)),o.queue(e),k.effects.unshift(o,y,1+d)}),k.effects.define("clip","hide",function(t,e){var i={},n=k(this),s=t.direction||"vertical",o="both"===s,r=o||"horizontal"===s,a=o||"vertical"===s,l=n.cssClip();i.clip={top:a?(l.bottom-l.top)/2:l.top,right:r?(l.right-l.left)/2:l.right,bottom:a?(l.bottom-l.top)/2:l.bottom,left:r?(l.right-l.left)/2:l.left},k.effects.createPlaceholder(n),"show"===t.mode&amp;&amp;(n.cssClip(i.clip),i.clip=l),n.animate(i,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),k.effects.define("drop","hide",function(t,e){var i,n=k(this),s="show"===t.mode,o=t.direction||"left",r="up"===o||"down"===o?"top":"left",a="up"===o||"left"===o?"-=":"+=",l="+="==a?"-=":"+=",h={opacity:0};k.effects.createPlaceholder(n),i=t.distance||n["top"==r?"outerHeight":"outerWidth"](!0)/2,h[r]=a+i,s&amp;&amp;(n.css(h),h[r]=l+i,h.opacity=1),n.animate(h,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),k.effects.define("explode","hide",function(t,e){var i,n,s,o,r,a,l=t.pieces?Math.round(Math.sqrt(t.pieces)):3,h=l,u=k(this),c="show"===t.mode,d=u.show().css("visibility","hidden").offset(),p=Math.ceil(u.outerWidth()/h),f=Math.ceil(u.outerHeight()/l),g=[];function m(){g.push(this),g.length===l*h&amp;&amp;(u.css({visibility:"visible"}),k(g).remove(),e())}for(i=0;i&lt;l;i++)for(o=d.top+i*f,a=i-(l-1)/2,n=0;n&lt;h;n++)s=d.left+n*p,r=n-(h-1)/2,u.clone().appendTo("body").wrap("&lt;div&gt;&lt;/div&gt;").css({position:"absolute",visibility:"visible",left:-n*p,top:-i*f}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:p,height:f,left:s+(c?r*p:0),top:o+(c?a*f:0),opacity:c?0:1}).animate({left:s+(c?0:r*p),top:o+(c?0:a*f),opacity:c?1:0},t.duration||500,t.easing,m)}),k.effects.define("fade","toggle",function(t,e){var i="show"===t.mode;k(this).css("opacity",i?0:1).animate({opacity:i?1:0},{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),k.effects.define("fold","hide",function(e,t){var i=k(this),n=e.mode,s="show"===n,o="hide"===n,r=e.size||15,a=/([0-9]+)%/.exec(r),l=!!e.horizFirst?["right","bottom"]:["bottom","right"],h=e.duration/2,u=k.effects.createPlaceholder(i),c=i.cssClip(),d={clip:k.extend({},c)},p={clip:k.extend({},c)},f=[c[l[0]],c[l[1]]],g=i.queue().length;a&amp;&amp;(r=parseInt(a[1],10)/100*f[o?0:1]),d.clip[l[0]]=r,p.clip[l[0]]=r,p.clip[l[1]]=0,s&amp;&amp;(i.cssClip(p.clip),u&amp;&amp;u.css(k.effects.clipToBox(p)),p.clip=c),i.queue(function(t){u&amp;&amp;u.animate(k.effects.clipToBox(d),h,e.easing).animate(k.effects.clipToBox(p),h,e.easing),t()}).animate(d,h,e.easing).animate(p,h,e.easing).queue(t),k.effects.unshift(i,g,4)}),k.effects.define("highlight","show",function(t,e){var i=k(this),n={backgroundColor:i.css("backgroundColor")};"hide"===t.mode&amp;&amp;(n.opacity=0),k.effects.saveStyle(i),i.css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(n,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),k.effects.define("size",function(s,e){var t,o,i,n=k(this),r=["fontSize"],a=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],l=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],h=s.mode,u="effect"!==h,c=s.scale||"both",d=s.origin||["middle","center"],p=n.css("position"),f=n.position(),g=k.effects.scaledDimensions(n),m=s.from||g,v=s.to||k.effects.scaledDimensions(n,0);k.effects.createPlaceholder(n),"show"===h&amp;&amp;(i=m,m=v,v=i),o={from:{y:m.height/g.height,x:m.width/g.width},to:{y:v.height/g.height,x:v.width/g.width}},"box"!==c&amp;&amp;"both"!==c||(o.from.y!==o.to.y&amp;&amp;(m=k.effects.setTransition(n,a,o.from.y,m),v=k.effects.setTransition(n,a,o.to.y,v)),o.from.x!==o.to.x&amp;&amp;(m=k.effects.setTransition(n,l,o.from.x,m),v=k.effects.setTransition(n,l,o.to.x,v))),"content"!==c&amp;&amp;"both"!==c||o.from.y!==o.to.y&amp;&amp;(m=k.effects.setTransition(n,r,o.from.y,m),v=k.effects.setTransition(n,r,o.to.y,v)),d&amp;&amp;(t=k.effects.getBaseline(d,g),m.top=(g.outerHeight-m.outerHeight)*t.y+f.top,m.left=(g.outerWidth-m.outerWidth)*t.x+f.left,v.top=(g.outerHeight-v.outerHeight)*t.y+f.top,v.left=(g.outerWidth-v.outerWidth)*t.x+f.left),n.css(m),"content"!==c&amp;&amp;"both"!==c||(a=a.concat(["marginTop","marginBottom"]).concat(r),l=l.concat(["marginLeft","marginRight"]),n.find("*[width]").each(function(){var t=k(this),e=k.effects.scaledDimensions(t),i={height:e.height*o.from.y,width:e.width*o.from.x,outerHeight:e.outerHeight*o.from.y,outerWidth:e.outerWidth*o.from.x},n={height:e.height*o.to.y,width:e.width*o.to.x,outerHeight:e.height*o.to.y,outerWidth:e.width*o.to.x};o.from.y!==o.to.y&amp;&amp;(i=k.effects.setTransition(t,a,o.from.y,i),n=k.effects.setTransition(t,a,o.to.y,n)),o.from.x!==o.to.x&amp;&amp;(i=k.effects.setTransition(t,l,o.from.x,i),n=k.effects.setTransition(t,l,o.to.x,n)),u&amp;&amp;k.effects.saveStyle(t),t.css(i),t.animate(n,s.duration,s.easing,function(){u&amp;&amp;k.effects.restoreStyle(t)})})),n.animate(v,{queue:!1,duration:s.duration,easing:s.easing,complete:function(){var t=n.offset();0===v.opacity&amp;&amp;n.css("opacity",m.opacity),u||(n.css("position","static"===p?"relative":p).offset(t),k.effects.saveStyle(n)),e()}})}),k.effects.define("scale",function(t,e){var i=k(this),n=t.mode,s=parseInt(t.percent,10)||(0===parseInt(t.percent,10)||"effect"!==n?0:100),o=k.extend(!0,{from:k.effects.scaledDimensions(i),to:k.effects.scaledDimensions(i,s,t.direction||"both"),origin:t.origin||["middle","center"]},t);t.fade&amp;&amp;(o.from.opacity=1,o.to.opacity=0),k.effects.effect.size.call(this,o,e)}),k.effects.define("puff","hide",function(t,e){var i=k.extend(!0,{},t,{fade:!0,percent:parseInt(t.percent,10)||150});k.effects.effect.scale.call(this,i,e)}),k.effects.define("pulsate","show",function(t,e){var i=k(this),n=t.mode,s="show"===n,o=s||"hide"===n,r=2*(t.times||5)+(o?1:0),a=t.duration/r,l=0,h=1,u=i.queue().length;for(!s&amp;&amp;i.is(":visible")||(i.css("opacity",0).show(),l=1);h&lt;r;h++)i.animate({opacity:l},a,t.easing),l=1-l;i.animate({opacity:l},a,t.easing),i.queue(e),k.effects.unshift(i,u,1+r)}),k.effects.define("shake",function(t,e){var i=1,n=k(this),s=t.direction||"left",o=t.distance||20,r=t.times||3,a=2*r+1,l=Math.round(t.duration/a),h="up"===s||"down"===s?"top":"left",u="up"===s||"left"===s,c={},d={},p={},f=n.queue().length;for(k.effects.createPlaceholder(n),c[h]=(u?"-=":"+=")+o,d[h]=(u?"+=":"-=")+2*o,p[h]=(u?"-=":"+=")+2*o,n.animate(c,l,t.easing);i&lt;r;i++)n.animate(d,l,t.easing).animate(p,l,t.easing);n.animate(d,l,t.easing).animate(c,l/2,t.easing).queue(e),k.effects.unshift(n,f,1+a)}),k.effects.define("slide","show",function(t,e){var i,n,s=k(this),o={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},r=t.mode,a=t.direction||"left",l="up"===a||"down"===a?"top":"left",h="up"===a||"left"===a,u=t.distance||s["top"==l?"outerHeight":"outerWidth"](!0),c={};k.effects.createPlaceholder(s),i=s.cssClip(),n=s.position()[l],c[l]=(h?-1:1)*u+n,c.clip=s.cssClip(),c.clip[o[a][1]]=c.clip[o[a][0]],"show"===r&amp;&amp;(s.cssClip(c.clip),s.css(l,c[l]),c.clip=i,c[l]=n),s.animate(c,{queue:!1,duration:t.duration,easing:t.easing,complete:e})});!1!==k.uiBackCompat&amp;&amp;k.effects.define("transfer",function(t,e){k(this).transfer(t,e)});k.ui.focusable=function(t,e){var i,n,s,o,r,a=t.nodeName.toLowerCase();return"area"===a?(n=(i=t.parentNode).name,!(!t.href||!n||"map"!==i.nodeName.toLowerCase())&amp;&amp;(0&lt;(s=k("img[usemap='#"+n+"']")).length&amp;&amp;s.is(":visible"))):(/^(input|select|textarea|button|object)$/.test(a)?(o=!t.disabled)&amp;&amp;(r=k(t).closest("fieldset")[0])&amp;&amp;(o=!r.disabled):o="a"===a&amp;&amp;t.href||e,o&amp;&amp;k(t).is(":visible")&amp;&amp;function(t){var e=t.css("visibility");for(;"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}(k(t)))},k.extend(k.expr[":"],{focusable:function(t){return k.ui.focusable(t,null!=k.attr(t,"tabindex"))}});k.ui.focusable,k.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):k(this[0].form)},k.ui.formResetMixin={_formResetHandler:function(){var e=k(this);setTimeout(function(){var t=e.data("ui-form-reset-instances");k.each(t,function(){this.refresh()})})},_bindFormResetHandler:function(){var t;this.form=this.element.form(),this.form.length&amp;&amp;((t=this.form.data("ui-form-reset-instances")||[]).length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t))},_unbindFormResetHandler:function(){var t;this.form.length&amp;&amp;((t=this.form.data("ui-form-reset-instances")).splice(k.inArray(this,t),1),t.length?this.form.data("ui-form-reset-instances",t):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset"))}};"1.7"===k.fn.jquery.substring(0,3)&amp;&amp;(k.each(["Width","Height"],function(t,i){var s="Width"===i?["Left","Right"]:["Top","Bottom"],n=i.toLowerCase(),o={innerWidth:k.fn.innerWidth,innerHeight:k.fn.innerHeight,outerWidth:k.fn.outerWidth,outerHeight:k.fn.outerHeight};function r(t,e,i,n){return k.each(s,function(){e-=parseFloat(k.css(t,"padding"+this))||0,i&amp;&amp;(e-=parseFloat(k.css(t,"border"+this+"Width"))||0),n&amp;&amp;(e-=parseFloat(k.css(t,"margin"+this))||0)}),e}k.fn["inner"+i]=function(t){return void 0===t?o["inner"+i].call(this):this.each(function(){k(this).css(n,r(this,t)+"px")})},k.fn["outer"+i]=function(t,e){return"number"!=typeof t?o["outer"+i].call(this,t):this.each(function(){k(this).css(n,r(this,t,!0,e)+"px")})}}),k.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))});var V,X;k.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},k.ui.escapeSelector=(V=/([!"#$%&amp;'()*+,./:;&lt;=&gt;?@[\]^`{|}~])/g,function(t){return t.replace(V,"\\$1")}),k.fn.labels=function(){var t,e,i,n,s;return this[0].labels&amp;&amp;this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),(i=this.attr("id"))&amp;&amp;(s=(t=this.eq(0).parents().last()).add(t.length?t.siblings():this.siblings()),e="label[for='"+k.ui.escapeSelector(i)+"']",n=n.add(s.find(e).addBack(e))),this.pushStack(n))},k.fn.scrollParent=function(t){var e=this.css("position"),i="absolute"===e,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,s=this.parents().filter(function(){var t=k(this);return(!i||"static"!==t.css("position"))&amp;&amp;n.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==e&amp;&amp;s.length?s:k(this[0].ownerDocument||document)},k.extend(k.expr[":"],{tabbable:function(t){var e=k.attr(t,"tabindex"),i=null!=e;return(!i||0&lt;=e)&amp;&amp;k.ui.focusable(t,i)}}),k.fn.extend({uniqueId:(X=0,function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++X)})}),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&amp;&amp;k(this).removeAttr("id")})}}),k.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"&gt; li &gt; :first-child, &gt; :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=k(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),t.collapsible||!1!==t.active&amp;&amp;null!=t.active||(t.active=0),this._processPanels(),t.active&lt;0&amp;&amp;(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():k()}},_createIcons:function(){var t,e,i=this.options.icons;i&amp;&amp;(t=k("&lt;span&gt;"),this._addClass(t,"ui-accordion-header-icon","ui-icon "+i.header),t.prependTo(this.headers),e=this.active.children(".ui-accordion-header-icon"),this._removeClass(e,i.header)._addClass(e,null,i.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&amp;&amp;t.css("height","")},_setOption:function(t,e){"active"!==t?("event"===t&amp;&amp;(this.options.event&amp;&amp;this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||!1!==this.options.active||this._activate(0),"icons"===t&amp;&amp;(this._destroyIcons(),e&amp;&amp;this._createIcons())):this._activate(e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(t){if(!t.altKey&amp;&amp;!t.ctrlKey){var e=k.ui.keyCode,i=this.headers.length,n=this.headers.index(t.target),s=!1;switch(t.keyCode){case e.RIGHT:case e.DOWN:s=this.headers[(n+1)%i];break;case e.LEFT:case e.UP:s=this.headers[(n-1+i)%i];break;case e.SPACE:case e.ENTER:this._eventHandler(t);break;case e.HOME:s=this.headers[0];break;case e.END:s=this.headers[i-1]}s&amp;&amp;(k(t.target).attr("tabIndex",-1),k(s).attr("tabIndex",0),k(s).trigger("focus"),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===k.ui.keyCode.UP&amp;&amp;t.ctrlKey&amp;&amp;k(t.currentTarget).prev().trigger("focus")},refresh:function(){var t=this.options;this._processPanels(),!1===t.active&amp;&amp;!0===t.collapsible||!this.headers.length?(t.active=!1,this.active=k()):!1===t.active?this._activate(0):this.active.length&amp;&amp;!k.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=k()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&amp;&amp;(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var i,t=this.options,e=t.heightStyle,n=this.element.parent();this.active=this._findActive(t.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var t=k(this),e=t.uniqueId().attr("id"),i=t.next(),n=i.uniqueId().attr("id");t.attr("aria-controls",n),i.attr("aria-labelledby",e)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(t.event),"fill"===e?(i=n.height(),this.element.siblings(":visible").each(function(){var t=k(this),e=t.css("position");"absolute"!==e&amp;&amp;"fixed"!==e&amp;&amp;(i-=t.outerHeight(!0))}),this.headers.each(function(){i-=k(this).outerHeight(!0)}),this.headers.next().each(function(){k(this).height(Math.max(0,i-k(this).innerHeight()+k(this).height()))}).css("overflow","auto")):"auto"===e&amp;&amp;(i=0,this.headers.next().each(function(){var t=k(this).is(":visible");t||k(this).show(),i=Math.max(i,k(this).css("height","").height()),t||k(this).hide()}).height(i))},_activate:function(t){var e=this._findActive(t)[0];e!==this.active[0]&amp;&amp;(e=e||this.active[0],this._eventHandler({target:e,currentTarget:e,preventDefault:k.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):k()},_setupEvents:function(t){var i={keydown:"_keydown"};t&amp;&amp;k.each(t.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var e,i,n=this.options,s=this.active,o=k(t.currentTarget),r=o[0]===s[0],a=r&amp;&amp;n.collapsible,l=a?k():o.next(),h=s.next(),u={oldHeader:s,oldPanel:h,newHeader:a?k():o,newPanel:l};t.preventDefault(),r&amp;&amp;!n.collapsible||!1===this._trigger("beforeActivate",t,u)||(n.active=!a&amp;&amp;this.headers.index(o),this.active=r?k():o,this._toggle(u),this._removeClass(s,"ui-accordion-header-active","ui-state-active"),n.icons&amp;&amp;(e=s.children(".ui-accordion-header-icon"),this._removeClass(e,null,n.icons.activeHeader)._addClass(e,null,n.icons.header)),r||(this._removeClass(o,"ui-accordion-header-collapsed")._addClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&amp;&amp;(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.header)._addClass(i,null,n.icons.activeHeader)),this._addClass(o.next(),"ui-accordion-content-active")))},_toggle:function(t){var e=t.newPanel,i=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=e,this.prevHide=i,this.options.animate?this._animate(e,i,t):(i.hide(),e.show(),this._toggleComplete(t)),i.attr({"aria-hidden":"true"}),i.prev().attr({"aria-selected":"false","aria-expanded":"false"}),e.length&amp;&amp;i.length?i.prev().attr({tabIndex:-1,"aria-expanded":"false"}):e.length&amp;&amp;this.headers.filter(function(){return 0===parseInt(k(this).attr("tabIndex"),10)}).attr("tabIndex",-1),e.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,i,e){function n(){a._toggleComplete(e)}var s,o,r,a=this,l=0,h=t.css("box-sizing"),u=t.length&amp;&amp;(!i.length||t.index()&lt;i.index()),c=this.options.animate||{},d=u&amp;&amp;c.down||c;return"number"==typeof d&amp;&amp;(r=d),"string"==typeof d&amp;&amp;(o=d),o=o||d.easing||c.easing,r=r||d.duration||c.duration,i.length?t.length?(s=t.show().outerHeight(),i.animate(this.hideProps,{duration:r,easing:o,step:function(t,e){e.now=Math.round(t)}}),void t.hide().animate(this.showProps,{duration:r,easing:o,complete:n,step:function(t,e){e.now=Math.round(t),"height"!==e.prop?"content-box"===h&amp;&amp;(l+=e.now):"content"!==a.options.heightStyle&amp;&amp;(e.now=Math.round(s-i.outerHeight()-l),l=0)}})):i.animate(this.hideProps,r,o,n):t.animate(this.showProps,r,o,n)},_toggleComplete:function(t){var e=t.oldPanel,i=e.prev();this._removeClass(e,"ui-accordion-content-active"),this._removeClass(i,"ui-accordion-header-active")._addClass(i,"ui-accordion-header-collapsed"),e.length&amp;&amp;(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}}),k.ui.safeActiveElement=function(e){var i;try{i=e.activeElement}catch(t){i=e.body}return(i=i||e.body).nodeName||(i=e.body),i},k.widget("ui.menu",{version:"1.12.1",defaultElement:"&lt;ul&gt;",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"&gt; *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(t){var e=k(t.target),i=k(k.ui.safeActiveElement(this.document[0]));!this.mouseHandled&amp;&amp;e.not(".ui-state-disabled").length&amp;&amp;(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),e.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&amp;&amp;i.closest(".ui-menu").length&amp;&amp;(this.element.trigger("focus",[!0]),this.active&amp;&amp;1===this.active.parents(".ui-menu").length&amp;&amp;clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){var e,i;this.previousFilter||(e=k(t.target).closest(".ui-menu-item"),i=k(t.currentTarget),e[0]===i[0]&amp;&amp;(this._removeClass(i.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(t,i)))},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(t){this._delay(function(){k.contains(this.element[0],k.ui.safeActiveElement(this.document[0]))||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&amp;&amp;this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var t=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),t.children().each(function(){var t=k(this);t.data("ui-menu-submenu-caret")&amp;&amp;t.remove()})},_keydown:function(t){var e,i,n,s,o=!0;switch(t.keyCode){case k.ui.keyCode.PAGE_UP:this.previousPage(t);break;case k.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case k.ui.keyCode.HOME:this._move("first","first",t);break;case k.ui.keyCode.END:this._move("last","last",t);break;case k.ui.keyCode.UP:this.previous(t);break;case k.ui.keyCode.DOWN:this.next(t);break;case k.ui.keyCode.LEFT:this.collapse(t);break;case k.ui.keyCode.RIGHT:this.active&amp;&amp;!this.active.is(".ui-state-disabled")&amp;&amp;this.expand(t);break;case k.ui.keyCode.ENTER:case k.ui.keyCode.SPACE:this._activate(t);break;case k.ui.keyCode.ESCAPE:this.collapse(t);break;default:o=!1,i=this.previousFilter||"",s=!1,n=96&lt;=t.keyCode&amp;&amp;t.keyCode&lt;=105?(t.keyCode-96).toString():String.fromCharCode(t.keyCode),clearTimeout(this.filterTimer),n===i?s=!0:n=i+n,e=this._filterMenuItems(n),(e=s&amp;&amp;-1!==e.index(this.active.next())?this.active.nextAll(".ui-menu-item"):e).length||(n=String.fromCharCode(t.keyCode),e=this._filterMenuItems(n)),e.length?(this.focus(t,e),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}o&amp;&amp;t.preventDefault()},_activate:function(t){this.active&amp;&amp;!this.active.is(".ui-state-disabled")&amp;&amp;(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var t,e,i,n,s=this,o=this.options.icons.submenu,r=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),e=r.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=k(this),e=t.prev(),i=k("&lt;span&gt;").data("ui-menu-submenu-caret",!0);s._addClass(i,"ui-menu-icon","ui-icon "+o),e.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",e.attr("id"))}),this._addClass(e,"ui-menu","ui-widget ui-widget-content ui-front"),(t=r.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var t=k(this);s._isDivider(t)&amp;&amp;s._addClass(t,"ui-menu-divider","ui-widget-content")}),n=(i=t.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(i,"ui-menu-item")._addClass(n,"ui-menu-item-wrapper"),t.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&amp;&amp;!k.contains(this.element[0],this.active[0])&amp;&amp;this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){var i;"icons"===t&amp;&amp;(i=this.element.find(".ui-menu-icon"),this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,n,s;this.blur(t,t&amp;&amp;"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),n=this.active.children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),this.options.role&amp;&amp;this.element.attr("aria-activedescendant",n.attr("id")),s=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),t&amp;&amp;"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&amp;&amp;t&amp;&amp;/^mouse/.test(t.type)&amp;&amp;this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(t){var e,i,n,s,o,r;this._hasScroll()&amp;&amp;(e=parseFloat(k.css(this.activeMenu[0],"borderTopWidth"))||0,i=parseFloat(k.css(this.activeMenu[0],"paddingTop"))||0,n=t.offset().top-this.activeMenu.offset().top-e-i,s=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=t.outerHeight(),n&lt;0?this.activeMenu.scrollTop(s+n):o&lt;n+r&amp;&amp;this.activeMenu.scrollTop(s+n-o+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&amp;&amp;(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&amp;&amp;(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(t){var e=k.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(e)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var t=i?this.element:k(e&amp;&amp;e.target).closest(this.element.find(".ui-menu"));t.length||(t=this.element),this._close(t),this.blur(e),this._removeClass(t.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=t},this.delay)},_close:function(t){(t=t||(this.active?this.active.parent():this.element)).find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(t){return!k(t.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&amp;&amp;this.active.parent().closest(".ui-menu-item",this.element);e&amp;&amp;e.length&amp;&amp;(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&amp;&amp;this.active.children(".ui-menu ").find(this.options.items).first();e&amp;&amp;e.length&amp;&amp;(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&amp;&amp;!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&amp;&amp;!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var n;this.active&amp;&amp;(n="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),n&amp;&amp;n.length&amp;&amp;this.active||(n=this.activeMenu.find(this.options.items)[e]()),this.focus(i,n)},nextPage:function(t){var e,i,n;this.active?this.isLastItem()||(this._hasScroll()?(i=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return(e=k(this)).offset().top-i-n&lt;0}),this.focus(t,e)):this.focus(t,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())):this.next(t)},previousPage:function(t){var e,i,n;this.active?this.isFirstItem()||(this._hasScroll()?(i=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return 0&lt;(e=k(this)).offset().top-i+n}),this.focus(t,e)):this.focus(t,this.activeMenu.find(this.options.items).first())):this.next(t)},_hasScroll:function(){return this.element.outerHeight()&lt;this.element.prop("scrollHeight")},select:function(t){this.active=this.active||k(t.target).closest(".ui-menu-item");var e={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(t,!0),this._trigger("select",t,e)},_filterMenuItems:function(t){var e=t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&amp;"),i=new RegExp("^"+e,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return i.test(k.trim(k(this).children(".ui-menu-item-wrapper").text()))})}});k.widget("ui.autocomplete",{version:"1.12.1",defaultElement:"&lt;input&gt;",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var i,n,s,t=this.element[0].nodeName.toLowerCase(),e="textarea"===t,o="input"===t;this.isMultiLine=e||!o&amp;&amp;this._isContentEditable(this.element),this.valueMethod=this.element[e||o?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(t){if(this.element.prop("readOnly"))n=s=i=!0;else{n=s=i=!1;var e=k.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:i=!0,this._move("previousPage",t);break;case e.PAGE_DOWN:i=!0,this._move("nextPage",t);break;case e.UP:i=!0,this._keyEvent("previous",t);break;case e.DOWN:i=!0,this._keyEvent("next",t);break;case e.ENTER:this.menu.active&amp;&amp;(i=!0,t.preventDefault(),this.menu.select(t));break;case e.TAB:this.menu.active&amp;&amp;this.menu.select(t);break;case e.ESCAPE:this.menu.element.is(":visible")&amp;&amp;(this.isMultiLine||this._value(this.term),this.close(t),t.preventDefault());break;default:n=!0,this._searchTimeout(t)}}},keypress:function(t){if(i)return i=!1,void(this.isMultiLine&amp;&amp;!this.menu.element.is(":visible")||t.preventDefault());if(!n){var e=k.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:this._move("previousPage",t);break;case e.PAGE_DOWN:this._move("nextPage",t);break;case e.UP:this._keyEvent("previous",t);break;case e.DOWN:this._keyEvent("next",t)}}},input:function(t){if(s)return s=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){this.cancelBlur?delete this.cancelBlur:(clearTimeout(this.searching),this.close(t),this._change(t))}}),this._initSource(),this.menu=k("&lt;ul&gt;").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==k.ui.safeActiveElement(this.document[0])&amp;&amp;this.element.trigger("focus")})},menufocus:function(t,e){var i,n;if(this.isNewMenu&amp;&amp;(this.isNewMenu=!1,t.originalEvent&amp;&amp;/^mouse/.test(t.originalEvent.type)))return this.menu.blur(),void this.document.one("mousemove",function(){k(t.target).trigger(t.originalEvent)});n=e.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:n})&amp;&amp;t.originalEvent&amp;&amp;/^key/.test(t.originalEvent.type)&amp;&amp;this._value(n.value),(i=e.item.attr("aria-label")||n.value)&amp;&amp;k.trim(i).length&amp;&amp;(this.liveRegion.children().hide(),k("&lt;div&gt;").text(i).appendTo(this.liveRegion))},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==k.ui.safeActiveElement(this.document[0])&amp;&amp;(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&amp;&amp;this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=k("&lt;div&gt;",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&amp;&amp;this._initSource(),"appendTo"===t&amp;&amp;this.menu.element.appendTo(this._appendTo()),"disabled"===t&amp;&amp;e&amp;&amp;this.xhr&amp;&amp;this.xhr.abort()},_isEventTargetInWidget:function(t){var e=this.menu.element[0];return t.target===this.element[0]||t.target===e||k.contains(e,t.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var t=this.options.appendTo;return(t=t&amp;&amp;(t.jquery||t.nodeType?k(t):this.document.find(t).eq(0)))&amp;&amp;t[0]||(t=this.element.closest(".ui-front, dialog")),t.length||(t=this.document[0].body),t},_initSource:function(){var i,n,s=this;Array.isArray(this.options.source)?(i=this.options.source,this.source=function(t,e){e(k.ui.autocomplete.filter(i,t.term))}):"string"==typeof this.options.source?(n=this.options.source,this.source=function(t,e){s.xhr&amp;&amp;s.xhr.abort(),s.xhr=k.ajax({url:n,data:t,dataType:"json",success:function(t){e(t)},error:function(){e([])}})}):this.source=this.options.source},_searchTimeout:function(n){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),e=this.menu.element.is(":visible"),i=n.altKey||n.ctrlKey||n.metaKey||n.shiftKey;t&amp;&amp;(!t||e||i)||(this.selectedItem=null,this.search(null,n))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length&lt;this.options.minLength?this.close(e):!1!==this._trigger("search",e)?this._search(t):void 0},_search:function(t){this.pending++,this._addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var e=++this.requestIndex;return k.proxy(function(t){e===this.requestIndex&amp;&amp;this.__response(t),this.pending--,this.pending||this._removeClass("ui-autocomplete-loading")},this)},__response:function(t){t=t&amp;&amp;this._normalize(t),this._trigger("response",null,{content:t}),!this.options.disabled&amp;&amp;t&amp;&amp;t.length&amp;&amp;!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this._off(this.document,"mousedown"),this.menu.element.is(":visible")&amp;&amp;(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&amp;&amp;this._trigger("change",t,{item:this.selectedItem})},_normalize:function(t){return t.length&amp;&amp;t[0].label&amp;&amp;t[0].value?t:k.map(t,function(t){return"string"==typeof t?{label:t,value:t}:k.extend({},t,{label:t.label||t.value,value:t.value||t.label})})},_suggest:function(t){var e=this.menu.element.empty();this._renderMenu(e,t),this.isNewMenu=!0,this.menu.refresh(),e.show(),this._resizeMenu(),e.position(k.extend({of:this.element},this.options.position)),this.options.autoFocus&amp;&amp;this.menu.next(),this._on(this.document,{mousedown:"_closeOnClickOutside"})},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(i,t){var n=this;k.each(t,function(t,e){n._renderItemData(i,e)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(t,e){return k("&lt;li&gt;").append(k("&lt;div&gt;").text(e.label)).appendTo(t)},_move:function(t,e){if(this.menu.element.is(":visible"))return this.menu.isFirstItem()&amp;&amp;/^previous/.test(t)||this.menu.isLastItem()&amp;&amp;/^next/.test(t)?(this.isMultiLine||this._value(this.term),void this.menu.blur()):void this.menu[t](e);this.search(null,e)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){this.isMultiLine&amp;&amp;!this.menu.element.is(":visible")||(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),k.extend(k.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&amp;")},filter:function(t,e){var i=new RegExp(k.ui.autocomplete.escapeRegex(e),"i");return k.grep(t,function(t){return i.test(t.label||t.value||t)})}}),k.widget("ui.autocomplete",k.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(1&lt;t?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var e;this._superApply(arguments),this.options.disabled||this.cancelSearch||(e=t&amp;&amp;t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.children().hide(),k("&lt;div&gt;").text(e).appendTo(this.liveRegion))}});k.ui.autocomplete;var G=/ui-corner-([a-z]){2,6}/g;k.widget("ui.controlgroup",{version:"1.12.1",defaultElement:"&lt;div&gt;",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&amp;&amp;this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var r=this,a=[];k.each(this.options.items,function(s,t){var e,o={};if(t)return"controlgroupLabel"===s?((e=r.element.find(t)).each(function(){var t=k(this);t.children(".ui-controlgroup-label-contents").length||t.contents().wrapAll("&lt;span class='ui-controlgroup-label-contents'&gt;&lt;/span&gt;")}),r._addClass(e,null,"ui-widget ui-widget-content ui-state-default"),void(a=a.concat(e.get()))):void(k.fn[s]&amp;&amp;(o=r["_"+s+"Options"]?r["_"+s+"Options"]("middle"):{classes:{}},r.element.find(t).each(function(){var t,e=k(this),i=e[s]("instance"),n=k.widget.extend({},o);"button"===s&amp;&amp;e.parent(".ui-spinner").length||((i=i||e[s]()[s]("instance"))&amp;&amp;(n.classes=r._resolveClassesValues(n.classes,i)),e[s](n),t=e[s]("widget"),k.data(t[0],"ui-controlgroup-data",i||e[s]("instance")),a.push(t[0]))})))}),this.childWidgets=k(k.unique(a)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var t=k(this).data("ui-controlgroup-data");t&amp;&amp;t[e]&amp;&amp;t[e]()})},_updateCornerClass:function(t,e){var i=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,"ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all"),this._addClass(t,null,i)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,n={classes:{}};return n.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],n},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:e&amp;&amp;"auto",classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(i,n){var s={};return k.each(i,function(t){var e=n.options.classes[t]||"",e=k.trim(e.replace(G,""));s[t]=(e+" "+i[t]).replace(/\s+/g," ")}),s},_setOption:function(t,e){"direction"===t&amp;&amp;this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"!==t?this.refresh():this._callChildMethod(e?"disable":"enable")},refresh:function(){var s,o=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&amp;&amp;this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),s=this.childWidgets,this.options.onlyVisible&amp;&amp;(s=s.filter(":visible")),s.length&amp;&amp;(k.each(["first","last"],function(t,e){var i,n=s[e]().data("ui-controlgroup-data");n&amp;&amp;o["_"+n.widgetName+"Options"]?((i=o["_"+n.widgetName+"Options"](1===s.length?"only":e)).classes=o._resolveClassesValues(i.classes,n),n.element[n.widgetName](i)):o._updateCornerClass(s[e](),e)}),this._callChildMethod("refresh"))}});k.widget("ui.checkboxradio",[k.ui.formResetMixin,{version:"1.12.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var t,e,i=this,n=this._super()||{};return this._readType(),e=this.element.labels(),this.label=k(e[e.length-1]),this.label.length||k.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){i.originalLabel+=3===this.nodeType?k(this).text():this.outerHTML}),this.originalLabel&amp;&amp;(n.label=this.originalLabel),null!=(t=this.element[0].disabled)&amp;&amp;(n.disabled=t),n},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&amp;&amp;(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&amp;&amp;this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&amp;&amp;this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&amp;&amp;(this.options.label=this.originalLabel),this._enhance(),t&amp;&amp;(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&amp;&amp;this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var t=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===t&amp;&amp;/radio|checkbox/.test(this.type)||k.error("Can't create checkboxradio on element.nodeName="+t+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var t=this.element[0].name,e="input[name='"+k.ui.escapeSelector(t)+"']";return t?(this.form.length?k(this.form[0].elements).filter(e):k(e).filter(function(){return 0===k(this).form().length})).not(this.element):k([])},_toggleClasses:function(){var t=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),this.options.icon&amp;&amp;"checkbox"===this.type&amp;&amp;this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",t)._toggleClass(this.icon,null,"ui-icon-blank",!t),"radio"===this.type&amp;&amp;this._getRadioGroup().each(function(){var t=k(this).checkboxradio("instance");t&amp;&amp;t._removeClass(t.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&amp;&amp;(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){if("label"!==t||e){if(this._super(t,e),"disabled"===t)return this._toggleClass(this.label,null,"ui-state-disabled",e),void(this.element[0].disabled=e);this.refresh()}},_updateIcon:function(t){var e="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=k("&lt;span&gt;"),this.iconSpace=k("&lt;span&gt; &lt;/span&gt;"),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(e+=t?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,t?"ui-icon-blank":"ui-icon-check")):e+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",e),t||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&amp;&amp;(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&amp;&amp;(t=t.not(this.icon[0])),this.iconSpace&amp;&amp;(t=t.not(this.iconSpace[0])),t.remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&amp;&amp;this._updateLabel(),e!==this.options.disabled&amp;&amp;this._setOptions({disabled:e})}}]);var J;k.ui.checkboxradio;k.widget("ui.button",{version:"1.12.1",defaultElement:"&lt;button&gt;",options:{classes:{"ui-button":"ui-corner-all"},disabled:null,icon:null,iconPosition:"beginning",label:null,showLabel:!0},_getCreateOptions:function(){var t,e=this._super()||{};return this.isInput=this.element.is("input"),null!=(t=this.element[0].disabled)&amp;&amp;(e.disabled=t),this.originalLabel=this.isInput?this.element.val():this.element.html(),this.originalLabel&amp;&amp;(e.label=this.originalLabel),e},_create:function(){!this.option.showLabel&amp;!this.options.icon&amp;&amp;(this.options.showLabel=!0),null==this.options.disabled&amp;&amp;(this.options.disabled=this.element[0].disabled||!1),this.hasTitle=!!this.element.attr("title"),this.options.label&amp;&amp;this.options.label!==this.originalLabel&amp;&amp;(this.isInput?this.element.val(this.options.label):this.element.html(this.options.label)),this._addClass("ui-button","ui-widget"),this._setOption("disabled",this.options.disabled),this._enhance(),this.element.is("a")&amp;&amp;this._on({keyup:function(t){t.keyCode===k.ui.keyCode.SPACE&amp;&amp;(t.preventDefault(),this.element[0].click?this.element[0].click():this.element.trigger("click"))}})},_enhance:function(){this.element.is("button")||this.element.attr("role","button"),this.options.icon&amp;&amp;(this._updateIcon("icon",this.options.icon),this._updateTooltip())},_updateTooltip:function(){this.title=this.element.attr("title"),this.options.showLabel||this.title||this.element.attr("title",this.options.label)},_updateIcon:function(t,e){var i="iconPosition"!==t,n=i?this.options.iconPosition:e,s="top"===n||"bottom"===n;this.icon?i&amp;&amp;this._removeClass(this.icon,null,this.options.icon):(this.icon=k("&lt;span&gt;"),this._addClass(this.icon,"ui-button-icon","ui-icon"),this.options.showLabel||this._addClass("ui-button-icon-only")),i&amp;&amp;this._addClass(this.icon,null,e),this._attachIcon(n),s?(this._addClass(this.icon,null,"ui-widget-icon-block"),this.iconSpace&amp;&amp;this.iconSpace.remove()):(this.iconSpace||(this.iconSpace=k("&lt;span&gt; &lt;/span&gt;"),this._addClass(this.iconSpace,"ui-button-icon-space")),this._removeClass(this.icon,null,"ui-wiget-icon-block"),this._attachIconSpace(n))},_destroy:function(){this.element.removeAttr("role"),this.icon&amp;&amp;this.icon.remove(),this.iconSpace&amp;&amp;this.iconSpace.remove(),this.hasTitle||this.element.removeAttr("title")},_attachIconSpace:function(t){this.icon[/^(?:end|bottom)/.test(t)?"before":"after"](this.iconSpace)},_attachIcon:function(t){this.element[/^(?:end|bottom)/.test(t)?"append":"prepend"](this.icon)},_setOptions:function(t){var e=void 0===t.showLabel?this.options.showLabel:t.showLabel,i=void 0===t.icon?this.options.icon:t.icon;e||i||(t.showLabel=!0),this._super(t)},_setOption:function(t,e){"icon"===t&amp;&amp;(e?this._updateIcon(t,e):this.icon&amp;&amp;(this.icon.remove(),this.iconSpace&amp;&amp;this.iconSpace.remove())),"iconPosition"===t&amp;&amp;this._updateIcon(t,e),"showLabel"===t&amp;&amp;(this._toggleClass("ui-button-icon-only",null,!e),this._updateTooltip()),"label"===t&amp;&amp;(this.isInput?this.element.val(e):(this.element.html(e),this.icon&amp;&amp;(this._attachIcon(this.options.iconPosition),this._attachIconSpace(this.options.iconPosition)))),this._super(t,e),"disabled"===t&amp;&amp;(this._toggleClass(null,"ui-state-disabled",e),(this.element[0].disabled=e)&amp;&amp;this.element.blur())},refresh:function(){var t=this.element.is("input, button")?this.element[0].disabled:this.element.hasClass("ui-button-disabled");t!==this.options.disabled&amp;&amp;this._setOptions({disabled:t}),this._updateTooltip()}}),!1!==k.uiBackCompat&amp;&amp;(k.widget("ui.button",k.ui.button,{options:{text:!0,icons:{primary:null,secondary:null}},_create:function(){this.options.showLabel&amp;&amp;!this.options.text&amp;&amp;(this.options.showLabel=this.options.text),!this.options.showLabel&amp;&amp;this.options.text&amp;&amp;(this.options.text=this.options.showLabel),this.options.icon||!this.options.icons.primary&amp;&amp;!this.options.icons.secondary?this.options.icon&amp;&amp;(this.options.icons.primary=this.options.icon):this.options.icons.primary?this.options.icon=this.options.icons.primary:(this.options.icon=this.options.icons.secondary,this.options.iconPosition="end"),this._super()},_setOption:function(t,e){"text"!==t?("showLabel"===t&amp;&amp;(this.options.text=e),"icon"===t&amp;&amp;(this.options.icons.primary=e),"icons"===t&amp;&amp;(e.primary?(this._super("icon",e.primary),this._super("iconPosition","beginning")):e.secondary&amp;&amp;(this._super("icon",e.secondary),this._super("iconPosition","end"))),this._superApply(arguments)):this._super("showLabel",e)}}),k.fn.button=(J=k.fn.button,function(){return!this.length||this.length&amp;&amp;"INPUT"!==this[0].tagName||this.length&amp;&amp;"INPUT"===this[0].tagName&amp;&amp;"checkbox"!==this.attr("type")&amp;&amp;"radio"!==this.attr("type")?J.apply(this,arguments):(k.ui.checkboxradio||k.error("Checkboxradio widget missing"),0===arguments.length?this.checkboxradio({icon:!1}):this.checkboxradio.apply(this,arguments))}),k.fn.buttonset=function(){return k.ui.controlgroup||k.error("Controlgroup widget missing"),"option"===arguments[0]&amp;&amp;"items"===arguments[1]&amp;&amp;arguments[2]?this.controlgroup.apply(this,[arguments[0],"items.button",arguments[2]]):"option"===arguments[0]&amp;&amp;"items"===arguments[1]?this.controlgroup.apply(this,[arguments[0],"items.button"]):("object"==typeof arguments[0]&amp;&amp;arguments[0].items&amp;&amp;(arguments[0].items={button:arguments[0].items}),this.controlgroup.apply(this,arguments))});var Q;k.ui.button;function Z(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},k.extend(this._defaults,this.regional[""]),this.regional.en=k.extend(!0,{},this.regional[""]),this.regional["en-US"]=k.extend(!0,{},this.regional.en),this.dpDiv=tt(k("&lt;div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'&gt;&lt;/div&gt;"))}function tt(t){var e="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.on("mouseout",e,function(){k(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&amp;&amp;k(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&amp;&amp;k(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",e,et)}function et(){k.datepicker._isDisabledDatepicker(Q.inline?Q.dpDiv.parent()[0]:Q.input[0])||(k(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),k(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&amp;&amp;k(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&amp;&amp;k(this).addClass("ui-datepicker-next-hover"))}function it(t,e){for(var i in k.extend(t,e),e)null==e[i]&amp;&amp;(t[i]=e[i]);return t}k.extend(k.ui,{datepicker:{version:"1.12.1"}}),k.extend(Z.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return it(this._defaults,t||{}),this},_attachDatepicker:function(t,e){var i,n=t.nodeName.toLowerCase(),s="div"===n||"span"===n;t.id||(this.uuid+=1,t.id="dp"+this.uuid),(i=this._newInst(k(t),s)).settings=k.extend({},e||{}),"input"===n?this._connectDatepicker(t,i):s&amp;&amp;this._inlineDatepicker(t,i)},_newInst:function(t,e){return{id:t[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1"),input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:e,dpDiv:e?tt(k("&lt;div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'&gt;&lt;/div&gt;")):this.dpDiv}},_connectDatepicker:function(t,e){var i=k(t);e.append=k([]),e.trigger=k([]),i.hasClass(this.markerClassName)||(this._attachments(i,e),i.addClass(this.markerClassName).on("keydown",this._doKeyDown).on("keypress",this._doKeyPress).on("keyup",this._doKeyUp),this._autoSize(e),k.data(t,"datepicker",e),e.settings.disabled&amp;&amp;this._disableDatepicker(t))},_attachments:function(t,e){var i,n,s,o=this._get(e,"appendText"),r=this._get(e,"isRTL");e.append&amp;&amp;e.append.remove(),o&amp;&amp;(e.append=k("&lt;span class='"+this._appendClass+"'&gt;"+o+"&lt;/span&gt;"),t[r?"before":"after"](e.append)),t.off("focus",this._showDatepicker),e.trigger&amp;&amp;e.trigger.remove(),"focus"!==(i=this._get(e,"showOn"))&amp;&amp;"both"!==i||t.on("focus",this._showDatepicker),"button"!==i&amp;&amp;"both"!==i||(n=this._get(e,"buttonText"),s=this._get(e,"buttonImage"),e.trigger=k(this._get(e,"buttonImageOnly")?k("&lt;img/&gt;").addClass(this._triggerClass).attr({src:s,alt:n,title:n}):k("&lt;button type='button'&gt;&lt;/button&gt;").addClass(this._triggerClass).html(s?k("&lt;img/&gt;").attr({src:s,alt:n,title:n}):n)),t[r?"before":"after"](e.trigger),e.trigger.on("click",function(){return k.datepicker._datepickerShowing&amp;&amp;k.datepicker._lastInput===t[0]?k.datepicker._hideDatepicker():(k.datepicker._datepickerShowing&amp;&amp;k.datepicker._lastInput!==t[0]&amp;&amp;k.datepicker._hideDatepicker(),k.datepicker._showDatepicker(t[0])),!1}))},_autoSize:function(t){var e,i,n,s,o,r;this._get(t,"autoSize")&amp;&amp;!t.inline&amp;&amp;(o=new Date(2009,11,20),(r=this._get(t,"dateFormat")).match(/[DM]/)&amp;&amp;(e=function(t){for(s=n=i=0;s&lt;t.length;s++)t[s].length&gt;i&amp;&amp;(i=t[s].length,n=s);return n},o.setMonth(e(this._get(t,r.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,r.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length))},_inlineDatepicker:function(t,e){var i=k(t);i.hasClass(this.markerClassName)||(i.addClass(this.markerClassName).append(e.dpDiv),k.data(t,"datepicker",e),this._setDate(e,this._getDefaultDate(e),!0),this._updateDatepicker(e),this._updateAlternate(e),e.settings.disabled&amp;&amp;this._disableDatepicker(t),e.dpDiv.css("display","block"))},_dialogDatepicker:function(t,e,i,n,s){var o,r,a,l,h,u=this._dialogInst;return u||(this.uuid+=1,o="dp"+this.uuid,this._dialogInput=k("&lt;input type='text' id='"+o+"' style='position: absolute; top: -100px; width: 0px;'/&gt;"),this._dialogInput.on("keydown",this._doKeyDown),k("body").append(this._dialogInput),(u=this._dialogInst=this._newInst(this._dialogInput,!1)).settings={},k.data(this._dialogInput[0],"datepicker",u)),it(u.settings,n||{}),e=e&amp;&amp;e.constructor===Date?this._formatDate(u,e):e,this._dialogInput.val(e),this._pos=s?s.length?s:[s.pageX,s.pageY]:null,this._pos||(r=document.documentElement.clientWidth,a=document.documentElement.clientHeight,l=document.documentElement.scrollLeft||document.body.scrollLeft,h=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[r/2-100+l,a/2-150+h]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),u.settings.onSelect=i,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),k.blockUI&amp;&amp;k.blockUI(this.dpDiv),k.data(this._dialogInput[0],"datepicker",u),this},_destroyDatepicker:function(t){var e,i=k(t),n=k.data(t,"datepicker");i.hasClass(this.markerClassName)&amp;&amp;(e=t.nodeName.toLowerCase(),k.removeData(t,"datepicker"),"input"===e?(n.append.remove(),n.trigger.remove(),i.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):"div"!==e&amp;&amp;"span"!==e||i.removeClass(this.markerClassName).empty(),Q===n&amp;&amp;(Q=null))},_enableDatepicker:function(e){var t,i,n=k(e),s=k.data(e,"datepicker");n.hasClass(this.markerClassName)&amp;&amp;("input"===(t=e.nodeName.toLowerCase())?(e.disabled=!1,s.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):"div"!==t&amp;&amp;"span"!==t||((i=n.children("."+this._inlineClass)).children().removeClass("ui-state-disabled"),i.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=k.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var t,i,n=k(e),s=k.data(e,"datepicker");n.hasClass(this.markerClassName)&amp;&amp;("input"===(t=e.nodeName.toLowerCase())?(e.disabled=!0,s.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):"div"!==t&amp;&amp;"span"!==t||((i=n.children("."+this._inlineClass)).children().addClass("ui-state-disabled"),i.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=k.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;e&lt;this._disabledInputs.length;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(t){try{return k.data(t,"datepicker")}catch(t){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(t,e,i){var n,s,o,r,a=this._getInst(t);if(2===arguments.length&amp;&amp;"string"==typeof e)return"defaults"===e?k.extend({},k.datepicker._defaults):a?"all"===e?k.extend({},a.settings):this._get(a,e):null;n=e||{},"string"==typeof e&amp;&amp;((n={})[e]=i),a&amp;&amp;(this._curInst===a&amp;&amp;this._hideDatepicker(),s=this._getDateDatepicker(t,!0),o=this._getMinMaxDate(a,"min"),r=this._getMinMaxDate(a,"max"),it(a.settings,n),null!==o&amp;&amp;void 0!==n.dateFormat&amp;&amp;void 0===n.minDate&amp;&amp;(a.settings.minDate=this._formatDate(a,o)),null!==r&amp;&amp;void 0!==n.dateFormat&amp;&amp;void 0===n.maxDate&amp;&amp;(a.settings.maxDate=this._formatDate(a,r)),"disabled"in n&amp;&amp;(n.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(k(t),a),this._autoSize(a),this._setDate(a,s),this._updateAlternate(a),this._updateDatepicker(a))},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&amp;&amp;this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&amp;&amp;(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&amp;&amp;!i.inline&amp;&amp;this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(t){var e,i,n,s=k.datepicker._getInst(t.target),o=!0,r=s.dpDiv.is(".ui-datepicker-rtl");if(s._keyEvent=!0,k.datepicker._datepickerShowing)switch(t.keyCode){case 9:k.datepicker._hideDatepicker(),o=!1;break;case 13:return(n=k("td."+k.datepicker._dayOverClass+":not(."+k.datepicker._currentClass+")",s.dpDiv))[0]&amp;&amp;k.datepicker._selectDay(t.target,s.selectedMonth,s.selectedYear,n[0]),(e=k.datepicker._get(s,"onSelect"))?(i=k.datepicker._formatDate(s),e.apply(s.input?s.input[0]:null,[i,s])):k.datepicker._hideDatepicker(),!1;case 27:k.datepicker._hideDatepicker();break;case 33:k.datepicker._adjustDate(t.target,t.ctrlKey?-k.datepicker._get(s,"stepBigMonths"):-k.datepicker._get(s,"stepMonths"),"M");break;case 34:k.datepicker._adjustDate(t.target,t.ctrlKey?+k.datepicker._get(s,"stepBigMonths"):+k.datepicker._get(s,"stepMonths"),"M");break;case 35:(t.ctrlKey||t.metaKey)&amp;&amp;k.datepicker._clearDate(t.target),o=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&amp;&amp;k.datepicker._gotoToday(t.target),o=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&amp;&amp;k.datepicker._adjustDate(t.target,r?1:-1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&amp;&amp;k.datepicker._adjustDate(t.target,t.ctrlKey?-k.datepicker._get(s,"stepBigMonths"):-k.datepicker._get(s,"stepMonths"),"M");break;case 38:(t.ctrlKey||t.metaKey)&amp;&amp;k.datepicker._adjustDate(t.target,-7,"D"),o=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&amp;&amp;k.datepicker._adjustDate(t.target,r?-1:1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&amp;&amp;k.datepicker._adjustDate(t.target,t.ctrlKey?+k.datepicker._get(s,"stepBigMonths"):+k.datepicker._get(s,"stepMonths"),"M");break;case 40:(t.ctrlKey||t.metaKey)&amp;&amp;k.datepicker._adjustDate(t.target,7,"D"),o=t.ctrlKey||t.metaKey;break;default:o=!1}else 36===t.keyCode&amp;&amp;t.ctrlKey?k.datepicker._showDatepicker(this):o=!1;o&amp;&amp;(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var e,i,n=k.datepicker._getInst(t.target);if(k.datepicker._get(n,"constrainInput"))return e=k.datepicker._possibleChars(k.datepicker._get(n,"dateFormat")),i=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||i&lt;" "||!e||-1&lt;e.indexOf(i)},_doKeyUp:function(t){var e=k.datepicker._getInst(t.target);if(e.input.val()!==e.lastVal)try{k.datepicker.parseDate(k.datepicker._get(e,"dateFormat"),e.input?e.input.val():null,k.datepicker._getFormatConfig(e))&amp;&amp;(k.datepicker._setDateFromField(e),k.datepicker._updateAlternate(e),k.datepicker._updateDatepicker(e))}catch(t){}return!0},_showDatepicker:function(t){var e,i,n,s,o,r,a;"input"!==(t=t.target||t).nodeName.toLowerCase()&amp;&amp;(t=k("input",t.parentNode)[0]),k.datepicker._isDisabledDatepicker(t)||k.datepicker._lastInput===t||(a=k.datepicker._getInst(t),k.datepicker._curInst&amp;&amp;k.datepicker._curInst!==a&amp;&amp;(k.datepicker._curInst.dpDiv.stop(!0,!0),a&amp;&amp;k.datepicker._datepickerShowing&amp;&amp;k.datepicker._hideDatepicker(k.datepicker._curInst.input[0])),!1!==(i=(e=k.datepicker._get(a,"beforeShow"))?e.apply(t,[t,a]):{})&amp;&amp;(it(a.settings,i),a.lastVal=null,k.datepicker._lastInput=t,k.datepicker._setDateFromField(a),k.datepicker._inDialog&amp;&amp;(t.value=""),k.datepicker._pos||(k.datepicker._pos=k.datepicker._findPos(t),k.datepicker._pos[1]+=t.offsetHeight),n=!1,k(t).parents().each(function(){return!(n|="fixed"===k(this).css("position"))}),s={left:k.datepicker._pos[0],top:k.datepicker._pos[1]},k.datepicker._pos=null,a.dpDiv.empty(),a.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),k.datepicker._updateDatepicker(a),s=k.datepicker._checkOffset(a,s,n),a.dpDiv.css({position:k.datepicker._inDialog&amp;&amp;k.blockUI?"static":n?"fixed":"absolute",display:"none",left:s.left+"px",top:s.top+"px"}),a.inline||(o=k.datepicker._get(a,"showAnim"),r=k.datepicker._get(a,"duration"),a.dpDiv.css("z-index",function(t){for(var e,i;t.length&amp;&amp;t[0]!==document;){if(("absolute"===(e=t.css("position"))||"relative"===e||"fixed"===e)&amp;&amp;(i=parseInt(t.css("zIndex"),10),!isNaN(i)&amp;&amp;0!==i))return i;t=t.parent()}return 0}(k(t))+1),k.datepicker._datepickerShowing=!0,k.effects&amp;&amp;k.effects.effect[o]?a.dpDiv.show(o,k.datepicker._get(a,"showOptions"),r):a.dpDiv[o||"show"](o?r:null),k.datepicker._shouldFocusInput(a)&amp;&amp;a.input.trigger("focus"),k.datepicker._curInst=a)))},_updateDatepicker:function(t){this.maxRows=4,(Q=t).dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t);var e,i=this._getNumberOfMonths(t),n=i[1],s=t.dpDiv.find("."+this._dayOverClass+" a");0&lt;s.length&amp;&amp;et.apply(s.get(0)),t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),1&lt;n&amp;&amp;t.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",17*n+"em"),t.dpDiv[(1!==i[0]||1!==i[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),t.dpDiv[(this._get(t,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),t===k.datepicker._curInst&amp;&amp;k.datepicker._datepickerShowing&amp;&amp;k.datepicker._shouldFocusInput(t)&amp;&amp;t.input.trigger("focus"),t.yearshtml&amp;&amp;(e=t.yearshtml,setTimeout(function(){e===t.yearshtml&amp;&amp;t.yearshtml&amp;&amp;t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml),e=t.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&amp;&amp;t.input.is(":visible")&amp;&amp;!t.input.is(":disabled")&amp;&amp;!t.input.is(":focus")},_checkOffset:function(t,e,i){var n=t.dpDiv.outerWidth(),s=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,r=t.input?t.input.outerHeight():0,a=document.documentElement.clientWidth+(i?0:k(document).scrollLeft()),l=document.documentElement.clientHeight+(i?0:k(document).scrollTop());return e.left-=this._get(t,"isRTL")?n-o:0,e.left-=i&amp;&amp;e.left===t.input.offset().left?k(document).scrollLeft():0,e.top-=i&amp;&amp;e.top===t.input.offset().top+r?k(document).scrollTop():0,e.left-=Math.min(e.left,e.left+n&gt;a&amp;&amp;n&lt;a?Math.abs(e.left+n-a):0),e.top-=Math.min(e.top,e.top+s&gt;l&amp;&amp;s&lt;l?Math.abs(s+r):0),e},_findPos:function(t){for(var e,i=this._getInst(t),n=this._get(i,"isRTL");t&amp;&amp;("hidden"===t.type||1!==t.nodeType||k.expr.filters.hidden(t));)t=t[n?"previousSibling":"nextSibling"];return[(e=k(t).offset()).left,e.top]},_hideDatepicker:function(t){var e,i,n,s,o=this._curInst;!o||t&amp;&amp;o!==k.data(t,"datepicker")||this._datepickerShowing&amp;&amp;(e=this._get(o,"showAnim"),i=this._get(o,"duration"),n=function(){k.datepicker._tidyDialog(o)},k.effects&amp;&amp;(k.effects.effect[e]||k.effects[e])?o.dpDiv.hide(e,k.datepicker._get(o,"showOptions"),i,n):o.dpDiv["slideDown"===e?"slideUp":"fadeIn"===e?"fadeOut":"hide"](e?i:null,n),e||n(),this._datepickerShowing=!1,(s=this._get(o,"onClose"))&amp;&amp;s.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&amp;&amp;(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),k.blockUI&amp;&amp;(k.unblockUI(),k("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(t){var e,i;k.datepicker._curInst&amp;&amp;(e=k(t.target),i=k.datepicker._getInst(e[0]),(e[0].id===k.datepicker._mainDivId||0!==e.parents("#"+k.datepicker._mainDivId).length||e.hasClass(k.datepicker.markerClassName)||e.closest("."+k.datepicker._triggerClass).length||!k.datepicker._datepickerShowing||k.datepicker._inDialog&amp;&amp;k.blockUI)&amp;&amp;(!e.hasClass(k.datepicker.markerClassName)||k.datepicker._curInst===i)||k.datepicker._hideDatepicker())},_adjustDate:function(t,e,i){var n=k(t),s=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(s,e+("M"===i?this._get(s,"showCurrentAtPos"):0),i),this._updateDatepicker(s))},_gotoToday:function(t){var e,i=k(t),n=this._getInst(i[0]);this._get(n,"gotoCurrent")&amp;&amp;n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(e=new Date,n.selectedDay=e.getDate(),n.drawMonth=n.selectedMonth=e.getMonth(),n.drawYear=n.selectedYear=e.getFullYear()),this._notifyChange(n),this._adjustDate(i)},_selectMonthYear:function(t,e,i){var n=k(t),s=this._getInst(n[0]);s["selected"+("M"===i?"Month":"Year")]=s["draw"+("M"===i?"Month":"Year")]=parseInt(e.options[e.selectedIndex].value,10),this._notifyChange(s),this._adjustDate(n)},_selectDay:function(t,e,i,n){var s,o=k(t);k(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0])||((s=this._getInst(o[0])).selectedDay=s.currentDay=k("a",n).html(),s.selectedMonth=s.currentMonth=e,s.selectedYear=s.currentYear=i,this._selectDate(t,this._formatDate(s,s.currentDay,s.currentMonth,s.currentYear)))},_clearDate:function(t){var e=k(t);this._selectDate(e,"")},_selectDate:function(t,e){var i,n=k(t),s=this._getInst(n[0]);e=null!=e?e:this._formatDate(s),s.input&amp;&amp;s.input.val(e),this._updateAlternate(s),(i=this._get(s,"onSelect"))?i.apply(s.input?s.input[0]:null,[e,s]):s.input&amp;&amp;s.input.trigger("change"),s.inline?this._updateDatepicker(s):(this._hideDatepicker(),this._lastInput=s.input[0],"object"!=typeof s.input[0]&amp;&amp;s.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(t){var e,i,n,s=this._get(t,"altField");s&amp;&amp;(e=this._get(t,"altFormat")||this._get(t,"dateFormat"),i=this._getDate(t),n=this.formatDate(e,i,this._getFormatConfig(t)),k(s).val(n))},noWeekends:function(t){var e=t.getDay();return[0&lt;e&amp;&amp;e&lt;6,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(i,o,t){if(null==i||null==o)throw"Invalid arguments";if(""===(o="object"==typeof o?o.toString():o+""))return null;function r(t){var e=x+1&lt;i.length&amp;&amp;i.charAt(x+1)===t;return e&amp;&amp;x++,e}function e(t){var e=r(t),i="@"===t?14:"!"===t?20:"y"===t&amp;&amp;e?4:"o"===t?3:2,n=new RegExp("^\\d{"+("y"===t?i:1)+","+i+"}"),s=o.substring(u).match(n);if(!s)throw"Missing number at position "+u;return u+=s[0].length,parseInt(s[0],10)}function n(t,e,i){var n=-1,s=k.map(r(t)?i:e,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(k.each(s,function(t,e){var i=e[1];if(o.substr(u,i.length).toLowerCase()===i.toLowerCase())return n=e[0],u+=i.length,!1}),-1!==n)return n+1;throw"Unknown name at position "+u}function s(){if(o.charAt(u)!==i.charAt(x))throw"Unexpected literal at position "+u;u++}for(var a,l,h,u=0,c=(t?t.shortYearCutoff:null)||this._defaults.shortYearCutoff,d="string"!=typeof c?c:(new Date).getFullYear()%100+parseInt(c,10),p=(t?t.dayNamesShort:null)||this._defaults.dayNamesShort,f=(t?t.dayNames:null)||this._defaults.dayNames,g=(t?t.monthNamesShort:null)||this._defaults.monthNamesShort,m=(t?t.monthNames:null)||this._defaults.monthNames,v=-1,y=-1,_=-1,b=-1,w=!1,x=0;x&lt;i.length;x++)if(w)"'"!==i.charAt(x)||r("'")?s():w=!1;else switch(i.charAt(x)){case"d":_=e("d");break;case"D":n("D",p,f);break;case"o":b=e("o");break;case"m":y=e("m");break;case"M":y=n("M",g,m);break;case"y":v=e("y");break;case"@":v=(h=new Date(e("@"))).getFullYear(),y=h.getMonth()+1,_=h.getDate();break;case"!":v=(h=new Date((e("!")-this._ticksTo1970)/1e4)).getFullYear(),y=h.getMonth()+1,_=h.getDate();break;case"'":r("'")?s():w=!0;break;default:s()}if(u&lt;o.length&amp;&amp;(l=o.substr(u),!/^\s+/.test(l)))throw"Extra/unparsed characters found in date: "+l;if(-1===v?v=(new Date).getFullYear():v&lt;100&amp;&amp;(v+=(new Date).getFullYear()-(new Date).getFullYear()%100+(v&lt;=d?0:-100)),-1&lt;b)for(y=1,_=b;;){if(_&lt;=(a=this._getDaysInMonth(v,y-1)))break;y++,_-=a}if((h=this._daylightSavingAdjust(new Date(v,y-1,_))).getFullYear()!==v||h.getMonth()+1!==y||h.getDate()!==_)throw"Invalid date";return h},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*60*60*1e7,formatDate:function(i,t,e){if(!t)return"";function s(t){var e=r+1&lt;i.length&amp;&amp;i.charAt(r+1)===t;return e&amp;&amp;r++,e}function n(t,e,i){var n=""+e;if(s(t))for(;n.length&lt;i;)n="0"+n;return n}function o(t,e,i,n){return s(t)?n[e]:i[e]}var r,a=(e?e.dayNamesShort:null)||this._defaults.dayNamesShort,l=(e?e.dayNames:null)||this._defaults.dayNames,h=(e?e.monthNamesShort:null)||this._defaults.monthNamesShort,u=(e?e.monthNames:null)||this._defaults.monthNames,c="",d=!1;if(t)for(r=0;r&lt;i.length;r++)if(d)"'"!==i.charAt(r)||s("'")?c+=i.charAt(r):d=!1;else switch(i.charAt(r)){case"d":c+=n("d",t.getDate(),2);break;case"D":c+=o("D",t.getDay(),a,l);break;case"o":c+=n("o",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case"m":c+=n("m",t.getMonth()+1,2);break;case"M":c+=o("M",t.getMonth(),h,u);break;case"y":c+=s("y")?t.getFullYear():(t.getFullYear()%100&lt;10?"0":"")+t.getFullYear()%100;break;case"@":c+=t.getTime();break;case"!":c+=1e4*t.getTime()+this._ticksTo1970;break;case"'":s("'")?c+="'":d=!0;break;default:c+=i.charAt(r)}return c},_possibleChars:function(i){function t(t){var e=s+1&lt;i.length&amp;&amp;i.charAt(s+1)===t;return e&amp;&amp;s++,e}for(var e="",n=!1,s=0;s&lt;i.length;s++)if(n)"'"!==i.charAt(s)||t("'")?e+=i.charAt(s):n=!1;else switch(i.charAt(s)){case"d":case"m":case"y":case"@":e+="0123456789";break;case"D":case"M":return null;case"'":t("'")?e+="'":n=!0;break;default:e+=i.charAt(s)}return e},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),n=t.lastVal=t.input?t.input.val():null,s=this._getDefaultDate(t),o=s,r=this._getFormatConfig(t);try{o=this.parseDate(i,n,r)||s}catch(t){n=e?"":n}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=n?o.getDate():0,t.currentMonth=n?o.getMonth():0,t.currentYear=n?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(a,t,e){var i,n,s=null==t||""===t?e:"string"==typeof t?function(t){try{return k.datepicker.parseDate(k.datepicker._get(a,"dateFormat"),t,k.datepicker._getFormatConfig(a))}catch(t){}for(var e=(t.toLowerCase().match(/^c/)?k.datepicker._getDate(a):null)||new Date,i=e.getFullYear(),n=e.getMonth(),s=e.getDate(),o=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,r=o.exec(t);r;){switch(r[2]||"d"){case"d":case"D":s+=parseInt(r[1],10);break;case"w":case"W":s+=7*parseInt(r[1],10);break;case"m":case"M":n+=parseInt(r[1],10),s=Math.min(s,k.datepicker._getDaysInMonth(i,n));break;case"y":case"Y":i+=parseInt(r[1],10),s=Math.min(s,k.datepicker._getDaysInMonth(i,n))}r=o.exec(t)}return new Date(i,n,s)}(t):"number"==typeof t?isNaN(t)?e:(i=t,(n=new Date).setDate(n.getDate()+i),n):new Date(t.getTime());return(s=s&amp;&amp;"Invalid Date"===s.toString()?e:s)&amp;&amp;(s.setHours(0),s.setMinutes(0),s.setSeconds(0),s.setMilliseconds(0)),this._daylightSavingAdjust(s)},_daylightSavingAdjust:function(t){return t?(t.setHours(12&lt;t.getHours()?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var n=!e,s=t.selectedMonth,o=t.selectedYear,r=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=r.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=r.getMonth(),t.drawYear=t.selectedYear=t.currentYear=r.getFullYear(),s===t.selectedMonth&amp;&amp;o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&amp;&amp;t.input.val(n?"":this._formatDate(t))},_getDate:function(t){return!t.currentYear||t.input&amp;&amp;""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay))},_attachHandlers:function(t){var e=this._get(t,"stepMonths"),i="#"+t.id.replace(/\\\\/g,"\\");t.dpDiv.find("[data-handler]").map(function(){var t={prev:function(){k.datepicker._adjustDate(i,-e,"M")},next:function(){k.datepicker._adjustDate(i,+e,"M")},hide:function(){k.datepicker._hideDatepicker()},today:function(){k.datepicker._gotoToday(i)},selectDay:function(){return k.datepicker._selectDay(i,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return k.datepicker._selectMonthYear(i,this,"M"),!1},selectYear:function(){return k.datepicker._selectMonthYear(i,this,"Y"),!1}};k(this).on(this.getAttribute("data-event"),t[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,n,s,o,r,a,l,h,u,c,d,p,f,g,m,v,y,_,b,w,x,k,D,C,T,S,M,I,P,A,E,N,H,O,z,W,L,j,F=new Date,R=this._daylightSavingAdjust(new Date(F.getFullYear(),F.getMonth(),F.getDate())),q=this._get(t,"isRTL"),B=this._get(t,"showButtonPanel"),Y=this._get(t,"hideIfNoPrevNext"),U=this._get(t,"navigationAsDateFormat"),$=this._getNumberOfMonths(t),K=this._get(t,"showCurrentAtPos"),V=this._get(t,"stepMonths"),X=1!==$[0]||1!==$[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),J=this._getMinMaxDate(t,"min"),Q=this._getMinMaxDate(t,"max"),Z=t.drawMonth-K,tt=t.drawYear;if(Z&lt;0&amp;&amp;(Z+=12,tt--),Q)for(e=this._daylightSavingAdjust(new Date(Q.getFullYear(),Q.getMonth()-$[0]*$[1]+1,Q.getDate())),e=J&amp;&amp;e&lt;J?J:e;this._daylightSavingAdjust(new Date(tt,Z,1))&gt;e;)--Z&lt;0&amp;&amp;(Z=11,tt--);for(t.drawMonth=Z,t.drawYear=tt,i=this._get(t,"prevText"),i=U?this.formatDate(i,this._daylightSavingAdjust(new Date(tt,Z-V,1)),this._getFormatConfig(t)):i,n=this._canAdjustMonth(t,-1,tt,Z)?"&lt;a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'&gt;&lt;span class='ui-icon ui-icon-circle-triangle-"+(q?"e":"w")+"'&gt;"+i+"&lt;/span&gt;&lt;/a&gt;":Y?"":"&lt;a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'&gt;&lt;span class='ui-icon ui-icon-circle-triangle-"+(q?"e":"w")+"'&gt;"+i+"&lt;/span&gt;&lt;/a&gt;",s=this._get(t,"nextText"),s=U?this.formatDate(s,this._daylightSavingAdjust(new Date(tt,Z+V,1)),this._getFormatConfig(t)):s,o=this._canAdjustMonth(t,1,tt,Z)?"&lt;a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+s+"'&gt;&lt;span class='ui-icon ui-icon-circle-triangle-"+(q?"w":"e")+"'&gt;"+s+"&lt;/span&gt;&lt;/a&gt;":Y?"":"&lt;a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+s+"'&gt;&lt;span class='ui-icon ui-icon-circle-triangle-"+(q?"w":"e")+"'&gt;"+s+"&lt;/span&gt;&lt;/a&gt;",r=this._get(t,"currentText"),a=this._get(t,"gotoCurrent")&amp;&amp;t.currentDay?G:R,r=U?this.formatDate(r,a,this._getFormatConfig(t)):r,l=t.inline?"":"&lt;button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'&gt;"+this._get(t,"closeText")+"&lt;/button&gt;",h=B?"&lt;div class='ui-datepicker-buttonpane ui-widget-content'&gt;"+(q?l:"")+(this._isInRange(t,a)?"&lt;button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'&gt;"+r+"&lt;/button&gt;":"")+(q?"":l)+"&lt;/div&gt;":"",u=parseInt(this._get(t,"firstDay"),10),u=isNaN(u)?0:u,c=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),v=this._get(t,"showOtherMonths"),y=this._get(t,"selectOtherMonths"),_=this._getDefaultDate(t),b="",x=0;x&lt;$[0];x++){for(k="",this.maxRows=4,D=0;D&lt;$[1];D++){if(C=this._daylightSavingAdjust(new Date(tt,Z,t.selectedDay)),T=" ui-corner-all",S="",X){if(S+="&lt;div class='ui-datepicker-group",1&lt;$[1])switch(D){case 0:S+=" ui-datepicker-group-first",T=" ui-corner-"+(q?"right":"left");break;case $[1]-1:S+=" ui-datepicker-group-last",T=" ui-corner-"+(q?"left":"right");break;default:S+=" ui-datepicker-group-middle",T=""}S+="'&gt;"}for(S+="&lt;div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+T+"'&gt;"+(/all|left/.test(T)&amp;&amp;0===x?q?o:n:"")+(/all|right/.test(T)&amp;&amp;0===x?q?n:o:"")+this._generateMonthYearHeader(t,Z,tt,J,Q,0&lt;x||0&lt;D,f,g)+"&lt;/div&gt;&lt;table class='ui-datepicker-calendar'&gt;&lt;thead&gt;&lt;tr&gt;",M=c?"&lt;th class='ui-datepicker-week-col'&gt;"+this._get(t,"weekHeader")+"&lt;/th&gt;":"",w=0;w&lt;7;w++)M+="&lt;th scope='col'"+(5&lt;=(w+u+6)%7?" class='ui-datepicker-week-end'":"")+"&gt;&lt;span title='"+d[I=(w+u)%7]+"'&gt;"+p[I]+"&lt;/span&gt;&lt;/th&gt;";for(S+=M+"&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;",P=this._getDaysInMonth(tt,Z),tt===t.selectedYear&amp;&amp;Z===t.selectedMonth&amp;&amp;(t.selectedDay=Math.min(t.selectedDay,P)),A=(this._getFirstDayOfMonth(tt,Z)-u+7)%7,E=Math.ceil((A+P)/7),N=X&amp;&amp;this.maxRows&gt;E?this.maxRows:E,this.maxRows=N,H=this._daylightSavingAdjust(new Date(tt,Z,1-A)),O=0;O&lt;N;O++){for(S+="&lt;tr&gt;",z=c?"&lt;td class='ui-datepicker-week-col'&gt;"+this._get(t,"calculateWeek")(H)+"&lt;/td&gt;":"",w=0;w&lt;7;w++)W=m?m.apply(t.input?t.input[0]:null,[H]):[!0,""],j=(L=H.getMonth()!==Z)&amp;&amp;!y||!W[0]||J&amp;&amp;H&lt;J||Q&amp;&amp;Q&lt;H,z+="&lt;td class='"+(5&lt;=(w+u+6)%7?" ui-datepicker-week-end":"")+(L?" ui-datepicker-other-month":"")+(H.getTime()===C.getTime()&amp;&amp;Z===t.selectedMonth&amp;&amp;t._keyEvent||_.getTime()===H.getTime()&amp;&amp;_.getTime()===C.getTime()?" "+this._dayOverClass:"")+(j?" "+this._unselectableClass+" ui-state-disabled":"")+(L&amp;&amp;!v?"":" "+W[1]+(H.getTime()===G.getTime()?" "+this._currentClass:"")+(H.getTime()===R.getTime()?" ui-datepicker-today":""))+"'"+(L&amp;&amp;!v||!W[2]?"":" title='"+W[2].replace(/'/g,"&amp;#39;")+"'")+(j?"":" data-handler='selectDay' data-event='click' data-month='"+H.getMonth()+"' data-year='"+H.getFullYear()+"'")+"&gt;"+(L&amp;&amp;!v?"&amp;#xa0;":j?"&lt;span class='ui-state-default'&gt;"+H.getDate()+"&lt;/span&gt;":"&lt;a class='ui-state-default"+(H.getTime()===R.getTime()?" ui-state-highlight":"")+(H.getTime()===G.getTime()?" ui-state-active":"")+(L?" ui-priority-secondary":"")+"' href='#'&gt;"+H.getDate()+"&lt;/a&gt;")+"&lt;/td&gt;",H.setDate(H.getDate()+1),H=this._daylightSavingAdjust(H);S+=z+"&lt;/tr&gt;"}11&lt;++Z&amp;&amp;(Z=0,tt++),k+=S+="&lt;/tbody&gt;&lt;/table&gt;"+(X?"&lt;/div&gt;"+(0&lt;$[0]&amp;&amp;D===$[1]-1?"&lt;div class='ui-datepicker-row-break'&gt;&lt;/div&gt;":""):"")}b+=k}return b+=h,t._keyEvent=!1,b},_generateMonthYearHeader:function(t,e,i,n,s,o,r,a){var l,h,u,c,d,p,f,g,m=this._get(t,"changeMonth"),v=this._get(t,"changeYear"),y=this._get(t,"showMonthAfterYear"),_="&lt;div class='ui-datepicker-title'&gt;",b="";if(o||!m)b+="&lt;span class='ui-datepicker-month'&gt;"+r[e]+"&lt;/span&gt;";else{for(l=n&amp;&amp;n.getFullYear()===i,h=s&amp;&amp;s.getFullYear()===i,b+="&lt;select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'&gt;",u=0;u&lt;12;u++)(!l||u&gt;=n.getMonth())&amp;&amp;(!h||u&lt;=s.getMonth())&amp;&amp;(b+="&lt;option value='"+u+"'"+(u===e?" selected='selected'":"")+"&gt;"+a[u]+"&lt;/option&gt;");b+="&lt;/select&gt;"}if(y||(_+=b+(!o&amp;&amp;m&amp;&amp;v?"":"&amp;#xa0;")),!t.yearshtml)if(t.yearshtml="",o||!v)_+="&lt;span class='ui-datepicker-year'&gt;"+i+"&lt;/span&gt;";else{for(c=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),f=(p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e})(c[0]),g=Math.max(f,p(c[1]||"")),f=n?Math.max(f,n.getFullYear()):f,g=s?Math.min(g,s.getFullYear()):g,t.yearshtml+="&lt;select class='ui-datepicker-year' data-handler='selectYear' data-event='change'&gt;";f&lt;=g;f++)t.yearshtml+="&lt;option value='"+f+"'"+(f===i?" selected='selected'":"")+"&gt;"+f+"&lt;/option&gt;";t.yearshtml+="&lt;/select&gt;",_+=t.yearshtml,t.yearshtml=null}return _+=this._get(t,"yearSuffix"),y&amp;&amp;(_+=(!o&amp;&amp;m&amp;&amp;v?"":"&amp;#xa0;")+b),_+="&lt;/div&gt;"},_adjustInstDate:function(t,e,i){var n=t.selectedYear+("Y"===i?e:0),s=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(n,s))+("D"===i?e:0),r=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(n,s,o)));t.selectedDay=r.getDate(),t.drawMonth=t.selectedMonth=r.getMonth(),t.drawYear=t.selectedYear=r.getFullYear(),"M"!==i&amp;&amp;"Y"!==i||this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),n=this._getMinMaxDate(t,"max"),s=i&amp;&amp;e&lt;i?i:e;return n&amp;&amp;n&lt;s?n:s},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&amp;&amp;e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,n){var s=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,n+(e&lt;0?e:s[0]*s[1]),1));return e&lt;0&amp;&amp;o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,n,s=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),r=null,a=null,l=this._get(t,"yearRange");return l&amp;&amp;(i=l.split(":"),n=(new Date).getFullYear(),r=parseInt(i[0],10),a=parseInt(i[1],10),i[0].match(/[+\-].*/)&amp;&amp;(r+=n),i[1].match(/[+\-].*/)&amp;&amp;(a+=n)),(!s||e.getTime()&gt;=s.getTime())&amp;&amp;(!o||e.getTime()&lt;=o.getTime())&amp;&amp;(!r||e.getFullYear()&gt;=r)&amp;&amp;(!a||e.getFullYear()&lt;=a)},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return{shortYearCutoff:e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,n){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var s=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(n,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),s,this._getFormatConfig(t))}}),k.fn.datepicker=function(t){if(!this.length)return this;k.datepicker.initialized||(k(document).on("mousedown",k.datepicker._checkExternalClick),k.datepicker.initialized=!0),0===k("#"+k.datepicker._mainDivId).length&amp;&amp;k("body").append(k.datepicker.dpDiv);var e=Array.prototype.slice.call(arguments,1);return"string"==typeof t&amp;&amp;("isDisabled"===t||"getDate"===t||"widget"===t)||"option"===t&amp;&amp;2===arguments.length&amp;&amp;"string"==typeof arguments[1]?k.datepicker["_"+t+"Datepicker"].apply(k.datepicker,[this[0]].concat(e)):this.each(function(){"string"==typeof t?k.datepicker["_"+t+"Datepicker"].apply(k.datepicker,[this].concat(e)):k.datepicker._attachDatepicker(this,t)})},k.datepicker=new Z,k.datepicker.initialized=!1,k.datepicker.uuid=(new Date).getTime(),k.datepicker.version="1.12.1";k.datepicker,k.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var nt=!1;k(document).on("mouseup",function(){nt=!1});k.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(t){if(!0===k.data(t.target,e.widgetName+".preventClickEvent"))return k.removeData(t.target,e.widgetName+".preventClickEvent"),t.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&amp;&amp;this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!nt){this._mouseMoved=!1,this._mouseStarted&amp;&amp;this._mouseUp(t),this._mouseDownEvent=t;var e=this,i=1===t.which,n=!("string"!=typeof this.options.cancel||!t.target.nodeName)&amp;&amp;k(t.target).closest(this.options.cancel).length;return i&amp;&amp;!n&amp;&amp;this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&amp;&amp;this._mouseDelayMet(t)&amp;&amp;(this._mouseStarted=!1!==this._mouseStart(t),!this._mouseStarted)?(t.preventDefault(),!0):(!0===k.data(t.target,this.widgetName+".preventClickEvent")&amp;&amp;k.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return e._mouseMove(t)},this._mouseUpDelegate=function(t){return e._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),nt=!0)):!0}},_mouseMove:function(t){if(this._mouseMoved){if(k.ui.ie&amp;&amp;(!document.documentMode||document.documentMode&lt;9)&amp;&amp;!t.button)return this._mouseUp(t);if(!t.which)if(t.originalEvent.altKey||t.originalEvent.ctrlKey||t.originalEvent.metaKey||t.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(t)}return(t.which||t.button)&amp;&amp;(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&amp;&amp;this._mouseDelayMet(t)&amp;&amp;(this._mouseStarted=!1!==this._mouseStart(this._mouseDownEvent,t),this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&amp;&amp;(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&amp;&amp;k.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),this._mouseDelayTimer&amp;&amp;(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,nt=!1,t.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))&gt;=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),k.ui.plugin={add:function(t,e,i){var n,s=k.ui[t].prototype;for(n in i)s.plugins[n]=s.plugins[n]||[],s.plugins[n].push([e,i[n]])},call:function(t,e,i,n){var s,o=t.plugins[e];if(o&amp;&amp;(n||t.element[0].parentNode&amp;&amp;11!==t.element[0].parentNode.nodeType))for(s=0;s&lt;o.length;s++)t.options[o[s][0]]&amp;&amp;o[s][1].apply(t.element,i)}},k.ui.safeBlur=function(t){t&amp;&amp;"body"!==t.nodeName.toLowerCase()&amp;&amp;k(t).trigger("blur")};k.widget("ui.draggable",k.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&amp;&amp;this._setPositionRelative(),this.options.addClasses&amp;&amp;this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&amp;&amp;(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){(this.helper||this.element).is(".ui-draggable-dragging")?this.destroyOnClear=!0:(this._removeHandleClassName(),this._mouseDestroy())},_mouseCapture:function(t){var e=this.options;return!(this.helper||e.disabled||0&lt;k(t.target).closest(".ui-resizable-handle").length)&amp;&amp;(this.handle=this._getHandle(t),!!this.handle&amp;&amp;(this._blurActiveElement(t),this._blockFrames(!0===e.iframeFix?"iframe":e.iframeFix),!0))},_blockFrames:function(t){this.iframeBlocks=this.document.find(t).map(function(){var t=k(this);return k("&lt;div&gt;").css("position","absolute").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&amp;&amp;(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var e=k.ui.safeActiveElement(this.document[0]);k(t.target).closest(e).length||k.ui.safeBlur(e)},_mouseStart:function(t){var e=this.options;return this.helper=this._createHelper(t),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),k.ui.ddmanager&amp;&amp;(k.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=0&lt;this.helper.parents().filter(function(){return"fixed"===k(this).css("position")}).length,this.positionAbs=this.element.offset(),this._refreshOffsets(t),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,e.cursorAt&amp;&amp;this._adjustOffsetFromHelper(e.cursorAt),this._setContainment(),!1===this._trigger("start",t)?(this._clear(),!1):(this._cacheHelperProportions(),k.ui.ddmanager&amp;&amp;!e.dropBehaviour&amp;&amp;k.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),k.ui.ddmanager&amp;&amp;k.ui.ddmanager.dragStart(this,t),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(t,e){if(this.hasFixedAncestor&amp;&amp;(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo("absolute"),!e){var i=this._uiHash();if(!1===this._trigger("drag",t,i))return this._mouseUp(new k.Event("mouseup",t)),!1;this.position=i.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",k.ui.ddmanager&amp;&amp;k.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var e=this,i=!1;return k.ui.ddmanager&amp;&amp;!this.options.dropBehaviour&amp;&amp;(i=k.ui.ddmanager.drop(this,t)),this.dropped&amp;&amp;(i=this.dropped,this.dropped=!1),"invalid"===this.options.revert&amp;&amp;!i||"valid"===this.options.revert&amp;&amp;i||!0===this.options.revert||k.isFunction(this.options.revert)&amp;&amp;this.options.revert.call(this.element,i)?k(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){!1!==e._trigger("stop",t)&amp;&amp;e._clear()}):!1!==this._trigger("stop",t)&amp;&amp;this._clear(),!1},_mouseUp:function(t){return this._unblockFrames(),k.ui.ddmanager&amp;&amp;k.ui.ddmanager.dragStop(this,t),this.handleElement.is(t.target)&amp;&amp;this.element.trigger("focus"),k.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new k.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(t){return!this.options.handle||!!k(t.target).closest(this.element.find(this.options.handle)).length},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(t){var e=this.options,i=k.isFunction(e.helper),n=i?k(e.helper.apply(this.element[0],[t])):"clone"===e.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===e.appendTo?this.element[0].parentNode:e.appendTo),i&amp;&amp;n[0]===this.element[0]&amp;&amp;this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(t){"string"==typeof t&amp;&amp;(t=t.split(" ")),Array.isArray(t)&amp;&amp;(t={left:+t[0],top:+t[1]||0}),"left"in t&amp;&amp;(this.offset.click.left=t.left+this.margins.left),"right"in t&amp;&amp;(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&amp;&amp;(this.offset.click.top=t.top+this.margins.top),"bottom"in t&amp;&amp;(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),e=this.document[0];return"absolute"===this.cssPosition&amp;&amp;this.scrollParent[0]!==e&amp;&amp;k.contains(this.scrollParent[0],this.offsetParent[0])&amp;&amp;(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&amp;&amp;(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,e,i,n=this.options,s=this.document[0];this.relativeContainer=null,n.containment?"window"!==n.containment?"document"!==n.containment?n.containment.constructor!==Array?("parent"===n.containment&amp;&amp;(n.containment=this.helper[0].parentNode),(i=(e=k(n.containment))[0])&amp;&amp;(t=/(scroll|auto)/.test(e.css("overflow")),this.containment=[(parseInt(e.css("borderLeftWidth"),10)||0)+(parseInt(e.css("paddingLeft"),10)||0),(parseInt(e.css("borderTopWidth"),10)||0)+(parseInt(e.css("paddingTop"),10)||0),(t?Math.max(i.scrollWidth,i.offsetWidth):i.offsetWidth)-(parseInt(e.css("borderRightWidth"),10)||0)-(parseInt(e.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(i.scrollHeight,i.offsetHeight):i.offsetHeight)-(parseInt(e.css("borderBottomWidth"),10)||0)-(parseInt(e.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=e)):this.containment=n.containment:this.containment=[0,0,k(s).width()-this.helperProportions.width-this.margins.left,(k(s).height()||s.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]:this.containment=[k(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,k(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,k(window).scrollLeft()+k(window).width()-this.helperProportions.width-this.margins.left,k(window).scrollTop()+(k(window).height()||s.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]:this.containment=null},_convertPositionTo:function(t,e){e=e||this.position;var i="absolute"===t?1:-1,n=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:n?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:n?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,n,s,o,r=this.options,a=this._isRootNode(this.scrollParent[0]),l=t.pageX,h=t.pageY;return a&amp;&amp;this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&amp;&amp;(this.containment&amp;&amp;(i=this.relativeContainer?(n=this.relativeContainer.offset(),[this.containment[0]+n.left,this.containment[1]+n.top,this.containment[2]+n.left,this.containment[3]+n.top]):this.containment,t.pageX-this.offset.click.left&lt;i[0]&amp;&amp;(l=i[0]+this.offset.click.left),t.pageY-this.offset.click.top&lt;i[1]&amp;&amp;(h=i[1]+this.offset.click.top),t.pageX-this.offset.click.left&gt;i[2]&amp;&amp;(l=i[2]+this.offset.click.left),t.pageY-this.offset.click.top&gt;i[3]&amp;&amp;(h=i[3]+this.offset.click.top)),r.grid&amp;&amp;(s=r.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/r.grid[1])*r.grid[1]:this.originalPageY,h=!i||s-this.offset.click.top&gt;=i[1]||s-this.offset.click.top&gt;i[3]?s:s-this.offset.click.top&gt;=i[1]?s-r.grid[1]:s+r.grid[1],o=r.grid[0]?this.originalPageX+Math.round((l-this.originalPageX)/r.grid[0])*r.grid[0]:this.originalPageX,l=!i||o-this.offset.click.left&gt;=i[0]||o-this.offset.click.left&gt;i[2]?o:o-this.offset.click.left&gt;=i[0]?o-r.grid[0]:o+r.grid[0]),"y"===r.axis&amp;&amp;(l=this.originalPageX),"x"===r.axis&amp;&amp;(h=this.originalPageY)),{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:a?0:this.offset.scroll.top),left:l-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:a?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&amp;&amp;this.destroy()},_trigger:function(t,e,i){return i=i||this._uiHash(),k.ui.plugin.call(this,t,[e,i,this],!0),/^(drag|start|stop)/.test(t)&amp;&amp;(this.positionAbs=this._convertPositionTo("absolute"),i.offset=this.positionAbs),k.Widget.prototype._trigger.call(this,t,e,i)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),k.ui.plugin.add("draggable","connectToSortable",{start:function(e,t,i){var n=k.extend({},t,{item:i.element});i.sortables=[],k(i.options.connectToSortable).each(function(){var t=k(this).sortable("instance");t&amp;&amp;!t.options.disabled&amp;&amp;(i.sortables.push(t),t.refreshPositions(),t._trigger("activate",e,n))})},stop:function(e,t,i){var n=k.extend({},t,{item:i.element});i.cancelHelperRemoval=!1,k.each(i.sortables,function(){var t=this;t.isOver?(t.isOver=0,i.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,n))})},drag:function(i,n,s){k.each(s.sortables,function(){var t=!1,e=this;e.positionAbs=s.positionAbs,e.helperProportions=s.helperProportions,e.offset.click=s.offset.click,e._intersectsWith(e.containerCache)&amp;&amp;(t=!0,k.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==e&amp;&amp;this._intersectsWith(this.containerCache)&amp;&amp;k.contains(e.element[0],this.element[0])&amp;&amp;(t=!1),t})),t?(e.isOver||(e.isOver=1,s._parent=n.helper.parent(),e.currentItem=n.helper.appendTo(e.element).data("ui-sortable-item",!0),e.options._helper=e.options.helper,e.options.helper=function(){return n.helper[0]},i.target=e.currentItem[0],e._mouseCapture(i,!0),e._mouseStart(i,!0,!0),e.offset.click.top=s.offset.click.top,e.offset.click.left=s.offset.click.left,e.offset.parent.left-=s.offset.parent.left-e.offset.parent.left,e.offset.parent.top-=s.offset.parent.top-e.offset.parent.top,s._trigger("toSortable",i),s.dropped=e.element,k.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,e.fromOutside=s),e.currentItem&amp;&amp;(e._mouseDrag(i),n.position=e.position)):e.isOver&amp;&amp;(e.isOver=0,e.cancelHelperRemoval=!0,e.options._revert=e.options.revert,e.options.revert=!1,e._trigger("out",i,e._uiHash(e)),e._mouseStop(i,!0),e.options.revert=e.options._revert,e.options.helper=e.options._helper,e.placeholder&amp;&amp;e.placeholder.remove(),n.helper.appendTo(s._parent),s._refreshOffsets(i),n.position=s._generatePosition(i,!0),s._trigger("fromSortable",i),s.dropped=!1,k.each(s.sortables,function(){this.refreshPositions()}))})}}),k.ui.plugin.add("draggable","cursor",{start:function(t,e,i){var n=k("body"),s=i.options;n.css("cursor")&amp;&amp;(s._cursor=n.css("cursor")),n.css("cursor",s.cursor)},stop:function(t,e,i){var n=i.options;n._cursor&amp;&amp;k("body").css("cursor",n._cursor)}}),k.ui.plugin.add("draggable","opacity",{start:function(t,e,i){var n=k(e.helper),s=i.options;n.css("opacity")&amp;&amp;(s._opacity=n.css("opacity")),n.css("opacity",s.opacity)},stop:function(t,e,i){var n=i.options;n._opacity&amp;&amp;k(e.helper).css("opacity",n._opacity)}}),k.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0].nodeType===Node.DOCUMENT_NODE?i.overflowOffset={top:0,left:0}:i.scrollParentNotHidden[0]!==i.document[0]&amp;&amp;"HTML"!==i.scrollParentNotHidden[0].tagName&amp;&amp;(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,e,i){var n=i.options,s=!1,o=i.scrollParentNotHidden[0],r=i.document[0];o!==r&amp;&amp;"HTML"!==o.tagName?(n.axis&amp;&amp;"x"===n.axis||(i.overflowOffset.top+o.offsetHeight-t.pageY&lt;n.scrollSensitivity?o.scrollTop=s=o.scrollTop+n.scrollSpeed:t.pageY-i.overflowOffset.top&lt;n.scrollSensitivity&amp;&amp;(o.scrollTop=s=o.scrollTop-n.scrollSpeed)),n.axis&amp;&amp;"y"===n.axis||(i.overflowOffset.left+o.offsetWidth-t.pageX&lt;n.scrollSensitivity?o.scrollLeft=s=o.scrollLeft+n.scrollSpeed:t.pageX-i.overflowOffset.left&lt;n.scrollSensitivity&amp;&amp;(o.scrollLeft=s=o.scrollLeft-n.scrollSpeed))):(n.axis&amp;&amp;"x"===n.axis||(t.pageY-k(r).scrollTop()&lt;n.scrollSensitivity?s=k(r).scrollTop(k(r).scrollTop()-n.scrollSpeed):k(window).height()-(t.pageY-k(r).scrollTop())&lt;n.scrollSensitivity&amp;&amp;(s=k(r).scrollTop(k(r).scrollTop()+n.scrollSpeed))),n.axis&amp;&amp;"y"===n.axis||(t.pageX-k(r).scrollLeft()&lt;n.scrollSensitivity?s=k(r).scrollLeft(k(r).scrollLeft()-n.scrollSpeed):k(window).width()-(t.pageX-k(r).scrollLeft())&lt;n.scrollSensitivity&amp;&amp;(s=k(r).scrollLeft(k(r).scrollLeft()+n.scrollSpeed)))),!1!==s&amp;&amp;k.ui.ddmanager&amp;&amp;!n.dropBehaviour&amp;&amp;k.ui.ddmanager.prepareOffsets(i,t)}}),k.ui.plugin.add("draggable","snap",{start:function(t,e,i){var n=i.options;i.snapElements=[],k(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var t=k(this),e=t.offset();this!==i.element[0]&amp;&amp;i.snapElements.push({item:this,width:t.outerWidth(),height:t.outerHeight(),top:e.top,left:e.left})})},drag:function(t,e,i){for(var n,s,o,r,a,l,h,u,c,d=i.options,p=d.snapTolerance,f=e.offset.left,g=f+i.helperProportions.width,m=e.offset.top,v=m+i.helperProportions.height,y=i.snapElements.length-1;0&lt;=y;y--)l=(a=i.snapElements[y].left-i.margins.left)+i.snapElements[y].width,u=(h=i.snapElements[y].top-i.margins.top)+i.snapElements[y].height,g&lt;a-p||l+p&lt;f||v&lt;h-p||u+p&lt;m||!k.contains(i.snapElements[y].item.ownerDocument,i.snapElements[y].item)?(i.snapElements[y].snapping&amp;&amp;i.options.snap.release&amp;&amp;i.options.snap.release.call(i.element,t,k.extend(i._uiHash(),{snapItem:i.snapElements[y].item})),i.snapElements[y].snapping=!1):("inner"!==d.snapMode&amp;&amp;(n=Math.abs(h-v)&lt;=p,s=Math.abs(u-m)&lt;=p,o=Math.abs(a-g)&lt;=p,r=Math.abs(l-f)&lt;=p,n&amp;&amp;(e.position.top=i._convertPositionTo("relative",{top:h-i.helperProportions.height,left:0}).top),s&amp;&amp;(e.position.top=i._convertPositionTo("relative",{top:u,left:0}).top),o&amp;&amp;(e.position.left=i._convertPositionTo("relative",{top:0,left:a-i.helperProportions.width}).left),r&amp;&amp;(e.position.left=i._convertPositionTo("relative",{top:0,left:l}).left)),c=n||s||o||r,"outer"!==d.snapMode&amp;&amp;(n=Math.abs(h-m)&lt;=p,s=Math.abs(u-v)&lt;=p,o=Math.abs(a-f)&lt;=p,r=Math.abs(l-g)&lt;=p,n&amp;&amp;(e.position.top=i._convertPositionTo("relative",{top:h,left:0}).top),s&amp;&amp;(e.position.top=i._convertPositionTo("relative",{top:u-i.helperProportions.height,left:0}).top),o&amp;&amp;(e.position.left=i._convertPositionTo("relative",{top:0,left:a}).left),r&amp;&amp;(e.position.left=i._convertPositionTo("relative",{top:0,left:l-i.helperProportions.width}).left)),!i.snapElements[y].snapping&amp;&amp;(n||s||o||r||c)&amp;&amp;i.options.snap.snap&amp;&amp;i.options.snap.snap.call(i.element,t,k.extend(i._uiHash(),{snapItem:i.snapElements[y].item})),i.snapElements[y].snapping=n||s||o||r||c)}}),k.ui.plugin.add("draggable","stack",{start:function(t,e,i){var n,s=i.options,o=k.makeArray(k(s.stack)).sort(function(t,e){return(parseInt(k(t).css("zIndex"),10)||0)-(parseInt(k(e).css("zIndex"),10)||0)});o.length&amp;&amp;(n=parseInt(k(o[0]).css("zIndex"),10)||0,k(o).each(function(t){k(this).css("zIndex",n+t)}),this.css("zIndex",n+o.length))}}),k.ui.plugin.add("draggable","zIndex",{start:function(t,e,i){var n=k(e.helper),s=i.options;n.css("zIndex")&amp;&amp;(s._zIndex=n.css("zIndex")),n.css("zIndex",s.zIndex)},stop:function(t,e,i){var n=i.options;n._zIndex&amp;&amp;k(e.helper).css("zIndex",n._zIndex)}});k.ui.draggable;k.widget("ui.resizable",k.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(t,e){if("hidden"===k(t).css("overflow"))return!1;var i,n=e&amp;&amp;"left"===e?"scrollLeft":"scrollTop";return 0&lt;t[n]||(t[n]=1,i=0&lt;t[n],t[n]=0,i)},_create:function(){var t,e=this.options,i=this;this._addClass("ui-resizable"),k.extend(this,{_aspectRatio:!!e.aspectRatio,aspectRatio:e.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:e.helper||e.ghost||e.animate?e.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&amp;&amp;(this.element.wrap(k("&lt;div class='ui-wrapper' style='overflow: hidden;'&gt;&lt;/div&gt;").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&amp;&amp;k(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();function t(t){k(t).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()}var e;return this.elementIsWrapper&amp;&amp;(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles()}},_setupHandles:function(){var t,e,i,n,s,o=this.options,r=this;if(this.handles=o.handles||(k(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=k(),this.handles.constructor===String)for("all"===this.handles&amp;&amp;(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e&lt;i.length;e++)n="ui-resizable-"+(t=k.trim(i[e])),s=k("&lt;div&gt;"),this._addClass(s,"ui-resizable-handle "+n),s.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.append(s);this._renderAxis=function(t){var e,i,n,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&amp;&amp;(this.handles[e]=k(this.handles[e]),this._on(this.handles[e],{mousedown:r._mouseDown})),this.elementIsWrapper&amp;&amp;this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&amp;&amp;(i=k(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),n=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(n,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&amp;&amp;(s=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=s&amp;&amp;s[1]?s[1]:"se")}),o.autoHide&amp;&amp;(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(t){var e,i,n=!1;for(e in this.handles)(i=k(this.handles[e])[0])!==t.target&amp;&amp;!k.contains(i,t.target)||(n=!0);return!this.options.disabled&amp;&amp;n},_mouseStart:function(t){var e,i,n,s=this.options,o=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&amp;&amp;(e+=k(s.containment).scrollLeft()||0,i+=k(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:o.width(),height:o.height()},this.originalSize=this._helper?{width:o.outerWidth(),height:o.outerHeight()}:{width:o.width(),height:o.height()},this.sizeDiff={width:o.outerWidth()-o.width(),height:o.outerHeight()-o.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=k(".ui-resizable-"+this.axis).css("cursor"),k("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e,i,n=this.originalMousePosition,s=this.axis,o=t.pageX-n.left||0,r=t.pageY-n.top||0,a=this._change[s];return this._updatePrevProperties(),a&amp;&amp;(e=a.apply(this,[t,o,r]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&amp;&amp;(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),i=this._applyChanges(),!this._helper&amp;&amp;this._proportionallyResizeElements.length&amp;&amp;this._proportionallyResize(),k.isEmptyObject(i)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,n,s,o,r,a,l=this.options,h=this;return this._helper&amp;&amp;(n=(i=(e=this._proportionallyResizeElements).length&amp;&amp;/textarea/i.test(e[0].nodeName))&amp;&amp;this._hasScroll(e[0],"left")?0:h.sizeDiff.height,s=i?0:h.sizeDiff.width,o={width:h.helper.width()-s,height:h.helper.height()-n},r=parseFloat(h.element.css("left"))+(h.position.left-h.originalPosition.left)||null,a=parseFloat(h.element.css("top"))+(h.position.top-h.originalPosition.top)||null,l.animate||this.element.css(k.extend(o,{top:a,left:r})),h.helper.height(h.size.height),h.helper.width(h.size.width),this._helper&amp;&amp;!l.animate&amp;&amp;this._proportionallyResize()),k("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&amp;&amp;this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&amp;&amp;(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&amp;&amp;(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&amp;&amp;(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&amp;&amp;(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,n,s,o=this.options,r={minWidth:this._isNumber(o.minWidth)?o.minWidth:0,maxWidth:this._isNumber(o.maxWidth)?o.maxWidth:1/0,minHeight:this._isNumber(o.minHeight)?o.minHeight:0,maxHeight:this._isNumber(o.maxHeight)?o.maxHeight:1/0};(this._aspectRatio||t)&amp;&amp;(e=r.minHeight*this.aspectRatio,n=r.minWidth/this.aspectRatio,i=r.maxHeight*this.aspectRatio,s=r.maxWidth/this.aspectRatio,e&gt;r.minWidth&amp;&amp;(r.minWidth=e),n&gt;r.minHeight&amp;&amp;(r.minHeight=n),i&lt;r.maxWidth&amp;&amp;(r.maxWidth=i),s&lt;r.maxHeight&amp;&amp;(r.maxHeight=s)),this._vBoundaries=r},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&amp;&amp;(this.position.left=t.left),this._isNumber(t.top)&amp;&amp;(this.position.top=t.top),this._isNumber(t.height)&amp;&amp;(this.size.height=t.height),this._isNumber(t.width)&amp;&amp;(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,n=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&amp;&amp;(t.height=t.width/this.aspectRatio),"sw"===n&amp;&amp;(t.left=e.left+(i.width-t.width),t.top=null),"nw"===n&amp;&amp;(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,n=this._isNumber(t.width)&amp;&amp;e.maxWidth&amp;&amp;e.maxWidth&lt;t.width,s=this._isNumber(t.height)&amp;&amp;e.maxHeight&amp;&amp;e.maxHeight&lt;t.height,o=this._isNumber(t.width)&amp;&amp;e.minWidth&amp;&amp;e.minWidth&gt;t.width,r=this._isNumber(t.height)&amp;&amp;e.minHeight&amp;&amp;e.minHeight&gt;t.height,a=this.originalPosition.left+this.originalSize.width,l=this.originalPosition.top+this.originalSize.height,h=/sw|nw|w/.test(i),u=/nw|ne|n/.test(i);return o&amp;&amp;(t.width=e.minWidth),r&amp;&amp;(t.height=e.minHeight),n&amp;&amp;(t.width=e.maxWidth),s&amp;&amp;(t.height=e.maxHeight),o&amp;&amp;h&amp;&amp;(t.left=a-e.minWidth),n&amp;&amp;h&amp;&amp;(t.left=a-e.maxWidth),r&amp;&amp;u&amp;&amp;(t.top=l-e.minHeight),s&amp;&amp;u&amp;&amp;(t.top=l-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],n=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],s=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e&lt;4;e++)i[e]=parseFloat(n[e])||0,i[e]+=parseFloat(s[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e&lt;this._proportionallyResizeElements.length;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,e=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||k("&lt;div style='overflow:hidden;'&gt;&lt;/div&gt;"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var n=this.originalSize;return{top:this.originalPosition.top+i,height:n.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return k.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return k.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return k.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return k.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){k.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&amp;&amp;this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),k.ui.plugin.add("resizable","animate",{stop:function(e){var i=k(this).resizable("instance"),t=i.options,n=i._proportionallyResizeElements,s=n.length&amp;&amp;/textarea/i.test(n[0].nodeName),o=s&amp;&amp;i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=s?0:i.sizeDiff.width,a={width:i.size.width-r,height:i.size.height-o},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,h=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(k.extend(a,h&amp;&amp;l?{top:h,left:l}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&amp;&amp;n.length&amp;&amp;k(n[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),k.ui.plugin.add("resizable","containment",{start:function(){var i,n,t,e,s,o,r,a=k(this).resizable("instance"),l=a.options,h=a.element,u=l.containment,c=u instanceof k?u.get(0):/parent/.test(u)?h.parent().get(0):u;c&amp;&amp;(a.containerElement=k(c),/document/.test(u)||u===document?(a.containerOffset={left:0,top:0},a.containerPosition={left:0,top:0},a.parentData={element:k(document),left:0,top:0,width:k(document).width(),height:k(document).height()||document.body.parentNode.scrollHeight}):(i=k(c),n=[],k(["Top","Right","Left","Bottom"]).each(function(t,e){n[t]=a._num(i.css("padding"+e))}),a.containerOffset=i.offset(),a.containerPosition=i.position(),a.containerSize={height:i.innerHeight()-n[3],width:i.innerWidth()-n[1]},t=a.containerOffset,e=a.containerSize.height,s=a.containerSize.width,o=a._hasScroll(c,"left")?c.scrollWidth:s,r=a._hasScroll(c)?c.scrollHeight:e,a.parentData={element:c,left:t.left,top:t.top,width:o,height:r}))},resize:function(t){var e,i,n,s,o=k(this).resizable("instance"),r=o.options,a=o.containerOffset,l=o.position,h=o._aspectRatio||t.shiftKey,u={top:0,left:0},c=o.containerElement,d=!0;c[0]!==document&amp;&amp;/static/.test(c.css("position"))&amp;&amp;(u=a),l.left&lt;(o._helper?a.left:0)&amp;&amp;(o.size.width=o.size.width+(o._helper?o.position.left-a.left:o.position.left-u.left),h&amp;&amp;(o.size.height=o.size.width/o.aspectRatio,d=!1),o.position.left=r.helper?a.left:0),l.top&lt;(o._helper?a.top:0)&amp;&amp;(o.size.height=o.size.height+(o._helper?o.position.top-a.top:o.position.top),h&amp;&amp;(o.size.width=o.size.height*o.aspectRatio,d=!1),o.position.top=o._helper?a.top:0),n=o.containerElement.get(0)===o.element.parent().get(0),s=/relative|absolute/.test(o.containerElement.css("position")),n&amp;&amp;s?(o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top):(o.offset.left=o.element.offset().left,o.offset.top=o.element.offset().top),e=Math.abs(o.sizeDiff.width+(o._helper?o.offset.left-u.left:o.offset.left-a.left)),i=Math.abs(o.sizeDiff.height+(o._helper?o.offset.top-u.top:o.offset.top-a.top)),e+o.size.width&gt;=o.parentData.width&amp;&amp;(o.size.width=o.parentData.width-e,h&amp;&amp;(o.size.height=o.size.width/o.aspectRatio,d=!1)),i+o.size.height&gt;=o.parentData.height&amp;&amp;(o.size.height=o.parentData.height-i,h&amp;&amp;(o.size.width=o.size.height*o.aspectRatio,d=!1)),d||(o.position.left=o.prevPosition.left,o.position.top=o.prevPosition.top,o.size.width=o.prevSize.width,o.size.height=o.prevSize.height)},stop:function(){var t=k(this).resizable("instance"),e=t.options,i=t.containerOffset,n=t.containerPosition,s=t.containerElement,o=k(t.helper),r=o.offset(),a=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&amp;&amp;!e.animate&amp;&amp;/relative/.test(s.css("position"))&amp;&amp;k(this).css({left:r.left-n.left-i.left,width:a,height:l}),t._helper&amp;&amp;!e.animate&amp;&amp;/static/.test(s.css("position"))&amp;&amp;k(this).css({left:r.left-n.left-i.left,width:a,height:l})}}),k.ui.plugin.add("resizable","alsoResize",{start:function(){var t=k(this).resizable("instance").options;k(t.alsoResize).each(function(){var t=k(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=k(this).resizable("instance"),n=e.options,s=e.originalSize,o=e.originalPosition,r={height:e.size.height-s.height||0,width:e.size.width-s.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};k(n.alsoResize).each(function(){var t=k(this),n=k(this).data("ui-resizable-alsoresize"),s={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];k.each(e,function(t,e){var i=(n[e]||0)+(r[e]||0);i&amp;&amp;0&lt;=i&amp;&amp;(s[e]=i||null)}),t.css(s)})},stop:function(){k(this).removeData("ui-resizable-alsoresize")}}),k.ui.plugin.add("resizable","ghost",{start:function(){var t=k(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==k.uiBackCompat&amp;&amp;"string"==typeof t.options.ghost&amp;&amp;t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=k(this).resizable("instance");t.ghost&amp;&amp;t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=k(this).resizable("instance");t.ghost&amp;&amp;t.helper&amp;&amp;t.helper.get(0).removeChild(t.ghost.get(0))}}),k.ui.plugin.add("resizable","grid",{resize:function(){var t,e=k(this).resizable("instance"),i=e.options,n=e.size,s=e.originalSize,o=e.originalPosition,r=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,l=a[0]||1,h=a[1]||1,u=Math.round((n.width-s.width)/l)*l,c=Math.round((n.height-s.height)/h)*h,d=s.width+u,p=s.height+c,f=i.maxWidth&amp;&amp;i.maxWidth&lt;d,g=i.maxHeight&amp;&amp;i.maxHeight&lt;p,m=i.minWidth&amp;&amp;i.minWidth&gt;d,v=i.minHeight&amp;&amp;i.minHeight&gt;p;i.grid=a,m&amp;&amp;(d+=l),v&amp;&amp;(p+=h),f&amp;&amp;(d-=l),g&amp;&amp;(p-=h),/^(se|s|e)$/.test(r)?(e.size.width=d,e.size.height=p):/^(ne)$/.test(r)?(e.size.width=d,e.size.height=p,e.position.top=o.top-c):/^(sw)$/.test(r)?(e.size.width=d,e.size.height=p,e.position.left=o.left-u):((p-h&lt;=0||d-l&lt;=0)&amp;&amp;(t=e._getPaddingPlusBorderDimensions(this)),0&lt;p-h?(e.size.height=p,e.position.top=o.top-c):(p=h-t.height,e.size.height=p,e.position.top=o.top+s.height-p),0&lt;d-l?(e.size.width=d,e.position.left=o.left-u):(d=l-t.width,e.size.width=d,e.position.left=o.left+s.width-d))}});k.ui.resizable;k.widget("ui.dialog",{version:"1.12.1",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var e=k(this).css(t).offset().top;e&lt;0&amp;&amp;k(this).css("top",t.top-e)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&amp;&amp;null!=this.originalTitle&amp;&amp;(this.options.title=this.originalTitle),this.options.disabled&amp;&amp;(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&amp;&amp;k.fn.draggable&amp;&amp;this._makeDraggable(),this.options.resizable&amp;&amp;k.fn.resizable&amp;&amp;this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&amp;&amp;this.open()},_appendTo:function(){var t=this.options.appendTo;return t&amp;&amp;(t.jquery||t.nodeType)?k(t):this.document.find(t||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&amp;&amp;this.element.attr("title",this.originalTitle),(t=e.parent.children().eq(e.index)).length&amp;&amp;t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:k.noop,enable:k.noop,close:function(t){var e=this;this._isOpen&amp;&amp;!1!==this._trigger("beforeClose",t)&amp;&amp;(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||k.ui.safeBlur(k.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){e._trigger("close",t)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,e){var i=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+k(this).css("z-index")}).get(),s=Math.max.apply(null,n);return s&gt;=+this.uiDialog.css("z-index")&amp;&amp;(this.uiDialog.css("z-index",s+1),i=!0),i&amp;&amp;!e&amp;&amp;this._trigger("focus",t),i},open:function(){var t=this;this._isOpen?this._moveToTop()&amp;&amp;this._focusTabbable():(this._isOpen=!0,this.opener=k(k.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&amp;&amp;this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"))},_focusTabbable:function(){var t=this._focusedElement;(t=t||this.element.find("[autofocus]")).length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_keepFocus:function(t){function e(){var t=k.ui.safeActiveElement(this.document[0]);this.uiDialog[0]===t||k.contains(this.uiDialog[0],t)||this._focusTabbable()}t.preventDefault(),e.call(this),this._delay(e)},_createWrapper:function(){this.uiDialog=k("&lt;div&gt;").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&amp;&amp;!t.isDefaultPrevented()&amp;&amp;t.keyCode&amp;&amp;t.keyCode===k.ui.keyCode.ESCAPE)return t.preventDefault(),void this.close(t);var e,i,n;t.keyCode!==k.ui.keyCode.TAB||t.isDefaultPrevented()||(e=this.uiDialog.find(":tabbable"),i=e.filter(":first"),n=e.filter(":last"),t.target!==n[0]&amp;&amp;t.target!==this.uiDialog[0]||t.shiftKey?t.target!==i[0]&amp;&amp;t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){n.trigger("focus")}),t.preventDefault()):(this._delay(function(){i.trigger("focus")}),t.preventDefault()))},mousedown:function(t){this._moveToTop(t)&amp;&amp;this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=k("&lt;div&gt;"),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(t){k(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=k("&lt;button type='button'&gt;&lt;/button&gt;").button({label:k("&lt;a&gt;").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),t=k("&lt;span&gt;").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(t,"ui-dialog-title"),this._title(t),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html("&amp;#160;")},_createButtonPane:function(){this.uiDialogButtonPane=k("&lt;div&gt;"),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=k("&lt;div&gt;").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var s=this,t=this.options.buttons;this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),k.isEmptyObject(t)||Array.isArray(t)&amp;&amp;!t.length?this._removeClass(this.uiDialog,"ui-dialog-buttons"):(k.each(t,function(t,e){var i,n;e=k.isFunction(e)?{click:e,text:t}:e,e=k.extend({type:"button"},e),i=e.click,n={icon:e.icon,iconPosition:e.iconPosition,showLabel:e.showLabel,icons:e.icons,text:e.text},delete e.click,delete e.icon,delete e.iconPosition,delete e.showLabel,delete e.icons,"boolean"==typeof e.text&amp;&amp;delete e.text,k("&lt;button&gt;&lt;/button&gt;",e).button(n).appendTo(s.uiButtonSet).on("click",function(){i.apply(s.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog))},_makeDraggable:function(){var s=this,o=this.options;function r(t){return{position:t.position,offset:t.offset}}this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(t,e){s._addClass(k(this),"ui-dialog-dragging"),s._blockFrames(),s._trigger("dragStart",t,r(e))},drag:function(t,e){s._trigger("drag",t,r(e))},stop:function(t,e){var i=e.offset.left-s.document.scrollLeft(),n=e.offset.top-s.document.scrollTop();o.position={my:"left top",at:"left"+(0&lt;=i?"+":"")+i+" top"+(0&lt;=n?"+":"")+n,of:s.window},s._removeClass(k(this),"ui-dialog-dragging"),s._unblockFrames(),s._trigger("dragStop",t,r(e))}})},_makeResizable:function(){var o=this,r=this.options,t=r.resizable,e=this.uiDialog.css("position"),i="string"==typeof t?t:"n,e,s,w,se,sw,ne,nw";function a(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:r.maxWidth,maxHeight:r.maxHeight,minWidth:r.minWidth,minHeight:this._minHeight(),handles:i,start:function(t,e){o._addClass(k(this),"ui-dialog-resizing"),o._blockFrames(),o._trigger("resizeStart",t,a(e))},resize:function(t,e){o._trigger("resize",t,a(e))},stop:function(t,e){var i=o.uiDialog.offset(),n=i.left-o.document.scrollLeft(),s=i.top-o.document.scrollTop();r.height=o.uiDialog.height(),r.width=o.uiDialog.width(),r.position={my:"left top",at:"left"+(0&lt;=n?"+":"")+n+" top"+(0&lt;=s?"+":"")+s,of:o.window},o._removeClass(k(this),"ui-dialog-resizing"),o._unblockFrames(),o._trigger("resizeStop",t,a(e))}}).css("position",e)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=k(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),e=k.inArray(this,t);-1!==e&amp;&amp;t.splice(e,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(t){var i=this,n=!1,s={};k.each(t,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&amp;&amp;(n=!0),t in i.resizableRelatedOptions&amp;&amp;(s[t]=e)}),n&amp;&amp;(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&amp;&amp;this.uiDialog.resizable("option",s)},_setOption:function(t,e){var i,n,s=this.uiDialog;"disabled"!==t&amp;&amp;(this._super(t,e),"appendTo"===t&amp;&amp;this.uiDialog.appendTo(this._appendTo()),"buttons"===t&amp;&amp;this._createButtons(),"closeText"===t&amp;&amp;this.uiDialogTitlebarClose.button({label:k("&lt;a&gt;").text(""+this.options.closeText).html()}),"draggable"===t&amp;&amp;((i=s.is(":data(ui-draggable)"))&amp;&amp;!e&amp;&amp;s.draggable("destroy"),!i&amp;&amp;e&amp;&amp;this._makeDraggable()),"position"===t&amp;&amp;this._position(),"resizable"===t&amp;&amp;((n=s.is(":data(ui-resizable)"))&amp;&amp;!e&amp;&amp;s.resizable("destroy"),n&amp;&amp;"string"==typeof e&amp;&amp;s.resizable("option","handles",e),n||!1===e||this._makeResizable()),"title"===t&amp;&amp;this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,n=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),n.minWidth&gt;n.width&amp;&amp;(n.width=n.minWidth),t=this.uiDialog.css({height:"auto",width:n.width}).outerHeight(),e=Math.max(0,n.minHeight-t),i="number"==typeof n.maxHeight?Math.max(0,n.maxHeight-t):"none","auto"===n.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,n.height-t)),this.uiDialog.is(":data(ui-resizable)")&amp;&amp;this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=k(this);return k("&lt;div&gt;").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&amp;&amp;(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return!!k(t.target).closest(".ui-dialog").length||!!k(t.target).closest(".ui-datepicker").length},_createOverlay:function(){var e;this.options.modal&amp;&amp;(e=!0,this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=k("&lt;div&gt;").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1))},_destroyOverlay:function(){var t;this.options.modal&amp;&amp;this.overlay&amp;&amp;((t=this.document.data("ui-dialog-overlays")-1)?this.document.data("ui-dialog-overlays",t):(this._off(this.document,"focusin"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null)}}),!1!==k.uiBackCompat&amp;&amp;k.widget("ui.dialog",k.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&amp;&amp;this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}});k.ui.dialog;k.widget("ui.droppable",{version:"1.12.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,e=this.options,i=e.accept;this.isover=!1,this.isout=!0,this.accept=k.isFunction(i)?i:function(t){return t.is(i)},this.proportions=function(){if(!arguments.length)return t||(t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight});t=arguments[0]},this._addToManager(e.scope),e.addClasses&amp;&amp;this._addClass("ui-droppable")},_addToManager:function(t){k.ui.ddmanager.droppables[t]=k.ui.ddmanager.droppables[t]||[],k.ui.ddmanager.droppables[t].push(this)},_splice:function(t){for(var e=0;e&lt;t.length;e++)t[e]===this&amp;&amp;t.splice(e,1)},_destroy:function(){var t=k.ui.ddmanager.droppables[this.options.scope];this._splice(t)},_setOption:function(t,e){var i;"accept"===t?this.accept=k.isFunction(e)?e:function(t){return t.is(e)}:"scope"===t&amp;&amp;(i=k.ui.ddmanager.droppables[this.options.scope],this._splice(i),this._addToManager(e)),this._super(t,e)},_activate:function(t){var e=k.ui.ddmanager.current;this._addActiveClass(),e&amp;&amp;this._trigger("activate",t,this.ui(e))},_deactivate:function(t){var e=k.ui.ddmanager.current;this._removeActiveClass(),e&amp;&amp;this._trigger("deactivate",t,this.ui(e))},_over:function(t){var e=k.ui.ddmanager.current;e&amp;&amp;(e.currentItem||e.element)[0]!==this.element[0]&amp;&amp;this.accept.call(this.element[0],e.currentItem||e.element)&amp;&amp;(this._addHoverClass(),this._trigger("over",t,this.ui(e)))},_out:function(t){var e=k.ui.ddmanager.current;e&amp;&amp;(e.currentItem||e.element)[0]!==this.element[0]&amp;&amp;this.accept.call(this.element[0],e.currentItem||e.element)&amp;&amp;(this._removeHoverClass(),this._trigger("out",t,this.ui(e)))},_drop:function(e,t){var i=t||k.ui.ddmanager.current,n=!1;return!(!i||(i.currentItem||i.element)[0]===this.element[0])&amp;&amp;(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var t=k(this).droppable("instance");if(t.options.greedy&amp;&amp;!t.options.disabled&amp;&amp;t.options.scope===i.options.scope&amp;&amp;t.accept.call(t.element[0],i.currentItem||i.element)&amp;&amp;st(i,k.extend(t,{offset:t.element.offset()}),t.options.tolerance,e))return!(n=!0)}),!n&amp;&amp;(!!this.accept.call(this.element[0],i.currentItem||i.element)&amp;&amp;(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(i)),this.element)))},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}});var st=k.ui.intersect=function(t,e,i,n){if(!e.offset)return!1;var s=(t.positionAbs||t.position.absolute).left+t.margins.left,o=(t.positionAbs||t.position.absolute).top+t.margins.top,r=s+t.helperProportions.width,a=o+t.helperProportions.height,l=e.offset.left,h=e.offset.top,u=l+e.proportions().width,c=h+e.proportions().height;switch(i){case"fit":return l&lt;=s&amp;&amp;r&lt;=u&amp;&amp;h&lt;=o&amp;&amp;a&lt;=c;case"intersect":return l&lt;s+t.helperProportions.width/2&amp;&amp;r-t.helperProportions.width/2&lt;u&amp;&amp;h&lt;o+t.helperProportions.height/2&amp;&amp;a-t.helperProportions.height/2&lt;c;case"pointer":return ot(n.pageY,h,e.proportions().height)&amp;&amp;ot(n.pageX,l,e.proportions().width);case"touch":return(h&lt;=o&amp;&amp;o&lt;=c||h&lt;=a&amp;&amp;a&lt;=c||o&lt;h&amp;&amp;c&lt;a)&amp;&amp;(l&lt;=s&amp;&amp;s&lt;=u||l&lt;=r&amp;&amp;r&lt;=u||s&lt;l&amp;&amp;u&lt;r);default:return!1}};function ot(t,e,i){return e&lt;=t&amp;&amp;t&lt;e+i}!(k.ui.ddmanager={current:null,droppables:{default:[]},prepareOffsets:function(t,e){var i,n,s=k.ui.ddmanager.droppables[t.options.scope]||[],o=e?e.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();t:for(i=0;i&lt;s.length;i++)if(!(s[i].options.disabled||t&amp;&amp;!s[i].accept.call(s[i].element[0],t.currentItem||t.element))){for(n=0;n&lt;r.length;n++)if(r[n]===s[i].element[0]){s[i].proportions().height=0;continue t}s[i].visible="none"!==s[i].element.css("display"),s[i].visible&amp;&amp;("mousedown"===o&amp;&amp;s[i]._activate.call(s[i],e),s[i].offset=s[i].element.offset(),s[i].proportions({width:s[i].element[0].offsetWidth,height:s[i].element[0].offsetHeight}))}},drop:function(t,e){var i=!1;return k.each((k.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&amp;&amp;(!this.options.disabled&amp;&amp;this.visible&amp;&amp;st(t,this,this.options.tolerance,e)&amp;&amp;(i=this._drop.call(this,e)||i),!this.options.disabled&amp;&amp;this.visible&amp;&amp;this.accept.call(this.element[0],t.currentItem||t.element)&amp;&amp;(this.isout=!0,this.isover=!1,this._deactivate.call(this,e)))}),i},dragStart:function(t,e){t.element.parentsUntil("body").on("scroll.droppable",function(){t.options.refreshPositions||k.ui.ddmanager.prepareOffsets(t,e)})},drag:function(o,r){o.options.refreshPositions&amp;&amp;k.ui.ddmanager.prepareOffsets(o,r),k.each(k.ui.ddmanager.droppables[o.options.scope]||[],function(){var t,e,i,n,s;this.options.disabled||this.greedyChild||!this.visible||(s=!(n=st(o,this,this.options.tolerance,r))&amp;&amp;this.isover?"isout":n&amp;&amp;!this.isover?"isover":null)&amp;&amp;(this.options.greedy&amp;&amp;(e=this.options.scope,(i=this.element.parents(":data(ui-droppable)").filter(function(){return k(this).droppable("instance").options.scope===e})).length&amp;&amp;((t=k(i[0]).droppable("instance")).greedyChild="isover"===s)),t&amp;&amp;"isover"===s&amp;&amp;(t.isover=!1,t.isout=!0,t._out.call(t,r)),this[s]=!0,this["isout"===s?"isover":"isout"]=!1,this["isover"===s?"_over":"_out"].call(this,r),t&amp;&amp;"isout"===s&amp;&amp;(t.isout=!1,t.isover=!0,t._over.call(t,r)))})},dragStop:function(t,e){t.element.parentsUntil("body").off("scroll.droppable"),t.options.refreshPositions||k.ui.ddmanager.prepareOffsets(t,e)}})!==k.uiBackCompat&amp;&amp;k.widget("ui.droppable",k.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&amp;&amp;this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&amp;&amp;this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&amp;&amp;this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&amp;&amp;this.element.removeClass(this.options.hoverClass)}});k.ui.droppable,k.widget("ui.progressbar",{version:"1.12.1",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=k("&lt;div&gt;").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){if(void 0===t)return this.options.value;this.options.value=this._constrainedValue(t),this._refreshValue()},_constrainedValue:function(t){return void 0===t&amp;&amp;(t=this.options.value),this.indeterminate=!1===t,"number"!=typeof t&amp;&amp;(t=0),!this.indeterminate&amp;&amp;Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&amp;&amp;(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,e=this._percentage();this.valueDiv.toggle(this.indeterminate||t&gt;this.min).width(e.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,t===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=k("&lt;div&gt;").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&amp;&amp;(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&amp;&amp;(this.oldValue=t,this._trigger("change")),t===this.options.max&amp;&amp;this._trigger("complete")}}),k.widget("ui.selectable",k.ui.mouse,{version:"1.12.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var n=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){n.elementPos=k(n.element[0]).offset(),n.selectees=k(n.options.filter,n.element[0]),n._addClass(n.selectees,"ui-selectee"),n.selectees.each(function(){var t=k(this),e=t.offset(),i={left:e.left-n.elementPos.left,top:e.top-n.elementPos.top};k.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=k("&lt;div&gt;"),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(i){var n=this,t=this.options;this.opos=[i.pageX,i.pageY],this.elementPos=k(this.element[0]).offset(),this.options.disabled||(this.selectees=k(t.filter,this.element[0]),this._trigger("start",i),k(t.appendTo).append(this.helper),this.helper.css({left:i.pageX,top:i.pageY,width:0,height:0}),t.autoRefresh&amp;&amp;this.refresh(),this.selectees.filter(".ui-selected").each(function(){var t=k.data(this,"selectable-item");t.startselected=!0,i.metaKey||i.ctrlKey||(n._removeClass(t.$element,"ui-selected"),t.selected=!1,n._addClass(t.$element,"ui-unselecting"),t.unselecting=!0,n._trigger("unselecting",i,{unselecting:t.element}))}),k(i.target).parents().addBack().each(function(){var t,e=k.data(this,"selectable-item");if(e)return t=!i.metaKey&amp;&amp;!i.ctrlKey||!e.$element.hasClass("ui-selected"),n._removeClass(e.$element,t?"ui-unselecting":"ui-selected")._addClass(e.$element,t?"ui-selecting":"ui-unselecting"),e.unselecting=!t,e.selecting=t,(e.selected=t)?n._trigger("selecting",i,{selecting:e.element}):n._trigger("unselecting",i,{unselecting:e.element}),!1}))},_mouseDrag:function(n){if(this.dragged=!0,!this.options.disabled){var t,s=this,o=this.options,r=this.opos[0],a=this.opos[1],l=n.pageX,h=n.pageY;return l&lt;r&amp;&amp;(t=l,l=r,r=t),h&lt;a&amp;&amp;(t=h,h=a,a=t),this.helper.css({left:r,top:a,width:l-r,height:h-a}),this.selectees.each(function(){var t=k.data(this,"selectable-item"),e=!1,i={};t&amp;&amp;t.element!==s.element[0]&amp;&amp;(i.left=t.left+s.elementPos.left,i.right=t.right+s.elementPos.left,i.top=t.top+s.elementPos.top,i.bottom=t.bottom+s.elementPos.top,"touch"===o.tolerance?e=!(i.left&gt;l||i.right&lt;r||i.top&gt;h||i.bottom&lt;a):"fit"===o.tolerance&amp;&amp;(e=i.left&gt;r&amp;&amp;i.right&lt;l&amp;&amp;i.top&gt;a&amp;&amp;i.bottom&lt;h),e?(t.selected&amp;&amp;(s._removeClass(t.$element,"ui-selected"),t.selected=!1),t.unselecting&amp;&amp;(s._removeClass(t.$element,"ui-unselecting"),t.unselecting=!1),t.selecting||(s._addClass(t.$element,"ui-selecting"),t.selecting=!0,s._trigger("selecting",n,{selecting:t.element}))):(t.selecting&amp;&amp;((n.metaKey||n.ctrlKey)&amp;&amp;t.startselected?(s._removeClass(t.$element,"ui-selecting"),t.selecting=!1,s._addClass(t.$element,"ui-selected"),t.selected=!0):(s._removeClass(t.$element,"ui-selecting"),t.selecting=!1,t.startselected&amp;&amp;(s._addClass(t.$element,"ui-unselecting"),t.unselecting=!0),s._trigger("unselecting",n,{unselecting:t.element}))),t.selected&amp;&amp;(n.metaKey||n.ctrlKey||t.startselected||(s._removeClass(t.$element,"ui-selected"),t.selected=!1,s._addClass(t.$element,"ui-unselecting"),t.unselecting=!0,s._trigger("unselecting",n,{unselecting:t.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,k(".ui-unselecting",this.element[0]).each(function(){var t=k.data(this,"selectable-item");i._removeClass(t.$element,"ui-unselecting"),t.unselecting=!1,t.startselected=!1,i._trigger("unselected",e,{unselected:t.element})}),k(".ui-selecting",this.element[0]).each(function(){var t=k.data(this,"selectable-item");i._removeClass(t.$element,"ui-selecting")._addClass(t.$element,"ui-selected"),t.selecting=!1,t.selected=!0,t.startselected=!0,i._trigger("selected",e,{selected:t.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),k.widget("ui.selectmenu",[k.ui.formResetMixin,{version:"1.12.1",defaultElement:"&lt;select&gt;",options:{appendTo:null,classes:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"},disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:!1,change:null,close:null,focus:null,open:null,select:null},_create:function(){var t=this.element.uniqueId().attr("id");this.ids={element:t,button:t+"-button",menu:t+"-menu"},this._drawButton(),this._drawMenu(),this._bindFormResetHandler(),this._rendered=!1,this.menuItems=k()},_drawButton:function(){var t,e=this,i=this._parseOption(this.element.find("option:selected"),this.element[0].selectedIndex);this.labels=this.element.labels().attr("for",this.ids.button),this._on(this.labels,{click:function(t){this.button.focus(),t.preventDefault()}}),this.element.hide(),this.button=k("&lt;span&gt;",{tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true",title:this.element.attr("title")}).insertAfter(this.element),this._addClass(this.button,"ui-selectmenu-button ui-selectmenu-button-closed","ui-button ui-widget"),t=k("&lt;span&gt;").appendTo(this.button),this._addClass(t,"ui-selectmenu-icon","ui-icon "+this.options.icons.button),this.buttonItem=this._renderButtonItem(i).appendTo(this.button),!1!==this.options.width&amp;&amp;this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){e._rendered||e._refreshMenu()})},_drawMenu:function(){var n=this;this.menu=k("&lt;ul&gt;",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=k("&lt;div&gt;").append(this.menu),this._addClass(this.menuWrap,"ui-selectmenu-menu","ui-front"),this.menuWrap.appendTo(this._appendTo()),this.menuInstance=this.menu.menu({classes:{"ui-menu":"ui-corner-bottom"},role:"listbox",select:function(t,e){t.preventDefault(),n._setSelection(),n._select(e.item.data("ui-selectmenu-item"),t)},focus:function(t,e){var i=e.item.data("ui-selectmenu-item");null!=n.focusIndex&amp;&amp;i.index!==n.focusIndex&amp;&amp;(n._trigger("focus",t,{item:i}),n.isOpen||n._select(i,t)),n.focusIndex=i.index,n.button.attr("aria-activedescendant",n.menuItems.eq(i.index).attr("id"))}}).menu("instance"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(this._getSelectedItem().data("ui-selectmenu-item")||{})),null===this.options.width&amp;&amp;this._resizeButton()},_refreshMenu:function(){var t,e=this.element.find("option");this.menu.empty(),this._parseOptions(e),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup").find(".ui-menu-item-wrapper"),this._rendered=!0,e.length&amp;&amp;(t=this._getSelectedItem(),this.menuInstance.focus(null,t),this._setAria(t.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(t){this.options.disabled||(this._rendered?(this._removeClass(this.menu.find(".ui-state-active"),null,"ui-state-active"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.menuItems.length&amp;&amp;(this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",t)))},_position:function(){this.menuWrap.position(k.extend({of:this.button},this.options.position))},close:function(t){this.isOpen&amp;&amp;(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",t))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderButtonItem:function(t){var e=k("&lt;span&gt;");return this._setText(e,t.label),this._addClass(e,"ui-selectmenu-text"),e},_renderMenu:function(n,t){var s=this,o="";k.each(t,function(t,e){var i;e.optgroup!==o&amp;&amp;(i=k("&lt;li&gt;",{text:e.optgroup}),s._addClass(i,"ui-selectmenu-optgroup","ui-menu-divider"+(e.element.parent("optgroup").prop("disabled")?" ui-state-disabled":"")),i.appendTo(n),o=e.optgroup),s._renderItemData(n,e)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-selectmenu-item",e)},_renderItem:function(t,e){var i=k("&lt;li&gt;"),n=k("&lt;div&gt;",{title:e.element.attr("title")});return e.disabled&amp;&amp;this._addClass(i,null,"ui-state-disabled"),this._setText(n,e.label),i.append(n).appendTo(t)},_setText:function(t,e){e?t.text(e):t.html("&amp;#160;")},_move:function(t,e){var i,n,s=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex).parent("li"):(i=this.menuItems.eq(this.element[0].selectedIndex).parent("li"),s+=":not(.ui-state-disabled)"),(n="first"===t||"last"===t?i["first"===t?"prevAll":"nextAll"](s).eq(-1):i[t+"All"](s).eq(0)).length&amp;&amp;this.menuInstance.focus(e,n)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex).parent("li")},_toggle:function(t){this[this.isOpen?"close":"open"](t)},_setSelection:function(){var t;this.range&amp;&amp;(window.getSelection?((t=window.getSelection()).removeAllRanges(),t.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(t){this.isOpen&amp;&amp;(k(t.target).closest(".ui-selectmenu-menu, #"+k.ui.escapeSelector(this.ids.button)).length||this.close(t))}},_buttonEvents:{mousedown:function(){var t;window.getSelection?(t=window.getSelection()).rangeCount&amp;&amp;(this.range=t.getRangeAt(0)):this.range=document.selection.createRange()},click:function(t){this._setSelection(),this._toggle(t)},keydown:function(t){var e=!0;switch(t.keyCode){case k.ui.keyCode.TAB:case k.ui.keyCode.ESCAPE:this.close(t),e=!1;break;case k.ui.keyCode.ENTER:this.isOpen&amp;&amp;this._selectFocusedItem(t);break;case k.ui.keyCode.UP:t.altKey?this._toggle(t):this._move("prev",t);break;case k.ui.keyCode.DOWN:t.altKey?this._toggle(t):this._move("next",t);break;case k.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(t):this._toggle(t);break;case k.ui.keyCode.LEFT:this._move("prev",t);break;case k.ui.keyCode.RIGHT:this._move("next",t);break;case k.ui.keyCode.HOME:case k.ui.keyCode.PAGE_UP:this._move("first",t);break;case k.ui.keyCode.END:case k.ui.keyCode.PAGE_DOWN:this._move("last",t);break;default:this.menu.trigger(t),e=!1}e&amp;&amp;t.preventDefault()}},_selectFocusedItem:function(t){var e=this.menuItems.eq(this.focusIndex).parent("li");e.hasClass("ui-state-disabled")||this._select(e.data("ui-selectmenu-item"),t)},_select:function(t,e){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=t.index,this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(t)),this._setAria(t),this._trigger("select",e,{item:t}),t.index!==i&amp;&amp;this._trigger("change",e,{item:t}),this.close(e)},_setAria:function(t){var e=this.menuItems.eq(t.index).attr("id");this.button.attr({"aria-labelledby":e,"aria-activedescendant":e}),this.menu.attr("aria-activedescendant",e)},_setOption:function(t,e){var i;"icons"===t&amp;&amp;(i=this.button.find("span.ui-icon"),this._removeClass(i,null,this.options.icons.button)._addClass(i,null,e.button)),this._super(t,e),"appendTo"===t&amp;&amp;this.menuWrap.appendTo(this._appendTo()),"width"===t&amp;&amp;this._resizeButton()},_setOptionDisabled:function(t){this._super(t),this.menuInstance.option("disabled",t),this.button.attr("aria-disabled",t),this._toggleClass(this.button,null,"ui-state-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)},_appendTo:function(){var t=this.options.appendTo;return(t=t&amp;&amp;(t.jquery||t.nodeType?k(t):this.document.find(t).eq(0)))&amp;&amp;t[0]||(t=this.element.closest(".ui-front, dialog")),t.length||(t=this.document[0].body),t},_toggleAttr:function(){this.button.attr("aria-expanded",this.isOpen),this._removeClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"closed":"open"))._addClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"open":"closed"))._toggleClass(this.menuWrap,"ui-selectmenu-open",null,this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var t=this.options.width;!1!==t?(null===t&amp;&amp;(t=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(t)):this.button.css("width","")},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){var t=this._super();return t.disabled=this.element.prop("disabled"),t},_parseOptions:function(t){var i=this,n=[];t.each(function(t,e){n.push(i._parseOption(k(e),t))}),this.items=n},_parseOption:function(t,e){var i=t.parent("optgroup");return{element:t,index:e,value:t.val(),label:t.text(),optgroup:i.attr("label")||"",disabled:i.prop("disabled")||t.prop("disabled")}},_destroy:function(){this._unbindFormResetHandler(),this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.labels.attr("for",this.ids.element)}}]),k.widget("ui.slider",k.ui.mouse,{version:"1.12.1",widgetEventPrefix:"slide",options:{animate:!1,classes:{"ui-slider":"ui-corner-all","ui-slider-handle":"ui-corner-all","ui-slider-range":"ui-corner-all ui-widget-header"},distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass("ui-slider ui-slider-"+this.orientation,"ui-widget ui-widget-content"),this._refresh(),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,e=this.options,i=this.element.find(".ui-slider-handle"),n=[],s=e.values&amp;&amp;e.values.length||1;for(i.length&gt;s&amp;&amp;(i.slice(s).remove(),i=i.slice(0,s)),t=i.length;t&lt;s;t++)n.push("&lt;span tabindex='0'&gt;&lt;/span&gt;");this.handles=i.add(k(n.join("")).appendTo(this.element)),this._addClass(this.handles,"ui-slider-handle","ui-state-default"),this.handle=this.handles.eq(0),this.handles.each(function(t){k(this).data("ui-slider-handle-index",t).attr("tabIndex",0)})},_createRange:function(){var t=this.options;t.range?(!0===t.range&amp;&amp;(t.values?t.values.length&amp;&amp;2!==t.values.length?t.values=[t.values[0],t.values[0]]:Array.isArray(t.values)&amp;&amp;(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&amp;&amp;this.range.length?(this._removeClass(this.range,"ui-slider-range-min ui-slider-range-max"),this.range.css({left:"",bottom:""})):(this.range=k("&lt;div&gt;").appendTo(this.element),this._addClass(this.range,"ui-slider-range")),"min"!==t.range&amp;&amp;"max"!==t.range||this._addClass(this.range,"ui-slider-range-"+t.range)):(this.range&amp;&amp;this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&amp;&amp;this.range.remove(),this._mouseDestroy()},_mouseCapture:function(t){var e,i,n,s,o,r,a,l=this,h=this.options;return!h.disabled&amp;&amp;(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var e=Math.abs(i-l.values(t));(e&lt;n||n===e&amp;&amp;(t===l._lastChangedValue||l.values(t)===h.min))&amp;&amp;(n=e,s=k(this),o=t)}),!1!==this._start(t,o)&amp;&amp;(this._mouseSliding=!0,this._handleIndex=o,this._addClass(s,null,"ui-state-active"),s.trigger("focus"),r=s.offset(),a=!k(t.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=a?{left:0,top:0}:{left:t.pageX-r.left-s.width()/2,top:t.pageY-r.top-s.height()/2-(parseInt(s.css("borderTopWidth"),10)||0)-(parseInt(s.css("borderBottomWidth"),10)||0)+(parseInt(s.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,i),this._animateOff=!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this._removeClass(this.handles,null,"ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,n,s="horizontal"===this.orientation?(e=this.elementSize.width,t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),o=s/e;return 1&lt;o&amp;&amp;(o=1),o&lt;0&amp;&amp;(o=0),"vertical"===this.orientation&amp;&amp;(o=1-o),i=this._valueMax()-this._valueMin(),n=this._valueMin()+o*i,this._trimAlignValue(n)},_uiHash:function(t,e,i){var n={handle:this.handles[t],handleIndex:t,value:void 0!==e?e:this.value()};return this._hasMultipleValues()&amp;&amp;(n.value=void 0!==e?e:this.values(t),n.values=i||this.values()),n},_hasMultipleValues:function(){return this.options.values&amp;&amp;this.options.values.length},_start:function(t,e){return this._trigger("start",t,this._uiHash(e))},_slide:function(t,e,i){var n,s=this.value(),o=this.values();this._hasMultipleValues()&amp;&amp;(n=this.values(e?0:1),s=this.values(e),2===this.options.values.length&amp;&amp;!0===this.options.range&amp;&amp;(i=0===e?Math.min(n,i):Math.max(n,i)),o[e]=i),i!==s&amp;&amp;!1!==this._trigger("slide",t,this._uiHash(e,i,o))&amp;&amp;(this._hasMultipleValues()?this.values(e,i):this.value(i))},_stop:function(t,e){this._trigger("stop",t,this._uiHash(e))},_change:function(t,e){this._keySliding||this._mouseSliding||(this._lastChangedValue=e,this._trigger("change",t,this._uiHash(e)))},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),void this._change(null,0)):this._value()},values:function(t,e){var i,n,s;if(1&lt;arguments.length)return this.options.values[t]=this._trimAlignValue(e),this._refreshValue(),void this._change(null,t);if(!arguments.length)return this._values();if(!Array.isArray(t))return this._hasMultipleValues()?this._values(t):this.value();for(i=this.options.values,n=t,s=0;s&lt;i.length;s+=1)i[s]=this._trimAlignValue(n[s]),this._change(null,s);this._refreshValue()},_setOption:function(t,e){var i,n=0;switch("range"===t&amp;&amp;!0===this.options.range&amp;&amp;("min"===e?(this.options.value=this._values(0),this.options.values=null):"max"===e&amp;&amp;(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),Array.isArray(this.options.values)&amp;&amp;(n=this.options.values.length),this._super(t,e),t){case"orientation":this._detectOrientation(),this._removeClass("ui-slider-horizontal ui-slider-vertical")._addClass("ui-slider-"+this.orientation),this._refreshValue(),this.options.range&amp;&amp;this._refreshRange(e),this.handles.css("horizontal"===e?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),i=n-1;0&lt;=i;i--)this._change(null,i);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_setOptionDisabled:function(t){this._super(t),this._toggleClass(null,"ui-state-disabled",!!t)},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,n;if(arguments.length)return e=this.options.values[t],this._trimAlignValue(e);if(this._hasMultipleValues()){for(i=this.options.values.slice(),n=0;n&lt;i.length;n+=1)i[n]=this._trimAlignValue(i[n]);return i}return[]},_trimAlignValue:function(t){if(t&lt;=this._valueMin())return this._valueMin();if(t&gt;=this._valueMax())return this._valueMax();var e=0&lt;this.options.step?this.options.step:1,i=(t-this._valueMin())%e,n=t-i;return 2*Math.abs(i)&gt;=e&amp;&amp;(n+=0&lt;i?e:-e),parseFloat(n.toFixed(5))},_calculateNewMax:function(){var t=this.options.max,e=this._valueMin(),i=this.options.step;(t=Math.round((t-e)/i)*i+e)&gt;this.options.max&amp;&amp;(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&amp;&amp;(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=t.toString(),i=e.indexOf(".");return-1===i?0:e.length-i-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshRange:function(t){"vertical"===t&amp;&amp;this.range.css({width:"",left:""}),"horizontal"===t&amp;&amp;this.range.css({height:"",bottom:""})},_refreshValue:function(){var e,i,t,n,s,o=this.options.range,r=this.options,a=this,l=!this._animateOff&amp;&amp;r.animate,h={};this._hasMultipleValues()?this.handles.each(function(t){i=(a.values(t)-a._valueMin())/(a._valueMax()-a._valueMin())*100,h["horizontal"===a.orientation?"left":"bottom"]=i+"%",k(this).stop(1,1)[l?"animate":"css"](h,r.animate),!0===a.options.range&amp;&amp;("horizontal"===a.orientation?(0===t&amp;&amp;a.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===t&amp;&amp;a.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===t&amp;&amp;a.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===t&amp;&amp;a.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(t=this.value(),n=this._valueMin(),s=this._valueMax(),i=s!==n?(t-n)/(s-n)*100:0,h["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](h,r.animate),"min"===o&amp;&amp;"horizontal"===this.orientation&amp;&amp;this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&amp;&amp;"horizontal"===this.orientation&amp;&amp;this.range.stop(1,1)[l?"animate":"css"]({width:100-i+"%"},r.animate),"min"===o&amp;&amp;"vertical"===this.orientation&amp;&amp;this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&amp;&amp;"vertical"===this.orientation&amp;&amp;this.range.stop(1,1)[l?"animate":"css"]({height:100-i+"%"},r.animate))},_handleEvents:{keydown:function(t){var e,i,n,s=k(t.target).data("ui-slider-handle-index");switch(t.keyCode){case k.ui.keyCode.HOME:case k.ui.keyCode.END:case k.ui.keyCode.PAGE_UP:case k.ui.keyCode.PAGE_DOWN:case k.ui.keyCode.UP:case k.ui.keyCode.RIGHT:case k.ui.keyCode.DOWN:case k.ui.keyCode.LEFT:if(t.preventDefault(),!this._keySliding&amp;&amp;(this._keySliding=!0,this._addClass(k(t.target),null,"ui-state-active"),!1===this._start(t,s)))return}switch(n=this.options.step,e=i=this._hasMultipleValues()?this.values(s):this.value(),t.keyCode){case k.ui.keyCode.HOME:i=this._valueMin();break;case k.ui.keyCode.END:i=this._valueMax();break;case k.ui.keyCode.PAGE_UP:i=this._trimAlignValue(e+(this._valueMax()-this._valueMin())/this.numPages);break;case k.ui.keyCode.PAGE_DOWN:i=this._trimAlignValue(e-(this._valueMax()-this._valueMin())/this.numPages);break;case k.ui.keyCode.UP:case k.ui.keyCode.RIGHT:if(e===this._valueMax())return;i=this._trimAlignValue(e+n);break;case k.ui.keyCode.DOWN:case k.ui.keyCode.LEFT:if(e===this._valueMin())return;i=this._trimAlignValue(e-n)}this._slide(t,s,i)},keyup:function(t){var e=k(t.target).data("ui-slider-handle-index");this._keySliding&amp;&amp;(this._keySliding=!1,this._stop(t,e),this._change(t,e),this._removeClass(k(t.target),null,"ui-state-active"))}}}),k.widget("ui.sortable",k.ui.mouse,{version:"1.12.1",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"&gt; *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return e&lt;=t&amp;&amp;t&lt;e+i},_isFloating:function(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))},_create:function(){this.containerCache={},this._addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),"handle"===t&amp;&amp;this._setHandleClassName()},_setHandleClassName:function(){var t=this;this._removeClass(this.element.find(".ui-sortable-handle"),"ui-sortable-handle"),k.each(this.items,function(){t._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,"ui-sortable-handle")})},_destroy:function(){this._mouseDestroy();for(var t=this.items.length-1;0&lt;=t;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(t,e){var i=null,n=!1,s=this;return!this.reverting&amp;&amp;(!this.options.disabled&amp;&amp;"static"!==this.options.type&amp;&amp;(this._refreshItems(t),k(t.target).parents().each(function(){if(k.data(this,s.widgetName+"-item")===s)return i=k(this),!1}),k.data(t.target,s.widgetName+"-item")===s&amp;&amp;(i=k(t.target)),!!i&amp;&amp;(!(this.options.handle&amp;&amp;!e&amp;&amp;(k(this.options.handle,i).find("*").addBack().each(function(){this===t.target&amp;&amp;(n=!0)}),!n))&amp;&amp;(this.currentItem=i,this._removeCurrentsFromItems(),!0))))},_mouseStart:function(t,e,i){var n,s,o=this.options;if((this.currentContainer=this).refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},k.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,o.cursorAt&amp;&amp;this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&amp;&amp;this.currentItem.hide(),this._createPlaceholder(),o.containment&amp;&amp;this._setContainment(),o.cursor&amp;&amp;"auto"!==o.cursor&amp;&amp;(s=this.document.find("body"),this.storedCursor=s.css("cursor"),s.css("cursor",o.cursor),this.storedStylesheet=k("&lt;style&gt;*{ cursor: "+o.cursor+" !important; }&lt;/style&gt;").appendTo(s)),o.opacity&amp;&amp;(this.helper.css("opacity")&amp;&amp;(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&amp;&amp;(this.helper.css("zIndex")&amp;&amp;(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==this.document[0]&amp;&amp;"HTML"!==this.scrollParent[0].tagName&amp;&amp;(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!i)for(n=this.containers.length-1;0&lt;=n;n--)this.containers[n]._trigger("activate",t,this._uiHash(this));return k.ui.ddmanager&amp;&amp;(k.ui.ddmanager.current=this),k.ui.ddmanager&amp;&amp;!o.dropBehaviour&amp;&amp;k.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var e,i,n,s,o=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&amp;&amp;(this.scrollParent[0]!==this.document[0]&amp;&amp;"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY&lt;o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:t.pageY-this.overflowOffset.top&lt;o.scrollSensitivity&amp;&amp;(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX&lt;o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:t.pageX-this.overflowOffset.left&lt;o.scrollSensitivity&amp;&amp;(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(t.pageY-this.document.scrollTop()&lt;o.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-o.scrollSpeed):this.window.height()-(t.pageY-this.document.scrollTop())&lt;o.scrollSensitivity&amp;&amp;(r=this.document.scrollTop(this.document.scrollTop()+o.scrollSpeed)),t.pageX-this.document.scrollLeft()&lt;o.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-o.scrollSpeed):this.window.width()-(t.pageX-this.document.scrollLeft())&lt;o.scrollSensitivity&amp;&amp;(r=this.document.scrollLeft(this.document.scrollLeft()+o.scrollSpeed))),!1!==r&amp;&amp;k.ui.ddmanager&amp;&amp;!o.dropBehaviour&amp;&amp;k.ui.ddmanager.prepareOffsets(this,t)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&amp;&amp;"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&amp;&amp;"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),e=this.items.length-1;0&lt;=e;e--)if(n=(i=this.items[e]).item[0],(s=this._intersectsWithPointer(i))&amp;&amp;i.instance===this.currentContainer&amp;&amp;!(n===this.currentItem[0]||this.placeholder[1===s?"next":"prev"]()[0]===n||k.contains(this.placeholder[0],n)||"semi-dynamic"===this.options.type&amp;&amp;k.contains(this.element[0],n))){if(this.direction=1===s?"down":"up","pointer"!==this.options.tolerance&amp;&amp;!this._intersectsWithSides(i))break;this._rearrange(t,i),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),k.ui.ddmanager&amp;&amp;k.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,e){var i,n,s,o;if(t)return k.ui.ddmanager&amp;&amp;!this.options.dropBehaviour&amp;&amp;k.ui.ddmanager.drop(this,t),this.options.revert?(n=(i=this).placeholder.offset(),o={},(s=this.options.axis)&amp;&amp;"x"!==s||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),s&amp;&amp;"y"!==s||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,k(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){i._clear(t)})):this._clear(t,e),!1},cancel:function(){if(this.dragging){this._mouseUp(new k.Event("mouseup",{target:null})),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var t=this.containers.length-1;0&lt;=t;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&amp;&amp;(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&amp;&amp;(this.placeholder[0].parentNode&amp;&amp;this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&amp;&amp;this.helper&amp;&amp;this.helper[0].parentNode&amp;&amp;this.helper.remove(),k.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?k(this.domPosition.prev).after(this.currentItem):k(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var t=this._getItemsAsjQuery(e&amp;&amp;e.connected),i=[];return e=e||{},k(t).each(function(){var t=(k(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);t&amp;&amp;i.push((e.key||t[1]+"[]")+"="+(e.key&amp;&amp;e.expression?t[1]:t[2]))}),!i.length&amp;&amp;e.key&amp;&amp;i.push(e.key+"="),i.join("&amp;")},toArray:function(t){var e=this._getItemsAsjQuery(t&amp;&amp;t.connected),i=[];return t=t||{},e.each(function(){i.push(k(t.item||this).attr(t.attribute||"id")||"")}),i},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,n=this.positionAbs.top,s=n+this.helperProportions.height,o=t.left,r=o+t.width,a=t.top,l=a+t.height,h=this.offset.click.top,u=this.offset.click.left,c="x"===this.options.axis||a&lt;n+h&amp;&amp;n+h&lt;l,d="y"===this.options.axis||o&lt;e+u&amp;&amp;e+u&lt;r,p=c&amp;&amp;d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&amp;&amp;this.helperProportions[this.floating?"width":"height"]&gt;t[this.floating?"width":"height"]?p:o&lt;e+this.helperProportions.width/2&amp;&amp;i-this.helperProportions.width/2&lt;r&amp;&amp;a&lt;n+this.helperProportions.height/2&amp;&amp;s-this.helperProportions.height/2&lt;l},_intersectsWithPointer:function(t){var e,i,n="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),s="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width);return!(!n||!s)&amp;&amp;(e=this._getDragVerticalDirection(),i=this._getDragHorizontalDirection(),this.floating?"right"===i||"down"===e?2:1:e&amp;&amp;("down"===e?2:1))},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),n=this._getDragVerticalDirection(),s=this._getDragHorizontalDirection();return this.floating&amp;&amp;s?"right"===s&amp;&amp;i||"left"===s&amp;&amp;!i:n&amp;&amp;("down"===n&amp;&amp;e||"up"===n&amp;&amp;!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!=t&amp;&amp;(0&lt;t?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!=t&amp;&amp;(0&lt;t?"right":"left")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(t){var e,i,n,s,o=[],r=[],a=this._connectWith();if(a&amp;&amp;t)for(e=a.length-1;0&lt;=e;e--)for(i=(n=k(a[e],this.document[0])).length-1;0&lt;=i;i--)(s=k.data(n[i],this.widgetFullName))&amp;&amp;s!==this&amp;&amp;!s.options.disabled&amp;&amp;r.push([k.isFunction(s.options.items)?s.options.items.call(s.element):k(s.options.items,s.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),s]);function l(){o.push(this)}for(r.push([k.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):k(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),e=r.length-1;0&lt;=e;e--)r[e][0].each(l);return k(o)},_removeCurrentsFromItems:function(){var i=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=k.grep(this.items,function(t){for(var e=0;e&lt;i.length;e++)if(i[e]===t.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var e,i,n,s,o,r,a,l,h=this.items,u=[[k.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):k(this.options.items,this.element),this]],c=this._connectWith();if(c&amp;&amp;this.ready)for(e=c.length-1;0&lt;=e;e--)for(i=(n=k(c[e],this.document[0])).length-1;0&lt;=i;i--)(s=k.data(n[i],this.widgetFullName))&amp;&amp;s!==this&amp;&amp;!s.options.disabled&amp;&amp;(u.push([k.isFunction(s.options.items)?s.options.items.call(s.element[0],t,{item:this.currentItem}):k(s.options.items,s.element),s]),this.containers.push(s));for(e=u.length-1;0&lt;=e;e--)for(o=u[e][1],i=0,l=(r=u[e][0]).length;i&lt;l;i++)(a=k(r[i])).data(this.widgetName+"-item",o),h.push({item:a,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(t){var e,i,n,s;for(this.floating=!!this.items.length&amp;&amp;("x"===this.options.axis||this._isFloating(this.items[0].item)),this.offsetParent&amp;&amp;this.helper&amp;&amp;(this.offset.parent=this._getParentOffset()),e=this.items.length-1;0&lt;=e;e--)(i=this.items[e]).instance!==this.currentContainer&amp;&amp;this.currentContainer&amp;&amp;i.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?k(this.options.toleranceElement,i.item):i.item,t||(i.width=n.outerWidth(),i.height=n.outerHeight()),s=n.offset(),i.left=s.left,i.top=s.top);if(this.options.custom&amp;&amp;this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(e=this.containers.length-1;0&lt;=e;e--)s=this.containers[e].element.offset(),this.containers[e].containerCache.left=s.left,this.containers[e].containerCache.top=s.top,this.containers[e].containerCache.width=this.containers[e].element.outerWidth(),this.containers[e].containerCache.height=this.containers[e].element.outerHeight();return this},_createPlaceholder:function(i){var n,s=(i=i||this).options;s.placeholder&amp;&amp;s.placeholder.constructor!==String||(n=s.placeholder,s.placeholder={element:function(){var t=i.currentItem[0].nodeName.toLowerCase(),e=k("&lt;"+t+"&gt;",i.document[0]);return i._addClass(e,"ui-sortable-placeholder",n||i.currentItem[0].className)._removeClass(e,"ui-sortable-helper"),"tbody"===t?i._createTrPlaceholder(i.currentItem.find("tr").eq(0),k("&lt;tr&gt;",i.document[0]).appendTo(e)):"tr"===t?i._createTrPlaceholder(i.currentItem,e):"img"===t&amp;&amp;e.attr("src",i.currentItem.attr("src")),n||e.css("visibility","hidden"),e},update:function(t,e){n&amp;&amp;!s.forcePlaceholderSize||(e.height()||e.height(i.currentItem.innerHeight()-parseInt(i.currentItem.css("paddingTop")||0,10)-parseInt(i.currentItem.css("paddingBottom")||0,10)),e.width()||e.width(i.currentItem.innerWidth()-parseInt(i.currentItem.css("paddingLeft")||0,10)-parseInt(i.currentItem.css("paddingRight")||0,10)))}}),i.placeholder=k(s.placeholder.element.call(i.element,i.currentItem)),i.currentItem.after(i.placeholder),s.placeholder.update(i,i.placeholder)},_createTrPlaceholder:function(t,e){var i=this;t.children().each(function(){k("&lt;td&gt;&amp;#160;&lt;/td&gt;",i.document[0]).attr("colspan",k(this).attr("colspan")||1).appendTo(e)})},_contactContainers:function(t){for(var e,i,n,s,o,r,a,l,h,u=null,c=null,d=this.containers.length-1;0&lt;=d;d--)if(!k.contains(this.currentItem[0],this.containers[d].element[0]))if(this._intersectsWith(this.containers[d].containerCache)){if(u&amp;&amp;k.contains(this.containers[d].element[0],u.element[0]))continue;u=this.containers[d],c=d}else this.containers[d].containerCache.over&amp;&amp;(this.containers[d]._trigger("out",t,this._uiHash(this)),this.containers[d].containerCache.over=0);if(u)if(1===this.containers.length)this.containers[c].containerCache.over||(this.containers[c]._trigger("over",t,this._uiHash(this)),this.containers[c].containerCache.over=1);else{for(i=1e4,n=null,s=(l=u.floating||this._isFloating(this.currentItem))?"left":"top",o=l?"width":"height",h=l?"pageX":"pageY",e=this.items.length-1;0&lt;=e;e--)k.contains(this.containers[c].element[0],this.items[e].item[0])&amp;&amp;this.items[e].item[0]!==this.currentItem[0]&amp;&amp;(r=this.items[e].item.offset()[s],a=!1,t[h]-r&gt;this.items[e][o]/2&amp;&amp;(a=!0),Math.abs(t[h]-r)&lt;i&amp;&amp;(i=Math.abs(t[h]-r),n=this.items[e],this.direction=a?"up":"down"));if(!n&amp;&amp;!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[c])return void(this.currentContainer.containerCache.over||(this.containers[c]._trigger("over",t,this._uiHash()),this.currentContainer.containerCache.over=1));n?this._rearrange(t,n,null,!0):this._rearrange(t,null,this.containers[c].element,!0),this._trigger("change",t,this._uiHash()),this.containers[c]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[c],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[c]._trigger("over",t,this._uiHash(this)),this.containers[c].containerCache.over=1}},_createHelper:function(t){var e=this.options,i=k.isFunction(e.helper)?k(e.helper.apply(this.element[0],[t,this.currentItem])):"clone"===e.helper?this.currentItem.clone():this.currentItem;return i.parents("body").length||k("parent"!==e.appendTo?e.appendTo:this.currentItem[0].parentNode)[0].appendChild(i[0]),i[0]===this.currentItem[0]&amp;&amp;(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),i[0].style.width&amp;&amp;!e.forceHelperSize||i.width(this.currentItem.width()),i[0].style.height&amp;&amp;!e.forceHelperSize||i.height(this.currentItem.height()),i},_adjustOffsetFromHelper:function(t){"string"==typeof t&amp;&amp;(t=t.split(" ")),Array.isArray(t)&amp;&amp;(t={left:+t[0],top:+t[1]||0}),"left"in t&amp;&amp;(this.offset.click.left=t.left+this.margins.left),"right"in t&amp;&amp;(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&amp;&amp;(this.offset.click.top=t.top+this.margins.top),"bottom"in t&amp;&amp;(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&amp;&amp;this.scrollParent[0]!==this.document[0]&amp;&amp;k.contains(this.scrollParent[0],this.offsetParent[0])&amp;&amp;(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&amp;&amp;"html"===this.offsetParent[0].tagName.toLowerCase()&amp;&amp;k.ui.ie)&amp;&amp;(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,e,i,n=this.options;"parent"===n.containment&amp;&amp;(n.containment=this.helper[0].parentNode),"document"!==n.containment&amp;&amp;"window"!==n.containment||(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(t=k(n.containment)[0],e=k(n.containment).offset(),i="hidden"!==k(t).css("overflow"),this.containment=[e.left+(parseInt(k(t).css("borderLeftWidth"),10)||0)+(parseInt(k(t).css("paddingLeft"),10)||0)-this.margins.left,e.top+(parseInt(k(t).css("borderTopWidth"),10)||0)+(parseInt(k(t).css("paddingTop"),10)||0)-this.margins.top,e.left+(i?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(k(t).css("borderLeftWidth"),10)||0)-(parseInt(k(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,e.top+(i?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(k(t).css("borderTopWidth"),10)||0)-(parseInt(k(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,e){e=e||this.position;var i="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&amp;&amp;k.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,s=/(html|body)/i.test(n[0].tagName);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():s?0:n.scrollTop())*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():s?0:n.scrollLeft())*i}},_generatePosition:function(t){var e,i,n=this.options,s=t.pageX,o=t.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&amp;&amp;k.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&amp;&amp;this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&amp;&amp;(this.containment&amp;&amp;(t.pageX-this.offset.click.left&lt;this.containment[0]&amp;&amp;(s=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top&lt;this.containment[1]&amp;&amp;(o=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left&gt;this.containment[2]&amp;&amp;(s=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top&gt;this.containment[3]&amp;&amp;(o=this.containment[3]+this.offset.click.top)),n.grid&amp;&amp;(e=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=!this.containment||e-this.offset.click.top&gt;=this.containment[1]&amp;&amp;e-this.offset.click.top&lt;=this.containment[3]?e:e-this.offset.click.top&gt;=this.containment[1]?e-n.grid[1]:e+n.grid[1],i=this.originalPageX+Math.round((s-this.originalPageX)/n.grid[0])*n.grid[0],s=!this.containment||i-this.offset.click.left&gt;=this.containment[0]&amp;&amp;i-this.offset.click.left&lt;=this.containment[2]?i:i-this.offset.click.left&gt;=this.containment[0]?i-n.grid[0]:i+n.grid[0])),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:r.scrollTop()),left:s-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:r.scrollLeft())}},_rearrange:function(t,e,i,n){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var s=this.counter;this._delay(function(){s===this.counter&amp;&amp;this.refreshPositions(!n)})},_clear:function(t,e){this.reverting=!1;var i,n=[];if(!this._noFinalSort&amp;&amp;this.currentItem.parent().length&amp;&amp;this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)"auto"!==this._storedCSS[i]&amp;&amp;"static"!==this._storedCSS[i]||(this._storedCSS[i]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();function s(e,i,n){return function(t){n._trigger(e,t,i._uiHash(i))}}for(this.fromOutside&amp;&amp;!e&amp;&amp;n.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&amp;&amp;this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&amp;&amp;this.domPosition.parent===this.currentItem.parent()[0]||e||n.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&amp;&amp;(e||(n.push(function(t){this._trigger("remove",t,this._uiHash())}),n.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),i=this.containers.length-1;0&lt;=i;i--)e||n.push(s("deactivate",this,this.containers[i])),this.containers[i].containerCache.over&amp;&amp;(n.push(s("out",this,this.containers[i])),this.containers[i].containerCache.over=0);if(this.storedCursor&amp;&amp;(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&amp;&amp;this.helper.css("opacity",this._storedOpacity),this._storedZIndex&amp;&amp;this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&amp;&amp;this.helper.remove(),this.helper=null),!e){for(i=0;i&lt;n.length;i++)n[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){!1===k.Widget.prototype._trigger.apply(this,arguments)&amp;&amp;this.cancel()},_uiHash:function(t){var e=t||this;return{helper:e.helper,placeholder:e.placeholder||k([]),position:e.position,originalPosition:e.originalPosition,offset:e.positionAbs,item:e.currentItem,sender:t?t.element:null}}});function rt(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&amp;&amp;this._trigger("change")}}k.widget("ui.spinner",{version:"1.12.1",defaultElement:"&lt;input&gt;",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&amp;&amp;this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var n=this._super(),s=this.element;return k.each(["min","max","step"],function(t,e){var i=s.attr(e);null!=i&amp;&amp;i.length&amp;&amp;(n[e]=i)}),n},_events:{keydown:function(t){this._start(t)&amp;&amp;this._keydown(t)&amp;&amp;t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){this.cancelBlur?delete this.cancelBlur:(this._stop(),this._refresh(),this.previous!==this.element.val()&amp;&amp;this._trigger("change",t))},mousewheel:function(t,e){if(e){if(!this.spinning&amp;&amp;!this._start(t))return!1;this._spin((0&lt;e?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&amp;&amp;this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(t){var e;function i(){this.element[0]===k.ui.safeActiveElement(this.document[0])||(this.element.trigger("focus"),this.previous=e,this._delay(function(){this.previous=e}))}e=this.element[0]===k.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),!1!==this._start(t)&amp;&amp;this._repeat(null,k(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){if(k(t.currentTarget).hasClass("ui-state-active"))return!1!==this._start(t)&amp;&amp;void this._repeat(null,k(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("&lt;span&gt;").parent().append("&lt;a&gt;&lt;/a&gt;&lt;a&gt;&lt;/a&gt;")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()&gt;Math.ceil(.5*this.uiSpinner.height())&amp;&amp;0&lt;this.uiSpinner.height()&amp;&amp;this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(t){var e=this.options,i=k.ui.keyCode;switch(t.keyCode){case i.UP:return this._repeat(null,1,t),!0;case i.DOWN:return this._repeat(null,-1,t),!0;case i.PAGE_UP:return this._repeat(null,e.page,t),!0;case i.PAGE_DOWN:return this._repeat(null,-e.page,t),!0}return!1},_start:function(t){return!(!this.spinning&amp;&amp;!1===this._trigger("start",t))&amp;&amp;(this.counter||(this.counter=1),this.spinning=!0)},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&amp;&amp;!1===this._trigger("spin",e,{value:i})||(this._value(i),this.counter++)},_increment:function(t){var e=this.options.incremental;return e?k.isFunction(e)?e(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&amp;&amp;(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=t.toString(),i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e=this.options,i=null!==e.min?e.min:0,n=t-i;return t=i+Math.round(n/e.step)*e.step,t=parseFloat(t.toFixed(this._precision())),null!==e.max&amp;&amp;t&gt;e.max?e.max:null!==e.min&amp;&amp;t&lt;e.min?e.min:t},_stop:function(t){this.spinning&amp;&amp;(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i,n,s;if("culture"===t||"numberFormat"===t)return i=this._parse(this.element.val()),this.options[t]=e,void this.element.val(this._format(i));"max"!==t&amp;&amp;"min"!==t&amp;&amp;"step"!==t||"string"==typeof e&amp;&amp;(e=this._parse(e)),"icons"===t&amp;&amp;(n=this.buttons.first().find(".ui-icon"),this._removeClass(n,null,this.options.icons.up),this._addClass(n,null,e.up),s=this.buttons.last().find(".ui-icon"),this._removeClass(s,null,this.options.icons.down),this._addClass(s,null,e.down)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:rt(function(t){this._super(t)}),_parse:function(t){return"string"==typeof t&amp;&amp;""!==t&amp;&amp;(t=window.Globalize&amp;&amp;this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&amp;&amp;this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null!==t&amp;&amp;t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&amp;&amp;null!==(i=this._parse(t))&amp;&amp;(e||(i=this._adjustValue(i)),t=this._format(i)),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:rt(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&amp;&amp;(this._spin((t||1)*this.options.step),this._stop())},stepDown:rt(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&amp;&amp;(this._spin((t||1)*-this.options.step),this._stop())},pageUp:rt(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:rt(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){if(!arguments.length)return this._parse(this.element.val());rt(this._value).call(this,t)},widget:function(){return this.uiSpinner}}),!1!==k.uiBackCompat&amp;&amp;k.widget("ui.spinner",k.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return"&lt;span&gt;"},_buttonHtml:function(){return"&lt;a&gt;&lt;/a&gt;&lt;a&gt;&lt;/a&gt;"}});var at;k.ui.spinner;k.widget("ui.tabs",{version:"1.12.1",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:(at=/#.*$/,function(t){var e=t.href.replace(at,""),i=location.href.replace(at,"");try{e=decodeURIComponent(e)}catch(t){}try{i=decodeURIComponent(i)}catch(t){}return 1&lt;t.hash.length&amp;&amp;e===i}),_create:function(){var e=this,t=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,t.collapsible),this._processTabs(),t.active=this._initialActive(),Array.isArray(t.disabled)&amp;&amp;(t.disabled=k.unique(t.disabled.concat(k.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),!1!==this.options.active&amp;&amp;this.anchors.length?this.active=this._findActive(t.active):this.active=k(),this._refresh(),this.active.length&amp;&amp;this.load(t.active)},_initialActive:function(){var i=this.options.active,t=this.options.collapsible,n=location.hash.substring(1);return null===i&amp;&amp;(n&amp;&amp;this.tabs.each(function(t,e){if(k(e).attr("aria-controls")===n)return i=t,!1}),null===i&amp;&amp;(i=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),null!==i&amp;&amp;-1!==i||(i=!!this.tabs.length&amp;&amp;0)),!1!==i&amp;&amp;-1===(i=this.tabs.index(this.tabs.eq(i)))&amp;&amp;(i=!t&amp;&amp;0),!t&amp;&amp;!1===i&amp;&amp;this.anchors.length&amp;&amp;(i=0),i},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):k()}},_tabKeydown:function(t){var e=k(k.ui.safeActiveElement(this.document[0])).closest("li"),i=this.tabs.index(e),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case k.ui.keyCode.RIGHT:case k.ui.keyCode.DOWN:i++;break;case k.ui.keyCode.UP:case k.ui.keyCode.LEFT:n=!1,i--;break;case k.ui.keyCode.END:i=this.anchors.length-1;break;case k.ui.keyCode.HOME:i=0;break;case k.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),void this._activate(i);case k.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),void this._activate(i!==this.options.active&amp;&amp;i);default:return}t.preventDefault(),clearTimeout(this.activating),i=this._focusNextTab(i,n),t.ctrlKey||t.metaKey||(e.attr("aria-selected","false"),this.tabs.eq(i).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",i)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&amp;&amp;t.keyCode===k.ui.keyCode.UP&amp;&amp;(t.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(t){return t.altKey&amp;&amp;t.keyCode===k.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&amp;&amp;t.keyCode===k.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,e){var i=this.tabs.length-1;for(;-1!==k.inArray((i&lt;t&amp;&amp;(t=0),t&lt;0&amp;&amp;(t=i),t),this.options.disabled);)t=e?t+1:t-1;return t},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){"active"!==t?(this._super(t,e),"collapsible"===t&amp;&amp;(this._toggleClass("ui-tabs-collapsible",null,e),e||!1!==this.options.active||this._activate(0)),"event"===t&amp;&amp;this._setupEvents(e),"heightStyle"===t&amp;&amp;this._setupHeightStyle(e)):this._activate(e)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&amp;'()*+,.\/:;&lt;=&gt;?@\[\]\^`{|}~]/g,"\\$&amp;"):""},refresh:function(){var t=this.options,e=this.tablist.children(":has(a[href])");t.disabled=k.map(e.filter(".ui-state-disabled"),function(t){return e.index(t)}),this._processTabs(),!1!==t.active&amp;&amp;this.anchors.length?this.active.length&amp;&amp;!k.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=k()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=k()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var l=this,t=this.tabs,e=this.anchors,i=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"&gt; li",function(t){k(this).is(".ui-state-disabled")&amp;&amp;t.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){k(this).closest("li").is(".ui-state-disabled")&amp;&amp;this.blur()}),this.tabs=this.tablist.find("&gt; li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return k("a",this)[0]}).attr({role:"presentation",tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=k(),this.anchors.each(function(t,e){var i,n,s,o=k(e).uniqueId().attr("id"),r=k(e).closest("li"),a=r.attr("aria-controls");l._isLocal(e)?(s=(i=e.hash).substring(1),n=l.element.find(l._sanitizeSelector(i))):(i="#"+(s=r.attr("aria-controls")||k({}).uniqueId()[0].id),(n=l.element.find(i)).length||(n=l._createPanel(s)).insertAfter(l.panels[t-1]||l.tablist),n.attr("aria-live","polite")),n.length&amp;&amp;(l.panels=l.panels.add(n)),a&amp;&amp;r.data("ui-tabs-aria-controls",a),r.attr({"aria-controls":s,"aria-labelledby":o}),n.attr("aria-labelledby",o)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),t&amp;&amp;(this._off(t.not(this.tabs)),this._off(e.not(this.anchors)),this._off(i.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(t){return k("&lt;div&gt;").attr("id",t).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(t){var e,i,n;for(Array.isArray(t)&amp;&amp;(t.length?t.length===this.anchors.length&amp;&amp;(t=!0):t=!1),n=0;i=this.tabs[n];n++)e=k(i),!0===t||-1!==k.inArray(n,t)?(e.attr("aria-disabled","true"),this._addClass(e,null,"ui-state-disabled")):(e.removeAttr("aria-disabled"),this._removeClass(e,null,"ui-state-disabled"));this.options.disabled=t,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!0===t)},_setupEvents:function(t){var i={};t&amp;&amp;k.each(t.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,e=this.element.parent();"fill"===t?(i=e.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=k(this),e=t.css("position");"absolute"!==e&amp;&amp;"fixed"!==e&amp;&amp;(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=k(this).outerHeight(!0)}),this.panels.each(function(){k(this).height(Math.max(0,i-k(this).innerHeight()+k(this).height()))}).css("overflow","auto")):"auto"===t&amp;&amp;(i=0,this.panels.each(function(){i=Math.max(i,k(this).height("").height())}).height(i))},_eventHandler:function(t){var e=this.options,i=this.active,n=k(t.currentTarget).closest("li"),s=n[0]===i[0],o=s&amp;&amp;e.collapsible,r=o?k():this._getPanelForTab(n),a=i.length?this._getPanelForTab(i):k(),l={oldTab:i,oldPanel:a,newTab:o?k():n,newPanel:r};t.preventDefault(),n.hasClass("ui-state-disabled")||n.hasClass("ui-tabs-loading")||this.running||s&amp;&amp;!e.collapsible||!1===this._trigger("beforeActivate",t,l)||(e.active=!o&amp;&amp;this.tabs.index(n),this.active=s?k():n,this.xhr&amp;&amp;this.xhr.abort(),a.length||r.length||k.error("jQuery UI Tabs: Mismatching fragment identifier."),r.length&amp;&amp;this.load(this.tabs.index(n),t),this._toggle(t,l))},_toggle:function(t,e){var i=this,n=e.newPanel,s=e.oldPanel;function o(){i.running=!1,i._trigger("activate",t,e)}function r(){i._addClass(e.newTab.closest("li"),"ui-tabs-active","ui-state-active"),n.length&amp;&amp;i.options.show?i._show(n,i.options.show,o):(n.show(),o())}this.running=!0,s.length&amp;&amp;this.options.hide?this._hide(s,this.options.hide,function(){i._removeClass(e.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r()}):(this._removeClass(e.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),s.hide(),r()),s.attr("aria-hidden","true"),e.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),n.length&amp;&amp;s.length?e.oldTab.attr("tabIndex",-1):n.length&amp;&amp;this.tabs.filter(function(){return 0===k(this).attr("tabIndex")}).attr("tabIndex",-1),n.attr("aria-hidden","false"),e.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var e,i=this._findActive(t);i[0]!==this.active[0]&amp;&amp;(i.length||(i=this.active),e=i.find(".ui-tabs-anchor")[0],this._eventHandler({target:e,currentTarget:e,preventDefault:k.noop}))},_findActive:function(t){return!1===t?k():this.tabs.eq(t)},_getIndex:function(t){return"string"==typeof t&amp;&amp;(t=this.anchors.index(this.anchors.filter("[href$='"+k.ui.escapeSelector(t)+"']"))),t},_destroy:function(){this.xhr&amp;&amp;this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){k.data(this,"ui-tabs-destroy")?k(this).remove():k(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var t=k(this),e=t.data("ui-tabs-aria-controls");e?t.attr("aria-controls",e).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&amp;&amp;this.panels.css("height","")},enable:function(i){var t=this.options.disabled;!1!==t&amp;&amp;(t=void 0!==i&amp;&amp;(i=this._getIndex(i),Array.isArray(t)?k.map(t,function(t){return t!==i?t:null}):k.map(this.tabs,function(t,e){return e!==i?e:null})),this._setOptionDisabled(t))},disable:function(t){var e=this.options.disabled;if(!0!==e){if(void 0===t)e=!0;else{if(t=this._getIndex(t),-1!==k.inArray(t,e))return;e=Array.isArray(e)?k.merge([t],e).sort():[t]}this._setOptionDisabled(e)}},load:function(t,n){t=this._getIndex(t);function s(t,e){"abort"===e&amp;&amp;o.panels.stop(!1,!0),o._removeClass(i,"ui-tabs-loading"),r.removeAttr("aria-busy"),t===o.xhr&amp;&amp;delete o.xhr}var o=this,i=this.tabs.eq(t),e=i.find(".ui-tabs-anchor"),r=this._getPanelForTab(i),a={tab:i,panel:r};this._isLocal(e[0])||(this.xhr=k.ajax(this._ajaxSettings(e,n,a)),this.xhr&amp;&amp;"canceled"!==this.xhr.statusText&amp;&amp;(this._addClass(i,"ui-tabs-loading"),r.attr("aria-busy","true"),this.xhr.done(function(t,e,i){setTimeout(function(){r.html(t),o._trigger("load",n,a),s(i,e)},1)}).fail(function(t,e){setTimeout(function(){s(t,e)},1)})))},_ajaxSettings:function(t,i,n){var s=this;return{url:t.attr("href").replace(/#.*$/,""),beforeSend:function(t,e){return s._trigger("beforeLoad",i,k.extend({jqXHR:t,ajaxSettings:e},n))}}},_getPanelForTab:function(t){var e=k(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+e))}}),!1!==k.uiBackCompat&amp;&amp;k.widget("ui.tabs",k.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}});k.ui.tabs;k.widget("ui.tooltip",{version:"1.12.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var t=k(this).attr("title")||"";return k("&lt;a&gt;").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(t,e){var i=(t.attr("aria-describedby")||"").split(/\s+/);i.push(e),t.data("ui-tooltip-id",e).attr("aria-describedby",k.trim(i.join(" ")))},_removeDescribedBy:function(t){var e=t.data("ui-tooltip-id"),i=(t.attr("aria-describedby")||"").split(/\s+/),n=k.inArray(e,i);-1!==n&amp;&amp;i.splice(n,1),t.removeData("ui-tooltip-id"),(i=k.trim(i.join(" ")))?t.attr("aria-describedby",i):t.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=k("&lt;div&gt;").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=k([])},_setOption:function(t,e){var i=this;this._super(t,e),"content"===t&amp;&amp;k.each(this.tooltips,function(t,e){i._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var n=this;k.each(this.tooltips,function(t,e){var i=k.Event("blur");i.target=i.currentTarget=e.element[0],n.close(i,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var t=k(this);if(t.is("[title]"))return t.data("ui-tooltip-title",t.attr("title")).removeAttr("title")}))},_enable:function(){this.disabledTitles.each(function(){var t=k(this);t.data("ui-tooltip-title")&amp;&amp;t.attr("title",t.data("ui-tooltip-title"))}),this.disabledTitles=k([])},open:function(t){var i=this,e=k(t?t.target:this.element).closest(this.options.items);e.length&amp;&amp;!e.data("ui-tooltip-id")&amp;&amp;(e.attr("title")&amp;&amp;e.data("ui-tooltip-title",e.attr("title")),e.data("ui-tooltip-open",!0),t&amp;&amp;"mouseover"===t.type&amp;&amp;e.parents().each(function(){var t,e=k(this);e.data("ui-tooltip-open")&amp;&amp;((t=k.Event("blur")).target=t.currentTarget=this,i.close(t,!0)),e.attr("title")&amp;&amp;(e.uniqueId(),i.parents[this.id]={element:this,title:e.attr("title")},e.attr("title",""))}),this._registerCloseHandlers(t,e),this._updateContent(e,t))},_updateContent:function(e,i){var t,n=this.options.content,s=this,o=i?i.type:null;if("string"==typeof n||n.nodeType||n.jquery)return this._open(i,e,n);(t=n.call(e[0],function(t){s._delay(function(){e.data("ui-tooltip-open")&amp;&amp;(i&amp;&amp;(i.type=o),this._open(i,e,t))})}))&amp;&amp;this._open(i,e,t)},_open:function(t,e,i){var n,s,o,r,a=k.extend({},this.options.position);function l(t){a.of=t,s.is(":hidden")||s.position(a)}i&amp;&amp;((n=this._find(e))?n.tooltip.find(".ui-tooltip-content").html(i):(e.is("[title]")&amp;&amp;(t&amp;&amp;"mouseover"===t.type?e.attr("title",""):e.removeAttr("title")),n=this._tooltip(e),s=n.tooltip,this._addDescribedBy(e,s.attr("id")),s.find(".ui-tooltip-content").html(i),this.liveRegion.children().hide(),(r=k("&lt;div&gt;").html(s.find(".ui-tooltip-content").html())).removeAttr("name").find("[name]").removeAttr("name"),r.removeAttr("id").find("[id]").removeAttr("id"),r.appendTo(this.liveRegion),this.options.track&amp;&amp;t&amp;&amp;/^mouse/.test(t.type)?(this._on(this.document,{mousemove:l}),l(t)):s.position(k.extend({of:e},this.options.position)),s.hide(),this._show(s,this.options.show),this.options.track&amp;&amp;this.options.show&amp;&amp;this.options.show.delay&amp;&amp;(o=this.delayedShow=setInterval(function(){s.is(":visible")&amp;&amp;(l(a.of),clearInterval(o))},k.fx.interval)),this._trigger("open",t,{tooltip:s})))},_registerCloseHandlers:function(t,i){var e={keyup:function(t){var e;t.keyCode===k.ui.keyCode.ESCAPE&amp;&amp;((e=k.Event(t)).currentTarget=i[0],this.close(e,!0))}};i[0]!==this.element[0]&amp;&amp;(e.remove=function(){this._removeTooltip(this._find(i).tooltip)}),t&amp;&amp;"mouseover"!==t.type||(e.mouseleave="close"),t&amp;&amp;"focusin"!==t.type||(e.focusout="close"),this._on(!0,i,e)},close:function(t){var e,i=this,n=k(t?t.currentTarget:this.element),s=this._find(n);s?(e=s.tooltip,s.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&amp;&amp;!n.attr("title")&amp;&amp;n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),s.hiding=!0,e.stop(!0),this._hide(e,this.options.hide,function(){i._removeTooltip(k(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&amp;&amp;this._off(n,"remove"),this._off(this.document,"mousemove"),t&amp;&amp;"mouseleave"===t.type&amp;&amp;k.each(this.parents,function(t,e){k(e.element).attr("title",e.title),delete i.parents[t]}),s.closing=!0,this._trigger("close",t,{tooltip:e}),s.hiding||(s.closing=!1))):n.removeData("ui-tooltip-open")},_tooltip:function(t){var e=k("&lt;div&gt;").attr("role","tooltip"),i=k("&lt;div&gt;").appendTo(e),n=e.uniqueId().attr("id");return this._addClass(i,"ui-tooltip-content"),this._addClass(e,"ui-tooltip","ui-widget ui-widget-content"),e.appendTo(this._appendTo(t)),this.tooltips[n]={element:t,tooltip:e}},_find:function(t){var e=t.data("ui-tooltip-id");return e?this.tooltips[e]:null},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){var e=t.closest(".ui-front, dialog");return e.length||(e=this.document[0].body),e},_destroy:function(){var s=this;k.each(this.tooltips,function(t,e){var i=k.Event("blur"),n=e.element;i.target=i.currentTarget=n[0],s.close(i,!0),k("#"+t).remove(),n.data("ui-tooltip-title")&amp;&amp;(n.attr("title")||n.attr("title",n.data("ui-tooltip-title")),n.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),!1!==k.uiBackCompat&amp;&amp;k.widget("ui.tooltip",k.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&amp;&amp;t.tooltip.addClass(this.options.tooltipClass),t}});k.ui.tooltip}),function(){function i(){}var t=this,e=t._,n=Array.prototype,r=Object.prototype,s=Function.prototype,o=n.push,l=n.slice,c=r.toString,a=r.hasOwnProperty,h=Array.isArray,u=Object.keys,d=s.bind,p=Object.create,f=function(t){return t instanceof f?t:this instanceof f?void(this._wrapped=t):new f(t)};"undefined"!=typeof exports?("undefined"!=typeof module&amp;&amp;module.exports&amp;&amp;(exports=module.exports=f),exports._=f):t._=f,f.VERSION="1.8.3";var g=function(s,o,t){if(void 0===o)return s;switch(null==t?3:t){case 1:return function(t){return s.call(o,t)};case 2:return function(t,e){return s.call(o,t,e)};case 3:return function(t,e,i){return s.call(o,t,e,i)};case 4:return function(t,e,i,n){return s.call(o,t,e,i,n)}}return function(){return s.apply(o,arguments)}},m=function(t,e,i){return null==t?f.identity:f.isFunction(t)?g(t,e,i):f.isObject(t)?f.matcher(t):f.property(t)};f.iteratee=function(t,e){return m(t,e,1/0)};function v(l,h){return function(t){var e=arguments.length;if(e&lt;2||null==t)return t;for(var i=1;i&lt;e;i++)for(var n=arguments[i],s=l(n),o=s.length,r=0;r&lt;o;r++){var a=s[r];h&amp;&amp;void 0!==t[a]||(t[a]=n[a])}return t}}function y(t){if(!f.isObject(t))return{};if(p)return p(t);i.prototype=t;var e=new i;return i.prototype=null,e}function _(e){return function(t){return null==t?void 0:t[e]}}var b=Math.pow(2,53)-1,w=_("length"),x=function(t){var e=w(t);return"number"==typeof e&amp;&amp;0&lt;=e&amp;&amp;e&lt;=b};function k(a){return function(t,e,i,n){e=g(e,n,4);var s=!x(t)&amp;&amp;f.keys(t),o=(s||t).length,r=0&lt;a?0:o-1;return arguments.length&lt;3&amp;&amp;(i=t[s?s[r]:r],r+=a),function(t,e,i,n,s,o){for(;0&lt;=s&amp;&amp;s&lt;o;s+=a){var r=n?n[s]:s;i=e(i,t[r],r,t)}return i}(t,e,i,s,r,o)}}f.each=f.forEach=function(t,e,i){if(e=g(e,i),x(t))for(s=0,o=t.length;s&lt;o;s++)e(t[s],s,t);else for(var n=f.keys(t),s=0,o=n.length;s&lt;o;s++)e(t[n[s]],n[s],t);return t},f.map=f.collect=function(t,e,i){e=m(e,i);for(var n=!x(t)&amp;&amp;f.keys(t),s=(n||t).length,o=Array(s),r=0;r&lt;s;r++){var a=n?n[r]:r;o[r]=e(t[a],a,t)}return o},f.reduce=f.foldl=f.inject=k(1),f.reduceRight=f.foldr=k(-1),f.find=f.detect=function(t,e,i){var n=x(t)?f.findIndex(t,e,i):f.findKey(t,e,i);if(void 0!==n&amp;&amp;-1!==n)return t[n]},f.filter=f.select=function(t,n,e){var s=[];return n=m(n,e),f.each(t,function(t,e,i){n(t,e,i)&amp;&amp;s.push(t)}),s},f.reject=function(t,e,i){return f.filter(t,f.negate(m(e)),i)},f.every=f.all=function(t,e,i){e=m(e,i);for(var n=!x(t)&amp;&amp;f.keys(t),s=(n||t).length,o=0;o&lt;s;o++){var r=n?n[o]:o;if(!e(t[r],r,t))return!1}return!0},f.some=f.any=function(t,e,i){e=m(e,i);for(var n=!x(t)&amp;&amp;f.keys(t),s=(n||t).length,o=0;o&lt;s;o++){var r=n?n[o]:o;if(e(t[r],r,t))return!0}return!1},f.contains=f.includes=f.include=function(t,e,i,n){return x(t)||(t=f.values(t)),"number"==typeof i&amp;&amp;!n||(i=0),0&lt;=f.indexOf(t,e,i)},f.invoke=function(t,i){var n=l.call(arguments,2),s=f.isFunction(i);return f.map(t,function(t){var e=s?i:t[i];return null==e?e:e.apply(t,n)})},f.pluck=function(t,e){return f.map(t,f.property(e))},f.where=function(t,e){return f.filter(t,f.matcher(e))},f.findWhere=function(t,e){return f.find(t,f.matcher(e))},f.max=function(t,n,e){var i,s,o=-1/0,r=-1/0;if(null==n&amp;&amp;null!=t)for(var a=0,l=(t=x(t)?t:f.values(t)).length;a&lt;l;a++)i=t[a],o&lt;i&amp;&amp;(o=i);else n=m(n,e),f.each(t,function(t,e,i){s=n(t,e,i),(r&lt;s||s===-1/0&amp;&amp;o===-1/0)&amp;&amp;(o=t,r=s)});return o},f.min=function(t,n,e){var i,s,o=1/0,r=1/0;if(null==n&amp;&amp;null!=t)for(var a=0,l=(t=x(t)?t:f.values(t)).length;a&lt;l;a++)(i=t[a])&lt;o&amp;&amp;(o=i);else n=m(n,e),f.each(t,function(t,e,i){((s=n(t,e,i))&lt;r||s===1/0&amp;&amp;o===1/0)&amp;&amp;(o=t,r=s)});return o},f.shuffle=function(t){for(var e,i=x(t)?t:f.values(t),n=i.length,s=Array(n),o=0;o&lt;n;o++)(e=f.random(0,o))!==o&amp;&amp;(s[o]=s[e]),s[e]=i[o];return s},f.sample=function(t,e,i){return null==e||i?(x(t)||(t=f.values(t)),t[f.random(t.length-1)]):f.shuffle(t).slice(0,Math.max(0,e))},f.sortBy=function(t,n,e){return n=m(n,e),f.pluck(f.map(t,function(t,e,i){return{value:t,index:e,criteria:n(t,e,i)}}).sort(function(t,e){var i=t.criteria,n=e.criteria;if(i!==n){if(n&lt;i||void 0===i)return 1;if(i&lt;n||void 0===n)return-1}return t.index-e.index}),"value")};function D(r){return function(n,s,t){var o={};return s=m(s,t),f.each(n,function(t,e){var i=s(t,e,n);r(o,t,i)}),o}}f.groupBy=D(function(t,e,i){f.has(t,i)?t[i].push(e):t[i]=[e]}),f.indexBy=D(function(t,e,i){t[i]=e}),f.countBy=D(function(t,e,i){f.has(t,i)?t[i]++:t[i]=1}),f.toArray=function(t){return t?f.isArray(t)?l.call(t):x(t)?f.map(t,f.identity):f.values(t):[]},f.size=function(t){return null==t?0:x(t)?t.length:f.keys(t).length},f.partition=function(t,n,e){n=m(n,e);var s=[],o=[];return f.each(t,function(t,e,i){(n(t,e,i)?s:o).push(t)}),[s,o]},f.first=f.head=f.take=function(t,e,i){if(null!=t)return null==e||i?t[0]:f.initial(t,t.length-e)},f.initial=function(t,e,i){return l.call(t,0,Math.max(0,t.length-(null==e||i?1:e)))},f.last=function(t,e,i){if(null!=t)return null==e||i?t[t.length-1]:f.rest(t,Math.max(0,t.length-e))},f.rest=f.tail=f.drop=function(t,e,i){return l.call(t,null==e||i?1:e)},f.compact=function(t){return f.filter(t,f.identity)};var C=function(t,e,i,n){for(var s=[],o=0,r=n||0,a=w(t);r&lt;a;r++){var l=t[r];if(x(l)&amp;&amp;(f.isArray(l)||f.isArguments(l))){e||(l=C(l,e,i));var h=0,u=l.length;for(s.length+=u;h&lt;u;)s[o++]=l[h++]}else i||(s[o++]=l)}return s};function T(o){return function(t,e,i){e=m(e,i);for(var n=w(t),s=0&lt;o?0:n-1;0&lt;=s&amp;&amp;s&lt;n;s+=o)if(e(t[s],s,t))return s;return-1}}function S(o,r,a){return function(t,e,i){var n=0,s=w(t);if("number"==typeof i)0&lt;o?n=0&lt;=i?i:Math.max(i+s,n):s=0&lt;=i?Math.min(i+1,s):i+s+1;else if(a&amp;&amp;i&amp;&amp;s)return t[i=a(t,e)]===e?i:-1;if(e!=e)return 0&lt;=(i=r(l.call(t,n,s),f.isNaN))?i+n:-1;for(i=0&lt;o?n:s-1;0&lt;=i&amp;&amp;i&lt;s;i+=o)if(t[i]===e)return i;return-1}}f.flatten=function(t,e){return C(t,e,!1)},f.without=function(t){return f.difference(t,l.call(arguments,1))},f.uniq=f.unique=function(t,e,i,n){f.isBoolean(e)||(n=i,i=e,e=!1),null!=i&amp;&amp;(i=m(i,n));for(var s=[],o=[],r=0,a=w(t);r&lt;a;r++){var l=t[r],h=i?i(l,r,t):l;e?(r&amp;&amp;o===h||s.push(l),o=h):i?f.contains(o,h)||(o.push(h),s.push(l)):f.contains(s,l)||s.push(l)}return s},f.union=function(){return f.uniq(C(arguments,!0,!0))},f.intersection=function(t){for(var e=[],i=arguments.length,n=0,s=w(t);n&lt;s;n++){var o=t[n];if(!f.contains(e,o)){for(var r=1;r&lt;i&amp;&amp;f.contains(arguments[r],o);r++);r===i&amp;&amp;e.push(o)}}return e},f.difference=function(t){var e=C(arguments,!0,!0,1);return f.filter(t,function(t){return!f.contains(e,t)})},f.zip=function(){return f.unzip(arguments)},f.unzip=function(t){for(var e=t&amp;&amp;f.max(t,w).length||0,i=Array(e),n=0;n&lt;e;n++)i[n]=f.pluck(t,n);return i},f.object=function(t,e){for(var i={},n=0,s=w(t);n&lt;s;n++)e?i[t[n]]=e[n]:i[t[n][0]]=t[n][1];return i},f.findIndex=T(1),f.findLastIndex=T(-1),f.sortedIndex=function(t,e,i,n){for(var s=(i=m(i,n,1))(e),o=0,r=w(t);o&lt;r;){var a=Math.floor((o+r)/2);i(t[a])&lt;s?o=a+1:r=a}return o},f.indexOf=S(1,f.findIndex,f.sortedIndex),f.lastIndexOf=S(-1,f.findLastIndex),f.range=function(t,e,i){null==e&amp;&amp;(e=t||0,t=0),i=i||1;for(var n=Math.max(Math.ceil((e-t)/i),0),s=Array(n),o=0;o&lt;n;o++,t+=i)s[o]=t;return s};function M(t,e,i,n,s){if(!(n instanceof e))return t.apply(i,s);var o=y(t.prototype),r=t.apply(o,s);return f.isObject(r)?r:o}f.bind=function(t,e){if(d&amp;&amp;t.bind===d)return d.apply(t,l.call(arguments,1));if(!f.isFunction(t))throw new TypeError("Bind must be called on a function");var i=l.call(arguments,2),n=function(){return M(t,n,e,this,i.concat(l.call(arguments)))};return n},f.partial=function(s){var o=l.call(arguments,1),r=function(){for(var t=0,e=o.length,i=Array(e),n=0;n&lt;e;n++)i[n]=o[n]===f?arguments[t++]:o[n];for(;t&lt;arguments.length;)i.push(arguments[t++]);return M(s,r,this,this,i)};return r},f.bindAll=function(t){var e,i,n=arguments.length;if(n&lt;=1)throw new Error("bindAll must be passed function names");for(e=1;e&lt;n;e++)t[i=arguments[e]]=f.bind(t[i],t);return t},f.memoize=function(n,s){var o=function(t){var e=o.cache,i=""+(s?s.apply(this,arguments):t);return f.has(e,i)||(e[i]=n.apply(this,arguments)),e[i]};return o.cache={},o},f.delay=function(t,e){var i=l.call(arguments,2);return setTimeout(function(){return t.apply(null,i)},e)},f.defer=f.partial(f.delay,f,1),f.throttle=function(i,n,s){var o,r,a,l=null,h=0;s=s||{};function u(){h=!1===s.leading?0:f.now(),l=null,a=i.apply(o,r),l||(o=r=null)}return function(){var t=f.now();h||!1!==s.leading||(h=t);var e=n-(t-h);return o=this,r=arguments,e&lt;=0||n&lt;e?(l&amp;&amp;(clearTimeout(l),l=null),h=t,a=i.apply(o,r),l||(o=r=null)):l||!1===s.trailing||(l=setTimeout(u,e)),a}},f.debounce=function(e,i,n){var s,o,r,a,l,h=function(){var t=f.now()-a;t&lt;i&amp;&amp;0&lt;=t?s=setTimeout(h,i-t):(s=null,n||(l=e.apply(r,o),s||(r=o=null)))};return function(){r=this,o=arguments,a=f.now();var t=n&amp;&amp;!s;return s=s||setTimeout(h,i),t&amp;&amp;(l=e.apply(r,o),r=o=null),l}},f.wrap=function(t,e){return f.partial(e,t)},f.negate=function(t){return function(){return!t.apply(this,arguments)}},f.compose=function(){var i=arguments,n=i.length-1;return function(){for(var t=n,e=i[n].apply(this,arguments);t--;)e=i[t].call(this,e);return e}},f.after=function(t,e){return function(){if(--t&lt;1)return e.apply(this,arguments)}},f.before=function(t,e){var i;return function(){return 0&lt;--t&amp;&amp;(i=e.apply(this,arguments)),t&lt;=1&amp;&amp;(e=null),i}},f.once=f.partial(f.before,2);var I=!{toString:null}.propertyIsEnumerable("toString"),P=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];function A(t,e){var i=P.length,n=t.constructor,s=f.isFunction(n)&amp;&amp;n.prototype||r,o="constructor";for(f.has(t,o)&amp;&amp;!f.contains(e,o)&amp;&amp;e.push(o);i--;)(o=P[i])in t&amp;&amp;t[o]!==s[o]&amp;&amp;!f.contains(e,o)&amp;&amp;e.push(o)}f.keys=function(t){if(!f.isObject(t))return[];if(u)return u(t);var e=[];for(var i in t)f.has(t,i)&amp;&amp;e.push(i);return I&amp;&amp;A(t,e),e},f.allKeys=function(t){if(!f.isObject(t))return[];var e=[];for(var i in t)e.push(i);return I&amp;&amp;A(t,e),e},f.values=function(t){for(var e=f.keys(t),i=e.length,n=Array(i),s=0;s&lt;i;s++)n[s]=t[e[s]];return n},f.mapObject=function(t,e,i){e=m(e,i);for(var n,s=f.keys(t),o=s.length,r={},a=0;a&lt;o;a++)r[n=s[a]]=e(t[n],n,t);return r},f.pairs=function(t){for(var e=f.keys(t),i=e.length,n=Array(i),s=0;s&lt;i;s++)n[s]=[e[s],t[e[s]]];return n},f.invert=function(t){for(var e={},i=f.keys(t),n=0,s=i.length;n&lt;s;n++)e[t[i[n]]]=i[n];return e},f.functions=f.methods=function(t){var e=[];for(var i in t)f.isFunction(t[i])&amp;&amp;e.push(i);return e.sort()},f.extend=v(f.allKeys),f.extendOwn=f.assign=v(f.keys),f.findKey=function(t,e,i){e=m(e,i);for(var n,s=f.keys(t),o=0,r=s.length;o&lt;r;o++)if(e(t[n=s[o]],n,t))return n},f.pick=function(t,e,i){var n,s,o={},r=t;if(null==r)return o;f.isFunction(e)?(s=f.allKeys(r),n=g(e,i)):(s=C(arguments,!1,!1,1),n=function(t,e,i){return e in i},r=Object(r));for(var a=0,l=s.length;a&lt;l;a++){var h=s[a],u=r[h];n(u,h,r)&amp;&amp;(o[h]=u)}return o},f.omit=function(t,e,i){var n;return e=f.isFunction(e)?f.negate(e):(n=f.map(C(arguments,!1,!1,1),String),function(t,e){return!f.contains(n,e)}),f.pick(t,e,i)},f.defaults=v(f.allKeys,!0),f.create=function(t,e){var i=y(t);return e&amp;&amp;f.extendOwn(i,e),i},f.clone=function(t){return f.isObject(t)?f.isArray(t)?t.slice():f.extend({},t):t},f.tap=function(t,e){return e(t),t},f.isMatch=function(t,e){var i=f.keys(e),n=i.length;if(null==t)return!n;for(var s=Object(t),o=0;o&lt;n;o++){var r=i[o];if(e[r]!==s[r]||!(r in s))return!1}return!0};var E=function(t,e,i,n){if(t===e)return 0!==t||1/t==1/e;if(null==t||null==e)return t===e;t instanceof f&amp;&amp;(t=t._wrapped),e instanceof f&amp;&amp;(e=e._wrapped);var s=c.call(t);if(s!==c.call(e))return!1;switch(s){case"[object RegExp]":case"[object String]":return""+t==""+e;case"[object Number]":return+t!=+t?+e!=+e:0==+t?1/t==1/e:+t==+e;case"[object Date]":case"[object Boolean]":return+t==+e}var o="[object Array]"===s;if(!o){if("object"!=typeof t||"object"!=typeof e)return!1;var r=t.constructor,a=e.constructor;if(r!==a&amp;&amp;!(f.isFunction(r)&amp;&amp;r instanceof r&amp;&amp;f.isFunction(a)&amp;&amp;a instanceof a)&amp;&amp;"constructor"in t&amp;&amp;"constructor"in e)return!1}n=n||[];for(var l=(i=i||[]).length;l--;)if(i[l]===t)return n[l]===e;if(i.push(t),n.push(e),o){if((l=t.length)!==e.length)return!1;for(;l--;)if(!E(t[l],e[l],i,n))return!1}else{var h,u=f.keys(t),l=u.length;if(f.keys(e).length!==l)return!1;for(;l--;)if(h=u[l],!f.has(e,h)||!E(t[h],e[h],i,n))return!1}return i.pop(),n.pop(),!0};f.isEqual=function(t,e){return E(t,e)},f.isEmpty=function(t){return null==t||(x(t)&amp;&amp;(f.isArray(t)||f.isString(t)||f.isArguments(t))?0===t.length:0===f.keys(t).length)},f.isElement=function(t){return!(!t||1!==t.nodeType)},f.isArray=h||function(t){return"[object Array]"===c.call(t)},f.isObject=function(t){var e=typeof t;return"function"==e||"object"==e&amp;&amp;!!t},f.each(["Arguments","Function","String","Number","Date","RegExp","Error"],function(e){f["is"+e]=function(t){return c.call(t)==="[object "+e+"]"}}),f.isArguments(arguments)||(f.isArguments=function(t){return f.has(t,"callee")}),"function"!=typeof/./&amp;&amp;"object"!=typeof Int8Array&amp;&amp;(f.isFunction=function(t){return"function"==typeof t||!1}),f.isFinite=function(t){return isFinite(t)&amp;&amp;!isNaN(parseFloat(t))},f.isNaN=function(t){return f.isNumber(t)&amp;&amp;t!==+t},f.isBoolean=function(t){return!0===t||!1===t||"[object Boolean]"===c.call(t)},f.isNull=function(t){return null===t},f.isUndefined=function(t){return void 0===t},f.has=function(t,e){return null!=t&amp;&amp;a.call(t,e)},f.noConflict=function(){return t._=e,this},f.identity=function(t){return t},f.constant=function(t){return function(){return t}},f.noop=function(){},f.property=_,f.propertyOf=function(e){return null==e?function(){}:function(t){return e[t]}},f.matcher=f.matches=function(e){return e=f.extendOwn({},e),function(t){return f.isMatch(t,e)}},f.times=function(t,e,i){var n=Array(Math.max(0,t));e=g(e,i,1);for(var s=0;s&lt;t;s++)n[s]=e(s);return n},f.random=function(t,e){return null==e&amp;&amp;(e=t,t=0),t+Math.floor(Math.random()*(e-t+1))},f.now=Date.now||function(){return(new Date).getTime()};function N(e){function i(t){return e[t]}var t="(?:"+f.keys(e).join("|")+")",n=RegExp(t),s=RegExp(t,"g");return function(t){return t=null==t?"":""+t,n.test(t)?t.replace(s,i):t}}var H={"&amp;":"&amp;amp;","&lt;":"&amp;lt;","&gt;":"&amp;gt;",'"':"&amp;quot;","'":"&amp;#x27;","`":"&amp;#x60;"},O=f.invert(H);f.escape=N(H),f.unescape=N(O),f.result=function(t,e,i){var n=null==t?void 0:t[e];return void 0===n&amp;&amp;(n=i),f.isFunction(n)?n.call(t):n};var z=0;f.uniqueId=function(t){var e=++z+"";return t?t+e:e},f.templateSettings={evaluate:/&lt;%([\s\S]+?)%&gt;/g,interpolate:/&lt;%=([\s\S]+?)%&gt;/g,escape:/&lt;%-([\s\S]+?)%&gt;/g};function W(t){return"\\"+j[t]}var L=/(.)^/,j={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},F=/\\|'|\r|\n|\u2028|\u2029/g;f.template=function(o,t,e){!t&amp;&amp;e&amp;&amp;(t=e),t=f.defaults({},t,f.templateSettings);var i=RegExp([(t.escape||L).source,(t.interpolate||L).source,(t.evaluate||L).source].join("|")+"|$","g"),r=0,a="__p+='";o.replace(i,function(t,e,i,n,s){return a+=o.slice(r,s).replace(F,W),r=s+t.length,e?a+="'+\n((__t=("+e+"))==null?'':_.escape(__t))+\n'":i?a+="'+\n((__t=("+i+"))==null?'':__t)+\n'":n&amp;&amp;(a+="';\n"+n+"\n__p+='"),t}),a+="';\n",t.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{var n=new Function(t.variable||"obj","_",a)}catch(t){throw t.source=a,t}function s(t){return n.call(this,t,f)}var l=t.variable||"obj";return s.source="function("+l+"){\n"+a+"}",s},f.chain=function(t){var e=f(t);return e._chain=!0,e};function R(t,e){return t._chain?f(e).chain():e}f.mixin=function(i){f.each(f.functions(i),function(t){var e=f[t]=i[t];f.prototype[t]=function(){var t=[this._wrapped];return o.apply(t,arguments),R(this,e.apply(f,t))}})},f.mixin(f),f.each(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var i=n[e];f.prototype[e]=function(){var t=this._wrapped;return i.apply(t,arguments),"shift"!==e&amp;&amp;"splice"!==e||0!==t.length||delete t[0],R(this,t)}}),f.each(["concat","join","slice"],function(t){var e=n[t];f.prototype[t]=function(){return R(this,e.apply(this._wrapped,arguments))}}),f.prototype.value=function(){return this._wrapped},f.prototype.valueOf=f.prototype.toJSON=f.prototype.value,f.prototype.toString=function(){return""+this._wrapped},"function"==typeof define&amp;&amp;define.amd&amp;&amp;define("underscore",[],function(){return f})}.call(this),function(){var t=this,e=t.Backbone,i=[],s=i.slice,a="undefined"!=typeof exports?exports:t.Backbone={};a.VERSION="1.1.0";var x=t._;x||"undefined"==typeof require||(x=require("underscore")),a.$=t.jQuery||t.Zepto||t.ender||t.$,a.noConflict=function(){return t.Backbone=e,this},a.emulateHTTP=!1,a.emulateJSON=!1;var n=a.Events={on:function(t,e,i){return c(this,"on",t,[e,i])&amp;&amp;e&amp;&amp;(this._events||(this._events={}),(this._events[t]||(this._events[t]=[])).push({callback:e,context:i,ctx:i||this})),this},once:function(t,e,i){if(!c(this,"once",t,[e,i])||!e)return this;var n=this,s=x.once(function(){n.off(t,s),e.apply(this,arguments)});return s._callback=e,this.on(t,s,i)},off:function(t,e,i){var n,s,o,r,a,l,h,u;if(!this._events||!c(this,"off",t,[e,i]))return this;if(!t&amp;&amp;!e&amp;&amp;!i)return this._events={},this;for(a=0,l=(r=t?[t]:x.keys(this._events)).length;a&lt;l;a++)if(t=r[a],o=this._events[t]){if(this._events[t]=n=[],e||i)for(h=0,u=o.length;h&lt;u;h++)s=o[h],(e&amp;&amp;e!==s.callback&amp;&amp;e!==s.callback._callback||i&amp;&amp;i!==s.context)&amp;&amp;n.push(s);n.length||delete this._events[t]}return this},trigger:function(t){if(!this._events)return this;var e=s.call(arguments,1);if(!c(this,"trigger",t,e))return this;var i=this._events[t],n=this._events.all;return i&amp;&amp;o(i,e),n&amp;&amp;o(n,arguments),this},stopListening:function(t,e,i){var n=this._listeningTo;if(!n)return this;var s=!e&amp;&amp;!i;for(var o in i||"object"!=typeof e||(i=this),t&amp;&amp;((n={})[t._listenId]=t),n)(t=n[o]).off(e,i,this),(s||x.isEmpty(t._events))&amp;&amp;delete this._listeningTo[o];return this}},l=/\s+/,c=function(t,e,i,n){if(!i)return!0;if("object"==typeof i){for(var s in i)t[e].apply(t,[s,i[s]].concat(n));return!1}if(l.test(i)){for(var o=i.split(l),r=0,a=o.length;r&lt;a;r++)t[e].apply(t,[o[r]].concat(n));return!1}return!0},o=function(t,e){var i,n=-1,s=t.length,o=e[0],r=e[1],a=e[2];switch(e.length){case 0:for(;++n&lt;s;)(i=t[n]).callback.call(i.ctx);return;case 1:for(;++n&lt;s;)(i=t[n]).callback.call(i.ctx,o);return;case 2:for(;++n&lt;s;)(i=t[n]).callback.call(i.ctx,o,r);return;case 3:for(;++n&lt;s;)(i=t[n]).callback.call(i.ctx,o,r,a);return;default:for(;++n&lt;s;)(i=t[n]).callback.apply(i.ctx,e)}};x.each({listenTo:"on",listenToOnce:"once"},function(s,t){n[t]=function(t,e,i){var n=this._listeningTo||(this._listeningTo={});return i||"object"!=typeof e||(i=this),(n[t._listenId||(t._listenId=x.uniqueId("l"))]=t)[s](e,i,this),this}}),n.bind=n.on,n.unbind=n.off,x.extend(a,n);var k=a.Model=function(t,e){var i=t||{};e=e||{},this.cid=x.uniqueId("c"),this.attributes={},e.collection&amp;&amp;(this.collection=e.collection),e.parse&amp;&amp;(i=this.parse(i,e)||{}),i=x.defaults({},i,x.result(this,"defaults")),this.set(i,e),this.changed={},this.initialize.apply(this,arguments)};x.extend(k.prototype,n,{changed:null,validationError:null,idAttribute:"id",initialize:function(){},toJSON:function(t){return x.clone(this.attributes)},sync:function(){return a.sync.apply(this,arguments)},get:function(t){return this.attributes[t]},escape:function(t){return x.escape(this.get(t))},has:function(t){return null!=this.get(t)},set:function(t,e,i){var n,s,o,r,a,l,h,u;if(null==t)return this;if("object"==typeof t?(s=t,i=e):(s={})[t]=e,i=i||{},!this._validate(s,i))return!1;for(n in o=i.unset,a=i.silent,r=[],l=this._changing,this._changing=!0,l||(this._previousAttributes=x.clone(this.attributes),this.changed={}),u=this.attributes,h=this._previousAttributes,this.idAttribute in s&amp;&amp;(this.id=s[this.idAttribute]),s)e=s[n],x.isEqual(u[n],e)||r.push(n),x.isEqual(h[n],e)?delete this.changed[n]:this.changed[n]=e,o?delete u[n]:u[n]=e;if(!a){r.length&amp;&amp;(this._pending=!0);for(var c=0,d=r.length;c&lt;d;c++)this.trigger("change:"+r[c],this,u[r[c]],i)}if(l)return this;if(!a)for(;this._pending;)this._pending=!1,this.trigger("change",this,i);return this._pending=!1,this._changing=!1,this},unset:function(t,e){return this.set(t,void 0,x.extend({},e,{unset:!0}))},clear:function(t){var e={};for(var i in this.attributes)e[i]=void 0;return this.set(e,x.extend({},t,{unset:!0}))},hasChanged:function(t){return null==t?!x.isEmpty(this.changed):x.has(this.changed,t)},changedAttributes:function(t){if(!t)return!!this.hasChanged()&amp;&amp;x.clone(this.changed);var e,i=!1,n=this._changing?this._previousAttributes:this.attributes;for(var s in t)x.isEqual(n[s],e=t[s])||((i=i||{})[s]=e);return i},previous:function(t){return null!=t&amp;&amp;this._previousAttributes?this._previousAttributes[t]:null},previousAttributes:function(){return x.clone(this._previousAttributes)},fetch:function(e){void 0===(e=e?x.clone(e):{}).parse&amp;&amp;(e.parse=!0);var i=this,n=e.success;return e.success=function(t){if(!i.set(i.parse(t,e),e))return!1;n&amp;&amp;n(i,t,e),i.trigger("sync",i,t,e)},A(this,e),this.sync("read",this,e)},save:function(t,e,i){var n,s,o,r=this.attributes;if(null==t||"object"==typeof t?(n=t,i=e):(n={})[t]=e,i=x.extend({validate:!0},i),n&amp;&amp;!i.wait){if(!this.set(n,i))return!1}else if(!this._validate(n,i))return!1;n&amp;&amp;i.wait&amp;&amp;(this.attributes=x.extend({},r,n)),void 0===i.parse&amp;&amp;(i.parse=!0);var a=this,l=i.success;return i.success=function(t){a.attributes=r;var e=a.parse(t,i);if(i.wait&amp;&amp;(e=x.extend(n||{},e)),x.isObject(e)&amp;&amp;!a.set(e,i))return!1;l&amp;&amp;l(a,t,i),a.trigger("sync",a,t,i)},A(this,i),"patch"==(s=this.isNew()?"create":i.patch?"patch":"update")&amp;&amp;(i.attrs=n),o=this.sync(s,this,i),n&amp;&amp;i.wait&amp;&amp;(this.attributes=r),o},destroy:function(e){e=e?x.clone(e):{};function i(){n.trigger("destroy",n,n.collection,e)}var n=this,s=e.success;if(e.success=function(t){(e.wait||n.isNew())&amp;&amp;i(),s&amp;&amp;s(n,t,e),n.isNew()||n.trigger("sync",n,t,e)},this.isNew())return e.success(),!1;A(this,e);var t=this.sync("delete",this,e);return e.wait||i(),t},url:function(){var t=x.result(this,"urlRoot")||x.result(this.collection,"url")||P();return this.isNew()?t:t+("/"===t.charAt(t.length-1)?"":"/")+encodeURIComponent(this.id)},parse:function(t,e){return t},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return null==this.id},isValid:function(t){return this._validate({},x.extend(t||{},{validate:!0}))},_validate:function(t,e){if(!e.validate||!this.validate)return!0;t=x.extend({},this.attributes,t);var i=this.validationError=this.validate(t,e)||null;return!i||(this.trigger("invalid",this,i,x.extend(e,{validationError:i})),!1)}});x.each(["keys","values","pairs","invert","pick","omit"],function(e){k.prototype[e]=function(){var t=s.call(arguments);return t.unshift(this.attributes),x[e].apply(x,t)}});var r=a.Collection=function(t,e){(e=e||{}).model&amp;&amp;(this.model=e.model),void 0!==e.comparator&amp;&amp;(this.comparator=e.comparator),this._reset(),this.initialize.apply(this,arguments),t&amp;&amp;this.reset(t,x.extend({silent:!0},e))},D={add:!0,remove:!0,merge:!0},h={add:!0,remove:!1};x.extend(r.prototype,n,{model:k,initialize:function(){},toJSON:function(e){return this.map(function(t){return t.toJSON(e)})},sync:function(){return a.sync.apply(this,arguments)},add:function(t,e){return this.set(t,x.extend({merge:!1},e,h))},remove:function(t,e){var i,n,s,o,r=!x.isArray(t);for(e=e||{},i=0,n=(t=r?[t]:x.clone(t)).length;i&lt;n;i++)(o=t[i]=this.get(t[i]))&amp;&amp;(delete this._byId[o.id],delete this._byId[o.cid],s=this.indexOf(o),this.models.splice(s,1),this.length--,e.silent||(e.index=s,o.trigger("remove",o,this,e)),this._removeReference(o));return r?t[0]:t},set:function(t,e){(e=x.defaults({},e,D)).parse&amp;&amp;(t=this.parse(t,e));var i,n,s,o,r,a=!x.isArray(t);t=a?t?[t]:[]:x.clone(t);var l=e.at,h=this.model,u=this.comparator&amp;&amp;null==l&amp;&amp;!1!==e.sort,c=x.isString(this.comparator)?this.comparator:null,d=[],p=[],f={},g=e.add,m=e.merge,v=e.remove,y=!(u||!g||!v)&amp;&amp;[];for(b=0,w=t.length;b&lt;w;b++){if(i=(s=t[b])instanceof k?n=s:s[h.prototype.idAttribute],o=this.get(i))v&amp;&amp;(f[o.cid]=!0),m&amp;&amp;(s=s===n?n.attributes:s,e.parse&amp;&amp;(s=o.parse(s,e)),o.set(s,e),u&amp;&amp;!r&amp;&amp;o.hasChanged(c)&amp;&amp;(r=!0)),t[b]=o;else if(g){if(!(n=t[b]=this._prepareModel(s,e)))continue;d.push(n),n.on("all",this._onModelEvent,this),null!=(this._byId[n.cid]=n).id&amp;&amp;(this._byId[n.id]=n)}y&amp;&amp;y.push(o||n)}if(v){for(b=0,w=this.length;b&lt;w;++b)f[(n=this.models[b]).cid]||p.push(n);p.length&amp;&amp;this.remove(p,e)}if(d.length||y&amp;&amp;y.length)if(u&amp;&amp;(r=!0),this.length+=d.length,null!=l)for(b=0,w=d.length;b&lt;w;b++)this.models.splice(l+b,0,d[b]);else{y&amp;&amp;(this.models.length=0);for(var _=y||d,b=0,w=_.length;b&lt;w;b++)this.models.push(_[b])}if(r&amp;&amp;this.sort({silent:!0}),!e.silent){for(b=0,w=d.length;b&lt;w;b++)(n=d[b]).trigger("add",n,this,e);(r||y&amp;&amp;y.length)&amp;&amp;this.trigger("sort",this,e)}return a?t[0]:t},reset:function(t,e){e=e||{};for(var i=0,n=this.models.length;i&lt;n;i++)this._removeReference(this.models[i]);return e.previousModels=this.models,this._reset(),t=this.add(t,x.extend({silent:!0},e)),e.silent||this.trigger("reset",this,e),t},push:function(t,e){return this.add(t,x.extend({at:this.length},e))},pop:function(t){var e=this.at(this.length-1);return this.remove(e,t),e},unshift:function(t,e){return this.add(t,x.extend({at:0},e))},shift:function(t){var e=this.at(0);return this.remove(e,t),e},slice:function(){return s.apply(this.models,arguments)},get:function(t){if(null!=t)return this._byId[t.id]||this._byId[t.cid]||this._byId[t]},at:function(t){return this.models[t]},where:function(i,t){return x.isEmpty(i)?t?void 0:[]:this[t?"find":"filter"](function(t){for(var e in i)if(i[e]!==t.get(e))return!1;return!0})},findWhere:function(t){return this.where(t,!0)},sort:function(t){if(!this.comparator)throw new Error("Cannot sort a set without a comparator");return t=t||{},x.isString(this.comparator)||1===this.comparator.length?this.models=this.sortBy(this.comparator,this):this.models.sort(x.bind(this.comparator,this)),t.silent||this.trigger("sort",this,t),this},pluck:function(t){return x.invoke(this.models,"get",t)},fetch:function(i){void 0===(i=i?x.clone(i):{}).parse&amp;&amp;(i.parse=!0);var n=i.success,s=this;return i.success=function(t){var e=i.reset?"reset":"set";s[e](t,i),n&amp;&amp;n(s,t,i),s.trigger("sync",s,t,i)},A(this,i),this.sync("read",this,i)},create:function(t,e){if(e=e?x.clone(e):{},!(t=this._prepareModel(t,e)))return!1;e.wait||this.add(t,e);var n=this,s=e.success;return e.success=function(t,e,i){i.wait&amp;&amp;n.add(t,i),s&amp;&amp;s(t,e,i)},t.save(null,e),t},parse:function(t,e){return t},clone:function(){return new this.constructor(this.models)},_reset:function(){this.length=0,this.models=[],this._byId={}},_prepareModel:function(t,e){if(t instanceof k)return t.collection||(t.collection=this),t;var i=new(((e=e?x.clone(e):{}).collection=this).model)(t,e);return i.validationError?(this.trigger("invalid",this,i.validationError,e),!1):i},_removeReference:function(t){this===t.collection&amp;&amp;delete t.collection,t.off("all",this._onModelEvent,this)},_onModelEvent:function(t,e,i,n){("add"!==t&amp;&amp;"remove"!==t||i===this)&amp;&amp;("destroy"===t&amp;&amp;this.remove(e,n),e&amp;&amp;t==="change:"+e.idAttribute&amp;&amp;(delete this._byId[e.previous(e.idAttribute)],null!=e.id&amp;&amp;(this._byId[e.id]=e)),this.trigger.apply(this,arguments))}});x.each(["forEach","each","map","collect","reduce","foldl","inject","reduceRight","foldr","find","detect","filter","select","reject","every","all","some","any","include","contains","invoke","max","min","toArray","size","first","head","take","initial","rest","tail","drop","last","without","difference","indexOf","shuffle","lastIndexOf","isEmpty","chain"],function(e){r.prototype[e]=function(){var t=s.call(arguments);return t.unshift(this.models),x[e].apply(x,t)}});x.each(["groupBy","countBy","sortBy"],function(n){r.prototype[n]=function(e,t){var i=x.isFunction(e)?e:function(t){return t.get(e)};return x[n](this.models,i,t)}});var u=a.View=function(t){this.cid=x.uniqueId("view"),t=t||{},x.extend(this,x.pick(t,p)),this._ensureElement(),this.initialize.apply(this,arguments),this.delegateEvents()},d=/^(\S+)\s*(.*)$/,p=["model","collection","el","id","attributes","className","tagName","events"];x.extend(u.prototype,n,{tagName:"div",$:function(t){return this.$el.find(t)},initialize:function(){},render:function(){return this},remove:function(){return this.$el.remove(),this.stopListening(),this},setElement:function(t,e){return this.$el&amp;&amp;this.undelegateEvents(),this.$el=t instanceof a.$?t:a.$(t),this.el=this.$el[0],!1!==e&amp;&amp;this.delegateEvents(),this},delegateEvents:function(t){if(!(t=t||x.result(this,"events")))return this;for(var e in this.undelegateEvents(),t){var i,n,s,o=t[e];x.isFunction(o)||(o=this[t[e]]),o&amp;&amp;(n=(i=e.match(d))[1],s=i[2],o=x.bind(o,this),n+=".delegateEvents"+this.cid,""===s?this.$el.on(n,o):this.$el.on(n,s,o))}return this},undelegateEvents:function(){return this.$el.off(".delegateEvents"+this.cid),this},_ensureElement:function(){var t,e;this.el?this.setElement(x.result(this,"el"),!1):(t=x.extend({},x.result(this,"attributes")),this.id&amp;&amp;(t.id=x.result(this,"id")),this.className&amp;&amp;(t.class=x.result(this,"className")),e=a.$("&lt;"+x.result(this,"tagName")+"&gt;").attr(t),this.setElement(e,!1))}}),a.sync=function(t,e,i){var n=g[t];x.defaults(i=i||{},{emulateHTTP:a.emulateHTTP,emulateJSON:a.emulateJSON});var s,o={type:n,dataType:"json"};i.url||(o.url=x.result(e,"url")||P()),null!=i.data||!e||"create"!==t&amp;&amp;"update"!==t&amp;&amp;"patch"!==t||(o.contentType="application/json",o.data=JSON.stringify(i.attrs||e.toJSON(i))),i.emulateJSON&amp;&amp;(o.contentType="application/x-www-form-urlencoded",o.data=o.data?{model:o.data}:{}),!i.emulateHTTP||"PUT"!==n&amp;&amp;"DELETE"!==n&amp;&amp;"PATCH"!==n||(o.type="POST",i.emulateJSON&amp;&amp;(o.data._method=n),s=i.beforeSend,i.beforeSend=function(t){if(t.setRequestHeader("X-HTTP-Method-Override",n),s)return s.apply(this,arguments)}),"GET"===o.type||i.emulateJSON||(o.processData=!1),"PATCH"===o.type&amp;&amp;f&amp;&amp;(o.xhr=function(){return new ActiveXObject("Microsoft.XMLHTTP")});var r=i.xhr=a.ajax(x.extend(o,i));return e.trigger("request",e,r,i),r};var f=!("undefined"==typeof window||!window.ActiveXObject||window.XMLHttpRequest&amp;&amp;(new XMLHttpRequest).dispatchEvent),g={create:"POST",update:"PUT",patch:"PATCH",delete:"DELETE",read:"GET"};a.ajax=function(){return a.$.ajax.apply(a.$,arguments)};var m=a.Router=function(t){(t=t||{}).routes&amp;&amp;(this.routes=t.routes),this._bindRoutes(),this.initialize.apply(this,arguments)},v=/\((.*?)\)/g,y=/(\(\?)?:\w+/g,_=/\*\w+/g,b=/[\-{}\[\]+?.,\\\^$|#\s]/g;x.extend(m.prototype,n,{initialize:function(){},route:function(i,n,s){x.isRegExp(i)||(i=this._routeToRegExp(i)),x.isFunction(n)&amp;&amp;(s=n,n=""),s=s||this[n];var o=this;return a.history.route(i,function(t){var e=o._extractParameters(i,t);s&amp;&amp;s.apply(o,e),o.trigger.apply(o,["route:"+n].concat(e)),o.trigger("route",n,e),a.history.trigger("route",o,n,e)}),this},navigate:function(t,e){return a.history.navigate(t,e),this},_bindRoutes:function(){if(this.routes){this.routes=x.result(this,"routes");for(var t,e=x.keys(this.routes);null!=(t=e.pop());)this.route(t,this.routes[t])}},_routeToRegExp:function(t){return t=t.replace(b,"\\$&amp;").replace(v,"(?:$1)?").replace(y,function(t,e){return e?t:"([^/]+)"}).replace(_,"(.*?)"),new RegExp("^"+t+"$")},_extractParameters:function(t,e){var i=t.exec(e).slice(1);return x.map(i,function(t){return t?decodeURIComponent(t):null})}});var w=a.History=function(){this.handlers=[],x.bindAll(this,"checkUrl"),"undefined"!=typeof window&amp;&amp;(this.location=window.location,this.history=window.history)},C=/^[#\/]|\s+$/g,T=/^\/+|\/+$/g,S=/msie [\w.]+/,M=/\/$/,I=/[?#].*$/;w.started=!1,x.extend(w.prototype,n,{interval:50,getHash:function(t){var e=(t||this).location.href.match(/#(.*)$/);return e?e[1]:""},getFragment:function(t,e){var i;return null==t&amp;&amp;(this._hasPushState||!this._wantsHashChange||e?(t=this.location.pathname,i=this.root.replace(M,""),t.indexOf(i)||(t=t.slice(i.length))):t=this.getHash()),t.replace(C,"")},start:function(t){if(w.started)throw new Error("Backbone.history has already been started");w.started=!0,this.options=x.extend({root:"/"},this.options,t),this.root=this.options.root,this._wantsHashChange=!1!==this.options.hashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!!(this.options.pushState&amp;&amp;this.history&amp;&amp;this.history.pushState);var e=this.getFragment(),i=document.documentMode,n=S.exec(navigator.userAgent.toLowerCase())&amp;&amp;(!i||i&lt;=7);this.root=("/"+this.root+"/").replace(T,"/"),n&amp;&amp;this._wantsHashChange&amp;&amp;(this.iframe=a.$('&lt;iframe src="javascript:0" tabindex="-1" /&gt;').hide().appendTo("body")[0].contentWindow,this.navigate(e)),this._hasPushState?a.$(window).on("popstate",this.checkUrl):this._wantsHashChange&amp;&amp;"onhashchange"in window&amp;&amp;!n?a.$(window).on("hashchange",this.checkUrl):this._wantsHashChange&amp;&amp;(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),this.fragment=e;var s=this.location,o=s.pathname.replace(/[^\/]$/,"$&amp;/")===this.root;if(this._wantsHashChange&amp;&amp;this._wantsPushState){if(!this._hasPushState&amp;&amp;!o)return this.fragment=this.getFragment(null,!0),this.location.replace(this.root+this.location.search+"#"+this.fragment),!0;this._hasPushState&amp;&amp;o&amp;&amp;s.hash&amp;&amp;(this.fragment=this.getHash().replace(C,""),this.history.replaceState({},document.title,this.root+this.fragment+s.search))}if(!this.options.silent)return this.loadUrl()},stop:function(){a.$(window).off("popstate",this.checkUrl).off("hashchange",this.checkUrl),clearInterval(this._checkUrlInterval),w.started=!1},route:function(t,e){this.handlers.unshift({route:t,callback:e})},checkUrl:function(t){var e=this.getFragment();if(e===this.fragment&amp;&amp;this.iframe&amp;&amp;(e=this.getFragment(this.getHash(this.iframe))),e===this.fragment)return!1;this.iframe&amp;&amp;this.navigate(e),this.loadUrl()},loadUrl:function(e){return e=this.fragment=this.getFragment(e),x.any(this.handlers,function(t){if(t.route.test(e))return t.callback(e),!0})},navigate:function(t,e){if(!w.started)return!1;e&amp;&amp;!0!==e||(e={trigger:!!e});var i=this.root+(t=this.getFragment(t||""));if(t=t.replace(I,""),this.fragment!==t){if(""===(this.fragment=t)&amp;&amp;"/"!==i&amp;&amp;(i=i.slice(0,-1)),this._hasPushState)this.history[e.replace?"replaceState":"pushState"]({},document.title,i);else{if(!this._wantsHashChange)return this.location.assign(i);this._updateHash(this.location,t,e.replace),this.iframe&amp;&amp;t!==this.getFragment(this.getHash(this.iframe))&amp;&amp;(e.replace||this.iframe.document.open().close(),this._updateHash(this.iframe.location,t,e.replace))}return e.trigger?this.loadUrl(t):void 0}},_updateHash:function(t,e,i){var n;i?(n=t.href.replace(/(javascript:|#).*$/,""),t.replace(n+"#"+e)):t.hash="#"+e}}),a.history=new w;k.extend=r.extend=m.extend=u.extend=w.extend=function(t,e){var i=this,n=t&amp;&amp;x.has(t,"constructor")?t.constructor:function(){return i.apply(this,arguments)};x.extend(n,i,e);function s(){this.constructor=n}return s.prototype=i.prototype,n.prototype=new s,t&amp;&amp;x.extend(n.prototype,t),n.__super__=i.prototype,n};var P=function(){throw new Error('A "url" property or function must be specified')},A=function(e,i){var n=i.error;i.error=function(t){n&amp;&amp;n(e,t,i),e.trigger("error",e,t,i)}}}.call(this),function(t){var a=[].slice,u={};t.amplify={publish:function(t){if("string"!=typeof t)throw new Error("You must provide a valid topic to publish.");var e,i,n,s,o=a.call(arguments,1),r=0;if(!u[t])return!0;for(n=(e=u[t].slice()).length;r&lt;n&amp;&amp;!1!==(s=(i=e[r]).callback.apply(i.context,o));r++);return!1!==s},subscribe:function(t,e,i,n){if("string"!=typeof t)throw new Error("You must provide a valid topic to create a subscription.");3===arguments.length&amp;&amp;"number"==typeof i&amp;&amp;(n=i,i=e,e=null),2===arguments.length&amp;&amp;(i=e,e=null),n=n||10;for(var s,o=0,r=t.split(/\s/),a=r.length;o&lt;a;o++){t=r[o],s=!1,u[t]||(u[t]=[]);for(var l=u[t].length-1,h={callback:i,context:e,priority:n};0&lt;=l;l--)if(u[t][l].priority&lt;=n){u[t].splice(l+1,0,h),s=!0;break}s||u[t].unshift(h)}return i},unsubscribe:function(t,e,i){if("string"!=typeof t)throw new Error("You must provide a valid topic to remove a subscription.");if(2===arguments.length&amp;&amp;(i=e,e=null),u[t])for(var n=u[t].length,s=0;s&lt;n;s++)u[t][s].callback===i&amp;&amp;(e&amp;&amp;u[t][s].context!==e||(u[t].splice(s,1),s--,n--))}}}(this),function(t,d){var p=t.store=function(t,e,i){var n=p.type;return i&amp;&amp;i.type&amp;&amp;i.type in p.types&amp;&amp;(n=i.type),p.types[n](t,e,i||{})};p.types={},p.type=null,p.addType=function(n,t){p.type||(p.type=n),p.types[n]=t,p[n]=function(t,e,i){return(i=i||{}).type=n,p(t,e,i)}},p.error=function(){return"amplify.store quota exceeded"};var n,s,c=/^__amplify__/;function e(h,u){p.addType(h,function(e,t,i){var n,s,o,r,a=t,l=(new Date).getTime();if(!e){a={},r=[],o=0;try{for(e=u.length;e=u.key(o++);)c.test(e)&amp;&amp;((s=JSON.parse(u.getItem(e))).expires&amp;&amp;s.expires&lt;=l?r.push(e):a[e.replace(c,"")]=s.data);for(;e=r.pop();)u.removeItem(e)}catch(t){}return a}if(e="__amplify__"+e,t===d){if(!((s=(n=u.getItem(e))?JSON.parse(n):{expires:-1}).expires&amp;&amp;s.expires&lt;=l))return s.data;u.removeItem(e)}else if(null===t)u.removeItem(e);else{s=JSON.stringify({data:t,expires:i.expires?l+i.expires:null});try{u.setItem(e,s)}catch(t){p[h]();try{u.setItem(e,s)}catch(t){throw p.error()}}}return a})}for(var i in{localStorage:1,sessionStorage:1})try{window[i].setItem("__amplify__","x"),window[i].removeItem("__amplify__"),e(i,window[i])}catch(t){}if(!p.types.localStorage&amp;&amp;window.globalStorage)try{e("globalStorage",window.globalStorage[window.location.hostname]),"sessionStorage"===p.type&amp;&amp;(p.type="globalStorage")}catch(t){}function o(t){return t===d?d:JSON.parse(JSON.stringify(t))}!function(){if(!p.types.localStorage){var u=document.createElement("div"),c="amplify";u.style.display="none",document.getElementsByTagName("head")[0].appendChild(u);try{u.addBehavior("#default#userdata"),u.load(c)}catch(t){return u.parentNode.removeChild(u)}p.addType("userData",function(e,t,i){u.load(c);var n,s,o,r,a,l=t,h=(new Date).getTime();if(!e){for(l={},a=[],r=0;n=u.XMLDocument.documentElement.attributes[r++];)(s=JSON.parse(n.value)).expires&amp;&amp;s.expires&lt;=h?a.push(n.name):l[n.name]=s.data;for(;e=a.pop();)u.removeAttribute(e);return u.save(c),l}if(e=(e=e.replace(/[^\-._0-9A-Za-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u037f-\u1fff\u200c-\u200d\u203f\u2040\u2070-\u218f]/g,"-")).replace(/^-/,"_-"),t===d){if(!((s=(n=u.getAttribute(e))?JSON.parse(n):{expires:-1}).expires&amp;&amp;s.expires&lt;=h))return s.data;u.removeAttribute(e)}else null===t?u.removeAttribute(e):(o=u.getAttribute(e),s=JSON.stringify({data:t,expires:i.expires?h+i.expires:null}),u.setAttribute(e,s));try{u.save(c)}catch(t){null===o?u.removeAttribute(e):u.setAttribute(e,o),p.userData();try{u.setAttribute(e,s),u.save(c)}catch(t){throw null===o?u.removeAttribute(e):u.setAttribute(e,o),p.error()}}return l})}}(),n={},s={},p.addType("memory",function(t,e,i){return t?e===d?o(n[t]):(s[t]&amp;&amp;(clearTimeout(s[t]),delete s[t]),null===e?(delete n[t],null):(n[t]=e,i.expires&amp;&amp;(s[t]=setTimeout(function(){delete n[t],delete s[t]},i.expires)),e)):o(n)})}(this.amplify=this.amplify||{}),function(h){"use strict";function u(){}function c(i){var n=!1;return setTimeout(function(){n=!0},1),function(){var t=this,e=arguments;n?i.apply(t,e):setTimeout(function(){i.apply(t,e)},1)}}h.request=function(t,e,i){var n,s=t||{};"string"==typeof s&amp;&amp;(n=e,"[object Function]"==={}.toString.call(n)&amp;&amp;(i=e,e={}),s={resourceId:t,data:e||{},success:i});var o={abort:u},r=h.request.resources[s.resourceId],a=s.success||u,l=s.error||u;if(s.success=c(function(t,e){e=e||"success",h.publish("request.success",s,t,e),h.publish("request.complete",s,t,e),a(t,e)}),s.error=c(function(t,e){e=e||"error",h.publish("request.error",s,t,e),h.publish("request.complete",s,t,e),l(t,e)}),!r){if(!s.resourceId)throw"amplify.request: no resourceId provided";throw"amplify.request: unknown resourceId: "+s.resourceId}if(h.publish("request.before",s))return h.request.resources[s.resourceId](s,o),o;s.error(null,"abort")},h.request.types={},h.request.resources={},h.request.define=function(t,e,i){if("string"==typeof e){if(!(e in h.request.types))throw"amplify.request.define: unknown type: "+e;i.resourceId=t,h.request.resources[t]=h.request.types[e](i)}else h.request.resources[t]=e}}(amplify),function(h,u){"use strict";var c=["status","statusText","responseText","responseXML","readyState"],o=/\{([^\}]+)\}/g;h.request.types.ajax=function(l){return l=u.extend({type:"GET"},l),function(i,t){l.url;var n,e=t.abort,s=u.extend(!0,{},l,{data:i.data}),o=!1,r={readyState:0,setRequestHeader:function(t,e){return n.setRequestHeader(t,e)},getAllResponseHeaders:function(){return n.getAllResponseHeaders()},getResponseHeader:function(t){return n.getResponseHeader(t)},overrideMimeType:function(t){return n.overrideMimeType(t)},abort:function(){o=!0;try{n.abort()}catch(t){}a(null,"abort")},success:function(t,e){i.success(t,e)},error:function(t,e){i.error(t,e)}},a=function(t,e){u.each(c,function(t,e){try{r[e]=n[e]}catch(t){}}),/OK$/.test(r.statusText)&amp;&amp;(r.statusText="success"),void 0===t&amp;&amp;(t=null),o&amp;&amp;(e="abort"),/timeout|error|abort/.test(e)?r.error(t,e):r.success(t,e),a=u.noop};h.publish("request.ajax.preprocess",l,i,s,r),u.extend(s,{isJSONP:function(){return/jsonp/gi.test(this.dataType)},cacheURL:function(){if(!this.isJSONP())return this.url;var t="callback";this.hasOwnProperty("jsonp")&amp;&amp;(!1!==this.jsonp?t=this.jsonp:this.hasOwnProperty("jsonpCallback")&amp;&amp;(t=this.jsonpCallback));var e=new RegExp("&amp;?"+t+"=[^&amp;]*&amp;?","gi");return this.url.replace(e,"")},success:function(t,e){a(t,e)},error:function(t,e){a(null,e)},beforeSend:function(t,e){return n=t,s=e,(!l.beforeSend||l.beforeSend.call(this,r,s))&amp;&amp;h.publish("request.before.ajax",l,i,s,r)}}),s.cache&amp;&amp;s.isJSONP()&amp;&amp;u.extend(s,{cache:!0}),u.ajax(s),t.abort=function(){r.abort(),e.call(this)}}},h.subscribe("request.ajax.preprocess",function(t,e,i){var n=[],s=i.data;"string"!=typeof s&amp;&amp;(s=u.extend(!0,{},t.data,s),i.url=i.url.replace(o,function(t,e){if(e in s)return n.push(e),s[e]}),u.each(n,function(t,e){delete s[e]}),i.data=s)}),h.subscribe("request.ajax.preprocess",function(t,e,i){var n=i.data,s=t.dataMap;s&amp;&amp;"string"!=typeof n&amp;&amp;(u.isFunction(s)?i.data=s(n):(u.each(t.dataMap,function(t,e){t in n&amp;&amp;(n[e]=n[t],delete n[t])}),i.data=n))});var a,l=h.request.cache={_key:function(t,e,i){var n=(i=e+i).length,s=0;function o(){return i.charCodeAt(s++)&lt;&lt;24|i.charCodeAt(s++)&lt;&lt;16|i.charCodeAt(s++)&lt;&lt;8|i.charCodeAt(s++)&lt;&lt;0}for(var r=o();s&lt;n;)r^=o();return"request-"+t+"-"+r},_default:(a={},function(t,e,i,n){var s=l._key(e.resourceId,i.cacheURL(),i.data),o=t.cache;if(s in a)return n.success(a[s]),!1;var r=n.success;n.success=function(t){a[s]=t,"number"==typeof o&amp;&amp;setTimeout(function(){delete a[s]},o),r.apply(this,arguments)}})};h.store&amp;&amp;(u.each(h.store.types,function(a){l[a]=function(e,t,i,n){var s=l._key(t.resourceId,i.cacheURL(),i.data),o=h.store[a](s);if(o)return i.success(o),!1;var r=n.success;n.success=function(t){h.store[a](s,t,{expires:e.cache.expires}),r.apply(this,arguments)}}}),l.persist=l[h.store.type]),h.subscribe("request.before.ajax",function(t){var e=t.cache;if(e)return e=e.type||e,l[e in l?e:"_default"].apply(this,arguments)}),h.request.decoders={jsend:function(t,e,i,n,s){"success"===t.status?n(t.data):"fail"===t.status?s(t.data,"fail"):"error"===t.status?(delete t.status,s(t,"error")):s(null,"error")}},h.subscribe("request.before.ajax",function(t,e,i,n){var s=n.success,o=n.error,r=u.isFunction(t.decoder)?t.decoder:t.decoder in h.request.decoders?h.request.decoders[t.decoder]:h.request.decoders._default;function a(t,e){s(t,e)}function l(t,e){o(t,e)}r&amp;&amp;(n.success=function(t,e){r(t,e,n,a,l)},n.error=function(t,e){r(t,e,n,a,l)})})}(amplify,jQuery),Date.CultureInfo={name:"en-US",englishName:"English (United States)",nativeName:"English (United States)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"mdy",formatPatterns:{shortDate:"M/d/yyyy",longDate:"dddd, MMMM dd, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, MMMM dd, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\+|after|from)/i,subtract:/^(\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\.?m?\.?|p\.?m?\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\s*(\+|\-)\s*\d\d\d\d?)|gmt)/i,ordinalSuffix:/^\s*(st|nd|rd|th)/i,timeContext:/^\s*(\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}},Date.getMonthNumberFromName=function(t){for(var e=Date.CultureInfo.monthNames,i=Date.CultureInfo.abbreviatedMonthNames,n=t.toLowerCase(),s=0;s&lt;e.length;s++)if(e[s].toLowerCase()==n||i[s].toLowerCase()==n)return s;return-1},Date.getDayNumberFromName=function(t){for(var e=Date.CultureInfo.dayNames,i=Date.CultureInfo.abbreviatedDayNames,n=(Date.CultureInfo.shortestDayNames,t.toLowerCase()),s=0;s&lt;e.length;s++)if(e[s].toLowerCase()==n||i[s].toLowerCase()==n)return s;return-1},Date.isLeapYear=function(t){return t%4==0&amp;&amp;t%100!=0||t%400==0},Date.getDaysInMonth=function(t,e){return[31,Date.isLeapYear(t)?29:28,31,30,31,30,31,31,30,31,30,31][e]},Date.getTimezoneOffset=function(t,e){return e?Date.CultureInfo.abbreviatedTimeZoneDST[t.toUpperCase()]:Date.CultureInfo.abbreviatedTimeZoneStandard[t.toUpperCase()]},Date.getTimezoneAbbreviation=function(t,e){var i,n=e?Date.CultureInfo.abbreviatedTimeZoneDST:Date.CultureInfo.abbreviatedTimeZoneStandard;for(i in n)if(n[i]===t)return i;return null},Date.prototype.clone=function(){return new Date(this.getTime())},Date.prototype.compareTo=function(t){if(isNaN(this))throw new Error(this);if(t instanceof Date&amp;&amp;!isNaN(t))return t&lt;this?1:this&lt;t?-1:0;throw new TypeError(t)},Date.prototype.equals=function(t){return 0===this.compareTo(t)},Date.prototype.between=function(t,e){var i=this.getTime();return i&gt;=t.getTime()&amp;&amp;i&lt;=e.getTime()},Date.prototype.addMilliseconds=function(t){return this.setMilliseconds(this.getMilliseconds()+t),this},Date.prototype.addSeconds=function(t){return this.addMilliseconds(1e3*t)},Date.prototype.addMinutes=function(t){return this.addMilliseconds(6e4*t)},Date.prototype.addHours=function(t){return this.addMilliseconds(36e5*t)},Date.prototype.addDays=function(t){return this.addMilliseconds(864e5*t)},Date.prototype.addWeeks=function(t){return this.addMilliseconds(6048e5*t)},Date.prototype.addMonths=function(t){var e=this.getDate();return this.setDate(1),this.setMonth(this.getMonth()+t),this.setDate(Math.min(e,this.getDaysInMonth())),this},Date.prototype.addYears=function(t){return this.addMonths(12*t)},Date.prototype.add=function(t){if("number"==typeof t)return this._orient=t,this;var e=t;return(e.millisecond||e.milliseconds)&amp;&amp;this.addMilliseconds(e.millisecond||e.milliseconds),(e.second||e.seconds)&amp;&amp;this.addSeconds(e.second||e.seconds),(e.minute||e.minutes)&amp;&amp;this.addMinutes(e.minute||e.minutes),(e.hour||e.hours)&amp;&amp;this.addHours(e.hour||e.hours),(e.month||e.months)&amp;&amp;this.addMonths(e.month||e.months),(e.year||e.years)&amp;&amp;this.addYears(e.year||e.years),(e.day||e.days)&amp;&amp;this.addDays(e.day||e.days),this},Date._validate=function(t,e,i,n){if("number"!=typeof t)throw new TypeError(t+" is not a Number.");if(t&lt;e||i&lt;t)throw new RangeError(t+" is not a valid value for "+n+".");return!0},Date.validateMillisecond=function(t){return Date._validate(t,0,999,"milliseconds")},Date.validateSecond=function(t){return Date._validate(t,0,59,"seconds")},Date.validateMinute=function(t){return Date._validate(t,0,59,"minutes")},Date.validateHour=function(t){return Date._validate(t,0,23,"hours")},Date.validateDay=function(t,e,i){return Date._validate(t,1,Date.getDaysInMonth(e,i),"days")},Date.validateMonth=function(t){return Date._validate(t,0,11,"months")},Date.validateYear=function(t){return Date._validate(t,1,9999,"seconds")},Date.prototype.set=function(t){var e=t;return e.millisecond||0===e.millisecond||(e.millisecond=-1),e.second||0===e.second||(e.second=-1),e.minute||0===e.minute||(e.minute=-1),e.hour||0===e.hour||(e.hour=-1),e.day||0===e.day||(e.day=-1),e.month||0===e.month||(e.month=-1),e.year||0===e.year||(e.year=-1),-1!=e.millisecond&amp;&amp;Date.validateMillisecond(e.millisecond)&amp;&amp;this.addMilliseconds(e.millisecond-this.getMilliseconds()),-1!=e.second&amp;&amp;Date.validateSecond(e.second)&amp;&amp;this.addSeconds(e.second-this.getSeconds()),-1!=e.minute&amp;&amp;Date.validateMinute(e.minute)&amp;&amp;this.addMinutes(e.minute-this.getMinutes()),-1!=e.hour&amp;&amp;Date.validateHour(e.hour)&amp;&amp;this.addHours(e.hour-this.getHours()),-1!==e.month&amp;&amp;Date.validateMonth(e.month)&amp;&amp;this.addMonths(e.month-this.getMonth()),-1!=e.year&amp;&amp;Date.validateYear(e.year)&amp;&amp;this.addYears(e.year-this.getFullYear()),-1!=e.day&amp;&amp;Date.validateDay(e.day,this.getFullYear(),this.getMonth())&amp;&amp;this.addDays(e.day-this.getDate()),e.timezone&amp;&amp;this.setTimezone(e.timezone),e.timezoneOffset&amp;&amp;this.setTimezoneOffset(e.timezoneOffset),this},Date.prototype.clearTime=function(){return this.setHours(0),this.setMinutes(0),this.setSeconds(0),this.setMilliseconds(0),this},Date.prototype.isLeapYear=function(){var t=this.getFullYear();return t%4==0&amp;&amp;t%100!=0||t%400==0},Date.prototype.isWeekday=function(){return!(this.is().sat()||this.is().sun())},Date.prototype.getDaysInMonth=function(){return Date.getDaysInMonth(this.getFullYear(),this.getMonth())},Date.prototype.moveToFirstDayOfMonth=function(){return this.set({day:1})},Date.prototype.moveToLastDayOfMonth=function(){return this.set({day:this.getDaysInMonth()})},Date.prototype.moveToDayOfWeek=function(t,e){var i=(t-this.getDay()+7*(e||1))%7;return this.addDays(0===i?i+=7*(e||1):i)},Date.prototype.moveToMonth=function(t,e){var i=(t-this.getMonth()+12*(e||1))%12;return this.addMonths(0===i?i+=12*(e||1):i)},Date.prototype.getDayOfYear=function(){return Math.floor((this-new Date(this.getFullYear(),0,1))/864e5)},Date.prototype.getWeekOfYear=function(t){var e=this.getFullYear(),i=this.getMonth(),n=this.getDate(),s=t||Date.CultureInfo.firstDayOfWeek,o=8-new Date(e,0,1).getDay();8==o&amp;&amp;(o=1);var r,a=(Date.UTC(e,i,n,0,0,0)-Date.UTC(e,0,1,0,0,0))/864e5+1,l=Math.floor((a-o+7)/7);return l===s&amp;&amp;(e--,l=2==(r=8-new Date(e,0,1).getDay())||8==r?53:52),l},Date.prototype.isDST=function(){return console.log("isDST"),"D"==this.toString().match(/(E|C|M|P)(S|D)T/)[2]},Date.prototype.getTimezone=function(){return Date.getTimezoneAbbreviation(this.getUTCOffset,this.isDST())},Date.prototype.setTimezoneOffset=function(t){var e=this.getTimezoneOffset(),i=-6*Number(t)/10;return this.addMinutes(i-e),this},Date.prototype.setTimezone=function(t){return this.setTimezoneOffset(Date.getTimezoneOffset(t))},Date.prototype.getUTCOffset=function(){var t,e=-10*this.getTimezoneOffset()/6;return e&lt;0?(t=(e-1e4).toString())[0]+t.substr(2):"+"+(t=(1e4+e).toString()).substr(1)},Date.prototype.getDayName=function(t){return t?Date.CultureInfo.abbreviatedDayNames[this.getDay()]:Date.CultureInfo.dayNames[this.getDay()]},Date.prototype.getMonthName=function(t){return t?Date.CultureInfo.abbreviatedMonthNames[this.getMonth()]:Date.CultureInfo.monthNames[this.getMonth()]},Date.prototype._toString=Date.prototype.toString,Date.prototype.toString=function(t){function e(t){return 1==t.toString().length?"0"+t:t}var i=this;return t?t.replace(/dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?/g,function(t){switch(t){case"hh":return e(i.getHours()&lt;13?i.getHours():i.getHours()-12);case"h":return i.getHours()&lt;13?i.getHours():i.getHours()-12;case"HH":return e(i.getHours());case"H":return i.getHours();case"mm":return e(i.getMinutes());case"m":return i.getMinutes();case"ss":return e(i.getSeconds());case"s":return i.getSeconds();case"yyyy":return i.getFullYear();case"yy":return i.getFullYear().toString().substring(2,4);case"dddd":return i.getDayName();case"ddd":return i.getDayName(!0);case"dd":return e(i.getDate());case"d":return i.getDate().toString();case"MMMM":return i.getMonthName();case"MMM":return i.getMonthName(!0);case"MM":return e(i.getMonth()+1);case"M":return i.getMonth()+1;case"t":return i.getHours()&lt;12?Date.CultureInfo.amDesignator.substring(0,1):Date.CultureInfo.pmDesignator.substring(0,1);case"tt":return i.getHours()&lt;12?Date.CultureInfo.amDesignator:Date.CultureInfo.pmDesignator;case"zzz":case"zz":case"z":return""}}):this._toString()},Date.now=function(){return new Date},Date.today=function(){return Date.now().clearTime()},Date.prototype._orient=1,Date.prototype.next=function(){return this._orient=1,this},Date.prototype.last=Date.prototype.prev=Date.prototype.previous=function(){return this._orient=-1,this},Date.prototype._is=!1,Date.prototype.is=function(){return this._is=!0,this},Number.prototype._dateElement="day",Number.prototype.fromNow=function(){var t={};return t[this._dateElement]=this,Date.now().add(t)},Number.prototype.ago=function(){var t={};return t[this._dateElement]=-1*this,Date.now().add(t)},function(){for(var t,e=Date.prototype,i=Number.prototype,n="sunday monday tuesday wednesday thursday friday saturday".split(/\s/),s="january february march april may june july august september october november december".split(/\s/),o="Millisecond Second Minute Hour Day Week Month Year".split(/\s/),r=0;r&lt;n.length;r++)e[n[r]]=e[n[r].substring(0,3)]=function(t){return function(){return this._is?(this._is=!1,this.getDay()==t):this.moveToDayOfWeek(t,this._orient)}}(r);for(var a=0;a&lt;s.length;a++)e[s[a]]=e[s[a].substring(0,3)]=function(t){return function(){return this._is?(this._is=!1,this.getMonth()===t):this.moveToMonth(t,this._orient)}}(a);for(var l=0;l&lt;o.length;l++)e[t=o[l].toLowerCase()]=e[t+"s"]=function(t){return function(){return"s"!=t.substring(t.length-1)&amp;&amp;(t+="s"),this["add"+t](this._orient)}}(o[l]),i[t]=i[t+"s"]=function(t){return function(){return this._dateElement=t,this}}(t)}(),Date.prototype.toJSONString=function(){return this.toString("yyyy-MM-ddThh:mm:ssZ")},Date.prototype.toShortDateString=function(){return this.toString(Date.CultureInfo.formatPatterns.shortDatePattern)},Date.prototype.toLongDateString=function(){return this.toString(Date.CultureInfo.formatPatterns.longDatePattern)},Date.prototype.toShortTimeString=function(){return this.toString(Date.CultureInfo.formatPatterns.shortTimePattern)},Date.prototype.toLongTimeString=function(){return this.toString(Date.CultureInfo.formatPatterns.longTimePattern)},Date.prototype.getOrdinal=function(){switch(this.getDate()){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th"}},function(){Date.Parsing={Exception:function(t){this.message="Parse error at '"+t.substring(0,10)+" ...'"}};for(var p=Date.Parsing,f=p.Operators={rtoken:function(i){return function(t){var e=t.match(i);if(e)return[e[0],t.substring(e[0].length)];throw new p.Exception(t)}},token:function(t){return function(t){return f.rtoken(new RegExp("^s*"+t+"s*"))(t)}},stoken:function(t){return f.rtoken(new RegExp("^"+t))},until:function(t){return function(e){for(var i=[],n=null;e.length;){try{n=t.call(this,e)}catch(t){i.push(n[0]),e=n[1];continue}break}return[i,e]}},many:function(n){return function(e){for(var i=[],t=null;e.length;){try{t=n.call(this,e)}catch(t){return[i,e]}i.push(t[0]),e=t[1]}return[i,e]}},optional:function(i){return function(e){var t=null;try{t=i.call(this,e)}catch(t){return[null,e]}return[t[0],t[1]]}},not:function(t){return function(e){try{t.call(this,e)}catch(t){return[null,e]}throw new p.Exception(e)}},ignore:function(e){return e?function(t){return[null,e.call(this,t)[1]]}:null},product:function(){for(var t=arguments[0],e=Array.prototype.slice.call(arguments,1),i=[],n=0;n&lt;t.length;n++)i.push(f.each(t[n],e));return i},cache:function(t){var i={},n=null;return function(e){try{n=i[e]=i[e]||t.call(this,e)}catch(t){n=i[e]=t}if(n instanceof p.Exception)throw n;return n}},any:function(){var n=arguments;return function(t){for(var e=null,i=0;i&lt;n.length;i++)if(null!=n[i]){try{e=n[i].call(this,t)}catch(t){e=null}if(e)return e}throw new p.Exception(t)}},each:function(){var s=arguments;return function(e){for(var t=[],i=null,n=0;n&lt;s.length;n++)if(null!=s[n]){try{i=s[n].call(this,e)}catch(t){throw new p.Exception(e)}t.push(i[0]),e=i[1]}return[t,e]}},all:function(){var t=arguments,e=e;return e.each(e.optional(t))},sequence:function(o,r,a){return r=r||f.rtoken(/^\s*/),a=a||null,1==o.length?o[0]:function(t){for(var e=null,i=null,n=[],s=0;s&lt;o.length;s++){try{e=o[s].call(this,t)}catch(t){break}n.push(e[0]);try{i=r.call(this,e[1])}catch(t){i=null;break}t=i[1]}if(!e)throw new p.Exception(t);if(i)throw new p.Exception(i[1]);if(a)try{e=a.call(this,e[1])}catch(t){throw new p.Exception(e[1])}return[n,e?e[1]:t]}},between:function(t,e,i){i=i||t;var n=f.each(f.ignore(t),e,f.ignore(i));return function(t){var e=n.call(this,t);return[[e[0][0],r[0][2]],e[1]]}},list:function(t,e,i){return e=e||f.rtoken(/^\s*/),i=i||null,t instanceof Array?f.each(f.product(t.slice(0,-1),f.ignore(e)),t.slice(-1),f.ignore(i)):f.each(f.many(f.each(t,f.ignore(e))),px,f.ignore(i))},set:function(u,c,d){return c=c||f.rtoken(/^\s*/),d=d||null,function(t){for(var e,i=null,n=null,s=null,o=[[],t],r=!1,a=0;a&lt;u.length;a++){i=n=null,r=1==u.length;try{i=u[a].call(this,t)}catch(t){continue}if(s=[[i[0]],i[1]],0&lt;i[1].length&amp;&amp;!r)try{n=c.call(this,i[1])}catch(t){r=!0}else r=!0;if(r||0!==n[1].length||(r=!0),!r){for(var l=[],h=0;h&lt;u.length;h++)a!=h&amp;&amp;l.push(u[h]);0&lt;(e=f.set(l,c).call(this,n[1]))[0].length&amp;&amp;(s[0]=s[0].concat(e[0]),s[1]=e[1])}if(s[1].length&lt;o[1].length&amp;&amp;(o=s),0===o[1].length)break}if(0===o[0].length)return o;if(d){try{n=d.call(this,o[1])}catch(t){throw new p.Exception(o[1])}o[1]=n[1]}return o}},forward:function(e,i){return function(t){return e[i].call(this,t)}},replace:function(i,n){return function(t){var e=i.call(this,t);return[n,e[1]]}},process:function(i,n){return function(t){var e=i.call(this,t);return[n.call(this,e[0]),e[1]]}},min:function(i,n){return function(t){var e=n.call(this,t);if(e[0].length&lt;i)throw new p.Exception(t);return e}}},t="optional not ignore cache".split(/\s/),e=0;e&lt;t.length;e++)f[t[e]]=function(s){return function(){var t=null,e=[];if(1&lt;arguments.length?t=Array.prototype.slice.call(arguments):arguments[0]instanceof Array&amp;&amp;(t=arguments[0]),!t)return s.apply(null,arguments);var i=0,n=t.shift();return i&lt;n.length?(t.unshift(n[i]),e.push(s.apply(null,t)),t.shift(),e):void 0}}(f[t[e]]);for(var i="each any all".split(/\s/),n=0;n&lt;i.length;n++)f[i[n]]=function(t){return function(){return arguments[0]instanceof Array?t.apply(null,arguments[0]):t.apply(null,arguments)}}(f[i[n]])}(),function(){var r=function(t){for(var e=[],i=0;i&lt;t.length;i++)t[i]instanceof Array?e=e.concat(r(t[i])):t[i]&amp;&amp;e.push(t[i]);return e};Date.Grammar={},Date.Translator={hour:function(t){return function(){this.hour=Number(t)}},minute:function(t){return function(){this.minute=Number(t)}},second:function(t){return function(){this.second=Number(t)}},meridian:function(t){return function(){this.meridian=t.slice(0,1).toLowerCase()}},timezone:function(e){return function(){var t=e.replace(/[^\d\+\-]/g,"");t.length?this.timezoneOffset=Number(t):this.timezone=e.toLowerCase()}},day:function(t){var e=t[0];return function(){this.day=Number(e.match(/\d+/)[0])}},month:function(t){return function(){this.month=3==t.length?Date.getMonthNumberFromName(t):Number(t)-1}},year:function(e){return function(){var t=Number(e);this.year=2&lt;e.length?t:t+(t+2e3&lt;Date.CultureInfo.twoDigitYearMax?2e3:1900)}},rday:function(t){return function(){switch(t){case"yesterday":this.days=-1;break;case"tomorrow":this.days=1;break;case"today":this.days=0;break;case"now":this.days=0,this.now=!0}}},finishExact:function(t){t=t instanceof Array?t:[t];var e=new Date;this.year=e.getFullYear(),this.month=e.getMonth(),this.day=1,this.hour=0,this.minute=0;for(var i=this.second=0;i&lt;t.length;i++)t[i]&amp;&amp;t[i].call(this);if(this.hour="p"==this.meridian&amp;&amp;this.hour&lt;13?this.hour+12:this.hour,this.day&gt;Date.getDaysInMonth(this.year,this.month))throw new RangeError(this.day+" is not a valid value for days.");var n=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second);return this.timezone?n.set({timezone:this.timezone}):this.timezoneOffset&amp;&amp;n.set({timezoneOffset:this.timezoneOffset}),n},finish:function(t){if(0===(t=t instanceof Array?r(t):[t]).length)return null;for(var e=0;e&lt;t.length;e++)"function"==typeof t[e]&amp;&amp;t[e].call(this);if(this.now)return new Date;var i=Date.today();if(null==this.days&amp;&amp;!this.orient&amp;&amp;!this.operator)return this.meridian&amp;&amp;this.hour&amp;&amp;(this.hour=this.hour&lt;13&amp;&amp;"p"==this.meridian?this.hour+12:this.hour),this.weekday&amp;&amp;!this.day&amp;&amp;(this.day=i.addDays(Date.getDayNumberFromName(this.weekday)-i.getDay()).getDate()),this.month&amp;&amp;!this.day&amp;&amp;(this.day=1),i.set(this);var n,s,o="past"==this.orient||"subtract"==this.operator?-1:1;return this.weekday&amp;&amp;(this.unit="day",n=Date.getDayNumberFromName(this.weekday)-i.getDay(),s=7,this.days=n?(n+o*s)%s:o*s),this.month&amp;&amp;(this.unit="month",n=this.month-i.getMonth(),s=12,this.months=n?(n+o*s)%s:o*s,this.month=null),this.unit||(this.unit="day"),null!=this[this.unit+"s"]&amp;&amp;null==this.operator||(this.value||(this.value=1),"week"==this.unit&amp;&amp;(this.unit="day",this.value=7*this.value),this[this.unit+"s"]=this.value*o),i.add(this)}};var t,a=Date.Parsing.Operators,i=Date.Grammar,e=Date.Translator;i.datePartDelimiter=a.rtoken(/^([\s\-\.\,\/\x27]+)/),i.timePartDelimiter=a.stoken(":"),i.whiteSpace=a.rtoken(/^\s*/),i.generalDelimiter=a.rtoken(/^(([\s\,]|at|on)+)/);var l={};i.ctoken=function(t){var e=l[t];if(!e){for(var i=Date.CultureInfo.regexPatterns,n=t.split(/\s+/),s=[],o=0;o&lt;n.length;o++)s.push(a.replace(a.rtoken(i[n[o]]),n[o]));e=l[t]=a.any.apply(null,s)}return e},i.ctoken2=function(t){return a.rtoken(Date.CultureInfo.regexPatterns[t])},i.h=a.cache(a.process(a.rtoken(/^(0[0-9]|1[0-2]|[1-9])/),e.hour)),i.hh=a.cache(a.process(a.rtoken(/^(0[0-9]|1[0-2])/),e.hour)),i.H=a.cache(a.process(a.rtoken(/^([0-1][0-9]|2[0-3]|[0-9])/),e.hour)),i.HH=a.cache(a.process(a.rtoken(/^([0-1][0-9]|2[0-3])/),e.hour)),i.m=a.cache(a.process(a.rtoken(/^([0-5][0-9]|[0-9])/),e.minute)),i.mm=a.cache(a.process(a.rtoken(/^[0-5][0-9]/),e.minute)),i.s=a.cache(a.process(a.rtoken(/^([0-5][0-9]|[0-9])/),e.second)),i.ss=a.cache(a.process(a.rtoken(/^[0-5][0-9]/),e.second)),i.hms=a.cache(a.sequence([i.H,i.mm,i.ss],i.timePartDelimiter)),i.t=a.cache(a.process(i.ctoken2("shortMeridian"),e.meridian)),i.tt=a.cache(a.process(i.ctoken2("longMeridian"),e.meridian)),i.z=a.cache(a.process(a.rtoken(/^(\+|\-)?\s*\d\d\d\d?/),e.timezone)),i.zz=a.cache(a.process(a.rtoken(/^(\+|\-)\s*\d\d\d\d/),e.timezone)),i.zzz=a.cache(a.process(i.ctoken2("timezone"),e.timezone)),i.timeSuffix=a.each(a.ignore(i.whiteSpace),a.set([i.tt,i.zzz])),i.time=a.each(a.optional(a.ignore(a.stoken("T"))),i.hms,i.timeSuffix),i.d=a.cache(a.process(a.each(a.rtoken(/^([0-2]\d|3[0-1]|\d)/),a.optional(i.ctoken2("ordinalSuffix"))),e.day)),i.dd=a.cache(a.process(a.each(a.rtoken(/^([0-2]\d|3[0-1])/),a.optional(i.ctoken2("ordinalSuffix"))),e.day)),i.ddd=i.dddd=a.cache(a.process(i.ctoken("sun mon tue wed thu fri sat"),function(t){return function(){this.weekday=t}})),i.M=a.cache(a.process(a.rtoken(/^(1[0-2]|0\d|\d)/),e.month)),i.MM=a.cache(a.process(a.rtoken(/^(1[0-2]|0\d)/),e.month)),i.MMM=i.MMMM=a.cache(a.process(i.ctoken("jan feb mar apr may jun jul aug sep oct nov dec"),e.month)),i.y=a.cache(a.process(a.rtoken(/^(\d\d?)/),e.year)),i.yy=a.cache(a.process(a.rtoken(/^(\d\d)/),e.year)),i.yyy=a.cache(a.process(a.rtoken(/^(\d\d?\d?\d?)/),e.year)),i.yyyy=a.cache(a.process(a.rtoken(/^(\d\d\d\d)/),e.year)),t=function(){return a.each(a.any.apply(null,arguments),a.not(i.ctoken2("timeContext")))},i.day=t(i.d,i.dd),i.month=t(i.M,i.MMM),i.year=t(i.yyyy,i.yy),i.orientation=a.process(i.ctoken("past future"),function(t){return function(){this.orient=t}}),i.operator=a.process(i.ctoken("add subtract"),function(t){return function(){this.operator=t}}),i.rday=a.process(i.ctoken("yesterday tomorrow today now"),e.rday),i.unit=a.process(i.ctoken("minute hour day week month year"),function(t){return function(){this.unit=t}}),i.value=a.process(a.rtoken(/^\d\d?(st|nd|rd|th)?/),function(t){return function(){this.value=t.replace(/\D/g,"")}}),i.expression=a.set([i.rday,i.operator,i.value,i.unit,i.orientation,i.ddd,i.MMM]),t=function(){return a.set(arguments,i.datePartDelimiter)},i.mdy=t(i.ddd,i.month,i.day,i.year),i.ymd=t(i.ddd,i.year,i.month,i.day),i.dmy=t(i.ddd,i.day,i.month,i.year),i.date=function(t){return(i[Date.CultureInfo.dateElementOrder]||i.mdy).call(this,t)},i.format=a.process(a.many(a.any(a.process(a.rtoken(/^(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),function(t){if(i[t])return i[t];throw Date.Parsing.Exception(t)}),a.process(a.rtoken(/^[^dMyhHmstz]+/),function(t){return a.ignore(a.stoken(t))}))),function(t){return a.process(a.each.apply(null,t),e.finishExact)});function n(t){return s[t]=s[t]||i.format(t)[0]}var s={};i.formats=function(t){if(t instanceof Array){for(var e=[],i=0;i&lt;t.length;i++)e.push(n(t[i]));return a.any.apply(null,e)}return n(t)},i._formats=i.formats(["yyyy-MM-ddTHH:mm:ss","ddd, MMM dd, yyyy H:mm:ss tt","ddd MMM d yyyy HH:mm:ss zzz","d"]),i._start=a.process(a.set([i.date,i.time,i.expression],i.generalDelimiter,i.whiteSpace),e.finish),i.start=function(t){try{var e=i._formats.call({},t);if(0===e[1].length)return e}catch(t){}return i._start.call({},t)}}(),Date._parse=Date.parse,Date.parse=function(t){var e=null;if(!t)return null;try{e=Date.Grammar.start.call({},t)}catch(t){return null}return 0===e[1].length?e[0]:null},Date.getParseFunction=function(t){var i=Date.Grammar.formats(t);return function(t){var e=null;try{e=i.call({},t)}catch(t){return null}return 0===e[1].length?e[0]:null}},Date.parseExact=function(t,e){return Date.getParseFunction(e)(t)};
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS0zLjYuMC5qcyIsImpxdWVyeS11aS5qcyIsInVuZGVyc2NvcmUuanMiLCJiYWNrYm9uZS5qcyIsImFtcGxpZnkuanMiLCJkYXRlLmpzIl0sIm5hbWVzIjpbImdsb2JhbCIsImZhY3RvcnkiLCJtb2R1bGUiLCJleHBvcnRzIiwiZG9jdW1lbnQiLCJ3IiwiRXJyb3IiLCJ3aW5kb3ciLCJ0aGlzIiwibm9HbG9iYWwiLCJpc1dpbmRvdyIsIm9iaiIsImFyciIsImdldFByb3RvIiwiT2JqZWN0IiwiZ2V0UHJvdG90eXBlT2YiLCJzbGljZSIsImZsYXQiLCJhcnJheSIsImNhbGwiLCJjb25jYXQiLCJhcHBseSIsInB1c2giLCJpbmRleE9mIiwiY2xhc3MydHlwZSIsInRvU3RyaW5nIiwiaGFzT3duIiwiaGFzT3duUHJvcGVydHkiLCJmblRvU3RyaW5nIiwiT2JqZWN0RnVuY3Rpb25TdHJpbmciLCJzdXBwb3J0IiwiaXNGdW5jdGlvbiIsIm5vZGVUeXBlIiwiaXRlbSIsInByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMiLCJ0eXBlIiwic3JjIiwibm9uY2UiLCJub01vZHVsZSIsIkRPTUV2YWwiLCJjb2RlIiwibm9kZSIsImRvYyIsImkiLCJ2YWwiLCJzY3JpcHQiLCJjcmVhdGVFbGVtZW50IiwidGV4dCIsImdldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsImhlYWQiLCJhcHBlbmRDaGlsZCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInRvVHlwZSIsInZlcnNpb24iLCJqUXVlcnkiLCJzZWxlY3RvciIsImNvbnRleHQiLCJmbiIsImluaXQiLCJpc0FycmF5TGlrZSIsImxlbmd0aCIsInByb3RvdHlwZSIsImpxdWVyeSIsImNvbnN0cnVjdG9yIiwidG9BcnJheSIsImdldCIsIm51bSIsInB1c2hTdGFjayIsImVsZW1zIiwicmV0IiwibWVyZ2UiLCJwcmV2T2JqZWN0IiwiZWFjaCIsImNhbGxiYWNrIiwibWFwIiwiZWxlbSIsImFyZ3VtZW50cyIsImZpcnN0IiwiZXEiLCJsYXN0IiwiZXZlbiIsImdyZXAiLCJfZWxlbSIsIm9kZCIsImxlbiIsImoiLCJlbmQiLCJzb3J0Iiwic3BsaWNlIiwiZXh0ZW5kIiwib3B0aW9ucyIsIm5hbWUiLCJjb3B5IiwiY29weUlzQXJyYXkiLCJjbG9uZSIsInRhcmdldCIsImRlZXAiLCJpc1BsYWluT2JqZWN0IiwiQXJyYXkiLCJpc0FycmF5IiwidW5kZWZpbmVkIiwiZXhwYW5kbyIsIk1hdGgiLCJyYW5kb20iLCJyZXBsYWNlIiwiaXNSZWFkeSIsImVycm9yIiwibXNnIiwibm9vcCIsInByb3RvIiwiQ3RvciIsImlzRW1wdHlPYmplY3QiLCJnbG9iYWxFdmFsIiwibWFrZUFycmF5IiwicmVzdWx0cyIsImluQXJyYXkiLCJzZWNvbmQiLCJpbnZlcnQiLCJtYXRjaGVzIiwiY2FsbGJhY2tFeHBlY3QiLCJhcmciLCJ2YWx1ZSIsImd1aWQiLCJTeW1ib2wiLCJpdGVyYXRvciIsInNwbGl0IiwiX2kiLCJ0b0xvd2VyQ2FzZSIsIlNpenpsZSIsImZ1bmVzY2FwZSIsImVzY2FwZSIsIm5vbkhleCIsImhpZ2giLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJ1bmxvYWRIYW5kbGVyIiwic2V0RG9jdW1lbnQiLCJFeHByIiwiZ2V0VGV4dCIsImlzWE1MIiwidG9rZW5pemUiLCJjb21waWxlIiwic2VsZWN0Iiwib3V0ZXJtb3N0Q29udGV4dCIsInNvcnRJbnB1dCIsImhhc0R1cGxpY2F0ZSIsImRvY0VsZW0iLCJkb2N1bWVudElzSFRNTCIsInJidWdneVFTQSIsInJidWdneU1hdGNoZXMiLCJjb250YWlucyIsIkRhdGUiLCJwcmVmZXJyZWREb2MiLCJkaXJydW5zIiwiZG9uZSIsImNsYXNzQ2FjaGUiLCJjcmVhdGVDYWNoZSIsInRva2VuQ2FjaGUiLCJjb21waWxlckNhY2hlIiwibm9ubmF0aXZlU2VsZWN0b3JDYWNoZSIsInNvcnRPcmRlciIsImEiLCJiIiwicG9wIiwicHVzaE5hdGl2ZSIsImxpc3QiLCJib29sZWFucyIsIndoaXRlc3BhY2UiLCJpZGVudGlmaWVyIiwiYXR0cmlidXRlcyIsInBzZXVkb3MiLCJyd2hpdGVzcGFjZSIsIlJlZ0V4cCIsInJ0cmltIiwicmNvbW1hIiwicmNvbWJpbmF0b3JzIiwicmRlc2NlbmQiLCJycHNldWRvIiwicmlkZW50aWZpZXIiLCJtYXRjaEV4cHIiLCJJRCIsIkNMQVNTIiwiVEFHIiwiQVRUUiIsIlBTRVVETyIsIkNISUxEIiwiYm9vbCIsIm5lZWRzQ29udGV4dCIsInJodG1sIiwicmlucHV0cyIsInJoZWFkZXIiLCJybmF0aXZlIiwicnF1aWNrRXhwciIsInJzaWJsaW5nIiwicnVuZXNjYXBlIiwicmNzc2VzY2FwZSIsImZjc3Nlc2NhcGUiLCJjaCIsImFzQ29kZVBvaW50IiwiY2hhckNvZGVBdCIsImluRGlzYWJsZWRGaWVsZHNldCIsImFkZENvbWJpbmF0b3IiLCJkaXNhYmxlZCIsIm5vZGVOYW1lIiwiZGlyIiwibmV4dCIsImNoaWxkTm9kZXMiLCJlIiwiZWxzIiwic2VlZCIsIm0iLCJuaWQiLCJtYXRjaCIsImdyb3VwcyIsIm5ld1NlbGVjdG9yIiwibmV3Q29udGV4dCIsIm93bmVyRG9jdW1lbnQiLCJleGVjIiwiZ2V0RWxlbWVudEJ5SWQiLCJpZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsInFzYSIsInRlc3QiLCJ0ZXN0Q29udGV4dCIsInNjb3BlIiwidG9TZWxlY3RvciIsImpvaW4iLCJxdWVyeVNlbGVjdG9yQWxsIiwicXNhRXJyb3IiLCJyZW1vdmVBdHRyaWJ1dGUiLCJrZXlzIiwiY2FjaGUiLCJrZXkiLCJjYWNoZUxlbmd0aCIsInNoaWZ0IiwibWFya0Z1bmN0aW9uIiwiYXNzZXJ0IiwiZWwiLCJhZGRIYW5kbGUiLCJhdHRycyIsImhhbmRsZXIiLCJhdHRySGFuZGxlIiwic2libGluZ0NoZWNrIiwiY3VyIiwiZGlmZiIsInNvdXJjZUluZGV4IiwibmV4dFNpYmxpbmciLCJjcmVhdGVEaXNhYmxlZFBzZXVkbyIsImlzRGlzYWJsZWQiLCJjcmVhdGVQb3NpdGlvbmFsUHNldWRvIiwiYXJndW1lbnQiLCJtYXRjaEluZGV4ZXMiLCJuYW1lc3BhY2UiLCJuYW1lc3BhY2VVUkkiLCJkb2N1bWVudEVsZW1lbnQiLCJoYXNDb21wYXJlIiwic3ViV2luZG93IiwiZGVmYXVsdFZpZXciLCJ0b3AiLCJhZGRFdmVudExpc3RlbmVyIiwiYXR0YWNoRXZlbnQiLCJjbGFzc05hbWUiLCJjcmVhdGVDb21tZW50IiwiZ2V0QnlJZCIsImdldEVsZW1lbnRzQnlOYW1lIiwiZmlsdGVyIiwiYXR0cklkIiwiZmluZCIsImdldEF0dHJpYnV0ZU5vZGUiLCJ0YWciLCJ0bXAiLCJpbnB1dCIsImlubmVySFRNTCIsIm1hdGNoZXNTZWxlY3RvciIsIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsIm1vek1hdGNoZXNTZWxlY3RvciIsIm9NYXRjaGVzU2VsZWN0b3IiLCJtc01hdGNoZXNTZWxlY3RvciIsImRpc2Nvbm5lY3RlZE1hdGNoIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJhZG93biIsImJ1cCIsImNvbXBhcmUiLCJzb3J0RGV0YWNoZWQiLCJhdXAiLCJhcCIsImJwIiwidW5zaGlmdCIsImV4cHIiLCJlbGVtZW50cyIsImF0dHIiLCJzcGVjaWZpZWQiLCJzZWwiLCJ1bmlxdWVTb3J0IiwiZHVwbGljYXRlcyIsImRldGVjdER1cGxpY2F0ZXMiLCJzb3J0U3RhYmxlIiwidGV4dENvbnRlbnQiLCJmaXJzdENoaWxkIiwibm9kZVZhbHVlIiwic2VsZWN0b3JzIiwiY3JlYXRlUHNldWRvIiwicmVsYXRpdmUiLCI+IiwiICIsIisiLCJ+IiwicHJlRmlsdGVyIiwiZXhjZXNzIiwidW5xdW90ZWQiLCJub2RlTmFtZVNlbGVjdG9yIiwicGF0dGVybiIsIm9wZXJhdG9yIiwiY2hlY2siLCJyZXN1bHQiLCJ3aGF0IiwiX2FyZ3VtZW50Iiwic2ltcGxlIiwiZm9yd2FyZCIsIm9mVHlwZSIsIl9jb250ZXh0IiwieG1sIiwidW5pcXVlQ2FjaGUiLCJvdXRlckNhY2hlIiwibm9kZUluZGV4Iiwic3RhcnQiLCJwYXJlbnQiLCJ1c2VDYWNoZSIsImxhc3RDaGlsZCIsInVuaXF1ZUlEIiwicHNldWRvIiwiYXJncyIsInNldEZpbHRlcnMiLCJpZHgiLCJtYXRjaGVkIiwibm90IiwibWF0Y2hlciIsInVubWF0Y2hlZCIsImhhcyIsImxhbmciLCJlbGVtTGFuZyIsImhhc2giLCJsb2NhdGlvbiIsInJvb3QiLCJmb2N1cyIsImFjdGl2ZUVsZW1lbnQiLCJoYXNGb2N1cyIsImhyZWYiLCJ0YWJJbmRleCIsImVuYWJsZWQiLCJjaGVja2VkIiwic2VsZWN0ZWQiLCJzZWxlY3RlZEluZGV4IiwiZW1wdHkiLCJoZWFkZXIiLCJidXR0b24iLCJfbWF0Y2hJbmRleGVzIiwibHQiLCJndCIsInJhZGlvIiwiY2hlY2tib3giLCJmaWxlIiwicGFzc3dvcmQiLCJpbWFnZSIsImNyZWF0ZUlucHV0UHNldWRvIiwic3VibWl0IiwicmVzZXQiLCJjcmVhdGVCdXR0b25Qc2V1ZG8iLCJ0b2tlbnMiLCJjb21iaW5hdG9yIiwiYmFzZSIsInNraXAiLCJjaGVja05vbkVsZW1lbnRzIiwiZG9uZU5hbWUiLCJvbGRDYWNoZSIsIm5ld0NhY2hlIiwiZWxlbWVudE1hdGNoZXIiLCJtYXRjaGVycyIsImNvbmRlbnNlIiwibmV3VW5tYXRjaGVkIiwibWFwcGVkIiwic2V0TWF0Y2hlciIsInBvc3RGaWx0ZXIiLCJwb3N0RmluZGVyIiwicG9zdFNlbGVjdG9yIiwidGVtcCIsInByZU1hcCIsInBvc3RNYXAiLCJwcmVleGlzdGluZyIsImNvbnRleHRzIiwibXVsdGlwbGVDb250ZXh0cyIsIm1hdGNoZXJJbiIsIm1hdGNoZXJPdXQiLCJtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMiLCJlbGVtZW50TWF0Y2hlcnMiLCJzZXRNYXRjaGVycyIsInN1cGVyTWF0Y2hlciIsIm91dGVybW9zdCIsIm1hdGNoZWRDb3VudCIsInNldE1hdGNoZWQiLCJjb250ZXh0QmFja3VwIiwiYnlFbGVtZW50IiwiZGlycnVuc1VuaXF1ZSIsImJ5U2V0IiwiZmlsdGVycyIsInBhcnNlT25seSIsInNvRmFyIiwicHJlRmlsdGVycyIsImNhY2hlZCIsIm1hdGNoZXJGcm9tVG9rZW5zIiwiY2hlY2tDb250ZXh0IiwibGVhZGluZ1JlbGF0aXZlIiwiaW1wbGljaXRSZWxhdGl2ZSIsIm1hdGNoQ29udGV4dCIsIm1hdGNoQW55Q29udGV4dCIsInRva2VuIiwiY29tcGlsZWQiLCJfbmFtZSIsImRlZmF1bHRWYWx1ZSIsInVuaXF1ZSIsImlzWE1MRG9jIiwiZXNjYXBlU2VsZWN0b3IiLCJ1bnRpbCIsInRydW5jYXRlIiwiaXMiLCJzaWJsaW5ncyIsIm4iLCJybmVlZHNDb250ZXh0IiwicnNpbmdsZVRhZyIsIndpbm5vdyIsInF1YWxpZmllciIsInNlbGYiLCJyb290alF1ZXJ5IiwicmVhZHkiLCJwYXJzZUhUTUwiLCJycGFyZW50c3ByZXYiLCJndWFyYW50ZWVkVW5pcXVlIiwiY2hpbGRyZW4iLCJjb250ZW50cyIsInByZXYiLCJzaWJsaW5nIiwidGFyZ2V0cyIsImwiLCJjbG9zZXN0IiwiaW5kZXgiLCJwcmV2QWxsIiwiYWRkIiwiYWRkQmFjayIsInBhcmVudHMiLCJwYXJlbnRzVW50aWwiLCJuZXh0QWxsIiwibmV4dFVudGlsIiwicHJldlVudGlsIiwiY29udGVudERvY3VtZW50IiwiY29udGVudCIsInJldmVyc2UiLCJybm90aHRtbHdoaXRlIiwiSWRlbnRpdHkiLCJ2IiwiVGhyb3dlciIsImV4IiwiYWRvcHRWYWx1ZSIsInJlc29sdmUiLCJyZWplY3QiLCJub1ZhbHVlIiwibWV0aG9kIiwicHJvbWlzZSIsImZhaWwiLCJ0aGVuIiwiQ2FsbGJhY2tzIiwib2JqZWN0IiwiXyIsImZsYWciLCJmaXJlIiwibG9ja2VkIiwib25jZSIsImZpcmVkIiwiZmlyaW5nIiwicXVldWUiLCJmaXJpbmdJbmRleCIsIm1lbW9yeSIsInN0b3BPbkZhbHNlIiwicmVtb3ZlIiwiZGlzYWJsZSIsImxvY2siLCJmaXJlV2l0aCIsIkRlZmVycmVkIiwiZnVuYyIsInR1cGxlcyIsInN0YXRlIiwiYWx3YXlzIiwiZGVmZXJyZWQiLCJjYXRjaCIsInBpcGUiLCJmbnMiLCJuZXdEZWZlciIsInR1cGxlIiwicmV0dXJuZWQiLCJwcm9ncmVzcyIsIm5vdGlmeSIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsIm9uUHJvZ3Jlc3MiLCJtYXhEZXB0aCIsImRlcHRoIiwic3BlY2lhbCIsIm1pZ2h0VGhyb3ciLCJ0aGF0IiwiVHlwZUVycm9yIiwibm90aWZ5V2l0aCIsInJlc29sdmVXaXRoIiwicHJvY2VzcyIsImV4Y2VwdGlvbkhvb2siLCJzdGFja1RyYWNlIiwicmVqZWN0V2l0aCIsImdldFN0YWNrSG9vayIsInNldFRpbWVvdXQiLCJzdGF0ZVN0cmluZyIsIndoZW4iLCJzaW5nbGVWYWx1ZSIsInVwZGF0ZUZ1bmMiLCJyZXNvbHZlQ29udGV4dHMiLCJyZXNvbHZlVmFsdWVzIiwicmVtYWluaW5nIiwicHJpbWFyeSIsInJlcnJvck5hbWVzIiwic3RhY2siLCJjb25zb2xlIiwid2FybiIsIm1lc3NhZ2UiLCJyZWFkeUV4Y2VwdGlvbiIsInJlYWR5TGlzdCIsImNvbXBsZXRlZCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJyZWFkeVdhaXQiLCJ3YWl0IiwicmVhZHlTdGF0ZSIsImRvU2Nyb2xsIiwiYWNjZXNzIiwiY2hhaW5hYmxlIiwiZW1wdHlHZXQiLCJyYXciLCJidWxrIiwiX2tleSIsInJtc1ByZWZpeCIsInJkYXNoQWxwaGEiLCJmY2FtZWxDYXNlIiwiX2FsbCIsImxldHRlciIsInRvVXBwZXJDYXNlIiwiY2FtZWxDYXNlIiwic3RyaW5nIiwiYWNjZXB0RGF0YSIsIm93bmVyIiwiRGF0YSIsInVpZCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwic2V0IiwiZGF0YSIsInByb3AiLCJoYXNEYXRhIiwiZGF0YVByaXYiLCJkYXRhVXNlciIsInJicmFjZSIsInJtdWx0aURhc2giLCJkYXRhQXR0ciIsIkpTT04iLCJwYXJzZSIsInJlbW92ZURhdGEiLCJfZGF0YSIsIl9yZW1vdmVEYXRhIiwiZGVxdWV1ZSIsInN0YXJ0TGVuZ3RoIiwiaG9va3MiLCJfcXVldWVIb29rcyIsInN0b3AiLCJzZXR0ZXIiLCJjbGVhclF1ZXVlIiwiY291bnQiLCJkZWZlciIsInBudW0iLCJzb3VyY2UiLCJyY3NzTnVtIiwiY3NzRXhwYW5kIiwiaXNBdHRhY2hlZCIsImNvbXBvc2VkIiwiZ2V0Um9vdE5vZGUiLCJpc0hpZGRlbldpdGhpblRyZWUiLCJzdHlsZSIsImRpc3BsYXkiLCJjc3MiLCJhZGp1c3RDU1MiLCJ2YWx1ZVBhcnRzIiwidHdlZW4iLCJhZGp1c3RlZCIsInNjYWxlIiwibWF4SXRlcmF0aW9ucyIsImN1cnJlbnRWYWx1ZSIsImluaXRpYWwiLCJ1bml0IiwiY3NzTnVtYmVyIiwiaW5pdGlhbEluVW5pdCIsImRlZmF1bHREaXNwbGF5TWFwIiwic2hvd0hpZGUiLCJzaG93IiwidmFsdWVzIiwiYm9keSIsImhpZGUiLCJ0b2dnbGUiLCJkaXYiLCJyY2hlY2thYmxlVHlwZSIsInJ0YWdOYW1lIiwicnNjcmlwdFR5cGUiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiY2hlY2tDbG9uZSIsImNsb25lTm9kZSIsIm5vQ2xvbmVDaGVja2VkIiwib3B0aW9uIiwid3JhcE1hcCIsInRoZWFkIiwiY29sIiwidHIiLCJ0ZCIsIl9kZWZhdWx0IiwiZ2V0QWxsIiwic2V0R2xvYmFsRXZhbCIsInJlZkVsZW1lbnRzIiwidGJvZHkiLCJ0Zm9vdCIsImNvbGdyb3VwIiwiY2FwdGlvbiIsInRoIiwib3B0Z3JvdXAiLCJidWlsZEZyYWdtZW50Iiwic2NyaXB0cyIsInNlbGVjdGlvbiIsImlnbm9yZWQiLCJ3cmFwIiwiYXR0YWNoZWQiLCJmcmFnbWVudCIsIm5vZGVzIiwiaHRtbFByZWZpbHRlciIsImNyZWF0ZVRleHROb2RlIiwicnR5cGVuYW1lc3BhY2UiLCJyZXR1cm5UcnVlIiwicmV0dXJuRmFsc2UiLCJleHBlY3RTeW5jIiwiZXJyIiwic2FmZUFjdGl2ZUVsZW1lbnQiLCJvbiIsInR5cGVzIiwib25lIiwib3JpZ0ZuIiwiZXZlbnQiLCJvZmYiLCJsZXZlcmFnZU5hdGl2ZSIsIm5vdEFzeW5jIiwic2F2ZWQiLCJpc1RyaWdnZXIiLCJkZWxlZ2F0ZVR5cGUiLCJzdG9wUHJvcGFnYXRpb24iLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJwcmV2ZW50RGVmYXVsdCIsInRyaWdnZXIiLCJFdmVudCIsImhhbmRsZU9iakluIiwiZXZlbnRIYW5kbGUiLCJldmVudHMiLCJ0IiwiaGFuZGxlT2JqIiwiaGFuZGxlcnMiLCJuYW1lc3BhY2VzIiwib3JpZ1R5cGUiLCJlbGVtRGF0YSIsImNyZWF0ZSIsImhhbmRsZSIsInRyaWdnZXJlZCIsImRpc3BhdGNoIiwiYmluZFR5cGUiLCJkZWxlZ2F0ZUNvdW50Iiwic2V0dXAiLCJtYXBwZWRUeXBlcyIsIm9yaWdDb3VudCIsInRlYXJkb3duIiwicmVtb3ZlRXZlbnQiLCJuYXRpdmVFdmVudCIsImhhbmRsZXJRdWV1ZSIsImZpeCIsImRlbGVnYXRlVGFyZ2V0IiwicHJlRGlzcGF0Y2giLCJpc1Byb3BhZ2F0aW9uU3RvcHBlZCIsImN1cnJlbnRUYXJnZXQiLCJpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCIsInJuYW1lc3BhY2UiLCJwb3N0RGlzcGF0Y2giLCJtYXRjaGVkSGFuZGxlcnMiLCJtYXRjaGVkU2VsZWN0b3JzIiwiYWRkUHJvcCIsImhvb2siLCJlbnVtZXJhYmxlIiwib3JpZ2luYWxFdmVudCIsIndyaXRhYmxlIiwibG9hZCIsIm5vQnViYmxlIiwiY2xpY2siLCJiZWZvcmV1bmxvYWQiLCJyZXR1cm5WYWx1ZSIsInByb3BzIiwiaXNEZWZhdWx0UHJldmVudGVkIiwiZGVmYXVsdFByZXZlbnRlZCIsInJlbGF0ZWRUYXJnZXQiLCJ0aW1lU3RhbXAiLCJub3ciLCJpc1NpbXVsYXRlZCIsImFsdEtleSIsImJ1YmJsZXMiLCJjYW5jZWxhYmxlIiwiY2hhbmdlZFRvdWNoZXMiLCJjdHJsS2V5IiwiZGV0YWlsIiwiZXZlbnRQaGFzZSIsIm1ldGFLZXkiLCJwYWdlWCIsInBhZ2VZIiwic2hpZnRLZXkiLCJ2aWV3IiwiY2hhciIsImNoYXJDb2RlIiwia2V5Q29kZSIsImJ1dHRvbnMiLCJjbGllbnRYIiwiY2xpZW50WSIsIm9mZnNldFgiLCJvZmZzZXRZIiwicG9pbnRlcklkIiwicG9pbnRlclR5cGUiLCJzY3JlZW5YIiwic2NyZWVuWSIsInRhcmdldFRvdWNoZXMiLCJ0b0VsZW1lbnQiLCJ0b3VjaGVzIiwid2hpY2giLCJibHVyIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJwb2ludGVyZW50ZXIiLCJwb2ludGVybGVhdmUiLCJvcmlnIiwicmVsYXRlZCIsInJub0lubmVyaHRtbCIsInJjaGVja2VkIiwicmNsZWFuU2NyaXB0IiwibWFuaXB1bGF0aW9uVGFyZ2V0IiwiZGlzYWJsZVNjcmlwdCIsInJlc3RvcmVTY3JpcHQiLCJjbG9uZUNvcHlFdmVudCIsImRlc3QiLCJ1ZGF0YU9sZCIsInVkYXRhQ3VyIiwiZG9tTWFuaXAiLCJjb2xsZWN0aW9uIiwiaGFzU2NyaXB0cyIsImlOb0Nsb25lIiwidmFsdWVJc0Z1bmN0aW9uIiwiaHRtbCIsIl9ldmFsVXJsIiwia2VlcERhdGEiLCJjbGVhbkRhdGEiLCJkYXRhQW5kRXZlbnRzIiwiZGVlcERhdGFBbmRFdmVudHMiLCJzcmNFbGVtZW50cyIsImRlc3RFbGVtZW50cyIsImluUGFnZSIsImRldGFjaCIsImFwcGVuZCIsInByZXBlbmQiLCJpbnNlcnRCZWZvcmUiLCJiZWZvcmUiLCJhZnRlciIsInJlcGxhY2VXaXRoIiwicmVwbGFjZUNoaWxkIiwiYXBwZW5kVG8iLCJwcmVwZW5kVG8iLCJpbnNlcnRBZnRlciIsInJlcGxhY2VBbGwiLCJvcmlnaW5hbCIsImluc2VydCIsInN3YXAiLCJvbGQiLCJwaXhlbFBvc2l0aW9uVmFsIiwiYm94U2l6aW5nUmVsaWFibGVWYWwiLCJzY3JvbGxib3hTaXplVmFsIiwicGl4ZWxCb3hTdHlsZXNWYWwiLCJyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCIsInJlbGlhYmxlTWFyZ2luTGVmdFZhbCIsImNvbnRhaW5lciIsInJudW1ub25weCIsImdldFN0eWxlcyIsIm9wZW5lciIsImdldENvbXB1dGVkU3R5bGUiLCJyYm94U3R5bGUiLCJjb21wdXRlU3R5bGVUZXN0cyIsImRpdlN0eWxlIiwiY3NzVGV4dCIsInJvdW5kUGl4ZWxNZWFzdXJlcyIsIm1hcmdpbkxlZnQiLCJyaWdodCIsIndpZHRoIiwicG9zaXRpb24iLCJvZmZzZXRXaWR0aCIsIm1lYXN1cmUiLCJyb3VuZCIsInBhcnNlRmxvYXQiLCJjdXJDU1MiLCJjb21wdXRlZCIsIm1pbldpZHRoIiwibWF4V2lkdGgiLCJnZXRQcm9wZXJ0eVZhbHVlIiwicGl4ZWxCb3hTdHlsZXMiLCJhZGRHZXRIb29rSWYiLCJjb25kaXRpb25GbiIsImhvb2tGbiIsImJhY2tncm91bmRDbGlwIiwiY2xlYXJDbG9uZVN0eWxlIiwiYm94U2l6aW5nUmVsaWFibGUiLCJwaXhlbFBvc2l0aW9uIiwicmVsaWFibGVNYXJnaW5MZWZ0Iiwic2Nyb2xsYm94U2l6ZSIsInJlbGlhYmxlVHJEaW1lbnNpb25zIiwidGFibGUiLCJ0ckNoaWxkIiwidHJTdHlsZSIsImhlaWdodCIsInBhcnNlSW50IiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsIm9mZnNldEhlaWdodCIsImNzc1ByZWZpeGVzIiwiZW1wdHlTdHlsZSIsInZlbmRvclByb3BzIiwiZmluYWxQcm9wTmFtZSIsImZpbmFsIiwiY3NzUHJvcHMiLCJjYXBOYW1lIiwidmVuZG9yUHJvcE5hbWUiLCJyZGlzcGxheXN3YXAiLCJyY3VzdG9tUHJvcCIsImNzc1Nob3ciLCJ2aXNpYmlsaXR5IiwiY3NzTm9ybWFsVHJhbnNmb3JtIiwibGV0dGVyU3BhY2luZyIsImZvbnRXZWlnaHQiLCJzZXRQb3NpdGl2ZU51bWJlciIsInN1YnRyYWN0IiwibWF4IiwiYm94TW9kZWxBZGp1c3RtZW50IiwiZGltZW5zaW9uIiwiYm94IiwiaXNCb3JkZXJCb3giLCJzdHlsZXMiLCJjb21wdXRlZFZhbCIsImV4dHJhIiwiZGVsdGEiLCJjZWlsIiwiZ2V0V2lkdGhPckhlaWdodCIsInZhbHVlSXNCb3JkZXJCb3giLCJvZmZzZXRQcm9wIiwiZ2V0Q2xpZW50UmVjdHMiLCJUd2VlbiIsImVhc2luZyIsImNzc0hvb2tzIiwib3BhY2l0eSIsImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IiwiY29sdW1uQ291bnQiLCJmaWxsT3BhY2l0eSIsImZsZXhHcm93IiwiZmxleFNocmluayIsImdyaWRBcmVhIiwiZ3JpZENvbHVtbiIsImdyaWRDb2x1bW5FbmQiLCJncmlkQ29sdW1uU3RhcnQiLCJncmlkUm93IiwiZ3JpZFJvd0VuZCIsImdyaWRSb3dTdGFydCIsImxpbmVIZWlnaHQiLCJvcmRlciIsIm9ycGhhbnMiLCJ3aWRvd3MiLCJ6SW5kZXgiLCJ6b29tIiwib3JpZ05hbWUiLCJpc0N1c3RvbVByb3AiLCJzZXRQcm9wZXJ0eSIsImlzRmluaXRlIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwic2Nyb2xsYm94U2l6ZUJ1Z2d5IiwibGVmdCIsIm1hcmdpbiIsInBhZGRpbmciLCJib3JkZXIiLCJwcmVmaXgiLCJzdWZmaXgiLCJleHBhbmQiLCJleHBhbmRlZCIsInBhcnRzIiwicHJvcEhvb2tzIiwicnVuIiwicGVyY2VudCIsImVhc2VkIiwiZHVyYXRpb24iLCJwb3MiLCJzdGVwIiwiZngiLCJzY3JvbGxUb3AiLCJzY3JvbGxMZWZ0IiwibGluZWFyIiwicCIsInN3aW5nIiwiY29zIiwiUEkiLCJmeE5vdyIsImluUHJvZ3Jlc3MiLCJvcHQiLCJyZnh0eXBlcyIsInJydW4iLCJzY2hlZHVsZSIsImhpZGRlbiIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImludGVydmFsIiwidGljayIsImNyZWF0ZUZ4Tm93IiwiZ2VuRngiLCJpbmNsdWRlV2lkdGgiLCJjcmVhdGVUd2VlbiIsImFuaW1hdGlvbiIsIkFuaW1hdGlvbiIsInR3ZWVuZXJzIiwicHJvcGVydGllcyIsInN0b3BwZWQiLCJwcmVmaWx0ZXJzIiwiY3VycmVudFRpbWUiLCJzdGFydFRpbWUiLCJ0d2VlbnMiLCJvcHRzIiwic3BlY2lhbEVhc2luZyIsIm9yaWdpbmFsUHJvcGVydGllcyIsIm9yaWdpbmFsT3B0aW9ucyIsImdvdG9FbmQiLCJwcm9wRmlsdGVyIiwiYmluZCIsImNvbXBsZXRlIiwidGltZXIiLCJhbmltIiwiKiIsInR3ZWVuZXIiLCJvbGRmaXJlIiwicHJvcFR3ZWVuIiwicmVzdG9yZURpc3BsYXkiLCJpc0JveCIsImRhdGFTaG93IiwidW5xdWV1ZWQiLCJvdmVyZmxvdyIsIm92ZXJmbG93WCIsIm92ZXJmbG93WSIsInByZWZpbHRlciIsInNwZWVkIiwic3BlZWRzIiwiZmFkZVRvIiwidG8iLCJhbmltYXRlIiwiZG9BbmltYXRpb24iLCJvcHRhbGwiLCJmaW5pc2giLCJzdG9wUXVldWUiLCJ0aW1lcnMiLCJjc3NGbiIsInNsaWRlRG93biIsInNsaWRlVXAiLCJzbGlkZVRvZ2dsZSIsImZhZGVJbiIsImZhZGVPdXQiLCJmYWRlVG9nZ2xlIiwic2xvdyIsImZhc3QiLCJkZWxheSIsInRpbWUiLCJ0aW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiY2hlY2tPbiIsIm9wdFNlbGVjdGVkIiwicmFkaW9WYWx1ZSIsImJvb2xIb29rIiwicmVtb3ZlQXR0ciIsIm5UeXBlIiwiYXR0ckhvb2tzIiwiYXR0ck5hbWVzIiwiZ2V0dGVyIiwibG93ZXJjYXNlTmFtZSIsInJmb2N1c2FibGUiLCJyY2xpY2thYmxlIiwic3RyaXBBbmRDb2xsYXBzZSIsImdldENsYXNzIiwiY2xhc3Nlc1RvQXJyYXkiLCJyZW1vdmVQcm9wIiwicHJvcEZpeCIsInRhYmluZGV4IiwiZm9yIiwiY2xhc3MiLCJhZGRDbGFzcyIsImNsYXNzZXMiLCJjdXJWYWx1ZSIsImNsYXp6IiwiZmluYWxWYWx1ZSIsInJlbW92ZUNsYXNzIiwidG9nZ2xlQ2xhc3MiLCJzdGF0ZVZhbCIsImlzVmFsaWRWYWx1ZSIsImNsYXNzTmFtZXMiLCJoYXNDbGFzcyIsInJyZXR1cm4iLCJ2YWxIb29rcyIsIm9wdGlvblNldCIsImZvY3VzaW4iLCJzdG9wUHJvcGFnYXRpb25DYWxsYmFjayIsInJmb2N1c01vcnBoIiwib25seUhhbmRsZXJzIiwiYnViYmxlVHlwZSIsIm9udHlwZSIsImxhc3RFbGVtZW50IiwiZXZlbnRQYXRoIiwicGFyZW50V2luZG93Iiwic2ltdWxhdGUiLCJ0cmlnZ2VySGFuZGxlciIsImF0dGFjaGVzIiwicnF1ZXJ5IiwicGFyc2VYTUwiLCJwYXJzZXJFcnJvckVsZW0iLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciLCJyYnJhY2tldCIsInJDUkxGIiwicnN1Ym1pdHRlclR5cGVzIiwicnN1Ym1pdHRhYmxlIiwicGFyYW0iLCJ0cmFkaXRpb25hbCIsInZhbHVlT3JGdW5jdGlvbiIsInMiLCJlbmNvZGVVUklDb21wb25lbnQiLCJidWlsZFBhcmFtcyIsInNlcmlhbGl6ZSIsInNlcmlhbGl6ZUFycmF5IiwicjIwIiwicmhhc2giLCJyYW50aUNhY2hlIiwicmhlYWRlcnMiLCJybm9Db250ZW50IiwicnByb3RvY29sIiwidHJhbnNwb3J0cyIsImFsbFR5cGVzIiwib3JpZ2luQW5jaG9yIiwiYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzIiwic3RydWN0dXJlIiwiZGF0YVR5cGVFeHByZXNzaW9uIiwiZGF0YVR5cGUiLCJkYXRhVHlwZXMiLCJpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyIsImpxWEhSIiwiaW5zcGVjdGVkIiwic2Vla2luZ1RyYW5zcG9ydCIsImluc3BlY3QiLCJwcmVmaWx0ZXJPckZhY3RvcnkiLCJkYXRhVHlwZU9yVHJhbnNwb3J0IiwiYWpheEV4dGVuZCIsImZsYXRPcHRpb25zIiwiYWpheFNldHRpbmdzIiwiYWN0aXZlIiwibGFzdE1vZGlmaWVkIiwiZXRhZyIsInVybCIsImlzTG9jYWwiLCJwcm90b2NvbCIsInByb2Nlc3NEYXRhIiwiYXN5bmMiLCJjb250ZW50VHlwZSIsImFjY2VwdHMiLCJqc29uIiwicmVzcG9uc2VGaWVsZHMiLCJjb252ZXJ0ZXJzIiwiKiB0ZXh0IiwidGV4dCBodG1sIiwidGV4dCBqc29uIiwidGV4dCB4bWwiLCJhamF4U2V0dXAiLCJzZXR0aW5ncyIsImFqYXhQcmVmaWx0ZXIiLCJhamF4VHJhbnNwb3J0IiwiYWpheCIsInRyYW5zcG9ydCIsImNhY2hlVVJMIiwicmVzcG9uc2VIZWFkZXJzU3RyaW5nIiwicmVzcG9uc2VIZWFkZXJzIiwidGltZW91dFRpbWVyIiwidXJsQW5jaG9yIiwiZmlyZUdsb2JhbHMiLCJ1bmNhY2hlZCIsImNhbGxiYWNrQ29udGV4dCIsImdsb2JhbEV2ZW50Q29udGV4dCIsImNvbXBsZXRlRGVmZXJyZWQiLCJzdGF0dXNDb2RlIiwicmVxdWVzdEhlYWRlcnMiLCJyZXF1ZXN0SGVhZGVyc05hbWVzIiwic3RyQWJvcnQiLCJnZXRSZXNwb25zZUhlYWRlciIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInNldFJlcXVlc3RIZWFkZXIiLCJvdmVycmlkZU1pbWVUeXBlIiwibWltZVR5cGUiLCJzdGF0dXMiLCJhYm9ydCIsInN0YXR1c1RleHQiLCJmaW5hbFRleHQiLCJjcm9zc0RvbWFpbiIsImhvc3QiLCJoYXNDb250ZW50IiwiaWZNb2RpZmllZCIsImhlYWRlcnMiLCJiZWZvcmVTZW5kIiwic3VjY2VzcyIsInNlbmQiLCJuYXRpdmVTdGF0dXNUZXh0IiwicmVzcG9uc2VzIiwiaXNTdWNjZXNzIiwicmVzcG9uc2UiLCJtb2RpZmllZCIsImN0IiwiZmluYWxEYXRhVHlwZSIsImZpcnN0RGF0YVR5cGUiLCJhamF4SGFuZGxlUmVzcG9uc2VzIiwiY29udjIiLCJjdXJyZW50IiwiY29udiIsImRhdGFGaWx0ZXIiLCJ0aHJvd3MiLCJhamF4Q29udmVydCIsImdldEpTT04iLCJnZXRTY3JpcHQiLCJ0ZXh0IHNjcmlwdCIsIndyYXBBbGwiLCJmaXJzdEVsZW1lbnRDaGlsZCIsIndyYXBJbm5lciIsImh0bWxJc0Z1bmN0aW9uIiwidW53cmFwIiwidmlzaWJsZSIsInhociIsIlhNTEh0dHBSZXF1ZXN0IiwieGhyU3VjY2Vzc1N0YXR1cyIsIjAiLCIxMjIzIiwieGhyU3VwcG9ydGVkIiwiY29ycyIsImVycm9yQ2FsbGJhY2siLCJvcGVuIiwidXNlcm5hbWUiLCJ4aHJGaWVsZHMiLCJvbmxvYWQiLCJvbmVycm9yIiwib25hYm9ydCIsIm9udGltZW91dCIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlc3BvbnNlVHlwZSIsInJlc3BvbnNlVGV4dCIsImJpbmFyeSIsInNjcmlwdEF0dHJzIiwiY2hhcnNldCIsInNjcmlwdENoYXJzZXQiLCJldnQiLCJvbGRDYWxsYmFja3MiLCJyanNvbnAiLCJqc29ucCIsImpzb25wQ2FsbGJhY2siLCJvcmlnaW5hbFNldHRpbmdzIiwiY2FsbGJhY2tOYW1lIiwib3ZlcndyaXR0ZW4iLCJyZXNwb25zZUNvbnRhaW5lciIsImpzb25Qcm9wIiwiY3JlYXRlSFRNTERvY3VtZW50IiwiaW1wbGVtZW50YXRpb24iLCJrZWVwU2NyaXB0cyIsInBhcnNlZCIsInBhcmFtcyIsImFuaW1hdGVkIiwib2Zmc2V0Iiwic2V0T2Zmc2V0IiwiY3VyUG9zaXRpb24iLCJjdXJMZWZ0IiwiY3VyQ1NTVG9wIiwiY3VyVG9wIiwiY3VyT2Zmc2V0IiwiY3VyQ1NTTGVmdCIsImN1ckVsZW0iLCJ1c2luZyIsInJlY3QiLCJ3aW4iLCJwYWdlWU9mZnNldCIsInBhZ2VYT2Zmc2V0Iiwib2Zmc2V0UGFyZW50IiwicGFyZW50T2Zmc2V0Iiwic2Nyb2xsVG8iLCJIZWlnaHQiLCJXaWR0aCIsIiIsImRlZmF1bHRFeHRyYSIsImZ1bmNOYW1lIiwidW5iaW5kIiwiZGVsZWdhdGUiLCJ1bmRlbGVnYXRlIiwiaG92ZXIiLCJmbk92ZXIiLCJmbk91dCIsInByb3h5IiwiaG9sZFJlYWR5IiwiaG9sZCIsInBhcnNlSlNPTiIsImlzTnVtZXJpYyIsImlzTmFOIiwidHJpbSIsImRlZmluZSIsImFtZCIsIl9qUXVlcnkiLCJfJCIsIiQiLCJub0NvbmZsaWN0IiwidWkiLCJ3aWRnZXRVdWlkIiwid2lkZ2V0U2xpY2UiLCJ3aWRnZXQiLCJleGlzdGluZ0NvbnN0cnVjdG9yIiwiYmFzZVByb3RvdHlwZSIsInByb3hpZWRQcm90b3R5cGUiLCJmdWxsTmFtZSIsIldpZGdldCIsImVsZW1lbnQiLCJfY3JlYXRlV2lkZ2V0IiwiX3Byb3RvIiwiX2NoaWxkQ29uc3RydWN0b3JzIiwiX3N1cGVyIiwiX3N1cGVyQXBwbHkiLCJfX3N1cGVyIiwiX19zdXBlckFwcGx5Iiwid2lkZ2V0RXZlbnRQcmVmaXgiLCJ3aWRnZXROYW1lIiwid2lkZ2V0RnVsbE5hbWUiLCJjaGlsZCIsImNoaWxkUHJvdG90eXBlIiwiYnJpZGdlIiwiaW5wdXRJbmRleCIsImlucHV0TGVuZ3RoIiwiaXNNZXRob2RDYWxsIiwibWV0aG9kVmFsdWUiLCJpbnN0YW5jZSIsImNoYXJBdCIsIl9pbml0IiwiZGVmYXVsdEVsZW1lbnQiLCJ1dWlkIiwiZXZlbnROYW1lc3BhY2UiLCJiaW5kaW5ncyIsImhvdmVyYWJsZSIsImZvY3VzYWJsZSIsImNsYXNzZXNFbGVtZW50TG9va3VwIiwiX29uIiwiZGVzdHJveSIsIl9nZXRDcmVhdGVPcHRpb25zIiwiX2NyZWF0ZSIsIl9zZXRPcHRpb25EaXNhYmxlZCIsIl90cmlnZ2VyIiwiX2dldENyZWF0ZUV2ZW50RGF0YSIsIl9kZXN0cm95IiwiX3JlbW92ZUNsYXNzIiwiY3VyT3B0aW9uIiwiX3NldE9wdGlvbnMiLCJfc2V0T3B0aW9uIiwiX3NldE9wdGlvbkNsYXNzZXMiLCJjbGFzc0tleSIsImN1cnJlbnRFbGVtZW50cyIsIl9jbGFzc2VzIiwiX3RvZ2dsZUNsYXNzIiwiZW5hYmxlIiwiZnVsbCIsInByb2Nlc3NDbGFzc1N0cmluZyIsImNoZWNrT3B0aW9uIiwiX3VudHJhY2tDbGFzc2VzRWxlbWVudCIsIl9hZGRDbGFzcyIsInN1cHByZXNzRGlzYWJsZWRDaGVjayIsImRlbGVnYXRlRWxlbWVudCIsImhhbmRsZXJQcm94eSIsImV2ZW50TmFtZSIsIl9vZmYiLCJfZGVsYXkiLCJfaG92ZXJhYmxlIiwiX2ZvY3VzYWJsZSIsImZvY3Vzb3V0IiwiZGVmYXVsdEVmZmVjdCIsImhhc09wdGlvbnMiLCJlZmZlY3QiLCJlZmZlY3ROYW1lIiwiZWZmZWN0cyIsImNhY2hlZFNjcm9sbGJhcldpZHRoIiwiYWJzIiwicmhvcml6b250YWwiLCJydmVydGljYWwiLCJyb2Zmc2V0IiwicnBvc2l0aW9uIiwicnBlcmNlbnQiLCJfcG9zaXRpb24iLCJnZXRPZmZzZXRzIiwib2Zmc2V0cyIsInBhcnNlQ3NzIiwicHJvcGVydHkiLCJzY3JvbGxiYXJXaWR0aCIsIncxIiwidzIiLCJpbm5lckRpdiIsImNsaWVudFdpZHRoIiwiZ2V0U2Nyb2xsSW5mbyIsIndpdGhpbiIsImlzRG9jdW1lbnQiLCJoYXNPdmVyZmxvd1giLCJzY3JvbGxXaWR0aCIsInNjcm9sbEhlaWdodCIsImdldFdpdGhpbkluZm8iLCJ3aXRoaW5FbGVtZW50Iiwib3V0ZXJXaWR0aCIsIm91dGVySGVpZ2h0Iiwib2YiLCJhdE9mZnNldCIsInRhcmdldFdpZHRoIiwidGFyZ2V0SGVpZ2h0IiwidGFyZ2V0T2Zmc2V0IiwiYmFzZVBvc2l0aW9uIiwic2Nyb2xsSW5mbyIsImNvbGxpc2lvbiIsImRpbWVuc2lvbnMiLCJhdCIsImhvcml6b250YWxPZmZzZXQiLCJ2ZXJ0aWNhbE9mZnNldCIsImNvbGxpc2lvblBvc2l0aW9uIiwiZWxlbVdpZHRoIiwiZWxlbUhlaWdodCIsIm1hcmdpblRvcCIsImNvbGxpc2lvbldpZHRoIiwiY29sbGlzaW9uSGVpZ2h0IiwibXlPZmZzZXQiLCJteSIsImJvdHRvbSIsImZlZWRiYWNrIiwiaG9yaXpvbnRhbCIsInZlcnRpY2FsIiwiaW1wb3J0YW50IiwiZml0IiwibmV3T3ZlclJpZ2h0Iiwid2l0aGluT2Zmc2V0IiwiY29sbGlzaW9uUG9zTGVmdCIsIm92ZXJMZWZ0Iiwib3ZlclJpZ2h0IiwibmV3T3ZlckJvdHRvbSIsImNvbGxpc2lvblBvc1RvcCIsIm92ZXJUb3AiLCJvdmVyQm90dG9tIiwiZmxpcCIsIm5ld092ZXJMZWZ0Iiwib2Zmc2V0TGVmdCIsIm5ld092ZXJUb3AiLCJvZmZzZXRUb3AiLCJmbGlwZml0IiwiZGF0YU5hbWUiLCJkaXNhYmxlU2VsZWN0aW9uIiwiZXZlbnRUeXBlIiwiZW5hYmxlU2VsZWN0aW9uIiwiY29sb3JzIiwicnBsdXNlcXVhbHMiLCJzdHJpbmdQYXJzZXJzIiwiY29sb3IiLCJzcGFjZXMiLCJwcm9wVHlwZXMiLCJzdXBwb3J0RWxlbSIsImNsYXNzQW5pbWF0aW9uQWN0aW9ucyIsInNob3J0aGFuZFN0eWxlcyIsImJhc2VFYXNpbmdzIiwiZGF0YVNwYWNlIiwiZGF0YVNwYWNlU3R5bGUiLCJkYXRhU3BhY2VBbmltYXRlZCIsImNsYW1wIiwiYWxsb3dFbXB0eSIsImRlZiIsImZsb29yIiwibW9kIiwic3RyaW5nUGFyc2UiLCJpbnN0IiwicmdiYSIsIl9yZ2JhIiwicGFyc2VyIiwicmUiLCJzcGFjZU5hbWUiLCJzcGFjZSIsInRyYW5zcGFyZW50IiwiaHVlMnJnYiIsInEiLCJoIiwiZ2V0RWxlbWVudFN0eWxlcyIsImN1cnJlbnRTdHlsZSIsIl9ub3JtYWxpemVBcmd1bWVudHMiLCJzdGFuZGFyZEFuaW1hdGlvbk9wdGlvbiIsInBhcnNlQ2xpcCIsInN0ciIsImV4ZWNSZXN1bHQiLCJDb2xvciIsImdyZWVuIiwiYmx1ZSIsImFscGhhIiwicmVkIiwiaHNsYSIsImh1ZSIsInNhdHVyYXRpb24iLCJsaWdodG5lc3MiLCJieXRlIiwiZGVncmVlcyIsImJhY2tncm91bmRDb2xvciIsImZyb20iLCJzYW1lIiwibG9jYWxDYWNoZSIsImlzQ2FjaGUiLCJfc3BhY2UiLCJ1c2VkIiwidHJhbnNpdGlvbiIsIm90aGVyIiwiZGlzdGFuY2UiLCJzdGFydENvbG9yIiwic3RhcnRWYWx1ZSIsImVuZFZhbHVlIiwiYmxlbmQiLCJvcGFxdWUiLCJyZ2IiLCJ0b1JnYmFTdHJpbmciLCJ0b0hzbGFTdHJpbmciLCJ0b0hleFN0cmluZyIsImluY2x1ZGVBbHBoYSIsInIiLCJnIiwibWluIiwibG9jYWwiLCJ2dHlwZSIsIl9oc2xhIiwiY29sb3JJbml0IiwiYm9yZGVyQ29sb3IiLCJwYXJ0IiwibmFtZXMiLCJhcXVhIiwiYmxhY2siLCJmdWNoc2lhIiwiZ3JheSIsImxpbWUiLCJtYXJvb24iLCJuYXZ5Iiwib2xpdmUiLCJwdXJwbGUiLCJzaWx2ZXIiLCJ0ZWFsIiwid2hpdGUiLCJ5ZWxsb3ciLCJib3JkZXJCb3R0b20iLCJib3JkZXJMZWZ0IiwiYm9yZGVyUmlnaHQiLCJib3JkZXJUb3AiLCJib3JkZXJXaWR0aCIsInNldEF0dHIiLCJhbmltYXRlQ2xhc3MiLCJvIiwiYmFzZUNsYXNzIiwiYWxsQW5pbWF0aW9ucyIsImFwcGx5Q2xhc3NDaGFuZ2UiLCJhY3Rpb24iLCJvbGRTdHlsZSIsIm5ld1N0eWxlIiwic3R5bGVEaWZmZXJlbmNlIiwic3R5bGVJbmZvIiwiZGZkIiwiZm9yY2UiLCJzd2l0Y2hDbGFzcyIsInVpQmFja0NvbXBhdCIsInNhdmUiLCJyZXN0b3JlIiwic2V0TW9kZSIsIm1vZGUiLCJjcmVhdGVXcmFwcGVyIiwiZmxvYXQiLCJ3cmFwcGVyIiwiZm9udFNpemUiLCJiYWNrZ3JvdW5kIiwic2l6ZSIsInJlbW92ZVdyYXBwZXIiLCJzY2FsZWREaW1lbnNpb25zIiwiZGlyZWN0aW9uIiwieCIsInkiLCJjbGlwVG9Cb3giLCJjbGlwIiwicXVldWVMZW5ndGgiLCJzYXZlU3R5bGUiLCJyZXN0b3JlU3R5bGUiLCJnZXRCYXNlbGluZSIsIm9yaWdpbiIsImNyZWF0ZVBsYWNlaG9sZGVyIiwicGxhY2Vob2xkZXIiLCJjc3NQb3NpdGlvbiIsIm1hcmdpbkJvdHRvbSIsIm1hcmdpblJpZ2h0IiwicmVtb3ZlUGxhY2Vob2xkZXIiLCJkYXRhS2V5IiwiY2xlYW5VcCIsInNldFRyYW5zaXRpb24iLCJmYWN0b3IiLCJjc3NVbml0Iiwibm9ybWFsaXplZE1vZGUiLCJkZWZhdWx0TW9kZSIsIm1vZGVzIiwiZWZmZWN0TWV0aG9kIiwicXVldWVOYW1lIiwiY3NzQ2xpcCIsImNsaXBPYmoiLCJ0cmFuc2ZlciIsInRhcmdldEZpeGVkIiwiZml4VG9wIiwiZml4TGVmdCIsImVuZFBvc2l0aW9uIiwiaW5uZXJIZWlnaHQiLCJpbm5lcldpZHRoIiwic3RhcnRQb3NpdGlvbiIsImNsaXBJbml0IiwicG93IiwiU2luZSIsIkNpcmMiLCJzcXJ0IiwiRWxhc3RpYyIsInNpbiIsIkJhY2siLCJCb3VuY2UiLCJwb3cyIiwiYm91bmNlIiwiZWFzZUluIiwidXAiLCJkb3duIiwidXBBbmltIiwiZG93bkFuaW0iLCJyZWZWYWx1ZSIsInRpbWVzIiwiYW5pbXMiLCJyZWYiLCJtb3Rpb24iLCJxdWV1ZWxlbiIsImJvdGgiLCJvcHBvc2l0ZU1vdGlvbiIsIm14Iiwicm93cyIsInBpZWNlcyIsImNlbGxzIiwiY2hpbGRDb21wbGV0ZSIsImhvcml6Rmlyc3QiLCJhbmltYXRpb24xIiwiYW5pbWF0aW9uMiIsImJhY2tncm91bmRJbWFnZSIsImJhc2VsaW5lIiwiY1Byb3BzIiwidlByb3BzIiwiaFByb3BzIiwiY2hpbGRPcmlnaW5hbCIsImNoaWxkRnJvbSIsImNoaWxkVG8iLCJuZXdPcHRpb25zIiwiZmFkZSIsInNob3doaWRlIiwiYW5pbWF0ZVRvIiwicG9zaXRpdmVNb3Rpb24iLCJzdGFydENsaXAiLCJzdGFydFJlZiIsImhhc1RhYmluZGV4IiwibWFwTmFtZSIsImltZyIsImZvY3VzYWJsZUlmVmlzaWJsZSIsImZpZWxkc2V0IiwiZm9ybSIsImZvcm1SZXNldE1peGluIiwiX2Zvcm1SZXNldEhhbmRsZXIiLCJpbnN0YW5jZXMiLCJyZWZyZXNoIiwiX2JpbmRGb3JtUmVzZXRIYW5kbGVyIiwiX3VuYmluZEZvcm1SZXNldEhhbmRsZXIiLCJzdWJzdHJpbmciLCJzaWRlIiwicmVkdWNlIiwic2VsZWN0b3JFc2NhcGUiLCJCQUNLU1BBQ0UiLCJDT01NQSIsIkRFTEVURSIsIkRPV04iLCJFTkQiLCJFTlRFUiIsIkVTQ0FQRSIsIkhPTUUiLCJMRUZUIiwiUEFHRV9ET1dOIiwiUEFHRV9VUCIsIlBFUklPRCIsIlJJR0hUIiwiU1BBQ0UiLCJUQUIiLCJVUCIsImxhYmVscyIsImFuY2VzdG9yIiwiYW5jZXN0b3JzIiwic2Nyb2xsUGFyZW50IiwiaW5jbHVkZUhpZGRlbiIsImV4Y2x1ZGVTdGF0aWNQYXJlbnQiLCJvdmVyZmxvd1JlZ2V4IiwidGFiYmFibGUiLCJ1bmlxdWVJZCIsInJlbW92ZVVuaXF1ZUlkIiwidWktYWNjb3JkaW9uLWhlYWRlciIsInVpLWFjY29yZGlvbi1oZWFkZXItY29sbGFwc2VkIiwidWktYWNjb3JkaW9uLWNvbnRlbnQiLCJjb2xsYXBzaWJsZSIsImhlaWdodFN0eWxlIiwiaWNvbnMiLCJhY3RpdmVIZWFkZXIiLCJhY3RpdmF0ZSIsImJlZm9yZUFjdGl2YXRlIiwiaGlkZVByb3BzIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iLCJzaG93UHJvcHMiLCJwcmV2U2hvdyIsInByZXZIaWRlIiwiX3Byb2Nlc3NQYW5lbHMiLCJfcmVmcmVzaCIsInBhbmVsIiwiX2NyZWF0ZUljb25zIiwiaWNvbiIsIl9kZXN0cm95SWNvbnMiLCJfc2V0dXBFdmVudHMiLCJfYWN0aXZhdGUiLCJfa2V5ZG93biIsImN1cnJlbnRJbmRleCIsInRvRm9jdXMiLCJfZXZlbnRIYW5kbGVyIiwiX3BhbmVsS2V5RG93biIsInByZXZIZWFkZXJzIiwicHJldlBhbmVscyIsInBhbmVscyIsIm1heEhlaWdodCIsIl9maW5kQWN0aXZlIiwiaGVhZGVySWQiLCJwYW5lbElkIiwiYXJpYS1zZWxlY3RlZCIsImFyaWEtZXhwYW5kZWQiLCJhcmlhLWhpZGRlbiIsImlzVmlzaWJsZSIsImtleWRvd24iLCJhY3RpdmVDaGlsZHJlbiIsImNsaWNrZWRDaGlsZHJlbiIsImNsaWNrZWQiLCJjbGlja2VkSXNBY3RpdmUiLCJjb2xsYXBzaW5nIiwidG9TaG93IiwidG9IaWRlIiwiZXZlbnREYXRhIiwib2xkSGVhZGVyIiwib2xkUGFuZWwiLCJuZXdIZWFkZXIiLCJuZXdQYW5lbCIsIl90b2dnbGUiLCJfYW5pbWF0ZSIsIl90b2dnbGVDb21wbGV0ZSIsInRvdGFsIiwiYWRqdXN0IiwiYm94U2l6aW5nIiwic3VibWVudSIsIml0ZW1zIiwibWVudXMiLCJyb2xlIiwiYWN0aXZlTWVudSIsIm1vdXNlSGFuZGxlZCIsIm1vdXNlZG93biAudWktbWVudS1pdGVtIiwiY2xpY2sgLnVpLW1lbnUtaXRlbSIsIm1vdXNlZW50ZXIgLnVpLW1lbnUtaXRlbSIsImFjdHVhbFRhcmdldCIsInByZXZpb3VzRmlsdGVyIiwibW91c2VsZWF2ZSAudWktbWVudSIsImtlZXBBY3RpdmVJdGVtIiwiY29sbGFwc2VBbGwiLCJfY2xvc2VPbkRvY3VtZW50Q2xpY2siLCJzdWJtZW51cyIsImNoYXJhY3RlciIsInByZXZpb3VzUGFnZSIsIm5leHRQYWdlIiwiX21vdmUiLCJwcmV2aW91cyIsImNvbGxhcHNlIiwiZmlsdGVyVGltZXIiLCJfZmlsdGVyTWVudUl0ZW1zIiwibmV3U3VibWVudXMiLCJuZXdJdGVtcyIsIm5ld1dyYXBwZXJzIiwibWVudSIsInN1Ym1lbnVDYXJldCIsIl9pc0RpdmlkZXIiLCJfaXRlbVJvbGUiLCJsaXN0Ym94IiwibmVzdGVkIiwiZm9jdXNlZCIsImFjdGl2ZVBhcmVudCIsIl9zY3JvbGxJbnRvVmlldyIsIl9jbG9zZSIsIl9zdGFydE9wZW5pbmciLCJzY3JvbGwiLCJlbGVtZW50SGVpZ2h0IiwiaXRlbUhlaWdodCIsIl9oYXNTY3JvbGwiLCJmcm9tRm9jdXMiLCJfb3BlbiIsImFsbCIsImN1cnJlbnRNZW51Iiwic3RhcnRNZW51IiwibmV3SXRlbSIsImlzRmlyc3RJdGVtIiwiaXNMYXN0SXRlbSIsImVzY2FwZWRDaGFyYWN0ZXIiLCJyZWdleCIsImF1dG9Gb2N1cyIsIm1pbkxlbmd0aCIsImNoYW5nZSIsImNsb3NlIiwic2VhcmNoIiwicmVxdWVzdEluZGV4IiwicGVuZGluZyIsInN1cHByZXNzS2V5UHJlc3MiLCJzdXBwcmVzc0tleVByZXNzUmVwZWF0Iiwic3VwcHJlc3NJbnB1dCIsImlzVGV4dGFyZWEiLCJpc0lucHV0IiwiaXNNdWx0aUxpbmUiLCJfaXNDb250ZW50RWRpdGFibGUiLCJ2YWx1ZU1ldGhvZCIsImlzTmV3TWVudSIsIl9rZXlFdmVudCIsIl92YWx1ZSIsInRlcm0iLCJfc2VhcmNoVGltZW91dCIsImtleXByZXNzIiwic2VsZWN0ZWRJdGVtIiwiY2FuY2VsQmx1ciIsInNlYXJjaGluZyIsIl9jaGFuZ2UiLCJfaW5pdFNvdXJjZSIsIl9hcHBlbmRUbyIsIm1vdXNlZG93biIsIm1lbnVmb2N1cyIsImxhYmVsIiwibGl2ZVJlZ2lvbiIsIm1lbnVzZWxlY3QiLCJhcmlhLWxpdmUiLCJhcmlhLXJlbGV2YW50IiwiX2lzRXZlbnRUYXJnZXRJbldpZGdldCIsIm1lbnVFbGVtZW50IiwiX2Nsb3NlT25DbGlja091dHNpZGUiLCJyZXF1ZXN0IiwiYXV0b2NvbXBsZXRlIiwiZXF1YWxWYWx1ZXMiLCJtZW51VmlzaWJsZSIsIm1vZGlmaWVyS2V5IiwiX3NlYXJjaCIsImNhbmNlbFNlYXJjaCIsIl9yZXNwb25zZSIsIl9fcmVzcG9uc2UiLCJfbm9ybWFsaXplIiwiX3N1Z2dlc3QiLCJ1bCIsIl9yZW5kZXJNZW51IiwiX3Jlc2l6ZU1lbnUiLCJfcmVuZGVySXRlbURhdGEiLCJfcmVuZGVySXRlbSIsImtleUV2ZW50IiwiZWRpdGFibGUiLCJlc2NhcGVSZWdleCIsIm1lc3NhZ2VzIiwibm9SZXN1bHRzIiwiYW1vdW50IiwiY29udHJvbGdyb3VwQ29ybmVyUmVnZXgiLCJvbmx5VmlzaWJsZSIsImNvbnRyb2xncm91cExhYmVsIiwiY2hlY2tib3hyYWRpbyIsInNlbGVjdG1lbnUiLCJzcGlubmVyIiwiX2VuaGFuY2UiLCJfY2FsbENoaWxkTWV0aG9kIiwiY2hpbGRXaWRnZXRzIiwiX2luaXRXaWRnZXRzIiwid2lkZ2V0RWxlbWVudCIsImluc3RhbmNlT3B0aW9ucyIsIl9yZXNvbHZlQ2xhc3Nlc1ZhbHVlcyIsIl91cGRhdGVDb3JuZXJDbGFzcyIsIl9idWlsZFNpbXBsZU9wdGlvbnMiLCJtaWRkbGUiLCJvbmx5IiwiX3NwaW5uZXJPcHRpb25zIiwiX2J1dHRvbk9wdGlvbnMiLCJfY2hlY2tib3hyYWRpb09wdGlvbnMiLCJfc2VsZWN0bWVudU9wdGlvbnMiLCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1vcGVuIiwidWktc2VsZWN0bWVudS1idXR0b24tY2xvc2VkIiwidWktY2hlY2tib3hyYWRpby1sYWJlbCIsInVpLWNoZWNrYm94cmFkaW8taWNvbiIsIl9yZWFkVHlwZSIsIm9yaWdpbmFsTGFiZWwiLCJvdXRlckhUTUwiLCJfdXBkYXRlTGFiZWwiLCJfdXBkYXRlSWNvbiIsIl9nZXRSYWRpb0dyb3VwIiwibmFtZVNlbGVjdG9yIiwiX3RvZ2dsZUNsYXNzZXMiLCJpY29uU3BhY2UiLCJ0b0FkZCIsInVpLWJ1dHRvbiIsImljb25Qb3NpdGlvbiIsInNob3dMYWJlbCIsImhhc1RpdGxlIiwia2V5dXAiLCJfdXBkYXRlVG9vbHRpcCIsInRpdGxlIiwiZGlzcGxheUJsb2NrIiwiX2F0dGFjaEljb24iLCJfYXR0YWNoSWNvblNwYWNlIiwibmV3U2hvd0xhYmVsIiwibmV3SWNvbiIsInNlY29uZGFyeSIsInRhZ05hbWUiLCJidXR0b25zZXQiLCJjb250cm9sZ3JvdXAiLCJkYXRlcGlja2VyX2luc3RBY3RpdmUiLCJEYXRlcGlja2VyIiwiX2N1ckluc3QiLCJfZGlzYWJsZWRJbnB1dHMiLCJfZGF0ZXBpY2tlclNob3dpbmciLCJfaW5EaWFsb2ciLCJfbWFpbkRpdklkIiwiX2lubGluZUNsYXNzIiwiX2FwcGVuZENsYXNzIiwiX3RyaWdnZXJDbGFzcyIsIl9kaWFsb2dDbGFzcyIsIl9kaXNhYmxlQ2xhc3MiLCJfdW5zZWxlY3RhYmxlQ2xhc3MiLCJfY3VycmVudENsYXNzIiwiX2RheU92ZXJDbGFzcyIsInJlZ2lvbmFsIiwiY2xvc2VUZXh0IiwicHJldlRleHQiLCJuZXh0VGV4dCIsImN1cnJlbnRUZXh0IiwibW9udGhOYW1lcyIsIm1vbnRoTmFtZXNTaG9ydCIsImRheU5hbWVzIiwiZGF5TmFtZXNTaG9ydCIsImRheU5hbWVzTWluIiwid2Vla0hlYWRlciIsImRhdGVGb3JtYXQiLCJmaXJzdERheSIsImlzUlRMIiwic2hvd01vbnRoQWZ0ZXJZZWFyIiwieWVhclN1ZmZpeCIsIl9kZWZhdWx0cyIsInNob3dPbiIsInNob3dBbmltIiwic2hvd09wdGlvbnMiLCJkZWZhdWx0RGF0ZSIsImFwcGVuZFRleHQiLCJidXR0b25UZXh0IiwiYnV0dG9uSW1hZ2UiLCJidXR0b25JbWFnZU9ubHkiLCJoaWRlSWZOb1ByZXZOZXh0IiwibmF2aWdhdGlvbkFzRGF0ZUZvcm1hdCIsImdvdG9DdXJyZW50IiwiY2hhbmdlTW9udGgiLCJjaGFuZ2VZZWFyIiwieWVhclJhbmdlIiwic2hvd090aGVyTW9udGhzIiwic2VsZWN0T3RoZXJNb250aHMiLCJzaG93V2VlayIsImNhbGN1bGF0ZVdlZWsiLCJpc284NjAxV2VlayIsInNob3J0WWVhckN1dG9mZiIsIm1pbkRhdGUiLCJtYXhEYXRlIiwiYmVmb3JlU2hvd0RheSIsImJlZm9yZVNob3ciLCJvblNlbGVjdCIsIm9uQ2hhbmdlTW9udGhZZWFyIiwib25DbG9zZSIsIm51bWJlck9mTW9udGhzIiwic2hvd0N1cnJlbnRBdFBvcyIsInN0ZXBNb250aHMiLCJzdGVwQmlnTW9udGhzIiwiYWx0RmllbGQiLCJhbHRGb3JtYXQiLCJjb25zdHJhaW5JbnB1dCIsInNob3dCdXR0b25QYW5lbCIsImF1dG9TaXplIiwiZW4iLCJkcERpdiIsImRhdGVwaWNrZXJfYmluZEhvdmVyIiwiZGF0ZXBpY2tlcl9oYW5kbGVNb3VzZW92ZXIiLCJkYXRlcGlja2VyIiwiX2lzRGlzYWJsZWREYXRlcGlja2VyIiwiaW5saW5lIiwiZGF0ZXBpY2tlcl9leHRlbmRSZW1vdmUiLCJtYXJrZXJDbGFzc05hbWUiLCJtYXhSb3dzIiwiX3dpZGdldERhdGVwaWNrZXIiLCJzZXREZWZhdWx0cyIsIl9hdHRhY2hEYXRlcGlja2VyIiwiX25ld0luc3QiLCJfY29ubmVjdERhdGVwaWNrZXIiLCJfaW5saW5lRGF0ZXBpY2tlciIsInNlbGVjdGVkRGF5Iiwic2VsZWN0ZWRNb250aCIsInNlbGVjdGVkWWVhciIsImRyYXdNb250aCIsImRyYXdZZWFyIiwiX2F0dGFjaG1lbnRzIiwiX2RvS2V5RG93biIsIl9kb0tleVByZXNzIiwiX2RvS2V5VXAiLCJfYXV0b1NpemUiLCJfZGlzYWJsZURhdGVwaWNrZXIiLCJfZ2V0IiwiX3Nob3dEYXRlcGlja2VyIiwiYWx0IiwiX2xhc3RJbnB1dCIsIl9oaWRlRGF0ZXBpY2tlciIsImZpbmRNYXgiLCJtYXhJIiwiZGF0ZSIsInNldE1vbnRoIiwic2V0RGF0ZSIsImdldERheSIsIl9mb3JtYXREYXRlIiwiZGl2U3BhbiIsIl9zZXREYXRlIiwiX2dldERlZmF1bHREYXRlIiwiX3VwZGF0ZURhdGVwaWNrZXIiLCJfdXBkYXRlQWx0ZXJuYXRlIiwiX2RpYWxvZ0RhdGVwaWNrZXIiLCJicm93c2VyV2lkdGgiLCJicm93c2VySGVpZ2h0Iiwic2Nyb2xsWCIsInNjcm9sbFkiLCJfZGlhbG9nSW5zdCIsIl9kaWFsb2dJbnB1dCIsIl9wb3MiLCJjbGllbnRIZWlnaHQiLCJibG9ja1VJIiwiX2Rlc3Ryb3lEYXRlcGlja2VyIiwiJHRhcmdldCIsIl9lbmFibGVEYXRlcGlja2VyIiwiY3Vyc29yIiwiX2dldEluc3QiLCJfb3B0aW9uRGF0ZXBpY2tlciIsIl9nZXREYXRlRGF0ZXBpY2tlciIsIl9nZXRNaW5NYXhEYXRlIiwiX2NoYW5nZURhdGVwaWNrZXIiLCJfcmVmcmVzaERhdGVwaWNrZXIiLCJfc2V0RGF0ZURhdGVwaWNrZXIiLCJub0RlZmF1bHQiLCJfc2V0RGF0ZUZyb21GaWVsZCIsIl9nZXREYXRlIiwiZGF0ZVN0ciIsImhhbmRsZWQiLCJfc2VsZWN0RGF5IiwiX2FkanVzdERhdGUiLCJfY2xlYXJEYXRlIiwiX2dvdG9Ub2RheSIsImNoYXJzIiwiY2hyIiwiX3Bvc3NpYmxlQ2hhcnMiLCJsYXN0VmFsIiwicGFyc2VEYXRlIiwiX2dldEZvcm1hdENvbmZpZyIsImJlZm9yZVNob3dTZXR0aW5ncyIsImlzRml4ZWQiLCJfZmluZFBvcyIsIl9jaGVja09mZnNldCIsImRhdGVwaWNrZXJfZ2V0WmluZGV4IiwiX3Nob3VsZEZvY3VzSW5wdXQiLCJfZ2VuZXJhdGVIVE1MIiwiX2F0dGFjaEhhbmRsZXJzIiwib3JpZ3llYXJzaHRtbCIsIm51bU1vbnRocyIsIl9nZXROdW1iZXJPZk1vbnRocyIsImNvbHMiLCJhY3RpdmVDZWxsIiwieWVhcnNodG1sIiwiZHBXaWR0aCIsImRwSGVpZ2h0IiwiaW5wdXRXaWR0aCIsImlucHV0SGVpZ2h0Iiwidmlld1dpZHRoIiwidmlld0hlaWdodCIsInBvc3RQcm9jZXNzIiwiX3RpZHlEaWFsb2ciLCJ1bmJsb2NrVUkiLCJfY2hlY2tFeHRlcm5hbENsaWNrIiwicGVyaW9kIiwiX2FkanVzdEluc3REYXRlIiwiY3VycmVudERheSIsImN1cnJlbnRNb250aCIsImN1cnJlbnRZZWFyIiwiZ2V0RGF0ZSIsImdldE1vbnRoIiwiZ2V0RnVsbFllYXIiLCJfbm90aWZ5Q2hhbmdlIiwiX3NlbGVjdE1vbnRoWWVhciIsIm1vbnRoIiwieWVhciIsIl9zZWxlY3REYXRlIiwiZm9ybWF0RGF0ZSIsIm5vV2Vla2VuZHMiLCJkYXkiLCJjaGVja0RhdGUiLCJnZXRUaW1lIiwiZm9ybWF0IiwibG9va0FoZWFkIiwiaUZvcm1hdCIsImdldE51bWJlciIsImlzRG91YmxlZCIsImRpZ2l0cyIsImlWYWx1ZSIsImdldE5hbWUiLCJzaG9ydE5hbWVzIiwibG9uZ05hbWVzIiwiayIsInBhaXIiLCJzdWJzdHIiLCJjaGVja0xpdGVyYWwiLCJkaW0iLCJzaG9ydFllYXJDdXRvZmZUZW1wIiwiZG95IiwibGl0ZXJhbCIsIl90aWNrc1RvMTk3MCIsIl9nZXREYXlzSW5Nb250aCIsIl9kYXlsaWdodFNhdmluZ0FkanVzdCIsIkFUT00iLCJDT09LSUUiLCJJU09fODYwMSIsIlJGQ184MjIiLCJSRkNfODUwIiwiUkZDXzEwMzYiLCJSRkNfMTEyMyIsIlJGQ18yODIyIiwiUlNTIiwiVElDS1MiLCJUSU1FU1RBTVAiLCJXM0MiLCJmb3JtYXROdW1iZXIiLCJmb3JtYXROYW1lIiwib3V0cHV0IiwiZGF0ZXMiLCJfcmVzdHJpY3RNaW5NYXgiLCJfZGV0ZXJtaW5lRGF0ZSIsIm5ld0RhdGUiLCJvZmZzZXRTdHJpbmciLCJzZXRIb3VycyIsInNldE1pbnV0ZXMiLCJzZXRTZWNvbmRzIiwic2V0TWlsbGlzZWNvbmRzIiwiZ2V0SG91cnMiLCJub0NoYW5nZSIsImNsZWFyIiwib3JpZ01vbnRoIiwib3JpZ1llYXIiLCJ0b2RheSIsInNlbGVjdERheSIsInNlbGVjdE1vbnRoIiwic2VsZWN0WWVhciIsIm1heERyYXciLCJnb3RvRGF0ZSIsImNvbnRyb2xzIiwiYnV0dG9uUGFuZWwiLCJkb3ciLCJyb3ciLCJncm91cCIsInNlbGVjdGVkRGF0ZSIsImNvcm5lckNsYXNzIiwiY2FsZW5kZXIiLCJkYXlzSW5Nb250aCIsImxlYWREYXlzIiwiY3VyUm93cyIsIm51bVJvd3MiLCJwcmludERhdGUiLCJkUm93IiwiZGF5U2V0dGluZ3MiLCJvdGhlck1vbnRoIiwidW5zZWxlY3RhYmxlIiwidGVtcERhdGUiLCJpc011bHRpTW9udGgiLCJjdXJyZW50RGF0ZSIsIl9jYW5BZGp1c3RNb250aCIsIl9pc0luUmFuZ2UiLCJfZ2VuZXJhdGVNb250aFllYXJIZWFkZXIiLCJfZ2V0Rmlyc3REYXlPZk1vbnRoIiwiaW5NaW5ZZWFyIiwiaW5NYXhZZWFyIiwieWVhcnMiLCJ0aGlzWWVhciIsImRldGVybWluZVllYXIiLCJlbmRZZWFyIiwibW9udGhIdG1sIiwib25DaGFuZ2UiLCJtaW5NYXgiLCJjdXJZZWFyIiwiY3VyTW9udGgiLCJ5ZWFyU3BsaXQiLCJtaW5ZZWFyIiwibWF4WWVhciIsImluaXRpYWxpemVkIiwib3RoZXJBcmdzIiwiaWUiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJjYW5jZWwiLCJfbW91c2VJbml0IiwiX21vdXNlRG93biIsInN0YXJ0ZWQiLCJfbW91c2VEZXN0cm95IiwiX21vdXNlTW92ZURlbGVnYXRlIiwiX21vdXNlVXBEZWxlZ2F0ZSIsIl9tb3VzZU1vdmVkIiwiX21vdXNlU3RhcnRlZCIsIl9tb3VzZVVwIiwiX21vdXNlRG93bkV2ZW50IiwiYnRuSXNMZWZ0IiwiZWxJc0NhbmNlbCIsIl9tb3VzZUNhcHR1cmUiLCJtb3VzZURlbGF5TWV0IiwiX21vdXNlRGVsYXlUaW1lciIsIl9tb3VzZURpc3RhbmNlTWV0IiwiX21vdXNlRGVsYXlNZXQiLCJfbW91c2VTdGFydCIsIl9tb3VzZU1vdmUiLCJkb2N1bWVudE1vZGUiLCJpZ25vcmVNaXNzaW5nV2hpY2giLCJfbW91c2VEcmFnIiwiX21vdXNlU3RvcCIsInBsdWdpbiIsInBsdWdpbnMiLCJhbGxvd0Rpc2Nvbm5lY3RlZCIsInNhZmVCbHVyIiwibW91c2UiLCJhZGRDbGFzc2VzIiwiYXhpcyIsImNvbm5lY3RUb1NvcnRhYmxlIiwiY29udGFpbm1lbnQiLCJjdXJzb3JBdCIsImdyaWQiLCJoZWxwZXIiLCJpZnJhbWVGaXgiLCJyZWZyZXNoUG9zaXRpb25zIiwicmV2ZXJ0IiwicmV2ZXJ0RHVyYXRpb24iLCJzY3JvbGxTZW5zaXRpdml0eSIsInNjcm9sbFNwZWVkIiwic25hcCIsInNuYXBNb2RlIiwic25hcFRvbGVyYW5jZSIsImRyYWciLCJfc2V0UG9zaXRpb25SZWxhdGl2ZSIsIl9zZXRIYW5kbGVDbGFzc05hbWUiLCJfcmVtb3ZlSGFuZGxlQ2xhc3NOYW1lIiwiZGVzdHJveU9uQ2xlYXIiLCJfZ2V0SGFuZGxlIiwiX2JsdXJBY3RpdmVFbGVtZW50IiwiX2Jsb2NrRnJhbWVzIiwiaWZyYW1lQmxvY2tzIiwiaWZyYW1lIiwiX3VuYmxvY2tGcmFtZXMiLCJfY3JlYXRlSGVscGVyIiwiX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMiLCJkZG1hbmFnZXIiLCJfY2FjaGVNYXJnaW5zIiwiaGFzRml4ZWRBbmNlc3RvciIsInBvc2l0aW9uQWJzIiwiX3JlZnJlc2hPZmZzZXRzIiwib3JpZ2luYWxQb3NpdGlvbiIsIl9nZW5lcmF0ZVBvc2l0aW9uIiwib3JpZ2luYWxQYWdlWCIsIm9yaWdpbmFsUGFnZVkiLCJfYWRqdXN0T2Zmc2V0RnJvbUhlbHBlciIsIl9zZXRDb250YWlubWVudCIsIl9jbGVhciIsImRyb3BCZWhhdmlvdXIiLCJwcmVwYXJlT2Zmc2V0cyIsImRyYWdTdGFydCIsIm1hcmdpbnMiLCJfZ2V0UGFyZW50T2Zmc2V0IiwiX2dldFJlbGF0aXZlT2Zmc2V0Iiwibm9Qcm9wYWdhdGlvbiIsIl9jb252ZXJ0UG9zaXRpb25UbyIsIl91aUhhc2giLCJkcm9wcGVkIiwiZHJvcCIsImRyYWdTdG9wIiwiaGFuZGxlRWxlbWVudCIsImhlbHBlcklzRnVuY3Rpb24iLCJoZWxwZXJQcm9wb3J0aW9ucyIsIl9pc1Jvb3ROb2RlIiwicG8iLCJzY3JvbGxJc1Jvb3ROb2RlIiwiaXNVc2VyU2Nyb2xsYWJsZSIsImMiLCJjZSIsInJlbGF0aXZlQ29udGFpbmVyIiwiZCIsImNvbnN0cmFpblBvc2l0aW9uIiwiY28iLCJjYW5jZWxIZWxwZXJSZW1vdmFsIiwiZHJhZ2dhYmxlIiwidWlTb3J0YWJsZSIsInNvcnRhYmxlcyIsInNvcnRhYmxlIiwiaXNPdmVyIiwiX3N0b3JlZENTUyIsIl9oZWxwZXIiLCJpbm5lcm1vc3RJbnRlcnNlY3RpbmciLCJfaW50ZXJzZWN0c1dpdGgiLCJjb250YWluZXJDYWNoZSIsIl9wYXJlbnQiLCJjdXJyZW50SXRlbSIsImZyb21PdXRzaWRlIiwiX3JldmVydCIsIl9jdXJzb3IiLCJfb3BhY2l0eSIsInNjcm9sbFBhcmVudE5vdEhpZGRlbiIsIk5vZGUiLCJET0NVTUVOVF9OT0RFIiwib3ZlcmZsb3dPZmZzZXQiLCJzY3JvbGxlZCIsInNuYXBFbGVtZW50cyIsIiR0IiwiJG8iLCJ0cyIsImJzIiwibHMiLCJycyIsIngxIiwieDIiLCJ5MSIsInkyIiwic25hcHBpbmciLCJyZWxlYXNlIiwic25hcEl0ZW0iLCJfekluZGV4IiwiYWxzb1Jlc2l6ZSIsImFuaW1hdGVEdXJhdGlvbiIsImFuaW1hdGVFYXNpbmciLCJhc3BlY3RSYXRpbyIsImF1dG9IaWRlIiwidWktcmVzaXphYmxlLXNlIiwiZ2hvc3QiLCJoYW5kbGVzIiwibWluSGVpZ2h0IiwicmVzaXplIiwiX251bSIsIl9pc051bWJlciIsIl9hc3BlY3RSYXRpbyIsIm9yaWdpbmFsRWxlbWVudCIsIl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzIiwicmVzaXphYmxlIiwiZWxlbWVudElzV3JhcHBlciIsIm9yaWdpbmFsUmVzaXplU3R5bGUiLCJfcHJvcG9ydGlvbmFsbHlSZXNpemUiLCJfc2V0dXBIYW5kbGVzIiwiX2hhbmRsZXMiLCJyZXNpemluZyIsImV4cCIsIl9yZW1vdmVIYW5kbGVzIiwiaG5hbWUiLCJzZSIsInN3IiwibmUiLCJudyIsIl9yZW5kZXJBeGlzIiwicGFkUG9zIiwicGFkV3JhcHBlciIsImNhcHR1cmUiLCJjdXJsZWZ0IiwiY3VydG9wIiwiX3JlbmRlclByb3h5Iiwib3JpZ2luYWxTaXplIiwic2l6ZURpZmYiLCJvcmlnaW5hbE1vdXNlUG9zaXRpb24iLCJfcHJvcGFnYXRlIiwic21wIiwiZHgiLCJkeSIsIl91cGRhdGVQcmV2UHJvcGVydGllcyIsIl91cGRhdGVWaXJ0dWFsQm91bmRhcmllcyIsIl91cGRhdGVSYXRpbyIsIl9yZXNwZWN0U2l6ZSIsIl91cGRhdGVDYWNoZSIsIl9hcHBseUNoYW5nZXMiLCJwciIsImlzdGEiLCJzb2Zmc2V0aCIsInNvZmZzZXR3IiwicHJldlBvc2l0aW9uIiwicHJldlNpemUiLCJmb3JjZUFzcGVjdFJhdGlvIiwicE1pbldpZHRoIiwicE1heFdpZHRoIiwicE1pbkhlaWdodCIsInBNYXhIZWlnaHQiLCJJbmZpbml0eSIsIl92Qm91bmRhcmllcyIsImNwb3MiLCJjc2l6ZSIsImlzbWF4dyIsImlzbWF4aCIsImlzbWludyIsImlzbWluaCIsImR3IiwiZGgiLCJjdyIsIl9nZXRQYWRkaW5nUGx1c0JvcmRlckRpbWVuc2lvbnMiLCJ3aWR0aHMiLCJib3JkZXJzIiwicGFkZGluZ3MiLCJwcmVsIiwib3V0ZXJEaW1lbnNpb25zIiwiZWxlbWVudE9mZnNldCIsImNzIiwib2MiLCJjb250YWluZXJFbGVtZW50IiwiY29udGFpbmVyT2Zmc2V0IiwiY29udGFpbmVyUG9zaXRpb24iLCJwYXJlbnREYXRhIiwiY29udGFpbmVyU2l6ZSIsIndvc2V0IiwiaG9zZXQiLCJpc1BhcmVudCIsImlzT2Zmc2V0UmVsYXRpdmUiLCJjcCIsInBSYXRpbyIsImNvcCIsImNvbnRpbnVlUmVzaXplIiwiaG8iLCJvcyIsIm9wIiwic3VtIiwiZ3JpZFgiLCJncmlkWSIsIm94Iiwib3kiLCJuZXdXaWR0aCIsIm5ld0hlaWdodCIsImlzTWF4V2lkdGgiLCJpc01heEhlaWdodCIsImlzTWluV2lkdGgiLCJpc01pbkhlaWdodCIsImF1dG9PcGVuIiwidWktZGlhbG9nIiwidWktZGlhbG9nLXRpdGxlYmFyIiwiY2xvc2VPbkVzY2FwZSIsIm1vZGFsIiwidG9wT2Zmc2V0IiwiYmVmb3JlQ2xvc2UiLCJyZXNpemVTdGFydCIsInJlc2l6ZVN0b3AiLCJzaXplUmVsYXRlZE9wdGlvbnMiLCJyZXNpemFibGVSZWxhdGVkT3B0aW9ucyIsIm9yaWdpbmFsQ3NzIiwib3JpZ2luYWxUaXRsZSIsIl9jcmVhdGVXcmFwcGVyIiwidWlEaWFsb2ciLCJfY3JlYXRlVGl0bGViYXIiLCJfY3JlYXRlQnV0dG9uUGFuZSIsIl9tYWtlRHJhZ2dhYmxlIiwiX21ha2VSZXNpemFibGUiLCJfaXNPcGVuIiwiX3RyYWNrRm9jdXMiLCJfdW50cmFja0luc3RhbmNlIiwiX2Rlc3Ryb3lPdmVybGF5IiwiX2ZvY3VzZWRFbGVtZW50IiwiX2hpZGUiLCJpc09wZW4iLCJtb3ZlVG9Ub3AiLCJfbW92ZVRvVG9wIiwic2lsZW50IiwibW92ZWQiLCJ6SW5kaWNlcyIsInpJbmRleE1heCIsIl9mb2N1c1RhYmJhYmxlIiwiX3NpemUiLCJfY3JlYXRlT3ZlcmxheSIsIm92ZXJsYXkiLCJfc2hvdyIsIl9tYWtlRm9jdXNUYXJnZXQiLCJ1aURpYWxvZ0J1dHRvblBhbmUiLCJ1aURpYWxvZ1RpdGxlYmFyQ2xvc2UiLCJfa2VlcEZvY3VzIiwiY2hlY2tGb2N1cyIsInRhYmJhYmxlcyIsImFyaWEtZGVzY3JpYmVkYnkiLCJ1aURpYWxvZ1RpdGxlIiwidWlEaWFsb2dUaXRsZWJhciIsIl90aXRsZSIsImFyaWEtbGFiZWxsZWRieSIsInVpQnV0dG9uU2V0IiwiX2NyZWF0ZUJ1dHRvbnMiLCJidXR0b25PcHRpb25zIiwiZmlsdGVyZWRVaSIsInJlc2l6ZUhhbmRsZXMiLCJfbWluSGVpZ2h0IiwiX3RyYWNraW5nSW5zdGFuY2VzIiwiZXhpc3RzIiwicmVzaXphYmxlT3B0aW9ucyIsImlzRHJhZ2dhYmxlIiwiaXNSZXNpemFibGUiLCJub25Db250ZW50SGVpZ2h0IiwibWluQ29udGVudEhlaWdodCIsIm1heENvbnRlbnRIZWlnaHQiLCJfYWxsb3dJbnRlcmFjdGlvbiIsImlzT3BlbmluZyIsIm92ZXJsYXlzIiwiZGlhbG9nIiwiZGlhbG9nQ2xhc3MiLCJhY2NlcHQiLCJncmVlZHkiLCJ0b2xlcmFuY2UiLCJkZWFjdGl2YXRlIiwib3V0Iiwib3ZlciIsInByb3BvcnRpb25zIiwiaXNvdmVyIiwiaXNvdXQiLCJfYWRkVG9NYW5hZ2VyIiwiZHJvcHBhYmxlcyIsIl9zcGxpY2UiLCJfYWRkQWN0aXZlQ2xhc3MiLCJfZGVhY3RpdmF0ZSIsIl9yZW1vdmVBY3RpdmVDbGFzcyIsIl9vdmVyIiwiX2FkZEhvdmVyQ2xhc3MiLCJfb3V0IiwiX3JlbW92ZUhvdmVyQ2xhc3MiLCJfZHJvcCIsImN1c3RvbSIsImNoaWxkcmVuSW50ZXJzZWN0aW9uIiwiZHJvcHBhYmxlIiwiaW50ZXJzZWN0IiwidG9sZXJhbmNlTW9kZSIsImFic29sdXRlIiwiaXNPdmVyQXhpcyIsInJlZmVyZW5jZSIsImRlZmF1bHQiLCJkcm9wcGFibGVzTG9vcCIsInBhcmVudEluc3RhbmNlIiwiaW50ZXJzZWN0cyIsImdyZWVkeUNoaWxkIiwiaG92ZXJDbGFzcyIsImFjdGl2ZUNsYXNzIiwidWktcHJvZ3Jlc3NiYXIiLCJ1aS1wcm9ncmVzc2Jhci12YWx1ZSIsInVpLXByb2dyZXNzYmFyLWNvbXBsZXRlIiwib2xkVmFsdWUiLCJfY29uc3RyYWluZWRWYWx1ZSIsImFyaWEtdmFsdWVtaW4iLCJ2YWx1ZURpdiIsIl9yZWZyZXNoVmFsdWUiLCJuZXdWYWx1ZSIsImluZGV0ZXJtaW5hdGUiLCJfcGVyY2VudGFnZSIsInBlcmNlbnRhZ2UiLCJ0b0ZpeGVkIiwib3ZlcmxheURpdiIsImFyaWEtdmFsdWVtYXgiLCJhcmlhLXZhbHVlbm93IiwiYXV0b1JlZnJlc2giLCJzZWxlY3RpbmciLCJ1bnNlbGVjdGVkIiwidW5zZWxlY3RpbmciLCJkcmFnZ2VkIiwiZWxlbWVudFBvcyIsInNlbGVjdGVlcyIsIiR0aGlzIiwic2VsZWN0ZWVPZmZzZXQiLCIkZWxlbWVudCIsInN0YXJ0c2VsZWN0ZWQiLCJvcG9zIiwic2VsZWN0ZWUiLCJkb1NlbGVjdCIsImhpdCIsInNlbGVjdG1lbnVJZCIsImlkcyIsIl9kcmF3QnV0dG9uIiwiX2RyYXdNZW51IiwiX3JlbmRlcmVkIiwibWVudUl0ZW1zIiwiX3BhcnNlT3B0aW9uIiwiYXJpYS1hdXRvY29tcGxldGUiLCJhcmlhLW93bnMiLCJhcmlhLWhhc3BvcHVwIiwiYnV0dG9uSXRlbSIsIl9yZW5kZXJCdXR0b25JdGVtIiwiX3Jlc2l6ZUJ1dHRvbiIsIl9idXR0b25FdmVudHMiLCJfcmVmcmVzaE1lbnUiLCJtZW51V3JhcCIsIm1lbnVJbnN0YW5jZSIsInVpLW1lbnUiLCJfc2V0U2VsZWN0aW9uIiwiX3NlbGVjdCIsImZvY3VzSW5kZXgiLCJfZ2V0U2VsZWN0ZWRJdGVtIiwiX3BhcnNlT3B0aW9ucyIsIl9zZXRBcmlhIiwiX3RvZ2dsZUF0dHIiLCJfZG9jdW1lbnRDbGljayIsInJhbmdlIiwibWVudVdpZGdldCIsIl9zZXRUZXh0IiwiY3VycmVudE9wdGdyb3VwIiwibGkiLCJnZXRTZWxlY3Rpb24iLCJyZW1vdmVBbGxSYW5nZXMiLCJhZGRSYW5nZSIsInJhbmdlQ291bnQiLCJnZXRSYW5nZUF0IiwiY3JlYXRlUmFuZ2UiLCJfc2VsZWN0Rm9jdXNlZEl0ZW0iLCJvbGRJbmRleCIsImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsInVpLXNsaWRlciIsInVpLXNsaWRlci1oYW5kbGUiLCJ1aS1zbGlkZXItcmFuZ2UiLCJvcmllbnRhdGlvbiIsInNsaWRlIiwibnVtUGFnZXMiLCJfa2V5U2xpZGluZyIsIl9tb3VzZVNsaWRpbmciLCJfYW5pbWF0ZU9mZiIsIl9oYW5kbGVJbmRleCIsIl9kZXRlY3RPcmllbnRhdGlvbiIsIl9jYWxjdWxhdGVOZXdNYXgiLCJfY3JlYXRlUmFuZ2UiLCJfY3JlYXRlSGFuZGxlcyIsImV4aXN0aW5nSGFuZGxlcyIsImhhbmRsZUNvdW50IiwiX3ZhbHVlTWluIiwiX2hhbmRsZUV2ZW50cyIsIm5vcm1WYWx1ZSIsImNsb3Nlc3RIYW5kbGUiLCJtb3VzZU92ZXJIYW5kbGUiLCJlbGVtZW50U2l6ZSIsIl9ub3JtVmFsdWVGcm9tTW91c2UiLCJfdmFsdWVNYXgiLCJ0aGlzRGlzdGFuY2UiLCJfbGFzdENoYW5nZWRWYWx1ZSIsIl9zdGFydCIsIl9jbGlja09mZnNldCIsIl9zbGlkZSIsIl9zdG9wIiwicGl4ZWxUb3RhbCIsInZhbHVlVG90YWwiLCJ2YWx1ZU1vdXNlIiwicGl4ZWxNb3VzZSIsInBlcmNlbnRNb3VzZSIsIl90cmltQWxpZ25WYWx1ZSIsInVpSGFzaCIsImhhbmRsZUluZGV4IiwiX2hhc011bHRpcGxlVmFsdWVzIiwibmV3VmFsIiwib3RoZXJWYWwiLCJuZXdWYWx1ZXMiLCJ2YWxzIiwiX3ZhbHVlcyIsInZhbHNMZW5ndGgiLCJfcmVmcmVzaFJhbmdlIiwidmFsTW9kU3RlcCIsImFsaWduVmFsdWUiLCJfcHJlY2lzaW9uIiwicHJlY2lzaW9uIiwiX3ByZWNpc2lvbk9mIiwiZGVjaW1hbCIsImxhc3RWYWxQZXJjZW50IiwidmFsUGVyY2VudCIsInZhbHVlTWluIiwidmFsdWVNYXgiLCJvUmFuZ2UiLCJfc2V0IiwiY3VyVmFsIiwiY29ubmVjdFdpdGgiLCJkcm9wT25FbXB0eSIsImZvcmNlUGxhY2Vob2xkZXJTaXplIiwiZm9yY2VIZWxwZXJTaXplIiwiYmVmb3JlU3RvcCIsInJlY2VpdmUiLCJ1cGRhdGUiLCJfaXNPdmVyQXhpcyIsIl9pc0Zsb2F0aW5nIiwib3ZlcnJpZGVIYW5kbGUiLCJ2YWxpZEhhbmRsZSIsInJldmVydGluZyIsIl9yZWZyZXNoSXRlbXMiLCJfcmVtb3ZlQ3VycmVudHNGcm9tSXRlbXMiLCJub0FjdGl2YXRpb24iLCJjdXJyZW50Q29udGFpbmVyIiwiZG9tUG9zaXRpb24iLCJfY3JlYXRlUGxhY2Vob2xkZXIiLCJzdG9yZWRDdXJzb3IiLCJzdG9yZWRTdHlsZXNoZWV0IiwiX3N0b3JlZE9wYWNpdHkiLCJfc3RvcmVkWkluZGV4IiwiX3ByZXNlcnZlSGVscGVyUHJvcG9ydGlvbnMiLCJjb250YWluZXJzIiwiZHJhZ2dpbmciLCJpdGVtRWxlbWVudCIsImludGVyc2VjdGlvbiIsImxhc3RQb3NpdGlvbkFicyIsIl9pbnRlcnNlY3RzV2l0aFBvaW50ZXIiLCJfaW50ZXJzZWN0c1dpdGhTaWRlcyIsIl9yZWFycmFuZ2UiLCJfY29udGFjdENvbnRhaW5lcnMiLCJfbm9GaW5hbFNvcnQiLCJfZ2V0SXRlbXNBc2pRdWVyeSIsImNvbm5lY3RlZCIsInJlcyIsImF0dHJpYnV0ZSIsImV4cHJlc3Npb24iLCJkeUNsaWNrIiwiZHhDbGljayIsImlzT3ZlckVsZW1lbnRIZWlnaHQiLCJpc092ZXJFbGVtZW50V2lkdGgiLCJpc092ZXJFbGVtZW50IiwiZm9yY2VQb2ludGVyRm9yQ29udGFpbmVycyIsImZsb2F0aW5nIiwidmVydGljYWxEaXJlY3Rpb24iLCJob3Jpem9udGFsRGlyZWN0aW9uIiwiX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbiIsIl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbiIsImlzT3ZlckJvdHRvbUhhbGYiLCJpc092ZXJSaWdodEhhbGYiLCJfY29ubmVjdFdpdGgiLCJxdWVyaWVzIiwiYWRkSXRlbXMiLCJ0YXJnZXREYXRhIiwiX3F1ZXJpZXMiLCJxdWVyaWVzTGVuZ3RoIiwidG9sZXJhbmNlRWxlbWVudCIsInJlZnJlc2hDb250YWluZXJzIiwiX2NyZWF0ZVRyUGxhY2Vob2xkZXIiLCJzb3VyY2VUciIsInRhcmdldFRyIiwiZGlzdCIsIml0ZW1XaXRoTGVhc3REaXN0YW5jZSIsInBvc1Byb3BlcnR5Iiwic2l6ZVByb3BlcnR5IiwibmVhckJvdHRvbSIsImlubmVybW9zdENvbnRhaW5lciIsImlubmVybW9zdEluZGV4IiwiaGFyZFJlZnJlc2giLCJjb3VudGVyIiwiZGVsYXllZFRyaWdnZXJzIiwiZGVsYXlFdmVudCIsIl9pbnN0Iiwic2VuZGVyIiwic3Bpbm5lck1vZGlmZXIiLCJ1aS1zcGlubmVyIiwidWktc3Bpbm5lci1kb3duIiwidWktc3Bpbm5lci11cCIsImN1bHR1cmUiLCJpbmNyZW1lbnRhbCIsIm51bWJlckZvcm1hdCIsInBhZ2UiLCJzcGluIiwiX2RyYXciLCJfZXZlbnRzIiwibW91c2V3aGVlbCIsInNwaW5uaW5nIiwiX3NwaW4iLCJtb3VzZXdoZWVsVGltZXIiLCJtb3VzZWRvd24gLnVpLXNwaW5uZXItYnV0dG9uIiwiX3JlcGVhdCIsIm1vdXNldXAgLnVpLXNwaW5uZXItYnV0dG9uIiwibW91c2VlbnRlciAudWktc3Bpbm5lci1idXR0b24iLCJtb3VzZWxlYXZlIC51aS1zcGlubmVyLWJ1dHRvbiIsInVpU3Bpbm5lciIsInN0ZXBzIiwiX2FkanVzdFZhbHVlIiwiX2luY3JlbWVudCIsImFib3ZlTWluIiwicHJldlZhbHVlIiwiX3BhcnNlIiwiX2Zvcm1hdCIsIkdsb2JhbGl6ZSIsImlzVmFsaWQiLCJhbGxvd0FueSIsInN0ZXBVcCIsIl9zdGVwVXAiLCJzdGVwRG93biIsIl9zdGVwRG93biIsInBhZ2VVcCIsInBhZ2VzIiwicGFnZURvd24iLCJfdWlTcGlubmVySHRtbCIsIl9idXR0b25IdG1sIiwidWktdGFicyIsInVpLXRhYnMtbmF2IiwidWktdGFicy1wYW5lbCIsInVpLXRhYnMtdGFiIiwiYmVmb3JlTG9hZCIsIl9pc0xvY2FsIiwiYW5jaG9yIiwiYW5jaG9yVXJsIiwibG9jYXRpb25VcmwiLCJkZWNvZGVVUklDb21wb25lbnQiLCJydW5uaW5nIiwiX3Byb2Nlc3NUYWJzIiwiX2luaXRpYWxBY3RpdmUiLCJ0YWJzIiwiYW5jaG9ycyIsImxvY2F0aW9uSGFzaCIsInRhYiIsIl9nZXRQYW5lbEZvclRhYiIsIl90YWJLZXlkb3duIiwiZm9jdXNlZFRhYiIsImdvaW5nRm9yd2FyZCIsIl9oYW5kbGVQYWdlTmF2IiwiYWN0aXZhdGluZyIsIl9mb2N1c05leHRUYWIiLCJfcGFuZWxLZXlkb3duIiwiX2ZpbmROZXh0VGFiIiwibGFzdFRhYkluZGV4IiwiX3NldHVwSGVpZ2h0U3R5bGUiLCJfc2FuaXRpemVTZWxlY3RvciIsImxpcyIsInRhYmxpc3QiLCJwcmV2VGFicyIsInByZXZBbmNob3JzIiwiX2dldExpc3QiLCJhbmNob3JJZCIsIm9yaWdpbmFsQXJpYUNvbnRyb2xzIiwiX2NyZWF0ZVBhbmVsIiwiYXJpYS1jb250cm9scyIsIm9sZFRhYiIsIm5ld1RhYiIsIl9nZXRJbmRleCIsIl9hamF4U2V0dGluZ3MiLCJ1aS10b29sdGlwIiwidHJhY2siLCJfYWRkRGVzY3JpYmVkQnkiLCJkZXNjcmliZWRieSIsIl9yZW1vdmVEZXNjcmliZWRCeSIsIm1vdXNlb3ZlciIsInRvb2x0aXBzIiwiZGlzYWJsZWRUaXRsZXMiLCJ0b29sdGlwRGF0YSIsIl91cGRhdGVDb250ZW50IiwiX2Rpc2FibGUiLCJfZW5hYmxlIiwiYmx1ckV2ZW50IiwiX3JlZ2lzdGVyQ2xvc2VIYW5kbGVycyIsImNvbnRlbnRPcHRpb24iLCJ0b29sdGlwIiwiZGVsYXllZFNob3ciLCJhMTF5Q29udGVudCIsInBvc2l0aW9uT3B0aW9uIiwiX2ZpbmQiLCJfdG9vbHRpcCIsIm1vdXNlbW92ZSIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsImZha2VFdmVudCIsIl9yZW1vdmVUb29sdGlwIiwiY2xvc2luZyIsImhpZGluZyIsInRvb2x0aXBDbGFzcyIsInByZXZpb3VzVW5kZXJzY29yZSIsIkFycmF5UHJvdG8iLCJPYmpQcm90byIsIkZ1bmNQcm90byIsIkZ1bmN0aW9uIiwibmF0aXZlSXNBcnJheSIsIm5hdGl2ZUtleXMiLCJuYXRpdmVCaW5kIiwibmF0aXZlQ3JlYXRlIiwiX3dyYXBwZWQiLCJWRVJTSU9OIiwib3B0aW1pemVDYiIsImFyZ0NvdW50IiwiYWNjdW11bGF0b3IiLCJjYiIsImlkZW50aXR5IiwiaXNPYmplY3QiLCJpdGVyYXRlZSIsImNyZWF0ZUFzc2lnbmVyIiwia2V5c0Z1bmMiLCJ1bmRlZmluZWRPbmx5IiwiYmFzZUNyZWF0ZSIsIk1BWF9BUlJBWV9JTkRFWCIsImdldExlbmd0aCIsImNyZWF0ZVJlZHVjZSIsIm1lbW8iLCJjdXJyZW50S2V5IiwiZm9yRWFjaCIsImNvbGxlY3QiLCJmb2xkbCIsImluamVjdCIsInJlZHVjZVJpZ2h0IiwiZm9sZHIiLCJkZXRlY3QiLCJwcmVkaWNhdGUiLCJmaW5kSW5kZXgiLCJmaW5kS2V5IiwibmVnYXRlIiwiZXZlcnkiLCJzb21lIiwiYW55IiwiaW5jbHVkZXMiLCJpbmNsdWRlIiwiZnJvbUluZGV4IiwiZ3VhcmQiLCJpbnZva2UiLCJpc0Z1bmMiLCJwbHVjayIsIndoZXJlIiwiZmluZFdoZXJlIiwibGFzdENvbXB1dGVkIiwic2h1ZmZsZSIsInJhbmQiLCJzaHVmZmxlZCIsInNhbXBsZSIsInNvcnRCeSIsImNyaXRlcmlhIiwiYmVoYXZpb3IiLCJncm91cEJ5IiwiaW5kZXhCeSIsImNvdW50QnkiLCJwYXJ0aXRpb24iLCJwYXNzIiwidGFrZSIsInJlc3QiLCJ0YWlsIiwiY29tcGFjdCIsImZsYXR0ZW4iLCJzaGFsbG93Iiwic3RyaWN0Iiwic3RhcnRJbmRleCIsImlzQXJndW1lbnRzIiwiY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIiLCJjcmVhdGVJbmRleEZpbmRlciIsInByZWRpY2F0ZUZpbmQiLCJzb3J0ZWRJbmRleCIsIndpdGhvdXQiLCJkaWZmZXJlbmNlIiwidW5pcSIsImlzU29ydGVkIiwiaXNCb29sZWFuIiwic2VlbiIsInVuaW9uIiwiYXJnc0xlbmd0aCIsInppcCIsInVuemlwIiwiZmluZExhc3RJbmRleCIsImxvdyIsIm1pZCIsImxhc3RJbmRleE9mIiwiZXhlY3V0ZUJvdW5kIiwic291cmNlRnVuYyIsImJvdW5kRnVuYyIsImNhbGxpbmdDb250ZXh0IiwiYm91bmQiLCJwYXJ0aWFsIiwiYm91bmRBcmdzIiwiYmluZEFsbCIsIm1lbW9pemUiLCJoYXNoZXIiLCJhZGRyZXNzIiwidGhyb3R0bGUiLCJsYXRlciIsImxlYWRpbmciLCJ0cmFpbGluZyIsImRlYm91bmNlIiwiaW1tZWRpYXRlIiwidGltZXN0YW1wIiwiY2FsbE5vdyIsImNvbXBvc2UiLCJoYXNFbnVtQnVnIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJub25FbnVtZXJhYmxlUHJvcHMiLCJjb2xsZWN0Tm9uRW51bVByb3BzIiwibm9uRW51bUlkeCIsImFsbEtleXMiLCJtYXBPYmplY3QiLCJwYWlycyIsImZ1bmN0aW9ucyIsIm1ldGhvZHMiLCJleHRlbmRPd24iLCJhc3NpZ24iLCJwaWNrIiwib2l0ZXJhdGVlIiwib21pdCIsImRlZmF1bHRzIiwidGFwIiwiaW50ZXJjZXB0b3IiLCJpc01hdGNoIiwiYVN0YWNrIiwiYlN0YWNrIiwiYXJlQXJyYXlzIiwiYUN0b3IiLCJiQ3RvciIsImlzRXF1YWwiLCJpc0VtcHR5IiwiaXNTdHJpbmciLCJpc0VsZW1lbnQiLCJJbnQ4QXJyYXkiLCJpc051bWJlciIsImlzTnVsbCIsImlzVW5kZWZpbmVkIiwiY29uc3RhbnQiLCJwcm9wZXJ0eU9mIiwiYWNjdW0iLCJjcmVhdGVFc2NhcGVyIiwiZXNjYXBlciIsInRlc3RSZWdleHAiLCJyZXBsYWNlUmVnZXhwIiwiZXNjYXBlTWFwIiwiJiIsIjwiLCJcIiIsIiciLCJgIiwidW5lc2NhcGVNYXAiLCJ1bmVzY2FwZSIsImZhbGxiYWNrIiwiaWRDb3VudGVyIiwidGVtcGxhdGVTZXR0aW5ncyIsImV2YWx1YXRlIiwiaW50ZXJwb2xhdGUiLCJlc2NhcGVDaGFyIiwiZXNjYXBlcyIsIm5vTWF0Y2giLCJcXCIsIlxyIiwiXG4iLCLigKgiLCLigKkiLCJ0ZW1wbGF0ZSIsIm9sZFNldHRpbmdzIiwidmFyaWFibGUiLCJyZW5kZXIiLCJjaGFpbiIsIl9jaGFpbiIsIm1peGluIiwidmFsdWVPZiIsInRvSlNPTiIsInByZXZpb3VzQmFja2JvbmUiLCJCYWNrYm9uZSIsInJlcXVpcmUiLCJaZXB0byIsImVuZGVyIiwiZW11bGF0ZUhUVFAiLCJlbXVsYXRlSlNPTiIsIkV2ZW50cyIsImV2ZW50c0FwaSIsImN0eCIsIl9jYWxsYmFjayIsInJldGFpbiIsImV2IiwiYWxsRXZlbnRzIiwidHJpZ2dlckV2ZW50cyIsInN0b3BMaXN0ZW5pbmciLCJsaXN0ZW5pbmdUbyIsIl9saXN0ZW5pbmdUbyIsIl9saXN0ZW5JZCIsImV2ZW50U3BsaXR0ZXIiLCJhMSIsImEyIiwiYTMiLCJsaXN0ZW5UbyIsImxpc3RlblRvT25jZSIsIk1vZGVsIiwiY2lkIiwiY2hhbmdlZCIsImluaXRpYWxpemUiLCJ2YWxpZGF0aW9uRXJyb3IiLCJpZEF0dHJpYnV0ZSIsInN5bmMiLCJ1bnNldCIsImNoYW5nZXMiLCJjaGFuZ2luZyIsIl92YWxpZGF0ZSIsIl9jaGFuZ2luZyIsIl9wcmV2aW91c0F0dHJpYnV0ZXMiLCJfcGVuZGluZyIsImhhc0NoYW5nZWQiLCJjaGFuZ2VkQXR0cmlidXRlcyIsInByZXZpb3VzQXR0cmlidXRlcyIsImZldGNoIiwibW9kZWwiLCJyZXNwIiwid3JhcEVycm9yIiwidmFsaWRhdGUiLCJzZXJ2ZXJBdHRycyIsImlzTmV3IiwicGF0Y2giLCJ1cmxFcnJvciIsIkNvbGxlY3Rpb24iLCJtb2RlbHMiLCJjb21wYXJhdG9yIiwiX3Jlc2V0Iiwic2V0T3B0aW9ucyIsImFkZE9wdGlvbnMiLCJzaW5ndWxhciIsIl9ieUlkIiwiX3JlbW92ZVJlZmVyZW5jZSIsImV4aXN0aW5nIiwidGFyZ2V0TW9kZWwiLCJzb3J0QXR0ciIsInRvUmVtb3ZlIiwibW9kZWxNYXAiLCJfcHJlcGFyZU1vZGVsIiwiX29uTW9kZWxFdmVudCIsIm9yZGVyZWRNb2RlbHMiLCJwcmV2aW91c01vZGVscyIsIlZpZXciLCJ2aWV3T3B0aW9ucyIsIl9lbnN1cmVFbGVtZW50IiwiZGVsZWdhdGVFdmVudHMiLCJkZWxlZ2F0ZUV2ZW50U3BsaXR0ZXIiLCIkZWwiLCJzZXRFbGVtZW50IiwidW5kZWxlZ2F0ZUV2ZW50cyIsIm1ldGhvZE1hcCIsInN0cmluZ2lmeSIsIl9tZXRob2QiLCJub1hoclBhdGNoIiwiQWN0aXZlWE9iamVjdCIsImRpc3BhdGNoRXZlbnQiLCJkZWxldGUiLCJyZWFkIiwiUm91dGVyIiwicm91dGVzIiwiX2JpbmRSb3V0ZXMiLCJvcHRpb25hbFBhcmFtIiwibmFtZWRQYXJhbSIsInNwbGF0UGFyYW0iLCJlc2NhcGVSZWdFeHAiLCJyb3V0ZSIsImlzUmVnRXhwIiwiX3JvdXRlVG9SZWdFeHAiLCJyb3V0ZXIiLCJoaXN0b3J5IiwiX2V4dHJhY3RQYXJhbWV0ZXJzIiwibmF2aWdhdGUiLCJvcHRpb25hbCIsIkhpc3RvcnkiLCJyb3V0ZVN0cmlwcGVyIiwicm9vdFN0cmlwcGVyIiwiaXNFeHBsb3JlciIsInRyYWlsaW5nU2xhc2giLCJwYXRoU3RyaXBwZXIiLCJnZXRIYXNoIiwiZ2V0RnJhZ21lbnQiLCJmb3JjZVB1c2hTdGF0ZSIsIl9oYXNQdXNoU3RhdGUiLCJfd2FudHNIYXNoQ2hhbmdlIiwicGF0aG5hbWUiLCJoYXNoQ2hhbmdlIiwiX3dhbnRzUHVzaFN0YXRlIiwicHVzaFN0YXRlIiwiZG9jTW9kZSIsIm9sZElFIiwiY29udGVudFdpbmRvdyIsImNoZWNrVXJsIiwiX2NoZWNrVXJsSW50ZXJ2YWwiLCJsb2MiLCJhdFJvb3QiLCJyZXBsYWNlU3RhdGUiLCJsb2FkVXJsIiwiX3VwZGF0ZUhhc2giLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJTdXJyb2dhdGUiLCJfX3N1cGVyX18iLCJzdWJzY3JpcHRpb25zIiwiYW1wbGlmeSIsInB1Ymxpc2giLCJ0b3BpYyIsInRvcGljU3Vic2NyaXB0aW9ucyIsInN1YnNjcmlwdGlvbiIsInN1YnNjcmliZSIsInByaW9yaXR5IiwiYWRkZWQiLCJ0b3BpY0luZGV4IiwidG9waWNzIiwidG9waWNMZW5ndGgiLCJzdWJzY3JpcHRpb25JbmZvIiwidW5zdWJzY3JpYmUiLCJzdG9yZSIsImFkZFR5cGUiLCJzdG9yYWdlIiwicnByZWZpeCIsImNyZWF0ZUZyb21TdG9yYWdlSW50ZXJmYWNlIiwic3RvcmFnZVR5cGUiLCJzdG9yZWRWYWx1ZSIsImdldEl0ZW0iLCJleHBpcmVzIiwicmVtb3ZlSXRlbSIsInNldEl0ZW0iLCJ3ZWJTdG9yYWdlVHlwZSIsImxvY2FsU3RvcmFnZSIsInNlc3Npb25TdG9yYWdlIiwiZ2xvYmFsU3RvcmFnZSIsImhvc3RuYW1lIiwiYXR0cktleSIsImFkZEJlaGF2aW9yIiwiWE1MRG9jdW1lbnQiLCJ1c2VyRGF0YSIsImlzQXN5bmMiLCJyZXNvdXJjZUlkIiwicmVzb3VyY2UiLCJyZXNvdXJjZXMiLCJ4aHJQcm9wcyIsInJ1cmxEYXRhIiwiZGVmblNldHRpbmdzIiwiYWJvcnRlZCIsImFtcFhIUiIsImhhbmRsZVJlc3BvbnNlIiwiaXNKU09OUCIsImNhbGxiYWNrUmVnZXgiLCJfeGhyIiwibWFwcGVkS2V5cyIsImRhdGFNYXAiLCJtZW1vcnlTdG9yZSIsImNodW5rIiwiY2hlY2tzdW0iLCJjYWNoZUtleSIsInBlcnNpc3QiLCJjYWNoZVR5cGUiLCJkZWNvZGVycyIsImpzZW5kIiwiX3N1Y2Nlc3MiLCJfZXJyb3IiLCJkZWNvZGVyIiwiQ3VsdHVyZUluZm8iLCJlbmdsaXNoTmFtZSIsIm5hdGl2ZU5hbWUiLCJhYmJyZXZpYXRlZERheU5hbWVzIiwic2hvcnRlc3REYXlOYW1lcyIsImZpcnN0TGV0dGVyRGF5TmFtZXMiLCJhYmJyZXZpYXRlZE1vbnRoTmFtZXMiLCJhbURlc2lnbmF0b3IiLCJwbURlc2lnbmF0b3IiLCJmaXJzdERheU9mV2VlayIsInR3b0RpZ2l0WWVhck1heCIsImRhdGVFbGVtZW50T3JkZXIiLCJmb3JtYXRQYXR0ZXJucyIsInNob3J0RGF0ZSIsImxvbmdEYXRlIiwic2hvcnRUaW1lIiwibG9uZ1RpbWUiLCJmdWxsRGF0ZVRpbWUiLCJzb3J0YWJsZURhdGVUaW1lIiwidW5pdmVyc2FsU29ydGFibGVEYXRlVGltZSIsInJmYzExMjMiLCJtb250aERheSIsInllYXJNb250aCIsInJlZ2V4UGF0dGVybnMiLCJqYW4iLCJmZWIiLCJtYXIiLCJhcHIiLCJtYXkiLCJqdW4iLCJqdWwiLCJhdWciLCJzZXAiLCJvY3QiLCJub3YiLCJkZWMiLCJzdW4iLCJtb24iLCJ0dWUiLCJ3ZWQiLCJ0aHUiLCJmcmkiLCJzYXQiLCJmdXR1cmUiLCJwYXN0IiwieWVzdGVyZGF5IiwidG9tb3Jyb3ciLCJtaWxsaXNlY29uZCIsIm1pbnV0ZSIsImhvdXIiLCJ3ZWVrIiwic2hvcnRNZXJpZGlhbiIsImxvbmdNZXJpZGlhbiIsInRpbWV6b25lIiwib3JkaW5hbFN1ZmZpeCIsInRpbWVDb250ZXh0IiwiYWJicmV2aWF0ZWRUaW1lWm9uZVN0YW5kYXJkIiwiR01UIiwiRVNUIiwiQ1NUIiwiTVNUIiwiUFNUIiwiYWJicmV2aWF0ZWRUaW1lWm9uZURTVCIsIkVEVCIsIkNEVCIsIk1EVCIsIlBEVCIsImdldE1vbnRoTnVtYmVyRnJvbU5hbWUiLCJnZXREYXlOdW1iZXJGcm9tTmFtZSIsImlzTGVhcFllYXIiLCJnZXREYXlzSW5Nb250aCIsImdldFRpbWV6b25lT2Zmc2V0IiwiZHN0IiwiZ2V0VGltZXpvbmVBYmJyZXZpYXRpb24iLCJjb21wYXJlVG8iLCJlcXVhbHMiLCJiZXR3ZWVuIiwiYWRkTWlsbGlzZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwiYWRkU2Vjb25kcyIsImFkZE1pbnV0ZXMiLCJhZGRIb3VycyIsImFkZERheXMiLCJhZGRXZWVrcyIsImFkZE1vbnRocyIsImFkZFllYXJzIiwiY29uZmlnIiwiX29yaWVudCIsIm1pbGxpc2Vjb25kcyIsInNlY29uZHMiLCJtaW51dGVzIiwiaG91cnMiLCJtb250aHMiLCJkYXlzIiwiUmFuZ2VFcnJvciIsInZhbGlkYXRlTWlsbGlzZWNvbmQiLCJ2YWxpZGF0ZVNlY29uZCIsInZhbGlkYXRlTWludXRlIiwidmFsaWRhdGVIb3VyIiwidmFsaWRhdGVEYXkiLCJ2YWxpZGF0ZU1vbnRoIiwidmFsaWRhdGVZZWFyIiwiZ2V0U2Vjb25kcyIsImdldE1pbnV0ZXMiLCJzZXRUaW1lem9uZSIsInRpbWV6b25lT2Zmc2V0Iiwic2V0VGltZXpvbmVPZmZzZXQiLCJjbGVhclRpbWUiLCJpc1dlZWtkYXkiLCJtb3ZlVG9GaXJzdERheU9mTW9udGgiLCJtb3ZlVG9MYXN0RGF5T2ZNb250aCIsIm1vdmVUb0RheU9mV2VlayIsIm9yaWVudCIsIm1vdmVUb01vbnRoIiwiZ2V0RGF5T2ZZZWFyIiwiZ2V0V2Vla09mWWVhciIsInByZXZPZmZzZXQiLCJkYXludW0iLCJVVEMiLCJpc0RTVCIsImxvZyIsImdldFRpbWV6b25lIiwiZ2V0VVRDT2Zmc2V0IiwiaGVyZSIsInRoZXJlIiwiTnVtYmVyIiwiZ2V0RGF5TmFtZSIsImFiYnJldiIsImdldE1vbnRoTmFtZSIsIl90b1N0cmluZyIsIl9pcyIsIl9kYXRlRWxlbWVudCIsImZyb21Ob3ciLCJhZ28iLCJkZSIsIiREIiwiJE4iLCJweCIsImRmIiwibWYiLCJlZiIsIm5mIiwidG9KU09OU3RyaW5nIiwidG9TaG9ydERhdGVTdHJpbmciLCJzaG9ydERhdGVQYXR0ZXJuIiwidG9Mb25nRGF0ZVN0cmluZyIsImxvbmdEYXRlUGF0dGVybiIsInRvU2hvcnRUaW1lU3RyaW5nIiwic2hvcnRUaW1lUGF0dGVybiIsInRvTG9uZ1RpbWVTdHJpbmciLCJsb25nVGltZVBhdHRlcm4iLCJnZXRPcmRpbmFsIiwiUGFyc2luZyIsIkV4Y2VwdGlvbiIsIiRQIiwiT3BlcmF0b3JzIiwicnRva2VuIiwic3Rva2VuIiwicXgiLCJyeCIsIm1hbnkiLCJpZ25vcmUiLCJwcm9kdWN0IiwicnVsZSIsInNlcXVlbmNlIiwiZXkiLCJkMSIsImQyIiwiX2ZuIiwiYmVzdCIsImdyIiwiZm5hbWUiLCJyZXBsIiwiZ3giLCJfZ2VuZXJhdG9yIiwidngiLCJfdmVjdG9yIiwiZmxhdHRlbkFuZENvbXBhY3QiLCJheCIsIkdyYW1tYXIiLCJUcmFuc2xhdG9yIiwibWVyaWRpYW4iLCJyZGF5IiwiZmluaXNoRXhhY3QiLCJ3ZWVrZGF5IiwiZ2FwIiwiZGF0ZVBhcnREZWxpbWl0ZXIiLCJ0aW1lUGFydERlbGltaXRlciIsIndoaXRlU3BhY2UiLCJnZW5lcmFsRGVsaW1pdGVyIiwiX0MiLCJjdG9rZW4iLCJreCIsImN0b2tlbjIiLCJoaCIsIkgiLCJISCIsIm1tIiwic3MiLCJobXMiLCJ0dCIsInoiLCJ6eiIsInp6eiIsInRpbWVTdWZmaXgiLCJkZCIsImRkZCIsImRkZGQiLCJNIiwiTU0iLCJNTU0iLCJNTU1NIiwieXkiLCJ5eXkiLCJ5eXl5IiwibWR5IiwieW1kIiwiZG15IiwiZm10IiwicnVsZXMiLCJmIiwiX0YiLCJmb3JtYXRzIiwiX2Zvcm1hdHMiLCJnZXRQYXJzZUZ1bmN0aW9uIiwicGFyc2VFeGFjdCJdLCJtYXBwaW5ncyI6IkNBYUEsU0FBQUEsRUFBQUMsZ0JBSUEsaUJBQUFDLFFBQUEsaUJBQUFBLE9BQUFDLFFBU0FELE9BQUFDLFFBQUFILEVBQUFJLFNBQ0FILEVBQUFELEdBQUEsR0FDQSxTQUFBSyxHQUNBLElBQUFBLEVBQUFELFNBQ0EsTUFBQSxJQUFBRSxNQUFBLDRDQUVBLE9BQUFMLEVBQUFJLElBR0FKLEVBQUFELEdBdEJBLENBMEJBLG9CQUFBTyxPQUFBQSxPQUFBQyxLQUFBLFNBQUFELEVBQUFFLGdCQW1EQSxTQUFBQyxFQUFBQyxHQUNBLE9BQUEsTUFBQUEsR0FBQUEsSUFBQUEsRUFBQUosT0E1Q0EsSUFBQUssRUFBQSxHQUVBQyxFQUFBQyxPQUFBQyxlQUVBQyxFQUFBSixFQUFBSSxNQUVBQyxFQUFBTCxFQUFBSyxLQUFBLFNBQUFDLEdBQ0EsT0FBQU4sRUFBQUssS0FBQUUsS0FBQUQsSUFDQSxTQUFBQSxHQUNBLE9BQUFOLEVBQUFRLE9BQUFDLE1BQUEsR0FBQUgsSUFJQUksRUFBQVYsRUFBQVUsS0FFQUMsRUFBQVgsRUFBQVcsUUFFQUMsRUFBQSxHQUVBQyxFQUFBRCxFQUFBQyxTQUVBQyxFQUFBRixFQUFBRyxlQUVBQyxFQUFBRixFQUFBRCxTQUVBSSxFQUFBRCxFQUFBVCxLQUFBTCxRQUVBZ0IsRUFBQSxHQUVBQyxFQUFBLFNBQUFwQixHQVNBLE1BQUEsbUJBQUFBLEdBQUEsaUJBQUFBLEVBQUFxQixVQUNBLG1CQUFBckIsRUFBQXNCLE1B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LEdBQUE1MkMsT0FBQSxPQUFBNDJDLEVBQUEsTUFBQXp0QyxJQUNBLE9BQUEwdEMsRUFBQXNtQyxPQUFBOS9FLEtBQUEsR0FBQXVnQyxJQXBCQSxHQW9CQWo0QixLQUFBOC9FLE9BQUE5L0UsS0FBQWthLE1BQUFsYSxLQUFBa2EsTUFBQSxTQUFBK2QsR0FBQSxJQUFBZ1osRUFBQSxLQUFBLElBQUFoWixFQUFBLE9BQUEsS0FDQSxJQUFBZ1osRUFBQWp4QyxLQUFBc25HLFFBQUF2OEYsTUFBQXJULEtBQUEsR0FBQXVnQyxHQUFBLE1BQUF6MEIsR0FBQSxPQUFBLEtBQ0EsT0FBQSxJQUFBeXRDLEVBQUEsR0FBQTUyQyxPQUFBNDJDLEVBQUEsR0FBQSxNQUFBanhDLEtBQUFtcUcsaUJBQUEsU0FBQXg2RSxHQUFBLElBQUF6MUIsRUFBQThGLEtBQUFzbkcsUUFBQTJDLFFBQUF0NkUsR0FBQSxPQUFBLFNBQUFzSSxHQUFBLElBQUFnWixFQUFBLEtBQUEsSUFBQUEsRUFBQS8yQyxFQUFBeEMsS0FBQSxHQUFBdWdDLEdBQUEsTUFBQXowQixHQUFBLE9BQUEsS0FDQSxPQUFBLElBQUF5dEMsRUFBQSxHQUFBNTJDLE9BQUE0MkMsRUFBQSxHQUFBLE9BQUFqeEMsS0FBQW9xRyxXQUFBLFNBQUFueUUsRUFBQXRJLEdBQUEsT0FBQTN2QixLQUFBbXFHLGlCQUFBeDZFLEVBQUEzdkIsQ0FBQWk0QiIsImZpbGUiOiJjb3JlLm1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2My42LjBcbiAqIGh0dHBzOi8vanF1ZXJ5LmNvbS9cbiAqXG4gKiBJbmNsdWRlcyBTaXp6bGUuanNcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBPcGVuSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAyMS0wMy0wMlQxNzowOFpcbiAqL1xuKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGlmICggdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgXG5cdFx0Ly8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS5cblx0XHQvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YFxuXHRcdC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLlxuXHRcdC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuXG5cdFx0Ly8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZShcImpxdWVyeVwiKSh3aW5kb3cpO1xuXHRcdC8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuXHRcdFx0ZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOlxuXHRcdFx0ZnVuY3Rpb24oIHcgKSB7XG5cdFx0XHRcdGlmICggIXcuZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWN0b3J5KCB3ICk7XG5cdFx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoIGdsb2JhbCApO1xuXHR9XG5cbi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0XG59ICkoIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHtcblxuLy8gRWRnZSA8PSAxMiAtIDEzKywgRmlyZWZveCA8PTE4IC0gNDUrLCBJRSAxMCAtIDExLCBTYWZhcmkgNS4xIC0gOSssIGlPUyA2IC0gOS4xXG4vLyB0aHJvdyBleGNlcHRpb25zIHdoZW4gbm9uLXN0cmljdCBjb2RlIChlLmcuLCBBU1AuTkVUIDQuNSkgYWNjZXNzZXMgc3RyaWN0IG1vZGVcbi8vIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYpLCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uXG4vLyBlbm91Z2ggdGhhdCBhbGwgc3VjaCBhdHRlbXB0cyBhcmUgZ3VhcmRlZCBpbiBhIHRyeSBibG9jay5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyID0gW107XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcblxudmFyIHNsaWNlID0gYXJyLnNsaWNlO1xuXG52YXIgZmxhdCA9IGFyci5mbGF0ID8gZnVuY3Rpb24oIGFycmF5ICkge1xuXHRyZXR1cm4gYXJyLmZsYXQuY2FsbCggYXJyYXkgKTtcbn0gOiBmdW5jdGlvbiggYXJyYXkgKSB7XG5cdHJldHVybiBhcnIuY29uY2F0LmFwcGx5KCBbXSwgYXJyYXkgKTtcbn07XG5cblxudmFyIHB1c2ggPSBhcnIucHVzaDtcblxudmFyIGluZGV4T2YgPSBhcnIuaW5kZXhPZjtcblxudmFyIGNsYXNzMnR5cGUgPSB7fTtcblxudmFyIHRvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZztcblxudmFyIGhhc093biA9IGNsYXNzMnR5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBmblRvU3RyaW5nID0gaGFzT3duLnRvU3RyaW5nO1xuXG52YXIgT2JqZWN0RnVuY3Rpb25TdHJpbmcgPSBmblRvU3RyaW5nLmNhbGwoIE9iamVjdCApO1xuXG52YXIgc3VwcG9ydCA9IHt9O1xuXG52YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzRnVuY3Rpb24oIG9iaiApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTU3LCBGaXJlZm94IDw9NTJcblx0XHQvLyBJbiBzb21lIGJyb3dzZXJzLCB0eXBlb2YgcmV0dXJucyBcImZ1bmN0aW9uXCIgZm9yIEhUTUwgPG9iamVjdD4gZWxlbWVudHNcblx0XHQvLyAoaS5lLiwgYHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9iamVjdFwiICkgPT09IFwiZnVuY3Rpb25cImApLlxuXHRcdC8vIFdlIGRvbid0IHdhbnQgdG8gY2xhc3NpZnkgKmFueSogRE9NIG5vZGUgYXMgYSBmdW5jdGlvbi5cblx0XHQvLyBTdXBwb3J0OiBRdFdlYiA8PTMuOC41LCBXZWJLaXQgPD01MzQuMzQsIHdraHRtbHRvcGRmIHRvb2wgPD0wLjEyLjVcblx0XHQvLyBQbHVzIGZvciBvbGQgV2ViS2l0LCB0eXBlb2YgcmV0dXJucyBcImZ1bmN0aW9uXCIgZm9yIEhUTUwgY29sbGVjdGlvbnNcblx0XHQvLyAoZS5nLiwgYHR5cGVvZiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRpdlwiKSA9PT0gXCJmdW5jdGlvblwiYCkuIChnaC00NzU2KVxuXHRcdHJldHVybiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIG9iai5ub2RlVHlwZSAhPT0gXCJudW1iZXJcIiAmJlxuXHRcdFx0dHlwZW9mIG9iai5pdGVtICE9PSBcImZ1bmN0aW9uXCI7XG5cdH07XG5cblxudmFyIGlzV2luZG93ID0gZnVuY3Rpb24gaXNXaW5kb3coIG9iaiApIHtcblx0XHRyZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93O1xuXHR9O1xuXG5cbnZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcblxuXG5cblx0dmFyIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgPSB7XG5cdFx0dHlwZTogdHJ1ZSxcblx0XHRzcmM6IHRydWUsXG5cdFx0bm9uY2U6IHRydWUsXG5cdFx0bm9Nb2R1bGU6IHRydWVcblx0fTtcblxuXHRmdW5jdGlvbiBET01FdmFsKCBjb2RlLCBub2RlLCBkb2MgKSB7XG5cdFx0ZG9jID0gZG9jIHx8IGRvY3VtZW50O1xuXG5cdFx0dmFyIGksIHZhbCxcblx0XHRcdHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KCBcInNjcmlwdFwiICk7XG5cblx0XHRzY3JpcHQudGV4dCA9IGNvZGU7XG5cdFx0aWYgKCBub2RlICkge1xuXHRcdFx0Zm9yICggaSBpbiBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNjQrLCBFZGdlIDE4K1xuXHRcdFx0XHQvLyBTb21lIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgdGhlIFwibm9uY2VcIiBwcm9wZXJ0eSBvbiBzY3JpcHRzLlxuXHRcdFx0XHQvLyBPbiB0aGUgb3RoZXIgaGFuZCwganVzdCB1c2luZyBgZ2V0QXR0cmlidXRlYCBpcyBub3QgZW5vdWdoIGFzXG5cdFx0XHRcdC8vIHRoZSBgbm9uY2VgIGF0dHJpYnV0ZSBpcyByZXNldCB0byBhbiBlbXB0eSBzdHJpbmcgd2hlbmV2ZXIgaXRcblx0XHRcdFx0Ly8gYmVjb21lcyBicm93c2luZy1jb250ZXh0IGNvbm5lY3RlZC5cblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvaHRtbC9pc3N1ZXMvMjM2OVxuXHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jbm9uY2UtYXR0cmlidXRlc1xuXHRcdFx0XHQvLyBUaGUgYG5vZGUuZ2V0QXR0cmlidXRlYCBjaGVjayB3YXMgYWRkZWQgZm9yIHRoZSBzYWtlIG9mXG5cdFx0XHRcdC8vIGBqUXVlcnkuZ2xvYmFsRXZhbGAgc28gdGhhdCBpdCBjYW4gZmFrZSBhIG5vbmNlLWNvbnRhaW5pbmcgbm9kZVxuXHRcdFx0XHQvLyB2aWEgYW4gb2JqZWN0LlxuXHRcdFx0XHR2YWwgPSBub2RlWyBpIF0gfHwgbm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoIGkgKTtcblx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0c2NyaXB0LnNldEF0dHJpYnV0ZSggaSwgdmFsICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZG9jLmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdCApLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHNjcmlwdCApO1xuXHR9XG5cblxuZnVuY3Rpb24gdG9UeXBlKCBvYmogKSB7XG5cdGlmICggb2JqID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIG9iaiArIFwiXCI7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHkgKGZ1bmN0aW9uaXNoIFJlZ0V4cClcblx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiID9cblx0XHRjbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKCBvYmogKSBdIHx8IFwib2JqZWN0XCIgOlxuXHRcdHR5cGVvZiBvYmo7XG59XG4vKiBnbG9iYWwgU3ltYm9sICovXG4vLyBEZWZpbmluZyB0aGlzIGdsb2JhbCBpbiAuZXNsaW50cmMuanNvbiB3b3VsZCBjcmVhdGUgYSBkYW5nZXIgb2YgdXNpbmcgdGhlIGdsb2JhbFxuLy8gdW5ndWFyZGVkIGluIGFub3RoZXIgcGxhY2UsIGl0IHNlZW1zIHNhZmVyIHRvIGRlZmluZSBnbG9iYWwgb25seSBmb3IgdGhpcyBtb2R1bGVcblxuXG5cbnZhclxuXHR2ZXJzaW9uID0gXCIzLjYuMFwiLFxuXG5cdC8vIERlZmluZSBhIGxvY2FsIGNvcHkgb2YgalF1ZXJ5XG5cdGpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblxuXHRcdC8vIFRoZSBqUXVlcnkgb2JqZWN0IGlzIGFjdHVhbGx5IGp1c3QgdGhlIGluaXQgY29uc3RydWN0b3IgJ2VuaGFuY2VkJ1xuXHRcdC8vIE5lZWQgaW5pdCBpZiBqUXVlcnkgaXMgY2FsbGVkIChqdXN0IGFsbG93IGVycm9yIHRvIGJlIHRocm93biBpZiBub3QgaW5jbHVkZWQpXG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTtcblx0fTtcblxualF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHtcblxuXHQvLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkXG5cdGpxdWVyeTogdmVyc2lvbixcblxuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LFxuXG5cdC8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMFxuXHRsZW5ndGg6IDAsXG5cblx0dG9BcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0fSxcblxuXHQvLyBHZXQgdGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SXG5cdC8vIEdldCB0aGUgd2hvbGUgbWF0Y2hlZCBlbGVtZW50IHNldCBhcyBhIGNsZWFuIGFycmF5XG5cdGdldDogZnVuY3Rpb24oIG51bSApIHtcblxuXHRcdC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGluIGEgY2xlYW4gYXJyYXlcblx0XHRpZiAoIG51bSA9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4ganVzdCB0aGUgb25lIGVsZW1lbnQgZnJvbSB0aGUgc2V0XG5cdFx0cmV0dXJuIG51bSA8IDAgPyB0aGlzWyBudW0gKyB0aGlzLmxlbmd0aCBdIDogdGhpc1sgbnVtIF07XG5cdH0sXG5cblx0Ly8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFja1xuXHQvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldClcblx0cHVzaFN0YWNrOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cblx0XHQvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldFxuXHRcdHZhciByZXQgPSBqUXVlcnkubWVyZ2UoIHRoaXMuY29uc3RydWN0b3IoKSwgZWxlbXMgKTtcblxuXHRcdC8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpXG5cdFx0cmV0LnByZXZPYmplY3QgPSB0aGlzO1xuXG5cdFx0Ly8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxlbWVudCBzZXRcblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdC8vIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuXG5cdGVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrICk7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKCBlbGVtLCBpLCBlbGVtICk7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0c2xpY2U6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApICk7XG5cdH0sXG5cblx0Zmlyc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAwICk7XG5cdH0sXG5cblx0bGFzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIC0xICk7XG5cdH0sXG5cblx0ZXZlbjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkuZ3JlcCggdGhpcywgZnVuY3Rpb24oIF9lbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuICggaSArIDEgKSAlIDI7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0b2RkOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5ncmVwKCB0aGlzLCBmdW5jdGlvbiggX2VsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gaSAlIDI7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0ZXE6IGZ1bmN0aW9uKCBpICkge1xuXHRcdHZhciBsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdGogPSAraSArICggaSA8IDAgPyBsZW4gOiAwICk7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqID49IDAgJiYgaiA8IGxlbiA/IFsgdGhpc1sgaiBdIF0gOiBbXSApO1xuXHR9LFxuXG5cdGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHJldk9iamVjdCB8fCB0aGlzLmNvbnN0cnVjdG9yKCk7XG5cdH0sXG5cblx0Ly8gRm9yIGludGVybmFsIHVzZSBvbmx5LlxuXHQvLyBCZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRob2QsIG5vdCBsaWtlIGEgalF1ZXJ5IG1ldGhvZC5cblx0cHVzaDogcHVzaCxcblx0c29ydDogYXJyLnNvcnQsXG5cdHNwbGljZTogYXJyLnNwbGljZVxufTtcblxualF1ZXJ5LmV4dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigpIHtcblx0dmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lLFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgMCBdIHx8IHt9LFxuXHRcdGkgPSAxLFxuXHRcdGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cdFx0ZGVlcCA9IGZhbHNlO1xuXG5cdC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb25cblx0aWYgKCB0eXBlb2YgdGFyZ2V0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRkZWVwID0gdGFyZ2V0O1xuXG5cdFx0Ly8gU2tpcCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgaSBdIHx8IHt9O1xuXHRcdGkrKztcblx0fVxuXG5cdC8vIEhhbmRsZSBjYXNlIHdoZW4gdGFyZ2V0IGlzIGEgc3RyaW5nIG9yIHNvbWV0aGluZyAocG9zc2libGUgaW4gZGVlcCBjb3B5KVxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIgJiYgIWlzRnVuY3Rpb24oIHRhcmdldCApICkge1xuXHRcdHRhcmdldCA9IHt9O1xuXHR9XG5cblx0Ly8gRXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBvbmUgYXJndW1lbnQgaXMgcGFzc2VkXG5cdGlmICggaSA9PT0gbGVuZ3RoICkge1xuXHRcdHRhcmdldCA9IHRoaXM7XG5cdFx0aS0tO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cblx0XHQvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzXG5cdFx0aWYgKCAoIG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSApICE9IG51bGwgKSB7XG5cblx0XHRcdC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3Rcblx0XHRcdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRcdFx0Y29weSA9IG9wdGlvbnNbIG5hbWUgXTtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IE9iamVjdC5wcm90b3R5cGUgcG9sbHV0aW9uXG5cdFx0XHRcdC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3Bcblx0XHRcdFx0aWYgKCBuYW1lID09PSBcIl9fcHJvdG9fX1wiIHx8IHRhcmdldCA9PT0gY29weSApIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xuXHRcdFx0XHRpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb3B5ICkgfHxcblx0XHRcdFx0XHQoIGNvcHlJc0FycmF5ID0gQXJyYXkuaXNBcnJheSggY29weSApICkgKSApIHtcblx0XHRcdFx0XHRzcmMgPSB0YXJnZXRbIG5hbWUgXTtcblxuXHRcdFx0XHRcdC8vIEVuc3VyZSBwcm9wZXIgdHlwZSBmb3IgdGhlIHNvdXJjZSB2YWx1ZVxuXHRcdFx0XHRcdGlmICggY29weUlzQXJyYXkgJiYgIUFycmF5LmlzQXJyYXkoIHNyYyApICkge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBbXTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAhY29weUlzQXJyYXkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0ge307XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNsb25lID0gc3JjO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb3B5SXNBcnJheSA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0Ly8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtXG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApO1xuXG5cdFx0XHRcdC8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXNcblx0XHRcdFx0fSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0gY29weTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdlXG5cdGV4cGFuZG86IFwialF1ZXJ5XCIgKyAoIHZlcnNpb24gKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xcRC9nLCBcIlwiICksXG5cblx0Ly8gQXNzdW1lIGpRdWVyeSBpcyByZWFkeSB3aXRob3V0IHRoZSByZWFkeSBtb2R1bGVcblx0aXNSZWFkeTogdHJ1ZSxcblxuXHRlcnJvcjogZnVuY3Rpb24oIG1zZyApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoIG1zZyApO1xuXHR9LFxuXG5cdG5vb3A6IGZ1bmN0aW9uKCkge30sXG5cblx0aXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgcHJvdG8sIEN0b3I7XG5cblx0XHQvLyBEZXRlY3Qgb2J2aW91cyBuZWdhdGl2ZXNcblx0XHQvLyBVc2UgdG9TdHJpbmcgaW5zdGVhZCBvZiBqUXVlcnkudHlwZSB0byBjYXRjaCBob3N0IG9iamVjdHNcblx0XHRpZiAoICFvYmogfHwgdG9TdHJpbmcuY2FsbCggb2JqICkgIT09IFwiW29iamVjdCBPYmplY3RdXCIgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cHJvdG8gPSBnZXRQcm90byggb2JqICk7XG5cblx0XHQvLyBPYmplY3RzIHdpdGggbm8gcHJvdG90eXBlIChlLmcuLCBgT2JqZWN0LmNyZWF0ZSggbnVsbCApYCkgYXJlIHBsYWluXG5cdFx0aWYgKCAhcHJvdG8gKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBPYmplY3RzIHdpdGggcHJvdG90eXBlIGFyZSBwbGFpbiBpZmYgdGhleSB3ZXJlIGNvbnN0cnVjdGVkIGJ5IGEgZ2xvYmFsIE9iamVjdCBmdW5jdGlvblxuXHRcdEN0b3IgPSBoYXNPd24uY2FsbCggcHJvdG8sIFwiY29uc3RydWN0b3JcIiApICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuXHRcdHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIGZuVG9TdHJpbmcuY2FsbCggQ3RvciApID09PSBPYmplY3RGdW5jdGlvblN0cmluZztcblx0fSxcblxuXHRpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBuYW1lO1xuXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8vIEV2YWx1YXRlcyBhIHNjcmlwdCBpbiBhIHByb3ZpZGVkIGNvbnRleHQ7IGZhbGxzIGJhY2sgdG8gdGhlIGdsb2JhbCBvbmVcblx0Ly8gaWYgbm90IHNwZWNpZmllZC5cblx0Z2xvYmFsRXZhbDogZnVuY3Rpb24oIGNvZGUsIG9wdGlvbnMsIGRvYyApIHtcblx0XHRET01FdmFsKCBjb2RlLCB7IG5vbmNlOiBvcHRpb25zICYmIG9wdGlvbnMubm9uY2UgfSwgZG9jICk7XG5cdH0sXG5cblx0ZWFjaDogZnVuY3Rpb24oIG9iaiwgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGxlbmd0aCwgaSA9IDA7XG5cblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBvYmogKSApIHtcblx0XHRcdGxlbmd0aCA9IG9iai5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBvYmogKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHQvLyByZXN1bHRzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHtcblx0XHR2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTtcblxuXHRcdGlmICggYXJyICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGlzQXJyYXlMaWtlKCBPYmplY3QoIGFyciApICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggcmV0LFxuXHRcdFx0XHRcdHR5cGVvZiBhcnIgPT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFx0WyBhcnIgXSA6IGFyclxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5jYWxsKCByZXQsIGFyciApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0aW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHtcblx0XHRyZXR1cm4gYXJyID09IG51bGwgPyAtMSA6IGluZGV4T2YuY2FsbCggYXJyLCBlbGVtLCBpICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0bWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkge1xuXHRcdHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCxcblx0XHRcdGogPSAwLFxuXHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0Zmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07XG5cdFx0fVxuXG5cdFx0Zmlyc3QubGVuZ3RoID0gaTtcblxuXHRcdHJldHVybiBmaXJzdDtcblx0fSxcblxuXHRncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7XG5cdFx0dmFyIGNhbGxiYWNrSW52ZXJzZSxcblx0XHRcdG1hdGNoZXMgPSBbXSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoLFxuXHRcdFx0Y2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0O1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtc1xuXHRcdC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG5cdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTtcblx0XHRcdGlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVjdCApIHtcblx0XHRcdFx0bWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGNoZXM7XG5cdH0sXG5cblx0Ly8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkge1xuXHRcdHZhciBsZW5ndGgsIHZhbHVlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRyZXQgPSBbXTtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggZWxlbXMgKSApIHtcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsXG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gZWxlbXMgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0XHRyZXR1cm4gZmxhdCggcmV0ICk7XG5cdH0sXG5cblx0Ly8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzXG5cdGd1aWQ6IDEsXG5cblx0Ly8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyXG5cdC8vIHByb3BlcnRpZXMgdG8gaXQgc28gaXQgbmVlZHMgdG8gZXhpc3QuXG5cdHN1cHBvcnQ6IHN1cHBvcnRcbn0gKTtcblxuaWYgKCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdGpRdWVyeS5mblsgU3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJbIFN5bWJvbC5pdGVyYXRvciBdO1xufVxuXG4vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXBcbmpRdWVyeS5lYWNoKCBcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoIFwiIFwiICksXG5cdGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0XHRjbGFzczJ0eXBlWyBcIltvYmplY3QgXCIgKyBuYW1lICsgXCJdXCIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0fSApO1xuXG5mdW5jdGlvbiBpc0FycmF5TGlrZSggb2JqICkge1xuXG5cdC8vIFN1cHBvcnQ6IHJlYWwgaU9TIDguMiBvbmx5IChub3QgcmVwcm9kdWNpYmxlIGluIHNpbXVsYXRvcilcblx0Ly8gYGluYCBjaGVjayB1c2VkIHRvIHByZXZlbnQgSklUIGVycm9yIChnaC0yMTQ1KVxuXHQvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXNcblx0Ly8gcmVnYXJkaW5nIE5vZGVsaXN0IGxlbmd0aCBpbiBJRVxuXHR2YXIgbGVuZ3RoID0gISFvYmogJiYgXCJsZW5ndGhcIiBpbiBvYmogJiYgb2JqLmxlbmd0aCxcblx0XHR0eXBlID0gdG9UeXBlKCBvYmogKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIG9iaiApIHx8IGlzV2luZG93KCBvYmogKSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHlwZSA9PT0gXCJhcnJheVwiIHx8IGxlbmd0aCA9PT0gMCB8fFxuXHRcdHR5cGVvZiBsZW5ndGggPT09IFwibnVtYmVyXCIgJiYgbGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7XG59XG52YXIgU2l6emxlID1cbi8qIVxuICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUgdjIuMy42XG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanMuZm91bmRhdGlvbi9cbiAqXG4gKiBEYXRlOiAyMDIxLTAyLTE2XG4gKi9cbiggZnVuY3Rpb24oIHdpbmRvdyApIHtcbnZhciBpLFxuXHRzdXBwb3J0LFxuXHRFeHByLFxuXHRnZXRUZXh0LFxuXHRpc1hNTCxcblx0dG9rZW5pemUsXG5cdGNvbXBpbGUsXG5cdHNlbGVjdCxcblx0b3V0ZXJtb3N0Q29udGV4dCxcblx0c29ydElucHV0LFxuXHRoYXNEdXBsaWNhdGUsXG5cblx0Ly8gTG9jYWwgZG9jdW1lbnQgdmFyc1xuXHRzZXREb2N1bWVudCxcblx0ZG9jdW1lbnQsXG5cdGRvY0VsZW0sXG5cdGRvY3VtZW50SXNIVE1MLFxuXHRyYnVnZ3lRU0EsXG5cdHJidWdneU1hdGNoZXMsXG5cdG1hdGNoZXMsXG5cdGNvbnRhaW5zLFxuXG5cdC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGFcblx0ZXhwYW5kbyA9IFwic2l6emxlXCIgKyAxICogbmV3IERhdGUoKSxcblx0cHJlZmVycmVkRG9jID0gd2luZG93LmRvY3VtZW50LFxuXHRkaXJydW5zID0gMCxcblx0ZG9uZSA9IDAsXG5cdGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHR0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHtcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gMDtcblx0fSxcblxuXHQvLyBJbnN0YW5jZSBtZXRob2RzXG5cdGhhc093biA9ICgge30gKS5oYXNPd25Qcm9wZXJ0eSxcblx0YXJyID0gW10sXG5cdHBvcCA9IGFyci5wb3AsXG5cdHB1c2hOYXRpdmUgPSBhcnIucHVzaCxcblx0cHVzaCA9IGFyci5wdXNoLFxuXHRzbGljZSA9IGFyci5zbGljZSxcblxuXHQvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgYXMgaXQncyBmYXN0ZXIgdGhhbiBuYXRpdmVcblx0Ly8gaHR0cHM6Ly9qc3BlcmYuY29tL3Rob3ItaW5kZXhvZi12cy1mb3IvNVxuXHRpbmRleE9mID0gZnVuY3Rpb24oIGxpc3QsIGVsZW0gKSB7XG5cdFx0dmFyIGkgPSAwLFxuXHRcdFx0bGVuID0gbGlzdC5sZW5ndGg7XG5cdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRpZiAoIGxpc3RbIGkgXSA9PT0gZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRib29sZWFucyA9IFwiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufFwiICtcblx0XHRcImlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWRcIixcblxuXHQvLyBSZWd1bGFyIGV4cHJlc3Npb25zXG5cblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI3doaXRlc3BhY2Vcblx0d2hpdGVzcGFjZSA9IFwiW1xcXFx4MjBcXFxcdFxcXFxyXFxcXG5cXFxcZl1cIixcblxuXHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXN5bnRheC0zLyNpZGVudC10b2tlbi1kaWFncmFtXG5cdGlkZW50aWZpZXIgPSBcIig/OlxcXFxcXFxcW1xcXFxkYS1mQS1GXXsxLDZ9XCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIj98XFxcXFxcXFxbXlxcXFxyXFxcXG5cXFxcZl18W1xcXFx3LV18W15cXDAtXFxcXHg3Zl0pK1wiLFxuXG5cdC8vIEF0dHJpYnV0ZSBzZWxlY3RvcnM6IGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9yc1xuXHRhdHRyaWJ1dGVzID0gXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcIiArIHdoaXRlc3BhY2UgK1xuXG5cdFx0Ly8gT3BlcmF0b3IgKGNhcHR1cmUgMilcblx0XHRcIiooWypeJHwhfl0/PSlcIiArIHdoaXRlc3BhY2UgK1xuXG5cdFx0Ly8gXCJBdHRyaWJ1dGUgdmFsdWVzIG11c3QgYmUgQ1NTIGlkZW50aWZpZXJzIFtjYXB0dXJlIDVdXG5cdFx0Ly8gb3Igc3RyaW5ncyBbY2FwdHVyZSAzIG9yIGNhcHR1cmUgNF1cIlxuXHRcdFwiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIgKyBpZGVudGlmaWVyICsgXCIpKXwpXCIgK1xuXHRcdHdoaXRlc3BhY2UgKyBcIipcXFxcXVwiLFxuXG5cdHBzZXVkb3MgPSBcIjooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XFxcXCgoXCIgK1xuXG5cdFx0Ly8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czpcblx0XHQvLyAxLiBxdW90ZWQgKGNhcHR1cmUgMzsgY2FwdHVyZSA0IG9yIGNhcHR1cmUgNSlcblx0XHRcIignKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCIpfFwiICtcblxuXHRcdC8vIDIuIHNpbXBsZSAoY2FwdHVyZSA2KVxuXHRcdFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKClbXFxcXF1dfFwiICsgYXR0cmlidXRlcyArIFwiKSopfFwiICtcblxuXHRcdC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMilcblx0XHRcIi4qXCIgK1xuXHRcdFwiKVxcXFwpfClcIixcblxuXHQvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyXG5cdHJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwiK1wiLCBcImdcIiApLFxuXHRydHJpbSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIiArXG5cdFx0d2hpdGVzcGFjZSArIFwiKyRcIiwgXCJnXCIgKSxcblxuXHRyY29tbWEgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiosXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblx0cmNvbWJpbmF0b3JzID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFs+K35dfFwiICsgd2hpdGVzcGFjZSArIFwiKVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XCIqXCIgKSxcblx0cmRlc2NlbmQgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCJ8PlwiICksXG5cblx0cnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3MgKSxcblx0cmlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCBcIl5cIiArIGlkZW50aWZpZXIgKyBcIiRcIiApLFxuXG5cdG1hdGNoRXhwciA9IHtcblx0XHRcIklEXCI6IG5ldyBSZWdFeHAoIFwiXiMoXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIkNMQVNTXCI6IG5ldyBSZWdFeHAoIFwiXlxcXFwuKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJUQUdcIjogbmV3IFJlZ0V4cCggXCJeKFwiICsgaWRlbnRpZmllciArIFwifFsqXSlcIiApLFxuXHRcdFwiQVRUUlwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIGF0dHJpYnV0ZXMgKSxcblx0XHRcIlBTRVVET1wiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHBzZXVkb3MgKSxcblx0XHRcIkNISUxEXCI6IG5ldyBSZWdFeHAoIFwiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFxcXChcIiArXG5cdFx0XHR3aGl0ZXNwYWNlICsgXCIqKGV2ZW58b2RkfCgoWystXXwpKFxcXFxkKilufClcIiArIHdoaXRlc3BhY2UgKyBcIiooPzooWystXXwpXCIgK1xuXHRcdFx0d2hpdGVzcGFjZSArIFwiKihcXFxcZCspfCkpXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KVwiLCBcImlcIiApLFxuXHRcdFwiYm9vbFwiOiBuZXcgUmVnRXhwKCBcIl4oPzpcIiArIGJvb2xlYW5zICsgXCIpJFwiLCBcImlcIiApLFxuXG5cdFx0Ly8gRm9yIHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5pcygpXG5cdFx0Ly8gV2UgdXNlIHRoaXMgZm9yIFBPUyBtYXRjaGluZyBpbiBgc2VsZWN0YFxuXHRcdFwibmVlZHNDb250ZXh0XCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKigoPzotXFxcXGQpP1xcXFxkKilcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpKD89W14tXXwkKVwiLCBcImlcIiApXG5cdH0sXG5cblx0cmh0bWwgPSAvSFRNTCQvaSxcblx0cmlucHV0cyA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJoZWFkZXIgPSAvXmhcXGQkL2ksXG5cblx0cm5hdGl2ZSA9IC9eW157XStcXHtcXHMqXFxbbmF0aXZlIFxcdy8sXG5cblx0Ly8gRWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzXG5cdHJxdWlja0V4cHIgPSAvXig/OiMoW1xcdy1dKyl8KFxcdyspfFxcLihbXFx3LV0rKSkkLyxcblxuXHRyc2libGluZyA9IC9bK35dLyxcblxuXHQvLyBDU1MgZXNjYXBlc1xuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFyYWN0ZXJzXG5cdHJ1bmVzY2FwZSA9IG5ldyBSZWdFeHAoIFwiXFxcXFxcXFxbXFxcXGRhLWZBLUZdezEsNn1cIiArIHdoaXRlc3BhY2UgKyBcIj98XFxcXFxcXFwoW15cXFxcclxcXFxuXFxcXGZdKVwiLCBcImdcIiApLFxuXHRmdW5lc2NhcGUgPSBmdW5jdGlvbiggZXNjYXBlLCBub25IZXggKSB7XG5cdFx0dmFyIGhpZ2ggPSBcIjB4XCIgKyBlc2NhcGUuc2xpY2UoIDEgKSAtIDB4MTAwMDA7XG5cblx0XHRyZXR1cm4gbm9uSGV4ID9cblxuXHRcdFx0Ly8gU3RyaXAgdGhlIGJhY2tzbGFzaCBwcmVmaXggZnJvbSBhIG5vbi1oZXggZXNjYXBlIHNlcXVlbmNlXG5cdFx0XHRub25IZXggOlxuXG5cdFx0XHQvLyBSZXBsYWNlIGEgaGV4YWRlY2ltYWwgZXNjYXBlIHNlcXVlbmNlIHdpdGggdGhlIGVuY29kZWQgVW5pY29kZSBjb2RlIHBvaW50XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExK1xuXHRcdFx0Ly8gRm9yIHZhbHVlcyBvdXRzaWRlIHRoZSBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgKEJNUCksIG1hbnVhbGx5IGNvbnN0cnVjdCBhXG5cdFx0XHQvLyBzdXJyb2dhdGUgcGFpclxuXHRcdFx0aGlnaCA8IDAgP1xuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoICsgMHgxMDAwMCApIDpcblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCA+PiAxMCB8IDB4RDgwMCwgaGlnaCAmIDB4M0ZGIHwgMHhEQzAwICk7XG5cdH0sXG5cblx0Ly8gQ1NTIHN0cmluZy9pZGVudGlmaWVyIHNlcmlhbGl6YXRpb25cblx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNjb21tb24tc2VyaWFsaXppbmctaWRpb21zXG5cdHJjc3Nlc2NhcGUgPSAvKFtcXDAtXFx4MWZcXHg3Zl18Xi0/XFxkKXxeLSR8W15cXDAtXFx4MWZcXHg3Zi1cXHVGRkZGXFx3LV0vZyxcblx0ZmNzc2VzY2FwZSA9IGZ1bmN0aW9uKCBjaCwgYXNDb2RlUG9pbnQgKSB7XG5cdFx0aWYgKCBhc0NvZGVQb2ludCApIHtcblxuXHRcdFx0Ly8gVSswMDAwIE5VTEwgYmVjb21lcyBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSXG5cdFx0XHRpZiAoIGNoID09PSBcIlxcMFwiICkge1xuXHRcdFx0XHRyZXR1cm4gXCJcXHVGRkZEXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnRyb2wgY2hhcmFjdGVycyBhbmQgKGRlcGVuZGVudCB1cG9uIHBvc2l0aW9uKSBudW1iZXJzIGdldCBlc2NhcGVkIGFzIGNvZGUgcG9pbnRzXG5cdFx0XHRyZXR1cm4gY2guc2xpY2UoIDAsIC0xICkgKyBcIlxcXFxcIiArXG5cdFx0XHRcdGNoLmNoYXJDb2RlQXQoIGNoLmxlbmd0aCAtIDEgKS50b1N0cmluZyggMTYgKSArIFwiIFwiO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyIHBvdGVudGlhbGx5LXNwZWNpYWwgQVNDSUkgY2hhcmFjdGVycyBnZXQgYmFja3NsYXNoLWVzY2FwZWRcblx0XHRyZXR1cm4gXCJcXFxcXCIgKyBjaDtcblx0fSxcblxuXHQvLyBVc2VkIGZvciBpZnJhbWVzXG5cdC8vIFNlZSBzZXREb2N1bWVudCgpXG5cdC8vIFJlbW92aW5nIHRoZSBmdW5jdGlvbiB3cmFwcGVyIGNhdXNlcyBhIFwiUGVybWlzc2lvbiBEZW5pZWRcIlxuXHQvLyBlcnJvciBpbiBJRVxuXHR1bmxvYWRIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG5cdFx0c2V0RG9jdW1lbnQoKTtcblx0fSxcblxuXHRpbkRpc2FibGVkRmllbGRzZXQgPSBhZGRDb21iaW5hdG9yKFxuXHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImZpZWxkc2V0XCI7XG5cdFx0fSxcblx0XHR7IGRpcjogXCJwYXJlbnROb2RlXCIsIG5leHQ6IFwibGVnZW5kXCIgfVxuXHQpO1xuXG4vLyBPcHRpbWl6ZSBmb3IgcHVzaC5hcHBseSggXywgTm9kZUxpc3QgKVxudHJ5IHtcblx0cHVzaC5hcHBseShcblx0XHQoIGFyciA9IHNsaWNlLmNhbGwoIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzICkgKSxcblx0XHRwcmVmZXJyZWREb2MuY2hpbGROb2Rlc1xuXHQpO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wXG5cdC8vIERldGVjdCBzaWxlbnRseSBmYWlsaW5nIHB1c2guYXBwbHlcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHRhcnJbIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzLmxlbmd0aCBdLm5vZGVUeXBlO1xufSBjYXRjaCAoIGUgKSB7XG5cdHB1c2ggPSB7IGFwcGx5OiBhcnIubGVuZ3RoID9cblxuXHRcdC8vIExldmVyYWdlIHNsaWNlIGlmIHBvc3NpYmxlXG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0cHVzaE5hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKCBlbHMgKSApO1xuXHRcdH0gOlxuXG5cdFx0Ly8gU3VwcG9ydDogSUU8OVxuXHRcdC8vIE90aGVyd2lzZSBhcHBlbmQgZGlyZWN0bHlcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHR2YXIgaiA9IHRhcmdldC5sZW5ndGgsXG5cdFx0XHRcdGkgPSAwO1xuXG5cdFx0XHQvLyBDYW4ndCB0cnVzdCBOb2RlTGlzdC5sZW5ndGhcblx0XHRcdHdoaWxlICggKCB0YXJnZXRbIGorKyBdID0gZWxzWyBpKysgXSApICkge31cblx0XHRcdHRhcmdldC5sZW5ndGggPSBqIC0gMTtcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBtLCBpLCBlbGVtLCBuaWQsIG1hdGNoLCBncm91cHMsIG5ld1NlbGVjdG9yLFxuXHRcdG5ld0NvbnRleHQgPSBjb250ZXh0ICYmIGNvbnRleHQub3duZXJEb2N1bWVudCxcblxuXHRcdC8vIG5vZGVUeXBlIGRlZmF1bHRzIHRvIDksIHNpbmNlIGNvbnRleHQgZGVmYXVsdHMgdG8gZG9jdW1lbnRcblx0XHRub2RlVHlwZSA9IGNvbnRleHQgPyBjb250ZXh0Lm5vZGVUeXBlIDogOTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBSZXR1cm4gZWFybHkgZnJvbSBjYWxscyB3aXRoIGludmFsaWQgc2VsZWN0b3Igb3IgY29udGV4dFxuXHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiB8fCAhc2VsZWN0b3IgfHxcblx0XHRub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSAmJiBub2RlVHlwZSAhPT0gMTEgKSB7XG5cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fVxuXG5cdC8vIFRyeSB0byBzaG9ydGN1dCBmaW5kIG9wZXJhdGlvbnMgKGFzIG9wcG9zZWQgdG8gZmlsdGVycykgaW4gSFRNTCBkb2N1bWVudHNcblx0aWYgKCAhc2VlZCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHRcdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuXG5cdFx0aWYgKCBkb2N1bWVudElzSFRNTCApIHtcblxuXHRcdFx0Ly8gSWYgdGhlIHNlbGVjdG9yIGlzIHN1ZmZpY2llbnRseSBzaW1wbGUsIHRyeSB1c2luZyBhIFwiZ2V0KkJ5KlwiIERPTSBtZXRob2Rcblx0XHRcdC8vIChleGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBleGlzdClcblx0XHRcdGlmICggbm9kZVR5cGUgIT09IDExICYmICggbWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHQvLyBJRCBzZWxlY3RvclxuXHRcdFx0XHRpZiAoICggbSA9IG1hdGNoWyAxIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvY3VtZW50IGNvbnRleHRcblx0XHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRcdGlmICggZWxlbS5pZCA9PT0gbSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBFbGVtZW50IGNvbnRleHRcblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdGlmICggbmV3Q29udGV4dCAmJiAoIGVsZW0gPSBuZXdDb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkgKSAmJlxuXHRcdFx0XHRcdFx0XHRjb250YWlucyggY29udGV4dCwgZWxlbSApICYmXG5cdFx0XHRcdFx0XHRcdGVsZW0uaWQgPT09IG0gKSB7XG5cblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUeXBlIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWyAyIF0gKSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHRcdC8vIENsYXNzIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggbSA9IG1hdGNoWyAzIF0gKSAmJiBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiZcblx0XHRcdFx0XHRjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRha2UgYWR2YW50YWdlIG9mIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdGlmICggc3VwcG9ydC5xc2EgJiZcblx0XHRcdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXSAmJlxuXHRcdFx0XHQoICFyYnVnZ3lRU0EgfHwgIXJidWdneVFTQS50ZXN0KCBzZWxlY3RvciApICkgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA4IG9ubHlcblx0XHRcdFx0Ly8gRXhjbHVkZSBvYmplY3QgZWxlbWVudHNcblx0XHRcdFx0KCBub2RlVHlwZSAhPT0gMSB8fCBjb250ZXh0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwib2JqZWN0XCIgKSApIHtcblxuXHRcdFx0XHRuZXdTZWxlY3RvciA9IHNlbGVjdG9yO1xuXHRcdFx0XHRuZXdDb250ZXh0ID0gY29udGV4dDtcblxuXHRcdFx0XHQvLyBxU0EgY29uc2lkZXJzIGVsZW1lbnRzIG91dHNpZGUgYSBzY29waW5nIHJvb3Qgd2hlbiBldmFsdWF0aW5nIGNoaWxkIG9yXG5cdFx0XHRcdC8vIGRlc2NlbmRhbnQgY29tYmluYXRvcnMsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQuXG5cdFx0XHRcdC8vIEluIHN1Y2ggY2FzZXMsIHdlIHdvcmsgYXJvdW5kIHRoZSBiZWhhdmlvciBieSBwcmVmaXhpbmcgZXZlcnkgc2VsZWN0b3IgaW4gdGhlXG5cdFx0XHRcdC8vIGxpc3Qgd2l0aCBhbiBJRCBzZWxlY3RvciByZWZlcmVuY2luZyB0aGUgc2NvcGUgY29udGV4dC5cblx0XHRcdFx0Ly8gVGhlIHRlY2huaXF1ZSBoYXMgdG8gYmUgdXNlZCBhcyB3ZWxsIHdoZW4gYSBsZWFkaW5nIGNvbWJpbmF0b3IgaXMgdXNlZFxuXHRcdFx0XHQvLyBhcyBzdWNoIHNlbGVjdG9ycyBhcmUgbm90IHJlY29nbml6ZWQgYnkgcXVlcnlTZWxlY3RvckFsbC5cblx0XHRcdFx0Ly8gVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoaXMgdGVjaG5pcXVlLlxuXHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0KCByZGVzY2VuZC50ZXN0KCBzZWxlY3RvciApIHx8IHJjb21iaW5hdG9ycy50ZXN0KCBzZWxlY3RvciApICkgKSB7XG5cblx0XHRcdFx0XHQvLyBFeHBhbmQgY29udGV4dCBmb3Igc2libGluZyBzZWxlY3RvcnNcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHxcblx0XHRcdFx0XHRcdGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBXZSBjYW4gdXNlIDpzY29wZSBpbnN0ZWFkIG9mIHRoZSBJRCBoYWNrIGlmIHRoZSBicm93c2VyXG5cdFx0XHRcdFx0Ly8gc3VwcG9ydHMgaXQgJiBpZiB3ZSdyZSBub3QgY2hhbmdpbmcgdGhlIGNvbnRleHQuXG5cdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICE9PSBjb250ZXh0IHx8ICFzdXBwb3J0LnNjb3BlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBDYXB0dXJlIHRoZSBjb250ZXh0IElELCBzZXR0aW5nIGl0IGZpcnN0IGlmIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdFx0aWYgKCAoIG5pZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCBcImlkXCIgKSApICkge1xuXHRcdFx0XHRcdFx0XHRuaWQgPSBuaWQucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dC5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgKCBuaWQgPSBleHBhbmRvICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmVmaXggZXZlcnkgc2VsZWN0b3IgaW4gdGhlIGxpc3Rcblx0XHRcdFx0XHRncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHRcdFx0XHRpID0gZ3JvdXBzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGdyb3Vwc1sgaSBdID0gKCBuaWQgPyBcIiNcIiArIG5pZCA6IFwiOnNjb3BlXCIgKSArIFwiIFwiICtcblx0XHRcdFx0XHRcdFx0dG9TZWxlY3RvciggZ3JvdXBzWyBpIF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bmV3U2VsZWN0b3IgPSBncm91cHMuam9pbiggXCIsXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cyxcblx0XHRcdFx0XHRcdG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0b3IgKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH0gY2F0Y2ggKCBxc2FFcnJvciApIHtcblx0XHRcdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdGlmICggbmlkID09PSBleHBhbmRvICkge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFsbCBvdGhlcnNcblx0cmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoXG4gKlx0cHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0aClcbiAqXHRkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuXHR2YXIga2V5cyA9IFtdO1xuXG5cdGZ1bmN0aW9uIGNhY2hlKCBrZXksIHZhbHVlICkge1xuXG5cdFx0Ly8gVXNlIChrZXkgKyBcIiBcIikgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggbmF0aXZlIHByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1Nylcblx0XHRpZiAoIGtleXMucHVzaCgga2V5ICsgXCIgXCIgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7XG5cblx0XHRcdC8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllc1xuXHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlzLnNoaWZ0KCkgXTtcblx0XHR9XG5cdFx0cmV0dXJuICggY2FjaGVbIGtleSArIFwiIFwiIF0gPSB2YWx1ZSApO1xuXHR9XG5cdHJldHVybiBjYWNoZTtcbn1cblxuLyoqXG4gKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNpenpsZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmtcbiAqL1xuZnVuY3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHtcblx0Zm5bIGV4cGFuZG8gXSA9IHRydWU7XG5cdHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGVsZW1lbnQgYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc3NlcnQoIGZuICkge1xuXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImZpZWxkc2V0XCIgKTtcblxuXHR0cnkge1xuXHRcdHJldHVybiAhIWZuKCBlbCApO1xuXHR9IGNhdGNoICggZSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZmluYWxseSB7XG5cblx0XHQvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHRcblx0XHRpZiAoIGVsLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApO1xuXHRcdH1cblxuXHRcdC8vIHJlbGVhc2UgbWVtb3J5IGluIElFXG5cdFx0ZWwgPSBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogQWRkcyB0aGUgc2FtZSBoYW5kbGVyIGZvciBhbGwgb2YgdGhlIHNwZWNpZmllZCBhdHRyc1xuICogQHBhcmFtIHtTdHJpbmd9IGF0dHJzIFBpcGUtc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBhcHBsaWVkXG4gKi9cbmZ1bmN0aW9uIGFkZEhhbmRsZSggYXR0cnMsIGhhbmRsZXIgKSB7XG5cdHZhciBhcnIgPSBhdHRycy5zcGxpdCggXCJ8XCIgKSxcblx0XHRpID0gYXJyLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRFeHByLmF0dHJIYW5kbGVbIGFyclsgaSBdIF0gPSBoYW5kbGVyO1xuXHR9XG59XG5cbi8qKlxuICogQ2hlY2tzIGRvY3VtZW50IG9yZGVyIG9mIHR3byBzaWJsaW5nc1xuICogQHBhcmFtIHtFbGVtZW50fSBhXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFJldHVybnMgbGVzcyB0aGFuIDAgaWYgYSBwcmVjZWRlcyBiLCBncmVhdGVyIHRoYW4gMCBpZiBhIGZvbGxvd3MgYlxuICovXG5mdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7XG5cdHZhciBjdXIgPSBiICYmIGEsXG5cdFx0ZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBlID09PSAxICYmIGIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4O1xuXG5cdC8vIFVzZSBJRSBzb3VyY2VJbmRleCBpZiBhdmFpbGFibGUgb24gYm90aCBub2Rlc1xuXHRpZiAoIGRpZmYgKSB7XG5cdFx0cmV0dXJuIGRpZmY7XG5cdH1cblxuXHQvLyBDaGVjayBpZiBiIGZvbGxvd3MgYVxuXHRpZiAoIGN1ciApIHtcblx0XHR3aGlsZSAoICggY3VyID0gY3VyLm5leHRTaWJsaW5nICkgKSB7XG5cdFx0XHRpZiAoIGN1ciA9PT0gYiApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhID8gMSA6IC0xO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgaW5wdXQgdHlwZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0UHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBidXR0b25zXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gKCBuYW1lID09PSBcImlucHV0XCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIiApICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIDplbmFibGVkLzpkaXNhYmxlZFxuICogQHBhcmFtIHtCb29sZWFufSBkaXNhYmxlZCB0cnVlIGZvciA6ZGlzYWJsZWQ7IGZhbHNlIGZvciA6ZW5hYmxlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZGlzYWJsZWQgKSB7XG5cblx0Ly8gS25vd24gOmRpc2FibGVkIGZhbHNlIHBvc2l0aXZlczogZmllbGRzZXRbZGlzYWJsZWRdID4gbGVnZW5kOm50aC1vZi10eXBlKG4rMikgOmNhbi1kaXNhYmxlXG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE9ubHkgY2VydGFpbiBlbGVtZW50cyBjYW4gbWF0Y2ggOmVuYWJsZWQgb3IgOmRpc2FibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZW5hYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWRpc2FibGVkXG5cdFx0aWYgKCBcImZvcm1cIiBpbiBlbGVtICkge1xuXG5cdFx0XHQvLyBDaGVjayBmb3IgaW5oZXJpdGVkIGRpc2FibGVkbmVzcyBvbiByZWxldmFudCBub24tZGlzYWJsZWQgZWxlbWVudHM6XG5cdFx0XHQvLyAqIGxpc3RlZCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBmaWVsZHNldFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NhdGVnb3J5LWxpc3RlZFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtZmUtZGlzYWJsZWRcblx0XHRcdC8vICogb3B0aW9uIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LW9wdGlvbi1kaXNhYmxlZFxuXHRcdFx0Ly8gQWxsIHN1Y2ggZWxlbWVudHMgaGF2ZSBhIFwiZm9ybVwiIHByb3BlcnR5LlxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgJiYgZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0Ly8gT3B0aW9uIGVsZW1lbnRzIGRlZmVyIHRvIGEgcGFyZW50IG9wdGdyb3VwIGlmIHByZXNlbnRcblx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5wYXJlbnROb2RlLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDYgLSAxMVxuXHRcdFx0XHQvLyBVc2UgdGhlIGlzRGlzYWJsZWQgc2hvcnRjdXQgcHJvcGVydHkgdG8gY2hlY2sgZm9yIGRpc2FibGVkIGZpZWxkc2V0IGFuY2VzdG9yc1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pc0Rpc2FibGVkID09PSBkaXNhYmxlZCB8fFxuXG5cdFx0XHRcdFx0Ly8gV2hlcmUgdGhlcmUgaXMgbm8gaXNEaXNhYmxlZCwgY2hlY2sgbWFudWFsbHlcblx0XHRcdFx0XHQvKiBqc2hpbnQgLVcwMTggKi9cblx0XHRcdFx0XHRlbGVtLmlzRGlzYWJsZWQgIT09ICFkaXNhYmxlZCAmJlxuXHRcdFx0XHRcdGluRGlzYWJsZWRGaWVsZHNldCggZWxlbSApID09PSBkaXNhYmxlZDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXG5cdFx0Ly8gVHJ5IHRvIHdpbm5vdyBvdXQgZWxlbWVudHMgdGhhdCBjYW4ndCBiZSBkaXNhYmxlZCBiZWZvcmUgdHJ1c3RpbmcgdGhlIGRpc2FibGVkIHByb3BlcnR5LlxuXHRcdC8vIFNvbWUgdmljdGltcyBnZXQgY2F1Z2h0IGluIG91ciBuZXQgKGxhYmVsLCBsZWdlbmQsIG1lbnUsIHRyYWNrKSwgYnV0IGl0IHNob3VsZG4ndFxuXHRcdC8vIGV2ZW4gZXhpc3Qgb24gdGhlbSwgbGV0IGFsb25lIGhhdmUgYSBib29sZWFuIHZhbHVlLlxuXHRcdH0gZWxzZSBpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdH1cblxuXHRcdC8vIFJlbWFpbmluZyBlbGVtZW50cyBhcmUgbmVpdGhlciA6ZW5hYmxlZCBub3IgOmRpc2FibGVkXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgcG9zaXRpb25hbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkge1xuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggYXJndW1lbnQgKSB7XG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XG5cdFx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHR2YXIgaixcblx0XHRcdFx0bWF0Y2hJbmRleGVzID0gZm4oIFtdLCBzZWVkLmxlbmd0aCwgYXJndW1lbnQgKSxcblx0XHRcdFx0aSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7XG5cblx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlc1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggc2VlZFsgKCBqID0gbWF0Y2hJbmRleGVzWyBpIF0gKSBdICkge1xuXHRcdFx0XHRcdHNlZWRbIGogXSA9ICEoIG1hdGNoZXNbIGogXSA9IHNlZWRbIGogXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9ICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcbiAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcblx0cmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29udGV4dDtcbn1cblxuLy8gRXhwb3NlIHN1cHBvcnQgdmFycyBmb3IgY29udmVuaWVuY2VcbnN1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9O1xuXG4vKipcbiAqIERldGVjdHMgWE1MIG5vZGVzXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudFxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBub24tSFRNTCBYTUwgbm9kZVxuICovXG5pc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbmFtZXNwYWNlID0gZWxlbSAmJiBlbGVtLm5hbWVzcGFjZVVSSSxcblx0XHRkb2NFbGVtID0gZWxlbSAmJiAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkuZG9jdW1lbnRFbGVtZW50O1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OFxuXHQvLyBBc3N1bWUgSFRNTCB3aGVuIGRvY3VtZW50RWxlbWVudCBkb2Vzbid0IHlldCBleGlzdCwgc3VjaCBhcyBpbnNpZGUgbG9hZGluZyBpZnJhbWVzXG5cdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC80ODMzXG5cdHJldHVybiAhcmh0bWwudGVzdCggbmFtZXNwYWNlIHx8IGRvY0VsZW0gJiYgZG9jRWxlbS5ub2RlTmFtZSB8fCBcIkhUTUxcIiApO1xufTtcblxuLyoqXG4gKiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IFtkb2NdIEFuIGVsZW1lbnQgb3IgZG9jdW1lbnQgb2JqZWN0IHRvIHVzZSB0byBzZXQgdGhlIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKi9cbnNldERvY3VtZW50ID0gU2l6emxlLnNldERvY3VtZW50ID0gZnVuY3Rpb24oIG5vZGUgKSB7XG5cdHZhciBoYXNDb21wYXJlLCBzdWJXaW5kb3csXG5cdFx0ZG9jID0gbm9kZSA/IG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlIDogcHJlZmVycmVkRG9jO1xuXG5cdC8vIFJldHVybiBlYXJseSBpZiBkb2MgaXMgaW52YWxpZCBvciBhbHJlYWR5IHNlbGVjdGVkXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggZG9jID09IGRvY3VtZW50IHx8IGRvYy5ub2RlVHlwZSAhPT0gOSB8fCAhZG9jLmRvY3VtZW50RWxlbWVudCApIHtcblx0XHRyZXR1cm4gZG9jdW1lbnQ7XG5cdH1cblxuXHQvLyBVcGRhdGUgZ2xvYmFsIHZhcmlhYmxlc1xuXHRkb2N1bWVudCA9IGRvYztcblx0ZG9jRWxlbSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblx0ZG9jdW1lbnRJc0hUTUwgPSAhaXNYTUwoIGRvY3VtZW50ICk7XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4K1xuXHQvLyBBY2Nlc3NpbmcgaWZyYW1lIGRvY3VtZW50cyBhZnRlciB1bmxvYWQgdGhyb3dzIFwicGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvcnMgKGpRdWVyeSAjMTM5MzYpXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggcHJlZmVycmVkRG9jICE9IGRvY3VtZW50ICYmXG5cdFx0KCBzdWJXaW5kb3cgPSBkb2N1bWVudC5kZWZhdWx0VmlldyApICYmIHN1YldpbmRvdy50b3AgIT09IHN1YldpbmRvdyApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDExLCBFZGdlXG5cdFx0aWYgKCBzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcInVubG9hZFwiLCB1bmxvYWRIYW5kbGVyLCBmYWxzZSApO1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDEwIG9ubHlcblx0XHR9IGVsc2UgaWYgKCBzdWJXaW5kb3cuYXR0YWNoRXZlbnQgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYXR0YWNoRXZlbnQoIFwib251bmxvYWRcIiwgdW5sb2FkSGFuZGxlciApO1xuXHRcdH1cblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDggLSAxMSssIEVkZ2UgMTIgLSAxOCssIENocm9tZSA8PTE2IC0gMjUgb25seSwgRmlyZWZveCA8PTMuNiAtIDMxIG9ubHksXG5cdC8vIFNhZmFyaSA0IC0gNSBvbmx5LCBPcGVyYSA8PTExLjYgLSAxMi54IG9ubHlcblx0Ly8gSUUvRWRnZSAmIG9sZGVyIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgdGhlIDpzY29wZSBwc2V1ZG8tY2xhc3MuXG5cdC8vIFN1cHBvcnQ6IFNhZmFyaSA2LjAgb25seVxuXHQvLyBTYWZhcmkgNi4wIHN1cHBvcnRzIDpzY29wZSBidXQgaXQncyBhbiBhbGlhcyBvZiA6cm9vdCB0aGVyZS5cblx0c3VwcG9ydC5zY29wZSA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xuXHRcdHJldHVybiB0eXBlb2YgZWwucXVlcnlTZWxlY3RvckFsbCAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0IWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOnNjb3BlIGZpZWxkc2V0IGRpdlwiICkubGVuZ3RoO1xuXHR9ICk7XG5cblx0LyogQXR0cmlidXRlc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gU3VwcG9ydDogSUU8OFxuXHQvLyBWZXJpZnkgdGhhdCBnZXRBdHRyaWJ1dGUgcmVhbGx5IHJldHVybnMgYXR0cmlidXRlcyBhbmQgbm90IHByb3BlcnRpZXNcblx0Ly8gKGV4Y2VwdGluZyBJRTggYm9vbGVhbnMpXG5cdHN1cHBvcnQuYXR0cmlidXRlcyA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdGVsLmNsYXNzTmFtZSA9IFwiaVwiO1xuXHRcdHJldHVybiAhZWwuZ2V0QXR0cmlidXRlKCBcImNsYXNzTmFtZVwiICk7XG5cdH0gKTtcblxuXHQvKiBnZXRFbGVtZW50KHMpQnkqXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikgcmV0dXJucyBvbmx5IGVsZW1lbnRzXG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlQ29tbWVudCggXCJcIiApICk7XG5cdFx0cmV0dXJuICFlbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCIqXCIgKS5sZW5ndGg7XG5cdH0gKTtcblxuXHQvLyBTdXBwb3J0OiBJRTw5XG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDEwXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZVxuXHQvLyBUaGUgYnJva2VuIGdldEVsZW1lbnRCeUlkIG1ldGhvZHMgZG9uJ3QgcGljayB1cCBwcm9ncmFtbWF0aWNhbGx5LXNldCBuYW1lcyxcblx0Ly8gc28gdXNlIGEgcm91bmRhYm91dCBnZXRFbGVtZW50c0J5TmFtZSB0ZXN0XG5cdHN1cHBvcnQuZ2V0QnlJZCA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuaWQgPSBleHBhbmRvO1xuXHRcdHJldHVybiAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICkubGVuZ3RoO1xuXHR9ICk7XG5cblx0Ly8gSUQgZmlsdGVyIGFuZCBmaW5kXG5cdGlmICggc3VwcG9ydC5nZXRCeUlkICkge1xuXHRcdEV4cHIuZmlsdGVyWyBcIklEXCIgXSA9IGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwiaWRcIiApID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cdFx0RXhwci5maW5kWyBcIklEXCIgXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblx0XHRcdFx0cmV0dXJuIGVsZW0gPyBbIGVsZW0gXSA6IFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0RXhwci5maWx0ZXJbIFwiSURcIiBdID0gIGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gNyBvbmx5XG5cdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgaXMgbm90IHJlbGlhYmxlIGFzIGEgZmluZCBzaG9ydGN1dFxuXHRcdEV4cHIuZmluZFsgXCJJRFwiIF0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgbm9kZSwgaSwgZWxlbXMsXG5cdFx0XHRcdFx0ZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtICkge1xuXG5cdFx0XHRcdFx0Ly8gVmVyaWZ5IHRoZSBpZCBhdHRyaWJ1dGVcblx0XHRcdFx0XHRub2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBcImlkXCIgKTtcblx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRmFsbCBiYWNrIG9uIGdldEVsZW1lbnRzQnlOYW1lXG5cdFx0XHRcdFx0ZWxlbXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lKCBpZCApO1xuXHRcdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRub2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBcImlkXCIgKTtcblx0XHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Ly8gVGFnXG5cdEV4cHIuZmluZFsgXCJUQUdcIiBdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA/XG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdFx0Ly8gRG9jdW1lbnRGcmFnbWVudCBub2RlcyBkb24ndCBoYXZlIGdFQlROXG5cdFx0XHR9IGVsc2UgaWYgKCBzdXBwb3J0LnFzYSApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnICk7XG5cdFx0XHR9XG5cdFx0fSA6XG5cblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdHRtcCA9IFtdLFxuXHRcdFx0XHRpID0gMCxcblxuXHRcdFx0XHQvLyBCeSBoYXBweSBjb2luY2lkZW5jZSwgYSAoYnJva2VuKSBnRUJUTiBhcHBlYXJzIG9uIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgdG9vXG5cdFx0XHRcdHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdFx0Ly8gRmlsdGVyIG91dCBwb3NzaWJsZSBjb21tZW50c1xuXHRcdFx0aWYgKCB0YWcgPT09IFwiKlwiICkge1xuXHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IHJlc3VsdHNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0dG1wLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdG1wO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0fTtcblxuXHQvLyBDbGFzc1xuXHRFeHByLmZpbmRbIFwiQ0xBU1NcIiBdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGZ1bmN0aW9uKCBjbGFzc05hbWUsIGNvbnRleHQgKSB7XG5cdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggY2xhc3NOYW1lICk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qIFFTQS9tYXRjaGVzU2VsZWN0b3Jcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFFTQSBhbmQgbWF0Y2hlc1NlbGVjdG9yIHN1cHBvcnRcblxuXHQvLyBtYXRjaGVzU2VsZWN0b3IoOmFjdGl2ZSkgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKElFOS9PcGVyYSAxMS41KVxuXHRyYnVnZ3lNYXRjaGVzID0gW107XG5cblx0Ly8gcVNhKDpmb2N1cykgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKENocm9tZSAyMSlcblx0Ly8gV2UgYWxsb3cgdGhpcyBiZWNhdXNlIG9mIGEgYnVnIGluIElFOC85IHRoYXQgdGhyb3dzIGFuIGVycm9yXG5cdC8vIHdoZW5ldmVyIGBkb2N1bWVudC5hY3RpdmVFbGVtZW50YCBpcyBhY2Nlc3NlZCBvbiBhbiBpZnJhbWVcblx0Ly8gU28sIHdlIGFsbG93IDpmb2N1cyB0byBwYXNzIHRocm91Z2ggUVNBIGFsbCB0aGUgdGltZSB0byBhdm9pZCB0aGUgSUUgZXJyb3Jcblx0Ly8gU2VlIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM3OFxuXHRyYnVnZ3lRU0EgPSBbXTtcblxuXHRpZiAoICggc3VwcG9ydC5xc2EgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSApICkge1xuXG5cdFx0Ly8gQnVpbGQgUVNBIHJlZ2V4XG5cdFx0Ly8gUmVnZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdvIFBlcmluaVxuXHRcdGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdFx0XHR2YXIgaW5wdXQ7XG5cblx0XHRcdC8vIFNlbGVjdCBpcyBzZXQgdG8gZW1wdHkgc3RyaW5nIG9uIHB1cnBvc2Vcblx0XHRcdC8vIFRoaXMgaXMgdG8gdGVzdCBJRSdzIHRyZWF0bWVudCBvZiBub3QgZXhwbGljaXRseVxuXHRcdFx0Ly8gc2V0dGluZyBhIGJvb2xlYW4gY29udGVudCBhdHRyaWJ1dGUsXG5cdFx0XHQvLyBzaW5jZSBpdHMgcHJlc2VuY2Ugc2hvdWxkIGJlIGVub3VnaFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEyMzU5XG5cdFx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlubmVySFRNTCA9IFwiPGEgaWQ9J1wiICsgZXhwYW5kbyArIFwiJz48L2E+XCIgK1xuXHRcdFx0XHRcIjxzZWxlY3QgaWQ9J1wiICsgZXhwYW5kbyArIFwiLVxcclxcXFwnIG1zYWxsb3djYXB0dXJlPScnPlwiICtcblx0XHRcdFx0XCI8b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PlwiO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTgsIE9wZXJhIDExLTEyLjE2XG5cdFx0XHQvLyBOb3RoaW5nIHNob3VsZCBiZSBzZWxlY3RlZCB3aGVuIGVtcHR5IHN0cmluZ3MgZm9sbG93IF49IG9yICQ9IG9yICo9XG5cdFx0XHQvLyBUaGUgdGVzdCBhdHRyaWJ1dGUgbXVzdCBiZSB1bmtub3duIGluIE9wZXJhIGJ1dCBcInNhZmVcIiBmb3IgV2luUlRcblx0XHRcdC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvaGg0NjUzODguYXNweCNhdHRyaWJ1dGVfc2VjdGlvblxuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIlttc2FsbG93Y2FwdHVyZV49JyddXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlsqXiRdPVwiICsgd2hpdGVzcGFjZSArIFwiKig/OicnfFxcXCJcXFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gQm9vbGVhbiBhdHRyaWJ1dGVzIGFuZCBcInZhbHVlXCIgYXJlIG5vdCB0cmVhdGVkIGNvcnJlY3RseVxuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbc2VsZWN0ZWRdXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86dmFsdWV8XCIgKyBib29sZWFucyArIFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZTwyOSwgQW5kcm9pZDw0LjQsIFNhZmFyaTw3LjArLCBpT1M8Ny4wKywgUGhhbnRvbUpTPDEuOS44K1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbaWR+PVwiICsgZXhwYW5kbyArIFwiLV1cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwifj1cIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTUgLSAxOCtcblx0XHRcdC8vIElFIDExL0VkZ2UgZG9uJ3QgZmluZCBlbGVtZW50cyBvbiBhIGBbbmFtZT0nJ11gIHF1ZXJ5IGluIHNvbWUgY2FzZXMuXG5cdFx0XHQvLyBBZGRpbmcgYSB0ZW1wb3JhcnkgYXR0cmlidXRlIHRvIHRoZSBkb2N1bWVudCBiZWZvcmUgdGhlIHNlbGVjdGlvbiB3b3Jrc1xuXHRcdFx0Ly8gYXJvdW5kIHRoZSBpc3N1ZS5cblx0XHRcdC8vIEludGVyZXN0aW5nbHksIElFIDEwICYgb2xkZXIgZG9uJ3Qgc2VlbSB0byBoYXZlIHRoZSBpc3N1ZS5cblx0XHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcIlwiICk7XG5cdFx0XHRlbC5hcHBlbmRDaGlsZCggaW5wdXQgKTtcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW25hbWU9JyddXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqbmFtZVwiICsgd2hpdGVzcGFjZSArIFwiKj1cIiArXG5cdFx0XHRcdFx0d2hpdGVzcGFjZSArIFwiKig/OicnfFxcXCJcXFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdlYmtpdC9PcGVyYSAtIDpjaGVja2VkIHNob3VsZCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9uIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOmNoZWNrZWRcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmNoZWNrZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgOCssIGlPUyA4K1xuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjg1MVxuXHRcdFx0Ly8gSW4tcGFnZSBgc2VsZWN0b3IjaWQgc2libGluZy1jb21iaW5hdG9yIHNlbGVjdG9yYCBmYWlsc1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJhI1wiICsgZXhwYW5kbyArIFwiKypcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiLiMuK1srfl1cIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9My42IC0gNSBvbmx5XG5cdFx0XHQvLyBPbGQgRmlyZWZveCBkb2Vzbid0IHRocm93IG9uIGEgYmFkbHktZXNjYXBlZCBpZGVudGlmaWVyLlxuXHRcdFx0ZWwucXVlcnlTZWxlY3RvckFsbCggXCJcXFxcXFxmXCIgKTtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIltcXFxcclxcXFxuXFxcXGZdXCIgKTtcblx0XHR9ICk7XG5cblx0XHRhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRcdGVsLmlubmVySFRNTCA9IFwiPGEgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PlwiO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHNcblx0XHRcdC8vIFRoZSB0eXBlIGFuZCBuYW1lIGF0dHJpYnV0ZXMgYXJlIHJlc3RyaWN0ZWQgZHVyaW5nIC5pbm5lckhUTUwgYXNzaWdubWVudFxuXHRcdFx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcImhpZGRlblwiICk7XG5cdFx0XHRlbC5hcHBlbmRDaGlsZCggaW5wdXQgKS5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcIkRcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEVuZm9yY2UgY2FzZS1zZW5zaXRpdml0eSBvZiBuYW1lIGF0dHJpYnV0ZVxuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltuYW1lPWRdXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIipbKl4kfCF+XT89XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRkYgMy41IC0gOmVuYWJsZWQvOmRpc2FibGVkIGFuZCBoaWRkZW4gZWxlbWVudHMgKGhpZGRlbiBlbGVtZW50cyBhcmUgc3RpbGwgZW5hYmxlZClcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOmVuYWJsZWRcIiApLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTktMTErXG5cdFx0XHQvLyBJRSdzIDpkaXNhYmxlZCBzZWxlY3RvciBkb2VzIG5vdCBwaWNrIHVwIHRoZSBjaGlsZHJlbiBvZiBkaXNhYmxlZCBmaWVsZHNldHNcblx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpkaXNhYmxlZFwiICkubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IE9wZXJhIDEwIC0gMTEgb25seVxuXHRcdFx0Ly8gT3BlcmEgMTAtMTEgZG9lcyBub3QgdGhyb3cgb24gcG9zdC1jb21tYSBpbnZhbGlkIHBzZXVkb3Ncblx0XHRcdGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiKiw6eFwiICk7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCIsLio6XCIgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRpZiAoICggc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgPSBybmF0aXZlLnRlc3QoICggbWF0Y2hlcyA9IGRvY0VsZW0ubWF0Y2hlcyB8fFxuXHRcdGRvY0VsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm9NYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm1zTWF0Y2hlc1NlbGVjdG9yICkgKSApICkge1xuXG5cdFx0YXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0XHRcdC8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvclxuXHRcdFx0Ly8gb24gYSBkaXNjb25uZWN0ZWQgbm9kZSAoSUUgOSlcblx0XHRcdHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggPSBtYXRjaGVzLmNhbGwoIGVsLCBcIipcIiApO1xuXG5cdFx0XHQvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uXG5cdFx0XHQvLyBHZWNrbyBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkXG5cdFx0XHRtYXRjaGVzLmNhbGwoIGVsLCBcIltzIT0nJ106eFwiICk7XG5cdFx0XHRyYnVnZ3lNYXRjaGVzLnB1c2goIFwiIT1cIiwgcHNldWRvcyApO1xuXHRcdH0gKTtcblx0fVxuXG5cdHJidWdneVFTQSA9IHJidWdneVFTQS5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oIFwifFwiICkgKTtcblx0cmJ1Z2d5TWF0Y2hlcyA9IHJidWdneU1hdGNoZXMubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneU1hdGNoZXMuam9pbiggXCJ8XCIgKSApO1xuXG5cdC8qIENvbnRhaW5zXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblx0aGFzQ29tcGFyZSA9IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApO1xuXG5cdC8vIEVsZW1lbnQgY29udGFpbnMgYW5vdGhlclxuXHQvLyBQdXJwb3NlZnVsbHkgc2VsZi1leGNsdXNpdmVcblx0Ly8gQXMgaW4sIGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBpdHNlbGZcblx0Y29udGFpbnMgPSBoYXNDb21wYXJlIHx8IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb250YWlucyApID9cblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdHZhciBhZG93biA9IGEubm9kZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsXG5cdFx0XHRcdGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlO1xuXHRcdFx0cmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cdFx0XHRcdGFkb3duLmNvbnRhaW5zID9cblx0XHRcdFx0XHRhZG93bi5jb250YWlucyggYnVwICkgOlxuXHRcdFx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYnVwICkgJiAxNlxuXHRcdFx0KSApO1xuXHRcdH0gOlxuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0aWYgKCBiICkge1xuXHRcdFx0XHR3aGlsZSAoICggYiA9IGIucGFyZW50Tm9kZSApICkge1xuXHRcdFx0XHRcdGlmICggYiA9PT0gYSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0LyogU29ydGluZ1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gRG9jdW1lbnQgb3JkZXIgc29ydGluZ1xuXHRzb3J0T3JkZXIgPSBoYXNDb21wYXJlID9cblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cblx0XHQvLyBGbGFnIGZvciBkdXBsaWNhdGUgcmVtb3ZhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHQvLyBTb3J0IG9uIG1ldGhvZCBleGlzdGVuY2UgaWYgb25seSBvbmUgaW5wdXQgaGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uXG5cdFx0dmFyIGNvbXBhcmUgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO1xuXHRcdGlmICggY29tcGFyZSApIHtcblx0XHRcdHJldHVybiBjb21wYXJlO1xuXHRcdH1cblxuXHRcdC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBpZiBib3RoIGlucHV0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZG9jdW1lbnRcblx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdGNvbXBhcmUgPSAoIGEub3duZXJEb2N1bWVudCB8fCBhICkgPT0gKCBiLm93bmVyRG9jdW1lbnQgfHwgYiApID9cblx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGIgKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSB3ZSBrbm93IHRoZXkgYXJlIGRpc2Nvbm5lY3RlZFxuXHRcdFx0MTtcblxuXHRcdC8vIERpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdGlmICggY29tcGFyZSAmIDEgfHxcblx0XHRcdCggIXN1cHBvcnQuc29ydERldGFjaGVkICYmIGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGEgKSA9PT0gY29tcGFyZSApICkge1xuXG5cdFx0XHQvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnRcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRpZiAoIGEgPT0gZG9jdW1lbnQgfHwgYS5vd25lckRvY3VtZW50ID09IHByZWZlcnJlZERvYyAmJlxuXHRcdFx0XHRjb250YWlucyggcHJlZmVycmVkRG9jLCBhICkgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdGlmICggYiA9PSBkb2N1bWVudCB8fCBiLm93bmVyRG9jdW1lbnQgPT0gcHJlZmVycmVkRG9jICYmXG5cdFx0XHRcdGNvbnRhaW5zKCBwcmVmZXJyZWREb2MsIGIgKSApIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1haW50YWluIG9yaWdpbmFsIG9yZGVyXG5cdFx0XHRyZXR1cm4gc29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb21wYXJlICYgNCA/IC0xIDogMTtcblx0fSA6XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXG5cdFx0Ly8gRXhpdCBlYXJseSBpZiB0aGUgbm9kZXMgYXJlIGlkZW50aWNhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRhdXAgPSBhLnBhcmVudE5vZGUsXG5cdFx0XHRidXAgPSBiLnBhcmVudE5vZGUsXG5cdFx0XHRhcCA9IFsgYSBdLFxuXHRcdFx0YnAgPSBbIGIgXTtcblxuXHRcdC8vIFBhcmVudGxlc3Mgbm9kZXMgYXJlIGVpdGhlciBkb2N1bWVudHMgb3IgZGlzY29ubmVjdGVkXG5cdFx0aWYgKCAhYXVwIHx8ICFidXAgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBlcWVxZXEgKi9cblx0XHRcdHJldHVybiBhID09IGRvY3VtZW50ID8gLTEgOlxuXHRcdFx0XHRiID09IGRvY3VtZW50ID8gMSA6XG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgZXFlcWVxICovXG5cdFx0XHRcdGF1cCA/IC0xIDpcblx0XHRcdFx0YnVwID8gMSA6XG5cdFx0XHRcdHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblxuXHRcdC8vIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MsIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrXG5cdFx0fSBlbHNlIGlmICggYXVwID09PSBidXAgKSB7XG5cdFx0XHRyZXR1cm4gc2libGluZ0NoZWNrKCBhLCBiICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlIHdlIG5lZWQgZnVsbCBsaXN0cyBvZiB0aGVpciBhbmNlc3RvcnMgZm9yIGNvbXBhcmlzb25cblx0XHRjdXIgPSBhO1xuXHRcdHdoaWxlICggKCBjdXIgPSBjdXIucGFyZW50Tm9kZSApICkge1xuXHRcdFx0YXAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXHRcdGN1ciA9IGI7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGN1ci5wYXJlbnROb2RlICkgKSB7XG5cdFx0XHRicC51bnNoaWZ0KCBjdXIgKTtcblx0XHR9XG5cblx0XHQvLyBXYWxrIGRvd24gdGhlIHRyZWUgbG9va2luZyBmb3IgYSBkaXNjcmVwYW5jeVxuXHRcdHdoaWxlICggYXBbIGkgXSA9PT0gYnBbIGkgXSApIHtcblx0XHRcdGkrKztcblx0XHR9XG5cblx0XHRyZXR1cm4gaSA/XG5cblx0XHRcdC8vIERvIGEgc2libGluZyBjaGVjayBpZiB0aGUgbm9kZXMgaGF2ZSBhIGNvbW1vbiBhbmNlc3RvclxuXHRcdFx0c2libGluZ0NoZWNrKCBhcFsgaSBdLCBicFsgaSBdICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugbm9kZXMgaW4gb3VyIGRvY3VtZW50IHNvcnQgZmlyc3Rcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBlcWVxZXEgKi9cblx0XHRcdGFwWyBpIF0gPT0gcHJlZmVycmVkRG9jID8gLTEgOlxuXHRcdFx0YnBbIGkgXSA9PSBwcmVmZXJyZWREb2MgPyAxIDpcblx0XHRcdC8qIGVzbGludC1lbmFibGUgZXFlcWVxICovXG5cdFx0XHQwO1xuXHR9O1xuXG5cdHJldHVybiBkb2N1bWVudDtcbn07XG5cblNpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1lbnRzICkge1xuXHRyZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBlbGVtZW50cyApO1xufTtcblxuU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBleHByICkge1xuXHRzZXREb2N1bWVudCggZWxlbSApO1xuXG5cdGlmICggc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgJiYgZG9jdW1lbnRJc0hUTUwgJiZcblx0XHQhbm9ubmF0aXZlU2VsZWN0b3JDYWNoZVsgZXhwciArIFwiIFwiIF0gJiZcblx0XHQoICFyYnVnZ3lNYXRjaGVzIHx8ICFyYnVnZ3lNYXRjaGVzLnRlc3QoIGV4cHIgKSApICYmXG5cdFx0KCAhcmJ1Z2d5UVNBICAgICB8fCAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSApICkge1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhciByZXQgPSBtYXRjaGVzLmNhbGwoIGVsZW0sIGV4cHIgKTtcblxuXHRcdFx0Ly8gSUUgOSdzIG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNlIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdFx0aWYgKCByZXQgfHwgc3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCB8fFxuXG5cdFx0XHRcdC8vIEFzIHdlbGwsIGRpc2Nvbm5lY3RlZCBub2RlcyBhcmUgc2FpZCB0byBiZSBpbiBhIGRvY3VtZW50XG5cdFx0XHRcdC8vIGZyYWdtZW50IGluIElFIDlcblx0XHRcdFx0ZWxlbS5kb2N1bWVudCAmJiBlbGVtLmRvY3VtZW50Lm5vZGVUeXBlICE9PSAxMSApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUoIGV4cHIsIHRydWUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gU2l6emxlKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwO1xufTtcblxuU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7XG5cblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggKCBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCApICE9IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdH1cblx0cmV0dXJuIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICk7XG59O1xuXG5TaXp6bGUuYXR0ciA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHR9XG5cblx0dmFyIGZuID0gRXhwci5hdHRySGFuZGxlWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSxcblxuXHRcdC8vIERvbid0IGdldCBmb29sZWQgYnkgT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChqUXVlcnkgIzEzODA3KVxuXHRcdHZhbCA9IGZuICYmIGhhc093bi5jYWxsKCBFeHByLmF0dHJIYW5kbGUsIG5hbWUudG9Mb3dlckNhc2UoKSApID9cblx0XHRcdGZuKCBlbGVtLCBuYW1lLCAhZG9jdW1lbnRJc0hUTUwgKSA6XG5cdFx0XHR1bmRlZmluZWQ7XG5cblx0cmV0dXJuIHZhbCAhPT0gdW5kZWZpbmVkID9cblx0XHR2YWwgOlxuXHRcdHN1cHBvcnQuYXR0cmlidXRlcyB8fCAhZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSA6XG5cdFx0XHQoIHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApICkgJiYgdmFsLnNwZWNpZmllZCA/XG5cdFx0XHRcdHZhbC52YWx1ZSA6XG5cdFx0XHRcdG51bGw7XG59O1xuXG5TaXp6bGUuZXNjYXBlID0gZnVuY3Rpb24oIHNlbCApIHtcblx0cmV0dXJuICggc2VsICsgXCJcIiApLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTtcbn07XG5cblNpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdHRocm93IG5ldyBFcnJvciggXCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiBcIiArIG1zZyApO1xufTtcblxuLyoqXG4gKiBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBkdXBsaWNhdGVzXG4gKiBAcGFyYW0ge0FycmF5TGlrZX0gcmVzdWx0c1xuICovXG5TaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkge1xuXHR2YXIgZWxlbSxcblx0XHRkdXBsaWNhdGVzID0gW10sXG5cdFx0aiA9IDAsXG5cdFx0aSA9IDA7XG5cblx0Ly8gVW5sZXNzIHdlICprbm93KiB3ZSBjYW4gZGV0ZWN0IGR1cGxpY2F0ZXMsIGFzc3VtZSB0aGVpciBwcmVzZW5jZVxuXHRoYXNEdXBsaWNhdGUgPSAhc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzO1xuXHRzb3J0SW5wdXQgPSAhc3VwcG9ydC5zb3J0U3RhYmxlICYmIHJlc3VsdHMuc2xpY2UoIDAgKTtcblx0cmVzdWx0cy5zb3J0KCBzb3J0T3JkZXIgKTtcblxuXHRpZiAoIGhhc0R1cGxpY2F0ZSApIHtcblx0XHR3aGlsZSAoICggZWxlbSA9IHJlc3VsdHNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0gPT09IHJlc3VsdHNbIGkgXSApIHtcblx0XHRcdFx0aiA9IGR1cGxpY2F0ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdHJlc3VsdHMuc3BsaWNlKCBkdXBsaWNhdGVzWyBqIF0sIDEgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBDbGVhciBpbnB1dCBhZnRlciBzb3J0aW5nIHRvIHJlbGVhc2Ugb2JqZWN0c1xuXHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvcHVsbC8yMjVcblx0c29ydElucHV0ID0gbnVsbDtcblxuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXNcbiAqIEBwYXJhbSB7QXJyYXl8RWxlbWVudH0gZWxlbVxuICovXG5nZXRUZXh0ID0gU2l6emxlLmdldFRleHQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0dmFyIG5vZGUsXG5cdFx0cmV0ID0gXCJcIixcblx0XHRpID0gMCxcblx0XHRub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0aWYgKCAhbm9kZVR5cGUgKSB7XG5cblx0XHQvLyBJZiBubyBub2RlVHlwZSwgdGhpcyBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheVxuXHRcdHdoaWxlICggKCBub2RlID0gZWxlbVsgaSsrIF0gKSApIHtcblxuXHRcdFx0Ly8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXNcblx0XHRcdHJldCArPSBnZXRUZXh0KCBub2RlICk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0gOSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7XG5cblx0XHQvLyBVc2UgdGV4dENvbnRlbnQgZm9yIGVsZW1lbnRzXG5cdFx0Ly8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoalF1ZXJ5ICMxMTE1Mylcblx0XHRpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7XG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gVHJhdmVyc2UgaXRzIGNoaWxkcmVuXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcblx0XHRcdFx0cmV0ICs9IGdldFRleHQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAzIHx8IG5vZGVUeXBlID09PSA0ICkge1xuXHRcdHJldHVybiBlbGVtLm5vZGVWYWx1ZTtcblx0fVxuXG5cdC8vIERvIG5vdCBpbmNsdWRlIGNvbW1lbnQgb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBub2Rlc1xuXG5cdHJldHVybiByZXQ7XG59O1xuXG5FeHByID0gU2l6emxlLnNlbGVjdG9ycyA9IHtcblxuXHQvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXJcblx0Y2FjaGVMZW5ndGg6IDUwLFxuXG5cdGNyZWF0ZVBzZXVkbzogbWFya0Z1bmN0aW9uLFxuXG5cdG1hdGNoOiBtYXRjaEV4cHIsXG5cblx0YXR0ckhhbmRsZToge30sXG5cblx0ZmluZDoge30sXG5cblx0cmVsYXRpdmU6IHtcblx0XHRcIj5cIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiIFwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIgfSxcblx0XHRcIitcIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCJ+XCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiIH1cblx0fSxcblxuXHRwcmVGaWx0ZXI6IHtcblx0XHRcIkFUVFJcIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0bWF0Y2hbIDEgXSA9IG1hdGNoWyAxIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0Ly8gTW92ZSB0aGUgZ2l2ZW4gdmFsdWUgdG8gbWF0Y2hbM10gd2hldGhlciBxdW90ZWQgb3IgdW5xdW90ZWRcblx0XHRcdG1hdGNoWyAzIF0gPSAoIG1hdGNoWyAzIF0gfHwgbWF0Y2hbIDQgXSB8fFxuXHRcdFx0XHRtYXRjaFsgNSBdIHx8IFwiXCIgKS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHRpZiAoIG1hdGNoWyAyIF0gPT09IFwifj1cIiApIHtcblx0XHRcdFx0bWF0Y2hbIDMgXSA9IFwiIFwiICsgbWF0Y2hbIDMgXSArIFwiIFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDQgKTtcblx0XHR9LFxuXG5cdFx0XCJDSElMRFwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cblx0XHRcdC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbXCJDSElMRFwiXVxuXHRcdFx0XHQxIHR5cGUgKG9ubHl8bnRofC4uLilcblx0XHRcdFx0MiB3aGF0IChjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHQzIGFyZ3VtZW50IChldmVufG9kZHxcXGQqfFxcZCpuKFsrLV1cXGQrKT98Li4uKVxuXHRcdFx0XHQ0IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xcZCpufClcblx0XHRcdFx0NSBzaWduIG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ2IHggb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDcgc2lnbiBvZiB5LWNvbXBvbmVudFxuXHRcdFx0XHQ4IHkgb2YgeS1jb21wb25lbnRcblx0XHRcdCovXG5cdFx0XHRtYXRjaFsgMSBdID0gbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRpZiAoIG1hdGNoWyAxIF0uc2xpY2UoIDAsIDMgKSA9PT0gXCJudGhcIiApIHtcblxuXHRcdFx0XHQvLyBudGgtKiByZXF1aXJlcyBhcmd1bWVudFxuXHRcdFx0XHRpZiAoICFtYXRjaFsgMyBdICkge1xuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggbWF0Y2hbIDAgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxEXG5cdFx0XHRcdC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzFcblx0XHRcdFx0bWF0Y2hbIDQgXSA9ICsoIG1hdGNoWyA0IF0gP1xuXHRcdFx0XHRcdG1hdGNoWyA1IF0gKyAoIG1hdGNoWyA2IF0gfHwgMSApIDpcblx0XHRcdFx0XHQyICogKCBtYXRjaFsgMyBdID09PSBcImV2ZW5cIiB8fCBtYXRjaFsgMyBdID09PSBcIm9kZFwiICkgKTtcblx0XHRcdFx0bWF0Y2hbIDUgXSA9ICsoICggbWF0Y2hbIDcgXSArIG1hdGNoWyA4IF0gKSB8fCBtYXRjaFsgMyBdID09PSBcIm9kZFwiICk7XG5cblx0XHRcdFx0Ly8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFsgMyBdICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdH0sXG5cblx0XHRcIlBTRVVET1wiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHR2YXIgZXhjZXNzLFxuXHRcdFx0XHR1bnF1b3RlZCA9ICFtYXRjaFsgNiBdICYmIG1hdGNoWyAyIF07XG5cblx0XHRcdGlmICggbWF0Y2hFeHByWyBcIkNISUxEXCIgXS50ZXN0KCBtYXRjaFsgMCBdICkgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBY2NlcHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pc1xuXHRcdFx0aWYgKCBtYXRjaFsgMyBdICkge1xuXHRcdFx0XHRtYXRjaFsgMiBdID0gbWF0Y2hbIDQgXSB8fCBtYXRjaFsgNSBdIHx8IFwiXCI7XG5cblx0XHRcdC8vIFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiZcblxuXHRcdFx0XHQvLyBHZXQgZXhjZXNzIGZyb20gdG9rZW5pemUgKHJlY3Vyc2l2ZWx5KVxuXHRcdFx0XHQoIGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApICkgJiZcblxuXHRcdFx0XHQvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0KCBleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCBcIilcIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5sZW5ndGggKSApIHtcblxuXHRcdFx0XHQvLyBleGNlc3MgaXMgYSBuZWdhdGl2ZSBpbmRleFxuXHRcdFx0XHRtYXRjaFsgMCBdID0gbWF0Y2hbIDAgXS5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHRcdG1hdGNoWyAyIF0gPSB1bnF1b3RlZC5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldHVybiBvbmx5IGNhcHR1cmVzIG5lZWRlZCBieSB0aGUgcHNldWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3VtZW50KVxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCAzICk7XG5cdFx0fVxuXHR9LFxuXG5cdGZpbHRlcjoge1xuXG5cdFx0XCJUQUdcIjogZnVuY3Rpb24oIG5vZGVOYW1lU2VsZWN0b3IgKSB7XG5cdFx0XHR2YXIgbm9kZU5hbWUgPSBub2RlTmFtZVNlbGVjdG9yLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBub2RlTmFtZVNlbGVjdG9yID09PSBcIipcIiA/XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9IDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBub2RlTmFtZTtcblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJDTEFTU1wiOiBmdW5jdGlvbiggY2xhc3NOYW1lICkge1xuXHRcdFx0dmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlWyBjbGFzc05hbWUgKyBcIiBcIiBdO1xuXG5cdFx0XHRyZXR1cm4gcGF0dGVybiB8fFxuXHRcdFx0XHQoIHBhdHRlcm4gPSBuZXcgUmVnRXhwKCBcIihefFwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcdFx0XCIpXCIgKyBjbGFzc05hbWUgKyBcIihcIiArIHdoaXRlc3BhY2UgKyBcInwkKVwiICkgKSAmJiBjbGFzc0NhY2hlKFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHBhdHRlcm4udGVzdChcblx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09IFwic3RyaW5nXCIgJiYgZWxlbS5jbGFzc05hbWUgfHxcblx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBcImNsYXNzXCIgKSB8fFxuXHRcdFx0XHRcdFx0XHRcdFwiXCJcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0fSApO1xuXHRcdH0sXG5cblx0XHRcIkFUVFJcIjogZnVuY3Rpb24oIG5hbWUsIG9wZXJhdG9yLCBjaGVjayApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHJlc3VsdCA9IFNpenpsZS5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHRcdFx0aWYgKCByZXN1bHQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiIT1cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoICFvcGVyYXRvciApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlc3VsdCArPSBcIlwiO1xuXG5cdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cblxuXHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiPVwiID8gcmVzdWx0ID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiIT1cIiA/IHJlc3VsdCAhPT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIl49XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMCA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiKj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiQ9XCIgPyBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIn49XCIgPyAoIFwiIFwiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCBcIiBcIiApICsgXCIgXCIgKS5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcInw9XCIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArIFwiLVwiIDpcblx0XHRcdFx0XHRmYWxzZTtcblx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBtYXgtbGVuICovXG5cblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIF9hcmd1bWVudCwgZmlyc3QsIGxhc3QgKSB7XG5cdFx0XHR2YXIgc2ltcGxlID0gdHlwZS5zbGljZSggMCwgMyApICE9PSBcIm50aFwiLFxuXHRcdFx0XHRmb3J3YXJkID0gdHlwZS5zbGljZSggLTQgKSAhPT0gXCJsYXN0XCIsXG5cdFx0XHRcdG9mVHlwZSA9IHdoYXQgPT09IFwib2YtdHlwZVwiO1xuXG5cdFx0XHRyZXR1cm4gZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMCA/XG5cblx0XHRcdFx0Ly8gU2hvcnRjdXQgZm9yIDpudGgtKihuKVxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gISFlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRcdH0gOlxuXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdHZhciBjYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsIG5vZGUsIG5vZGVJbmRleCwgc3RhcnQsXG5cdFx0XHRcdFx0XHRkaXIgPSBzaW1wbGUgIT09IGZvcndhcmQgPyBcIm5leHRTaWJsaW5nXCIgOiBcInByZXZpb3VzU2libGluZ1wiLFxuXHRcdFx0XHRcdFx0cGFyZW50ID0gZWxlbS5wYXJlbnROb2RlLFxuXHRcdFx0XHRcdFx0bmFtZSA9IG9mVHlwZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksXG5cdFx0XHRcdFx0XHR1c2VDYWNoZSA9ICF4bWwgJiYgIW9mVHlwZSxcblx0XHRcdFx0XHRcdGRpZmYgPSBmYWxzZTtcblxuXHRcdFx0XHRcdGlmICggcGFyZW50ICkge1xuXG5cdFx0XHRcdFx0XHQvLyA6KGZpcnN0fGxhc3R8b25seSktKGNoaWxkfG9mLXR5cGUpXG5cdFx0XHRcdFx0XHRpZiAoIHNpbXBsZSApIHtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCBkaXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSBub2RlWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBSZXZlcnNlIGRpcmVjdGlvbiBmb3IgOm9ubHktKiAoaWYgd2UgaGF2ZW4ndCB5ZXQgZG9uZSBzbylcblx0XHRcdFx0XHRcdFx0XHRzdGFydCA9IGRpciA9IHR5cGUgPT09IFwib25seVwiICYmICFzdGFydCAmJiBcIm5leHRTaWJsaW5nXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07XG5cblx0XHRcdFx0XHRcdC8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgXG5cdFx0XHRcdFx0XHRpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU2VlayBgZWxlbWAgZnJvbSBhIHByZXZpb3VzbHktY2FjaGVkIGluZGV4XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRub2RlID0gcGFyZW50O1xuXHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8ICggbm9kZVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdCggb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleCAmJiBjYWNoZVsgMiBdO1xuXHRcdFx0XHRcdFx0XHRub2RlID0gbm9kZUluZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVzWyBub2RlSW5kZXggXTtcblxuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEZhbGxiYWNrIHRvIHNlZWtpbmcgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0KCBkaWZmID0gbm9kZUluZGV4ID0gMCApIHx8IHN0YXJ0LnBvcCgpICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBXaGVuIGZvdW5kLCBjYWNoZSBpbmRleGVzIG9uIGBwYXJlbnRgIGFuZCBicmVha1xuXHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSAmJiArK2RpZmYgJiYgbm9kZSA9PT0gZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIG5vZGVJbmRleCwgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVXNlIHByZXZpb3VzbHktY2FjaGVkIGVsZW1lbnQgaW5kZXggaWYgYXZhaWxhYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XG5cdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAoIG5vZGVbIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdCggb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIHhtbCA6bnRoLWNoaWxkKC4uLilcblx0XHRcdFx0XHRcdFx0Ly8gb3IgOm50aC1sYXN0LWNoaWxkKC4uLikgb3IgOm50aCgtbGFzdCk/LW9mLXR5cGUoLi4uKVxuXHRcdFx0XHRcdFx0XHRpZiAoIGRpZmYgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdCggZGlmZiA9IG5vZGVJbmRleCA9IDAgKSB8fCBzdGFydC5wb3AoKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCsrZGlmZiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBDYWNoZSB0aGUgaW5kZXggb2YgZWFjaCBlbmNvdW50ZXJlZCBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCBub2RlWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNpemVcblx0XHRcdFx0XHRcdGRpZmYgLT0gbGFzdDtcblx0XHRcdFx0XHRcdHJldHVybiBkaWZmID09PSBmaXJzdCB8fCAoIGRpZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIHBzZXVkbywgYXJndW1lbnQgKSB7XG5cblx0XHRcdC8vIHBzZXVkby1jbGFzcyBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZVxuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNwc2V1ZG8tY2xhc3Nlc1xuXHRcdFx0Ly8gUHJpb3JpdGl6ZSBieSBjYXNlIHNlbnNpdGl2aXR5IGluIGNhc2UgY3VzdG9tIHBzZXVkb3MgYXJlIGFkZGVkIHdpdGggdXBwZXJjYXNlIGxldHRlcnNcblx0XHRcdC8vIFJlbWVtYmVyIHRoYXQgc2V0RmlsdGVycyBpbmhlcml0cyBmcm9tIHBzZXVkb3Ncblx0XHRcdHZhciBhcmdzLFxuXHRcdFx0XHRmbiA9IEV4cHIucHNldWRvc1sgcHNldWRvIF0gfHwgRXhwci5zZXRGaWx0ZXJzWyBwc2V1ZG8udG9Mb3dlckNhc2UoKSBdIHx8XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBcInVuc3VwcG9ydGVkIHBzZXVkbzogXCIgKyBwc2V1ZG8gKTtcblxuXHRcdFx0Ly8gVGhlIHVzZXIgbWF5IHVzZSBjcmVhdGVQc2V1ZG8gdG8gaW5kaWNhdGUgdGhhdFxuXHRcdFx0Ly8gYXJndW1lbnRzIGFyZSBuZWVkZWQgdG8gY3JlYXRlIHRoZSBmaWx0ZXIgZnVuY3Rpb25cblx0XHRcdC8vIGp1c3QgYXMgU2l6emxlIGRvZXNcblx0XHRcdGlmICggZm5bIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0cmV0dXJuIGZuKCBhcmd1bWVudCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBCdXQgbWFpbnRhaW4gc3VwcG9ydCBmb3Igb2xkIHNpZ25hdHVyZXNcblx0XHRcdGlmICggZm4ubGVuZ3RoID4gMSApIHtcblx0XHRcdFx0YXJncyA9IFsgcHNldWRvLCBwc2V1ZG8sIFwiXCIsIGFyZ3VtZW50IF07XG5cdFx0XHRcdHJldHVybiBFeHByLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoIHBzZXVkby50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0XHRcdG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHRcdFx0XHR2YXIgaWR4LFxuXHRcdFx0XHRcdFx0XHRtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksXG5cdFx0XHRcdFx0XHRcdGkgPSBtYXRjaGVkLmxlbmd0aDtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZHggPSBpbmRleE9mKCBzZWVkLCBtYXRjaGVkWyBpIF0gKTtcblx0XHRcdFx0XHRcdFx0c2VlZFsgaWR4IF0gPSAhKCBtYXRjaGVzWyBpZHggXSA9IG1hdGNoZWRbIGkgXSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gKSA6XG5cdFx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm4oIGVsZW0sIDAsIGFyZ3MgKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZm47XG5cdFx0fVxuXHR9LFxuXG5cdHBzZXVkb3M6IHtcblxuXHRcdC8vIFBvdGVudGlhbGx5IGNvbXBsZXggcHNldWRvc1xuXHRcdFwibm90XCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXG5cdFx0XHQvLyBUcmltIHRoZSBzZWxlY3RvciBwYXNzZWQgdG8gY29tcGlsZVxuXHRcdFx0Ly8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmdcblx0XHRcdC8vIHNwYWNlcyBhcyBjb21iaW5hdG9yc1xuXHRcdFx0dmFyIGlucHV0ID0gW10sXG5cdFx0XHRcdHJlc3VsdHMgPSBbXSxcblx0XHRcdFx0bWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSApO1xuXG5cdFx0XHRyZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID9cblx0XHRcdFx0bWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcywgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0XHRcdHVubWF0Y2hlZCA9IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwgW10gKSxcblx0XHRcdFx0XHRcdGkgPSBzZWVkLmxlbmd0aDtcblxuXHRcdFx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmBcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gdW5tYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0c2VlZFsgaSBdID0gISggbWF0Y2hlc1sgaSBdID0gZWxlbSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApIDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0aW5wdXRbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0bWF0Y2hlciggaW5wdXQsIG51bGwsIHhtbCwgcmVzdWx0cyApO1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3Qga2VlcCB0aGUgZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdFx0XHRpbnB1dFsgMCBdID0gbnVsbDtcblx0XHRcdFx0XHRyZXR1cm4gIXJlc3VsdHMucG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0XCJoYXNcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBTaXp6bGUoIHNlbGVjdG9yLCBlbGVtICkubGVuZ3RoID4gMDtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0XCJjb250YWluc1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0dGV4dCA9IHRleHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBnZXRUZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0Ly8gXCJXaGV0aGVyIGFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYnkgYSA6bGFuZygpIHNlbGVjdG9yXG5cdFx0Ly8gaXMgYmFzZWQgc29sZWx5IG9uIHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWVcblx0XHQvLyBiZWluZyBlcXVhbCB0byB0aGUgaWRlbnRpZmllciBDLFxuXHRcdC8vIG9yIGJlZ2lubmluZyB3aXRoIHRoZSBpZGVudGlmaWVyIEMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgXCItXCIuXG5cdFx0Ly8gVGhlIG1hdGNoaW5nIG9mIEMgYWdhaW5zdCB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlIGlzIHBlcmZvcm1lZCBjYXNlLWluc2Vuc2l0aXZlbHkuXG5cdFx0Ly8gVGhlIGlkZW50aWZpZXIgQyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgdmFsaWQgbGFuZ3VhZ2UgbmFtZS5cIlxuXHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jbGFuZy1wc2V1ZG9cblx0XHRcImxhbmdcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggbGFuZyApIHtcblxuXHRcdFx0Ly8gbGFuZyB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclxuXHRcdFx0aWYgKCAhcmlkZW50aWZpZXIudGVzdCggbGFuZyB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBsYW5nOiBcIiArIGxhbmcgKTtcblx0XHRcdH1cblx0XHRcdGxhbmcgPSBsYW5nLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIGVsZW1MYW5nO1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKCAoIGVsZW1MYW5nID0gZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0XHRcdFx0ZWxlbS5sYW5nIDpcblx0XHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBcInhtbDpsYW5nXCIgKSB8fCBlbGVtLmdldEF0dHJpYnV0ZSggXCJsYW5nXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHRlbGVtTGFuZyA9IGVsZW1MYW5nLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxlbUxhbmcuaW5kZXhPZiggbGFuZyArIFwiLVwiICkgPT09IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IHdoaWxlICggKCBlbGVtID0gZWxlbS5wYXJlbnROb2RlICkgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdC8vIE1pc2NlbGxhbmVvdXNcblx0XHRcInRhcmdldFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRcdFx0cmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSggMSApID09PSBlbGVtLmlkO1xuXHRcdH0sXG5cblx0XHRcInJvb3RcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jRWxlbTtcblx0XHR9LFxuXG5cdFx0XCJmb2N1c1wiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmXG5cdFx0XHRcdCggIWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3VtZW50Lmhhc0ZvY3VzKCkgKSAmJlxuXHRcdFx0XHQhISggZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCApO1xuXHRcdH0sXG5cblx0XHQvLyBCb29sZWFuIHByb3BlcnRpZXNcblx0XHRcImVuYWJsZWRcIjogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGZhbHNlICksXG5cdFx0XCJkaXNhYmxlZFwiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggdHJ1ZSApLFxuXG5cdFx0XCJjaGVja2VkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBJbiBDU1MzLCA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIGJvdGggY2hlY2tlZCBhbmQgc2VsZWN0ZWQgZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHR2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmICEhZWxlbS5jaGVja2VkICkgfHxcblx0XHRcdFx0KCBub2RlTmFtZSA9PT0gXCJvcHRpb25cIiAmJiAhIWVsZW0uc2VsZWN0ZWQgKTtcblx0XHR9LFxuXG5cdFx0XCJzZWxlY3RlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdFxuXHRcdFx0Ly8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseVxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0XHRcdFx0ZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlO1xuXHRcdH0sXG5cblx0XHQvLyBDb250ZW50c1xuXHRcdFwiZW1wdHlcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvXG5cdFx0XHQvLyA6ZW1wdHkgaXMgbmVnYXRlZCBieSBlbGVtZW50ICgxKSBvciBjb250ZW50IG5vZGVzICh0ZXh0OiAzOyBjZGF0YTogNDsgZW50aXR5IHJlZjogNSksXG5cdFx0XHQvLyAgIGJ1dCBub3QgYnkgb3RoZXJzIChjb21tZW50OiA4OyBwcm9jZXNzaW5nIGluc3RydWN0aW9uOiA3OyBldGMuKVxuXHRcdFx0Ly8gbm9kZVR5cGUgPCA2IHdvcmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA8IDYgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0XCJwYXJlbnRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gIUV4cHIucHNldWRvc1sgXCJlbXB0eVwiIF0oIGVsZW0gKTtcblx0XHR9LFxuXG5cdFx0Ly8gRWxlbWVudC9pbnB1dCB0eXBlc1xuXHRcdFwiaGVhZGVyXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImlucHV0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImJ1dHRvblwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IFwiYnV0dG9uXCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIjtcblx0XHR9LFxuXG5cdFx0XCJ0ZXh0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGF0dHI7XG5cdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgJiZcblx0XHRcdFx0ZWxlbS50eXBlID09PSBcInRleHRcIiAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFPDhcblx0XHRcdFx0Ly8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4sIFwic2VhcmNoXCIpIGFwcGVhciB3aXRoIGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCJcblx0XHRcdFx0KCAoIGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSApID09IG51bGwgfHxcblx0XHRcdFx0XHRhdHRyLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiICk7XG5cdFx0fSxcblxuXHRcdC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb25cblx0XHRcImZpcnN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIFsgMCBdO1xuXHRcdH0gKSxcblxuXHRcdFwibGFzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggX21hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIFsgbGVuZ3RoIC0gMSBdO1xuXHRcdH0gKSxcblxuXHRcdFwiZXFcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIF9tYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHRyZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50IF07XG5cdFx0fSApLFxuXG5cdFx0XCJldmVuXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRcIm9kZFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDE7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApLFxuXG5cdFx0XCJsdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgP1xuXHRcdFx0XHRhcmd1bWVudCArIGxlbmd0aCA6XG5cdFx0XHRcdGFyZ3VtZW50ID4gbGVuZ3RoID9cblx0XHRcdFx0XHRsZW5ndGggOlxuXHRcdFx0XHRcdGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyAtLWkgPj0gMDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdFwiZ3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgKytpIDwgbGVuZ3RoOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApXG5cdH1cbn07XG5cbkV4cHIucHNldWRvc1sgXCJudGhcIiBdID0gRXhwci5wc2V1ZG9zWyBcImVxXCIgXTtcblxuLy8gQWRkIGJ1dHRvbi9pbnB1dCB0eXBlIHBzZXVkb3NcbmZvciAoIGkgaW4geyByYWRpbzogdHJ1ZSwgY2hlY2tib3g6IHRydWUsIGZpbGU6IHRydWUsIHBhc3N3b3JkOiB0cnVlLCBpbWFnZTogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUlucHV0UHNldWRvKCBpICk7XG59XG5mb3IgKCBpIGluIHsgc3VibWl0OiB0cnVlLCByZXNldDogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUJ1dHRvblBzZXVkbyggaSApO1xufVxuXG4vLyBFYXN5IEFQSSBmb3IgY3JlYXRpbmcgbmV3IHNldEZpbHRlcnNcbmZ1bmN0aW9uIHNldEZpbHRlcnMoKSB7fVxuc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLmZpbHRlcnMgPSBFeHByLnBzZXVkb3M7XG5FeHByLnNldEZpbHRlcnMgPSBuZXcgc2V0RmlsdGVycygpO1xuXG50b2tlbml6ZSA9IFNpenpsZS50b2tlbml6ZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgcGFyc2VPbmx5ICkge1xuXHR2YXIgbWF0Y2hlZCwgbWF0Y2gsIHRva2VucywgdHlwZSxcblx0XHRzb0ZhciwgZ3JvdXBzLCBwcmVGaWx0ZXJzLFxuXHRcdGNhY2hlZCA9IHRva2VuQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoIGNhY2hlZCApIHtcblx0XHRyZXR1cm4gcGFyc2VPbmx5ID8gMCA6IGNhY2hlZC5zbGljZSggMCApO1xuXHR9XG5cblx0c29GYXIgPSBzZWxlY3Rvcjtcblx0Z3JvdXBzID0gW107XG5cdHByZUZpbHRlcnMgPSBFeHByLnByZUZpbHRlcjtcblxuXHR3aGlsZSAoIHNvRmFyICkge1xuXG5cdFx0Ly8gQ29tbWEgYW5kIGZpcnN0IHJ1blxuXHRcdGlmICggIW1hdGNoZWQgfHwgKCBtYXRjaCA9IHJjb21tYS5leGVjKCBzb0ZhciApICkgKSB7XG5cdFx0XHRpZiAoIG1hdGNoICkge1xuXG5cdFx0XHRcdC8vIERvbid0IGNvbnN1bWUgdHJhaWxpbmcgY29tbWFzIGFzIHZhbGlkXG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoWyAwIF0ubGVuZ3RoICkgfHwgc29GYXI7XG5cdFx0XHR9XG5cdFx0XHRncm91cHMucHVzaCggKCB0b2tlbnMgPSBbXSApICk7XG5cdFx0fVxuXG5cdFx0bWF0Y2hlZCA9IGZhbHNlO1xuXG5cdFx0Ly8gQ29tYmluYXRvcnNcblx0XHRpZiAoICggbWF0Y2ggPSByY29tYmluYXRvcnMuZXhlYyggc29GYXIgKSApICkge1xuXHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHR0b2tlbnMucHVzaCgge1xuXHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblxuXHRcdFx0XHQvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2Vcblx0XHRcdFx0dHlwZTogbWF0Y2hbIDAgXS5yZXBsYWNlKCBydHJpbSwgXCIgXCIgKVxuXHRcdFx0fSApO1xuXHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGaWx0ZXJzXG5cdFx0Zm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHtcblx0XHRcdGlmICggKCBtYXRjaCA9IG1hdGNoRXhwclsgdHlwZSBdLmV4ZWMoIHNvRmFyICkgKSAmJiAoICFwcmVGaWx0ZXJzWyB0eXBlIF0gfHxcblx0XHRcdFx0KCBtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSggbWF0Y2ggKSApICkgKSB7XG5cdFx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0XHR0b2tlbnMucHVzaCgge1xuXHRcdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXHRcdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdFx0bWF0Y2hlczogbWF0Y2hcblx0XHRcdFx0fSApO1xuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggIW1hdGNoZWQgKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3Ncblx0Ly8gaWYgd2UncmUganVzdCBwYXJzaW5nXG5cdC8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3Igb3IgcmV0dXJuIHRva2Vuc1xuXHRyZXR1cm4gcGFyc2VPbmx5ID9cblx0XHRzb0Zhci5sZW5ndGggOlxuXHRcdHNvRmFyID9cblx0XHRcdFNpenpsZS5lcnJvciggc2VsZWN0b3IgKSA6XG5cblx0XHRcdC8vIENhY2hlIHRoZSB0b2tlbnNcblx0XHRcdHRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApO1xufTtcblxuZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRzZWxlY3RvciA9IFwiXCI7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdHNlbGVjdG9yICs9IHRva2Vuc1sgaSBdLnZhbHVlO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rvcjtcbn1cblxuZnVuY3Rpb24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHtcblx0dmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLFxuXHRcdHNraXAgPSBjb21iaW5hdG9yLm5leHQsXG5cdFx0a2V5ID0gc2tpcCB8fCBkaXIsXG5cdFx0Y2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYga2V5ID09PSBcInBhcmVudE5vZGVcIixcblx0XHRkb25lTmFtZSA9IGRvbmUrKztcblxuXHRyZXR1cm4gY29tYmluYXRvci5maXJzdCA/XG5cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGNsb3Nlc3QgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IDpcblxuXHRcdC8vIENoZWNrIGFnYWluc3QgYWxsIGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50c1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgb2xkQ2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLFxuXHRcdFx0XHRuZXdDYWNoZSA9IFsgZGlycnVucywgZG9uZU5hbWUgXTtcblxuXHRcdFx0Ly8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywgc28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gY29tYmluYXRvciBjYWNoaW5nXG5cdFx0XHRpZiAoIHhtbCApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8ICggZWxlbVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdGlmICggc2tpcCAmJiBza2lwID09PSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdGVsZW0gPSBlbGVtWyBkaXIgXSB8fCBlbGVtO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICggKCBvbGRDYWNoZSA9IHVuaXF1ZUNhY2hlWyBrZXkgXSApICYmXG5cdFx0XHRcdFx0XHRcdG9sZENhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgb2xkQ2FjaGVbIDEgXSA9PT0gZG9uZU5hbWUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQXNzaWduIHRvIG5ld0NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0cmV0dXJuICggbmV3Q2FjaGVbIDIgXSA9IG9sZENhY2hlWyAyIF0gKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsga2V5IF0gPSBuZXdDYWNoZTtcblxuXHRcdFx0XHRcdFx0XHQvLyBBIG1hdGNoIG1lYW5zIHdlJ3JlIGRvbmU7IGEgZmFpbCBtZWFucyB3ZSBoYXZlIHRvIGtlZXAgY2hlY2tpbmdcblx0XHRcdFx0XHRcdFx0aWYgKCAoIG5ld0NhY2hlWyAyIF0gPSBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcbn1cblxuZnVuY3Rpb24gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICkge1xuXHRyZXR1cm4gbWF0Y2hlcnMubGVuZ3RoID4gMSA/XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBpID0gbWF0Y2hlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggIW1hdGNoZXJzWyBpIF0oIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSA6XG5cdFx0bWF0Y2hlcnNbIDAgXTtcbn1cblxuZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gY29udGV4dHMubGVuZ3RoO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1sgaSBdLCByZXN1bHRzICk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGNvbmRlbnNlKCB1bm1hdGNoZWQsIG1hcCwgZmlsdGVyLCBjb250ZXh0LCB4bWwgKSB7XG5cdHZhciBlbGVtLFxuXHRcdG5ld1VubWF0Y2hlZCA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGxlbiA9IHVubWF0Y2hlZC5sZW5ndGgsXG5cdFx0bWFwcGVkID0gbWFwICE9IG51bGw7XG5cblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0aWYgKCAoIGVsZW0gPSB1bm1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0aWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdGlmICggbWFwcGVkICkge1xuXHRcdFx0XHRcdG1hcC5wdXNoKCBpICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3VW5tYXRjaGVkO1xufVxuXG5mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7XG5cdGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7XG5cdH1cblx0aWYgKCBwb3N0RmluZGVyICYmICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApO1xuXHR9XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0dmFyIHRlbXAsIGksIGVsZW0sXG5cdFx0XHRwcmVNYXAgPSBbXSxcblx0XHRcdHBvc3RNYXAgPSBbXSxcblx0XHRcdHByZWV4aXN0aW5nID0gcmVzdWx0cy5sZW5ndGgsXG5cblx0XHRcdC8vIEdldCBpbml0aWFsIGVsZW1lbnRzIGZyb20gc2VlZCBvciBjb250ZXh0XG5cdFx0XHRlbGVtcyA9IHNlZWQgfHwgbXVsdGlwbGVDb250ZXh0cyhcblx0XHRcdFx0c2VsZWN0b3IgfHwgXCIqXCIsXG5cdFx0XHRcdGNvbnRleHQubm9kZVR5cGUgPyBbIGNvbnRleHQgXSA6IGNvbnRleHQsXG5cdFx0XHRcdFtdXG5cdFx0XHQpLFxuXG5cdFx0XHQvLyBQcmVmaWx0ZXIgdG8gZ2V0IG1hdGNoZXIgaW5wdXQsIHByZXNlcnZpbmcgYSBtYXAgZm9yIHNlZWQtcmVzdWx0cyBzeW5jaHJvbml6YXRpb25cblx0XHRcdG1hdGNoZXJJbiA9IHByZUZpbHRlciAmJiAoIHNlZWQgfHwgIXNlbGVjdG9yICkgP1xuXHRcdFx0XHRjb25kZW5zZSggZWxlbXMsIHByZU1hcCwgcHJlRmlsdGVyLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdGVsZW1zLFxuXG5cdFx0XHRtYXRjaGVyT3V0ID0gbWF0Y2hlciA/XG5cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIHBvc3RGaW5kZXIsIG9yIGZpbHRlcmVkIHNlZWQsIG9yIG5vbi1zZWVkIHBvc3RGaWx0ZXIgb3IgcHJlZXhpc3RpbmcgcmVzdWx0cyxcblx0XHRcdFx0cG9zdEZpbmRlciB8fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgP1xuXG5cdFx0XHRcdFx0Ly8gLi4uaW50ZXJtZWRpYXRlIHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0W10gOlxuXG5cdFx0XHRcdFx0Ly8gLi4ub3RoZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5XG5cdFx0XHRcdFx0cmVzdWx0cyA6XG5cdFx0XHRcdG1hdGNoZXJJbjtcblxuXHRcdC8vIEZpbmQgcHJpbWFyeSBtYXRjaGVzXG5cdFx0aWYgKCBtYXRjaGVyICkge1xuXHRcdFx0bWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0LCB4bWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwb3N0RmlsdGVyXG5cdFx0aWYgKCBwb3N0RmlsdGVyICkge1xuXHRcdFx0dGVtcCA9IGNvbmRlbnNlKCBtYXRjaGVyT3V0LCBwb3N0TWFwICk7XG5cdFx0XHRwb3N0RmlsdGVyKCB0ZW1wLCBbXSwgY29udGV4dCwgeG1sICk7XG5cblx0XHRcdC8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVudHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW5cblx0XHRcdGkgPSB0ZW1wLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICggZWxlbSA9IHRlbXBbIGkgXSApICkge1xuXHRcdFx0XHRcdG1hdGNoZXJPdXRbIHBvc3RNYXBbIGkgXSBdID0gISggbWF0Y2hlckluWyBwb3N0TWFwWyBpIF0gXSA9IGVsZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggc2VlZCApIHtcblx0XHRcdGlmICggcG9zdEZpbmRlciB8fCBwcmVGaWx0ZXIgKSB7XG5cdFx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblxuXHRcdFx0XHRcdC8vIEdldCB0aGUgZmluYWwgbWF0Y2hlck91dCBieSBjb25kZW5zaW5nIHRoaXMgaW50ZXJtZWRpYXRlIGludG8gcG9zdEZpbmRlciBjb250ZXh0c1xuXHRcdFx0XHRcdHRlbXAgPSBbXTtcblx0XHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IG1hdGNoZXJPdXRbIGkgXSApICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFJlc3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoXG5cdFx0XHRcdFx0XHRcdHRlbXAucHVzaCggKCBtYXRjaGVySW5bIGkgXSA9IGVsZW0gKSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCAoIG1hdGNoZXJPdXQgPSBbXSApLCB0ZW1wLCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE1vdmUgbWF0Y2hlZCBlbGVtZW50cyBmcm9tIHNlZWQgdG8gcmVzdWx0cyB0byBrZWVwIHRoZW0gc3luY2hyb25pemVkXG5cdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBtYXRjaGVyT3V0WyBpIF0gKSAmJlxuXHRcdFx0XHRcdFx0KCB0ZW1wID0gcG9zdEZpbmRlciA/IGluZGV4T2YoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFsgaSBdICkgPiAtMSApIHtcblxuXHRcdFx0XHRcdFx0c2VlZFsgdGVtcCBdID0gISggcmVzdWx0c1sgdGVtcCBdID0gZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBjb25kZW5zZShcblx0XHRcdFx0bWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/XG5cdFx0XHRcdFx0bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDpcblx0XHRcdFx0XHRtYXRjaGVyT3V0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Ub2tlbnMoIHRva2VucyApIHtcblx0dmFyIGNoZWNrQ29udGV4dCwgbWF0Y2hlciwgaixcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdGxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgMCBdLnR5cGUgXSxcblx0XHRpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbIFwiIFwiIF0sXG5cdFx0aSA9IGxlYWRpbmdSZWxhdGl2ZSA/IDEgOiAwLFxuXG5cdFx0Ly8gVGhlIGZvdW5kYXRpb25hbCBtYXRjaGVyIGVuc3VyZXMgdGhhdCBlbGVtZW50cyBhcmUgcmVhY2hhYmxlIGZyb20gdG9wLWxldmVsIGNvbnRleHQocylcblx0XHRtYXRjaENvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBjaGVja0NvbnRleHQ7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoQW55Q29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YoIGNoZWNrQ29udGV4dCwgZWxlbSApID4gLTE7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoZXJzID0gWyBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIHJldCA9ICggIWxlYWRpbmdSZWxhdGl2ZSAmJiAoIHhtbCB8fCBjb250ZXh0ICE9PSBvdXRlcm1vc3RDb250ZXh0ICkgKSB8fCAoXG5cdFx0XHRcdCggY2hlY2tDb250ZXh0ID0gY29udGV4dCApLm5vZGVUeXBlID9cblx0XHRcdFx0XHRtYXRjaENvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0XHRtYXRjaEFueUNvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApICk7XG5cblx0XHRcdC8vIEF2b2lkIGhhbmdpbmcgb250byBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0Y2hlY2tDb250ZXh0ID0gbnVsbDtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSBdO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKCBtYXRjaGVyID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyBpIF0udHlwZSBdICkgKSB7XG5cdFx0XHRtYXRjaGVycyA9IFsgYWRkQ29tYmluYXRvciggZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksIG1hdGNoZXIgKSBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1sgaSBdLnR5cGUgXS5hcHBseSggbnVsbCwgdG9rZW5zWyBpIF0ubWF0Y2hlcyApO1xuXG5cdFx0XHQvLyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlclxuXHRcdFx0aWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0Ly8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nXG5cdFx0XHRcdGogPSArK2k7XG5cdFx0XHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyBqIF0udHlwZSBdICkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzZXRNYXRjaGVyKFxuXHRcdFx0XHRcdGkgPiAxICYmIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLFxuXHRcdFx0XHRcdGkgPiAxICYmIHRvU2VsZWN0b3IoXG5cblx0XHRcdFx0XHQvLyBJZiB0aGUgcHJlY2VkaW5nIHRva2VuIHdhcyBhIGRlc2NlbmRhbnQgY29tYmluYXRvciwgaW5zZXJ0IGFuIGltcGxpY2l0IGFueS1lbGVtZW50IGAqYFxuXHRcdFx0XHRcdHRva2Vuc1xuXHRcdFx0XHRcdFx0LnNsaWNlKCAwLCBpIC0gMSApXG5cdFx0XHRcdFx0XHQuY29uY2F0KCB7IHZhbHVlOiB0b2tlbnNbIGkgLSAyIF0udHlwZSA9PT0gXCIgXCIgPyBcIipcIiA6IFwiXCIgfSApXG5cdFx0XHRcdFx0KS5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksXG5cdFx0XHRcdFx0bWF0Y2hlcixcblx0XHRcdFx0XHRpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAoIHRva2VucyA9IHRva2Vucy5zbGljZSggaiApICkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIHRvU2VsZWN0b3IoIHRva2VucyApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRtYXRjaGVycy5wdXNoKCBtYXRjaGVyICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSB7XG5cdHZhciBieVNldCA9IHNldE1hdGNoZXJzLmxlbmd0aCA+IDAsXG5cdFx0YnlFbGVtZW50ID0gZWxlbWVudE1hdGNoZXJzLmxlbmd0aCA+IDAsXG5cdFx0c3VwZXJNYXRjaGVyID0gZnVuY3Rpb24oIHNlZWQsIGNvbnRleHQsIHhtbCwgcmVzdWx0cywgb3V0ZXJtb3N0ICkge1xuXHRcdFx0dmFyIGVsZW0sIGosIG1hdGNoZXIsXG5cdFx0XHRcdG1hdGNoZWRDb3VudCA9IDAsXG5cdFx0XHRcdGkgPSBcIjBcIixcblx0XHRcdFx0dW5tYXRjaGVkID0gc2VlZCAmJiBbXSxcblx0XHRcdFx0c2V0TWF0Y2hlZCA9IFtdLFxuXHRcdFx0XHRjb250ZXh0QmFja3VwID0gb3V0ZXJtb3N0Q29udGV4dCxcblxuXHRcdFx0XHQvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIGVpdGhlciBzZWVkIGVsZW1lbnRzIG9yIG91dGVybW9zdCBjb250ZXh0XG5cdFx0XHRcdGVsZW1zID0gc2VlZCB8fCBieUVsZW1lbnQgJiYgRXhwci5maW5kWyBcIlRBR1wiIF0oIFwiKlwiLCBvdXRlcm1vc3QgKSxcblxuXHRcdFx0XHQvLyBVc2UgaW50ZWdlciBkaXJydW5zIGlmZiB0aGlzIGlzIHRoZSBvdXRlcm1vc3QgbWF0Y2hlclxuXHRcdFx0XHRkaXJydW5zVW5pcXVlID0gKCBkaXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSApLFxuXHRcdFx0XHRsZW4gPSBlbGVtcy5sZW5ndGg7XG5cblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09IGRvY3VtZW50IHx8IGNvbnRleHQgfHwgb3V0ZXJtb3N0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8gcmVzdWx0c1xuXHRcdFx0Ly8gU3VwcG9ydDogSUU8OSwgU2FmYXJpXG5cdFx0XHQvLyBUb2xlcmF0ZSBOb2RlTGlzdCBwcm9wZXJ0aWVzIChJRTogXCJsZW5ndGhcIjsgU2FmYXJpOiA8bnVtYmVyPikgbWF0Y2hpbmcgZWxlbWVudHMgYnkgaWRcblx0XHRcdGZvciAoIDsgaSAhPT0gbGVuICYmICggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRcdGlmICggIWNvbnRleHQgJiYgZWxlbS5vd25lckRvY3VtZW50ICE9IGRvY3VtZW50ICkge1xuXHRcdFx0XHRcdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0XHRcdFx0XHRcdHhtbCA9ICFkb2N1bWVudElzSFRNTDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQgfHwgZG9jdW1lbnQsIHhtbCApICkge1xuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHJhY2sgdW5tYXRjaGVkIGVsZW1lbnRzIGZvciBzZXQgZmlsdGVyc1xuXHRcdFx0XHRpZiAoIGJ5U2V0ICkge1xuXG5cdFx0XHRcdFx0Ly8gVGhleSB3aWxsIGhhdmUgZ29uZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBtYXRjaGVyc1xuXHRcdFx0XHRcdGlmICggKCBlbGVtID0gIW1hdGNoZXIgJiYgZWxlbSApICkge1xuXHRcdFx0XHRcdFx0bWF0Y2hlZENvdW50LS07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdFxuXHRcdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHRcdHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIGBpYCBpcyBub3cgdGhlIGNvdW50IG9mIGVsZW1lbnRzIHZpc2l0ZWQgYWJvdmUsIGFuZCBhZGRpbmcgaXQgdG8gYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIG1ha2VzIHRoZSBsYXR0ZXIgbm9ubmVnYXRpdmUuXG5cdFx0XHRtYXRjaGVkQ291bnQgKz0gaTtcblxuXHRcdFx0Ly8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBOT1RFOiBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIHRoZXJlIGFyZSBubyB1bm1hdGNoZWQgZWxlbWVudHMgKGkuZS4sIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBlcXVhbHMgYGlgKSwgdW5sZXNzIHdlIGRpZG4ndCB2aXNpdCBfYW55XyBlbGVtZW50cyBpbiB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGhhdmVcblx0XHRcdC8vIG5vIGVsZW1lbnQgbWF0Y2hlcnMgYW5kIG5vIHNlZWQuXG5cdFx0XHQvLyBJbmNyZW1lbnRpbmcgYW4gaW5pdGlhbGx5LXN0cmluZyBcIjBcIiBgaWAgYWxsb3dzIGBpYCB0byByZW1haW4gYSBzdHJpbmcgb25seSBpbiB0aGF0XG5cdFx0XHQvLyBjYXNlLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIFwiMDBcIiBgbWF0Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMgZnJvbSBgaWAgYnV0IGlzIGFsc29cblx0XHRcdC8vIG51bWVyaWNhbGx5IHplcm8uXG5cdFx0XHRpZiAoIGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHtcblx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdHdoaWxlICggKCBtYXRjaGVyID0gc2V0TWF0Y2hlcnNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlciggdW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggc2VlZCApIHtcblxuXHRcdFx0XHRcdC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmdcblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCAhKCB1bm1hdGNoZWRbIGkgXSB8fCBzZXRNYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHRzZXRNYXRjaGVkWyBpIF0gPSBwb3AuY2FsbCggcmVzdWx0cyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRGlzY2FyZCBpbmRleCBwbGFjZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9ubHkgYWN0dWFsIG1hdGNoZXNcblx0XHRcdFx0XHRzZXRNYXRjaGVkID0gY29uZGVuc2UoIHNldE1hdGNoZWQgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFkZCBtYXRjaGVzIHRvIHJlc3VsdHNcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2V0TWF0Y2hlZCApO1xuXG5cdFx0XHRcdC8vIFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1Y2NlZWRpbmcgbXVsdGlwbGUgc3VjY2Vzc2Z1bCBtYXRjaGVycyBzdGlwdWxhdGUgc29ydGluZ1xuXHRcdFx0XHRpZiAoIG91dGVybW9zdCAmJiAhc2VlZCAmJiBzZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0XHQoIG1hdGNoZWRDb3VudCArIHNldE1hdGNoZXJzLmxlbmd0aCApID4gMSApIHtcblxuXHRcdFx0XHRcdFNpenpsZS51bmlxdWVTb3J0KCByZXN1bHRzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gT3ZlcnJpZGUgbWFuaXB1bGF0aW9uIG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1hdGNoZXJzXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0QmFja3VwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdW5tYXRjaGVkO1xuXHRcdH07XG5cblx0cmV0dXJuIGJ5U2V0ID9cblx0XHRtYXJrRnVuY3Rpb24oIHN1cGVyTWF0Y2hlciApIDpcblx0XHRzdXBlck1hdGNoZXI7XG59XG5cbmNvbXBpbGUgPSBTaXp6bGUuY29tcGlsZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgbWF0Y2ggLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7XG5cdHZhciBpLFxuXHRcdHNldE1hdGNoZXJzID0gW10sXG5cdFx0ZWxlbWVudE1hdGNoZXJzID0gW10sXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggIWNhY2hlZCApIHtcblxuXHRcdC8vIEdlbmVyYXRlIGEgZnVuY3Rpb24gb2YgcmVjdXJzaXZlIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoZWNrIGVhY2ggZWxlbWVudFxuXHRcdGlmICggIW1hdGNoICkge1xuXHRcdFx0bWF0Y2ggPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHR9XG5cdFx0aSA9IG1hdGNoLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGNhY2hlZCA9IG1hdGNoZXJGcm9tVG9rZW5zKCBtYXRjaFsgaSBdICk7XG5cdFx0XHRpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb25cblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlKFxuXHRcdFx0c2VsZWN0b3IsXG5cdFx0XHRtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKVxuXHRcdCk7XG5cblx0XHQvLyBTYXZlIHNlbGVjdG9yIGFuZCB0b2tlbml6YXRpb25cblx0XHRjYWNoZWQuc2VsZWN0b3IgPSBzZWxlY3Rvcjtcblx0fVxuXHRyZXR1cm4gY2FjaGVkO1xufTtcblxuLyoqXG4gKiBBIGxvdy1sZXZlbCBzZWxlY3Rpb24gZnVuY3Rpb24gdGhhdCB3b3JrcyB3aXRoIFNpenpsZSdzIGNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb25zXG4gKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gc2VsZWN0b3IgQSBzZWxlY3RvciBvciBhIHByZS1jb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uIGJ1aWx0IHdpdGggU2l6emxlLmNvbXBpbGVcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGV4dFxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdHNdXG4gKiBAcGFyYW0ge0FycmF5fSBbc2VlZF0gQSBzZXQgb2YgZWxlbWVudHMgdG8gbWF0Y2ggYWdhaW5zdFxuICovXG5zZWxlY3QgPSBTaXp6bGUuc2VsZWN0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCxcblx0XHRjb21waWxlZCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICYmIHNlbGVjdG9yLFxuXHRcdG1hdGNoID0gIXNlZWQgJiYgdG9rZW5pemUoICggc2VsZWN0b3IgPSBjb21waWxlZC5zZWxlY3RvciB8fCBzZWxlY3RvciApICk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUgc2VsZWN0b3IgaW4gdGhlIGxpc3QgYW5kIG5vIHNlZWRcblx0Ly8gKHRoZSBsYXR0ZXIgb2Ygd2hpY2ggZ3VhcmFudGVlcyB1cyBjb250ZXh0KVxuXHRpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHtcblxuXHRcdC8vIFJlZHVjZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5nIGNvbXBvdW5kIHNlbGVjdG9yIGlzIGFuIElEXG5cdFx0dG9rZW5zID0gbWF0Y2hbIDAgXSA9IG1hdGNoWyAwIF0uc2xpY2UoIDAgKTtcblx0XHRpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICggdG9rZW4gPSB0b2tlbnNbIDAgXSApLnR5cGUgPT09IFwiSURcIiAmJlxuXHRcdFx0Y29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJiBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIDEgXS50eXBlIF0gKSB7XG5cblx0XHRcdGNvbnRleHQgPSAoIEV4cHIuZmluZFsgXCJJRFwiIF0oIHRva2VuLm1hdGNoZXNbIDAgXVxuXHRcdFx0XHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSwgY29udGV4dCApIHx8IFtdIClbIDAgXTtcblx0XHRcdGlmICggIWNvbnRleHQgKSB7XG5cdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHQvLyBQcmVjb21waWxlZCBtYXRjaGVycyB3aWxsIHN0aWxsIHZlcmlmeSBhbmNlc3RyeSwgc28gc3RlcCB1cCBhIGxldmVsXG5cdFx0XHR9IGVsc2UgaWYgKCBjb21waWxlZCApIHtcblx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSggdG9rZW5zLnNoaWZ0KCkudmFsdWUubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmV0Y2ggYSBzZWVkIHNldCBmb3IgcmlnaHQtdG8tbGVmdCBtYXRjaGluZ1xuXHRcdGkgPSBtYXRjaEV4cHJbIFwibmVlZHNDb250ZXh0XCIgXS50ZXN0KCBzZWxlY3RvciApID8gMCA6IHRva2Vucy5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0b2tlbiA9IHRva2Vuc1sgaSBdO1xuXG5cdFx0XHQvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yXG5cdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbICggdHlwZSA9IHRva2VuLnR5cGUgKSBdICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggKCBmaW5kID0gRXhwci5maW5kWyB0eXBlIF0gKSApIHtcblxuXHRcdFx0XHQvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnNcblx0XHRcdFx0aWYgKCAoIHNlZWQgPSBmaW5kKFxuXHRcdFx0XHRcdHRva2VuLm1hdGNoZXNbIDAgXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLFxuXHRcdFx0XHRcdHJzaWJsaW5nLnRlc3QoIHRva2Vuc1sgMCBdLnR5cGUgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHxcblx0XHRcdFx0XHRcdGNvbnRleHRcblx0XHRcdFx0KSApICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgc2VlZCBpcyBlbXB0eSBvciBubyB0b2tlbnMgcmVtYWluLCB3ZSBjYW4gcmV0dXJuIGVhcmx5XG5cdFx0XHRcdFx0dG9rZW5zLnNwbGljZSggaSwgMSApO1xuXHRcdFx0XHRcdHNlbGVjdG9yID0gc2VlZC5sZW5ndGggJiYgdG9TZWxlY3RvciggdG9rZW5zICk7XG5cdFx0XHRcdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZWVkICk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENvbXBpbGUgYW5kIGV4ZWN1dGUgYSBmaWx0ZXJpbmcgZnVuY3Rpb24gaWYgb25lIGlzIG5vdCBwcm92aWRlZFxuXHQvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlXG5cdCggY29tcGlsZWQgfHwgY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkgKShcblx0XHRzZWVkLFxuXHRcdGNvbnRleHQsXG5cdFx0IWRvY3VtZW50SXNIVE1MLFxuXHRcdHJlc3VsdHMsXG5cdFx0IWNvbnRleHQgfHwgcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dFxuXHQpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8vIE9uZS10aW1lIGFzc2lnbm1lbnRzXG5cbi8vIFNvcnQgc3RhYmlsaXR5XG5zdXBwb3J0LnNvcnRTdGFibGUgPSBleHBhbmRvLnNwbGl0KCBcIlwiICkuc29ydCggc29ydE9yZGVyICkuam9pbiggXCJcIiApID09PSBleHBhbmRvO1xuXG4vLyBTdXBwb3J0OiBDaHJvbWUgMTQtMzUrXG4vLyBBbHdheXMgYXNzdW1lIGR1cGxpY2F0ZXMgaWYgdGhleSBhcmVuJ3QgcGFzc2VkIHRvIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uXG5zdXBwb3J0LmRldGVjdER1cGxpY2F0ZXMgPSAhIWhhc0R1cGxpY2F0ZTtcblxuLy8gSW5pdGlhbGl6ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IGRvY3VtZW50XG5zZXREb2N1bWVudCgpO1xuXG4vLyBTdXBwb3J0OiBXZWJraXQ8NTM3LjMyIC0gU2FmYXJpIDYuMC4zL0Nocm9tZSAyNSAoZml4ZWQgaW4gQ2hyb21lIDI3KVxuLy8gRGV0YWNoZWQgbm9kZXMgY29uZm91bmRpbmdseSBmb2xsb3cgKmVhY2ggb3RoZXIqXG5zdXBwb3J0LnNvcnREZXRhY2hlZCA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdC8vIFNob3VsZCByZXR1cm4gMSwgYnV0IHJldHVybnMgNCAoZm9sbG93aW5nKVxuXHRyZXR1cm4gZWwuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZmllbGRzZXRcIiApICkgJiAxO1xufSApO1xuXG4vLyBTdXBwb3J0OiBJRTw4XG4vLyBQcmV2ZW50IGF0dHJpYnV0ZS9wcm9wZXJ0eSBcImludGVycG9sYXRpb25cIlxuLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczUzNjQyOSUyOFZTLjg1JTI5LmFzcHhcbmlmICggIWFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JyMnPjwvYT5cIjtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCBcImhyZWZcIiApID09PSBcIiNcIjtcbn0gKSApIHtcblx0YWRkSGFuZGxlKCBcInR5cGV8aHJlZnxoZWlnaHR8d2lkdGhcIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwidHlwZVwiID8gMSA6IDIgKTtcblx0XHR9XG5cdH0gKTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGRlZmF1bHRWYWx1ZSBpbiBwbGFjZSBvZiBnZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKVxuaWYgKCAhc3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0ZWwuaW5uZXJIVE1MID0gXCI8aW5wdXQvPlwiO1xuXHRlbC5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiLCBcIlwiICk7XG5cdHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IFwiXCI7XG59ICkgKSB7XG5cdGFkZEhhbmRsZSggXCJ2YWx1ZVwiLCBmdW5jdGlvbiggZWxlbSwgX25hbWUsIGlzWE1MICkge1xuXHRcdGlmICggIWlzWE1MICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGVmYXVsdFZhbHVlO1xuXHRcdH1cblx0fSApO1xufVxuXG4vLyBTdXBwb3J0OiBJRTw5XG4vLyBVc2UgZ2V0QXR0cmlidXRlTm9kZSB0byBmZXRjaCBib29sZWFucyB3aGVuIGdldEF0dHJpYnV0ZSBsaWVzXG5pZiAoICFhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0cmV0dXJuIGVsLmdldEF0dHJpYnV0ZSggXCJkaXNhYmxlZFwiICkgPT0gbnVsbDtcbn0gKSApIHtcblx0YWRkSGFuZGxlKCBib29sZWFucywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciB2YWw7XG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbVsgbmFtZSBdID09PSB0cnVlID8gbmFtZS50b0xvd2VyQ2FzZSgpIDpcblx0XHRcdFx0KCB2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSApICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHRcdHZhbC52YWx1ZSA6XG5cdFx0XHRcdFx0bnVsbDtcblx0XHR9XG5cdH0gKTtcbn1cblxucmV0dXJuIFNpenpsZTtcblxufSApKCB3aW5kb3cgKTtcblxuXG5cbmpRdWVyeS5maW5kID0gU2l6emxlO1xualF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzO1xuXG4vLyBEZXByZWNhdGVkXG5qUXVlcnkuZXhwclsgXCI6XCIgXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7XG5qUXVlcnkudW5pcXVlU29ydCA9IGpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVlU29ydDtcbmpRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7XG5qUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7XG5qUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7XG5qUXVlcnkuZXNjYXBlU2VsZWN0b3IgPSBTaXp6bGUuZXNjYXBlO1xuXG5cblxuXG52YXIgZGlyID0gZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7XG5cdHZhciBtYXRjaGVkID0gW10sXG5cdFx0dHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkO1xuXG5cdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSAmJiBlbGVtLm5vZGVUeXBlICE9PSA5ICkge1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGlsICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgc2libGluZ3MgPSBmdW5jdGlvbiggbiwgZWxlbSApIHtcblx0dmFyIG1hdGNoZWQgPSBbXTtcblxuXHRmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkge1xuXHRcdGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkge1xuXHRcdFx0bWF0Y2hlZC5wdXNoKCBuICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0O1xuXG5cblxuZnVuY3Rpb24gbm9kZU5hbWUoIGVsZW0sIG5hbWUgKSB7XG5cblx0cmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbn1cbnZhciByc2luZ2xlVGFnID0gKCAvXjwoW2Etel1bXlxcL1xcMD46XFx4MjBcXHRcXHJcXG5cXGZdKilbXFx4MjBcXHRcXHJcXG5cXGZdKlxcLz8+KD86PFxcL1xcMT58KSQvaSApO1xuXG5cblxuLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3RcbmZ1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwgbm90ICkge1xuXHRpZiAoIGlzRnVuY3Rpb24oIHF1YWxpZmllciApICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIFNpbmdsZSBlbGVtZW50XG5cdGlmICggcXVhbGlmaWVyLm5vZGVUeXBlICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggZWxlbSA9PT0gcXVhbGlmaWVyICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBBcnJheWxpa2Ugb2YgZWxlbWVudHMgKGpRdWVyeSwgYXJndW1lbnRzLCBBcnJheSlcblx0aWYgKCB0eXBlb2YgcXVhbGlmaWVyICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggaW5kZXhPZi5jYWxsKCBxdWFsaWZpZXIsIGVsZW0gKSA+IC0xICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBGaWx0ZXJlZCBkaXJlY3RseSBmb3IgYm90aCBzaW1wbGUgYW5kIGNvbXBsZXggc2VsZWN0b3JzXG5cdHJldHVybiBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzLCBub3QgKTtcbn1cblxualF1ZXJ5LmZpbHRlciA9IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkge1xuXHR2YXIgZWxlbSA9IGVsZW1zWyAwIF07XG5cblx0aWYgKCBub3QgKSB7XG5cdFx0ZXhwciA9IFwiOm5vdChcIiArIGV4cHIgKyBcIilcIjtcblx0fVxuXG5cdGlmICggZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZWxlbSwgZXhwciApID8gWyBlbGVtIF0gOiBbXTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzKCBleHByLCBqUXVlcnkuZ3JlcCggZWxlbXMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxO1xuXHR9ICkgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmluZDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBpLCByZXQsXG5cdFx0XHRsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdHNlbGYgPSB0aGlzO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApICk7XG5cdFx0fVxuXG5cdFx0cmV0ID0gdGhpcy5wdXNoU3RhY2soIFtdICk7XG5cblx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCBzZWxmWyBpIF0sIHJldCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsZW4gPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIHJldCApIDogcmV0O1xuXHR9LFxuXHRmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIGZhbHNlICkgKTtcblx0fSxcblx0bm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCB0cnVlICkgKTtcblx0fSxcblx0aXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gISF3aW5ub3coXG5cdFx0XHR0aGlzLFxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgcG9zaXRpb25hbC9yZWxhdGl2ZSBzZWxlY3RvciwgY2hlY2sgbWVtYmVyc2hpcCBpbiB0aGUgcmV0dXJuZWQgc2V0XG5cdFx0XHQvLyBzbyAkKFwicDpmaXJzdFwiKS5pcyhcInA6bGFzdFwiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gXCJwXCIuXG5cdFx0XHR0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgJiYgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID9cblx0XHRcdFx0alF1ZXJ5KCBzZWxlY3RvciApIDpcblx0XHRcdFx0c2VsZWN0b3IgfHwgW10sXG5cdFx0XHRmYWxzZVxuXHRcdCkubGVuZ3RoO1xuXHR9XG59ICk7XG5cblxuLy8gSW5pdGlhbGl6ZSBhIGpRdWVyeSBvYmplY3RcblxuXG4vLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudClcbnZhciByb290alF1ZXJ5LFxuXG5cdC8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzXG5cdC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNTIHZpYSBsb2NhdGlvbi5oYXNoICgjOTUyMSlcblx0Ly8gU3RyaWN0IEhUTUwgcmVjb2duaXRpb24gKCMxMTI5MDogbXVzdCBzdGFydCB3aXRoIDwpXG5cdC8vIFNob3J0Y3V0IHNpbXBsZSAjaWQgY2FzZSBmb3Igc3BlZWRcblx0cnF1aWNrRXhwciA9IC9eKD86XFxzKig8W1xcd1xcV10rPilbXj5dKnwjKFtcXHctXSspKSQvLFxuXG5cdGluaXQgPSBqUXVlcnkuZm4uaW5pdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcm9vdCApIHtcblx0XHR2YXIgbWF0Y2gsIGVsZW07XG5cblx0XHQvLyBIQU5ETEU6ICQoXCJcIiksICQobnVsbCksICQodW5kZWZpbmVkKSwgJChmYWxzZSlcblx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdC8vIE1ldGhvZCBpbml0KCkgYWNjZXB0cyBhbiBhbHRlcm5hdGUgcm9vdGpRdWVyeVxuXHRcdC8vIHNvIG1pZ3JhdGUgY2FuIHN1cHBvcnQgalF1ZXJ5LnN1YiAoZ2gtMjEwMSlcblx0XHRyb290ID0gcm9vdCB8fCByb290alF1ZXJ5O1xuXG5cdFx0Ly8gSGFuZGxlIEhUTUwgc3RyaW5nc1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0aWYgKCBzZWxlY3RvclsgMCBdID09PSBcIjxcIiAmJlxuXHRcdFx0XHRzZWxlY3Rvclsgc2VsZWN0b3IubGVuZ3RoIC0gMSBdID09PSBcIj5cIiAmJlxuXHRcdFx0XHRzZWxlY3Rvci5sZW5ndGggPj0gMyApIHtcblxuXHRcdFx0XHQvLyBBc3N1bWUgdGhhdCBzdHJpbmdzIHRoYXQgc3RhcnQgYW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRoZSByZWdleCBjaGVja1xuXHRcdFx0XHRtYXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1hdGNoIGh0bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRleHQgaXMgc3BlY2lmaWVkIGZvciAjaWRcblx0XHRcdGlmICggbWF0Y2ggJiYgKCBtYXRjaFsgMSBdIHx8ICFjb250ZXh0ICkgKSB7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpXG5cdFx0XHRcdGlmICggbWF0Y2hbIDEgXSApIHtcblx0XHRcdFx0XHRjb250ZXh0ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbIDAgXSA6IGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBPcHRpb24gdG8gcnVuIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbGx5IGxldCB0aGUgZXJyb3IgYmUgdGhyb3duIGlmIHBhcnNlSFRNTCBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcywgalF1ZXJ5LnBhcnNlSFRNTChcblx0XHRcdFx0XHRcdG1hdGNoWyAxIF0sXG5cdFx0XHRcdFx0XHRjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50LFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdCkgKTtcblxuXHRcdFx0XHRcdC8vIEhBTkRMRTogJChodG1sLCBwcm9wcylcblx0XHRcdFx0XHRpZiAoIHJzaW5nbGVUYWcudGVzdCggbWF0Y2hbIDEgXSApICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCBtYXRjaCBpbiBjb250ZXh0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFByb3BlcnRpZXMgb2YgY29udGV4dCBhcmUgY2FsbGVkIGFzIG1ldGhvZHMgaWYgcG9zc2libGVcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGlzWyBtYXRjaCBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpc1sgbWF0Y2ggXSggY29udGV4dFsgbWF0Y2ggXSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBvdGhlcndpc2Ugc2V0IGFzIGF0dHJpYnV0ZXNcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmF0dHIoIG1hdGNoLCBjb250ZXh0WyBtYXRjaCBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoI2lkKVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbIDIgXSApO1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdFxuXHRcdFx0XHRcdFx0dGhpc1sgMCBdID0gZWxlbTtcblx0XHRcdFx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsICQoLi4uKSlcblx0XHRcdH0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkge1xuXHRcdFx0XHRyZXR1cm4gKCBjb250ZXh0IHx8IHJvb3QgKS5maW5kKCBzZWxlY3RvciApO1xuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgY29udGV4dClcblx0XHRcdC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQoY29udGV4dCkuZmluZChleHByKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSEFORExFOiAkKERPTUVsZW1lbnQpXG5cdFx0fSBlbHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7XG5cdFx0XHR0aGlzWyAwIF0gPSBzZWxlY3Rvcjtcblx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0Ly8gSEFORExFOiAkKGZ1bmN0aW9uKVxuXHRcdC8vIFNob3J0Y3V0IGZvciBkb2N1bWVudCByZWFkeVxuXHRcdH0gZWxzZSBpZiAoIGlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7XG5cdFx0XHRyZXR1cm4gcm9vdC5yZWFkeSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0cm9vdC5yZWFkeSggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gRXhlY3V0ZSBpbW1lZGlhdGVseSBpZiByZWFkeSBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRzZWxlY3RvciggalF1ZXJ5ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7XG5cdH07XG5cbi8vIEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3RhbnRpYXRpb25cbmluaXQucHJvdG90eXBlID0galF1ZXJ5LmZuO1xuXG4vLyBJbml0aWFsaXplIGNlbnRyYWwgcmVmZXJlbmNlXG5yb290alF1ZXJ5ID0galF1ZXJ5KCBkb2N1bWVudCApO1xuXG5cbnZhciBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxcblxuXHQvLyBNZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldFxuXHRndWFyYW50ZWVkVW5pcXVlID0ge1xuXHRcdGNoaWxkcmVuOiB0cnVlLFxuXHRcdGNvbnRlbnRzOiB0cnVlLFxuXHRcdG5leHQ6IHRydWUsXG5cdFx0cHJldjogdHJ1ZVxuXHR9O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGhhczogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHR2YXIgdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICksXG5cdFx0XHRsID0gdGFyZ2V0cy5sZW5ndGg7XG5cblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFyZ2V0c1sgaSBdICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Y2xvc2VzdDogZnVuY3Rpb24oIHNlbGVjdG9ycywgY29udGV4dCApIHtcblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRtYXRjaGVkID0gW10sXG5cdFx0XHR0YXJnZXRzID0gdHlwZW9mIHNlbGVjdG9ycyAhPT0gXCJzdHJpbmdcIiAmJiBqUXVlcnkoIHNlbGVjdG9ycyApO1xuXG5cdFx0Ly8gUG9zaXRpb25hbCBzZWxlY3RvcnMgbmV2ZXIgbWF0Y2gsIHNpbmNlIHRoZXJlJ3Mgbm8gX3NlbGVjdGlvbl8gY29udGV4dFxuXHRcdGlmICggIXJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3JzICkgKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZvciAoIGN1ciA9IHRoaXNbIGkgXTsgY3VyICYmIGN1ciAhPT0gY29udGV4dDsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cblx0XHRcdFx0XHQvLyBBbHdheXMgc2tpcCBkb2N1bWVudCBmcmFnbWVudHNcblx0XHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA8IDExICYmICggdGFyZ2V0cyA/XG5cdFx0XHRcdFx0XHR0YXJnZXRzLmluZGV4KCBjdXIgKSA+IC0xIDpcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcGFzcyBub24tZWxlbWVudHMgdG8gU2l6emxlXG5cdFx0XHRcdFx0XHRjdXIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBjdXIsIHNlbGVjdG9ycyApICkgKSB7XG5cblx0XHRcdFx0XHRcdG1hdGNoZWQucHVzaCggY3VyICk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQubGVuZ3RoID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICkgOiBtYXRjaGVkICk7XG5cdH0sXG5cblx0Ly8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbiB0aGUgc2V0XG5cdGluZGV4OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5kZXggaW4gcGFyZW50XG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybiAoIHRoaXNbIDAgXSAmJiB0aGlzWyAwIF0ucGFyZW50Tm9kZSApID8gdGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGggOiAtMTtcblx0XHR9XG5cblx0XHQvLyBJbmRleCBpbiBzZWxlY3RvclxuXHRcdGlmICggdHlwZW9mIGVsZW0gPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdGhpc1sgMCBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50XG5cdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggdGhpcyxcblxuXHRcdFx0Ly8gSWYgaXQgcmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0LCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1c2VkXG5cdFx0XHRlbGVtLmpxdWVyeSA/IGVsZW1bIDAgXSA6IGVsZW1cblx0XHQpO1xuXHR9LFxuXG5cdGFkZDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayhcblx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMuZ2V0KCksIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSApXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblxuXHRhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID9cblx0XHRcdHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoIHNlbGVjdG9yIClcblx0XHQpO1xuXHR9XG59ICk7XG5cbmZ1bmN0aW9uIHNpYmxpbmcoIGN1ciwgZGlyICkge1xuXHR3aGlsZSAoICggY3VyID0gY3VyWyBkaXIgXSApICYmIGN1ci5ub2RlVHlwZSAhPT0gMSApIHt9XG5cdHJldHVybiBjdXI7XG59XG5cbmpRdWVyeS5lYWNoKCB7XG5cdHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRyZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBwYXJlbnQgOiBudWxsO1xuXHR9LFxuXHRwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiApO1xuXHR9LFxuXHRwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIsIHVudGlsICk7XG5cdH0sXG5cdG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0cHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoICggZWxlbS5wYXJlbnROb2RlIHx8IHt9ICkuZmlyc3RDaGlsZCwgZWxlbSApO1xuXHR9LFxuXHRjaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCBlbGVtLmZpcnN0Q2hpbGQgKTtcblx0fSxcblx0Y29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdGlmICggZWxlbS5jb250ZW50RG9jdW1lbnQgIT0gbnVsbCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMStcblx0XHRcdC8vIDxvYmplY3Q+IGVsZW1lbnRzIHdpdGggbm8gYGRhdGFgIGF0dHJpYnV0ZSBoYXMgYW4gb2JqZWN0XG5cdFx0XHQvLyBgY29udGVudERvY3VtZW50YCB3aXRoIGEgYG51bGxgIHByb3RvdHlwZS5cblx0XHRcdGdldFByb3RvKCBlbGVtLmNvbnRlbnREb2N1bWVudCApICkge1xuXG5cdFx0XHRyZXR1cm4gZWxlbS5jb250ZW50RG9jdW1lbnQ7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHksIGlPUyA3IG9ubHksIEFuZHJvaWQgQnJvd3NlciA8PTQuMyBvbmx5XG5cdFx0Ly8gVHJlYXQgdGhlIHRlbXBsYXRlIGVsZW1lbnQgYXMgYSByZWd1bGFyIG9uZSBpbiBicm93c2VycyB0aGF0XG5cdFx0Ly8gZG9uJ3Qgc3VwcG9ydCBpdC5cblx0XHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRlbXBsYXRlXCIgKSApIHtcblx0XHRcdGVsZW0gPSBlbGVtLmNvbnRlbnQgfHwgZWxlbTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgZWxlbS5jaGlsZE5vZGVzICk7XG5cdH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBmbiApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkge1xuXHRcdHZhciBtYXRjaGVkID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7XG5cblx0XHRpZiAoIG5hbWUuc2xpY2UoIC01ICkgIT09IFwiVW50aWxcIiApIHtcblx0XHRcdHNlbGVjdG9yID0gdW50aWw7XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWxlY3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRtYXRjaGVkID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIG1hdGNoZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMubGVuZ3RoID4gMSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGR1cGxpY2F0ZXNcblx0XHRcdGlmICggIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSApIHtcblx0XHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV2ZXJzZSBvcmRlciBmb3IgcGFyZW50cyogYW5kIHByZXYtZGVyaXZhdGl2ZXNcblx0XHRcdGlmICggcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHtcblx0XHRcdFx0bWF0Y2hlZC5yZXZlcnNlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkICk7XG5cdH07XG59ICk7XG52YXIgcm5vdGh0bWx3aGl0ZSA9ICggL1teXFx4MjBcXHRcXHJcXG5cXGZdKy9nICk7XG5cblxuXG4vLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lc1xuZnVuY3Rpb24gY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIHtcblx0dmFyIG9iamVjdCA9IHt9O1xuXHRqUXVlcnkuZWFjaCggb3B0aW9ucy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdLCBmdW5jdGlvbiggXywgZmxhZyApIHtcblx0XHRvYmplY3RbIGZsYWcgXSA9IHRydWU7XG5cdH0gKTtcblx0cmV0dXJuIG9iamVjdDtcbn1cblxuLypcbiAqIENyZWF0ZSBhIGNhbGxiYWNrIGxpc3QgdXNpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqXHRvcHRpb25zOiBhbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBvcHRpb25zIHRoYXQgd2lsbCBjaGFuZ2UgaG93XG4gKlx0XHRcdHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIG9wdGlvbiBvYmplY3RcbiAqXG4gKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZVxuICogXCJmaXJlZFwiIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIFBvc3NpYmxlIG9wdGlvbnM6XG4gKlxuICpcdG9uY2U6XHRcdFx0d2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHRtZW1vcnk6XHRcdFx0d2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZFxuICpcdFx0XHRcdFx0YWZ0ZXIgdGhlIGxpc3QgaGFzIGJlZW4gZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgXCJtZW1vcml6ZWRcIlxuICpcdFx0XHRcdFx0dmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdHVuaXF1ZTpcdFx0XHR3aWxsIGVuc3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UgKG5vIGR1cGxpY2F0ZSBpbiB0aGUgbGlzdClcbiAqXG4gKlx0c3RvcE9uRmFsc2U6XHRpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2VcbiAqXG4gKi9cbmpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHQvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkXG5cdC8vICh3ZSBjaGVjayBpbiBjYWNoZSBmaXJzdClcblx0b3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiID9cblx0XHRjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgOlxuXHRcdGpRdWVyeS5leHRlbmQoIHt9LCBvcHRpb25zICk7XG5cblx0dmFyIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmdcblx0XHRmaXJpbmcsXG5cblx0XHQvLyBMYXN0IGZpcmUgdmFsdWUgZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0c1xuXHRcdG1lbW9yeSxcblxuXHRcdC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkXG5cdFx0ZmlyZWQsXG5cblx0XHQvLyBGbGFnIHRvIHByZXZlbnQgZmlyaW5nXG5cdFx0bG9ja2VkLFxuXG5cdFx0Ly8gQWN0dWFsIGNhbGxiYWNrIGxpc3Rcblx0XHRsaXN0ID0gW10sXG5cblx0XHQvLyBRdWV1ZSBvZiBleGVjdXRpb24gZGF0YSBmb3IgcmVwZWF0YWJsZSBsaXN0c1xuXHRcdHF1ZXVlID0gW10sXG5cblx0XHQvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSBhZGQvcmVtb3ZlIGFzIG5lZWRlZClcblx0XHRmaXJpbmdJbmRleCA9IC0xLFxuXG5cdFx0Ly8gRmlyZSBjYWxsYmFja3Ncblx0XHRmaXJlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuZm9yY2Ugc2luZ2xlLWZpcmluZ1xuXHRcdFx0bG9ja2VkID0gbG9ja2VkIHx8IG9wdGlvbnMub25jZTtcblxuXHRcdFx0Ly8gRXhlY3V0ZSBjYWxsYmFja3MgZm9yIGFsbCBwZW5kaW5nIGV4ZWN1dGlvbnMsXG5cdFx0XHQvLyByZXNwZWN0aW5nIGZpcmluZ0luZGV4IG92ZXJyaWRlcyBhbmQgcnVudGltZSBjaGFuZ2VzXG5cdFx0XHRmaXJlZCA9IGZpcmluZyA9IHRydWU7XG5cdFx0XHRmb3IgKCA7IHF1ZXVlLmxlbmd0aDsgZmlyaW5nSW5kZXggPSAtMSApIHtcblx0XHRcdFx0bWVtb3J5ID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdFx0d2hpbGUgKCArK2ZpcmluZ0luZGV4IDwgbGlzdC5sZW5ndGggKSB7XG5cblx0XHRcdFx0XHQvLyBSdW4gY2FsbGJhY2sgYW5kIGNoZWNrIGZvciBlYXJseSB0ZXJtaW5hdGlvblxuXHRcdFx0XHRcdGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggbWVtb3J5WyAwIF0sIG1lbW9yeVsgMSBdICkgPT09IGZhbHNlICYmXG5cdFx0XHRcdFx0XHRvcHRpb25zLnN0b3BPbkZhbHNlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBKdW1wIHRvIGVuZCBhbmQgZm9yZ2V0IHRoZSBkYXRhIHNvIC5hZGQgZG9lc24ndCByZS1maXJlXG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoO1xuXHRcdFx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvcmdldCB0aGUgZGF0YSBpZiB3ZSdyZSBkb25lIHdpdGggaXRcblx0XHRcdGlmICggIW9wdGlvbnMubWVtb3J5ICkge1xuXHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0ZmlyaW5nID0gZmFsc2U7XG5cblx0XHRcdC8vIENsZWFuIHVwIGlmIHdlJ3JlIGRvbmUgZmlyaW5nIGZvciBnb29kXG5cdFx0XHRpZiAoIGxvY2tlZCApIHtcblxuXHRcdFx0XHQvLyBLZWVwIGFuIGVtcHR5IGxpc3QgaWYgd2UgaGF2ZSBkYXRhIGZvciBmdXR1cmUgYWRkIGNhbGxzXG5cdFx0XHRcdGlmICggbWVtb3J5ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIHRoaXMgb2JqZWN0IGlzIHNwZW50XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGlzdCA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3Rcblx0XHRzZWxmID0ge1xuXG5cdFx0XHQvLyBBZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tzIHRvIHRoZSBsaXN0XG5cdFx0XHRhZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBoYXZlIG1lbW9yeSBmcm9tIGEgcGFzdCBydW4sIHdlIHNob3VsZCBmaXJlIGFmdGVyIGFkZGluZ1xuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoIC0gMTtcblx0XHRcdFx0XHRcdHF1ZXVlLnB1c2goIG1lbW9yeSApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCggZnVuY3Rpb24gYWRkKCBhcmdzICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCAhb3B0aW9ucy51bmlxdWUgfHwgIXNlbGYuaGFzKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxpc3QucHVzaCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBhcmcgJiYgYXJnLmxlbmd0aCAmJiB0b1R5cGUoIGFyZyApICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSW5zcGVjdCByZWN1cnNpdmVseVxuXHRcdFx0XHRcdFx0XHRcdGFkZCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHR9ICkoIGFyZ3VtZW50cyApO1xuXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBsaXN0XG5cdFx0XHRyZW1vdmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdHZhciBpbmRleDtcblx0XHRcdFx0XHR3aGlsZSAoICggaW5kZXggPSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdGxpc3Quc3BsaWNlKCBpbmRleCwgMSApO1xuXG5cdFx0XHRcdFx0XHQvLyBIYW5kbGUgZmlyaW5nIGluZGV4ZXNcblx0XHRcdFx0XHRcdGlmICggaW5kZXggPD0gZmlyaW5nSW5kZXggKSB7XG5cdFx0XHRcdFx0XHRcdGZpcmluZ0luZGV4LS07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdC5cblx0XHRcdC8vIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tzIGF0dGFjaGVkLlxuXHRcdFx0aGFzOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdHJldHVybiBmbiA/XG5cdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6XG5cdFx0XHRcdFx0bGlzdC5sZW5ndGggPiAwO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGFsbCBjYWxsYmFja3MgZnJvbSB0aGUgbGlzdFxuXHRcdFx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZSBhbmQgLmFkZFxuXHRcdFx0Ly8gQWJvcnQgYW55IGN1cnJlbnQvcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHQvLyBDbGVhciBhbGwgY2FsbGJhY2tzIGFuZCB2YWx1ZXNcblx0XHRcdGRpc2FibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0ZGlzYWJsZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gIWxpc3Q7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlXG5cdFx0XHQvLyBBbHNvIGRpc2FibGUgLmFkZCB1bmxlc3Mgd2UgaGF2ZSBtZW1vcnkgKHNpbmNlIGl0IHdvdWxkIGhhdmUgbm8gZWZmZWN0KVxuXHRcdFx0Ly8gQWJvcnQgYW55IHBlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0bG9jazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGlmICggIW1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGxvY2tlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWxvY2tlZDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHNcblx0XHRcdGZpcmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHtcblx0XHRcdFx0aWYgKCAhbG9ja2VkICkge1xuXHRcdFx0XHRcdGFyZ3MgPSBhcmdzIHx8IFtdO1xuXHRcdFx0XHRcdGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07XG5cdFx0XHRcdFx0cXVldWUucHVzaCggYXJncyApO1xuXHRcdFx0XHRcdGlmICggIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZVxuXHRcdFx0ZmlyZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFmaXJlZDtcblx0XHRcdH1cblx0XHR9O1xuXG5cdHJldHVybiBzZWxmO1xufTtcblxuXG5mdW5jdGlvbiBJZGVudGl0eSggdiApIHtcblx0cmV0dXJuIHY7XG59XG5mdW5jdGlvbiBUaHJvd2VyKCBleCApIHtcblx0dGhyb3cgZXg7XG59XG5cbmZ1bmN0aW9uIGFkb3B0VmFsdWUoIHZhbHVlLCByZXNvbHZlLCByZWplY3QsIG5vVmFsdWUgKSB7XG5cdHZhciBtZXRob2Q7XG5cblx0dHJ5IHtcblxuXHRcdC8vIENoZWNrIGZvciBwcm9taXNlIGFzcGVjdCBmaXJzdCB0byBwcml2aWxlZ2Ugc3luY2hyb25vdXMgYmVoYXZpb3Jcblx0XHRpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUucHJvbWlzZSApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUgKS5kb25lKCByZXNvbHZlICkuZmFpbCggcmVqZWN0ICk7XG5cblx0XHQvLyBPdGhlciB0aGVuYWJsZXNcblx0XHR9IGVsc2UgaWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnRoZW4gKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlLCByZXNvbHZlLCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIG5vbi10aGVuYWJsZXNcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb250cm9sIGByZXNvbHZlYCBhcmd1bWVudHMgYnkgbGV0dGluZyBBcnJheSNzbGljZSBjYXN0IGJvb2xlYW4gYG5vVmFsdWVgIHRvIGludGVnZXI6XG5cdFx0XHQvLyAqIGZhbHNlOiBbIHZhbHVlIF0uc2xpY2UoIDAgKSA9PiByZXNvbHZlKCB2YWx1ZSApXG5cdFx0XHQvLyAqIHRydWU6IFsgdmFsdWUgXS5zbGljZSggMSApID0+IHJlc29sdmUoKVxuXHRcdFx0cmVzb2x2ZS5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0uc2xpY2UoIG5vVmFsdWUgKSApO1xuXHRcdH1cblxuXHQvLyBGb3IgUHJvbWlzZXMvQSssIGNvbnZlcnQgZXhjZXB0aW9ucyBpbnRvIHJlamVjdGlvbnNcblx0Ly8gU2luY2UgalF1ZXJ5LndoZW4gZG9lc24ndCB1bndyYXAgdGhlbmFibGVzLCB3ZSBjYW4gc2tpcCB0aGUgZXh0cmEgY2hlY2tzIGFwcGVhcmluZyBpblxuXHQvLyBEZWZlcnJlZCN0aGVuIHRvIGNvbmRpdGlvbmFsbHkgc3VwcHJlc3MgcmVqZWN0aW9uLlxuXHR9IGNhdGNoICggdmFsdWUgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCBvbmx5XG5cdFx0Ly8gU3RyaWN0IG1vZGUgZnVuY3Rpb25zIGludm9rZWQgd2l0aG91dCAuY2FsbC8uYXBwbHkgZ2V0IGdsb2JhbC1vYmplY3QgY29udGV4dFxuXHRcdHJlamVjdC5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0gKTtcblx0fVxufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0RGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkge1xuXHRcdHZhciB0dXBsZXMgPSBbXG5cblx0XHRcdFx0Ly8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGNhbGxiYWNrcyxcblx0XHRcdFx0Ly8gLi4uIC50aGVuIGhhbmRsZXJzLCBhcmd1bWVudCBpbmRleCwgW2ZpbmFsIHN0YXRlXVxuXHRcdFx0XHRbIFwibm90aWZ5XCIsIFwicHJvZ3Jlc3NcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSwgMiBdLFxuXHRcdFx0XHRbIFwicmVzb2x2ZVwiLCBcImRvbmVcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDAsIFwicmVzb2x2ZWRcIiBdLFxuXHRcdFx0XHRbIFwicmVqZWN0XCIsIFwiZmFpbFwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMSwgXCJyZWplY3RlZFwiIF1cblx0XHRcdF0sXG5cdFx0XHRzdGF0ZSA9IFwicGVuZGluZ1wiLFxuXHRcdFx0cHJvbWlzZSA9IHtcblx0XHRcdFx0c3RhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBzdGF0ZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0YWx3YXlzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJjYXRjaFwiOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb21pc2UudGhlbiggbnVsbCwgZm4gKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBLZWVwIHBpcGUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdHBpcGU6IGZ1bmN0aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHtcblx0XHRcdFx0XHR2YXIgZm5zID0gYXJndW1lbnRzO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIF9pLCB0dXBsZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBNYXAgdHVwbGVzIChwcm9ncmVzcywgZG9uZSwgZmFpbCkgdG8gYXJndW1lbnRzIChkb25lLCBmYWlsLCBwcm9ncmVzcylcblx0XHRcdFx0XHRcdFx0dmFyIGZuID0gaXNGdW5jdGlvbiggZm5zWyB0dXBsZVsgNCBdIF0gKSAmJiBmbnNbIHR1cGxlWyA0IF0gXTtcblxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5wcm9ncmVzcyhmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5ub3RpZnkgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZG9uZShmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZXNvbHZlIH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmZhaWwoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVqZWN0IH0pXG5cdFx0XHRcdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMSBdIF0oIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCA9IGZuICYmIGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkICYmIGlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnByb21pc2UoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlmeSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5kb25lKCBuZXdEZWZlci5yZXNvbHZlIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmZhaWwoIG5ld0RlZmVyLnJlamVjdCApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlclsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZuID8gWyByZXR1cm5lZCBdIDogYXJndW1lbnRzXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0Zm5zID0gbnVsbDtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGVuOiBmdW5jdGlvbiggb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIG9uUHJvZ3Jlc3MgKSB7XG5cdFx0XHRcdFx0dmFyIG1heERlcHRoID0gMDtcblx0XHRcdFx0XHRmdW5jdGlvbiByZXNvbHZlKCBkZXB0aCwgZGVmZXJyZWQsIGhhbmRsZXIsIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0aGF0ID0gdGhpcyxcblx0XHRcdFx0XHRcdFx0XHRhcmdzID0gYXJndW1lbnRzLFxuXHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCwgdGhlbjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjNcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgZG91YmxlLXJlc29sdXRpb24gYXR0ZW1wdHNcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggPCBtYXhEZXB0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCA9IGhhbmRsZXIuYXBwbHkoIHRoYXQsIGFyZ3MgKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNDhcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgPT09IGRlZmVycmVkLnByb21pc2UoKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvciggXCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb25cIiApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9ucyAyLjMuMy4xLCAzLjVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU0XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC03NVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gUmV0cmlldmUgYHRoZW5gIG9ubHkgb25jZVxuXHRcdFx0XHRcdFx0XHRcdFx0dGhlbiA9IHJldHVybmVkICYmXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuNFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02NFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IGNoZWNrIG9iamVjdHMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlbmFiaWxpdHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCB0eXBlb2YgcmV0dXJuZWQgPT09IFwib2JqZWN0XCIgfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgcmV0dXJuZWQgPT09IFwiZnVuY3Rpb25cIiApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhIHJldHVybmVkIHRoZW5hYmxlXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoZW4gKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTcGVjaWFsIHByb2Nlc3NvcnMgKG5vdGlmeSkganVzdCB3YWl0IGZvciByZXNvbHV0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbCApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBOb3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgYWxzbyBob29rIGludG8gcHJvZ3Jlc3Ncblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBkaXNyZWdhcmQgb2xkZXIgcmVzb2x1dGlvbiB2YWx1ZXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhEZXB0aCsrO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGggKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGFsbCBvdGhlciByZXR1cm5lZCB2YWx1ZXNcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBJZGVudGl0eSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIHJldHVybmVkIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBQcm9jZXNzIHRoZSB2YWx1ZShzKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEZWZhdWx0IHByb2Nlc3MgaXMgcmVzb2x2ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoIHNwZWNpYWwgfHwgZGVmZXJyZWQucmVzb2x2ZVdpdGggKSggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IG5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBjYXRjaCBhbmQgcmVqZWN0IGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzID0gc3BlY2lhbCA/XG5cdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93IDpcblx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3coKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2soIGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3Muc3RhY2tUcmFjZSApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy40LjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02MVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBwb3N0LXJlc29sdXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKyAxID49IG1heERlcHRoICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gVGhyb3dlciApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgZSBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4xXG5cdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU3XG5cdFx0XHRcdFx0XHRcdC8vIFJlLXJlc29sdmUgcHJvbWlzZXMgaW1tZWRpYXRlbHkgdG8gZG9kZ2UgZmFsc2UgcmVqZWN0aW9uIGZyb21cblx0XHRcdFx0XHRcdFx0Ly8gc3Vic2VxdWVudCBlcnJvcnNcblx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzKCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDYWxsIGFuIG9wdGlvbmFsIGhvb2sgdG8gcmVjb3JkIHRoZSBzdGFjaywgaW4gY2FzZSBvZiBleGNlcHRpb25cblx0XHRcdFx0XHRcdFx0XHQvLyBzaW5jZSBpdCdzIG90aGVyd2lzZSBsb3N0IHdoZW4gZXhlY3V0aW9uIGdvZXMgYXN5bmNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLnN0YWNrVHJhY2UgPSBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBwcm9jZXNzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXG5cdFx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUHJvZ3Jlc3MgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblByb2dyZXNzIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLm5vdGlmeVdpdGhcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMSBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25GdWxmaWxsZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkZ1bGZpbGxlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eVxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDIgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUmVqZWN0ZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblJlamVjdGVkIDpcblx0XHRcdFx0XHRcdFx0XHRcdFRocm93ZXJcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWRcblx0XHRcdFx0Ly8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdFxuXHRcdFx0XHRwcm9taXNlOiBmdW5jdGlvbiggb2JqICkge1xuXHRcdFx0XHRcdHJldHVybiBvYmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlzZSApIDogcHJvbWlzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlZmVycmVkID0ge307XG5cblx0XHQvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzXG5cdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xuXHRcdFx0dmFyIGxpc3QgPSB0dXBsZVsgMiBdLFxuXHRcdFx0XHRzdGF0ZVN0cmluZyA9IHR1cGxlWyA1IF07XG5cblx0XHRcdC8vIHByb21pc2UucHJvZ3Jlc3MgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5kb25lID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZmFpbCA9IGxpc3QuYWRkXG5cdFx0XHRwcm9taXNlWyB0dXBsZVsgMSBdIF0gPSBsaXN0LmFkZDtcblxuXHRcdFx0Ly8gSGFuZGxlIHN0YXRlXG5cdFx0XHRpZiAoIHN0YXRlU3RyaW5nICkge1xuXHRcdFx0XHRsaXN0LmFkZChcblx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlc29sdmVkXCIgKGkuZS4sIGZ1bGZpbGxlZClcblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZWplY3RlZFwiXG5cdFx0XHRcdFx0XHRzdGF0ZSA9IHN0YXRlU3RyaW5nO1xuXHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdHR1cGxlc1sgMyAtIGkgXVsgMiBdLmRpc2FibGUsXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDMgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfY2FsbGJhY2tzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMiBdLmxvY2ssXG5cblx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5sb2NrXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5maXJlXG5cdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5maXJlXG5cdFx0XHRsaXN0LmFkZCggdHVwbGVbIDMgXS5maXJlICk7XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5ub3RpZnlXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZXNvbHZlV2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdCA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZWplY3RXaXRoKC4uLikgfVxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gdW5kZWZpbmVkIDogdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmVXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSA9IGxpc3QuZmlyZVdpdGg7XG5cdFx0fSApO1xuXG5cdFx0Ly8gTWFrZSB0aGUgZGVmZXJyZWQgYSBwcm9taXNlXG5cdFx0cHJvbWlzZS5wcm9taXNlKCBkZWZlcnJlZCApO1xuXG5cdFx0Ly8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueVxuXHRcdGlmICggZnVuYyApIHtcblx0XHRcdGZ1bmMuY2FsbCggZGVmZXJyZWQsIGRlZmVycmVkICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsIGRvbmUhXG5cdFx0cmV0dXJuIGRlZmVycmVkO1xuXHR9LFxuXG5cdC8vIERlZmVycmVkIGhlbHBlclxuXHR3aGVuOiBmdW5jdGlvbiggc2luZ2xlVmFsdWUgKSB7XG5cdFx0dmFyXG5cblx0XHRcdC8vIGNvdW50IG9mIHVuY29tcGxldGVkIHN1Ym9yZGluYXRlc1xuXHRcdFx0cmVtYWluaW5nID0gYXJndW1lbnRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5wcm9jZXNzZWQgYXJndW1lbnRzXG5cdFx0XHRpID0gcmVtYWluaW5nLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBmdWxmaWxsbWVudCBkYXRhXG5cdFx0XHRyZXNvbHZlQ29udGV4dHMgPSBBcnJheSggaSApLFxuXHRcdFx0cmVzb2x2ZVZhbHVlcyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLFxuXG5cdFx0XHQvLyB0aGUgcHJpbWFyeSBEZWZlcnJlZFxuXHRcdFx0cHJpbWFyeSA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBjYWxsYmFjayBmYWN0b3J5XG5cdFx0XHR1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZUNvbnRleHRzWyBpIF0gPSB0aGlzO1xuXHRcdFx0XHRcdHJlc29sdmVWYWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcblx0XHRcdFx0XHRpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7XG5cdFx0XHRcdFx0XHRwcmltYXJ5LnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXG5cdFx0Ly8gU2luZ2xlLSBhbmQgZW1wdHkgYXJndW1lbnRzIGFyZSBhZG9wdGVkIGxpa2UgUHJvbWlzZS5yZXNvbHZlXG5cdFx0aWYgKCByZW1haW5pbmcgPD0gMSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHNpbmdsZVZhbHVlLCBwcmltYXJ5LmRvbmUoIHVwZGF0ZUZ1bmMoIGkgKSApLnJlc29sdmUsIHByaW1hcnkucmVqZWN0LFxuXHRcdFx0XHQhcmVtYWluaW5nICk7XG5cblx0XHRcdC8vIFVzZSAudGhlbigpIHRvIHVud3JhcCBzZWNvbmRhcnkgdGhlbmFibGVzIChjZi4gZ2gtMzAwMClcblx0XHRcdGlmICggcHJpbWFyeS5zdGF0ZSgpID09PSBcInBlbmRpbmdcIiB8fFxuXHRcdFx0XHRpc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgcmVzb2x2ZVZhbHVlc1sgaSBdLnRoZW4gKSApIHtcblxuXHRcdFx0XHRyZXR1cm4gcHJpbWFyeS50aGVuKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgYXJndW1lbnRzIGFyZSBhZ2dyZWdhdGVkIGxpa2UgUHJvbWlzZS5hbGwgYXJyYXkgZWxlbWVudHNcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHJlc29sdmVWYWx1ZXNbIGkgXSwgdXBkYXRlRnVuYyggaSApLCBwcmltYXJ5LnJlamVjdCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcmltYXJ5LnByb21pc2UoKTtcblx0fVxufSApO1xuXG5cbi8vIFRoZXNlIHVzdWFsbHkgaW5kaWNhdGUgYSBwcm9ncmFtbWVyIG1pc3Rha2UgZHVyaW5nIGRldmVsb3BtZW50LFxuLy8gd2FybiBhYm91dCB0aGVtIEFTQVAgcmF0aGVyIHRoYW4gc3dhbGxvd2luZyB0aGVtIGJ5IGRlZmF1bHQuXG52YXIgcmVycm9yTmFtZXMgPSAvXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztcblxualF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgPSBmdW5jdGlvbiggZXJyb3IsIHN0YWNrICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDggLSA5IG9ubHlcblx0Ly8gQ29uc29sZSBleGlzdHMgd2hlbiBkZXYgdG9vbHMgYXJlIG9wZW4sIHdoaWNoIGNhbiBoYXBwZW4gYXQgYW55IHRpbWVcblx0aWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS53YXJuICYmIGVycm9yICYmIHJlcnJvck5hbWVzLnRlc3QoIGVycm9yLm5hbWUgKSApIHtcblx0XHR3aW5kb3cuY29uc29sZS53YXJuKCBcImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246IFwiICsgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIHN0YWNrICk7XG5cdH1cbn07XG5cblxuXG5cbmpRdWVyeS5yZWFkeUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKCBlcnJvciApIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdHRocm93IGVycm9yO1xuXHR9ICk7XG59O1xuXG5cblxuXG4vLyBUaGUgZGVmZXJyZWQgdXNlZCBvbiBET00gcmVhZHlcbnZhciByZWFkeUxpc3QgPSBqUXVlcnkuRGVmZXJyZWQoKTtcblxualF1ZXJ5LmZuLnJlYWR5ID0gZnVuY3Rpb24oIGZuICkge1xuXG5cdHJlYWR5TGlzdFxuXHRcdC50aGVuKCBmbiApXG5cblx0XHQvLyBXcmFwIGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiBpbiBhIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIGxvb2t1cFxuXHRcdC8vIGhhcHBlbnMgYXQgdGhlIHRpbWUgb2YgZXJyb3IgaGFuZGxpbmcgaW5zdGVhZCBvZiBjYWxsYmFja1xuXHRcdC8vIHJlZ2lzdHJhdGlvbi5cblx0XHQuY2F0Y2goIGZ1bmN0aW9uKCBlcnJvciApIHtcblx0XHRcdGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiggZXJyb3IgKTtcblx0XHR9ICk7XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy5cblx0aXNSZWFkeTogZmFsc2UsXG5cblx0Ly8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9yZVxuXHQvLyB0aGUgcmVhZHkgZXZlbnQgZmlyZXMuIFNlZSAjNjc4MVxuXHRyZWFkeVdhaXQ6IDEsXG5cblx0Ly8gSGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeVxuXHRyZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7XG5cblx0XHQvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJlYWR5XG5cdFx0aWYgKCB3YWl0ID09PSB0cnVlID8gLS1qUXVlcnkucmVhZHlXYWl0IDogalF1ZXJ5LmlzUmVhZHkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmVtZW1iZXIgdGhhdCB0aGUgRE9NIGlzIHJlYWR5XG5cdFx0alF1ZXJ5LmlzUmVhZHkgPSB0cnVlO1xuXG5cdFx0Ly8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlmIG5lZWQgYmVcblx0XHRpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlXG5cdFx0cmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5yZWFkeS50aGVuID0gcmVhZHlMaXN0LnRoZW47XG5cbi8vIFRoZSByZWFkeSBldmVudCBoYW5kbGVyIGFuZCBzZWxmIGNsZWFudXAgbWV0aG9kXG5mdW5jdGlvbiBjb21wbGV0ZWQoKSB7XG5cdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcblx0alF1ZXJ5LnJlYWR5KCk7XG59XG5cbi8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkXG4vLyBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDEwIG9ubHlcbi8vIE9sZGVyIElFIHNvbWV0aW1lcyBzaWduYWxzIFwiaW50ZXJhY3RpdmVcIiB0b28gc29vblxuaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIgfHxcblx0KCBkb2N1bWVudC5yZWFkeVN0YXRlICE9PSBcImxvYWRpbmdcIiAmJiAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsICkgKSB7XG5cblx0Ly8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBqUXVlcnkucmVhZHkgKTtcblxufSBlbHNlIHtcblxuXHQvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrXG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblxuXHQvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29ya1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xufVxuXG5cblxuXG4vLyBNdWx0aWZ1bmN0aW9uYWwgbWV0aG9kIHRvIGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb25cbi8vIFRoZSB2YWx1ZS9zIGNhbiBvcHRpb25hbGx5IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvblxudmFyIGFjY2VzcyA9IGZ1bmN0aW9uKCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWluYWJsZSwgZW1wdHlHZXQsIHJhdyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGVsZW1zLmxlbmd0aCxcblx0XHRidWxrID0ga2V5ID09IG51bGw7XG5cblx0Ly8gU2V0cyBtYW55IHZhbHVlc1xuXHRpZiAoIHRvVHlwZSgga2V5ICkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblx0XHRmb3IgKCBpIGluIGtleSApIHtcblx0XHRcdGFjY2VzcyggZWxlbXMsIGZuLCBpLCBrZXlbIGkgXSwgdHJ1ZSwgZW1wdHlHZXQsIHJhdyApO1xuXHRcdH1cblxuXHQvLyBTZXRzIG9uZSB2YWx1ZVxuXHR9IGVsc2UgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cblx0XHRpZiAoICFpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmF3ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGJ1bGsgKSB7XG5cblx0XHRcdC8vIEJ1bGsgb3BlcmF0aW9ucyBydW4gYWdhaW5zdCB0aGUgZW50aXJlIHNldFxuXHRcdFx0aWYgKCByYXcgKSB7XG5cdFx0XHRcdGZuLmNhbGwoIGVsZW1zLCB2YWx1ZSApO1xuXHRcdFx0XHRmbiA9IG51bGw7XG5cblx0XHRcdC8vIC4uLmV4Y2VwdCB3aGVuIGV4ZWN1dGluZyBmdW5jdGlvbiB2YWx1ZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ1bGsgPSBmbjtcblx0XHRcdFx0Zm4gPSBmdW5jdGlvbiggZWxlbSwgX2tleSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRmbihcblx0XHRcdFx0XHRlbGVtc1sgaSBdLCBrZXksIHJhdyA/XG5cdFx0XHRcdFx0XHR2YWx1ZSA6XG5cdFx0XHRcdFx0XHR2YWx1ZS5jYWxsKCBlbGVtc1sgaSBdLCBpLCBmbiggZWxlbXNbIGkgXSwga2V5ICkgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggY2hhaW5hYmxlICkge1xuXHRcdHJldHVybiBlbGVtcztcblx0fVxuXG5cdC8vIEdldHNcblx0aWYgKCBidWxrICkge1xuXHRcdHJldHVybiBmbi5jYWxsKCBlbGVtcyApO1xuXHR9XG5cblx0cmV0dXJuIGxlbiA/IGZuKCBlbGVtc1sgMCBdLCBrZXkgKSA6IGVtcHR5R2V0O1xufTtcblxuXG4vLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmdcbnZhciBybXNQcmVmaXggPSAvXi1tcy0vLFxuXHRyZGFzaEFscGhhID0gLy0oW2Etel0pL2c7XG5cbi8vIFVzZWQgYnkgY2FtZWxDYXNlIGFzIGNhbGxiYWNrIHRvIHJlcGxhY2UoKVxuZnVuY3Rpb24gZmNhbWVsQ2FzZSggX2FsbCwgbGV0dGVyICkge1xuXHRyZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7XG59XG5cbi8vIENvbnZlcnQgZGFzaGVkIHRvIGNhbWVsQ2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVsZXNcbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTVcbi8vIE1pY3Jvc29mdCBmb3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICgjOTU3MilcbmZ1bmN0aW9uIGNhbWVsQ2FzZSggc3RyaW5nICkge1xuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoIHJtc1ByZWZpeCwgXCJtcy1cIiApLnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTtcbn1cbnZhciBhY2NlcHREYXRhID0gZnVuY3Rpb24oIG93bmVyICkge1xuXG5cdC8vIEFjY2VwdHMgb25seTpcblx0Ly8gIC0gTm9kZVxuXHQvLyAgICAtIE5vZGUuRUxFTUVOVF9OT0RFXG5cdC8vICAgIC0gTm9kZS5ET0NVTUVOVF9OT0RFXG5cdC8vICAtIE9iamVjdFxuXHQvLyAgICAtIEFueVxuXHRyZXR1cm4gb3duZXIubm9kZVR5cGUgPT09IDEgfHwgb3duZXIubm9kZVR5cGUgPT09IDkgfHwgISggK293bmVyLm5vZGVUeXBlICk7XG59O1xuXG5cblxuXG5mdW5jdGlvbiBEYXRhKCkge1xuXHR0aGlzLmV4cGFuZG8gPSBqUXVlcnkuZXhwYW5kbyArIERhdGEudWlkKys7XG59XG5cbkRhdGEudWlkID0gMTtcblxuRGF0YS5wcm90b3R5cGUgPSB7XG5cblx0Y2FjaGU6IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBvd25lciBvYmplY3QgYWxyZWFkeSBoYXMgYSBjYWNoZVxuXHRcdHZhciB2YWx1ZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblxuXHRcdC8vIElmIG5vdCwgY3JlYXRlIG9uZVxuXHRcdGlmICggIXZhbHVlICkge1xuXHRcdFx0dmFsdWUgPSB7fTtcblxuXHRcdFx0Ly8gV2UgY2FuIGFjY2VwdCBkYXRhIGZvciBub24tZWxlbWVudCBub2RlcyBpbiBtb2Rlcm4gYnJvd3NlcnMsXG5cdFx0XHQvLyBidXQgd2Ugc2hvdWxkIG5vdCwgc2VlICM4MzM1LlxuXHRcdFx0Ly8gQWx3YXlzIHJldHVybiBhbiBlbXB0eSBvYmplY3QuXG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIG93bmVyICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgaXQgaXMgYSBub2RlIHVubGlrZWx5IHRvIGJlIHN0cmluZ2lmeS1lZCBvciBsb29wZWQgb3ZlclxuXHRcdFx0XHQvLyB1c2UgcGxhaW4gYXNzaWdubWVudFxuXHRcdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHZhbHVlO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBzZWN1cmUgaXQgaW4gYSBub24tZW51bWVyYWJsZSBwcm9wZXJ0eVxuXHRcdFx0XHQvLyBjb25maWd1cmFibGUgbXVzdCBiZSB0cnVlIHRvIGFsbG93IHRoZSBwcm9wZXJ0eSB0byBiZVxuXHRcdFx0XHQvLyBkZWxldGVkIHdoZW4gZGF0YSBpcyByZW1vdmVkXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBvd25lciwgdGhpcy5leHBhbmRvLCB7XG5cdFx0XHRcdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWVcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24oIG93bmVyLCBkYXRhLCB2YWx1ZSApIHtcblx0XHR2YXIgcHJvcCxcblx0XHRcdGNhY2hlID0gdGhpcy5jYWNoZSggb3duZXIgKTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwga2V5LCB2YWx1ZSBdIGFyZ3Ncblx0XHQvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcpXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGNhY2hlWyBjYW1lbENhc2UoIGRhdGEgKSBdID0gdmFsdWU7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIHsgcHJvcGVydGllcyB9IF0gYXJnc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvcHkgdGhlIHByb3BlcnRpZXMgb25lLWJ5LW9uZSB0byB0aGUgY2FjaGUgb2JqZWN0XG5cdFx0XHRmb3IgKCBwcm9wIGluIGRhdGEgKSB7XG5cdFx0XHRcdGNhY2hlWyBjYW1lbENhc2UoIHByb3AgKSBdID0gZGF0YVsgcHJvcCBdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY2FjaGU7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0cmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMuY2FjaGUoIG93bmVyICkgOlxuXG5cdFx0XHQvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcpXG5cdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gJiYgb3duZXJbIHRoaXMuZXhwYW5kbyBdWyBjYW1lbENhc2UoIGtleSApIF07XG5cdH0sXG5cdGFjY2VzczogZnVuY3Rpb24oIG93bmVyLCBrZXksIHZhbHVlICkge1xuXG5cdFx0Ly8gSW4gY2FzZXMgd2hlcmUgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBObyBrZXkgd2FzIHNwZWNpZmllZFxuXHRcdC8vICAgMi4gQSBzdHJpbmcga2V5IHdhcyBzcGVjaWZpZWQsIGJ1dCBubyB2YWx1ZSBwcm92aWRlZFxuXHRcdC8vXG5cdFx0Ly8gVGFrZSB0aGUgXCJyZWFkXCIgcGF0aCBhbmQgYWxsb3cgdGhlIGdldCBtZXRob2QgdG8gZGV0ZXJtaW5lXG5cdFx0Ly8gd2hpY2ggdmFsdWUgdG8gcmV0dXJuLCByZXNwZWN0aXZlbHkgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBUaGUgZW50aXJlIGNhY2hlIG9iamVjdFxuXHRcdC8vICAgMi4gVGhlIGRhdGEgc3RvcmVkIGF0IHRoZSBrZXlcblx0XHQvL1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0KCAoIGtleSAmJiB0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiICkgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApICkge1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXQoIG93bmVyLCBrZXkgKTtcblx0XHR9XG5cblx0XHQvLyBXaGVuIHRoZSBrZXkgaXMgbm90IGEgc3RyaW5nLCBvciBib3RoIGEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vIGFyZSBzcGVjaWZpZWQsIHNldCBvciBleHRlbmQgKGV4aXN0aW5nIG9iamVjdHMpIHdpdGggZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBBbiBvYmplY3Qgb2YgcHJvcGVydGllc1xuXHRcdC8vICAgMi4gQSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly9cblx0XHR0aGlzLnNldCggb3duZXIsIGtleSwgdmFsdWUgKTtcblxuXHRcdC8vIFNpbmNlIHRoZSBcInNldFwiIHBhdGggY2FuIGhhdmUgdHdvIHBvc3NpYmxlIGVudHJ5IHBvaW50c1xuXHRcdC8vIHJldHVybiB0aGUgZXhwZWN0ZWQgZGF0YSBiYXNlZCBvbiB3aGljaCBwYXRoIHdhcyB0YWtlblsqXVxuXHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBrZXk7XG5cdH0sXG5cdHJlbW92ZTogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0dmFyIGksXG5cdFx0XHRjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblxuXHRcdGlmICggY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIGtleSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0IGFycmF5IG9yIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgb2Yga2V5c1xuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBrZXkgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBrZXkgaXMgYW4gYXJyYXkgb2Yga2V5cy4uLlxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc2V0IGNhbWVsQ2FzZSBrZXlzLCBzbyByZW1vdmUgdGhhdC5cblx0XHRcdFx0a2V5ID0ga2V5Lm1hcCggY2FtZWxDYXNlICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRrZXkgPSBjYW1lbENhc2UoIGtleSApO1xuXG5cdFx0XHRcdC8vIElmIGEga2V5IHdpdGggdGhlIHNwYWNlcyBleGlzdHMsIHVzZSBpdC5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBjcmVhdGUgYW4gYXJyYXkgYnkgbWF0Y2hpbmcgbm9uLXdoaXRlc3BhY2Vcblx0XHRcdFx0a2V5ID0ga2V5IGluIGNhY2hlID9cblx0XHRcdFx0XHRbIGtleSBdIDpcblx0XHRcdFx0XHQoIGtleS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdICk7XG5cdFx0XHR9XG5cblx0XHRcdGkgPSBrZXkubGVuZ3RoO1xuXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlbIGkgXSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiB0aGVyZSdzIG5vIG1vcmUgZGF0YVxuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHwgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICkgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDVcblx0XHRcdC8vIFdlYmtpdCAmIEJsaW5rIHBlcmZvcm1hbmNlIHN1ZmZlcnMgd2hlbiBkZWxldGluZyBwcm9wZXJ0aWVzXG5cdFx0XHQvLyBmcm9tIERPTSBub2Rlcywgc28gc2V0IHRvIHVuZGVmaW5lZCBpbnN0ZWFkXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNzg2MDcgKGJ1ZyByZXN0cmljdGVkKVxuXHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVsZXRlIG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBvd25lciApIHtcblx0XHR2YXIgY2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0cmV0dXJuIGNhY2hlICE9PSB1bmRlZmluZWQgJiYgIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApO1xuXHR9XG59O1xudmFyIGRhdGFQcml2ID0gbmV3IERhdGEoKTtcblxudmFyIGRhdGFVc2VyID0gbmV3IERhdGEoKTtcblxuXG5cbi8vXHRJbXBsZW1lbnRhdGlvbiBTdW1tYXJ5XG4vL1xuLy9cdDEuIEVuZm9yY2UgQVBJIHN1cmZhY2UgYW5kIHNlbWFudGljIGNvbXBhdGliaWxpdHkgd2l0aCAxLjkueCBicmFuY2hcbi8vXHQyLiBJbXByb3ZlIHRoZSBtb2R1bGUncyBtYWludGFpbmFiaWxpdHkgYnkgcmVkdWNpbmcgdGhlIHN0b3JhZ2Vcbi8vXHRcdHBhdGhzIHRvIGEgc2luZ2xlIG1lY2hhbmlzbS5cbi8vXHQzLiBVc2UgdGhlIHNhbWUgc2luZ2xlIG1lY2hhbmlzbSB0byBzdXBwb3J0IFwicHJpdmF0ZVwiIGFuZCBcInVzZXJcIiBkYXRhLlxuLy9cdDQuIF9OZXZlcl8gZXhwb3NlIFwicHJpdmF0ZVwiIGRhdGEgdG8gdXNlciBjb2RlIChUT0RPOiBEcm9wIF9kYXRhLCBfcmVtb3ZlRGF0YSlcbi8vXHQ1LiBBdm9pZCBleHBvc2luZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9uIHVzZXIgb2JqZWN0cyAoZWcuIGV4cGFuZG8gcHJvcGVydGllcylcbi8vXHQ2LiBQcm92aWRlIGEgY2xlYXIgcGF0aCBmb3IgaW1wbGVtZW50YXRpb24gdXBncmFkZSB0byBXZWFrTWFwIGluIDIwMTRcblxudmFyIHJicmFjZSA9IC9eKD86XFx7W1xcd1xcV10qXFx9fFxcW1tcXHdcXFddKlxcXSkkLyxcblx0cm11bHRpRGFzaCA9IC9bQS1aXS9nO1xuXG5mdW5jdGlvbiBnZXREYXRhKCBkYXRhICkge1xuXHRpZiAoIGRhdGEgPT09IFwidHJ1ZVwiICkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aWYgKCBkYXRhID09PSBcImZhbHNlXCIgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKCBkYXRhID09PSBcIm51bGxcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIE9ubHkgY29udmVydCB0byBhIG51bWJlciBpZiBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgc3RyaW5nXG5cdGlmICggZGF0YSA9PT0gK2RhdGEgKyBcIlwiICkge1xuXHRcdHJldHVybiArZGF0YTtcblx0fVxuXG5cdGlmICggcmJyYWNlLnRlc3QoIGRhdGEgKSApIHtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZSggZGF0YSApO1xuXHR9XG5cblx0cmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKSB7XG5cdHZhciBuYW1lO1xuXG5cdC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBmZXRjaCBhbnlcblx0Ly8gZGF0YSBmcm9tIHRoZSBIVE1MNSBkYXRhLSogYXR0cmlidXRlXG5cdGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0bmFtZSA9IFwiZGF0YS1cIiArIGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCBcIi0kJlwiICkudG9Mb3dlckNhc2UoKTtcblx0XHRkYXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTtcblxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRkYXRhID0gZ2V0RGF0YSggZGF0YSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNoYW5nZWQgbGF0ZXJcblx0XHRcdGRhdGFVc2VyLnNldCggZWxlbSwga2V5LCBkYXRhICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkYXRhO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5oYXNEYXRhKCBlbGVtICkgfHwgZGF0YVByaXYuaGFzRGF0YSggZWxlbSApO1xuXHR9LFxuXG5cdGRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhVXNlci5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fSxcblxuXHQvLyBUT0RPOiBOb3cgdGhhdCBhbGwgY2FsbHMgdG8gX2RhdGEgYW5kIF9yZW1vdmVEYXRhIGhhdmUgYmVlbiByZXBsYWNlZFxuXHQvLyB3aXRoIGRpcmVjdCBjYWxscyB0byBkYXRhUHJpdiBtZXRob2RzLCB0aGVzZSBjYW4gYmUgZGVwcmVjYXRlZC5cblx0X2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRfcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHR2YXIgaSwgbmFtZSwgZGF0YSxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRhdHRycyA9IGVsZW0gJiYgZWxlbS5hdHRyaWJ1dGVzO1xuXG5cdFx0Ly8gR2V0cyBhbGwgdmFsdWVzXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdGhpcy5sZW5ndGggKSB7XG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0gKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWRhdGFQcml2LmdldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiApICkge1xuXHRcdFx0XHRcdGkgPSBhdHRycy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdFx0XHRcdC8vIFRoZSBhdHRycyBlbGVtZW50cyBjYW4gYmUgbnVsbCAoIzE0ODk0KVxuXHRcdFx0XHRcdFx0aWYgKCBhdHRyc1sgaSBdICkge1xuXHRcdFx0XHRcdFx0XHRuYW1lID0gYXR0cnNbIGkgXS5uYW1lO1xuXHRcdFx0XHRcdFx0XHRpZiAoIG5hbWUuaW5kZXhPZiggXCJkYXRhLVwiICkgPT09IDAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZSA9IGNhbWVsQ2FzZSggbmFtZS5zbGljZSggNSApICk7XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUF0dHIoIGVsZW0sIG5hbWUsIGRhdGFbIG5hbWUgXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH1cblxuXHRcdC8vIFNldHMgbXVsdGlwbGUgdmFsdWVzXG5cdFx0aWYgKCB0eXBlb2Yga2V5ID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5ICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGRhdGE7XG5cblx0XHRcdC8vIFRoZSBjYWxsaW5nIGpRdWVyeSBvYmplY3QgKGVsZW1lbnQgbWF0Y2hlcykgaXMgbm90IGVtcHR5XG5cdFx0XHQvLyAoYW5kIHRoZXJlZm9yZSBoYXMgYW4gZWxlbWVudCBhcHBlYXJzIGF0IHRoaXNbIDAgXSkgYW5kIHRoZVxuXHRcdFx0Ly8gYHZhbHVlYCBwYXJhbWV0ZXIgd2FzIG5vdCB1bmRlZmluZWQuIEFuIGVtcHR5IGpRdWVyeSBvYmplY3Rcblx0XHRcdC8vIHdpbGwgcmVzdWx0IGluIGB1bmRlZmluZWRgIGZvciBlbGVtID0gdGhpc1sgMCBdIHdoaWNoIHdpbGxcblx0XHRcdC8vIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhbiBhdHRlbXB0IHRvIHJlYWQgYSBkYXRhIGNhY2hlIGlzIG1hZGUuXG5cdFx0XHRpZiAoIGVsZW0gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIGdldCBkYXRhIGZyb20gdGhlIGNhY2hlXG5cdFx0XHRcdC8vIFRoZSBrZXkgd2lsbCBhbHdheXMgYmUgY2FtZWxDYXNlZCBpbiBEYXRhXG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0sIGtleSApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gXCJkaXNjb3ZlclwiIHRoZSBkYXRhIGluXG5cdFx0XHRcdC8vIEhUTUw1IGN1c3RvbSBkYXRhLSogYXR0cnNcblx0XHRcdFx0ZGF0YSA9IGRhdGFBdHRyKCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBXZSB0cmllZCByZWFsbHkgaGFyZCwgYnV0IHRoZSBkYXRhIGRvZXNuJ3QgZXhpc3QuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IHRoZSBkYXRhLi4uXG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBzdG9yZSB0aGUgY2FtZWxDYXNlZCBrZXlcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXksIHZhbHVlICk7XG5cdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxsLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRhdGFVc2VyLnJlbW92ZSggdGhpcywga2V5ICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHF1ZXVlO1xuXG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0dHlwZSA9ICggdHlwZSB8fCBcImZ4XCIgKSArIFwicXVldWVcIjtcblx0XHRcdHF1ZXVlID0gZGF0YVByaXYuZ2V0KCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdC8vIFNwZWVkIHVwIGRlcXVldWUgYnkgZ2V0dGluZyBvdXQgcXVpY2tseSBpZiB0aGlzIGlzIGp1c3QgYSBsb29rdXBcblx0XHRcdGlmICggZGF0YSApIHtcblx0XHRcdFx0aWYgKCAhcXVldWUgfHwgQXJyYXkuaXNBcnJheSggZGF0YSApICkge1xuXHRcdFx0XHRcdHF1ZXVlID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KCBkYXRhICkgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBkYXRhICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBxdWV1ZSB8fCBbXTtcblx0XHR9XG5cdH0sXG5cblx0ZGVxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCBlbGVtLCB0eXBlICksXG5cdFx0XHRzdGFydExlbmd0aCA9IHF1ZXVlLmxlbmd0aCxcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKSxcblx0XHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCB0eXBlICksXG5cdFx0XHRuZXh0ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7XG5cdFx0XHR9O1xuXG5cdFx0Ly8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMgcmVtb3ZlIHRoZSBwcm9ncmVzcyBzZW50aW5lbFxuXHRcdGlmICggZm4gPT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0c3RhcnRMZW5ndGgtLTtcblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXG5cdFx0XHQvLyBBZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0byBwcmV2ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5nXG5cdFx0XHQvLyBhdXRvbWF0aWNhbGx5IGRlcXVldWVkXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiApIHtcblx0XHRcdFx0cXVldWUudW5zaGlmdCggXCJpbnByb2dyZXNzXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2xlYXIgdXAgdGhlIGxhc3QgcXVldWUgc3RvcCBmdW5jdGlvblxuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRmbi5jYWxsKCBlbGVtLCBuZXh0LCBob29rcyApO1xuXHRcdH1cblxuXHRcdGlmICggIXN0YXJ0TGVuZ3RoICYmIGhvb2tzICkge1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdH1cblx0fSxcblxuXHQvLyBOb3QgcHVibGljIC0gZ2VuZXJhdGUgYSBxdWV1ZUhvb2tzIG9iamVjdCwgb3IgcmV0dXJuIHRoZSBjdXJyZW50IG9uZVxuXHRfcXVldWVIb29rczogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dmFyIGtleSA9IHR5cGUgKyBcInF1ZXVlSG9va3NcIjtcblx0XHRyZXR1cm4gZGF0YVByaXYuZ2V0KCBlbGVtLCBrZXkgKSB8fCBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIGtleSwge1xuXHRcdFx0ZW1wdHk6IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLmFkZCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgWyB0eXBlICsgXCJxdWV1ZVwiLCBrZXkgXSApO1xuXHRcdFx0fSApXG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBzZXR0ZXIgPSAyO1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGRhdGEgPSB0eXBlO1xuXHRcdFx0dHlwZSA9IFwiZnhcIjtcblx0XHRcdHNldHRlci0tO1xuXHRcdH1cblxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCA8IHNldHRlciApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucXVldWUoIHRoaXNbIDAgXSwgdHlwZSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcyA6XG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIGRhdGEgKTtcblxuXHRcdFx0XHQvLyBFbnN1cmUgYSBob29rcyBmb3IgdGhpcyBxdWV1ZVxuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiAmJiBxdWV1ZVsgMCBdICE9PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdH0sXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHR9ICk7XG5cdH0sXG5cdGNsZWFyUXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0fSxcblxuXHQvLyBHZXQgYSBwcm9taXNlIHJlc29sdmVkIHdoZW4gcXVldWVzIG9mIGEgY2VydGFpbiB0eXBlXG5cdC8vIGFyZSBlbXB0aWVkIChmeCBpcyB0aGUgdHlwZSBieSBkZWZhdWx0KVxuXHRwcm9taXNlOiBmdW5jdGlvbiggdHlwZSwgb2JqICkge1xuXHRcdHZhciB0bXAsXG5cdFx0XHRjb3VudCA9IDEsXG5cdFx0XHRkZWZlciA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0ZWxlbWVudHMgPSB0aGlzLFxuXHRcdFx0aSA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0cmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICEoIC0tY291bnQgKSApIHtcblx0XHRcdFx0XHRkZWZlci5yZXNvbHZlV2l0aCggZWxlbWVudHMsIFsgZWxlbWVudHMgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG9iaiA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRtcCA9IGRhdGFQcml2LmdldCggZWxlbWVudHNbIGkgXSwgdHlwZSArIFwicXVldWVIb29rc1wiICk7XG5cdFx0XHRpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7XG5cdFx0XHRcdGNvdW50Kys7XG5cdFx0XHRcdHRtcC5lbXB0eS5hZGQoIHJlc29sdmUgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmVzb2x2ZSgpO1xuXHRcdHJldHVybiBkZWZlci5wcm9taXNlKCBvYmogKTtcblx0fVxufSApO1xudmFyIHBudW0gPSAoIC9bKy1dPyg/OlxcZCpcXC58KVxcZCsoPzpbZUVdWystXT9cXGQrfCkvICkuc291cmNlO1xuXG52YXIgcmNzc051bSA9IG5ldyBSZWdFeHAoIFwiXig/OihbKy1dKT18KShcIiArIHBudW0gKyBcIikoW2EteiVdKikkXCIsIFwiaVwiICk7XG5cblxudmFyIGNzc0V4cGFuZCA9IFsgXCJUb3BcIiwgXCJSaWdodFwiLCBcIkJvdHRvbVwiLCBcIkxlZnRcIiBdO1xuXG52YXIgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG5cblxuXHR2YXIgaXNBdHRhY2hlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7XG5cdFx0fSxcblx0XHRjb21wb3NlZCA9IHsgY29tcG9zZWQ6IHRydWUgfTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrLCBpT1MgMTAuMCAtIDEwLjIgb25seVxuXHQvLyBDaGVjayBhdHRhY2htZW50IGFjcm9zcyBzaGFkb3cgRE9NIGJvdW5kYXJpZXMgd2hlbiBwb3NzaWJsZSAoZ2gtMzUwNClcblx0Ly8gU3VwcG9ydDogaU9TIDEwLjAtMTAuMiBvbmx5XG5cdC8vIEVhcmx5IGlPUyAxMCB2ZXJzaW9ucyBzdXBwb3J0IGBhdHRhY2hTaGFkb3dgIGJ1dCBub3QgYGdldFJvb3ROb2RlYCxcblx0Ly8gbGVhZGluZyB0byBlcnJvcnMuIFdlIG5lZWQgdG8gY2hlY2sgZm9yIGBnZXRSb290Tm9kZWAuXG5cdGlmICggZG9jdW1lbnRFbGVtZW50LmdldFJvb3ROb2RlICkge1xuXHRcdGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Um9vdE5vZGUoIGNvbXBvc2VkICkgPT09IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHR9O1xuXHR9XG52YXIgaXNIaWRkZW5XaXRoaW5UcmVlID0gZnVuY3Rpb24oIGVsZW0sIGVsICkge1xuXG5cdFx0Ly8gaXNIaWRkZW5XaXRoaW5UcmVlIG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGpRdWVyeSNmaWx0ZXIgZnVuY3Rpb247XG5cdFx0Ly8gaW4gdGhhdCBjYXNlLCBlbGVtZW50IHdpbGwgYmUgc2Vjb25kIGFyZ3VtZW50XG5cdFx0ZWxlbSA9IGVsIHx8IGVsZW07XG5cblx0XHQvLyBJbmxpbmUgc3R5bGUgdHJ1bXBzIGFsbFxuXHRcdHJldHVybiBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwibm9uZVwiIHx8XG5cdFx0XHRlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiZcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlLCBjaGVjayBjb21wdXRlZCBzdHlsZVxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTQzIC0gNDVcblx0XHRcdC8vIERpc2Nvbm5lY3RlZCBlbGVtZW50cyBjYW4gaGF2ZSBjb21wdXRlZCBkaXNwbGF5OiBub25lLCBzbyBmaXJzdCBjb25maXJtIHRoYXQgZWxlbSBpc1xuXHRcdFx0Ly8gaW4gdGhlIGRvY3VtZW50LlxuXHRcdFx0aXNBdHRhY2hlZCggZWxlbSApICYmXG5cblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgPT09IFwibm9uZVwiO1xuXHR9O1xuXG5cblxuZnVuY3Rpb24gYWRqdXN0Q1NTKCBlbGVtLCBwcm9wLCB2YWx1ZVBhcnRzLCB0d2VlbiApIHtcblx0dmFyIGFkanVzdGVkLCBzY2FsZSxcblx0XHRtYXhJdGVyYXRpb25zID0gMjAsXG5cdFx0Y3VycmVudFZhbHVlID0gdHdlZW4gP1xuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5jdXIoKTtcblx0XHRcdH0gOlxuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wLCBcIlwiICk7XG5cdFx0XHR9LFxuXHRcdGluaXRpYWwgPSBjdXJyZW50VmFsdWUoKSxcblx0XHR1bml0ID0gdmFsdWVQYXJ0cyAmJiB2YWx1ZVBhcnRzWyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICksXG5cblx0XHQvLyBTdGFydGluZyB2YWx1ZSBjb21wdXRhdGlvbiBpcyByZXF1aXJlZCBmb3IgcG90ZW50aWFsIHVuaXQgbWlzbWF0Y2hlc1xuXHRcdGluaXRpYWxJblVuaXQgPSBlbGVtLm5vZGVUeXBlICYmXG5cdFx0XHQoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSB8fCB1bml0ICE9PSBcInB4XCIgJiYgK2luaXRpYWwgKSAmJlxuXHRcdFx0cmNzc051bS5leGVjKCBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wICkgKTtcblxuXHRpZiAoIGluaXRpYWxJblVuaXQgJiYgaW5pdGlhbEluVW5pdFsgMyBdICE9PSB1bml0ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdFx0Ly8gSGFsdmUgdGhlIGl0ZXJhdGlvbiB0YXJnZXQgdmFsdWUgdG8gcHJldmVudCBpbnRlcmZlcmVuY2UgZnJvbSBDU1MgdXBwZXIgYm91bmRzIChnaC0yMTQ0KVxuXHRcdGluaXRpYWwgPSBpbml0aWFsIC8gMjtcblxuXHRcdC8vIFRydXN0IHVuaXRzIHJlcG9ydGVkIGJ5IGpRdWVyeS5jc3Ncblx0XHR1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07XG5cblx0XHQvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludFxuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbCB8fCAxO1xuXG5cdFx0d2hpbGUgKCBtYXhJdGVyYXRpb25zLS0gKSB7XG5cblx0XHRcdC8vIEV2YWx1YXRlIGFuZCB1cGRhdGUgb3VyIGJlc3QgZ3Vlc3MgKGRvdWJsaW5nIGd1ZXNzZXMgdGhhdCB6ZXJvIG91dCkuXG5cdFx0XHQvLyBGaW5pc2ggaWYgdGhlIHNjYWxlIGVxdWFscyBvciBjcm9zc2VzIDEgKG1ha2luZyB0aGUgb2xkKm5ldyBwcm9kdWN0IG5vbi1wb3NpdGl2ZSkuXG5cdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cdFx0XHRpZiAoICggMSAtIHNjYWxlICkgKiAoIDEgLSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsIHx8IDAuNSApICkgPD0gMCApIHtcblx0XHRcdFx0bWF4SXRlcmF0aW9ucyA9IDA7XG5cdFx0XHR9XG5cdFx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAvIHNjYWxlO1xuXG5cdFx0fVxuXG5cdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgKiAyO1xuXHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB3ZSB1cGRhdGUgdGhlIHR3ZWVuIHByb3BlcnRpZXMgbGF0ZXIgb25cblx0XHR2YWx1ZVBhcnRzID0gdmFsdWVQYXJ0cyB8fCBbXTtcblx0fVxuXG5cdGlmICggdmFsdWVQYXJ0cyApIHtcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDtcblxuXHRcdC8vIEFwcGx5IHJlbGF0aXZlIG9mZnNldCAoKz0vLT0pIGlmIHNwZWNpZmllZFxuXHRcdGFkanVzdGVkID0gdmFsdWVQYXJ0c1sgMSBdID9cblx0XHRcdGluaXRpYWxJblVuaXQgKyAoIHZhbHVlUGFydHNbIDEgXSArIDEgKSAqIHZhbHVlUGFydHNbIDIgXSA6XG5cdFx0XHQrdmFsdWVQYXJ0c1sgMiBdO1xuXHRcdGlmICggdHdlZW4gKSB7XG5cdFx0XHR0d2Vlbi51bml0ID0gdW5pdDtcblx0XHRcdHR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDtcblx0XHRcdHR3ZWVuLmVuZCA9IGFkanVzdGVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYWRqdXN0ZWQ7XG59XG5cblxudmFyIGRlZmF1bHREaXNwbGF5TWFwID0ge307XG5cbmZ1bmN0aW9uIGdldERlZmF1bHREaXNwbGF5KCBlbGVtICkge1xuXHR2YXIgdGVtcCxcblx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQsXG5cdFx0bm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLFxuXHRcdGRpc3BsYXkgPSBkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXTtcblxuXHRpZiAoIGRpc3BsYXkgKSB7XG5cdFx0cmV0dXJuIGRpc3BsYXk7XG5cdH1cblxuXHR0ZW1wID0gZG9jLmJvZHkuYXBwZW5kQ2hpbGQoIGRvYy5jcmVhdGVFbGVtZW50KCBub2RlTmFtZSApICk7XG5cdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCB0ZW1wLCBcImRpc3BsYXlcIiApO1xuXG5cdHRlbXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGVtcCApO1xuXG5cdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0ZGlzcGxheSA9IFwiYmxvY2tcIjtcblx0fVxuXHRkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7XG5cblx0cmV0dXJuIGRpc3BsYXk7XG59XG5cbmZ1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHtcblx0dmFyIGRpc3BsYXksIGVsZW0sXG5cdFx0dmFsdWVzID0gW10sXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuXHQvLyBEZXRlcm1pbmUgbmV3IGRpc3BsYXkgdmFsdWUgZm9yIGVsZW1lbnRzIHRoYXQgbmVlZCB0byBjaGFuZ2Vcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRlbGVtID0gZWxlbWVudHNbIGluZGV4IF07XG5cdFx0aWYgKCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7XG5cdFx0aWYgKCBzaG93ICkge1xuXG5cdFx0XHQvLyBTaW5jZSB3ZSBmb3JjZSB2aXNpYmlsaXR5IHVwb24gY2FzY2FkZS1oaWRkZW4gZWxlbWVudHMsIGFuIGltbWVkaWF0ZSAoYW5kIHNsb3cpXG5cdFx0XHQvLyBjaGVjayBpcyByZXF1aXJlZCBpbiB0aGlzIGZpcnN0IGxvb3AgdW5sZXNzIHdlIGhhdmUgYSBub25lbXB0eSBkaXNwbGF5IHZhbHVlIChlaXRoZXJcblx0XHRcdC8vIGlubGluZSBvciBhYm91dC10by1iZS1yZXN0b3JlZClcblx0XHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKSB8fCBudWxsO1xuXHRcdFx0XHRpZiAoICF2YWx1ZXNbIGluZGV4IF0gKSB7XG5cdFx0XHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICkgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGdldERlZmF1bHREaXNwbGF5KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggZGlzcGxheSAhPT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IFwibm9uZVwiO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHdoYXQgd2UncmUgb3ZlcndyaXRpbmdcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImRpc3BsYXlcIiwgZGlzcGxheSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFNldCB0aGUgZGlzcGxheSBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcCB0byBhdm9pZCBjb25zdGFudCByZWZsb3dcblx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoIHZhbHVlc1sgaW5kZXggXSAhPSBudWxsICkge1xuXHRcdFx0ZWxlbWVudHNbIGluZGV4IF0uc3R5bGUuZGlzcGxheSA9IHZhbHVlc1sgaW5kZXggXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudHM7XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2hvdzogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzLCB0cnVlICk7XG5cdH0sXG5cdGhpZGU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcyApO1xuXHR9LFxuXHR0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHtcblx0XHRpZiAoIHR5cGVvZiBzdGF0ZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGUgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBpc0hpZGRlbldpdGhpblRyZWUoIHRoaXMgKSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xudmFyIHJjaGVja2FibGVUeXBlID0gKCAvXig/OmNoZWNrYm94fHJhZGlvKSQvaSApO1xuXG52YXIgcnRhZ05hbWUgPSAoIC88KFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKikvaSApO1xuXG52YXIgcnNjcmlwdFR5cGUgPSAoIC9eJHxebW9kdWxlJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRkaXYgPSBmcmFnbWVudC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICksXG5cdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5XG5cdC8vIENoZWNrIHN0YXRlIGxvc3QgaWYgdGhlIG5hbWUgaXMgc2V0ICgjMTEyMTcpXG5cdC8vIFN1cHBvcnQ6IFdpbmRvd3MgV2ViIEFwcHMgKFdXQSlcblx0Ly8gYG5hbWVgIGFuZCBgdHlwZWAgbXVzdCB1c2UgLnNldEF0dHJpYnV0ZSBmb3IgV1dBICgjMTQ5MDEpXG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwicmFkaW9cIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwiY2hlY2tlZFwiLCBcImNoZWNrZWRcIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcInRcIiApO1xuXG5cdGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIG9ubHlcblx0Ly8gT2xkZXIgV2ViS2l0IGRvZXNuJ3QgY2xvbmUgY2hlY2tlZCBzdGF0ZSBjb3JyZWN0bHkgaW4gZnJhZ21lbnRzXG5cdHN1cHBvcnQuY2hlY2tDbG9uZSA9IGRpdi5jbG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gTWFrZSBzdXJlIHRleHRhcmVhIChhbmQgY2hlY2tib3gpIGRlZmF1bHRWYWx1ZSBpcyBwcm9wZXJseSBjbG9uZWRcblx0ZGl2LmlubmVySFRNTCA9IFwiPHRleHRhcmVhPng8L3RleHRhcmVhPlwiO1xuXHRzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gISFkaXYuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHQvLyBJRSA8PTkgcmVwbGFjZXMgPG9wdGlvbj4gdGFncyB3aXRoIHRoZWlyIGNvbnRlbnRzIHdoZW4gaW5zZXJ0ZWQgb3V0c2lkZSBvZlxuXHQvLyB0aGUgc2VsZWN0IGVsZW1lbnQuXG5cdGRpdi5pbm5lckhUTUwgPSBcIjxvcHRpb24+PC9vcHRpb24+XCI7XG5cdHN1cHBvcnQub3B0aW9uID0gISFkaXYubGFzdENoaWxkO1xufSApKCk7XG5cblxuLy8gV2UgaGF2ZSB0byBjbG9zZSB0aGVzZSB0YWdzIHRvIHN1cHBvcnQgWEhUTUwgKCMxMzIwMClcbnZhciB3cmFwTWFwID0ge1xuXG5cdC8vIFhIVE1MIHBhcnNlcnMgZG8gbm90IG1hZ2ljYWxseSBpbnNlcnQgZWxlbWVudHMgaW4gdGhlXG5cdC8vIHNhbWUgd2F5IHRoYXQgdGFnIHNvdXAgcGFyc2VycyBkby4gU28gd2UgY2Fubm90IHNob3J0ZW5cblx0Ly8gdGhpcyBieSBvbWl0dGluZyA8dGJvZHk+IG9yIG90aGVyIHJlcXVpcmVkIGVsZW1lbnRzLlxuXHR0aGVhZDogWyAxLCBcIjx0YWJsZT5cIiwgXCI8L3RhYmxlPlwiIF0sXG5cdGNvbDogWyAyLCBcIjx0YWJsZT48Y29sZ3JvdXA+XCIsIFwiPC9jb2xncm91cD48L3RhYmxlPlwiIF0sXG5cdHRyOiBbIDIsIFwiPHRhYmxlPjx0Ym9keT5cIiwgXCI8L3Rib2R5PjwvdGFibGU+XCIgXSxcblx0dGQ6IFsgMywgXCI8dGFibGU+PHRib2R5Pjx0cj5cIiwgXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXG5cdF9kZWZhdWx0OiBbIDAsIFwiXCIsIFwiXCIgXVxufTtcblxud3JhcE1hcC50Ym9keSA9IHdyYXBNYXAudGZvb3QgPSB3cmFwTWFwLmNvbGdyb3VwID0gd3JhcE1hcC5jYXB0aW9uID0gd3JhcE1hcC50aGVhZDtcbndyYXBNYXAudGggPSB3cmFwTWFwLnRkO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuaWYgKCAhc3VwcG9ydC5vcHRpb24gKSB7XG5cdHdyYXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbiA9IFsgMSwgXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsIFwiPC9zZWxlY3Q+XCIgXTtcbn1cblxuXG5mdW5jdGlvbiBnZXRBbGwoIGNvbnRleHQsIHRhZyApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFVzZSB0eXBlb2YgdG8gYXZvaWQgemVyby1hcmd1bWVudCBtZXRob2QgaW52b2NhdGlvbiBvbiBob3N0IG9iamVjdHMgKCMxNTE1MSlcblx0dmFyIHJldDtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSBpZiAoIHR5cGVvZiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2Uge1xuXHRcdHJldCA9IFtdO1xuXHR9XG5cblx0aWYgKCB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgbm9kZU5hbWUoIGNvbnRleHQsIHRhZyApICkge1xuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFsgY29udGV4dCBdLCByZXQgKTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59XG5cblxuLy8gTWFyayBzY3JpcHRzIGFzIGhhdmluZyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkXG5mdW5jdGlvbiBzZXRHbG9iYWxFdmFsKCBlbGVtcywgcmVmRWxlbWVudHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRkYXRhUHJpdi5zZXQoXG5cdFx0XHRlbGVtc1sgaSBdLFxuXHRcdFx0XCJnbG9iYWxFdmFsXCIsXG5cdFx0XHQhcmVmRWxlbWVudHMgfHwgZGF0YVByaXYuZ2V0KCByZWZFbGVtZW50c1sgaSBdLCBcImdsb2JhbEV2YWxcIiApXG5cdFx0KTtcblx0fVxufVxuXG5cbnZhciByaHRtbCA9IC88fCYjP1xcdys7LztcblxuZnVuY3Rpb24gYnVpbGRGcmFnbWVudCggZWxlbXMsIGNvbnRleHQsIHNjcmlwdHMsIHNlbGVjdGlvbiwgaWdub3JlZCApIHtcblx0dmFyIGVsZW0sIHRtcCwgdGFnLCB3cmFwLCBhdHRhY2hlZCwgaixcblx0XHRmcmFnbWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdG5vZGVzID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1zWyBpIF07XG5cblx0XHRpZiAoIGVsZW0gfHwgZWxlbSA9PT0gMCApIHtcblxuXHRcdFx0Ly8gQWRkIG5vZGVzIGRpcmVjdGx5XG5cdFx0XHRpZiAoIHRvVHlwZSggZWxlbSApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTtcblxuXHRcdFx0Ly8gQ29udmVydCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlXG5cdFx0XHR9IGVsc2UgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkge1xuXHRcdFx0XHRub2Rlcy5wdXNoKCBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICkgKTtcblxuXHRcdFx0Ly8gQ29udmVydCBodG1sIGludG8gRE9NIG5vZGVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0bXAgPSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cblx0XHRcdFx0Ly8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvblxuXHRcdFx0XHR0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0d3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7XG5cdFx0XHRcdHRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBqUXVlcnkuaHRtbFByZWZpbHRlciggZWxlbSApICsgd3JhcFsgMiBdO1xuXG5cdFx0XHRcdC8vIERlc2NlbmQgdGhyb3VnaCB3cmFwcGVycyB0byB0aGUgcmlnaHQgY29udGVudFxuXHRcdFx0XHRqID0gd3JhcFsgMCBdO1xuXHRcdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0XHR0bXAgPSB0bXAubGFzdENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMgKTtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB0aGUgdG9wLWxldmVsIGNvbnRhaW5lclxuXHRcdFx0XHR0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgb3JwaGFuZWQgKCMxMjM5Milcblx0XHRcdFx0dG1wLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGZyYWdtZW50XG5cdGZyYWdtZW50LnRleHRDb250ZW50ID0gXCJcIjtcblxuXHRpID0gMDtcblx0d2hpbGUgKCAoIGVsZW0gPSBub2Rlc1sgaSsrIF0gKSApIHtcblxuXHRcdC8vIFNraXAgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpXG5cdFx0aWYgKCBzZWxlY3Rpb24gJiYgalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApID4gLTEgKSB7XG5cdFx0XHRpZiAoIGlnbm9yZWQgKSB7XG5cdFx0XHRcdGlnbm9yZWQucHVzaCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0YXR0YWNoZWQgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBBcHBlbmQgdG8gZnJhZ21lbnRcblx0XHR0bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksIFwic2NyaXB0XCIgKTtcblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRpZiAoIGF0dGFjaGVkICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggdG1wICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FwdHVyZSBleGVjdXRhYmxlc1xuXHRcdGlmICggc2NyaXB0cyApIHtcblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0bXBbIGorKyBdICkgKSB7XG5cdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0XHRzY3JpcHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmcmFnbWVudDtcbn1cblxuXG52YXIgcnR5cGVuYW1lc3BhY2UgPSAvXihbXi5dKikoPzpcXC4oLispfCkvO1xuXG5mdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTErXG4vLyBmb2N1cygpIGFuZCBibHVyKCkgYXJlIGFzeW5jaHJvbm91cywgZXhjZXB0IHdoZW4gdGhleSBhcmUgbm8tb3AuXG4vLyBTbyBleHBlY3QgZm9jdXMgdG8gYmUgc3luY2hyb25vdXMgd2hlbiB0aGUgZWxlbWVudCBpcyBhbHJlYWR5IGFjdGl2ZSxcbi8vIGFuZCBibHVyIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IGFscmVhZHkgYWN0aXZlLlxuLy8gKGZvY3VzIGFuZCBibHVyIGFyZSBhbHdheXMgc3luY2hyb25vdXMgaW4gb3RoZXIgc3VwcG9ydGVkIGJyb3dzZXJzLFxuLy8gdGhpcyBqdXN0IGRlZmluZXMgd2hlbiB3ZSBjYW4gY291bnQgb24gaXQpLlxuZnVuY3Rpb24gZXhwZWN0U3luYyggZWxlbSwgdHlwZSApIHtcblx0cmV0dXJuICggZWxlbSA9PT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSApID09PSAoIHR5cGUgPT09IFwiZm9jdXNcIiApO1xufVxuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gQWNjZXNzaW5nIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgY2FuIHRocm93IHVuZXhwZWN0ZWRseVxuLy8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzkzXG5mdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblx0fSBjYXRjaCAoIGVyciApIHsgfVxufVxuXG5mdW5jdGlvbiBvbiggZWxlbSwgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgb25lICkge1xuXHR2YXIgb3JpZ0ZuLCB0eXBlO1xuXG5cdC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xuXHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtT2JqZWN0LCBkYXRhIClcblx0XHRcdGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRvbiggZWxlbSwgdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7XG5cblx0XHQvLyAoIHR5cGVzLCBmbiApXG5cdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vICggdHlwZXMsIGRhdGEsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHR9IGVsc2UgaWYgKCAhZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIG9uZSA9PT0gMSApIHtcblx0XHRvcmlnRm4gPSBmbjtcblx0XHRmbiA9IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0Ly8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvXG5cdFx0XHRqUXVlcnkoKS5vZmYoIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9O1xuXG5cdFx0Ly8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm5cblx0XHRmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTtcblx0fVxuXHRyZXR1cm4gZWxlbS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7XG5cdH0gKTtcbn1cblxuLypcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS5cbiAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuXG4gKi9cbmpRdWVyeS5ldmVudCA9IHtcblxuXHRnbG9iYWw6IHt9LFxuXG5cdGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHtcblxuXHRcdHZhciBoYW5kbGVPYmpJbiwgZXZlbnRIYW5kbGUsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdC8vIE9ubHkgYXR0YWNoIGV2ZW50cyB0byBvYmplY3RzIHRoYXQgYWNjZXB0IGRhdGFcblx0XHRpZiAoICFhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyXG5cdFx0aWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7XG5cdFx0XHRoYW5kbGVPYmpJbiA9IGhhbmRsZXI7XG5cdFx0XHRoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjtcblx0XHRcdHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7XG5cdFx0fVxuXG5cdFx0Ly8gRW5zdXJlIHRoYXQgaW52YWxpZCBzZWxlY3RvcnMgdGhyb3cgZXhjZXB0aW9ucyBhdCBhdHRhY2ggdGltZVxuXHRcdC8vIEV2YWx1YXRlIGFnYWluc3QgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgZWxlbSBpcyBhIG5vbi1lbGVtZW50IG5vZGUgKGUuZy4sIGRvY3VtZW50KVxuXHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGRvY3VtZW50RWxlbWVudCwgc2VsZWN0b3IgKTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXJcblx0XHRpZiAoICFoYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrO1xuXHRcdH1cblxuXHRcdC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3Rcblx0XHRpZiAoICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0ZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0gT2JqZWN0LmNyZWF0ZSggbnVsbCApO1xuXHRcdH1cblx0XHRpZiAoICEoIGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlICkgKSB7XG5cdFx0XHRldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSA9IGZ1bmN0aW9uKCBlICkge1xuXG5cdFx0XHRcdC8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kXG5cdFx0XHRcdC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWRcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiBqUXVlcnkgIT09IFwidW5kZWZpbmVkXCIgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlID9cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGVsZW0sIGFyZ3VtZW50cyApIDogdW5kZWZpbmVkO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBoYW5kbGVyc1xuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZVxuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnNcblx0XHRcdGhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0b3JpZ1R5cGU6IG9yaWdUeXBlLFxuXHRcdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0XHRoYW5kbGVyOiBoYW5kbGVyLFxuXHRcdFx0XHRndWlkOiBoYW5kbGVyLmd1aWQsXG5cdFx0XHRcdHNlbGVjdG9yOiBzZWxlY3Rvcixcblx0XHRcdFx0bmVlZHNDb250ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSxcblx0XHRcdFx0bmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiIClcblx0XHRcdH0sIGhhbmRsZU9iakluICk7XG5cblx0XHRcdC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0XG5cdFx0XHRpZiAoICEoIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gKSApIHtcblx0XHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdO1xuXHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMDtcblxuXHRcdFx0XHQvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGlmIHRoZSBzcGVjaWFsIGV2ZW50cyBoYW5kbGVyIHJldHVybnMgZmFsc2Vcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC5zZXR1cCB8fFxuXHRcdFx0XHRcdHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdFx0XHRcdGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBzcGVjaWFsLmFkZCApIHtcblx0XHRcdFx0c3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cblx0XHRcdFx0aWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250XG5cdFx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywgMCwgaGFuZGxlT2JqICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gS2VlcCB0cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGltaXphdGlvblxuXHRcdFx0alF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTtcblx0XHR9XG5cblx0fSxcblxuXHQvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnRcblx0cmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcyApIHtcblxuXHRcdHZhciBqLCBvcmlnQ291bnQsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICkgJiYgZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHRpZiAoICFlbGVtRGF0YSB8fCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudFxuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSB8fCBbXTtcblx0XHRcdHRtcCA9IHRtcFsgMiBdICYmXG5cdFx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApO1xuXG5cdFx0XHQvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzXG5cdFx0XHRvcmlnQ291bnQgPSBqID0gaGFuZGxlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07XG5cblx0XHRcdFx0aWYgKCAoIG1hcHBlZFR5cGVzIHx8IG9yaWdUeXBlID09PSBoYW5kbGVPYmoub3JpZ1R5cGUgKSAmJlxuXHRcdFx0XHRcdCggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmouZ3VpZCApICYmXG5cdFx0XHRcdFx0KCAhdG1wIHx8IHRtcC50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSAmJlxuXHRcdFx0XHRcdCggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0b3IgfHxcblx0XHRcdFx0XHRcdHNlbGVjdG9yID09PSBcIioqXCIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7XG5cdFx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBqLCAxICk7XG5cblx0XHRcdFx0XHRpZiAoIGhhbmRsZU9iai5zZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBzcGVjaWFsLnJlbW92ZSApIHtcblx0XHRcdFx0XHRcdHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0XG5cdFx0XHQvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycylcblx0XHRcdGlmICggb3JpZ0NvdW50ICYmICFoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdGlmICggIXNwZWNpYWwudGVhcmRvd24gfHxcblx0XHRcdFx0XHRzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxldGUgZXZlbnRzWyB0eXBlIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIGRhdGEgYW5kIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9uZ2VyIHVzZWRcblx0XHRpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHtcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcblx0XHR9XG5cdH0sXG5cblx0ZGlzcGF0Y2g6IGZ1bmN0aW9uKCBuYXRpdmVFdmVudCApIHtcblxuXHRcdHZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaiwgaGFuZGxlclF1ZXVlLFxuXHRcdFx0YXJncyA9IG5ldyBBcnJheSggYXJndW1lbnRzLmxlbmd0aCApLFxuXG5cdFx0XHQvLyBNYWtlIGEgd3JpdGFibGUgalF1ZXJ5LkV2ZW50IGZyb20gdGhlIG5hdGl2ZSBldmVudCBvYmplY3Rcblx0XHRcdGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKSxcblxuXHRcdFx0aGFuZGxlcnMgPSAoXG5cdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKVxuXHRcdFx0KVsgZXZlbnQudHlwZSBdIHx8IFtdLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBlIF0gfHwge307XG5cblx0XHQvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudFxuXHRcdGFyZ3NbIDAgXSA9IGV2ZW50O1xuXG5cdFx0Zm9yICggaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRhcmdzWyBpIF0gPSBhcmd1bWVudHNbIGkgXTtcblx0XHR9XG5cblx0XHRldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXM7XG5cblx0XHQvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkXG5cdFx0aWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGhhbmRsZXJzXG5cdFx0aGFuZGxlclF1ZXVlID0galF1ZXJ5LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApO1xuXG5cdFx0Ly8gUnVuIGRlbGVnYXRlcyBmaXJzdDsgdGhleSBtYXkgd2FudCB0byBzdG9wIHByb3BhZ2F0aW9uIGJlbmVhdGggdXNcblx0XHRpID0gMDtcblx0XHR3aGlsZSAoICggbWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07XG5cblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGhhbmRsZU9iaiA9IG1hdGNoZWQuaGFuZGxlcnNbIGorKyBdICkgJiZcblx0XHRcdFx0IWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGV2ZW50IGlzIG5hbWVzcGFjZWQsIHRoZW4gZWFjaCBoYW5kbGVyIGlzIG9ubHkgaW52b2tlZCBpZiBpdCBpc1xuXHRcdFx0XHQvLyBzcGVjaWFsbHkgdW5pdmVyc2FsIG9yIGl0cyBuYW1lc3BhY2VzIGFyZSBhIHN1cGVyc2V0IG9mIHRoZSBldmVudCdzLlxuXHRcdFx0XHRpZiAoICFldmVudC5ybmFtZXNwYWNlIHx8IGhhbmRsZU9iai5uYW1lc3BhY2UgPT09IGZhbHNlIHx8XG5cdFx0XHRcdFx0ZXZlbnQucm5hbWVzcGFjZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7XG5cblx0XHRcdFx0XHRldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7XG5cdFx0XHRcdFx0ZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhO1xuXG5cdFx0XHRcdFx0cmV0ID0gKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSApLmhhbmRsZSB8fFxuXHRcdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIgKS5hcHBseSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7XG5cblx0XHRcdFx0XHRpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGV2ZW50LnJlc3VsdCA9IHJldCApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbCB0aGUgcG9zdERpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZVxuXHRcdGlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7XG5cdFx0XHRzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0aGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7XG5cdFx0dmFyIGksIGhhbmRsZU9iaiwgc2VsLCBtYXRjaGVkSGFuZGxlcnMsIG1hdGNoZWRTZWxlY3RvcnMsXG5cdFx0XHRoYW5kbGVyUXVldWUgPSBbXSxcblx0XHRcdGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LFxuXHRcdFx0Y3VyID0gZXZlbnQudGFyZ2V0O1xuXG5cdFx0Ly8gRmluZCBkZWxlZ2F0ZSBoYW5kbGVyc1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTlcblx0XHRcdC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICh0cmFjLTEzMTgwKVxuXHRcdFx0Y3VyLm5vZGVUeXBlICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MlxuXHRcdFx0Ly8gU3VwcHJlc3Mgc3BlYy12aW9sYXRpbmcgY2xpY2tzIGluZGljYXRpbmcgYSBub24tcHJpbWFyeSBwb2ludGVyIGJ1dHRvbiAodHJhYy0zODYxKVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnQtdHlwZS1jbGlja1xuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0Ly8gLi4uYnV0IG5vdCBhcnJvdyBrZXkgXCJjbGlja3NcIiBvZiByYWRpbyBpbnB1dHMsIHdoaWNoIGNhbiBoYXZlIGBidXR0b25gIC0xIChnaC0yMzQzKVxuXHRcdFx0ISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGV2ZW50LmJ1dHRvbiA+PSAxICkgKSB7XG5cblx0XHRcdGZvciAoIDsgY3VyICE9PSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkge1xuXG5cdFx0XHRcdC8vIERvbid0IGNoZWNrIG5vbi1lbGVtZW50cyAoIzEzMjA4KVxuXHRcdFx0XHQvLyBEb24ndCBwcm9jZXNzIGNsaWNrcyBvbiBkaXNhYmxlZCBlbGVtZW50cyAoIzY5MTEsICM4MTY1LCAjMTEzODIsICMxMTc2NClcblx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGN1ci5kaXNhYmxlZCA9PT0gdHJ1ZSApICkge1xuXHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycyA9IFtdO1xuXHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnMgPSB7fTtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkrKyApIHtcblx0XHRcdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IGNvbmZsaWN0IHdpdGggT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzICgjMTMyMDMpXG5cdFx0XHRcdFx0XHRzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3IgKyBcIiBcIjtcblxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgP1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID4gLTEgOlxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggbWF0Y2hlZEhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZWRIYW5kbGVycyB9ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVyc1xuXHRcdGN1ciA9IHRoaXM7XG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogaGFuZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGhhbmRsZXJRdWV1ZTtcblx0fSxcblxuXHRhZGRQcm9wOiBmdW5jdGlvbiggbmFtZSwgaG9vayApIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGpRdWVyeS5FdmVudC5wcm90b3R5cGUsIG5hbWUsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cblx0XHRcdGdldDogaXNGdW5jdGlvbiggaG9vayApID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gaG9vayggdGhpcy5vcmlnaW5hbEV2ZW50ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IDpcblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50WyBuYW1lIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlzLCBuYW1lLCB7XG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Zml4OiBmdW5jdGlvbiggb3JpZ2luYWxFdmVudCApIHtcblx0XHRyZXR1cm4gb3JpZ2luYWxFdmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRvcmlnaW5hbEV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTtcblx0fSxcblxuXHRzcGVjaWFsOiB7XG5cdFx0bG9hZDoge1xuXG5cdFx0XHQvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkXG5cdFx0XHRub0J1YmJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0Y2xpY2s6IHtcblxuXHRcdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgdG8gZW5zdXJlIGNvcnJlY3Qgc3RhdGUgZm9yIGNoZWNrYWJsZSBpbnB1dHNcblx0XHRcdHNldHVwOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdC8vIGRhdGFQcml2LnNldCggZWwsIFwiY2xpY2tcIiwgLi4uIClcblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiwgcmV0dXJuVHJ1ZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJpbmcgYSBjbGlja1xuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0sXG5cblx0XHRcdC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBzdXBwcmVzcyBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3Ncblx0XHRcdC8vIEFsc28gcHJldmVudCBpdCBpZiB3ZSdyZSBjdXJyZW50bHkgaW5zaWRlIGEgbGV2ZXJhZ2VkIG5hdGl2ZS1ldmVudCBzdGFja1xuXHRcdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRcdFx0cmV0dXJuIHJjaGVja2FibGVUeXBlLnRlc3QoIHRhcmdldC50eXBlICkgJiZcblx0XHRcdFx0XHR0YXJnZXQuY2xpY2sgJiYgbm9kZU5hbWUoIHRhcmdldCwgXCJpbnB1dFwiICkgJiZcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRhcmdldCwgXCJjbGlja1wiICkgfHxcblx0XHRcdFx0XHRub2RlTmFtZSggdGFyZ2V0LCBcImFcIiApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRiZWZvcmV1bmxvYWQ6IHtcblx0XHRcdHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggMjArXG5cdFx0XHRcdC8vIEZpcmVmb3ggZG9lc24ndCBhbGVydCBpZiB0aGUgcmV0dXJuVmFsdWUgZmllbGQgaXMgbm90IHNldC5cblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIEVuc3VyZSB0aGUgcHJlc2VuY2Ugb2YgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBoYW5kbGVzIG1hbnVhbGx5LXRyaWdnZXJlZFxuLy8gc3ludGhldGljIGV2ZW50cyBieSBpbnRlcnJ1cHRpbmcgcHJvZ3Jlc3MgdW50aWwgcmVpbnZva2VkIGluIHJlc3BvbnNlIHRvXG4vLyAqbmF0aXZlKiBldmVudHMgdGhhdCBpdCBmaXJlcyBkaXJlY3RseSwgZW5zdXJpbmcgdGhhdCBzdGF0ZSBjaGFuZ2VzIGhhdmVcbi8vIGFscmVhZHkgb2NjdXJyZWQgYmVmb3JlIG90aGVyIGxpc3RlbmVycyBhcmUgaW52b2tlZC5cbmZ1bmN0aW9uIGxldmVyYWdlTmF0aXZlKCBlbCwgdHlwZSwgZXhwZWN0U3luYyApIHtcblxuXHQvLyBNaXNzaW5nIGV4cGVjdFN5bmMgaW5kaWNhdGVzIGEgdHJpZ2dlciBjYWxsLCB3aGljaCBtdXN0IGZvcmNlIHNldHVwIHRocm91Z2ggalF1ZXJ5LmV2ZW50LmFkZFxuXHRpZiAoICFleHBlY3RTeW5jICkge1xuXHRcdGlmICggZGF0YVByaXYuZ2V0KCBlbCwgdHlwZSApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwgcmV0dXJuVHJ1ZSApO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZWdpc3RlciB0aGUgY29udHJvbGxlciBhcyBhIHNwZWNpYWwgdW5pdmVyc2FsIGhhbmRsZXIgZm9yIGFsbCBldmVudCBuYW1lc3BhY2VzXG5cdGRhdGFQcml2LnNldCggZWwsIHR5cGUsIGZhbHNlICk7XG5cdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCB7XG5cdFx0bmFtZXNwYWNlOiBmYWxzZSxcblx0XHRoYW5kbGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgbm90QXN5bmMsIHJlc3VsdCxcblx0XHRcdFx0c2F2ZWQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0aWYgKCAoIGV2ZW50LmlzVHJpZ2dlciAmIDEgKSAmJiB0aGlzWyB0eXBlIF0gKSB7XG5cblx0XHRcdFx0Ly8gSW50ZXJydXB0IHByb2Nlc3Npbmcgb2YgdGhlIG91dGVyIHN5bnRoZXRpYyAudHJpZ2dlcigpZWQgZXZlbnRcblx0XHRcdFx0Ly8gU2F2ZWQgZGF0YSBzaG91bGQgYmUgZmFsc2UgaW4gc3VjaCBjYXNlcywgYnV0IG1pZ2h0IGJlIGEgbGVmdG92ZXIgY2FwdHVyZSBvYmplY3Rcblx0XHRcdFx0Ly8gZnJvbSBhbiBhc3luYyBuYXRpdmUgaGFuZGxlciAoZ2gtNDM1MClcblx0XHRcdFx0aWYgKCAhc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgYXJndW1lbnRzIGZvciB1c2Ugd2hlbiBoYW5kbGluZyB0aGUgaW5uZXIgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdFx0Ly8gVGhlcmUgd2lsbCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IChhbiBldmVudCBvYmplY3QpLCBzbyB0aGlzIGFycmF5XG5cdFx0XHRcdFx0Ly8gd2lsbCBub3QgYmUgY29uZnVzZWQgd2l0aCBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0LlxuXHRcdFx0XHRcdHNhdmVkID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBzYXZlZCApO1xuXG5cdFx0XHRcdFx0Ly8gVHJpZ2dlciB0aGUgbmF0aXZlIGV2ZW50IGFuZCBjYXB0dXJlIGl0cyByZXN1bHRcblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHQvLyBmb2N1cygpIGFuZCBibHVyKCkgYXJlIGFzeW5jaHJvbm91c1xuXHRcdFx0XHRcdG5vdEFzeW5jID0gZXhwZWN0U3luYyggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdHRoaXNbIHR5cGUgXSgpO1xuXHRcdFx0XHRcdHJlc3VsdCA9IGRhdGFQcml2LmdldCggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCB8fCBub3RBc3luYyApIHtcblx0XHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgZmFsc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSBvdXRlciBzeW50aGV0aWMgZXZlbnRcblx0XHRcdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDg2K1xuXHRcdFx0XHRcdFx0Ly8gSW4gQ2hyb21lLCBpZiBhbiBlbGVtZW50IGhhdmluZyBhIGZvY3Vzb3V0IGhhbmRsZXIgaXMgYmx1cnJlZCBieVxuXHRcdFx0XHRcdFx0Ly8gY2xpY2tpbmcgb3V0c2lkZSBvZiBpdCwgaXQgaW52b2tlcyB0aGUgaGFuZGxlciBzeW5jaHJvbm91c2x5LiBJZlxuXHRcdFx0XHRcdFx0Ly8gdGhhdCBoYW5kbGVyIGNhbGxzIGAucmVtb3ZlKClgIG9uIHRoZSBlbGVtZW50LCB0aGUgZGF0YSBpcyBjbGVhcmVkLFxuXHRcdFx0XHRcdFx0Ly8gbGVhdmluZyBgcmVzdWx0YCB1bmRlZmluZWQuIFdlIG5lZWQgdG8gZ3VhcmQgYWdhaW5zdCB0aGlzLlxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdCAmJiByZXN1bHQudmFsdWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoaXMgaXMgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IGZvciBhbiBldmVudCB3aXRoIGEgYnViYmxpbmcgc3Vycm9nYXRlXG5cdFx0XHRcdC8vIChmb2N1cyBvciBibHVyKSwgYXNzdW1lIHRoYXQgdGhlIHN1cnJvZ2F0ZSBhbHJlYWR5IHByb3BhZ2F0ZWQgZnJvbSB0cmlnZ2VyaW5nIHRoZVxuXHRcdFx0XHQvLyBuYXRpdmUgZXZlbnQgYW5kIHByZXZlbnQgdGhhdCBmcm9tIGhhcHBlbmluZyBhZ2FpbiBoZXJlLlxuXHRcdFx0XHQvLyBUaGlzIHRlY2huaWNhbGx5IGdldHMgdGhlIG9yZGVyaW5nIHdyb25nIHcuci50LiB0byBgLnRyaWdnZXIoKWAgKGluIHdoaWNoIHRoZVxuXHRcdFx0XHQvLyBidWJibGluZyBzdXJyb2dhdGUgcHJvcGFnYXRlcyAqYWZ0ZXIqIHRoZSBub24tYnViYmxpbmcgYmFzZSksIGJ1dCB0aGF0IHNlZW1zXG5cdFx0XHRcdC8vIGxlc3MgYmFkIHRoYW4gZHVwbGljYXRpb24uXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fSApLmRlbGVnYXRlVHlwZSApIHtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgbmF0aXZlIGV2ZW50IHRyaWdnZXJlZCBhYm92ZSwgZXZlcnl0aGluZyBpcyBub3cgaW4gb3JkZXJcblx0XHRcdC8vIEZpcmUgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IHdpdGggdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdC8vIC4uLmFuZCBjYXB0dXJlIHRoZSByZXN1bHRcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCB7XG5cdFx0XHRcdFx0dmFsdWU6IGpRdWVyeS5ldmVudC50cmlnZ2VyKFxuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHRcdC8vIEV4dGVuZCB3aXRoIHRoZSBwcm90b3R5cGUgdG8gcmVzZXQgdGhlIGFib3ZlIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0XHRqUXVlcnkuZXh0ZW5kKCBzYXZlZFsgMCBdLCBqUXVlcnkuRXZlbnQucHJvdG90eXBlICksXG5cdFx0XHRcdFx0XHRzYXZlZC5zbGljZSggMSApLFxuXHRcdFx0XHRcdFx0dGhpc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIEFib3J0IGhhbmRsaW5nIG9mIHRoZSBuYXRpdmUgZXZlbnRcblx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmpRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7XG5cblx0Ly8gVGhpcyBcImlmXCIgaXMgbmVlZGVkIGZvciBwbGFpbiBvYmplY3RzXG5cdGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkge1xuXHRcdGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7XG5cdH1cbn07XG5cbmpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkge1xuXG5cdC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZFxuXHRpZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQgKSApIHtcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gRXZlbnQgb2JqZWN0XG5cdGlmICggc3JjICYmIHNyYy50eXBlICkge1xuXHRcdHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYztcblx0XHR0aGlzLnR5cGUgPSBzcmMudHlwZTtcblxuXHRcdC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkXG5cdFx0Ly8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fFxuXHRcdFx0XHRzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5XG5cdFx0XHRcdHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0cmV0dXJuVHJ1ZSA6XG5cdFx0XHRyZXR1cm5GYWxzZTtcblxuXHRcdC8vIENyZWF0ZSB0YXJnZXQgcHJvcGVydGllc1xuXHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA8PTYgLSA3IG9ubHlcblx0XHQvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgIzEzMTQzKVxuXHRcdHRoaXMudGFyZ2V0ID0gKCBzcmMudGFyZ2V0ICYmIHNyYy50YXJnZXQubm9kZVR5cGUgPT09IDMgKSA/XG5cdFx0XHRzcmMudGFyZ2V0LnBhcmVudE5vZGUgOlxuXHRcdFx0c3JjLnRhcmdldDtcblxuXHRcdHRoaXMuY3VycmVudFRhcmdldCA9IHNyYy5jdXJyZW50VGFyZ2V0O1xuXHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IHNyYy5yZWxhdGVkVGFyZ2V0O1xuXG5cdC8vIEV2ZW50IHR5cGVcblx0fSBlbHNlIHtcblx0XHR0aGlzLnR5cGUgPSBzcmM7XG5cdH1cblxuXHQvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxuXHRpZiAoIHByb3BzICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZVxuXHR0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG5cblx0Ly8gTWFyayBpdCBhcyBmaXhlZFxuXHR0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTtcbn07XG5cbi8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZ1xuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbFxualF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IGpRdWVyeS5FdmVudCxcblx0aXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcblx0aXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzU2ltdWxhdGVkOiBmYWxzZSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fSxcblx0c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cblx0XHR0aGlzLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9XG59O1xuXG4vLyBJbmNsdWRlcyBhbGwgY29tbW9uIGV2ZW50IHByb3BzIGluY2x1ZGluZyBLZXlFdmVudCBhbmQgTW91c2VFdmVudCBzcGVjaWZpYyBwcm9wc1xualF1ZXJ5LmVhY2goIHtcblx0YWx0S2V5OiB0cnVlLFxuXHRidWJibGVzOiB0cnVlLFxuXHRjYW5jZWxhYmxlOiB0cnVlLFxuXHRjaGFuZ2VkVG91Y2hlczogdHJ1ZSxcblx0Y3RybEtleTogdHJ1ZSxcblx0ZGV0YWlsOiB0cnVlLFxuXHRldmVudFBoYXNlOiB0cnVlLFxuXHRtZXRhS2V5OiB0cnVlLFxuXHRwYWdlWDogdHJ1ZSxcblx0cGFnZVk6IHRydWUsXG5cdHNoaWZ0S2V5OiB0cnVlLFxuXHR2aWV3OiB0cnVlLFxuXHRcImNoYXJcIjogdHJ1ZSxcblx0Y29kZTogdHJ1ZSxcblx0Y2hhckNvZGU6IHRydWUsXG5cdGtleTogdHJ1ZSxcblx0a2V5Q29kZTogdHJ1ZSxcblx0YnV0dG9uOiB0cnVlLFxuXHRidXR0b25zOiB0cnVlLFxuXHRjbGllbnRYOiB0cnVlLFxuXHRjbGllbnRZOiB0cnVlLFxuXHRvZmZzZXRYOiB0cnVlLFxuXHRvZmZzZXRZOiB0cnVlLFxuXHRwb2ludGVySWQ6IHRydWUsXG5cdHBvaW50ZXJUeXBlOiB0cnVlLFxuXHRzY3JlZW5YOiB0cnVlLFxuXHRzY3JlZW5ZOiB0cnVlLFxuXHR0YXJnZXRUb3VjaGVzOiB0cnVlLFxuXHR0b0VsZW1lbnQ6IHRydWUsXG5cdHRvdWNoZXM6IHRydWUsXG5cdHdoaWNoOiB0cnVlXG59LCBqUXVlcnkuZXZlbnQuYWRkUHJvcCApO1xuXG5qUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggdHlwZSwgZGVsZWdhdGVUeXBlICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdID0ge1xuXG5cdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0XG5cdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImZvY3VzXCIsIC4uLiApXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiYmx1clwiLCAuLi4gKVxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUsIGV4cGVjdFN5bmMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlclxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdC8vIFN1cHByZXNzIG5hdGl2ZSBmb2N1cyBvciBibHVyIGFzIGl0J3MgYWxyZWFkeSBiZWluZyBmaXJlZFxuXHRcdC8vIGluIGxldmVyYWdlTmF0aXZlLlxuXHRcdF9kZWZhdWx0OiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRkZWxlZ2F0ZVR5cGU6IGRlbGVnYXRlVHlwZVxuXHR9O1xufSApO1xuXG4vLyBDcmVhdGUgbW91c2VlbnRlci9sZWF2ZSBldmVudHMgdXNpbmcgbW91c2VvdmVyL291dCBhbmQgZXZlbnQtdGltZSBjaGVja3Ncbi8vIHNvIHRoYXQgZXZlbnQgZGVsZWdhdGlvbiB3b3JrcyBpbiBqUXVlcnkuXG4vLyBEbyB0aGUgc2FtZSBmb3IgcG9pbnRlcmVudGVyL3BvaW50ZXJsZWF2ZSBhbmQgcG9pbnRlcm92ZXIvcG9pbnRlcm91dFxuLy9cbi8vIFN1cHBvcnQ6IFNhZmFyaSA3IG9ubHlcbi8vIFNhZmFyaSBzZW5kcyBtb3VzZWVudGVyIHRvbyBvZnRlbjsgc2VlOlxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDcwMjU4XG4vLyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBidWcgKGl0IGV4aXN0ZWQgaW4gb2xkZXIgQ2hyb21lIHZlcnNpb25zIGFzIHdlbGwpLlxualF1ZXJ5LmVhY2goIHtcblx0bW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIixcblx0bW91c2VsZWF2ZTogXCJtb3VzZW91dFwiLFxuXHRwb2ludGVyZW50ZXI6IFwicG9pbnRlcm92ZXJcIixcblx0cG9pbnRlcmxlYXZlOiBcInBvaW50ZXJvdXRcIlxufSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHtcblx0XHRkZWxlZ2F0ZVR5cGU6IGZpeCxcblx0XHRiaW5kVHlwZTogZml4LFxuXG5cdFx0aGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgcmV0LFxuXHRcdFx0XHR0YXJnZXQgPSB0aGlzLFxuXHRcdFx0XHRyZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCxcblx0XHRcdFx0aGFuZGxlT2JqID0gZXZlbnQuaGFuZGxlT2JqO1xuXG5cdFx0XHQvLyBGb3IgbW91c2VlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lkZSB0aGUgdGFyZ2V0LlxuXHRcdFx0Ly8gTkI6IE5vIHJlbGF0ZWRUYXJnZXQgaWYgdGhlIG1vdXNlIGxlZnQvZW50ZXJlZCB0aGUgYnJvd3NlciB3aW5kb3dcblx0XHRcdGlmICggIXJlbGF0ZWQgfHwgKCByZWxhdGVkICE9PSB0YXJnZXQgJiYgIWpRdWVyeS5jb250YWlucyggdGFyZ2V0LCByZWxhdGVkICkgKSApIHtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGhhbmRsZU9iai5vcmlnVHlwZTtcblx0XHRcdFx0cmV0ID0gaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRldmVudC50eXBlID0gZml4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdH07XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdG9uZTogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAxICk7XG5cdH0sXG5cdG9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZm4gKSB7XG5cdFx0dmFyIGhhbmRsZU9iaiwgdHlwZTtcblx0XHRpZiAoIHR5cGVzICYmIHR5cGVzLnByZXZlbnREZWZhdWx0ICYmIHR5cGVzLmhhbmRsZU9iaiApIHtcblxuXHRcdFx0Ly8gKCBldmVudCApICBkaXNwYXRjaGVkIGpRdWVyeS5FdmVudFxuXHRcdFx0aGFuZGxlT2JqID0gdHlwZXMuaGFuZGxlT2JqO1xuXHRcdFx0alF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZihcblx0XHRcdFx0aGFuZGxlT2JqLm5hbWVzcGFjZSA/XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlICsgXCIuXCIgKyBoYW5kbGVPYmoubmFtZXNwYWNlIDpcblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUsXG5cdFx0XHRcdGhhbmRsZU9iai5zZWxlY3Rvcixcblx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXJcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtb2JqZWN0IFssIHNlbGVjdG9yXSApXG5cdFx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0XHR0aGlzLm9mZiggdHlwZSwgc2VsZWN0b3IsIHR5cGVzWyB0eXBlIF0gKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHNlbGVjdG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcyBbLCBmbl0gKVxuXHRcdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRcdGZuID0gcmV0dXJuRmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZuLCBzZWxlY3RvciApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbnZhclxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSwgRWRnZSAxMiAtIDEzIG9ubHlcblx0Ly8gSW4gSUUvRWRnZSB1c2luZyByZWdleCBncm91cHMgaGVyZSBjYXVzZXMgc2V2ZXJlIHNsb3dkb3ducy5cblx0Ly8gU2VlIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvMTczNjUxMi9cblx0cm5vSW5uZXJodG1sID0gLzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksXG5cblx0Ly8gY2hlY2tlZD1cImNoZWNrZWRcIiBvciBjaGVja2VkXG5cdHJjaGVja2VkID0gL2NoZWNrZWRcXHMqKD86W149XXw9XFxzKi5jaGVja2VkLikvaSxcblx0cmNsZWFuU2NyaXB0ID0gL15cXHMqPCEoPzpcXFtDREFUQVxcW3wtLSl8KD86XFxdXFxdfC0tKT5cXHMqJC9nO1xuXG4vLyBQcmVmZXIgYSB0Ym9keSBvdmVyIGl0cyBwYXJlbnQgdGFibGUgZm9yIGNvbnRhaW5pbmcgbmV3IHJvd3NcbmZ1bmN0aW9uIG1hbmlwdWxhdGlvblRhcmdldCggZWxlbSwgY29udGVudCApIHtcblx0aWYgKCBub2RlTmFtZSggZWxlbSwgXCJ0YWJsZVwiICkgJiZcblx0XHRub2RlTmFtZSggY29udGVudC5ub2RlVHlwZSAhPT0gMTEgPyBjb250ZW50IDogY29udGVudC5maXJzdENoaWxkLCBcInRyXCIgKSApIHtcblxuXHRcdHJldHVybiBqUXVlcnkoIGVsZW0gKS5jaGlsZHJlbiggXCJ0Ym9keVwiIClbIDAgXSB8fCBlbGVtO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbi8vIFJlcGxhY2UvcmVzdG9yZSB0aGUgdHlwZSBhdHRyaWJ1dGUgb2Ygc2NyaXB0IGVsZW1lbnRzIGZvciBzYWZlIERPTSBtYW5pcHVsYXRpb25cbmZ1bmN0aW9uIGRpc2FibGVTY3JpcHQoIGVsZW0gKSB7XG5cdGVsZW0udHlwZSA9ICggZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgIT09IG51bGwgKSArIFwiL1wiICsgZWxlbS50eXBlO1xuXHRyZXR1cm4gZWxlbTtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVTY3JpcHQoIGVsZW0gKSB7XG5cdGlmICggKCBlbGVtLnR5cGUgfHwgXCJcIiApLnNsaWNlKCAwLCA1ICkgPT09IFwidHJ1ZS9cIiApIHtcblx0XHRlbGVtLnR5cGUgPSBlbGVtLnR5cGUuc2xpY2UoIDUgKTtcblx0fSBlbHNlIHtcblx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggXCJ0eXBlXCIgKTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5mdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0ICkge1xuXHR2YXIgaSwgbCwgdHlwZSwgcGRhdGFPbGQsIHVkYXRhT2xkLCB1ZGF0YUN1ciwgZXZlbnRzO1xuXG5cdGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyAxLiBDb3B5IHByaXZhdGUgZGF0YTogZXZlbnRzLCBoYW5kbGVycywgZXRjLlxuXHRpZiAoIGRhdGFQcml2Lmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHBkYXRhT2xkID0gZGF0YVByaXYuZ2V0KCBzcmMgKTtcblx0XHRldmVudHMgPSBwZGF0YU9sZC5ldmVudHM7XG5cblx0XHRpZiAoIGV2ZW50cyApIHtcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZGVzdCwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcblxuXHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUsIGV2ZW50c1sgdHlwZSBdWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIDIuIENvcHkgdXNlciBkYXRhXG5cdGlmICggZGF0YVVzZXIuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0dWRhdGFPbGQgPSBkYXRhVXNlci5hY2Nlc3MoIHNyYyApO1xuXHRcdHVkYXRhQ3VyID0galF1ZXJ5LmV4dGVuZCgge30sIHVkYXRhT2xkICk7XG5cblx0XHRkYXRhVXNlci5zZXQoIGRlc3QsIHVkYXRhQ3VyICk7XG5cdH1cbn1cblxuLy8gRml4IElFIGJ1Z3MsIHNlZSBzdXBwb3J0IHRlc3RzXG5mdW5jdGlvbiBmaXhJbnB1dCggc3JjLCBkZXN0ICkge1xuXHR2YXIgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0Ly8gRmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveCBvciByYWRpbyBidXR0b24uXG5cdGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiByY2hlY2thYmxlVHlwZS50ZXN0KCBzcmMudHlwZSApICkge1xuXHRcdGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkO1xuXG5cdC8vIEZhaWxzIHRvIHJldHVybiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHN0YXRlIHdoZW4gY2xvbmluZyBvcHRpb25zXG5cdH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgfHwgbm9kZU5hbWUgPT09IFwidGV4dGFyZWFcIiApIHtcblx0XHRkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7XG5cdH1cbn1cblxuZnVuY3Rpb24gZG9tTWFuaXAoIGNvbGxlY3Rpb24sIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICkge1xuXG5cdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0YXJncyA9IGZsYXQoIGFyZ3MgKTtcblxuXHR2YXIgZnJhZ21lbnQsIGZpcnN0LCBzY3JpcHRzLCBoYXNTY3JpcHRzLCBub2RlLCBkb2MsXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuXHRcdGlOb0Nsb25lID0gbCAtIDEsXG5cdFx0dmFsdWUgPSBhcmdzWyAwIF0sXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHQvLyBXZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXRcblx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gfHxcblx0XHRcdCggbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzdXBwb3J0LmNoZWNrQ2xvbmUgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApICkge1xuXHRcdHJldHVybiBjb2xsZWN0aW9uLmVhY2goIGZ1bmN0aW9uKCBpbmRleCApIHtcblx0XHRcdHZhciBzZWxmID0gY29sbGVjdGlvbi5lcSggaW5kZXggKTtcblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHRhcmdzWyAwIF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpbmRleCwgc2VsZi5odG1sKCkgKTtcblx0XHRcdH1cblx0XHRcdGRvbU1hbmlwKCBzZWxmLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApO1xuXHRcdH0gKTtcblx0fVxuXG5cdGlmICggbCApIHtcblx0XHRmcmFnbWVudCA9IGJ1aWxkRnJhZ21lbnQoIGFyZ3MsIGNvbGxlY3Rpb25bIDAgXS5vd25lckRvY3VtZW50LCBmYWxzZSwgY29sbGVjdGlvbiwgaWdub3JlZCApO1xuXHRcdGZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdGlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7XG5cdFx0XHRmcmFnbWVudCA9IGZpcnN0O1xuXHRcdH1cblxuXHRcdC8vIFJlcXVpcmUgZWl0aGVyIG5ldyBjb250ZW50IG9yIGFuIGludGVyZXN0IGluIGlnbm9yZWQgZWxlbWVudHMgdG8gaW52b2tlIHRoZSBjYWxsYmFja1xuXHRcdGlmICggZmlyc3QgfHwgaWdub3JlZCApIHtcblx0XHRcdHNjcmlwdHMgPSBqUXVlcnkubWFwKCBnZXRBbGwoIGZyYWdtZW50LCBcInNjcmlwdFwiICksIGRpc2FibGVTY3JpcHQgKTtcblx0XHRcdGhhc1NjcmlwdHMgPSBzY3JpcHRzLmxlbmd0aDtcblxuXHRcdFx0Ly8gVXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhlIGxhc3QgaXRlbVxuXHRcdFx0Ly8gaW5zdGVhZCBvZiB0aGUgZmlyc3QgYmVjYXVzZSBpdCBjYW4gZW5kIHVwXG5cdFx0XHQvLyBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5IGluIGNlcnRhaW4gc2l0dWF0aW9ucyAoIzgwNzApLlxuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRub2RlID0gZnJhZ21lbnQ7XG5cblx0XHRcdFx0aWYgKCBpICE9PSBpTm9DbG9uZSApIHtcblx0XHRcdFx0XHRub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0cnVlLCB0cnVlICk7XG5cblx0XHRcdFx0XHQvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxsYmFjay5jYWxsKCBjb2xsZWN0aW9uWyBpIF0sIG5vZGUsIGkgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXHRcdFx0XHRkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50O1xuXG5cdFx0XHRcdC8vIFJlZW5hYmxlIHNjcmlwdHNcblx0XHRcdFx0alF1ZXJ5Lm1hcCggc2NyaXB0cywgcmVzdG9yZVNjcmlwdCApO1xuXG5cdFx0XHRcdC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb25cblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHNjcmlwdHNbIGkgXTtcblx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCBcIlwiICkgJiZcblx0XHRcdFx0XHRcdCFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsIFwiZ2xvYmFsRXZhbFwiICkgJiZcblx0XHRcdFx0XHRcdGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7XG5cblx0XHRcdFx0XHRcdGlmICggbm9kZS5zcmMgJiYgKCBub2RlLnR5cGUgfHwgXCJcIiApLnRvTG93ZXJDYXNlKCkgICE9PSBcIm1vZHVsZVwiICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5Ll9ldmFsVXJsICYmICFub2RlLm5vTW9kdWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5fZXZhbFVybCggbm9kZS5zcmMsIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5vbmNlOiBub2RlLm5vbmNlIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCBcIm5vbmNlXCIgKVxuXHRcdFx0XHRcdFx0XHRcdH0sIGRvYyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRET01FdmFsKCBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgXCJcIiApLCBub2RlLCBkb2MgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY29sbGVjdGlvbjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKCBlbGVtLCBzZWxlY3Rvciwga2VlcERhdGEgKSB7XG5cdHZhciBub2RlLFxuXHRcdG5vZGVzID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDogZWxlbSxcblx0XHRpID0gMDtcblxuXHRmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0aWYgKCAha2VlcERhdGEgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggbm9kZSApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBub2RlLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRpZiAoIGtlZXBEYXRhICYmIGlzQXR0YWNoZWQoIG5vZGUgKSApIHtcblx0XHRcdFx0c2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdH1cblx0XHRcdG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggbm9kZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGh0bWxQcmVmaWx0ZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHJldHVybiBodG1sO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0dmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsXG5cdFx0XHRjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksXG5cdFx0XHRpblBhZ2UgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBGaXggSUUgY2xvbmluZyBpc3N1ZXNcblx0XHRpZiAoICFzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmXG5cdFx0XHRcdCFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gV2UgZXNjaGV3IFNpenpsZSBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOiBodHRwczovL2pzcGVyZi5jb20vZ2V0YWxsLXZzLXNpenpsZS8yXG5cdFx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7XG5cdFx0XHRzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApO1xuXG5cdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZVxuXHRcdGlmICggZGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRcdHNyY0VsZW1lbnRzID0gc3JjRWxlbWVudHMgfHwgZ2V0QWxsKCBlbGVtICk7XG5cdFx0XHRcdGRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7XG5cblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lLCBcInNjcmlwdFwiICk7XG5cdFx0aWYgKCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sIFwic2NyaXB0XCIgKSApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB0aGUgY2xvbmVkIHNldFxuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblx0XHR2YXIgZGF0YSwgZWxlbSwgdHlwZSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT09IHVuZGVmaW5lZDsgaSsrICkge1xuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRcdGlmICggKCBkYXRhID0gZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdGZvciAoIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbFsgdHlwZSBdICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRldGFjaDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IgKTtcblx0fSxcblxuXHR0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkudGV4dCggdGhpcyApIDpcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0dGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0cHJlcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZSggZWxlbSwgdGFyZ2V0LmZpcnN0Q2hpbGQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YmVmb3JlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IHRoaXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblxuXHRcdFx0XHQvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2Rlc1xuXHRcdFx0XHRlbGVtLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7XG5cdFx0ZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzO1xuXG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdGwgPSB0aGlzLmxlbmd0aDtcblxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmlubmVySFRNTDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTFxuXHRcdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmXG5cdFx0XHRcdCF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSApIHtcblxuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5odG1sUHJlZmlsdGVyKCB2YWx1ZSApO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdFx0ZWxlbSA9IHRoaXNbIGkgXSB8fCB7fTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXHRcdFx0XHRcdFx0XHRlbGVtLmlubmVySFRNTCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW0gPSAwO1xuXG5cdFx0XHRcdC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZFxuXHRcdFx0XHR9IGNhdGNoICggZSApIHt9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTtcblx0XHRcdH1cblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdHJlcGxhY2VXaXRoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaWdub3JlZCA9IFtdO1xuXG5cdFx0Ly8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFjaW5nIGVhY2ggbm9uLWlnbm9yZWQgY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcblxuXHRcdFx0aWYgKCBqUXVlcnkuaW5BcnJheSggdGhpcywgaWdub3JlZCApIDwgMCApIHtcblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTtcblx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnJlcGxhY2VDaGlsZCggZWxlbSwgdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBGb3JjZSBjYWxsYmFjayBpbnZvY2F0aW9uXG5cdFx0fSwgaWdub3JlZCApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCB7XG5cdGFwcGVuZFRvOiBcImFwcGVuZFwiLFxuXHRwcmVwZW5kVG86IFwicHJlcGVuZFwiLFxuXHRpbnNlcnRCZWZvcmU6IFwiYmVmb3JlXCIsXG5cdGluc2VydEFmdGVyOiBcImFmdGVyXCIsXG5cdHJlcGxhY2VBbGw6IFwicmVwbGFjZVdpdGhcIlxufSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgZWxlbXMsXG5cdFx0XHRyZXQgPSBbXSxcblx0XHRcdGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSxcblx0XHRcdGxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyBpIDw9IGxhc3Q7IGkrKyApIHtcblx0XHRcdGVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKCB0cnVlICk7XG5cdFx0XHRqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0Ly8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0cHVzaC5hcHBseSggcmV0LCBlbGVtcy5nZXQoKSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7XG5cdH07XG59ICk7XG52YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggXCJeKFwiICsgcG51bSArIFwiKSg/IXB4KVthLXolXSskXCIsIFwiaVwiICk7XG5cbnZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seSwgRmlyZWZveCA8PTMwICgjMTUwOTgsICMxNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHR2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuXHRcdGlmICggIXZpZXcgfHwgIXZpZXcub3BlbmVyICkge1xuXHRcdFx0dmlldyA9IHdpbmRvdztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7XG5cdH07XG5cbnZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrICkge1xuXHR2YXIgcmV0LCBuYW1lLFxuXHRcdG9sZCA9IHt9O1xuXG5cdC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0b2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdO1xuXHR9XG5cblx0cmV0ID0gY2FsbGJhY2suY2FsbCggZWxlbSApO1xuXG5cdC8vIFJldmVydCB0aGUgb2xkIHZhbHVlc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufTtcblxuXG52YXIgcmJveFN0eWxlID0gbmV3IFJlZ0V4cCggY3NzRXhwYW5kLmpvaW4oIFwifFwiICksIFwiaVwiICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXG5cdC8vIEV4ZWN1dGluZyBib3RoIHBpeGVsUG9zaXRpb24gJiBib3hTaXppbmdSZWxpYWJsZSB0ZXN0cyByZXF1aXJlIG9ubHkgb25lIGxheW91dFxuXHQvLyBzbyB0aGV5J3JlIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSB0aGUgc2Vjb25kIGNvbXB1dGF0aW9uLlxuXHRmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygpIHtcblxuXHRcdC8vIFRoaXMgaXMgYSBzaW5nbGV0b24sIHdlIG5lZWQgdG8gZXhlY3V0ZSBpdCBvbmx5IG9uY2Vcblx0XHRpZiAoICFkaXYgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDtcIiArXG5cdFx0XHRcIm1hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MFwiO1xuXHRcdGRpdi5zdHlsZS5jc3NUZXh0ID1cblx0XHRcdFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO1wiICtcblx0XHRcdFwibWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDtcIiArXG5cdFx0XHRcIndpZHRoOjYwJTt0b3A6MSVcIjtcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApLmFwcGVuZENoaWxkKCBkaXYgKTtcblxuXHRcdHZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTtcblx0XHRwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSBcIjElXCI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBGaXJlZm94IDw9MyAtIDQ0XG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5tYXJnaW5MZWZ0ICkgPT09IDEyO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgU2FmYXJpIDw9OS4xIC0gMTAuMSwgaU9TIDw9Ny4wIC0gOS4zXG5cdFx0Ly8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0XG5cdFx0ZGl2LnN0eWxlLnJpZ2h0ID0gXCI2MCVcIjtcblx0XHRwaXhlbEJveFN0eWxlc1ZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUucmlnaHQgKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHRcdC8vIERldGVjdCBtaXNyZXBvcnRpbmcgb2YgY29udGVudCBkaW1lbnNpb25zIGZvciBib3gtc2l6aW5nOmJvcmRlci1ib3ggZWxlbWVudHNcblx0XHRib3hTaXppbmdSZWxpYWJsZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUud2lkdGggKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHQvLyBEZXRlY3Qgb3ZlcmZsb3c6c2Nyb2xsIHNjcmV3aW5lc3MgKGdoLTM2OTkpXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NjRcblx0XHQvLyBEb24ndCBnZXQgdHJpY2tlZCB3aGVuIHpvb20gYWZmZWN0cyBvZmZzZXRXaWR0aCAoZ2gtNDAyOSlcblx0XHRkaXYuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdFx0c2Nyb2xsYm94U2l6ZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2Lm9mZnNldFdpZHRoIC8gMyApID09PSAxMjtcblxuXHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7XG5cblx0XHQvLyBOdWxsaWZ5IHRoZSBkaXYgc28gaXQgd291bGRuJ3QgYmUgc3RvcmVkIGluIHRoZSBtZW1vcnkgYW5kXG5cdFx0Ly8gaXQgd2lsbCBhbHNvIGJlIGEgc2lnbiB0aGF0IGNoZWNrcyBhbHJlYWR5IHBlcmZvcm1lZFxuXHRcdGRpdiA9IG51bGw7XG5cdH1cblxuXHRmdW5jdGlvbiByb3VuZFBpeGVsTWVhc3VyZXMoIG1lYXN1cmUgKSB7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQoIHBhcnNlRmxvYXQoIG1lYXN1cmUgKSApO1xuXHR9XG5cblx0dmFyIHBpeGVsUG9zaXRpb25WYWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLCBzY3JvbGxib3hTaXplVmFsLCBwaXhlbEJveFN0eWxlc1ZhbCxcblx0XHRyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCwgcmVsaWFibGVNYXJnaW5MZWZ0VmFsLFxuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSxcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0Ly8gRmluaXNoIGVhcmx5IGluIGxpbWl0ZWQgKG5vbi1icm93c2VyKSBlbnZpcm9ubWVudHNcblx0aWYgKCAhZGl2LnN0eWxlICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gU3R5bGUgb2YgY2xvbmVkIGVsZW1lbnQgYWZmZWN0cyBzb3VyY2UgZWxlbWVudCBjbG9uZWQgKCM4OTA4KVxuXHRkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcImNvbnRlbnQtYm94XCI7XG5cdGRpdi5jbG9uZU5vZGUoIHRydWUgKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiXCI7XG5cdHN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlID0gZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID09PSBcImNvbnRlbnQtYm94XCI7XG5cblx0alF1ZXJ5LmV4dGVuZCggc3VwcG9ydCwge1xuXHRcdGJveFNpemluZ1JlbGlhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gYm94U2l6aW5nUmVsaWFibGVWYWw7XG5cdFx0fSxcblx0XHRwaXhlbEJveFN0eWxlczogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsQm94U3R5bGVzVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxQb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsUG9zaXRpb25WYWw7XG5cdFx0fSxcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiByZWxpYWJsZU1hcmdpbkxlZnRWYWw7XG5cdFx0fSxcblx0XHRzY3JvbGxib3hTaXplOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gc2Nyb2xsYm94U2l6ZVZhbDtcblx0XHR9LFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0XG5cdFx0Ly8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuXG5cdFx0Ly8gQmVoYXZpb3IgaW4gSUUgOSBpcyBtb3JlIHN1YnRsZSB0aGFuIGluIG5ld2VyIHZlcnNpb25zICYgaXQgcGFzc2VzXG5cdFx0Ly8gc29tZSB2ZXJzaW9ucyBvZiB0aGlzIHRlc3Q7IG1ha2Ugc3VyZSBub3QgdG8gbWFrZSBpdCBwYXNzIHRoZXJlIVxuXHRcdC8vXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA3MCtcblx0XHQvLyBPbmx5IEZpcmVmb3ggaW5jbHVkZXMgYm9yZGVyIHdpZHRoc1xuXHRcdC8vIGluIGNvbXB1dGVkIGRpbWVuc2lvbnMuIChnaC00NTI5KVxuXHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0YWJsZSwgdHIsIHRyQ2hpbGQsIHRyU3R5bGU7XG5cdFx0XHRpZiAoIHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJ0YWJsZVwiICk7XG5cdFx0XHRcdHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJ0clwiICk7XG5cdFx0XHRcdHRyQ2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0XHRcdFx0dGFibGUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGVcIjtcblx0XHRcdFx0dHIuc3R5bGUuY3NzVGV4dCA9IFwiYm9yZGVyOjFweCBzb2xpZFwiO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA4Nitcblx0XHRcdFx0Ly8gSGVpZ2h0IHNldCB0aHJvdWdoIGNzc1RleHQgZG9lcyBub3QgZ2V0IGFwcGxpZWQuXG5cdFx0XHRcdC8vIENvbXB1dGVkIGhlaWdodCB0aGVuIGNvbWVzIGJhY2sgYXMgMC5cblx0XHRcdFx0dHIuc3R5bGUuaGVpZ2h0ID0gXCIxcHhcIjtcblx0XHRcdFx0dHJDaGlsZC5zdHlsZS5oZWlnaHQgPSBcIjlweFwiO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgOCBDaHJvbWUgODYrXG5cdFx0XHRcdC8vIEluIG91ciBib2R5QmFja2dyb3VuZC5odG1sIGlmcmFtZSxcblx0XHRcdFx0Ly8gZGlzcGxheSBmb3IgYWxsIGRpdiBlbGVtZW50cyBpcyBzZXQgdG8gXCJpbmxpbmVcIixcblx0XHRcdFx0Ly8gd2hpY2ggY2F1c2VzIGEgcHJvYmxlbSBvbmx5IGluIEFuZHJvaWQgOCBDaHJvbWUgODYuXG5cdFx0XHRcdC8vIEVuc3VyaW5nIHRoZSBkaXYgaXMgZGlzcGxheTogYmxvY2tcblx0XHRcdFx0Ly8gZ2V0cyBhcm91bmQgdGhpcyBpc3N1ZS5cblx0XHRcdFx0dHJDaGlsZC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuXG5cdFx0XHRcdGRvY3VtZW50RWxlbWVudFxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdGFibGUgKVxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdHIgKVxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdHJDaGlsZCApO1xuXG5cdFx0XHRcdHRyU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggdHIgKTtcblx0XHRcdFx0cmVsaWFibGVUckRpbWVuc2lvbnNWYWwgPSAoIHBhcnNlSW50KCB0clN0eWxlLmhlaWdodCwgMTAgKSArXG5cdFx0XHRcdFx0cGFyc2VJbnQoIHRyU3R5bGUuYm9yZGVyVG9wV2lkdGgsIDEwICkgK1xuXHRcdFx0XHRcdHBhcnNlSW50KCB0clN0eWxlLmJvcmRlckJvdHRvbVdpZHRoLCAxMCApICkgPT09IHRyLm9mZnNldEhlaWdodDtcblxuXHRcdFx0XHRkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIHRhYmxlICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVUckRpbWVuc2lvbnNWYWw7XG5cdFx0fVxuXHR9ICk7XG59ICkoKTtcblxuXG5mdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkge1xuXHR2YXIgd2lkdGgsIG1pbldpZHRoLCBtYXhXaWR0aCwgcmV0LFxuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA1MStcblx0XHQvLyBSZXRyaWV2aW5nIHN0eWxlIGJlZm9yZSBjb21wdXRlZCBzb21laG93XG5cdFx0Ly8gZml4ZXMgYW4gaXNzdWUgd2l0aCBnZXR0aW5nIHdyb25nIHZhbHVlc1xuXHRcdC8vIG9uIGRldGFjaGVkIGVsZW1lbnRzXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XG5cblx0Ly8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBuZWVkZWQgZm9yOlxuXHQvLyAgIC5jc3MoJ2ZpbHRlcicpIChJRSA5IG9ubHksICMxMjUzNylcblx0Ly8gICAuY3NzKCctLWN1c3RvbVByb3BlcnR5KSAoIzMxNDQpXG5cdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0cmV0ID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07XG5cblx0XHRpZiAoIHJldCA9PT0gXCJcIiAmJiAhaXNBdHRhY2hlZCggZWxlbSApICkge1xuXHRcdFx0cmV0ID0galF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gQSB0cmlidXRlIHRvIHRoZSBcImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHNcIlxuXHRcdC8vIEFuZHJvaWQgQnJvd3NlciByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIHNvbWUgdmFsdWVzLFxuXHRcdC8vIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMuXG5cdFx0Ly8gVGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOlxuXHRcdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5waXhlbEJveFN0eWxlcygpICYmIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiByYm94U3R5bGUudGVzdCggbmFtZSApICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVzXG5cdFx0XHR3aWR0aCA9IHN0eWxlLndpZHRoO1xuXHRcdFx0bWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDtcblx0XHRcdG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7XG5cblx0XHRcdC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXRcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gc3R5bGUubWF4V2lkdGggPSBzdHlsZS53aWR0aCA9IHJldDtcblx0XHRcdHJldCA9IGNvbXB1dGVkLndpZHRoO1xuXG5cdFx0XHQvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzXG5cdFx0XHRzdHlsZS53aWR0aCA9IHdpZHRoO1xuXHRcdFx0c3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDtcblx0XHRcdHN0eWxlLm1heFdpZHRoID0gbWF4V2lkdGg7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldCAhPT0gdW5kZWZpbmVkID9cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHQvLyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLlxuXHRcdHJldCArIFwiXCIgOlxuXHRcdHJldDtcbn1cblxuXG5mdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7XG5cblx0Ly8gRGVmaW5lIHRoZSBob29rLCB3ZSdsbCBjaGVjayBvbiB0aGUgZmlyc3QgcnVuIGlmIGl0J3MgcmVhbGx5IG5lZWRlZC5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBjb25kaXRpb25GbigpICkge1xuXG5cdFx0XHRcdC8vIEhvb2sgbm90IG5lZWRlZCAob3IgaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGl0IGR1ZVxuXHRcdFx0XHQvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmdldDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBIb29rIG5lZWRlZDsgcmVkZWZpbmUgaXQgc28gdGhhdCB0aGUgc3VwcG9ydCB0ZXN0IGlzIG5vdCBleGVjdXRlZCBhZ2Fpbi5cblx0XHRcdHJldHVybiAoIHRoaXMuZ2V0ID0gaG9va0ZuICkuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH1cblx0fTtcbn1cblxuXG52YXIgY3NzUHJlZml4ZXMgPSBbIFwiV2Via2l0XCIsIFwiTW96XCIsIFwibXNcIiBdLFxuXHRlbXB0eVN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLnN0eWxlLFxuXHR2ZW5kb3JQcm9wcyA9IHt9O1xuXG4vLyBSZXR1cm4gYSB2ZW5kb3ItcHJlZml4ZWQgcHJvcGVydHkgb3IgdW5kZWZpbmVkXG5mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHtcblxuXHQvLyBDaGVjayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzXG5cdHZhciBjYXBOYW1lID0gbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksXG5cdFx0aSA9IGNzc1ByZWZpeGVzLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5hbWU7XG5cdFx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH1cbn1cblxuLy8gUmV0dXJuIGEgcG90ZW50aWFsbHktbWFwcGVkIGpRdWVyeS5jc3NQcm9wcyBvciB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVydHlcbmZ1bmN0aW9uIGZpbmFsUHJvcE5hbWUoIG5hbWUgKSB7XG5cdHZhciBmaW5hbCA9IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdIHx8IHZlbmRvclByb3BzWyBuYW1lIF07XG5cblx0aWYgKCBmaW5hbCApIHtcblx0XHRyZXR1cm4gZmluYWw7XG5cdH1cblx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cblx0cmV0dXJuIHZlbmRvclByb3BzWyBuYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHx8IG5hbWU7XG59XG5cblxudmFyXG5cblx0Ly8gU3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZVxuXHQvLyBleGNlcHQgXCJ0YWJsZVwiLCBcInRhYmxlLWNlbGxcIiwgb3IgXCJ0YWJsZS1jYXB0aW9uXCJcblx0Ly8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5XG5cdHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxcblx0cmN1c3RvbVByb3AgPSAvXi0tLyxcblx0Y3NzU2hvdyA9IHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJibG9ja1wiIH0sXG5cdGNzc05vcm1hbFRyYW5zZm9ybSA9IHtcblx0XHRsZXR0ZXJTcGFjaW5nOiBcIjBcIixcblx0XHRmb250V2VpZ2h0OiBcIjQwMFwiXG5cdH07XG5cbmZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBfZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICkge1xuXG5cdC8vIEFueSByZWxhdGl2ZSAoKy8tKSB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW5cblx0Ly8gbm9ybWFsaXplZCBhdCB0aGlzIHBvaW50XG5cdHZhciBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApO1xuXHRyZXR1cm4gbWF0Y2hlcyA/XG5cblx0XHQvLyBHdWFyZCBhZ2FpbnN0IHVuZGVmaW5lZCBcInN1YnRyYWN0XCIsIGUuZy4sIHdoZW4gdXNlZCBhcyBpbiBjc3NIb29rc1xuXHRcdE1hdGgubWF4KCAwLCBtYXRjaGVzWyAyIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgOlxuXHRcdHZhbHVlO1xufVxuXG5mdW5jdGlvbiBib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgYm94LCBpc0JvcmRlckJveCwgc3R5bGVzLCBjb21wdXRlZFZhbCApIHtcblx0dmFyIGkgPSBkaW1lbnNpb24gPT09IFwid2lkdGhcIiA/IDEgOiAwLFxuXHRcdGV4dHJhID0gMCxcblx0XHRkZWx0YSA9IDA7XG5cblx0Ly8gQWRqdXN0bWVudCBtYXkgbm90IGJlIG5lY2Vzc2FyeVxuXHRpZiAoIGJveCA9PT0gKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApICkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgNDsgaSArPSAyICkge1xuXG5cdFx0Ly8gQm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luXG5cdFx0aWYgKCBib3ggPT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBib3ggKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGNvbnRlbnQtYm94LCB3ZSdyZSBzZWVraW5nIFwicGFkZGluZ1wiIG9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIlxuXHRcdGlmICggIWlzQm9yZGVyQm94ICkge1xuXG5cdFx0XHQvLyBBZGQgcGFkZGluZ1xuXHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEZvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCIsIGFkZCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcInBhZGRpbmdcIiApIHtcblx0XHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gQnV0IHN0aWxsIGtlZXAgdHJhY2sgb2YgaXQgb3RoZXJ3aXNlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRleHRyYSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGJvcmRlci1ib3ggKGNvbnRlbnQgKyBwYWRkaW5nICsgYm9yZGVyKSwgd2UncmUgc2Vla2luZyBcImNvbnRlbnRcIiBvclxuXHRcdC8vIFwicGFkZGluZ1wiIG9yIFwibWFyZ2luXCJcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIsIHN1YnRyYWN0IHBhZGRpbmdcblx0XHRcdGlmICggYm94ID09PSBcImNvbnRlbnRcIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiBvciBcInBhZGRpbmdcIiwgc3VidHJhY3QgYm9yZGVyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBY2NvdW50IGZvciBwb3NpdGl2ZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyIHdoZW4gcmVxdWVzdGVkIGJ5IHByb3ZpZGluZyBjb21wdXRlZFZhbFxuXHRpZiAoICFpc0JvcmRlckJveCAmJiBjb21wdXRlZFZhbCA+PSAwICkge1xuXG5cdFx0Ly8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIGEgcm91bmRlZCBzdW0gb2YgY29udGVudCwgcGFkZGluZywgc2Nyb2xsIGd1dHRlciwgYW5kIGJvcmRlclxuXHRcdC8vIEFzc3VtaW5nIGludGVnZXIgc2Nyb2xsIGd1dHRlciwgc3VidHJhY3QgdGhlIHJlc3QgYW5kIHJvdW5kIGRvd25cblx0XHRkZWx0YSArPSBNYXRoLm1heCggMCwgTWF0aC5jZWlsKFxuXHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdGNvbXB1dGVkVmFsIC1cblx0XHRcdGRlbHRhIC1cblx0XHRcdGV4dHJhIC1cblx0XHRcdDAuNVxuXG5cdFx0Ly8gSWYgb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIHVua25vd24sIHRoZW4gd2UgY2FuJ3QgZGV0ZXJtaW5lIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXJcblx0XHQvLyBVc2UgYW4gZXhwbGljaXQgemVybyB0byBhdm9pZCBOYU4gKGdoLTM5NjQpXG5cdFx0KSApIHx8IDA7XG5cdH1cblxuXHRyZXR1cm4gZGVsdGE7XG59XG5cbmZ1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKSB7XG5cblx0Ly8gU3RhcnQgd2l0aCBjb21wdXRlZCBzdHlsZVxuXHR2YXIgc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC00MzIyKS5cblx0XHQvLyBGYWtlIGNvbnRlbnQtYm94IHVudGlsIHdlIGtub3cgaXQncyBuZWVkZWQgdG8ga25vdyB0aGUgdHJ1ZSB2YWx1ZS5cblx0XHRib3hTaXppbmdOZWVkZWQgPSAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpIHx8IGV4dHJhLFxuXHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCxcblxuXHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgZGltZW5zaW9uLCBzdHlsZXMgKSxcblx0XHRvZmZzZXRQcm9wID0gXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKTtcblxuXHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0Ly8gUmV0dXJuIGEgY29uZm91bmRpbmcgbm9uLXBpeGVsIHZhbHVlIG9yIGZlaWduIGlnbm9yYW5jZSwgYXMgYXBwcm9wcmlhdGUuXG5cdGlmICggcm51bW5vbnB4LnRlc3QoIHZhbCApICkge1xuXHRcdGlmICggIWV4dHJhICkge1xuXHRcdFx0cmV0dXJuIHZhbDtcblx0XHR9XG5cdFx0dmFsID0gXCJhdXRvXCI7XG5cdH1cblxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIFVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIHdoZW4gYm94IHNpemluZyBpcyB1bnJlbGlhYmxlLlxuXHQvLyBJbiB0aG9zZSBjYXNlcywgdGhlIGNvbXB1dGVkIHZhbHVlIGNhbiBiZSB0cnVzdGVkIHRvIGJlIGJvcmRlci1ib3guXG5cdGlmICggKCAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpICYmIGlzQm9yZGVyQm94IHx8XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMCAtIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0XG5cdFx0Ly8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuXG5cdFx0Ly8gSW50ZXJlc3RpbmdseSwgaW4gc29tZSBjYXNlcyBJRSA5IGRvZXNuJ3Qgc3VmZmVyIGZyb20gdGhpcyBpc3N1ZS5cblx0XHQhc3VwcG9ydC5yZWxpYWJsZVRyRGltZW5zaW9ucygpICYmIG5vZGVOYW1lKCBlbGVtLCBcInRyXCIgKSB8fFxuXG5cdFx0Ly8gRmFsbCBiYWNrIHRvIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCB3aGVuIHZhbHVlIGlzIFwiYXV0b1wiXG5cdFx0Ly8gVGhpcyBoYXBwZW5zIGZvciBpbmxpbmUgZWxlbWVudHMgd2l0aCBubyBleHBsaWNpdCBzZXR0aW5nIChnaC0zNTcxKVxuXHRcdHZhbCA9PT0gXCJhdXRvXCIgfHxcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgLSA0LjMgb25seVxuXHRcdC8vIEFsc28gdXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3IgbWlzcmVwb3J0ZWQgaW5saW5lIGRpbWVuc2lvbnMgKGdoLTM2MDIpXG5cdFx0IXBhcnNlRmxvYXQoIHZhbCApICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiaW5saW5lXCIgKSAmJlxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHZpc2libGUgJiBjb25uZWN0ZWRcblx0XHRlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXG5cdFx0aXNCb3JkZXJCb3ggPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiO1xuXG5cdFx0Ly8gV2hlcmUgYXZhaWxhYmxlLCBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgYXBwcm94aW1hdGUgYm9yZGVyIGJveCBkaW1lbnNpb25zLlxuXHRcdC8vIFdoZXJlIG5vdCBhdmFpbGFibGUgKGUuZy4sIFNWRyksIGFzc3VtZSB1bnJlbGlhYmxlIGJveC1zaXppbmcgYW5kIGludGVycHJldCB0aGVcblx0XHQvLyByZXRyaWV2ZWQgdmFsdWUgYXMgYSBjb250ZW50IGJveCBkaW1lbnNpb24uXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IG9mZnNldFByb3AgaW4gZWxlbTtcblx0XHRpZiAoIHZhbHVlSXNCb3JkZXJCb3ggKSB7XG5cdFx0XHR2YWwgPSBlbGVtWyBvZmZzZXRQcm9wIF07XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIFwiXCIgYW5kIGF1dG9cblx0dmFsID0gcGFyc2VGbG9hdCggdmFsICkgfHwgMDtcblxuXHQvLyBBZGp1c3QgZm9yIHRoZSBlbGVtZW50J3MgYm94IG1vZGVsXG5cdHJldHVybiAoIHZhbCArXG5cdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0ZWxlbSxcblx0XHRcdGRpbWVuc2lvbixcblx0XHRcdGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSxcblx0XHRcdHZhbHVlSXNCb3JkZXJCb3gsXG5cdFx0XHRzdHlsZXMsXG5cblx0XHRcdC8vIFByb3ZpZGUgdGhlIGN1cnJlbnQgY29tcHV0ZWQgc2l6ZSB0byByZXF1ZXN0IHNjcm9sbCBndXR0ZXIgY2FsY3VsYXRpb24gKGdoLTM1ODkpXG5cdFx0XHR2YWxcblx0XHQpXG5cdCkgKyBcInB4XCI7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRcblx0Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5XG5cdGNzc0hvb2tzOiB7XG5cdFx0b3BhY2l0eToge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eVxuXHRcdFx0XHRcdHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIFwib3BhY2l0eVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJldCA9PT0gXCJcIiA/IFwiMVwiIDogcmV0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8vIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIFwicHhcIiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzXG5cdGNzc051bWJlcjoge1xuXHRcdFwiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnRcIjogdHJ1ZSxcblx0XHRcImNvbHVtbkNvdW50XCI6IHRydWUsXG5cdFx0XCJmaWxsT3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwiZmxleEdyb3dcIjogdHJ1ZSxcblx0XHRcImZsZXhTaHJpbmtcIjogdHJ1ZSxcblx0XHRcImZvbnRXZWlnaHRcIjogdHJ1ZSxcblx0XHRcImdyaWRBcmVhXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uRW5kXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uU3RhcnRcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dFbmRcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dTdGFydFwiOiB0cnVlLFxuXHRcdFwibGluZUhlaWdodFwiOiB0cnVlLFxuXHRcdFwib3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwib3JkZXJcIjogdHJ1ZSxcblx0XHRcIm9ycGhhbnNcIjogdHJ1ZSxcblx0XHRcIndpZG93c1wiOiB0cnVlLFxuXHRcdFwiekluZGV4XCI6IHRydWUsXG5cdFx0XCJ6b29tXCI6IHRydWVcblx0fSxcblxuXHQvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlXG5cdC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWVcblx0Y3NzUHJvcHM6IHt9LFxuXG5cdC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlXG5cdHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkge1xuXG5cdFx0Ly8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lXG5cdFx0dmFyIHJldCwgdHlwZSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApLFxuXHRcdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gcXVlcnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBHZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLCB0aGVuIHVucHJlZml4ZWQgdmVyc2lvblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRcdFx0Ly8gQ29udmVydCBcIis9XCIgb3IgXCItPVwiIHRvIHJlbGF0aXZlIG51bWJlcnMgKCM3MzQ1KVxuXHRcdFx0aWYgKCB0eXBlID09PSBcInN0cmluZ1wiICYmICggcmV0ID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiYgcmV0WyAxIF0gKSB7XG5cdFx0XHRcdHZhbHVlID0gYWRqdXN0Q1NTKCBlbGVtLCBuYW1lLCByZXQgKTtcblxuXHRcdFx0XHQvLyBGaXhlcyBidWcgIzkyMzdcblx0XHRcdFx0dHlwZSA9IFwibnVtYmVyXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IG51bGwgYW5kIE5hTiB2YWx1ZXMgYXJlbid0IHNldCAoIzcxMTYpXG5cdFx0XHRpZiAoIHZhbHVlID09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCB0aGUgdW5pdCAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKVxuXHRcdFx0Ly8gVGhlIGlzQ3VzdG9tUHJvcCBjaGVjayBjYW4gYmUgcmVtb3ZlZCBpbiBqUXVlcnkgNC4wIHdoZW4gd2Ugb25seSBhdXRvLWFwcGVuZFxuXHRcdFx0Ly8gXCJweFwiIHRvIGEgZmV3IGhhcmRjb2RlZCB2YWx1ZXMuXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwibnVtYmVyXCIgJiYgIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0dmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gYmFja2dyb3VuZC0qIHByb3BzIGFmZmVjdCBvcmlnaW5hbCBjbG9uZSdzIHZhbHVlc1xuXHRcdFx0aWYgKCAhc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgJiYgdmFsdWUgPT09IFwiXCIgJiYgbmFtZS5pbmRleE9mKCBcImJhY2tncm91bmRcIiApID09PSAwICkge1xuXHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gXCJpbmhlcml0XCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZVxuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8XG5cdFx0XHRcdCggdmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRpZiAoIGlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0XHRzdHlsZS5zZXRQcm9wZXJ0eSggbmFtZSwgdmFsdWUgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3Rcblx0XHRcdHJldHVybiBzdHlsZVsgbmFtZSBdO1xuXHRcdH1cblx0fSxcblxuXHRjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkge1xuXHRcdHZhciB2YWwsIG51bSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gbW9kaWZ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZVxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXRcblx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IFwibm9ybWFsXCIgdG8gY29tcHV0ZWQgdmFsdWVcblx0XHRpZiAoIHZhbCA9PT0gXCJub3JtYWxcIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHtcblx0XHRcdHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdO1xuXHRcdH1cblxuXHRcdC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpY1xuXHRcdGlmICggZXh0cmEgPT09IFwiXCIgfHwgZXh0cmEgKSB7XG5cdFx0XHRudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTtcblx0XHRcdHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiaGVpZ2h0XCIsIFwid2lkdGhcIiBdLCBmdW5jdGlvbiggX2ksIGRpbWVuc2lvbiApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBkaW1lbnNpb24gXSA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdC8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbVxuXHRcdFx0XHQvLyBidXQgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdFxuXHRcdFx0XHRyZXR1cm4gcmRpc3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgKSAmJlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrXG5cdFx0XHRcdFx0Ly8gVGFibGUgY29sdW1ucyBpbiBTYWZhcmkgaGF2ZSBub24temVybyBvZmZzZXRXaWR0aCAmIHplcm9cblx0XHRcdFx0XHQvLyBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB1bmxlc3MgZGlzcGxheSBpcyBjaGFuZ2VkLlxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdFx0XHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGEgZGlzY29ubmVjdGVkIG5vZGVcblx0XHRcdFx0XHQvLyBpbiBJRSB0aHJvd3MgYW4gZXJyb3IuXG5cdFx0XHRcdFx0KCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCB8fCAhZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCApID9cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHtcblx0XHRcdHZhciBtYXRjaGVzLFxuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdFx0XHQvLyBPbmx5IHJlYWQgc3R5bGVzLnBvc2l0aW9uIGlmIHRoZSB0ZXN0IGhhcyBhIGNoYW5jZSB0byBmYWlsXG5cdFx0XHRcdC8vIHRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3cuXG5cdFx0XHRcdHNjcm9sbGJveFNpemVCdWdneSA9ICFzdXBwb3J0LnNjcm9sbGJveFNpemUoKSAmJlxuXHRcdFx0XHRcdHN0eWxlcy5wb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiLFxuXG5cdFx0XHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTM5OTEpXG5cdFx0XHRcdGJveFNpemluZ05lZWRlZCA9IHNjcm9sbGJveFNpemVCdWdneSB8fCBleHRyYSxcblx0XHRcdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdFx0XHRzdWJ0cmFjdCA9IGV4dHJhID9cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRcdFx0XHRlbGVtLFxuXHRcdFx0XHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0XHRcdFx0ZXh0cmEsXG5cdFx0XHRcdFx0XHRpc0JvcmRlckJveCxcblx0XHRcdFx0XHRcdHN0eWxlc1xuXHRcdFx0XHRcdCkgOlxuXHRcdFx0XHRcdDA7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHVucmVsaWFibGUgYm9yZGVyLWJveCBkaW1lbnNpb25zIGJ5IGNvbXBhcmluZyBvZmZzZXQqIHRvIGNvbXB1dGVkIGFuZFxuXHRcdFx0Ly8gZmFraW5nIGEgY29udGVudC1ib3ggdG8gZ2V0IGJvcmRlciBhbmQgcGFkZGluZyAoZ2gtMzY5OSlcblx0XHRcdGlmICggaXNCb3JkZXJCb3ggJiYgc2Nyb2xsYm94U2l6ZUJ1Z2d5ICkge1xuXHRcdFx0XHRzdWJ0cmFjdCAtPSBNYXRoLmNlaWwoXG5cdFx0XHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdFx0XHRwYXJzZUZsb2F0KCBzdHlsZXNbIGRpbWVuc2lvbiBdICkgLVxuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBcImJvcmRlclwiLCBmYWxzZSwgc3R5bGVzICkgLVxuXHRcdFx0XHRcdDAuNVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IHRvIHBpeGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRlZFxuXHRcdFx0aWYgKCBzdWJ0cmFjdCAmJiAoIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJlxuXHRcdFx0XHQoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSAhPT0gXCJweFwiICkge1xuXG5cdFx0XHRcdGVsZW0uc3R5bGVbIGRpbWVuc2lvbiBdID0gdmFsdWU7XG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5LmNzcyggZWxlbSwgZGltZW5zaW9uICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICk7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuY3NzSG9va3MubWFyZ2luTGVmdCA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5yZWxpYWJsZU1hcmdpbkxlZnQsXG5cdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0cmV0dXJuICggcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiApICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXHRcdFx0XHRcdH0gKVxuXHRcdFx0KSArIFwicHhcIjtcblx0XHR9XG5cdH1cbik7XG5cbi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXNcbmpRdWVyeS5lYWNoKCB7XG5cdG1hcmdpbjogXCJcIixcblx0cGFkZGluZzogXCJcIixcblx0Ym9yZGVyOiBcIldpZHRoXCJcbn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBpID0gMCxcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcblxuXHRcdFx0XHQvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmdcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdCggXCIgXCIgKSA6IFsgdmFsdWUgXTtcblxuXHRcdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xuXHRcdFx0XHRleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9XG5cdFx0XHRcdFx0cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXhwYW5kZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICggcHJlZml4ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXG5cdFx0XHRcdG1hcCA9IHt9LFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBuYW1lICkgKSB7XG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xuXHRcdFx0XHRsZW4gPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHR9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fVxufSApO1xuXG5cbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcbn1cbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xuXG5Ud2Vlbi5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBUd2Vlbixcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xuXHRcdHRoaXMuZWxlbSA9IGVsZW07XG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0O1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCxcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXG5cdFx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHxcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxuXHRcdFx0Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy5cblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cblx0XHRcdHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0alF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gfHxcblx0XHRcdFx0XHR0d2Vlbi5lbGVtLnN0eWxlWyBmaW5hbFByb3BOYW1lKCB0d2Vlbi5wcm9wICkgXSAhPSBudWxsICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgdHdlZW4ubm93ICsgdHdlZW4udW5pdCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIFBhbmljIGJhc2VkIGFwcHJvYWNoIHRvIHNldHRpbmcgdGhpbmdzIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmVhc2luZyA9IHtcblx0bGluZWFyOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gcDtcblx0fSxcblx0c3dpbmc6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1hdGguUEkgKSAvIDI7XG5cdH0sXG5cdF9kZWZhdWx0OiBcInN3aW5nXCJcbn07XG5cbmpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0O1xuXG4vLyBCYWNrIGNvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludFxualF1ZXJ5LmZ4LnN0ZXAgPSB7fTtcblxuXG5cblxudmFyXG5cdGZ4Tm93LCBpblByb2dyZXNzLFxuXHRyZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxcblx0cnJ1biA9IC9xdWV1ZUhvb2tzJC87XG5cbmZ1bmN0aW9uIHNjaGVkdWxlKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0aWYgKCBkb2N1bWVudC5oaWRkZW4gPT09IGZhbHNlICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKSB7XG5cdFx0XHR3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBzY2hlZHVsZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dCggc2NoZWR1bGUsIGpRdWVyeS5meC5pbnRlcnZhbCApO1xuXHRcdH1cblxuXHRcdGpRdWVyeS5meC50aWNrKCk7XG5cdH1cbn1cblxuLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseVxuZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRmeE5vdyA9IHVuZGVmaW5lZDtcblx0fSApO1xuXHRyZXR1cm4gKCBmeE5vdyA9IERhdGUubm93KCkgKTtcbn1cblxuLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb25cbmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7XG5cdHZhciB3aGljaCxcblx0XHRpID0gMCxcblx0XHRhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH07XG5cblx0Ly8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLFxuXHQvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodFxuXHRpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDtcblx0Zm9yICggOyBpIDwgNDsgaSArPSAyIC0gaW5jbHVkZVdpZHRoICkge1xuXHRcdHdoaWNoID0gY3NzRXhwYW5kWyBpIF07XG5cdFx0YXR0cnNbIFwibWFyZ2luXCIgKyB3aGljaCBdID0gYXR0cnNbIFwicGFkZGluZ1wiICsgd2hpY2ggXSA9IHR5cGU7XG5cdH1cblxuXHRpZiAoIGluY2x1ZGVXaWR0aCApIHtcblx0XHRhdHRycy5vcGFjaXR5ID0gYXR0cnMud2lkdGggPSB0eXBlO1xuXHR9XG5cblx0cmV0dXJuIGF0dHJzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHByb3AsIGFuaW1hdGlvbiApIHtcblx0dmFyIHR3ZWVuLFxuXHRcdGNvbGxlY3Rpb24gPSAoIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdlZW5lcnNbIFwiKlwiIF0gKSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSApIHtcblxuXHRcdFx0Ly8gV2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHlcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7XG5cdHZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xlLCBob29rcywgb2xkZmlyZSwgcHJvcFR3ZWVuLCByZXN0b3JlRGlzcGxheSwgZGlzcGxheSxcblx0XHRpc0JveCA9IFwid2lkdGhcIiBpbiBwcm9wcyB8fCBcImhlaWdodFwiIGluIHByb3BzLFxuXHRcdGFuaW0gPSB0aGlzLFxuXHRcdG9yaWcgPSB7fSxcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGUsXG5cdFx0aGlkZGVuID0gZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSxcblx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJmeHNob3dcIiApO1xuXG5cdC8vIFF1ZXVlLXNraXBwaW5nIGFuaW1hdGlvbnMgaGlqYWNrIHRoZSBmeCBob29rc1xuXHRpZiAoICFvcHRzLnF1ZXVlICkge1xuXHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCBcImZ4XCIgKTtcblx0XHRpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7XG5cdFx0XHRob29rcy51bnF1ZXVlZCA9IDA7XG5cdFx0XHRvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7XG5cdFx0XHRcdFx0b2xkZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRob29rcy51bnF1ZXVlZCsrO1xuXG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbnN1cmUgdGhlIGNvbXBsZXRlIGhhbmRsZXIgaXMgY2FsbGVkIGJlZm9yZSB0aGlzIGNvbXBsZXRlc1xuXHRcdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRob29rcy51bnF1ZXVlZC0tO1xuXHRcdFx0XHRpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sIFwiZnhcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBEZXRlY3Qgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0Zm9yICggcHJvcCBpbiBwcm9wcyApIHtcblx0XHR2YWx1ZSA9IHByb3BzWyBwcm9wIF07XG5cdFx0aWYgKCByZnh0eXBlcy50ZXN0KCB2YWx1ZSApICkge1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBwcm9wIF07XG5cdFx0XHR0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09IFwidG9nZ2xlXCI7XG5cdFx0XHRpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/IFwiaGlkZVwiIDogXCJzaG93XCIgKSApIHtcblxuXHRcdFx0XHQvLyBQcmV0ZW5kIHRvIGJlIGhpZGRlbiBpZiB0aGlzIGlzIGEgXCJzaG93XCIgYW5kXG5cdFx0XHRcdC8vIHRoZXJlIGlzIHN0aWxsIGRhdGEgZnJvbSBhIHN0b3BwZWQgc2hvdy9oaWRlXG5cdFx0XHRcdGlmICggdmFsdWUgPT09IFwic2hvd1wiICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSB0cnVlO1xuXG5cdFx0XHRcdC8vIElnbm9yZSBhbGwgb3RoZXIgbm8tb3Agc2hvdy9oaWRlIGRhdGFcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b3JpZ1sgcHJvcCBdID0gZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBCYWlsIG91dCBpZiB0aGlzIGlzIGEgbm8tb3AgbGlrZSAuaGlkZSgpLmhpZGUoKVxuXHRwcm9wVHdlZW4gPSAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3BzICk7XG5cdGlmICggIXByb3BUd2VlbiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb3JpZyApICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlc3RyaWN0IFwib3ZlcmZsb3dcIiBhbmQgXCJkaXNwbGF5XCIgc3R5bGVzIGR1cmluZyBib3ggYW5pbWF0aW9uc1xuXHRpZiAoIGlzQm94ICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0Ly8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdCBpbmZlciB0aGUgc2hvcnRoYW5kXG5cdFx0Ly8gZnJvbSBpZGVudGljYWxseS12YWx1ZWQgb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgYW5kIEVkZ2UganVzdCBtaXJyb3JzXG5cdFx0Ly8gdGhlIG92ZXJmbG93WCB2YWx1ZSB0aGVyZS5cblx0XHRvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTtcblxuXHRcdC8vIElkZW50aWZ5IGEgZGlzcGxheSB0eXBlLCBwcmVmZXJyaW5nIG9sZCBzaG93L2hpZGUgZGF0YSBvdmVyIHRoZSBDU1MgY2FzY2FkZVxuXHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVNob3cgJiYgZGF0YVNob3cuZGlzcGxheTtcblx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHR9XG5cdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgKSB7XG5cdFx0XHRcdGRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gR2V0IG5vbmVtcHR5IHZhbHVlKHMpIGJ5IHRlbXBvcmFyaWx5IGZvcmNpbmcgdmlzaWJpbGl0eVxuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXkgfHwgcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBbmltYXRlIGlubGluZSBlbGVtZW50cyBhcyBpbmxpbmUtYmxvY2tcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwiaW5saW5lXCIgfHwgZGlzcGxheSA9PT0gXCJpbmxpbmUtYmxvY2tcIiAmJiByZXN0b3JlRGlzcGxheSAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcImZsb2F0XCIgKSA9PT0gXCJub25lXCIgKSB7XG5cblx0XHRcdFx0Ly8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgZGlzcGxheSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHB1cmUgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0XHRcdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdGRpc3BsYXkgPSBzdHlsZS5kaXNwbGF5O1xuXHRcdFx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkaXNwbGF5ID09PSBcIm5vbmVcIiA/IFwiXCIgOiBkaXNwbGF5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIG9wdHMub3ZlcmZsb3cgKSB7XG5cdFx0c3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEltcGxlbWVudCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRwcm9wVHdlZW4gPSBmYWxzZTtcblx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXG5cdFx0Ly8gR2VuZXJhbCBzaG93L2hpZGUgc2V0dXAgZm9yIHRoaXMgZWxlbWVudCBhbmltYXRpb25cblx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRpZiAoIGRhdGFTaG93ICkge1xuXHRcdFx0XHRpZiAoIFwiaGlkZGVuXCIgaW4gZGF0YVNob3cgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gZGF0YVNob3cuaGlkZGVuO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgXCJmeHNob3dcIiwgeyBkaXNwbGF5OiByZXN0b3JlRGlzcGxheSB9ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0b3JlIGhpZGRlbi92aXNpYmxlIGZvciB0b2dnbGUgc28gYC5zdG9wKCkudG9nZ2xlKClgIFwicmV2ZXJzZXNcIlxuXHRcdFx0aWYgKCB0b2dnbGUgKSB7XG5cdFx0XHRcdGRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNob3cgZWxlbWVudHMgYmVmb3JlIGFuaW1hdGluZyB0aGVtXG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdFx0Ly8gVGhlIGZpbmFsIHN0ZXAgb2YgYSBcImhpZGVcIiBhbmltYXRpb24gaXMgYWN0dWFsbHkgaGlkaW5nIHRoZSBlbGVtZW50XG5cdFx0XHRcdGlmICggIWhpZGRlbiApIHtcblx0XHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiZnhzaG93XCIgKTtcblx0XHRcdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvLyBQZXItcHJvcGVydHkgc2V0dXBcblx0XHRwcm9wVHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcblx0XHRpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHtcblx0XHRcdGRhdGFTaG93WyBwcm9wIF0gPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0cHJvcFR3ZWVuLmVuZCA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdFx0cHJvcFR3ZWVuLnN0YXJ0ID0gMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7XG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XG5cblx0Ly8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xuXHRcdG5hbWUgPSBjYW1lbENhc2UoIGluZGV4ICk7XG5cdFx0ZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdO1xuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XG5cdFx0fVxuXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xuXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcblx0dmFyIHJlc3VsdCxcblx0XHRzdG9wcGVkLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsXG5cdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3Jcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XG5cdFx0fSApLFxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHlcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAoIzEyNDk3KVxuXHRcdFx0XHR0ZW1wID0gcmVtYWluaW5nIC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsXG5cdFx0XHRcdHBlcmNlbnQgPSAxIC0gdGVtcCxcblx0XHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0XHRsZW5ndGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDtcblxuXHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBlcmNlbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBdICk7XG5cblx0XHRcdC8vIElmIHRoZXJlJ3MgbW9yZSB0byBkbywgeWllbGRcblx0XHRcdGlmICggcGVyY2VudCA8IDEgJiYgbGVuZ3RoICkge1xuXHRcdFx0XHRyZXR1cm4gcmVtYWluaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIHdhcyBhbiBlbXB0eSBhbmltYXRpb24sIHN5bnRoZXNpemUgYSBmaW5hbCBwcm9ncmVzcyBub3RpZmljYXRpb25cblx0XHRcdGlmICggIWxlbmd0aCApIHtcblx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXNvbHZlIHRoZSBhbmltYXRpb24gYW5kIHJlcG9ydCBpdHMgY29uY2x1c2lvblxuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSxcblx0XHRcdG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHtcblx0XHRcdFx0c3BlY2lhbEVhc2luZzoge30sXG5cdFx0XHRcdGVhc2luZzogalF1ZXJ5LmVhc2luZy5fZGVmYXVsdFxuXHRcdFx0fSwgb3B0aW9ucyApLFxuXHRcdFx0b3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxuXHRcdFx0b3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLFxuXHRcdFx0c3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXG5cdFx0XHR0d2VlbnM6IFtdLFxuXHRcdFx0Y3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQgKSB7XG5cdFx0XHRcdHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCxcblx0XHRcdFx0XHRhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nWyBwcm9wIF0gfHwgYW5pbWF0aW9uLm9wdHMuZWFzaW5nICk7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnMucHVzaCggdHdlZW4gKTtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdFx0fSxcblx0XHRcdHN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkge1xuXHRcdFx0XHR2YXIgaW5kZXggPSAwLFxuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zXG5cdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIHdlIHNraXAgdGhpcyBwYXJ0XG5cdFx0XHRcdFx0bGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoIDogMDtcblx0XHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0b3BwZWQgPSB0cnVlO1xuXHRcdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXNvbHZlIHdoZW4gd2UgcGxheWVkIHRoZSBsYXN0IGZyYW1lOyBvdGhlcndpc2UsIHJlamVjdFxuXHRcdFx0XHRpZiAoIGdvdG9FbmQgKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdH0gKSxcblx0XHRwcm9wcyA9IGFuaW1hdGlvbi5wcm9wcztcblxuXHRwcm9wRmlsdGVyKCBwcm9wcywgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZyApO1xuXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0cmVzdWx0ID0gQW5pbWF0aW9uLnByZWZpbHRlcnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBwcm9wcywgYW5pbWF0aW9uLm9wdHMgKTtcblx0XHRpZiAoIHJlc3VsdCApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggcmVzdWx0LnN0b3AgKSApIHtcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCBhbmltYXRpb24uZWxlbSwgYW5pbWF0aW9uLm9wdHMucXVldWUgKS5zdG9wID1cblx0XHRcdFx0XHRyZXN1bHQuc3RvcC5iaW5kKCByZXN1bHQgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHR9XG5cblx0alF1ZXJ5Lm1hcCggcHJvcHMsIGNyZWF0ZVR3ZWVuLCBhbmltYXRpb24gKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0ICkgKSB7XG5cdFx0YW5pbWF0aW9uLm9wdHMuc3RhcnQuY2FsbCggZWxlbSwgYW5pbWF0aW9uICk7XG5cdH1cblxuXHQvLyBBdHRhY2ggY2FsbGJhY2tzIGZyb20gb3B0aW9uc1xuXHRhbmltYXRpb25cblx0XHQucHJvZ3Jlc3MoIGFuaW1hdGlvbi5vcHRzLnByb2dyZXNzIClcblx0XHQuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKVxuXHRcdC5mYWlsKCBhbmltYXRpb24ub3B0cy5mYWlsIClcblx0XHQuYWx3YXlzKCBhbmltYXRpb24ub3B0cy5hbHdheXMgKTtcblxuXHRqUXVlcnkuZngudGltZXIoXG5cdFx0alF1ZXJ5LmV4dGVuZCggdGljaywge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdGFuaW06IGFuaW1hdGlvbixcblx0XHRcdHF1ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1ZVxuXHRcdH0gKVxuXHQpO1xuXG5cdHJldHVybiBhbmltYXRpb247XG59XG5cbmpRdWVyeS5BbmltYXRpb24gPSBqUXVlcnkuZXh0ZW5kKCBBbmltYXRpb24sIHtcblxuXHR0d2VlbmVyczoge1xuXHRcdFwiKlwiOiBbIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHtcblx0XHRcdHZhciB0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4oIHByb3AsIHZhbHVlICk7XG5cdFx0XHRhZGp1c3RDU1MoIHR3ZWVuLmVsZW0sIHByb3AsIHJjc3NOdW0uZXhlYyggdmFsdWUgKSwgdHdlZW4gKTtcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9IF1cblx0fSxcblxuXHR0d2VlbmVyOiBmdW5jdGlvbiggcHJvcHMsIGNhbGxiYWNrICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggcHJvcHMgKSApIHtcblx0XHRcdGNhbGxiYWNrID0gcHJvcHM7XG5cdFx0XHRwcm9wcyA9IFsgXCIqXCIgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cHJvcHMgPSBwcm9wcy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXHRcdH1cblxuXHRcdHZhciBwcm9wLFxuXHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0bGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdHByb3AgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdID0gQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW107XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXS51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH1cblx0fSxcblxuXHRwcmVmaWx0ZXJzOiBbIGRlZmF1bHRQcmVmaWx0ZXIgXSxcblxuXHRwcmVmaWx0ZXI6IGZ1bmN0aW9uKCBjYWxsYmFjaywgcHJlcGVuZCApIHtcblx0XHRpZiAoIHByZXBlbmQgKSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy5wdXNoKCBjYWxsYmFjayApO1xuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuc3BlZWQgPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7XG5cdHZhciBvcHQgPSBzcGVlZCAmJiB0eXBlb2Ygc3BlZWQgPT09IFwib2JqZWN0XCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHtcblx0XHRjb21wbGV0ZTogZm4gfHwgIWZuICYmIGVhc2luZyB8fFxuXHRcdFx0aXNGdW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCxcblx0XHRkdXJhdGlvbjogc3BlZWQsXG5cdFx0ZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFpc0Z1bmN0aW9uKCBlYXNpbmcgKSAmJiBlYXNpbmdcblx0fTtcblxuXHQvLyBHbyB0byB0aGUgZW5kIHN0YXRlIGlmIGZ4IGFyZSBvZmZcblx0aWYgKCBqUXVlcnkuZngub2ZmICkge1xuXHRcdG9wdC5kdXJhdGlvbiA9IDA7XG5cblx0fSBlbHNlIHtcblx0XHRpZiAoIHR5cGVvZiBvcHQuZHVyYXRpb24gIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRpZiAoIG9wdC5kdXJhdGlvbiBpbiBqUXVlcnkuZnguc3BlZWRzICkge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVsdDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiBcImZ4XCJcblx0aWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUgKSB7XG5cdFx0b3B0LnF1ZXVlID0gXCJmeFwiO1xuXHR9XG5cblx0Ly8gUXVldWVpbmdcblx0b3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTtcblxuXHRvcHQuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHtcblx0XHRcdG9wdC5vbGQuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0LnF1ZXVlICkge1xuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIG9wdC5xdWV1ZSApO1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gb3B0O1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwgdG8sIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cblx0XHQvLyBTaG93IGFueSBoaWRkZW4gZWxlbWVudHMgYWZ0ZXIgc2V0dGluZyBvcGFjaXR5IHRvIDBcblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuV2l0aGluVHJlZSApLmNzcyggXCJvcGFjaXR5XCIsIDAgKS5zaG93KClcblxuXHRcdFx0Ly8gQW5pbWF0ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVkXG5cdFx0XHQuZW5kKCkuYW5pbWF0ZSggeyBvcGFjaXR5OiB0byB9LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9LFxuXHRhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGVtcHR5ID0galF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSxcblx0XHRcdG9wdGFsbCA9IGpRdWVyeS5zcGVlZCggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSxcblx0XHRcdGRvQW5pbWF0aW9uID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gT3BlcmF0ZSBvbiBhIGNvcHkgb2YgcHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5nIHdvbid0IGJlIGxvc3Rcblx0XHRcdFx0dmFyIGFuaW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApO1xuXG5cdFx0XHRcdC8vIEVtcHR5IGFuaW1hdGlvbnMsIG9yIGZpbmlzaGluZyByZXNvbHZlcyBpbW1lZGlhdGVseVxuXHRcdFx0XHRpZiAoIGVtcHR5IHx8IGRhdGFQcml2LmdldCggdGhpcywgXCJmaW5pc2hcIiApICkge1xuXHRcdFx0XHRcdGFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0ZG9BbmltYXRpb24uZmluaXNoID0gZG9BbmltYXRpb247XG5cblx0XHRyZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/XG5cdFx0XHR0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOlxuXHRcdFx0dGhpcy5xdWV1ZSggb3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiApO1xuXHR9LFxuXHRzdG9wOiBmdW5jdGlvbiggdHlwZSwgY2xlYXJRdWV1ZSwgZ290b0VuZCApIHtcblx0XHR2YXIgc3RvcFF1ZXVlID0gZnVuY3Rpb24oIGhvb2tzICkge1xuXHRcdFx0dmFyIHN0b3AgPSBob29rcy5zdG9wO1xuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRzdG9wKCBnb3RvRW5kICk7XG5cdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRnb3RvRW5kID0gY2xlYXJRdWV1ZTtcblx0XHRcdGNsZWFyUXVldWUgPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBjbGVhclF1ZXVlICkge1xuXHRcdFx0dGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZGVxdWV1ZSA9IHRydWUsXG5cdFx0XHRcdGluZGV4ID0gdHlwZSAhPSBudWxsICYmIHR5cGUgKyBcInF1ZXVlSG9va3NcIixcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApO1xuXG5cdFx0XHRpZiAoIGluZGV4ICkge1xuXHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICkge1xuXHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKCBpbmRleCBpbiBkYXRhICkge1xuXHRcdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0KCBpbmRleCApICkge1xuXHRcdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiZcblx0XHRcdFx0XHQoIHR5cGUgPT0gbnVsbCB8fCB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSApIHtcblxuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIGdvdG9FbmQgKTtcblx0XHRcdFx0XHRkZXF1ZXVlID0gZmFsc2U7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGFydCB0aGUgbmV4dCBpbiB0aGUgcXVldWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkLlxuXHRcdFx0Ly8gVGltZXJzIGN1cnJlbnRseSB3aWxsIGNhbGwgdGhlaXIgY29tcGxldGUgY2FsbGJhY2tzLCB3aGljaFxuXHRcdFx0Ly8gd2lsbCBkZXF1ZXVlIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kLlxuXHRcdFx0aWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblx0ZmluaXNoOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRpZiAoIHR5cGUgIT09IGZhbHNlICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpbmRleCxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApLFxuXHRcdFx0XHRxdWV1ZSA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlXCIgXSxcblx0XHRcdFx0aG9va3MgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgXSxcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0bGVuZ3RoID0gcXVldWUgPyBxdWV1ZS5sZW5ndGggOiAwO1xuXG5cdFx0XHQvLyBFbmFibGUgZmluaXNoaW5nIGZsYWcgb24gcHJpdmF0ZSBkYXRhXG5cdFx0XHRkYXRhLmZpbmlzaCA9IHRydWU7XG5cblx0XHRcdC8vIEVtcHR5IHRoZSBxdWV1ZSBmaXJzdFxuXHRcdFx0alF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBbXSApO1xuXG5cdFx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnN0b3AgKSB7XG5cdFx0XHRcdGhvb2tzLnN0b3AuY2FsbCggdGhpcywgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYWN0aXZlIGFuaW1hdGlvbnMsIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSB7XG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFuaW1hdGlvbnMgaW4gdGhlIG9sZCBxdWV1ZSBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGlmICggcXVldWVbIGluZGV4IF0gJiYgcXVldWVbIGluZGV4IF0uZmluaXNoICkge1xuXHRcdFx0XHRcdHF1ZXVlWyBpbmRleCBdLmZpbmlzaC5jYWxsKCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVHVybiBvZmYgZmluaXNoaW5nIGZsYWdcblx0XHRcdGRlbGV0ZSBkYXRhLmZpbmlzaDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJ0b2dnbGVcIiwgXCJzaG93XCIsIFwiaGlkZVwiIF0sIGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0dmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVvZiBzcGVlZCA9PT0gXCJib29sZWFuXCIgP1xuXHRcdFx0Y3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDpcblx0XHRcdHRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxuLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9uc1xualF1ZXJ5LmVhY2goIHtcblx0c2xpZGVEb3duOiBnZW5GeCggXCJzaG93XCIgKSxcblx0c2xpZGVVcDogZ2VuRngoIFwiaGlkZVwiICksXG5cdHNsaWRlVG9nZ2xlOiBnZW5GeCggXCJ0b2dnbGVcIiApLFxuXHRmYWRlSW46IHsgb3BhY2l0eTogXCJzaG93XCIgfSxcblx0ZmFkZU91dDogeyBvcGFjaXR5OiBcImhpZGVcIiB9LFxuXHRmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6IFwidG9nZ2xlXCIgfVxufSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LnRpbWVycyA9IFtdO1xualF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVyLFxuXHRcdGkgPSAwLFxuXHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnM7XG5cblx0ZnhOb3cgPSBEYXRlLm5vdygpO1xuXG5cdGZvciAoIDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyApIHtcblx0XHR0aW1lciA9IHRpbWVyc1sgaSBdO1xuXG5cdFx0Ly8gUnVuIHRoZSB0aW1lciBhbmQgc2FmZWx5IHJlbW92ZSBpdCB3aGVuIGRvbmUgKGFsbG93aW5nIGZvciBleHRlcm5hbCByZW1vdmFsKVxuXHRcdGlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkge1xuXHRcdFx0dGltZXJzLnNwbGljZSggaS0tLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCAhdGltZXJzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZnguc3RvcCgpO1xuXHR9XG5cdGZ4Tm93ID0gdW5kZWZpbmVkO1xufTtcblxualF1ZXJ5LmZ4LnRpbWVyID0gZnVuY3Rpb24oIHRpbWVyICkge1xuXHRqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICk7XG5cdGpRdWVyeS5meC5zdGFydCgpO1xufTtcblxualF1ZXJ5LmZ4LmludGVydmFsID0gMTM7XG5qUXVlcnkuZnguc3RhcnQgPSBmdW5jdGlvbigpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGluUHJvZ3Jlc3MgPSB0cnVlO1xuXHRzY2hlZHVsZSgpO1xufTtcblxualF1ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHtcblx0aW5Qcm9ncmVzcyA9IG51bGw7XG59O1xuXG5qUXVlcnkuZnguc3BlZWRzID0ge1xuXHRzbG93OiA2MDAsXG5cdGZhc3Q6IDIwMCxcblxuXHQvLyBEZWZhdWx0IHNwZWVkXG5cdF9kZWZhdWx0OiA0MDBcbn07XG5cblxuLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLlxuLy8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTAwMzI0MDE0NzQ3L2h0dHA6Ly9ibGluZHNpZ25hbHMuY29tL2luZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxheS9cbmpRdWVyeS5mbi5kZWxheSA9IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkge1xuXHR0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lO1xuXHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHtcblx0XHR2YXIgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XG5cdFx0aG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdH07XG5cdH0gKTtcbn07XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICksXG5cdFx0c2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzZWxlY3RcIiApLFxuXHRcdG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvcHRpb25cIiApICk7XG5cblx0aW5wdXQudHlwZSA9IFwiY2hlY2tib3hcIjtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4zIG9ubHlcblx0Ly8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgXCJvblwiXG5cdHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSBcIlwiO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdFxuXHRzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpb1xuXHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xuXHRpbnB1dC50eXBlID0gXCJyYWRpb1wiO1xuXHRzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XG59ICkoKTtcblxuXG52YXIgYm9vbEhvb2ssXG5cdGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXR0cmlidXRlIGhvb2tzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuXHRcdC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWRcblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0KCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogdW5kZWZpbmVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0Ly8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWRcblx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG5cdH0sXG5cblx0YXR0ckhvb2tzOiB7XG5cdFx0dHlwZToge1xuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gXCJyYWRpb1wiICYmXG5cdFx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHZhciB2YWwgPSBlbGVtLnZhbHVlO1xuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgdmFsdWUgKTtcblx0XHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRcdGVsZW0udmFsdWUgPSB2YWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0dmFyIG5hbWUsXG5cdFx0XHRpID0gMCxcblxuXHRcdFx0Ly8gQXR0cmlidXRlIG5hbWVzIGNhbiBjb250YWluIG5vbi1IVE1MIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuXHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjYXR0cmlidXRlcy0yXG5cdFx0XHRhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXG5cdFx0aWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkge1xuXHRcdFx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXG5ib29sSG9vayA9IHtcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2Vcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lO1xuXHR9XG59O1xuXG5qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cXHcrL2cgKSwgZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHR2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7XG5cblx0YXR0ckhhbmRsZVsgbmFtZSBdID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciByZXQsIGhhbmRsZSxcblx0XHRcdGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRpZiAoICFpc1hNTCApIHtcblxuXHRcdFx0Ly8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlclxuXHRcdFx0aGFuZGxlID0gYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gcmV0O1xuXHRcdFx0cmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgP1xuXHRcdFx0XHRsb3dlcmNhc2VOYW1lIDpcblx0XHRcdFx0bnVsbDtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IGhhbmRsZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcbn0gKTtcblxuXG5cblxudmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyY2xpY2thYmxlID0gL14oPzphfGFyZWEpJC9pO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3Ncblx0XHRcdG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldHVybiBlbGVtWyBuYW1lIF07XG5cdH0sXG5cblx0cHJvcEhvb2tzOiB7XG5cdFx0dGFiSW5kZXg6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdFx0XHQvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGVcblx0XHRcdFx0Ly8gY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0XG5cdFx0XHRcdC8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE0MTExNjIzMzM0Ny9odHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZhc2NyaXB0L1xuXHRcdFx0XHQvLyBVc2UgcHJvcGVyIGF0dHJpYnV0ZSByZXRyaWV2YWwoIzEyMDcyKVxuXHRcdFx0XHR2YXIgdGFiaW5kZXggPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInRhYmluZGV4XCIgKTtcblxuXHRcdFx0XHRpZiAoIHRhYmluZGV4ICkge1xuXHRcdFx0XHRcdHJldHVybiBwYXJzZUludCggdGFiaW5kZXgsIDEwICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHxcblx0XHRcdFx0XHRyY2xpY2thYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJlxuXHRcdFx0XHRcdGVsZW0uaHJlZlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cHJvcEZpeDoge1xuXHRcdFwiZm9yXCI6IFwiaHRtbEZvclwiLFxuXHRcdFwiY2xhc3NcIjogXCJjbGFzc05hbWVcIlxuXHR9XG59ICk7XG5cbi8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuLy8gQWNjZXNzaW5nIHRoZSBzZWxlY3RlZEluZGV4IHByb3BlcnR5XG4vLyBmb3JjZXMgdGhlIGJyb3dzZXIgdG8gcmVzcGVjdCBzZXR0aW5nIHNlbGVjdGVkXG4vLyBvbiB0aGUgb3B0aW9uXG4vLyBUaGUgZ2V0dGVyIGVuc3VyZXMgYSBkZWZhdWx0IG9wdGlvbiBpcyBzZWxlY3RlZFxuLy8gd2hlbiBpbiBhbiBvcHRncm91cFxuLy8gZXNsaW50IHJ1bGUgXCJuby11bnVzZWQtZXhwcmVzc2lvbnNcIiBpcyBkaXNhYmxlZCBmb3IgdGhpcyBjb2RlXG4vLyBzaW5jZSBpdCBjb25zaWRlcnMgc3VjaCBhY2Nlc3Npb25zIG5vb3BcbmlmICggIXN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7XG5cdGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRwYXJlbnQuc2VsZWN0ZWRJbmRleDtcblxuXHRcdFx0XHRpZiAoIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbmpRdWVyeS5lYWNoKCBbXG5cdFwidGFiSW5kZXhcIixcblx0XCJyZWFkT25seVwiLFxuXHRcIm1heExlbmd0aFwiLFxuXHRcImNlbGxTcGFjaW5nXCIsXG5cdFwiY2VsbFBhZGRpbmdcIixcblx0XCJyb3dTcGFuXCIsXG5cdFwiY29sU3BhblwiLFxuXHRcInVzZU1hcFwiLFxuXHRcImZyYW1lQm9yZGVyXCIsXG5cdFwiY29udGVudEVkaXRhYmxlXCJcbl0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkucHJvcEZpeFsgdGhpcy50b0xvd2VyQ2FzZSgpIF0gPSB0aGlzO1xufSApO1xuXG5cblxuXG5cdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlIGFjY29yZGluZyB0byBIVE1MIHNwZWNcblx0Ly8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWFuZC1jb2xsYXBzZS1hc2NpaS13aGl0ZXNwYWNlXG5cdGZ1bmN0aW9uIHN0cmlwQW5kQ29sbGFwc2UoIHZhbHVlICkge1xuXHRcdHZhciB0b2tlbnMgPSB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHRcdHJldHVybiB0b2tlbnMuam9pbiggXCIgXCIgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIGdldENsYXNzKCBlbGVtICkge1xuXHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiApIHx8IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApIHtcblx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0fVxuXHRyZXR1cm4gW107XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NlcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc2VzLmxlbmd0aCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApO1xuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPCAwICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgKz0gY2xhenogKyBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hdHRyKCBcImNsYXNzXCIsIFwiXCIgKTtcblx0XHR9XG5cblx0XHRjbGFzc2VzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cblx0XHRcdFx0Ly8gVGhpcyBleHByZXNzaW9uIGlzIGhlcmUgZm9yIGJldHRlciBjb21wcmVzc2liaWxpdHkgKHNlZSBhZGRDbGFzcylcblx0XHRcdFx0Y3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlICphbGwqIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdFx0Y3VyID0gY3VyLnJlcGxhY2UoIFwiIFwiICsgY2xhenogKyBcIiBcIiwgXCIgXCIgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkge1xuXHRcdHZhciB0eXBlID0gdHlwZW9mIHZhbHVlLFxuXHRcdFx0aXNWYWxpZFZhbHVlID0gdHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09IFwiYm9vbGVhblwiICYmIGlzVmFsaWRWYWx1ZSApIHtcblx0XHRcdHJldHVybiBzdGF0ZVZhbCA/IHRoaXMuYWRkQ2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNsYXNzKCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS50b2dnbGVDbGFzcyhcblx0XHRcdFx0XHR2YWx1ZS5jYWxsKCB0aGlzLCBpLCBnZXRDbGFzcyggdGhpcyApLCBzdGF0ZVZhbCApLFxuXHRcdFx0XHRcdHN0YXRlVmFsXG5cdFx0XHRcdCk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgY2xhc3NOYW1lLCBpLCBzZWxmLCBjbGFzc05hbWVzO1xuXG5cdFx0XHRpZiAoIGlzVmFsaWRWYWx1ZSApIHtcblxuXHRcdFx0XHQvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lc1xuXHRcdFx0XHRpID0gMDtcblx0XHRcdFx0c2VsZiA9IGpRdWVyeSggdGhpcyApO1xuXHRcdFx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRcdFx0d2hpbGUgKCAoIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0XHQvLyBDaGVjayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3Rcblx0XHRcdFx0XHRpZiAoIHNlbGYuaGFzQ2xhc3MoIGNsYXNzTmFtZSApICkge1xuXHRcdFx0XHRcdFx0c2VsZi5yZW1vdmVDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNlbGYuYWRkQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZVxuXHRcdFx0fSBlbHNlIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdFx0Y2xhc3NOYW1lID0gZ2V0Q2xhc3MoIHRoaXMgKTtcblx0XHRcdFx0aWYgKCBjbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBjbGFzc05hbWUgaWYgc2V0XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiwgY2xhc3NOYW1lICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lIG9yIGlmIHdlJ3JlIHBhc3NlZCBgZmFsc2VgLFxuXHRcdFx0XHQvLyB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgY2xhc3NuYW1lIChpZiB0aGVyZSB3YXMgb25lLCB0aGUgYWJvdmUgc2F2ZWQgaXQpLlxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYnJpbmcgYmFjayB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBzYXZlZCAoaWYgYW55dGhpbmcpLFxuXHRcdFx0XHQvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuXG5cdFx0XHRcdGlmICggdGhpcy5zZXRBdHRyaWJ1dGUgKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIixcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0XHRcdFx0XHRcIlwiIDpcblx0XHRcdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiApIHx8IFwiXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGhhc0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZSwgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Y2xhc3NOYW1lID0gXCIgXCIgKyBzZWxlY3RvciArIFwiIFwiO1xuXHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHQoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggZ2V0Q2xhc3MoIGVsZW0gKSApICsgXCIgXCIgKS5pbmRleE9mKCBjbGFzc05hbWUgKSA+IC0xICkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIHJyZXR1cm4gPSAvXFxyL2c7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0dmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGhvb2tzLCByZXQsIHZhbHVlSXNGdW5jdGlvbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHxcblx0XHRcdFx0XHRqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHRcdGlmICggaG9va3MgJiZcblx0XHRcdFx0XHRcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIFwidmFsdWVcIiApICkgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0ID0gZWxlbS52YWx1ZTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzXG5cdFx0XHRcdGlmICggdHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0LnJlcGxhY2UoIHJyZXR1cm4sIFwiXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlclxuXHRcdFx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyBcIlwiIDogcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0dmFyIHZhbDtcblxuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBqUXVlcnkoIHRoaXMgKS52YWwoKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzIFwiXCI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmdcblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHZhbCA9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbCArPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0dmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHQvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGluZ1xuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCBcInZhbHVlXCIgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHZhbEhvb2tzOiB7XG5cdFx0b3B0aW9uOiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdHZhciB2YWwgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInZhbHVlXCIgKTtcblx0XHRcdFx0cmV0dXJuIHZhbCAhPSBudWxsID9cblx0XHRcdFx0XHR2YWwgOlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExIG9ubHlcblx0XHRcdFx0XHQvLyBvcHRpb24udGV4dCB0aHJvd3MgZXhjZXB0aW9ucyAoIzE0Njg2LCAjMTQ4NTgpXG5cdFx0XHRcdFx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZVxuXHRcdFx0XHRcdHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlbGVjdDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHZhbHVlLCBvcHRpb24sIGksXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcblx0XHRcdFx0XHRvbmUgPSBlbGVtLnR5cGUgPT09IFwic2VsZWN0LW9uZVwiLFxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHRpZiAoIGluZGV4IDwgMCApIHtcblx0XHRcdFx0XHRpID0gbWF4O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IG9uZSA/IGluZGV4IDogMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSlcblx0XHRcdFx0XHRpZiAoICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiZcblxuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHRcdFx0XHRcdCFvcHRpb24uZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdFx0KCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHxcblx0XHRcdFx0XHRcdFx0XHQhbm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XG5cblx0XHRcdFx0XHRcdC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzXG5cdFx0XHRcdFx0XHRpZiAoIG9uZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheVxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgb3B0aW9uU2V0LCBvcHRpb24sXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLFxuXHRcdFx0XHRcdGkgPSBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXG5cdFx0XHRcdFx0aWYgKCBvcHRpb24uc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KCBvcHRpb24gKSwgdmFsdWVzICkgPiAtMVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3B0aW9uU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbmQtYXNzaWduICovXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGb3JjZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVlIGlzIHNldFxuXHRcdFx0XHRpZiAoICFvcHRpb25TZXQgKSB7XG5cdFx0XHRcdFx0ZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXJcbmpRdWVyeS5lYWNoKCBbIFwicmFkaW9cIiwgXCJjaGVja2JveFwiIF0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHtcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSggZWxlbSApLnZhbCgpLCB2YWx1ZSApID4gLTEgKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmICggIXN1cHBvcnQuY2hlY2tPbiApIHtcblx0XHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXS5nZXQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IG51bGwgPyBcIm9uXCIgOiBlbGVtLnZhbHVlO1xuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmlidXRlcy1vbmx5IGluY2x1c2lvblxuXG5cbnN1cHBvcnQuZm9jdXNpbiA9IFwib25mb2N1c2luXCIgaW4gd2luZG93O1xuXG5cbnZhciByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxcblx0c3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgPSBmdW5jdGlvbiggZSApIHtcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9O1xuXG5qUXVlcnkuZXh0ZW5kKCBqUXVlcnkuZXZlbnQsIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHtcblxuXHRcdHZhciBpLCBjdXIsIHRtcCwgYnViYmxlVHlwZSwgb250eXBlLCBoYW5kbGUsIHNwZWNpYWwsIGxhc3RFbGVtZW50LFxuXHRcdFx0ZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sXG5cdFx0XHR0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcInR5cGVcIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LFxuXHRcdFx0bmFtZXNwYWNlcyA9IGhhc093bi5jYWxsKCBldmVudCwgXCJuYW1lc3BhY2VcIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCBcIi5cIiApIDogW107XG5cblx0XHRjdXIgPSBsYXN0RWxlbWVudCA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50O1xuXG5cdFx0Ly8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3dcblx0XHRpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlLmluZGV4T2YoIFwiLlwiICkgPiAtMSApIHtcblxuXHRcdFx0Ly8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKVxuXHRcdFx0bmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIFwiLlwiICk7XG5cdFx0XHR0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpO1xuXHRcdFx0bmFtZXNwYWNlcy5zb3J0KCk7XG5cdFx0fVxuXHRcdG9udHlwZSA9IHR5cGUuaW5kZXhPZiggXCI6XCIgKSA8IDAgJiYgXCJvblwiICsgdHlwZTtcblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhIGpRdWVyeS5FdmVudCBvYmplY3QsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZ1xuXHRcdGV2ZW50ID0gZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0ZXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09PSBcIm9iamVjdFwiICYmIGV2ZW50ICk7XG5cblx0XHQvLyBUcmlnZ2VyIGJpdG1hc2s6ICYgMSBmb3IgbmF0aXZlIGhhbmRsZXJzOyAmIDIgZm9yIGpRdWVyeSAoYWx3YXlzIHRydWUpXG5cdFx0ZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRsZXJzID8gMiA6IDM7XG5cdFx0ZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApO1xuXHRcdGV2ZW50LnJuYW1lc3BhY2UgPSBldmVudC5uYW1lc3BhY2UgP1xuXHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICkgOlxuXHRcdFx0bnVsbDtcblxuXHRcdC8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZFxuXHRcdGV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDtcblx0XHRpZiAoICFldmVudC50YXJnZXQgKSB7XG5cdFx0XHRldmVudC50YXJnZXQgPSBlbGVtO1xuXHRcdH1cblxuXHRcdC8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3Rcblx0XHRkYXRhID0gZGF0YSA9PSBudWxsID9cblx0XHRcdFsgZXZlbnQgXSA6XG5cdFx0XHRqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTtcblxuXHRcdC8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXNcblx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICgjOTk1MSlcblx0XHQvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KVxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGxhc3RFbGVtZW50ID0gY3VyO1xuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsICkgKVsgZXZlbnQudHlwZSBdICYmXG5cdFx0XHRcdGRhdGFQcml2LmdldCggY3VyLCBcImhhbmRsZVwiICk7XG5cdFx0XHRpZiAoIGhhbmRsZSApIHtcblx0XHRcdFx0aGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmF0aXZlIGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBdO1xuXHRcdFx0aWYgKCBoYW5kbGUgJiYgaGFuZGxlLmFwcGx5ICYmIGFjY2VwdERhdGEoIGN1ciApICkge1xuXHRcdFx0XHRldmVudC5yZXN1bHQgPSBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRldmVudC50eXBlID0gdHlwZTtcblxuXHRcdC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3dcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkge1xuXG5cdFx0XHRpZiAoICggIXNwZWNpYWwuX2RlZmF1bHQgfHxcblx0XHRcdFx0c3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlICkgJiZcblx0XHRcdFx0YWNjZXB0RGF0YSggZWxlbSApICkge1xuXG5cdFx0XHRcdC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZXZlbnQuXG5cdFx0XHRcdC8vIERvbid0IGRvIGRlZmF1bHQgYWN0aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICgjNjE3MClcblx0XHRcdFx0aWYgKCBvbnR5cGUgJiYgaXNGdW5jdGlvbiggZWxlbVsgdHlwZSBdICkgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kXG5cdFx0XHRcdFx0dG1wID0gZWxlbVsgb250eXBlIF07XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gbnVsbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmV2ZW50IHJlLXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92ZVxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtWyB0eXBlIF0oKTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSB0bXA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHQvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmVcblx0Ly8gVXNlZCBvbmx5IGZvciBgZm9jdXMoaW4gfCBvdXQpYCBldmVudHNcblx0c2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCApIHtcblx0XHR2YXIgZSA9IGpRdWVyeS5leHRlbmQoXG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCksXG5cdFx0XHRldmVudCxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0aXNTaW11bGF0ZWQ6IHRydWVcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGVsZW0gKTtcblx0fVxuXG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7XG5cdFx0fSApO1xuXHR9LFxuXHR0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF07XG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCBlbGVtLCB0cnVlICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cblxuLy8gU3VwcG9ydDogRmlyZWZveCA8PTQ0XG4vLyBGaXJlZm94IGRvZXNuJ3QgaGF2ZSBmb2N1cyhpbiB8IG91dCkgZXZlbnRzXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4N1xuLy9cbi8vIFN1cHBvcnQ6IENocm9tZSA8PTQ4IC0gNDksIFNhZmFyaSA8PTkuMCAtIDkuMVxuLy8gZm9jdXMoaW4gfCBvdXQpIGV2ZW50cyBmaXJlIGFmdGVyIGZvY3VzICYgYmx1ciBldmVudHMsXG4vLyB3aGljaCBpcyBzcGVjIHZpb2xhdGlvbiAtIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWZvY3VzZXZlbnQtZXZlbnQtb3JkZXJcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ5ODU3XG5pZiAoICFzdXBwb3J0LmZvY3VzaW4gKSB7XG5cdGpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cblx0XHQvLyBBdHRhY2ggYSBzaW5nbGUgY2FwdHVyaW5nIGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dFxuXHRcdHZhciBoYW5kbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSApO1xuXHRcdH07XG5cblx0XHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7XG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gSGFuZGxlOiByZWd1bGFyIG5vZGVzICh2aWEgYHRoaXMub3duZXJEb2N1bWVudGApLCB3aW5kb3dcblx0XHRcdFx0Ly8gKHZpYSBgdGhpcy5kb2N1bWVudGApICYgZG9jdW1lbnQgKHZpYSBgdGhpc2ApLlxuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMuZG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsICggYXR0YWNoZXMgfHwgMCApICsgMSApO1xuXHRcdFx0fSxcblx0XHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLmRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICkgLSAxO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgYXR0YWNoZXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH0gKTtcbn1cbnZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcblxudmFyIG5vbmNlID0geyBndWlkOiBEYXRlLm5vdygpIH07XG5cbnZhciBycXVlcnkgPSAoIC9cXD8vICk7XG5cblxuXG4vLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nXG5qUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHtcblx0dmFyIHhtbCwgcGFyc2VyRXJyb3JFbGVtO1xuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gSUUgdGhyb3dzIG9uIHBhcnNlRnJvbVN0cmluZyB3aXRoIGludmFsaWQgaW5wdXQuXG5cdHRyeSB7XG5cdFx0eG1sID0gKCBuZXcgd2luZG93LkRPTVBhcnNlcigpICkucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCBcInRleHQveG1sXCIgKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxuXG5cdHBhcnNlckVycm9yRWxlbSA9IHhtbCAmJiB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwicGFyc2VyZXJyb3JcIiApWyAwIF07XG5cdGlmICggIXhtbCB8fCBwYXJzZXJFcnJvckVsZW0gKSB7XG5cdFx0alF1ZXJ5LmVycm9yKCBcIkludmFsaWQgWE1MOiBcIiArIChcblx0XHRcdHBhcnNlckVycm9yRWxlbSA/XG5cdFx0XHRcdGpRdWVyeS5tYXAoIHBhcnNlckVycm9yRWxlbS5jaGlsZE5vZGVzLCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsLnRleHRDb250ZW50O1xuXHRcdFx0XHR9ICkuam9pbiggXCJcXG5cIiApIDpcblx0XHRcdFx0ZGF0YVxuXHRcdCkgKTtcblx0fVxuXHRyZXR1cm4geG1sO1xufTtcblxuXG52YXJcblx0cmJyYWNrZXQgPSAvXFxbXFxdJC8sXG5cdHJDUkxGID0gL1xccj9cXG4vZyxcblx0cnN1Ym1pdHRlclR5cGVzID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLFxuXHRyc3VibWl0dGFibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7XG5cbmZ1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHtcblx0dmFyIG5hbWU7XG5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBvYmogKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBhcnJheSBpdGVtLlxuXHRcdGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkge1xuXHRcdFx0aWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHtcblxuXHRcdFx0XHQvLyBUcmVhdCBlYWNoIGFycmF5IGl0ZW0gYXMgYSBzY2FsYXIuXG5cdFx0XHRcdGFkZCggcHJlZml4LCB2ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguXG5cdFx0XHRcdGJ1aWxkUGFyYW1zKFxuXHRcdFx0XHRcdHByZWZpeCArIFwiW1wiICsgKCB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9IG51bGwgPyBpIDogXCJcIiApICsgXCJdXCIsXG5cdFx0XHRcdFx0dixcblx0XHRcdFx0XHR0cmFkaXRpb25hbCxcblx0XHRcdFx0XHRhZGRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0fSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIHRvVHlwZSggb2JqICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgb2JqZWN0IGl0ZW0uXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4ICsgXCJbXCIgKyBuYW1lICsgXCJdXCIsIG9ialsgbmFtZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBTZXJpYWxpemUgc2NhbGFyIGl0ZW0uXG5cdFx0YWRkKCBwcmVmaXgsIG9iaiApO1xuXHR9XG59XG5cbi8vIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mXG4vLyBrZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmdcbmpRdWVyeS5wYXJhbSA9IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHtcblx0dmFyIHByZWZpeCxcblx0XHRzID0gW10sXG5cdFx0YWRkID0gZnVuY3Rpb24oIGtleSwgdmFsdWVPckZ1bmN0aW9uICkge1xuXG5cdFx0XHQvLyBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpbnZva2UgaXQgYW5kIHVzZSBpdHMgcmV0dXJuIHZhbHVlXG5cdFx0XHR2YXIgdmFsdWUgPSBpc0Z1bmN0aW9uKCB2YWx1ZU9yRnVuY3Rpb24gKSA/XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbigpIDpcblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uO1xuXG5cdFx0XHRzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9uZW50KCBrZXkgKSArIFwiPVwiICtcblx0XHRcdFx0ZW5jb2RlVVJJQ29tcG9uZW50KCB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICk7XG5cdFx0fTtcblxuXHRpZiAoIGEgPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMuXG5cdGlmICggQXJyYXkuaXNBcnJheSggYSApIHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSB0aGUgZm9ybSBlbGVtZW50c1xuXHRcdGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHtcblx0XHRcdGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7XG5cdFx0fSApO1xuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSBcIm9sZFwiIHdheSAodGhlIHdheSAxLjMuMiBvciBvbGRlclxuXHRcdC8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LlxuXHRcdGZvciAoIHByZWZpeCBpbiBhICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uXG5cdHJldHVybiBzLmpvaW4oIFwiJlwiICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJpYWxpemVBcnJheSgpICk7XG5cdH0sXG5cdHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDYW4gYWRkIHByb3BIb29rIGZvciBcImVsZW1lbnRzXCIgdG8gZmlsdGVyIG9yIGFkZCBmb3JtIGVsZW1lbnRzXG5cdFx0XHR2YXIgZWxlbWVudHMgPSBqUXVlcnkucHJvcCggdGhpcywgXCJlbGVtZW50c1wiICk7XG5cdFx0XHRyZXR1cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCBlbGVtZW50cyApIDogdGhpcztcblx0XHR9ICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0eXBlID0gdGhpcy50eXBlO1xuXG5cdFx0XHQvLyBVc2UgLmlzKCBcIjpkaXNhYmxlZFwiICkgc28gdGhhdCBmaWVsZHNldFtkaXNhYmxlZF0gd29ya3Ncblx0XHRcdHJldHVybiB0aGlzLm5hbWUgJiYgIWpRdWVyeSggdGhpcyApLmlzKCBcIjpkaXNhYmxlZFwiICkgJiZcblx0XHRcdFx0cnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJlxuXHRcdFx0XHQoIHRoaXMuY2hlY2tlZCB8fCAhcmNoZWNrYWJsZVR5cGUudGVzdCggdHlwZSApICk7XG5cdFx0fSApLm1hcCggZnVuY3Rpb24oIF9pLCBlbGVtICkge1xuXHRcdFx0dmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpO1xuXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0fSApLmdldCgpO1xuXHR9XG59ICk7XG5cblxudmFyXG5cdHIyMCA9IC8lMjAvZyxcblx0cmhhc2ggPSAvIy4qJC8sXG5cdHJhbnRpQ2FjaGUgPSAvKFs/Jl0pXz1bXiZdKi8sXG5cdHJoZWFkZXJzID0gL14oLio/KTpbIFxcdF0qKFteXFxyXFxuXSopJC9tZyxcblxuXHQvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb25cblx0cmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxcblx0cm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sXG5cdHJwcm90b2NvbCA9IC9eXFwvXFwvLyxcblxuXHQvKiBQcmVmaWx0ZXJzXG5cdCAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpXG5cdCAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6XG5cdCAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnRcblx0ICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKVxuXHQgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHByZWZpbHRlcnMgPSB7fSxcblxuXHQvKiBUcmFuc3BvcnRzIGJpbmRpbmdzXG5cdCAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogMikgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHRyYW5zcG9ydHMgPSB7fSxcblxuXHQvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb25cblx0YWxsVHlwZXMgPSBcIiovXCIuY29uY2F0KCBcIipcIiApLFxuXG5cdC8vIEFuY2hvciB0YWcgZm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvcmlnaW5BbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXG5vcmlnaW5BbmNob3IuaHJlZiA9IGxvY2F0aW9uLmhyZWY7XG5cbi8vIEJhc2UgXCJjb25zdHJ1Y3RvclwiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnRcbmZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkge1xuXG5cdC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gXCIqXCJcblx0cmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uO1xuXHRcdFx0ZGF0YVR5cGVFeHByZXNzaW9uID0gXCIqXCI7XG5cdFx0fVxuXG5cdFx0dmFyIGRhdGFUeXBlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBmdW5jICkgKSB7XG5cblx0XHRcdC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb25cblx0XHRcdHdoaWxlICggKCBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHQvLyBQcmVwZW5kIGlmIHJlcXVlc3RlZFxuXHRcdFx0XHRpZiAoIGRhdGFUeXBlWyAwIF0gPT09IFwiK1wiICkge1xuXHRcdFx0XHRcdGRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCBcIipcIjtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnVuc2hpZnQoIGZ1bmMgKTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYXBwZW5kXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS5wdXNoKCBmdW5jICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0c1xuZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApIHtcblxuXHR2YXIgaW5zcGVjdGVkID0ge30sXG5cdFx0c2Vla2luZ1RyYW5zcG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFuc3BvcnRzICk7XG5cblx0ZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5cGUgKSB7XG5cdFx0dmFyIHNlbGVjdGVkO1xuXHRcdGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7XG5cdFx0alF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHtcblx0XHRcdHZhciBkYXRhVHlwZU9yVHJhbnNwb3J0ID0gcHJlZmlsdGVyT3JGYWN0b3J5KCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7XG5cdFx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZU9yVHJhbnNwb3J0ID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzZWVraW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHtcblxuXHRcdFx0XHRvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdGluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmICggc2Vla2luZ1RyYW5zcG9ydCApIHtcblx0XHRcdFx0cmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gc2VsZWN0ZWQ7XG5cdH1cblxuXHRyZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0ZWRbIFwiKlwiIF0gJiYgaW5zcGVjdCggXCIqXCIgKTtcbn1cblxuLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zXG4vLyB0aGF0IHRha2VzIFwiZmxhdFwiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKVxuLy8gRml4ZXMgIzk4ODdcbmZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkge1xuXHR2YXIga2V5LCBkZWVwLFxuXHRcdGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTtcblxuXHRmb3IgKCBrZXkgaW4gc3JjICkge1xuXHRcdGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0KCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTtcblx0XHR9XG5cdH1cblx0aWYgKCBkZWVwICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn1cblxuLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OlxuICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSlcbiAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuICovXG5mdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkge1xuXG5cdHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSxcblx0XHRjb250ZW50cyA9IHMuY29udGVudHMsXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXM7XG5cblx0Ly8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3Ncblx0d2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gXCIqXCIgKSB7XG5cdFx0ZGF0YVR5cGVzLnNoaWZ0KCk7XG5cdFx0aWYgKCBjdCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0Y3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlXG5cdGlmICggY3QgKSB7XG5cdFx0Zm9yICggdHlwZSBpbiBjb250ZW50cyApIHtcblx0XHRcdGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7XG5cdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBlY3RlZCBkYXRhVHlwZVxuXHRpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHtcblx0XHRmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07XG5cdH0gZWxzZSB7XG5cblx0XHQvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzXG5cdFx0Zm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7XG5cdFx0XHRpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyBcIiBcIiArIGRhdGFUeXBlc1sgMCBdIF0gKSB7XG5cdFx0XHRcdGZpbmFsRGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggIWZpcnN0RGF0YVR5cGUgKSB7XG5cdFx0XHRcdGZpcnN0RGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZVxuXHRcdGZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7XG5cdH1cblxuXHQvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlXG5cdC8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkXG5cdC8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2Vcblx0aWYgKCBmaW5hbERhdGFUeXBlICkge1xuXHRcdGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7XG5cdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07XG5cdH1cbn1cblxuLyogQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZVxuICogQWxzbyBzZXRzIHRoZSByZXNwb25zZVhYWCBmaWVsZHMgb24gdGhlIGpxWEhSIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApIHtcblx0dmFyIGNvbnYyLCBjdXJyZW50LCBjb252LCB0bXAsIHByZXYsXG5cdFx0Y29udmVydGVycyA9IHt9LFxuXG5cdFx0Ly8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvblxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCk7XG5cblx0Ly8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzXG5cdGlmICggZGF0YVR5cGVzWyAxIF0gKSB7XG5cdFx0Zm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7XG5cdFx0XHRjb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29udiBdO1xuXHRcdH1cblx0fVxuXG5cdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHQvLyBDb252ZXJ0IHRvIGVhY2ggc2VxdWVudGlhbCBkYXRhVHlwZVxuXHR3aGlsZSAoIGN1cnJlbnQgKSB7XG5cblx0XHRpZiAoIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSApIHtcblx0XHRcdGpxWEhSWyBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gXSA9IHJlc3BvbnNlO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkXG5cdFx0aWYgKCAhcHJldiAmJiBpc1N1Y2Nlc3MgJiYgcy5kYXRhRmlsdGVyICkge1xuXHRcdFx0cmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBlICk7XG5cdFx0fVxuXG5cdFx0cHJldiA9IGN1cnJlbnQ7XG5cdFx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdFx0aWYgKCBjdXJyZW50ICkge1xuXG5cdFx0XHQvLyBUaGVyZSdzIG9ubHkgd29yayB0byBkbyBpZiBjdXJyZW50IGRhdGFUeXBlIGlzIG5vbi1hdXRvXG5cdFx0XHRpZiAoIGN1cnJlbnQgPT09IFwiKlwiICkge1xuXG5cdFx0XHRcdGN1cnJlbnQgPSBwcmV2O1xuXG5cdFx0XHQvLyBDb252ZXJ0IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9uLWF1dG8gYW5kIGRpZmZlcnMgZnJvbSBjdXJyZW50XG5cdFx0XHR9IGVsc2UgaWYgKCBwcmV2ICE9PSBcIipcIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdC8vIFNlZWsgYSBkaXJlY3QgY29udmVydGVyXG5cdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgXCIqIFwiICsgY3VycmVudCBdO1xuXG5cdFx0XHRcdC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyXG5cdFx0XHRcdGlmICggIWNvbnYgKSB7XG5cdFx0XHRcdFx0Zm9yICggY29udjIgaW4gY29udmVydGVycyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSWYgY29udjIgb3V0cHV0cyBjdXJyZW50XG5cdFx0XHRcdFx0XHR0bXAgPSBjb252Mi5zcGxpdCggXCIgXCIgKTtcblx0XHRcdFx0XHRcdGlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gSWYgcHJldiBjYW4gYmUgY29udmVydGVkIHRvIGFjY2VwdGVkIGlucHV0XG5cdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyB0bXBbIDAgXSBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyc1sgXCIqIFwiICsgdG1wWyAwIF0gXTtcblx0XHRcdFx0XHRcdFx0aWYgKCBjb252ICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ29uZGVuc2UgZXF1aXZhbGVuY2UgY29udmVydGVyc1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY29udiA9PT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252MiBdO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGNvbnZlcnRlcnNbIGNvbnYyIF0gIT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50ID0gdG1wWyAwIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdG1wWyAxIF0gKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBlcXVpdmFsZW5jZSlcblx0XHRcdFx0aWYgKCBjb252ICE9PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0Ly8gVW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUsIGNhdGNoIGFuZCByZXR1cm4gdGhlbVxuXHRcdFx0XHRcdGlmICggY29udiAmJiBzLnRocm93cyApIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdGU6IFwicGFyc2VyZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogY29udiA/IGUgOiBcIk5vIGNvbnZlcnNpb24gZnJvbSBcIiArIHByZXYgKyBcIiB0byBcIiArIGN1cnJlbnRcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBzdGF0ZTogXCJzdWNjZXNzXCIsIGRhdGE6IHJlc3BvbnNlIH07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXNcblx0YWN0aXZlOiAwLFxuXG5cdC8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3Rcblx0bGFzdE1vZGlmaWVkOiB7fSxcblx0ZXRhZzoge30sXG5cblx0YWpheFNldHRpbmdzOiB7XG5cdFx0dXJsOiBsb2NhdGlvbi5ocmVmLFxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0aXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSxcblx0XHRnbG9iYWw6IHRydWUsXG5cdFx0cHJvY2Vzc0RhdGE6IHRydWUsXG5cdFx0YXN5bmM6IHRydWUsXG5cdFx0Y29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsXG5cblx0XHQvKlxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0ZGF0YTogbnVsbCxcblx0XHRkYXRhVHlwZTogbnVsbCxcblx0XHR1c2VybmFtZTogbnVsbCxcblx0XHRwYXNzd29yZDogbnVsbCxcblx0XHRjYWNoZTogbnVsbCxcblx0XHR0aHJvd3M6IGZhbHNlLFxuXHRcdHRyYWRpdGlvbmFsOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7fSxcblx0XHQqL1xuXG5cdFx0YWNjZXB0czoge1xuXHRcdFx0XCIqXCI6IGFsbFR5cGVzLFxuXHRcdFx0dGV4dDogXCJ0ZXh0L3BsYWluXCIsXG5cdFx0XHRodG1sOiBcInRleHQvaHRtbFwiLFxuXHRcdFx0eG1sOiBcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixcblx0XHRcdGpzb246IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJcblx0XHR9LFxuXG5cdFx0Y29udGVudHM6IHtcblx0XHRcdHhtbDogL1xcYnhtbFxcYi8sXG5cdFx0XHRodG1sOiAvXFxiaHRtbC8sXG5cdFx0XHRqc29uOiAvXFxianNvblxcYi9cblx0XHR9LFxuXG5cdFx0cmVzcG9uc2VGaWVsZHM6IHtcblx0XHRcdHhtbDogXCJyZXNwb25zZVhNTFwiLFxuXHRcdFx0dGV4dDogXCJyZXNwb25zZVRleHRcIixcblx0XHRcdGpzb246IFwicmVzcG9uc2VKU09OXCJcblx0XHR9LFxuXG5cdFx0Ly8gRGF0YSBjb252ZXJ0ZXJzXG5cdFx0Ly8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsIFwiKlwiKSBhbmQgZGVzdGluYXRpb24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuXHRcdGNvbnZlcnRlcnM6IHtcblxuXHRcdFx0Ly8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0XG5cdFx0XHRcIiogdGV4dFwiOiBTdHJpbmcsXG5cblx0XHRcdC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKVxuXHRcdFx0XCJ0ZXh0IGh0bWxcIjogdHJ1ZSxcblxuXHRcdFx0Ly8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvblxuXHRcdFx0XCJ0ZXh0IGpzb25cIjogSlNPTi5wYXJzZSxcblxuXHRcdFx0Ly8gUGFyc2UgdGV4dCBhcyB4bWxcblx0XHRcdFwidGV4dCB4bWxcIjogalF1ZXJ5LnBhcnNlWE1MXG5cdFx0fSxcblxuXHRcdC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6XG5cdFx0Ly8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZlxuXHRcdC8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlXG5cdFx0Ly8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpXG5cdFx0ZmxhdE9wdGlvbnM6IHtcblx0XHRcdHVybDogdHJ1ZSxcblx0XHRcdGNvbnRleHQ6IHRydWVcblx0XHR9XG5cdH0sXG5cblx0Ly8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXRcblx0Ly8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLlxuXHQvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLlxuXHRhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkge1xuXHRcdHJldHVybiBzZXR0aW5ncyA/XG5cblx0XHRcdC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0XG5cdFx0XHRhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6XG5cblx0XHRcdC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3Ncblx0XHRcdGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApO1xuXHR9LFxuXG5cdGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLFxuXHRhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSxcblxuXHQvLyBNYWluIG1ldGhvZFxuXHRhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkge1xuXG5cdFx0Ly8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmVcblx0XHRpZiAoIHR5cGVvZiB1cmwgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRvcHRpb25zID0gdXJsO1xuXHRcdFx0dXJsID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHR2YXIgdHJhbnNwb3J0LFxuXG5cdFx0XHQvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtXG5cdFx0XHRjYWNoZVVSTCxcblxuXHRcdFx0Ly8gUmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nLFxuXHRcdFx0cmVzcG9uc2VIZWFkZXJzLFxuXG5cdFx0XHQvLyB0aW1lb3V0IGhhbmRsZVxuXHRcdFx0dGltZW91dFRpbWVyLFxuXG5cdFx0XHQvLyBVcmwgY2xlYW51cCB2YXJcblx0XHRcdHVybEFuY2hvcixcblxuXHRcdFx0Ly8gUmVxdWVzdCBzdGF0ZSAoYmVjb21lcyBmYWxzZSB1cG9uIHNlbmQgYW5kIHRydWUgdXBvbiBjb21wbGV0aW9uKVxuXHRcdFx0Y29tcGxldGVkLFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWRcblx0XHRcdGZpcmVHbG9iYWxzLFxuXG5cdFx0XHQvLyBMb29wIHZhcmlhYmxlXG5cdFx0XHRpLFxuXG5cdFx0XHQvLyB1bmNhY2hlZCBwYXJ0IG9mIHRoZSB1cmxcblx0XHRcdHVuY2FjaGVkLFxuXG5cdFx0XHQvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0XG5cdFx0XHRzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSxcblxuXHRcdFx0Ly8gQ2FsbGJhY2tzIGNvbnRleHRcblx0XHRcdGNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLFxuXG5cdFx0XHQvLyBDb250ZXh0IGZvciBnbG9iYWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBub2RlIG9yIGpRdWVyeSBjb2xsZWN0aW9uXG5cdFx0XHRnbG9iYWxFdmVudENvbnRleHQgPSBzLmNvbnRleHQgJiZcblx0XHRcdFx0KCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID9cblx0XHRcdFx0alF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6XG5cdFx0XHRcdGpRdWVyeS5ldmVudCxcblxuXHRcdFx0Ly8gRGVmZXJyZWRzXG5cdFx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0c3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSxcblxuXHRcdFx0Ly8gSGVhZGVycyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSlcblx0XHRcdHJlcXVlc3RIZWFkZXJzID0ge30sXG5cdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzID0ge30sXG5cblx0XHRcdC8vIERlZmF1bHQgYWJvcnQgbWVzc2FnZVxuXHRcdFx0c3RyQWJvcnQgPSBcImNhbmNlbGVkXCIsXG5cblx0XHRcdC8vIEZha2UgeGhyXG5cdFx0XHRqcVhIUiA9IHtcblx0XHRcdFx0cmVhZHlTdGF0ZTogMCxcblxuXHRcdFx0XHQvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVlZGVkXG5cdFx0XHRcdGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdFx0XHRcdHZhciBtYXRjaDtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHRcdGlmICggIXJlc3BvbnNlSGVhZGVycyApIHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzID0ge307XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdID1cblx0XHRcdFx0XHRcdFx0XHRcdCggcmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdIHx8IFtdIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmNvbmNhdCggbWF0Y2hbIDIgXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2ggPT0gbnVsbCA/IG51bGwgOiBtYXRjaC5qb2luKCBcIiwgXCIgKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBSYXcgc3RyaW5nXG5cdFx0XHRcdGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbXBsZXRlZCA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FjaGVzIHRoZSBoZWFkZXJcblx0XHRcdFx0c2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gPVxuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fCBuYW1lO1xuXHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlclxuXHRcdFx0XHRvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0cy5taW1lVHlwZSA9IHR5cGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRcdHN0YXR1c0NvZGU6IGZ1bmN0aW9uKCBtYXAgKSB7XG5cdFx0XHRcdFx0dmFyIGNvZGU7XG5cdFx0XHRcdFx0aWYgKCBtYXAgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3Ncblx0XHRcdFx0XHRcdFx0anFYSFIuYWx3YXlzKCBtYXBbIGpxWEhSLnN0YXR1cyBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIExhenktYWRkIHRoZSBuZXcgY2FsbGJhY2tzIGluIGEgd2F5IHRoYXQgcHJlc2VydmVzIG9sZCBvbmVzXG5cdFx0XHRcdFx0XHRcdGZvciAoIGNvZGUgaW4gbWFwICkge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXR1c0NvZGVbIGNvZGUgXSA9IFsgc3RhdHVzQ29kZVsgY29kZSBdLCBtYXBbIGNvZGUgXSBdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhbmNlbCB0aGUgcmVxdWVzdFxuXHRcdFx0XHRhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0dmFyIGZpbmFsVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7XG5cdFx0XHRcdFx0aWYgKCB0cmFuc3BvcnQgKSB7XG5cdFx0XHRcdFx0XHR0cmFuc3BvcnQuYWJvcnQoIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkb25lKCAwLCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdC8vIEF0dGFjaCBkZWZlcnJlZHNcblx0XHRkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApO1xuXG5cdFx0Ly8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpXG5cdFx0Ly8gSGFuZGxlIGZhbHN5IHVybCBpbiB0aGUgc2V0dGluZ3Mgb2JqZWN0ICgjMTAwOTM6IGNvbnNpc3RlbmN5IHdpdGggb2xkIHNpZ25hdHVyZSlcblx0XHQvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGVcblx0XHRzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwgbG9jYXRpb24uaHJlZiApICsgXCJcIiApXG5cdFx0XHQucmVwbGFjZSggcnByb3RvY29sLCBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiApO1xuXG5cdFx0Ly8gQWxpYXMgbWV0aG9kIG9wdGlvbiB0byB0eXBlIGFzIHBlciB0aWNrZXQgIzEyMDA0XG5cdFx0cy50eXBlID0gb3B0aW9ucy5tZXRob2QgfHwgb3B0aW9ucy50eXBlIHx8IHMubWV0aG9kIHx8IHMudHlwZTtcblxuXHRcdC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3Rcblx0XHRzLmRhdGFUeXBlcyA9ICggcy5kYXRhVHlwZSB8fCBcIipcIiApLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblxuXHRcdC8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIgd2hlbiB0aGUgb3JpZ2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgb3JpZ2luLlxuXHRcdGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkge1xuXHRcdFx0dXJsQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdFx0Ly8gSUUgdGhyb3dzIGV4Y2VwdGlvbiBvbiBhY2Nlc3NpbmcgdGhlIGhyZWYgcHJvcGVydHkgaWYgdXJsIGlzIG1hbGZvcm1lZCxcblx0XHRcdC8vIGUuZy4gaHR0cDovL2V4YW1wbGUuY29tOjgweC9cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gcy51cmw7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEgb25seVxuXHRcdFx0XHQvLyBBbmNob3IncyBob3N0IHByb3BlcnR5IGlzbid0IGNvcnJlY3RseSBzZXQgd2hlbiBzLnVybCBpcyByZWxhdGl2ZVxuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHVybEFuY2hvci5ocmVmO1xuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gb3JpZ2luQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgb3JpZ2luQW5jaG9yLmhvc3QgIT09XG5cdFx0XHRcdFx0dXJsQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgdXJsQW5jaG9yLmhvc3Q7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhbiBlcnJvciBwYXJzaW5nIHRoZSBVUkwsIGFzc3VtZSBpdCBpcyBjcm9zc0RvbWFpbixcblx0XHRcdFx0Ly8gaXQgY2FuIGJlIHJlamVjdGVkIGJ5IHRoZSB0cmFuc3BvcnQgaWYgaXQgaXMgaW52YWxpZFxuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmdcblx0XHRpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHByZWZpbHRlcnNcblx0XHRpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGEgcHJlZmlsdGVyLCBzdG9wIHRoZXJlXG5cdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG9cblx0XHQvLyBEb24ndCBmaXJlIGV2ZW50cyBpZiBqUXVlcnkuZXZlbnQgaXMgdW5kZWZpbmVkIGluIGFuIEFNRC11c2FnZSBzY2VuYXJpbyAoIzE1MTE4KVxuXHRcdGZpcmVHbG9iYWxzID0galF1ZXJ5LmV2ZW50ICYmIHMuZ2xvYmFsO1xuXG5cdFx0Ly8gV2F0Y2ggZm9yIGEgbmV3IHNldCBvZiByZXF1ZXN0c1xuXHRcdGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0YXJ0XCIgKTtcblx0XHR9XG5cblx0XHQvLyBVcHBlcmNhc2UgdGhlIHR5cGVcblx0XHRzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTtcblxuXHRcdC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50XG5cdFx0cy5oYXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7XG5cblx0XHQvLyBTYXZlIHRoZSBVUkwgaW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2Vcblx0XHQvLyBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIgbGF0ZXIgb25cblx0XHQvLyBSZW1vdmUgaGFzaCB0byBzaW1wbGlmeSB1cmwgbWFuaXB1bGF0aW9uXG5cdFx0Y2FjaGVVUkwgPSBzLnVybC5yZXBsYWNlKCByaGFzaCwgXCJcIiApO1xuXG5cdFx0Ly8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnRcblx0XHRpZiAoICFzLmhhc0NvbnRlbnQgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBoYXNoIHNvIHdlIGNhbiBwdXQgaXQgYmFja1xuXHRcdFx0dW5jYWNoZWQgPSBzLnVybC5zbGljZSggY2FjaGVVUkwubGVuZ3RoICk7XG5cblx0XHRcdC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkLCBhcHBlbmQgZGF0YSB0byB1cmxcblx0XHRcdGlmICggcy5kYXRhICYmICggcy5wcm9jZXNzRGF0YSB8fCB0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICkgKSB7XG5cdFx0XHRcdGNhY2hlVVJMICs9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmRhdGE7XG5cblx0XHRcdFx0Ly8gIzk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBub3QgdXNlZCBpbiBhbiBldmVudHVhbCByZXRyeVxuXHRcdFx0XHRkZWxldGUgcy5kYXRhO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgb3IgdXBkYXRlIGFudGktY2FjaGUgcGFyYW0gaWYgbmVlZGVkXG5cdFx0XHRpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkge1xuXHRcdFx0XHRjYWNoZVVSTCA9IGNhY2hlVVJMLnJlcGxhY2UoIHJhbnRpQ2FjaGUsIFwiJDFcIiApO1xuXHRcdFx0XHR1bmNhY2hlZCA9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBcIl89XCIgKyAoIG5vbmNlLmd1aWQrKyApICtcblx0XHRcdFx0XHR1bmNhY2hlZDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUHV0IGhhc2ggYW5kIGFudGktY2FjaGUgb24gdGhlIFVSTCB0aGF0IHdpbGwgYmUgcmVxdWVzdGVkIChnaC0xNzMyKVxuXHRcdFx0cy51cmwgPSBjYWNoZVVSTCArIHVuY2FjaGVkO1xuXG5cdFx0Ly8gQ2hhbmdlICclMjAnIHRvICcrJyBpZiB0aGlzIGlzIGVuY29kZWQgZm9ybSBib2R5IGNvbnRlbnQgKGdoLTI2NTgpXG5cdFx0fSBlbHNlIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiZcblx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiICkuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICkge1xuXHRcdFx0cy5kYXRhID0gcy5kYXRhLnJlcGxhY2UoIHIyMCwgXCIrXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0aWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU1vZGlmaWVkLVNpbmNlXCIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHRcdGlmICggalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTm9uZS1NYXRjaFwiLCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudFxuXHRcdGlmICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJDb250ZW50LVR5cGVcIiwgcy5jb250ZW50VHlwZSApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGVcblx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKFxuXHRcdFx0XCJBY2NlcHRcIixcblx0XHRcdHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gP1xuXHRcdFx0XHRzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSArXG5cdFx0XHRcdFx0KCBzLmRhdGFUeXBlc1sgMCBdICE9PSBcIipcIiA/IFwiLCBcIiArIGFsbFR5cGVzICsgXCI7IHE9MC4wMVwiIDogXCJcIiApIDpcblx0XHRcdFx0cy5hY2NlcHRzWyBcIipcIiBdXG5cdFx0KTtcblxuXHRcdC8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvblxuXHRcdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTtcblx0XHR9XG5cblx0XHQvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0XG5cdFx0aWYgKCBzLmJlZm9yZVNlbmQgJiZcblx0XHRcdCggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgY29tcGxldGVkICkgKSB7XG5cblx0XHRcdC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVyblxuXHRcdFx0cmV0dXJuIGpxWEhSLmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uXG5cdFx0c3RyQWJvcnQgPSBcImFib3J0XCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHNcblx0XHRjb21wbGV0ZURlZmVycmVkLmFkZCggcy5jb21wbGV0ZSApO1xuXHRcdGpxWEhSLmRvbmUoIHMuc3VjY2VzcyApO1xuXHRcdGpxWEhSLmZhaWwoIHMuZXJyb3IgKTtcblxuXHRcdC8vIEdldCB0cmFuc3BvcnRcblx0XHR0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydFxuXHRcdGlmICggIXRyYW5zcG9ydCApIHtcblx0XHRcdGRvbmUoIC0xLCBcIk5vIFRyYW5zcG9ydFwiICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSAxO1xuXG5cdFx0XHQvLyBTZW5kIGdsb2JhbCBldmVudFxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheFNlbmRcIiwgWyBqcVhIUiwgcyBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9wIHRoZXJlXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaW1lb3V0XG5cdFx0XHRpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHtcblx0XHRcdFx0dGltZW91dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGpxWEhSLmFib3J0KCBcInRpbWVvdXRcIiApO1xuXHRcdFx0XHR9LCBzLnRpbWVvdXQgKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29tcGxldGVkID0gZmFsc2U7XG5cdFx0XHRcdHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gUmV0aHJvdyBwb3N0LWNvbXBsZXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUHJvcGFnYXRlIG90aGVycyBhcyByZXN1bHRzXG5cdFx0XHRcdGRvbmUoIC0xLCBlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lXG5cdFx0ZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7XG5cdFx0XHR2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVkLFxuXHRcdFx0XHRzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDtcblxuXHRcdFx0Ly8gSWdub3JlIHJlcGVhdCBpbnZvY2F0aW9uc1xuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29tcGxldGVkID0gdHJ1ZTtcblxuXHRcdFx0Ly8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHNcblx0XHRcdGlmICggdGltZW91dFRpbWVyICkge1xuXHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb25cblx0XHRcdC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpXG5cdFx0XHR0cmFuc3BvcnQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgXCJcIjtcblxuXHRcdFx0Ly8gU2V0IHJlYWR5U3RhdGVcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7XG5cblx0XHRcdC8vIERldGVybWluZSBpZiBzdWNjZXNzZnVsXG5cdFx0XHRpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNDtcblxuXHRcdFx0Ly8gR2V0IHJlc3BvbnNlIGRhdGFcblx0XHRcdGlmICggcmVzcG9uc2VzICkge1xuXHRcdFx0XHRyZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVXNlIGEgbm9vcCBjb252ZXJ0ZXIgZm9yIG1pc3Npbmcgc2NyaXB0IGJ1dCBub3QgaWYganNvbnBcblx0XHRcdGlmICggIWlzU3VjY2VzcyAmJlxuXHRcdFx0XHRqUXVlcnkuaW5BcnJheSggXCJzY3JpcHRcIiwgcy5kYXRhVHlwZXMgKSA+IC0xICYmXG5cdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBcImpzb25cIiwgcy5kYXRhVHlwZXMgKSA8IDAgKSB7XG5cdFx0XHRcdHMuY29udmVydGVyc1sgXCJ0ZXh0IHNjcmlwdFwiIF0gPSBmdW5jdGlvbigpIHt9O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IG5vIG1hdHRlciB3aGF0ICh0aGF0IHdheSByZXNwb25zZVhYWCBmaWVsZHMgYXJlIGFsd2F5cyBzZXQpXG5cdFx0XHRyZXNwb25zZSA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApO1xuXG5cdFx0XHQvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFpbmluZ1xuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cblx0XHRcdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRcdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJMYXN0LU1vZGlmaWVkXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcImV0YWdcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGlmIG5vIGNvbnRlbnRcblx0XHRcdFx0aWYgKCBzdGF0dXMgPT09IDIwNCB8fCBzLnR5cGUgPT09IFwiSEVBRFwiICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vY29udGVudFwiO1xuXG5cdFx0XHRcdC8vIGlmIG5vdCBtb2RpZmllZFxuXHRcdFx0XHR9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDMwNCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub3Rtb2RpZmllZFwiO1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgZGF0YSwgbGV0J3MgY29udmVydCBpdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0ZTtcblx0XHRcdFx0XHRzdWNjZXNzID0gcmVzcG9uc2UuZGF0YTtcblx0XHRcdFx0XHRlcnJvciA9IHJlc3BvbnNlLmVycm9yO1xuXHRcdFx0XHRcdGlzU3VjY2VzcyA9ICFlcnJvcjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBFeHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dCBhbmQgbm9ybWFsaXplIGZvciBub24tYWJvcnRzXG5cdFx0XHRcdGVycm9yID0gc3RhdHVzVGV4dDtcblx0XHRcdFx0aWYgKCBzdGF0dXMgfHwgIXN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwiZXJyb3JcIjtcblx0XHRcdFx0XHRpZiAoIHN0YXR1cyA8IDAgKSB7XG5cdFx0XHRcdFx0XHRzdGF0dXMgPSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdFxuXHRcdFx0anFYSFIuc3RhdHVzID0gc3RhdHVzO1xuXHRcdFx0anFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICkgKyBcIlwiO1xuXG5cdFx0XHQvLyBTdWNjZXNzL0Vycm9yXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdGpxWEhSLnN0YXR1c0NvZGUoIHN0YXR1c0NvZGUgKTtcblx0XHRcdHN0YXR1c0NvZGUgPSB1bmRlZmluZWQ7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBpc1N1Y2Nlc3MgPyBcImFqYXhTdWNjZXNzXCIgOiBcImFqYXhFcnJvclwiLFxuXHRcdFx0XHRcdFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbXBsZXRlXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQgXSApO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4Q29tcGxldGVcIiwgWyBqcVhIUiwgcyBdICk7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyXG5cdFx0XHRcdGlmICggISggLS1qUXVlcnkuYWN0aXZlICkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0b3BcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpxWEhSO1xuXHR9LFxuXG5cdGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIGRhdGEsIGNhbGxiYWNrLCBcImpzb25cIiApO1xuXHR9LFxuXG5cdGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgXCJzY3JpcHRcIiApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiZ2V0XCIsIFwicG9zdFwiIF0sIGZ1bmN0aW9uKCBfaSwgbWV0aG9kICkge1xuXHRqUXVlcnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7XG5cblx0XHQvLyBTaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRlZFxuXHRcdGlmICggaXNGdW5jdGlvbiggZGF0YSApICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7XG5cdFx0XHRjYWxsYmFjayA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFRoZSB1cmwgY2FuIGJlIGFuIG9wdGlvbnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKVxuXHRcdHJldHVybiBqUXVlcnkuYWpheCggalF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHR0eXBlOiBtZXRob2QsXG5cdFx0XHRkYXRhVHlwZTogdHlwZSxcblx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRzdWNjZXNzOiBjYWxsYmFja1xuXHRcdH0sIGpRdWVyeS5pc1BsYWluT2JqZWN0KCB1cmwgKSAmJiB1cmwgKSApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkuYWpheFByZWZpbHRlciggZnVuY3Rpb24oIHMgKSB7XG5cdHZhciBpO1xuXHRmb3IgKCBpIGluIHMuaGVhZGVycyApIHtcblx0XHRpZiAoIGkudG9Mb3dlckNhc2UoKSA9PT0gXCJjb250ZW50LXR5cGVcIiApIHtcblx0XHRcdHMuY29udGVudFR5cGUgPSBzLmhlYWRlcnNbIGkgXSB8fCBcIlwiO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbmpRdWVyeS5fZXZhbFVybCA9IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMsIGRvYyApIHtcblx0cmV0dXJuIGpRdWVyeS5hamF4KCB7XG5cdFx0dXJsOiB1cmwsXG5cblx0XHQvLyBNYWtlIHRoaXMgZXhwbGljaXQsIHNpbmNlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3VnaCBhamF4U2V0dXAgKCMxMTI2NClcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGRhdGFUeXBlOiBcInNjcmlwdFwiLFxuXHRcdGNhY2hlOiB0cnVlLFxuXHRcdGFzeW5jOiBmYWxzZSxcblx0XHRnbG9iYWw6IGZhbHNlLFxuXG5cdFx0Ly8gT25seSBldmFsdWF0ZSB0aGUgcmVzcG9uc2UgaWYgaXQgaXMgc3VjY2Vzc2Z1bCAoZ2gtNDEyNilcblx0XHQvLyBkYXRhRmlsdGVyIGlzIG5vdCBpbnZva2VkIGZvciBmYWlsdXJlIHJlc3BvbnNlcywgc28gdXNpbmcgaXQgaW5zdGVhZFxuXHRcdC8vIG9mIHRoZSBkZWZhdWx0IGNvbnZlcnRlciBpcyBrbHVkZ3kgYnV0IGl0IHdvcmtzLlxuXHRcdGNvbnZlcnRlcnM6IHtcblx0XHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oKSB7fVxuXHRcdH0sXG5cdFx0ZGF0YUZpbHRlcjogZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHJlc3BvbnNlLCBvcHRpb25zLCBkb2MgKTtcblx0XHR9XG5cdH0gKTtcbn07XG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHR3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgd3JhcDtcblxuXHRcdGlmICggdGhpc1sgMCBdICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRcdGh0bWwgPSBodG1sLmNhbGwoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFyb3VuZFxuXHRcdFx0d3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1sgMCBdLm93bmVyRG9jdW1lbnQgKS5lcSggMCApLmNsb25lKCB0cnVlICk7XG5cblx0XHRcdGlmICggdGhpc1sgMCBdLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0d3JhcC5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IHRoaXM7XG5cblx0XHRcdFx0d2hpbGUgKCBlbGVtLmZpcnN0RWxlbWVudENoaWxkICkge1xuXHRcdFx0XHRcdGVsZW0gPSBlbGVtLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVsZW07XG5cdFx0XHR9ICkuYXBwZW5kKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0d3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwSW5uZXIoIGh0bWwuY2FsbCggdGhpcywgaSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLFxuXHRcdFx0XHRjb250ZW50cyA9IHNlbGYuY29udGVudHMoKTtcblxuXHRcdFx0aWYgKCBjb250ZW50cy5sZW5ndGggKSB7XG5cdFx0XHRcdGNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZi5hcHBlbmQoIGh0bWwgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0d3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIGh0bWxJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggaHRtbCApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBodG1sSXNGdW5jdGlvbiA/IGh0bWwuY2FsbCggdGhpcywgaSApIDogaHRtbCApO1xuXHRcdH0gKTtcblx0fSxcblxuXHR1bndyYXA6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR0aGlzLnBhcmVudCggc2VsZWN0b3IgKS5ub3QoIFwiYm9keVwiICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7XG5cdFx0fSApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5oaWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICFqUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUoIGVsZW0gKTtcbn07XG5qUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICEhKCBlbGVtLm9mZnNldFdpZHRoIHx8IGVsZW0ub2Zmc2V0SGVpZ2h0IHx8IGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKTtcbn07XG5cblxuXG5cbmpRdWVyeS5hamF4U2V0dGluZ3MueGhyID0gZnVuY3Rpb24oKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxufTtcblxudmFyIHhoclN1Y2Nlc3NTdGF0dXMgPSB7XG5cblx0XHQvLyBGaWxlIHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIGNvZGUgMCwgYXNzdW1lIDIwMFxuXHRcdDA6IDIwMCxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0Ly8gIzE0NTA6IHNvbWV0aW1lcyBJRSByZXR1cm5zIDEyMjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0XG5cdFx0MTIyMzogMjA0XG5cdH0sXG5cdHhoclN1cHBvcnRlZCA9IGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCk7XG5cbnN1cHBvcnQuY29ycyA9ICEheGhyU3VwcG9ydGVkICYmICggXCJ3aXRoQ3JlZGVudGlhbHNcIiBpbiB4aHJTdXBwb3J0ZWQgKTtcbnN1cHBvcnQuYWpheCA9IHhoclN1cHBvcnRlZCA9ICEheGhyU3VwcG9ydGVkO1xuXG5qUXVlcnkuYWpheFRyYW5zcG9ydCggZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdHZhciBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaztcblxuXHQvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0XG5cdGlmICggc3VwcG9ydC5jb3JzIHx8IHhoclN1cHBvcnRlZCAmJiAhb3B0aW9ucy5jcm9zc0RvbWFpbiApIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkge1xuXHRcdFx0XHR2YXIgaSxcblx0XHRcdFx0XHR4aHIgPSBvcHRpb25zLnhocigpO1xuXG5cdFx0XHRcdHhoci5vcGVuKFxuXHRcdFx0XHRcdG9wdGlvbnMudHlwZSxcblx0XHRcdFx0XHRvcHRpb25zLnVybCxcblx0XHRcdFx0XHRvcHRpb25zLmFzeW5jLFxuXHRcdFx0XHRcdG9wdGlvbnMudXNlcm5hbWUsXG5cdFx0XHRcdFx0b3B0aW9ucy5wYXNzd29yZFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdC8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRmb3IgKCBpIGluIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdFx0eGhyWyBpIF0gPSBvcHRpb25zLnhockZpZWxkc1sgaSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlIG1pbWUgdHlwZSBpZiBuZWVkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLm1pbWVUeXBlICYmIHhoci5vdmVycmlkZU1pbWVUeXBlICkge1xuXHRcdFx0XHRcdHhoci5vdmVycmlkZU1pbWVUeXBlKCBvcHRpb25zLm1pbWVUeXBlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlclxuXHRcdFx0XHQvLyBGb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBwcmVmbGlnaHQgYXJlXG5cdFx0XHRcdC8vIGFraW4gdG8gYSBqaWdzYXcgcHV6emxlLCB3ZSBzaW1wbHkgbmV2ZXIgc2V0IGl0IHRvIGJlIHN1cmUuXG5cdFx0XHRcdC8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKVxuXHRcdFx0XHQvLyBGb3Igc2FtZS1kb21haW4gcmVxdWVzdHMsIHdvbid0IGNoYW5nZSBoZWFkZXIgaWYgYWxyZWFkeSBwcm92aWRlZC5cblx0XHRcdFx0aWYgKCAhb3B0aW9ucy5jcm9zc0RvbWFpbiAmJiAhaGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSApIHtcblx0XHRcdFx0XHRoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdID0gXCJYTUxIdHRwUmVxdWVzdFwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2V0IGhlYWRlcnNcblx0XHRcdFx0Zm9yICggaSBpbiBoZWFkZXJzICkge1xuXHRcdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrID0geGhyLm9ubG9hZCA9XG5cdFx0XHRcdFx0XHRcdFx0eGhyLm9uZXJyb3IgPSB4aHIub25hYm9ydCA9IHhoci5vbnRpbWVvdXQgPVxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlID09PSBcImFib3J0XCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0eGhyLmFib3J0KCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIHR5cGUgPT09IFwiZXJyb3JcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0Ly8gT24gYSBtYW51YWwgbmF0aXZlIGFib3J0LCBJRTkgdGhyb3dzXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZXJyb3JzIG9uIGFueSBwcm9wZXJ0eSBhY2Nlc3MgdGhhdCBpcyBub3QgcmVhZHlTdGF0ZVxuXHRcdFx0XHRcdFx0XHRcdGlmICggdHlwZW9mIHhoci5zdGF0dXMgIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggMCwgXCJlcnJvclwiICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZpbGU6IHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIDA7IHNlZSAjODYwNSwgIzE0MjA3XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblx0XHRcdFx0XHRcdFx0XHRcdHhoclN1Y2Nlc3NTdGF0dXNbIHhoci5zdGF0dXMgXSB8fCB4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHQsXG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJRTkgaGFzIG5vIFhIUjIgYnV0IHRocm93cyBvbiBiaW5hcnkgKHRyYWMtMTE0MjYpXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBGb3IgWEhSMiBub24tdGV4dCwgbGV0IHRoZSBjYWxsZXIgaGFuZGxlIGl0IChnaC0yNDk4KVxuXHRcdFx0XHRcdFx0XHRcdFx0KCB4aHIucmVzcG9uc2VUeXBlIHx8IFwidGV4dFwiICkgIT09IFwidGV4dFwiICB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHhoci5yZXNwb25zZVRleHQgIT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IGJpbmFyeTogeGhyLnJlc3BvbnNlIH0gOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IHRleHQ6IHhoci5yZXNwb25zZVRleHQgfSxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vIExpc3RlbiB0byBldmVudHNcblx0XHRcdFx0eGhyLm9ubG9hZCA9IGNhbGxiYWNrKCk7XG5cdFx0XHRcdGVycm9yQ2FsbGJhY2sgPSB4aHIub25lcnJvciA9IHhoci5vbnRpbWVvdXQgPSBjYWxsYmFjayggXCJlcnJvclwiICk7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0XHRcdC8vIFVzZSBvbnJlYWR5c3RhdGVjaGFuZ2UgdG8gcmVwbGFjZSBvbmFib3J0XG5cdFx0XHRcdC8vIHRvIGhhbmRsZSB1bmNhdWdodCBhYm9ydHNcblx0XHRcdFx0aWYgKCB4aHIub25hYm9ydCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHhoci5vbmFib3J0ID0gZXJyb3JDYWxsYmFjaztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIENoZWNrIHJlYWR5U3RhdGUgYmVmb3JlIHRpbWVvdXQgYXMgaXQgY2hhbmdlc1xuXHRcdFx0XHRcdFx0aWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBbGxvdyBvbmVycm9yIHRvIGJlIGNhbGxlZCBmaXJzdCxcblx0XHRcdFx0XHRcdFx0Ly8gYnV0IHRoYXQgd2lsbCBub3QgaGFuZGxlIGEgbmF0aXZlIGFib3J0XG5cdFx0XHRcdFx0XHRcdC8vIEFsc28sIHNhdmUgZXJyb3JDYWxsYmFjayB0byBhIHZhcmlhYmxlXG5cdFx0XHRcdFx0XHRcdC8vIGFzIHhoci5vbmVycm9yIGNhbm5vdCBiZSBhY2Nlc3NlZFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBhYm9ydCBjYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGNhbGxiYWNrKCBcImFib3J0XCIgKTtcblxuXHRcdFx0XHR0cnkge1xuXG5cdFx0XHRcdFx0Ly8gRG8gc2VuZCB0aGUgcmVxdWVzdCAodGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uKVxuXHRcdFx0XHRcdHhoci5zZW5kKCBvcHRpb25zLmhhc0NvbnRlbnQgJiYgb3B0aW9ucy5kYXRhIHx8IG51bGwgKTtcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHQvLyAjMTQ2ODM6IE9ubHkgcmV0aHJvdyBpZiB0aGlzIGhhc24ndCBiZWVuIG5vdGlmaWVkIGFzIGFuIGVycm9yIHlldFxuXHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFByZXZlbnQgYXV0by1leGVjdXRpb24gb2Ygc2NyaXB0cyB3aGVuIG5vIGV4cGxpY2l0IGRhdGFUeXBlIHdhcyBwcm92aWRlZCAoU2VlIGdoLTI0MzIpXG5qUXVlcnkuYWpheFByZWZpbHRlciggZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLmNvbnRlbnRzLnNjcmlwdCA9IGZhbHNlO1xuXHR9XG59ICk7XG5cbi8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGFjY2VwdHM6IHtcblx0XHRzY3JpcHQ6IFwidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBcIiArXG5cdFx0XHRcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdFwiXG5cdH0sXG5cdGNvbnRlbnRzOiB7XG5cdFx0c2NyaXB0OiAvXFxiKD86amF2YXxlY21hKXNjcmlwdFxcYi9cblx0fSxcblx0Y29udmVydGVyczoge1xuXHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhhbmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQgY3Jvc3NEb21haW5cbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0cy5jYWNoZSA9IGZhbHNlO1xuXHR9XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLnR5cGUgPSBcIkdFVFwiO1xuXHR9XG59ICk7XG5cbi8vIEJpbmQgc2NyaXB0IHRhZyBoYWNrIHRyYW5zcG9ydFxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXG5cdC8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gb3IgZm9yY2VkLWJ5LWF0dHJzIHJlcXVlc3RzXG5cdGlmICggcy5jcm9zc0RvbWFpbiB8fCBzLnNjcmlwdEF0dHJzICkge1xuXHRcdHZhciBzY3JpcHQsIGNhbGxiYWNrO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggXywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHNjcmlwdCA9IGpRdWVyeSggXCI8c2NyaXB0PlwiIClcblx0XHRcdFx0XHQuYXR0ciggcy5zY3JpcHRBdHRycyB8fCB7fSApXG5cdFx0XHRcdFx0LnByb3AoIHsgY2hhcnNldDogcy5zY3JpcHRDaGFyc2V0LCBzcmM6IHMudXJsIH0gKVxuXHRcdFx0XHRcdC5vbiggXCJsb2FkIGVycm9yXCIsIGNhbGxiYWNrID0gZnVuY3Rpb24oIGV2dCApIHtcblx0XHRcdFx0XHRcdHNjcmlwdC5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdGNhbGxiYWNrID0gbnVsbDtcblx0XHRcdFx0XHRcdGlmICggZXZ0ICkge1xuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggZXZ0LnR5cGUgPT09IFwiZXJyb3JcIiA/IDQwNCA6IDIwMCwgZXZ0LnR5cGUgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0Ly8gVXNlIG5hdGl2ZSBET00gbWFuaXB1bGF0aW9uIHRvIGF2b2lkIG91ciBkb21NYW5pcCBBSkFYIHRyaWNrZXJ5XG5cdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdFsgMCBdICk7XG5cdFx0XHR9LFxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBvbGRDYWxsYmFja3MgPSBbXSxcblx0cmpzb25wID0gLyg9KVxcPyg/PSZ8JCl8XFw/XFw/LztcblxuLy8gRGVmYXVsdCBqc29ucCBzZXR0aW5nc1xualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRqc29ucDogXCJjYWxsYmFja1wiLFxuXHRqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwgKCBqUXVlcnkuZXhwYW5kbyArIFwiX1wiICsgKCBub25jZS5ndWlkKysgKSApO1xuXHRcdHRoaXNbIGNhbGxiYWNrIF0gPSB0cnVlO1xuXHRcdHJldHVybiBjYWxsYmFjaztcblx0fVxufSApO1xuXG4vLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHNcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcImpzb24ganNvbnBcIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkge1xuXG5cdHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5lcixcblx0XHRqc29uUHJvcCA9IHMuanNvbnAgIT09IGZhbHNlICYmICggcmpzb25wLnRlc3QoIHMudXJsICkgP1xuXHRcdFx0XCJ1cmxcIiA6XG5cdFx0XHR0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiIClcblx0XHRcdFx0XHQuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICYmXG5cdFx0XHRcdHJqc29ucC50ZXN0KCBzLmRhdGEgKSAmJiBcImRhdGFcIlxuXHRcdCk7XG5cblx0Ly8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlzIFwianNvbnBcIiBvciB3ZSBoYXZlIGEgcGFyYW1ldGVyIHRvIHNldFxuXHRpZiAoIGpzb25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09IFwianNvbnBcIiApIHtcblxuXHRcdC8vIEdldCBjYWxsYmFjayBuYW1lLCByZW1lbWJlcmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXRcblx0XHRjYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2soKSA6XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHQvLyBJbnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3IgZm9ybSBkYXRhXG5cdFx0aWYgKCBqc29uUHJvcCApIHtcblx0XHRcdHNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgXCIkMVwiICsgY2FsbGJhY2tOYW1lICk7XG5cdFx0fSBlbHNlIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7XG5cdFx0XHRzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gXCImXCIgOiBcIj9cIiApICsgcy5qc29ucCArIFwiPVwiICsgY2FsbGJhY2tOYW1lO1xuXHRcdH1cblxuXHRcdC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb25cblx0XHRzLmNvbnZlcnRlcnNbIFwic2NyaXB0IGpzb25cIiBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHtcblx0XHRcdFx0alF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUgKyBcIiB3YXMgbm90IGNhbGxlZFwiICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTtcblx0XHR9O1xuXG5cdFx0Ly8gRm9yY2UganNvbiBkYXRhVHlwZVxuXHRcdHMuZGF0YVR5cGVzWyAwIF0gPSBcImpzb25cIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tcblx0XHRvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07XG5cdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7XG5cdFx0fTtcblxuXHRcdC8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKVxuXHRcdGpxWEhSLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIElmIHByZXZpb3VzIHZhbHVlIGRpZG4ndCBleGlzdCAtIHJlbW92ZSBpdFxuXHRcdFx0aWYgKCBvdmVyd3JpdHRlbiA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3AoIGNhbGxiYWNrTmFtZSApO1xuXG5cdFx0XHQvLyBPdGhlcndpc2UgcmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTYXZlIGJhY2sgYXMgZnJlZVxuXHRcdFx0aWYgKCBzWyBjYWxsYmFja05hbWUgXSApIHtcblxuXHRcdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmRcblx0XHRcdFx0cy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrO1xuXG5cdFx0XHRcdC8vIFNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2Vcblx0XHRcdFx0b2xkQ2FsbGJhY2tzLnB1c2goIGNhbGxiYWNrTmFtZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2Vcblx0XHRcdGlmICggcmVzcG9uc2VDb250YWluZXIgJiYgaXNGdW5jdGlvbiggb3ZlcndyaXR0ZW4gKSApIHtcblx0XHRcdFx0b3ZlcndyaXR0ZW4oIHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3JpdHRlbiA9IHVuZGVmaW5lZDtcblx0XHR9ICk7XG5cblx0XHQvLyBEZWxlZ2F0ZSB0byBzY3JpcHRcblx0XHRyZXR1cm4gXCJzY3JpcHRcIjtcblx0fVxufSApO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBTYWZhcmkgOCBvbmx5XG4vLyBJbiBTYWZhcmkgOCBkb2N1bWVudHMgY3JlYXRlZCB2aWEgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50XG4vLyBjb2xsYXBzZSBzaWJsaW5nIGZvcm1zOiB0aGUgc2Vjb25kIG9uZSBiZWNvbWVzIGEgY2hpbGQgb2YgdGhlIGZpcnN0IG9uZS5cbi8vIEJlY2F1c2Ugb2YgdGhhdCwgdGhpcyBzZWN1cml0eSBtZWFzdXJlIGhhcyB0byBiZSBkaXNhYmxlZCBpbiBTYWZhcmkgOC5cbi8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzczMzdcbnN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ID0gKCBmdW5jdGlvbigpIHtcblx0dmFyIGJvZHkgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKS5ib2R5O1xuXHRib2R5LmlubmVySFRNTCA9IFwiPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT5cIjtcblx0cmV0dXJuIGJvZHkuY2hpbGROb2Rlcy5sZW5ndGggPT09IDI7XG59ICkoKTtcblxuXG4vLyBBcmd1bWVudCBcImRhdGFcIiBzaG91bGQgYmUgc3RyaW5nIG9mIGh0bWxcbi8vIGNvbnRleHQgKG9wdGlvbmFsKTogSWYgc3BlY2lmaWVkLCB0aGUgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkIGluIHRoaXMgY29udGV4dCxcbi8vIGRlZmF1bHRzIHRvIGRvY3VtZW50XG4vLyBrZWVwU2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nXG5qUXVlcnkucGFyc2VIVE1MID0gZnVuY3Rpb24oIGRhdGEsIGNvbnRleHQsIGtlZXBTY3JpcHRzICkge1xuXHRpZiAoIHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRrZWVwU2NyaXB0cyA9IGNvbnRleHQ7XG5cdFx0Y29udGV4dCA9IGZhbHNlO1xuXHR9XG5cblx0dmFyIGJhc2UsIHBhcnNlZCwgc2NyaXB0cztcblxuXHRpZiAoICFjb250ZXh0ICkge1xuXG5cdFx0Ly8gU3RvcCBzY3JpcHRzIG9yIGlubGluZSBldmVudCBoYW5kbGVycyBmcm9tIGJlaW5nIGV4ZWN1dGVkIGltbWVkaWF0ZWx5XG5cdFx0Ly8gYnkgdXNpbmcgZG9jdW1lbnQuaW1wbGVtZW50YXRpb25cblx0XHRpZiAoIHN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ICkge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApO1xuXG5cdFx0XHQvLyBTZXQgdGhlIGJhc2UgaHJlZiBmb3IgdGhlIGNyZWF0ZWQgZG9jdW1lbnRcblx0XHRcdC8vIHNvIGFueSBwYXJzZWQgZWxlbWVudHMgd2l0aCBVUkxzXG5cdFx0XHQvLyBhcmUgYmFzZWQgb24gdGhlIGRvY3VtZW50J3MgVVJMIChnaC0yOTY1KVxuXHRcdFx0YmFzZSA9IGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJiYXNlXCIgKTtcblx0XHRcdGJhc2UuaHJlZiA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWY7XG5cdFx0XHRjb250ZXh0LmhlYWQuYXBwZW5kQ2hpbGQoIGJhc2UgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50O1xuXHRcdH1cblx0fVxuXG5cdHBhcnNlZCA9IHJzaW5nbGVUYWcuZXhlYyggZGF0YSApO1xuXHRzY3JpcHRzID0gIWtlZXBTY3JpcHRzICYmIFtdO1xuXG5cdC8vIFNpbmdsZSB0YWdcblx0aWYgKCBwYXJzZWQgKSB7XG5cdFx0cmV0dXJuIFsgY29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbIDEgXSApIF07XG5cdH1cblxuXHRwYXJzZWQgPSBidWlsZEZyYWdtZW50KCBbIGRhdGEgXSwgY29udGV4dCwgc2NyaXB0cyApO1xuXG5cdGlmICggc2NyaXB0cyAmJiBzY3JpcHRzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkoIHNjcmlwdHMgKS5yZW1vdmUoKTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBwYXJzZWQuY2hpbGROb2RlcyApO1xufTtcblxuXG4vKipcbiAqIExvYWQgYSB1cmwgaW50byBhIHBhZ2VcbiAqL1xualF1ZXJ5LmZuLmxvYWQgPSBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkge1xuXHR2YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLFxuXHRcdHNlbGYgPSB0aGlzLFxuXHRcdG9mZiA9IHVybC5pbmRleE9mKCBcIiBcIiApO1xuXG5cdGlmICggb2ZmID4gLTEgKSB7XG5cdFx0c2VsZWN0b3IgPSBzdHJpcEFuZENvbGxhcHNlKCB1cmwuc2xpY2UoIG9mZiApICk7XG5cdFx0dXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTtcblx0fVxuXG5cdC8vIElmIGl0J3MgYSBmdW5jdGlvblxuXHRpZiAoIGlzRnVuY3Rpb24oIHBhcmFtcyApICkge1xuXG5cdFx0Ly8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2tcblx0XHRjYWxsYmFjayA9IHBhcmFtcztcblx0XHRwYXJhbXMgPSB1bmRlZmluZWQ7XG5cblx0Ly8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZ1xuXHR9IGVsc2UgaWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gXCJvYmplY3RcIiApIHtcblx0XHR0eXBlID0gXCJQT1NUXCI7XG5cdH1cblxuXHQvLyBJZiB3ZSBoYXZlIGVsZW1lbnRzIHRvIG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVzdFxuXHRpZiAoIHNlbGYubGVuZ3RoID4gMCApIHtcblx0XHRqUXVlcnkuYWpheCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cblx0XHRcdC8vIElmIFwidHlwZVwiIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCwgdGhlbiBcIkdFVFwiIG1ldGhvZCB3aWxsIGJlIHVzZWQuXG5cdFx0XHQvLyBNYWtlIHZhbHVlIG9mIHRoaXMgZmllbGQgZXhwbGljaXQgc2luY2Vcblx0XHRcdC8vIHVzZXIgY2FuIG92ZXJyaWRlIGl0IHRocm91Z2ggYWpheFNldHVwIG1ldGhvZFxuXHRcdFx0dHlwZTogdHlwZSB8fCBcIkdFVFwiLFxuXHRcdFx0ZGF0YVR5cGU6IFwiaHRtbFwiLFxuXHRcdFx0ZGF0YTogcGFyYW1zXG5cdFx0fSApLmRvbmUoIGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7XG5cblx0XHRcdC8vIFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFja1xuXHRcdFx0cmVzcG9uc2UgPSBhcmd1bWVudHM7XG5cblx0XHRcdHNlbGYuaHRtbCggc2VsZWN0b3IgP1xuXG5cdFx0XHRcdC8vIElmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZCwgbG9jYXRlIHRoZSByaWdodCBlbGVtZW50cyBpbiBhIGR1bW15IGRpdlxuXHRcdFx0XHQvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnNcblx0XHRcdFx0alF1ZXJ5KCBcIjxkaXY+XCIgKS5hcHBlbmQoIGpRdWVyeS5wYXJzZUhUTUwoIHJlc3BvbnNlVGV4dCApICkuZmluZCggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHVzZSB0aGUgZnVsbCByZXN1bHRcblx0XHRcdFx0cmVzcG9uc2VUZXh0ICk7XG5cblx0XHQvLyBJZiB0aGUgcmVxdWVzdCBzdWNjZWVkcywgdGhpcyBmdW5jdGlvbiBnZXRzIFwiZGF0YVwiLCBcInN0YXR1c1wiLCBcImpxWEhSXCJcblx0XHQvLyBidXQgdGhleSBhcmUgaWdub3JlZCBiZWNhdXNlIHJlc3BvbnNlIHdhcyBzZXQgYWJvdmUuXG5cdFx0Ly8gSWYgaXQgZmFpbHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImpxWEhSXCIsIFwic3RhdHVzXCIsIFwiZXJyb3JcIlxuXHRcdH0gKS5hbHdheXMoIGNhbGxiYWNrICYmIGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzICkge1xuXHRcdFx0c2VsZi5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y2FsbGJhY2suYXBwbHkoIHRoaXMsIHJlc3BvbnNlIHx8IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0gKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cblxuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuIGpRdWVyeS5ncmVwKCBqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW0gPT09IGZuLmVsZW07XG5cdH0gKS5sZW5ndGg7XG59O1xuXG5cblxuXG5qUXVlcnkub2Zmc2V0ID0ge1xuXHRzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkge1xuXHRcdHZhciBjdXJQb3NpdGlvbiwgY3VyTGVmdCwgY3VyQ1NTVG9wLCBjdXJUb3AsIGN1ck9mZnNldCwgY3VyQ1NTTGVmdCwgY2FsY3VsYXRlUG9zaXRpb24sXG5cdFx0XHRwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApLFxuXHRcdFx0Y3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLFxuXHRcdFx0cHJvcHMgPSB7fTtcblxuXHRcdC8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW1cblx0XHRpZiAoIHBvc2l0aW9uID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0ZWxlbS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0XHR9XG5cblx0XHRjdXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpO1xuXHRcdGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwidG9wXCIgKTtcblx0XHRjdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJsZWZ0XCIgKTtcblx0XHRjYWxjdWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJmaXhlZFwiICkgJiZcblx0XHRcdCggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoIFwiYXV0b1wiICkgPiAtMTtcblxuXHRcdC8vIE5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYgZWl0aGVyXG5cdFx0Ly8gdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkXG5cdFx0aWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHtcblx0XHRcdGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpO1xuXHRcdFx0Y3VyVG9wID0gY3VyUG9zaXRpb24udG9wO1xuXHRcdFx0Y3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyVG9wID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDtcblx0XHRcdGN1ckxlZnQgPSBwYXJzZUZsb2F0KCBjdXJDU1NMZWZ0ICkgfHwgMDtcblx0XHR9XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHtcblxuXHRcdFx0Ly8gVXNlIGpRdWVyeS5leHRlbmQgaGVyZSB0byBhbGxvdyBtb2RpZmljYXRpb24gb2YgY29vcmRpbmF0ZXMgYXJndW1lbnQgKGdoLTE4NDgpXG5cdFx0XHRvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyT2Zmc2V0ICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wO1xuXHRcdH1cblx0XHRpZiAoIG9wdGlvbnMubGVmdCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7XG5cdFx0fVxuXG5cdFx0aWYgKCBcInVzaW5nXCIgaW4gb3B0aW9ucyApIHtcblx0XHRcdG9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJFbGVtLmNzcyggcHJvcHMgKTtcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHQvLyBvZmZzZXQoKSByZWxhdGVzIGFuIGVsZW1lbnQncyBib3JkZXIgYm94IHRvIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHRcdC8vIFByZXNlcnZlIGNoYWluaW5nIGZvciBzZXR0ZXJcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0dGhpcyA6XG5cdFx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTtcblx0XHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHZhciByZWN0LCB3aW4sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gemVyb3MgZm9yIGRpc2Nvbm5lY3RlZCBhbmQgaGlkZGVuIChkaXNwbGF5OiBub25lKSBlbGVtZW50cyAoZ2gtMjMxMClcblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhXG5cdFx0Ly8gZGlzY29ubmVjdGVkIG5vZGUgaW4gSUUgdGhyb3dzIGFuIGVycm9yXG5cdFx0aWYgKCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9O1xuXHRcdH1cblxuXHRcdC8vIEdldCBkb2N1bWVudC1yZWxhdGl2ZSBwb3NpdGlvbiBieSBhZGRpbmcgdmlld3BvcnQgc2Nyb2xsIHRvIHZpZXdwb3J0LXJlbGF0aXZlIGdCQ1Jcblx0XHRyZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHR3aW4gPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogcmVjdC50b3AgKyB3aW4ucGFnZVlPZmZzZXQsXG5cdFx0XHRsZWZ0OiByZWN0LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXRcblx0XHR9O1xuXHR9LFxuXG5cdC8vIHBvc2l0aW9uKCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgbWFyZ2luIGJveCB0byBpdHMgb2Zmc2V0IHBhcmVudCdzIHBhZGRpbmcgYm94XG5cdC8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGJlaGF2aW9yIG9mIENTUyBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xuXHRwb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhdGhpc1sgMCBdICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwgZG9jLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdHBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cblx0XHQvLyBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gdGhlIHZpZXdwb3J0LCB3aGljaCBpdHNlbGYgYWx3YXlzIGhhcyB6ZXJvIG9mZnNldFxuXHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICkgPT09IFwiZml4ZWRcIiApIHtcblxuXHRcdFx0Ly8gQXNzdW1lIHBvc2l0aW9uOmZpeGVkIGltcGxpZXMgYXZhaWxhYmlsaXR5IG9mIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuXHRcdFx0b2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvZmZzZXQgPSB0aGlzLm9mZnNldCgpO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB0aGUgKnJlYWwqIG9mZnNldCBwYXJlbnQsIHdoaWNoIGNhbiBiZSB0aGUgZG9jdW1lbnQgb3IgaXRzIHJvb3QgZWxlbWVudFxuXHRcdFx0Ly8gd2hlbiBhIHN0YXRpY2FsbHkgcG9zaXRpb25lZCBlbGVtZW50IGlzIGlkZW50aWZpZWRcblx0XHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHRcdG9mZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50IHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJlxuXHRcdFx0XHQoIG9mZnNldFBhcmVudCA9PT0gZG9jLmJvZHkgfHwgb2Zmc2V0UGFyZW50ID09PSBkb2MuZG9jdW1lbnRFbGVtZW50ICkgJiZcblx0XHRcdFx0alF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblxuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGlmICggb2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudCAhPT0gZWxlbSAmJiBvZmZzZXRQYXJlbnQubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgYm9yZGVycyBpbnRvIGl0cyBvZmZzZXQsIHNpbmNlIHRoZXkgYXJlIG91dHNpZGUgaXRzIGNvbnRlbnQgb3JpZ2luXG5cdFx0XHRcdHBhcmVudE9mZnNldCA9IGpRdWVyeSggb2Zmc2V0UGFyZW50ICkub2Zmc2V0KCk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC50b3AgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlclRvcFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LmxlZnQgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlckxlZnRXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2luc1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5Ub3BcIiwgdHJ1ZSApLFxuXHRcdFx0bGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luTGVmdFwiLCB0cnVlIClcblx0XHR9O1xuXHR9LFxuXG5cdC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuXHQvLyAxKSBGb3IgdGhlIGVsZW1lbnQgaW5zaWRlIHRoZSBpZnJhbWUgd2l0aG91dCBvZmZzZXRQYXJlbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuXG5cdC8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUgcGFyZW50IHdpbmRvd1xuXHQvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50XG5cdC8vIDMpIEZvciBib2R5IG9yIGh0bWwgZWxlbWVudCwgaS5lLiBpbiBjYXNlIG9mIHRoZSBodG1sIG5vZGUgLSBpdCB3aWxsIHJldHVybiBpdHNlbGZcblx0Ly9cblx0Ly8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzXG5cdC8vIGFuZCBtaWdodCBiZSBjb25zaWRlcmVkIGFzIG1vcmUgcHJlZmVyYWJsZSByZXN1bHRzLlxuXHQvL1xuXHQvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZVxuXHRvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7XG5cblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50O1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG4vLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6IFwicGFnZVhPZmZzZXRcIiwgc2Nyb2xsVG9wOiBcInBhZ2VZT2Zmc2V0XCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHtcblx0dmFyIHRvcCA9IFwicGFnZVlPZmZzZXRcIiA9PT0gcHJvcDtcblxuXHRqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7XG5cblx0XHRcdC8vIENvYWxlc2NlIGRvY3VtZW50cyBhbmQgd2luZG93c1xuXHRcdFx0dmFyIHdpbjtcblx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblx0XHRcdFx0d2luID0gZWxlbTtcblx0XHRcdH0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW0uZGVmYXVsdFZpZXc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiB3aW4gPyB3aW5bIHByb3AgXSA6IGVsZW1bIG1ldGhvZCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHdpbiApIHtcblx0XHRcdFx0d2luLnNjcm9sbFRvKFxuXHRcdFx0XHRcdCF0b3AgPyB2YWwgOiB3aW4ucGFnZVhPZmZzZXQsXG5cdFx0XHRcdFx0dG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0XG5cdFx0XHRcdCk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1bIG1ldGhvZCBdID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH07XG59ICk7XG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA8PTcgLSA5LjEsIENocm9tZSA8PTM3IC0gNDlcbi8vIEFkZCB0aGUgdG9wL2xlZnQgY3NzSG9va3MgdXNpbmcgalF1ZXJ5LmZuLnBvc2l0aW9uXG4vLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODRcbi8vIEJsaW5rIGJ1ZzogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTg5MzQ3XG4vLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0O1xuLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmVcbmpRdWVyeS5lYWNoKCBbIFwidG9wXCIsIFwibGVmdFwiIF0sIGZ1bmN0aW9uKCBfaSwgcHJvcCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbixcblx0XHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0XHRjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApO1xuXG5cdFx0XHRcdC8vIElmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNldFxuXHRcdFx0XHRyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArIFwicHhcIiA6XG5cdFx0XHRcdFx0Y29tcHV0ZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufSApO1xuXG5cbi8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiBcImhlaWdodFwiLCBXaWR0aDogXCJ3aWR0aFwiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkge1xuXHRqUXVlcnkuZWFjaCgge1xuXHRcdHBhZGRpbmc6IFwiaW5uZXJcIiArIG5hbWUsXG5cdFx0Y29udGVudDogdHlwZSxcblx0XHRcIlwiOiBcIm91dGVyXCIgKyBuYW1lXG5cdH0sIGZ1bmN0aW9uKCBkZWZhdWx0RXh0cmEsIGZ1bmNOYW1lICkge1xuXG5cdFx0Ly8gTWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoXG5cdFx0alF1ZXJ5LmZuWyBmdW5jTmFtZSBdID0gZnVuY3Rpb24oIG1hcmdpbiwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgY2hhaW5hYmxlID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRFeHRyYSB8fCB0eXBlb2YgbWFyZ2luICE9PSBcImJvb2xlYW5cIiApLFxuXHRcdFx0XHRleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/IFwibWFyZ2luXCIgOiBcImJvcmRlclwiICk7XG5cblx0XHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIGRvYztcblxuXHRcdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyAkKCB3aW5kb3cgKS5vdXRlcldpZHRoL0hlaWdodCByZXR1cm4gdy9oIGluY2x1ZGluZyBzY3JvbGxiYXJzIChnaC0xNzI5KVxuXHRcdFx0XHRcdHJldHVybiBmdW5jTmFtZS5pbmRleE9mKCBcIm91dGVyXCIgKSA9PT0gMCA/XG5cdFx0XHRcdFx0XHRlbGVtWyBcImlubmVyXCIgKyBuYW1lIF0gOlxuXHRcdFx0XHRcdFx0ZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIFwiY2xpZW50XCIgKyBuYW1lIF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDtcblxuXHRcdFx0XHRcdC8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgvSGVpZ2h0XSBvciBjbGllbnRbV2lkdGgvSGVpZ2h0XSxcblx0XHRcdFx0XHQvLyB3aGljaGV2ZXIgaXMgZ3JlYXRlc3Rcblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwic2Nyb2xsXCIgKyBuYW1lIF0sIGRvY1sgXCJzY3JvbGxcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJvZmZzZXRcIiArIG5hbWUgXSwgZG9jWyBcIm9mZnNldFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZG9jWyBcImNsaWVudFwiICsgbmFtZSBdXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblxuXHRcdFx0XHRcdC8vIEdldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNlRmxvYXRcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCBleHRyYSApIDpcblxuXHRcdFx0XHRcdC8vIFNldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnRcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApO1xuXHRcdFx0fSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUgKTtcblx0XHR9O1xuXHR9ICk7XG59ICk7XG5cblxualF1ZXJ5LmVhY2goIFtcblx0XCJhamF4U3RhcnRcIixcblx0XCJhamF4U3RvcFwiLFxuXHRcImFqYXhDb21wbGV0ZVwiLFxuXHRcImFqYXhFcnJvclwiLFxuXHRcImFqYXhTdWNjZXNzXCIsXG5cdFwiYWpheFNlbmRcIlxuXSwgZnVuY3Rpb24oIF9pLCB0eXBlICkge1xuXHRqUXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZSwgZm4gKTtcblx0fTtcbn0gKTtcblxuXG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdGJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub2ZmKCB0eXBlcywgbnVsbCwgZm4gKTtcblx0fSxcblxuXHRkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7XG5cblx0XHQvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZuXSApXG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgP1xuXHRcdFx0dGhpcy5vZmYoIHNlbGVjdG9yLCBcIioqXCIgKSA6XG5cdFx0XHR0aGlzLm9mZiggdHlwZXMsIHNlbGVjdG9yIHx8IFwiKipcIiwgZm4gKTtcblx0fSxcblxuXHRob3ZlcjogZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7XG5cdFx0cmV0dXJuIHRoaXMubW91c2VlbnRlciggZm5PdmVyICkubW91c2VsZWF2ZSggZm5PdXQgfHwgZm5PdmVyICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goXG5cdCggXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBcIiArXG5cdFwibW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgXCIgK1xuXHRcImNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgY29udGV4dG1lbnVcIiApLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cblx0XHQvLyBIYW5kbGUgZXZlbnQgYmluZGluZ1xuXHRcdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkge1xuXHRcdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID9cblx0XHRcdFx0dGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6XG5cdFx0XHRcdHRoaXMudHJpZ2dlciggbmFtZSApO1xuXHRcdH07XG5cdH1cbik7XG5cblxuXG5cbi8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seVxuLy8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQXG52YXIgcnRyaW0gPSAvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2c7XG5cbi8vIEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueVxuLy8gYXJndW1lbnRzLlxuLy8galF1ZXJ5LnByb3h5IGlzIGRlcHJlY2F0ZWQgdG8gcHJvbW90ZSBzdGFuZGFyZHMgKHNwZWNpZmljYWxseSBGdW5jdGlvbiNiaW5kKVxuLy8gSG93ZXZlciwgaXQgaXMgbm90IHNsYXRlZCBmb3IgcmVtb3ZhbCBhbnkgdGltZSBzb29uXG5qUXVlcnkucHJveHkgPSBmdW5jdGlvbiggZm4sIGNvbnRleHQgKSB7XG5cdHZhciB0bXAsIGFyZ3MsIHByb3h5O1xuXG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0dG1wID0gZm5bIGNvbnRleHQgXTtcblx0XHRjb250ZXh0ID0gZm47XG5cdFx0Zm4gPSB0bXA7XG5cdH1cblxuXHQvLyBRdWljayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlY1xuXHQvLyB0aGlzIHRocm93cyBhIFR5cGVFcnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1cm4gdW5kZWZpbmVkLlxuXHRpZiAoICFpc0Z1bmN0aW9uKCBmbiApICkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBTaW11bGF0ZWQgYmluZFxuXHRhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAyICk7XG5cdHByb3h5ID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0IHx8IHRoaXMsIGFyZ3MuY29uY2F0KCBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7XG5cdH07XG5cblx0Ly8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkXG5cdHByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrO1xuXG5cdHJldHVybiBwcm94eTtcbn07XG5cbmpRdWVyeS5ob2xkUmVhZHkgPSBmdW5jdGlvbiggaG9sZCApIHtcblx0aWYgKCBob2xkICkge1xuXHRcdGpRdWVyeS5yZWFkeVdhaXQrKztcblx0fSBlbHNlIHtcblx0XHRqUXVlcnkucmVhZHkoIHRydWUgKTtcblx0fVxufTtcbmpRdWVyeS5pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmpRdWVyeS5wYXJzZUpTT04gPSBKU09OLnBhcnNlO1xualF1ZXJ5Lm5vZGVOYW1lID0gbm9kZU5hbWU7XG5qUXVlcnkuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5qUXVlcnkuaXNXaW5kb3cgPSBpc1dpbmRvdztcbmpRdWVyeS5jYW1lbENhc2UgPSBjYW1lbENhc2U7XG5qUXVlcnkudHlwZSA9IHRvVHlwZTtcblxualF1ZXJ5Lm5vdyA9IERhdGUubm93O1xuXG5qUXVlcnkuaXNOdW1lcmljID0gZnVuY3Rpb24oIG9iaiApIHtcblxuXHQvLyBBcyBvZiBqUXVlcnkgMy4wLCBpc051bWVyaWMgaXMgbGltaXRlZCB0b1xuXHQvLyBzdHJpbmdzIGFuZCBudW1iZXJzIChwcmltaXRpdmVzIG9yIG9iamVjdHMpXG5cdC8vIHRoYXQgY2FuIGJlIGNvZXJjZWQgdG8gZmluaXRlIG51bWJlcnMgKGdoLTI2NjIpXG5cdHZhciB0eXBlID0galF1ZXJ5LnR5cGUoIG9iaiApO1xuXHRyZXR1cm4gKCB0eXBlID09PSBcIm51bWJlclwiIHx8IHR5cGUgPT09IFwic3RyaW5nXCIgKSAmJlxuXG5cdFx0Ly8gcGFyc2VGbG9hdCBOYU5zIG51bWVyaWMtY2FzdCBmYWxzZSBwb3NpdGl2ZXMgKFwiXCIpXG5cdFx0Ly8gLi4uYnV0IG1pc2ludGVycHJldHMgbGVhZGluZy1udW1iZXIgc3RyaW5ncywgcGFydGljdWxhcmx5IGhleCBsaXRlcmFscyAoXCIweC4uLlwiKVxuXHRcdC8vIHN1YnRyYWN0aW9uIGZvcmNlcyBpbmZpbml0aWVzIHRvIE5hTlxuXHRcdCFpc05hTiggb2JqIC0gcGFyc2VGbG9hdCggb2JqICkgKTtcbn07XG5cbmpRdWVyeS50cmltID0gZnVuY3Rpb24oIHRleHQgKSB7XG5cdHJldHVybiB0ZXh0ID09IG51bGwgP1xuXHRcdFwiXCIgOlxuXHRcdCggdGV4dCArIFwiXCIgKS5yZXBsYWNlKCBydHJpbSwgXCJcIiApO1xufTtcblxuXG5cbi8vIFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlclxuLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwgYnV0IG5vdCB2aWEgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdFxuLy8gdW5kZXJzdGFuZHMgYW5vbnltb3VzIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0XG4vLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlXG4vLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2Vcbi8vIGZpbGUgbmFtZS4gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50c1xuLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLlxuXG4vLyBOb3RlIHRoYXQgZm9yIG1heGltdW0gcG9ydGFiaWxpdHksIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZFxuLy8gZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBpZiBhblxuLy8gQU1EIGxvYWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVjaWFsIGNhc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcy93aWtpL1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtpLWFub25cblxuaWYgKCB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCApIHtcblx0ZGVmaW5lKCBcImpxdWVyeVwiLCBbXSwgZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeTtcblx0fSApO1xufVxuXG5cblxuXG52YXJcblxuXHQvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0X2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksXG5cblx0Ly8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0XyQgPSB3aW5kb3cuJDtcblxualF1ZXJ5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiggZGVlcCApIHtcblx0aWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy4kID0gXyQ7XG5cdH1cblxuXHRpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5O1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeTtcbn07XG5cbi8vIEV4cG9zZSBqUXVlcnkgYW5kICQgaWRlbnRpZmllcnMsIGV2ZW4gaW4gQU1EXG4vLyAoIzcxMDIjY29tbWVudDoxMCwgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC81NTcpXG4vLyBhbmQgQ29tbW9uSlMgZm9yIGJyb3dzZXIgZW11bGF0b3JzICgjMTM1NjYpXG5pZiAoIHR5cGVvZiBub0dsb2JhbCA9PT0gXCJ1bmRlZmluZWRcIiApIHtcblx0d2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5O1xufVxuXG5cblxuXG5yZXR1cm4galF1ZXJ5O1xufSApO1xuIiwiLyohIGpRdWVyeSBVSSAtIHYxLjEyLjEgLSAyMDE2LTA5LTE0XG4qIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiogSW5jbHVkZXM6IHdpZGdldC5qcywgcG9zaXRpb24uanMsIGRhdGEuanMsIGRpc2FibGUtc2VsZWN0aW9uLmpzLCBlZmZlY3QuanMsIGVmZmVjdHMvZWZmZWN0LWJsaW5kLmpzLCBlZmZlY3RzL2VmZmVjdC1ib3VuY2UuanMsIGVmZmVjdHMvZWZmZWN0LWNsaXAuanMsIGVmZmVjdHMvZWZmZWN0LWRyb3AuanMsIGVmZmVjdHMvZWZmZWN0LWV4cGxvZGUuanMsIGVmZmVjdHMvZWZmZWN0LWZhZGUuanMsIGVmZmVjdHMvZWZmZWN0LWZvbGQuanMsIGVmZmVjdHMvZWZmZWN0LWhpZ2hsaWdodC5qcywgZWZmZWN0cy9lZmZlY3QtcHVmZi5qcywgZWZmZWN0cy9lZmZlY3QtcHVsc2F0ZS5qcywgZWZmZWN0cy9lZmZlY3Qtc2NhbGUuanMsIGVmZmVjdHMvZWZmZWN0LXNoYWtlLmpzLCBlZmZlY3RzL2VmZmVjdC1zaXplLmpzLCBlZmZlY3RzL2VmZmVjdC1zbGlkZS5qcywgZWZmZWN0cy9lZmZlY3QtdHJhbnNmZXIuanMsIGZvY3VzYWJsZS5qcywgZm9ybS1yZXNldC1taXhpbi5qcywganF1ZXJ5LTEtNy5qcywga2V5Y29kZS5qcywgbGFiZWxzLmpzLCBzY3JvbGwtcGFyZW50LmpzLCB0YWJiYWJsZS5qcywgdW5pcXVlLWlkLmpzLCB3aWRnZXRzL2FjY29yZGlvbi5qcywgd2lkZ2V0cy9hdXRvY29tcGxldGUuanMsIHdpZGdldHMvYnV0dG9uLmpzLCB3aWRnZXRzL2NoZWNrYm94cmFkaW8uanMsIHdpZGdldHMvY29udHJvbGdyb3VwLmpzLCB3aWRnZXRzL2RhdGVwaWNrZXIuanMsIHdpZGdldHMvZGlhbG9nLmpzLCB3aWRnZXRzL2RyYWdnYWJsZS5qcywgd2lkZ2V0cy9kcm9wcGFibGUuanMsIHdpZGdldHMvbWVudS5qcywgd2lkZ2V0cy9tb3VzZS5qcywgd2lkZ2V0cy9wcm9ncmVzc2Jhci5qcywgd2lkZ2V0cy9yZXNpemFibGUuanMsIHdpZGdldHMvc2VsZWN0YWJsZS5qcywgd2lkZ2V0cy9zZWxlY3RtZW51LmpzLCB3aWRnZXRzL3NsaWRlci5qcywgd2lkZ2V0cy9zb3J0YWJsZS5qcywgd2lkZ2V0cy9zcGlubmVyLmpzLCB3aWRnZXRzL3RhYnMuanMsIHdpZGdldHMvdG9vbHRpcC5qc1xuKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yczsgTGljZW5zZWQgTUlUICovXG5cbihmdW5jdGlvbiggZmFjdG9yeSApIHtcblx0aWYgKCB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCApIHtcblxuXHRcdC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cblx0XHRkZWZpbmUoWyBcImpxdWVyeVwiIF0sIGZhY3RvcnkgKTtcblx0fSBlbHNlIHtcblxuXHRcdC8vIEJyb3dzZXIgZ2xvYmFsc1xuXHRcdGZhY3RvcnkoIGpRdWVyeSApO1xuXHR9XG59KGZ1bmN0aW9uKCAkICkge1xuXG4kLnVpID0gJC51aSB8fCB7fTtcblxudmFyIHZlcnNpb24gPSAkLnVpLnZlcnNpb24gPSBcIjEuMTIuMVwiO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIFdpZGdldCAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogV2lkZ2V0XG4vLz4+Z3JvdXA6IENvcmVcbi8vPj5kZXNjcmlwdGlvbjogUHJvdmlkZXMgYSBmYWN0b3J5IGZvciBjcmVhdGluZyBzdGF0ZWZ1bCB3aWRnZXRzIHdpdGggYSBjb21tb24gQVBJLlxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL2pRdWVyeS53aWRnZXQvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vd2lkZ2V0L1xuXG5cblxudmFyIHdpZGdldFV1aWQgPSAwO1xudmFyIHdpZGdldFNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG4kLmNsZWFuRGF0YSA9ICggZnVuY3Rpb24oIG9yaWcgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cdFx0dmFyIGV2ZW50cywgZWxlbSwgaTtcblx0XHRmb3IgKCBpID0gMDsgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdHRyeSB7XG5cblx0XHRcdFx0Ly8gT25seSB0cmlnZ2VyIHJlbW92ZSB3aGVuIG5lY2Vzc2FyeSB0byBzYXZlIHRpbWVcblx0XHRcdFx0ZXZlbnRzID0gJC5fZGF0YSggZWxlbSwgXCJldmVudHNcIiApO1xuXHRcdFx0XHRpZiAoIGV2ZW50cyAmJiBldmVudHMucmVtb3ZlICkge1xuXHRcdFx0XHRcdCQoIGVsZW0gKS50cmlnZ2VySGFuZGxlciggXCJyZW1vdmVcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIEh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzgyMzVcblx0XHRcdH0gY2F0Y2ggKCBlICkge31cblx0XHR9XG5cdFx0b3JpZyggZWxlbXMgKTtcblx0fTtcbn0gKSggJC5jbGVhbkRhdGEgKTtcblxuJC53aWRnZXQgPSBmdW5jdGlvbiggbmFtZSwgYmFzZSwgcHJvdG90eXBlICkge1xuXHR2YXIgZXhpc3RpbmdDb25zdHJ1Y3RvciwgY29uc3RydWN0b3IsIGJhc2VQcm90b3R5cGU7XG5cblx0Ly8gUHJveGllZFByb3RvdHlwZSBhbGxvd3MgdGhlIHByb3ZpZGVkIHByb3RvdHlwZSB0byByZW1haW4gdW5tb2RpZmllZFxuXHQvLyBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGFzIGEgbWl4aW4gZm9yIG11bHRpcGxlIHdpZGdldHMgKCM4ODc2KVxuXHR2YXIgcHJveGllZFByb3RvdHlwZSA9IHt9O1xuXG5cdHZhciBuYW1lc3BhY2UgPSBuYW1lLnNwbGl0KCBcIi5cIiApWyAwIF07XG5cdG5hbWUgPSBuYW1lLnNwbGl0KCBcIi5cIiApWyAxIF07XG5cdHZhciBmdWxsTmFtZSA9IG5hbWVzcGFjZSArIFwiLVwiICsgbmFtZTtcblxuXHRpZiAoICFwcm90b3R5cGUgKSB7XG5cdFx0cHJvdG90eXBlID0gYmFzZTtcblx0XHRiYXNlID0gJC5XaWRnZXQ7XG5cdH1cblxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIHByb3RvdHlwZSApICkge1xuXHRcdHByb3RvdHlwZSA9ICQuZXh0ZW5kLmFwcGx5KCBudWxsLCBbIHt9IF0uY29uY2F0KCBwcm90b3R5cGUgKSApO1xuXHR9XG5cblx0Ly8gQ3JlYXRlIHNlbGVjdG9yIGZvciBwbHVnaW5cblx0JC5leHByWyBcIjpcIiBdWyBmdWxsTmFtZS50b0xvd2VyQ2FzZSgpIF0gPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gISEkLmRhdGEoIGVsZW0sIGZ1bGxOYW1lICk7XG5cdH07XG5cblx0JFsgbmFtZXNwYWNlIF0gPSAkWyBuYW1lc3BhY2UgXSB8fCB7fTtcblx0ZXhpc3RpbmdDb25zdHJ1Y3RvciA9ICRbIG5hbWVzcGFjZSBdWyBuYW1lIF07XG5cdGNvbnN0cnVjdG9yID0gJFsgbmFtZXNwYWNlIF1bIG5hbWUgXSA9IGZ1bmN0aW9uKCBvcHRpb25zLCBlbGVtZW50ICkge1xuXG5cdFx0Ly8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IFwibmV3XCIga2V5d29yZFxuXHRcdGlmICggIXRoaXMuX2NyZWF0ZVdpZGdldCApIHtcblx0XHRcdHJldHVybiBuZXcgY29uc3RydWN0b3IoIG9wdGlvbnMsIGVsZW1lbnQgKTtcblx0XHR9XG5cblx0XHQvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgaW5pdGlhbGl6aW5nIGZvciBzaW1wbGUgaW5oZXJpdGFuY2Vcblx0XHQvLyBtdXN0IHVzZSBcIm5ld1wiIGtleXdvcmQgKHRoZSBjb2RlIGFib3ZlIGFsd2F5cyBwYXNzZXMgYXJncylcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHR0aGlzLl9jcmVhdGVXaWRnZXQoIG9wdGlvbnMsIGVsZW1lbnQgKTtcblx0XHR9XG5cdH07XG5cblx0Ly8gRXh0ZW5kIHdpdGggdGhlIGV4aXN0aW5nIGNvbnN0cnVjdG9yIHRvIGNhcnJ5IG92ZXIgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG5cdCQuZXh0ZW5kKCBjb25zdHJ1Y3RvciwgZXhpc3RpbmdDb25zdHJ1Y3Rvciwge1xuXHRcdHZlcnNpb246IHByb3RvdHlwZS52ZXJzaW9uLFxuXG5cdFx0Ly8gQ29weSB0aGUgb2JqZWN0IHVzZWQgdG8gY3JlYXRlIHRoZSBwcm90b3R5cGUgaW4gY2FzZSB3ZSBuZWVkIHRvXG5cdFx0Ly8gcmVkZWZpbmUgdGhlIHdpZGdldCBsYXRlclxuXHRcdF9wcm90bzogJC5leHRlbmQoIHt9LCBwcm90b3R5cGUgKSxcblxuXHRcdC8vIFRyYWNrIHdpZGdldHMgdGhhdCBpbmhlcml0IGZyb20gdGhpcyB3aWRnZXQgaW4gY2FzZSB0aGlzIHdpZGdldCBpc1xuXHRcdC8vIHJlZGVmaW5lZCBhZnRlciBhIHdpZGdldCBpbmhlcml0cyBmcm9tIGl0XG5cdFx0X2NoaWxkQ29uc3RydWN0b3JzOiBbXVxuXHR9ICk7XG5cblx0YmFzZVByb3RvdHlwZSA9IG5ldyBiYXNlKCk7XG5cblx0Ly8gV2UgbmVlZCB0byBtYWtlIHRoZSBvcHRpb25zIGhhc2ggYSBwcm9wZXJ0eSBkaXJlY3RseSBvbiB0aGUgbmV3IGluc3RhbmNlXG5cdC8vIG90aGVyd2lzZSB3ZSdsbCBtb2RpZnkgdGhlIG9wdGlvbnMgaGFzaCBvbiB0aGUgcHJvdG90eXBlIHRoYXQgd2UncmVcblx0Ly8gaW5oZXJpdGluZyBmcm9tXG5cdGJhc2VQcm90b3R5cGUub3B0aW9ucyA9ICQud2lkZ2V0LmV4dGVuZCgge30sIGJhc2VQcm90b3R5cGUub3B0aW9ucyApO1xuXHQkLmVhY2goIHByb3RvdHlwZSwgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkge1xuXHRcdGlmICggISQuaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHByb3hpZWRQcm90b3R5cGVbIHByb3AgXSA9IHZhbHVlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRwcm94aWVkUHJvdG90eXBlWyBwcm9wIF0gPSAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZnVuY3Rpb24gX3N1cGVyKCkge1xuXHRcdFx0XHRyZXR1cm4gYmFzZS5wcm90b3R5cGVbIHByb3AgXS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIF9zdXBlckFwcGx5KCBhcmdzICkge1xuXHRcdFx0XHRyZXR1cm4gYmFzZS5wcm90b3R5cGVbIHByb3AgXS5hcHBseSggdGhpcywgYXJncyApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBfX3N1cGVyID0gdGhpcy5fc3VwZXI7XG5cdFx0XHRcdHZhciBfX3N1cGVyQXBwbHkgPSB0aGlzLl9zdXBlckFwcGx5O1xuXHRcdFx0XHR2YXIgcmV0dXJuVmFsdWU7XG5cblx0XHRcdFx0dGhpcy5fc3VwZXIgPSBfc3VwZXI7XG5cdFx0XHRcdHRoaXMuX3N1cGVyQXBwbHkgPSBfc3VwZXJBcHBseTtcblxuXHRcdFx0XHRyZXR1cm5WYWx1ZSA9IHZhbHVlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblxuXHRcdFx0XHR0aGlzLl9zdXBlciA9IF9fc3VwZXI7XG5cdFx0XHRcdHRoaXMuX3N1cGVyQXBwbHkgPSBfX3N1cGVyQXBwbHk7XG5cblx0XHRcdFx0cmV0dXJuIHJldHVyblZhbHVlO1xuXHRcdFx0fTtcblx0XHR9ICkoKTtcblx0fSApO1xuXHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSAkLndpZGdldC5leHRlbmQoIGJhc2VQcm90b3R5cGUsIHtcblxuXHRcdC8vIFRPRE86IHJlbW92ZSBzdXBwb3J0IGZvciB3aWRnZXRFdmVudFByZWZpeFxuXHRcdC8vIGFsd2F5cyB1c2UgdGhlIG5hbWUgKyBhIGNvbG9uIGFzIHRoZSBwcmVmaXgsIGUuZy4sIGRyYWdnYWJsZTpzdGFydFxuXHRcdC8vIGRvbid0IHByZWZpeCBmb3Igd2lkZ2V0cyB0aGF0IGFyZW4ndCBET00tYmFzZWRcblx0XHR3aWRnZXRFdmVudFByZWZpeDogZXhpc3RpbmdDb25zdHJ1Y3RvciA/ICggYmFzZVByb3RvdHlwZS53aWRnZXRFdmVudFByZWZpeCB8fCBuYW1lICkgOiBuYW1lXG5cdH0sIHByb3hpZWRQcm90b3R5cGUsIHtcblx0XHRjb25zdHJ1Y3RvcjogY29uc3RydWN0b3IsXG5cdFx0bmFtZXNwYWNlOiBuYW1lc3BhY2UsXG5cdFx0d2lkZ2V0TmFtZTogbmFtZSxcblx0XHR3aWRnZXRGdWxsTmFtZTogZnVsbE5hbWVcblx0fSApO1xuXG5cdC8vIElmIHRoaXMgd2lkZ2V0IGlzIGJlaW5nIHJlZGVmaW5lZCB0aGVuIHdlIG5lZWQgdG8gZmluZCBhbGwgd2lkZ2V0cyB0aGF0XG5cdC8vIGFyZSBpbmhlcml0aW5nIGZyb20gaXQgYW5kIHJlZGVmaW5lIGFsbCBvZiB0aGVtIHNvIHRoYXQgdGhleSBpbmhlcml0IGZyb21cblx0Ly8gdGhlIG5ldyB2ZXJzaW9uIG9mIHRoaXMgd2lkZ2V0LiBXZSdyZSBlc3NlbnRpYWxseSB0cnlpbmcgdG8gcmVwbGFjZSBvbmVcblx0Ly8gbGV2ZWwgaW4gdGhlIHByb3RvdHlwZSBjaGFpbi5cblx0aWYgKCBleGlzdGluZ0NvbnN0cnVjdG9yICkge1xuXHRcdCQuZWFjaCggZXhpc3RpbmdDb25zdHJ1Y3Rvci5fY2hpbGRDb25zdHJ1Y3RvcnMsIGZ1bmN0aW9uKCBpLCBjaGlsZCApIHtcblx0XHRcdHZhciBjaGlsZFByb3RvdHlwZSA9IGNoaWxkLnByb3RvdHlwZTtcblxuXHRcdFx0Ly8gUmVkZWZpbmUgdGhlIGNoaWxkIHdpZGdldCB1c2luZyB0aGUgc2FtZSBwcm90b3R5cGUgdGhhdCB3YXNcblx0XHRcdC8vIG9yaWdpbmFsbHkgdXNlZCwgYnV0IGluaGVyaXQgZnJvbSB0aGUgbmV3IHZlcnNpb24gb2YgdGhlIGJhc2Vcblx0XHRcdCQud2lkZ2V0KCBjaGlsZFByb3RvdHlwZS5uYW1lc3BhY2UgKyBcIi5cIiArIGNoaWxkUHJvdG90eXBlLndpZGdldE5hbWUsIGNvbnN0cnVjdG9yLFxuXHRcdFx0XHRjaGlsZC5fcHJvdG8gKTtcblx0XHR9ICk7XG5cblx0XHQvLyBSZW1vdmUgdGhlIGxpc3Qgb2YgZXhpc3RpbmcgY2hpbGQgY29uc3RydWN0b3JzIGZyb20gdGhlIG9sZCBjb25zdHJ1Y3RvclxuXHRcdC8vIHNvIHRoZSBvbGQgY2hpbGQgY29uc3RydWN0b3JzIGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZFxuXHRcdGRlbGV0ZSBleGlzdGluZ0NvbnN0cnVjdG9yLl9jaGlsZENvbnN0cnVjdG9ycztcblx0fSBlbHNlIHtcblx0XHRiYXNlLl9jaGlsZENvbnN0cnVjdG9ycy5wdXNoKCBjb25zdHJ1Y3RvciApO1xuXHR9XG5cblx0JC53aWRnZXQuYnJpZGdlKCBuYW1lLCBjb25zdHJ1Y3RvciApO1xuXG5cdHJldHVybiBjb25zdHJ1Y3Rvcjtcbn07XG5cbiQud2lkZ2V0LmV4dGVuZCA9IGZ1bmN0aW9uKCB0YXJnZXQgKSB7XG5cdHZhciBpbnB1dCA9IHdpZGdldFNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMSApO1xuXHR2YXIgaW5wdXRJbmRleCA9IDA7XG5cdHZhciBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblx0dmFyIGtleTtcblx0dmFyIHZhbHVlO1xuXG5cdGZvciAoIDsgaW5wdXRJbmRleCA8IGlucHV0TGVuZ3RoOyBpbnB1dEluZGV4KysgKSB7XG5cdFx0Zm9yICgga2V5IGluIGlucHV0WyBpbnB1dEluZGV4IF0gKSB7XG5cdFx0XHR2YWx1ZSA9IGlucHV0WyBpbnB1dEluZGV4IF1bIGtleSBdO1xuXHRcdFx0aWYgKCBpbnB1dFsgaW5wdXRJbmRleCBdLmhhc093blByb3BlcnR5KCBrZXkgKSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdC8vIENsb25lIG9iamVjdHNcblx0XHRcdFx0aWYgKCAkLmlzUGxhaW5PYmplY3QoIHZhbHVlICkgKSB7XG5cdFx0XHRcdFx0dGFyZ2V0WyBrZXkgXSA9ICQuaXNQbGFpbk9iamVjdCggdGFyZ2V0WyBrZXkgXSApID9cblx0XHRcdFx0XHRcdCQud2lkZ2V0LmV4dGVuZCgge30sIHRhcmdldFsga2V5IF0sIHZhbHVlICkgOlxuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBleHRlbmQgc3RyaW5ncywgYXJyYXlzLCBldGMuIHdpdGggb2JqZWN0c1xuXHRcdFx0XHRcdFx0JC53aWRnZXQuZXh0ZW5kKCB7fSwgdmFsdWUgKTtcblxuXHRcdFx0XHQvLyBDb3B5IGV2ZXJ5dGhpbmcgZWxzZSBieSByZWZlcmVuY2Vcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0YXJnZXRbIGtleSBdID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbiQud2lkZ2V0LmJyaWRnZSA9IGZ1bmN0aW9uKCBuYW1lLCBvYmplY3QgKSB7XG5cdHZhciBmdWxsTmFtZSA9IG9iamVjdC5wcm90b3R5cGUud2lkZ2V0RnVsbE5hbWUgfHwgbmFtZTtcblx0JC5mblsgbmFtZSBdID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdFx0dmFyIGlzTWV0aG9kQ2FsbCA9IHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiO1xuXHRcdHZhciBhcmdzID0gd2lkZ2V0U2xpY2UuY2FsbCggYXJndW1lbnRzLCAxICk7XG5cdFx0dmFyIHJldHVyblZhbHVlID0gdGhpcztcblxuXHRcdGlmICggaXNNZXRob2RDYWxsICkge1xuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGFuIGVtcHR5IGNvbGxlY3Rpb24sIHdlIG5lZWQgdG8gaGF2ZSB0aGUgaW5zdGFuY2UgbWV0aG9kXG5cdFx0XHQvLyByZXR1cm4gdW5kZWZpbmVkIGluc3RlYWQgb2YgdGhlIGpRdWVyeSBpbnN0YW5jZVxuXHRcdFx0aWYgKCAhdGhpcy5sZW5ndGggJiYgb3B0aW9ucyA9PT0gXCJpbnN0YW5jZVwiICkge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIG1ldGhvZFZhbHVlO1xuXHRcdFx0XHRcdHZhciBpbnN0YW5jZSA9ICQuZGF0YSggdGhpcywgZnVsbE5hbWUgKTtcblxuXHRcdFx0XHRcdGlmICggb3B0aW9ucyA9PT0gXCJpbnN0YW5jZVwiICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuVmFsdWUgPSBpbnN0YW5jZTtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoICFpbnN0YW5jZSApIHtcblx0XHRcdFx0XHRcdHJldHVybiAkLmVycm9yKCBcImNhbm5vdCBjYWxsIG1ldGhvZHMgb24gXCIgKyBuYW1lICtcblx0XHRcdFx0XHRcdFx0XCIgcHJpb3IgdG8gaW5pdGlhbGl6YXRpb247IFwiICtcblx0XHRcdFx0XHRcdFx0XCJhdHRlbXB0ZWQgdG8gY2FsbCBtZXRob2QgJ1wiICsgb3B0aW9ucyArIFwiJ1wiICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCAhJC5pc0Z1bmN0aW9uKCBpbnN0YW5jZVsgb3B0aW9ucyBdICkgfHwgb3B0aW9ucy5jaGFyQXQoIDAgKSA9PT0gXCJfXCIgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gJC5lcnJvciggXCJubyBzdWNoIG1ldGhvZCAnXCIgKyBvcHRpb25zICsgXCInIGZvciBcIiArIG5hbWUgK1xuXHRcdFx0XHRcdFx0XHRcIiB3aWRnZXQgaW5zdGFuY2VcIiApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG1ldGhvZFZhbHVlID0gaW5zdGFuY2VbIG9wdGlvbnMgXS5hcHBseSggaW5zdGFuY2UsIGFyZ3MgKTtcblxuXHRcdFx0XHRcdGlmICggbWV0aG9kVmFsdWUgIT09IGluc3RhbmNlICYmIG1ldGhvZFZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm5WYWx1ZSA9IG1ldGhvZFZhbHVlICYmIG1ldGhvZFZhbHVlLmpxdWVyeSA/XG5cdFx0XHRcdFx0XHRcdHJldHVyblZhbHVlLnB1c2hTdGFjayggbWV0aG9kVmFsdWUuZ2V0KCkgKSA6XG5cdFx0XHRcdFx0XHRcdG1ldGhvZFZhbHVlO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEFsbG93IG11bHRpcGxlIGhhc2hlcyB0byBiZSBwYXNzZWQgb24gaW5pdFxuXHRcdFx0aWYgKCBhcmdzLmxlbmd0aCApIHtcblx0XHRcdFx0b3B0aW9ucyA9ICQud2lkZ2V0LmV4dGVuZC5hcHBseSggbnVsbCwgWyBvcHRpb25zIF0uY29uY2F0KCBhcmdzICkgKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGluc3RhbmNlID0gJC5kYXRhKCB0aGlzLCBmdWxsTmFtZSApO1xuXHRcdFx0XHRpZiAoIGluc3RhbmNlICkge1xuXHRcdFx0XHRcdGluc3RhbmNlLm9wdGlvbiggb3B0aW9ucyB8fCB7fSApO1xuXHRcdFx0XHRcdGlmICggaW5zdGFuY2UuX2luaXQgKSB7XG5cdFx0XHRcdFx0XHRpbnN0YW5jZS5faW5pdCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkLmRhdGEoIHRoaXMsIGZ1bGxOYW1lLCBuZXcgb2JqZWN0KCBvcHRpb25zLCB0aGlzICkgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXR1cm5WYWx1ZTtcblx0fTtcbn07XG5cbiQuV2lkZ2V0ID0gZnVuY3Rpb24oIC8qIG9wdGlvbnMsIGVsZW1lbnQgKi8gKSB7fTtcbiQuV2lkZ2V0Ll9jaGlsZENvbnN0cnVjdG9ycyA9IFtdO1xuXG4kLldpZGdldC5wcm90b3R5cGUgPSB7XG5cdHdpZGdldE5hbWU6IFwid2lkZ2V0XCIsXG5cdHdpZGdldEV2ZW50UHJlZml4OiBcIlwiLFxuXHRkZWZhdWx0RWxlbWVudDogXCI8ZGl2PlwiLFxuXG5cdG9wdGlvbnM6IHtcblx0XHRjbGFzc2VzOiB7fSxcblx0XHRkaXNhYmxlZDogZmFsc2UsXG5cblx0XHQvLyBDYWxsYmFja3Ncblx0XHRjcmVhdGU6IG51bGxcblx0fSxcblxuXHRfY3JlYXRlV2lkZ2V0OiBmdW5jdGlvbiggb3B0aW9ucywgZWxlbWVudCApIHtcblx0XHRlbGVtZW50ID0gJCggZWxlbWVudCB8fCB0aGlzLmRlZmF1bHRFbGVtZW50IHx8IHRoaXMgKVsgMCBdO1xuXHRcdHRoaXMuZWxlbWVudCA9ICQoIGVsZW1lbnQgKTtcblx0XHR0aGlzLnV1aWQgPSB3aWRnZXRVdWlkKys7XG5cdFx0dGhpcy5ldmVudE5hbWVzcGFjZSA9IFwiLlwiICsgdGhpcy53aWRnZXROYW1lICsgdGhpcy51dWlkO1xuXG5cdFx0dGhpcy5iaW5kaW5ncyA9ICQoKTtcblx0XHR0aGlzLmhvdmVyYWJsZSA9ICQoKTtcblx0XHR0aGlzLmZvY3VzYWJsZSA9ICQoKTtcblx0XHR0aGlzLmNsYXNzZXNFbGVtZW50TG9va3VwID0ge307XG5cblx0XHRpZiAoIGVsZW1lbnQgIT09IHRoaXMgKSB7XG5cdFx0XHQkLmRhdGEoIGVsZW1lbnQsIHRoaXMud2lkZ2V0RnVsbE5hbWUsIHRoaXMgKTtcblx0XHRcdHRoaXMuX29uKCB0cnVlLCB0aGlzLmVsZW1lbnQsIHtcblx0XHRcdFx0cmVtb3ZlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdFx0aWYgKCBldmVudC50YXJnZXQgPT09IGVsZW1lbnQgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmRlc3Ryb3koKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHRcdHRoaXMuZG9jdW1lbnQgPSAkKCBlbGVtZW50LnN0eWxlID9cblxuXHRcdFx0XHQvLyBFbGVtZW50IHdpdGhpbiB0aGUgZG9jdW1lbnRcblx0XHRcdFx0ZWxlbWVudC5vd25lckRvY3VtZW50IDpcblxuXHRcdFx0XHQvLyBFbGVtZW50IGlzIHdpbmRvdyBvciBkb2N1bWVudFxuXHRcdFx0XHRlbGVtZW50LmRvY3VtZW50IHx8IGVsZW1lbnQgKTtcblx0XHRcdHRoaXMud2luZG93ID0gJCggdGhpcy5kb2N1bWVudFsgMCBdLmRlZmF1bHRWaWV3IHx8IHRoaXMuZG9jdW1lbnRbIDAgXS5wYXJlbnRXaW5kb3cgKTtcblx0XHR9XG5cblx0XHR0aGlzLm9wdGlvbnMgPSAkLndpZGdldC5leHRlbmQoIHt9LFxuXHRcdFx0dGhpcy5vcHRpb25zLFxuXHRcdFx0dGhpcy5fZ2V0Q3JlYXRlT3B0aW9ucygpLFxuXHRcdFx0b3B0aW9ucyApO1xuXG5cdFx0dGhpcy5fY3JlYXRlKCk7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kaXNhYmxlZCApIHtcblx0XHRcdHRoaXMuX3NldE9wdGlvbkRpc2FibGVkKCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgKTtcblx0XHR9XG5cblx0XHR0aGlzLl90cmlnZ2VyKCBcImNyZWF0ZVwiLCBudWxsLCB0aGlzLl9nZXRDcmVhdGVFdmVudERhdGEoKSApO1xuXHRcdHRoaXMuX2luaXQoKTtcblx0fSxcblxuXHRfZ2V0Q3JlYXRlT3B0aW9uczogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9LFxuXG5cdF9nZXRDcmVhdGVFdmVudERhdGE6ICQubm9vcCxcblxuXHRfY3JlYXRlOiAkLm5vb3AsXG5cblx0X2luaXQ6ICQubm9vcCxcblxuXHRkZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cblx0XHR0aGlzLl9kZXN0cm95KCk7XG5cdFx0JC5lYWNoKCB0aGlzLmNsYXNzZXNFbGVtZW50TG9va3VwLCBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHRcdHRoYXQuX3JlbW92ZUNsYXNzKCB2YWx1ZSwga2V5ICk7XG5cdFx0fSApO1xuXG5cdFx0Ly8gV2UgY2FuIHByb2JhYmx5IHJlbW92ZSB0aGUgdW5iaW5kIGNhbGxzIGluIDIuMFxuXHRcdC8vIGFsbCBldmVudCBiaW5kaW5ncyBzaG91bGQgZ28gdGhyb3VnaCB0aGlzLl9vbigpXG5cdFx0dGhpcy5lbGVtZW50XG5cdFx0XHQub2ZmKCB0aGlzLmV2ZW50TmFtZXNwYWNlIClcblx0XHRcdC5yZW1vdmVEYXRhKCB0aGlzLndpZGdldEZ1bGxOYW1lICk7XG5cdFx0dGhpcy53aWRnZXQoKVxuXHRcdFx0Lm9mZiggdGhpcy5ldmVudE5hbWVzcGFjZSApXG5cdFx0XHQucmVtb3ZlQXR0ciggXCJhcmlhLWRpc2FibGVkXCIgKTtcblxuXHRcdC8vIENsZWFuIHVwIGV2ZW50cyBhbmQgc3RhdGVzXG5cdFx0dGhpcy5iaW5kaW5ncy5vZmYoIHRoaXMuZXZlbnROYW1lc3BhY2UgKTtcblx0fSxcblxuXHRfZGVzdHJveTogJC5ub29wLFxuXG5cdHdpZGdldDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWxlbWVudDtcblx0fSxcblxuXHRvcHRpb246IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdHZhciBvcHRpb25zID0ga2V5O1xuXHRcdHZhciBwYXJ0cztcblx0XHR2YXIgY3VyT3B0aW9uO1xuXHRcdHZhciBpO1xuXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoID09PSAwICkge1xuXG5cdFx0XHQvLyBEb24ndCByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIGludGVybmFsIGhhc2hcblx0XHRcdHJldHVybiAkLndpZGdldC5leHRlbmQoIHt9LCB0aGlzLm9wdGlvbnMgKTtcblx0XHR9XG5cblx0XHRpZiAoIHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vIEhhbmRsZSBuZXN0ZWQga2V5cywgZS5nLiwgXCJmb28uYmFyXCIgPT4geyBmb286IHsgYmFyOiBfX18gfSB9XG5cdFx0XHRvcHRpb25zID0ge307XG5cdFx0XHRwYXJ0cyA9IGtleS5zcGxpdCggXCIuXCIgKTtcblx0XHRcdGtleSA9IHBhcnRzLnNoaWZ0KCk7XG5cdFx0XHRpZiAoIHBhcnRzLmxlbmd0aCApIHtcblx0XHRcdFx0Y3VyT3B0aW9uID0gb3B0aW9uc1sga2V5IF0gPSAkLndpZGdldC5leHRlbmQoIHt9LCB0aGlzLm9wdGlvbnNbIGtleSBdICk7XG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrICkge1xuXHRcdFx0XHRcdGN1ck9wdGlvblsgcGFydHNbIGkgXSBdID0gY3VyT3B0aW9uWyBwYXJ0c1sgaSBdIF0gfHwge307XG5cdFx0XHRcdFx0Y3VyT3B0aW9uID0gY3VyT3B0aW9uWyBwYXJ0c1sgaSBdIF07XG5cdFx0XHRcdH1cblx0XHRcdFx0a2V5ID0gcGFydHMucG9wKCk7XG5cdFx0XHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCA9PT0gMSApIHtcblx0XHRcdFx0XHRyZXR1cm4gY3VyT3B0aW9uWyBrZXkgXSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGN1ck9wdGlvblsga2V5IF07XG5cdFx0XHRcdH1cblx0XHRcdFx0Y3VyT3B0aW9uWyBrZXkgXSA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoID09PSAxICkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLm9wdGlvbnNbIGtleSBdID09PSB1bmRlZmluZWQgPyBudWxsIDogdGhpcy5vcHRpb25zWyBrZXkgXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvcHRpb25zWyBrZXkgXSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuX3NldE9wdGlvbnMoIG9wdGlvbnMgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdF9zZXRPcHRpb25zOiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHR2YXIga2V5O1xuXG5cdFx0Zm9yICgga2V5IGluIG9wdGlvbnMgKSB7XG5cdFx0XHR0aGlzLl9zZXRPcHRpb24oIGtleSwgb3B0aW9uc1sga2V5IF0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRfc2V0T3B0aW9uOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHRpZiAoIGtleSA9PT0gXCJjbGFzc2VzXCIgKSB7XG5cdFx0XHR0aGlzLl9zZXRPcHRpb25DbGFzc2VzKCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdHRoaXMub3B0aW9uc1sga2V5IF0gPSB2YWx1ZTtcblxuXHRcdGlmICgga2V5ID09PSBcImRpc2FibGVkXCIgKSB7XG5cdFx0XHR0aGlzLl9zZXRPcHRpb25EaXNhYmxlZCggdmFsdWUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRfc2V0T3B0aW9uQ2xhc3NlczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc0tleSwgZWxlbWVudHMsIGN1cnJlbnRFbGVtZW50cztcblxuXHRcdGZvciAoIGNsYXNzS2V5IGluIHZhbHVlICkge1xuXHRcdFx0Y3VycmVudEVsZW1lbnRzID0gdGhpcy5jbGFzc2VzRWxlbWVudExvb2t1cFsgY2xhc3NLZXkgXTtcblx0XHRcdGlmICggdmFsdWVbIGNsYXNzS2V5IF0gPT09IHRoaXMub3B0aW9ucy5jbGFzc2VzWyBjbGFzc0tleSBdIHx8XG5cdFx0XHRcdFx0IWN1cnJlbnRFbGVtZW50cyB8fFxuXHRcdFx0XHRcdCFjdXJyZW50RWxlbWVudHMubGVuZ3RoICkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2UgYXJlIGRvaW5nIHRoaXMgdG8gY3JlYXRlIGEgbmV3IGpRdWVyeSBvYmplY3QgYmVjYXVzZSB0aGUgX3JlbW92ZUNsYXNzKCkgY2FsbFxuXHRcdFx0Ly8gb24gdGhlIG5leHQgbGluZSBpcyBnb2luZyB0byBkZXN0cm95IHRoZSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZWxlbWVudHMgYmVpbmdcblx0XHRcdC8vIHRyYWNrZWQuIFdlIG5lZWQgdG8gc2F2ZSBhIGNvcHkgb2YgdGhpcyBjb2xsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGFkZCB0aGUgbmV3IGNsYXNzZXNcblx0XHRcdC8vIGJlbG93LlxuXHRcdFx0ZWxlbWVudHMgPSAkKCBjdXJyZW50RWxlbWVudHMuZ2V0KCkgKTtcblx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCBjdXJyZW50RWxlbWVudHMsIGNsYXNzS2V5ICk7XG5cblx0XHRcdC8vIFdlIGRvbid0IHVzZSBfYWRkQ2xhc3MoKSBoZXJlLCBiZWNhdXNlIHRoYXQgdXNlcyB0aGlzLm9wdGlvbnMuY2xhc3Nlc1xuXHRcdFx0Ly8gZm9yIGdlbmVyYXRpbmcgdGhlIHN0cmluZyBvZiBjbGFzc2VzLiBXZSB3YW50IHRvIHVzZSB0aGUgdmFsdWUgcGFzc2VkIGluIGZyb21cblx0XHRcdC8vIF9zZXRPcHRpb24oKSwgdGhpcyBpcyB0aGUgbmV3IHZhbHVlIG9mIHRoZSBjbGFzc2VzIG9wdGlvbiB3aGljaCB3YXMgcGFzc2VkIHRvXG5cdFx0XHQvLyBfc2V0T3B0aW9uKCkuIFdlIHBhc3MgdGhpcyB2YWx1ZSBkaXJlY3RseSB0byBfY2xhc3NlcygpLlxuXHRcdFx0ZWxlbWVudHMuYWRkQ2xhc3MoIHRoaXMuX2NsYXNzZXMoIHtcblx0XHRcdFx0ZWxlbWVudDogZWxlbWVudHMsXG5cdFx0XHRcdGtleXM6IGNsYXNzS2V5LFxuXHRcdFx0XHRjbGFzc2VzOiB2YWx1ZSxcblx0XHRcdFx0YWRkOiB0cnVlXG5cdFx0XHR9ICkgKTtcblx0XHR9XG5cdH0sXG5cblx0X3NldE9wdGlvbkRpc2FibGVkOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dGhpcy5fdG9nZ2xlQ2xhc3MoIHRoaXMud2lkZ2V0KCksIHRoaXMud2lkZ2V0RnVsbE5hbWUgKyBcIi1kaXNhYmxlZFwiLCBudWxsLCAhIXZhbHVlICk7XG5cblx0XHQvLyBJZiB0aGUgd2lkZ2V0IGlzIGJlY29taW5nIGRpc2FibGVkLCB0aGVuIG5vdGhpbmcgaXMgaW50ZXJhY3RpdmVcblx0XHRpZiAoIHZhbHVlICkge1xuXHRcdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIHRoaXMuaG92ZXJhYmxlLCBudWxsLCBcInVpLXN0YXRlLWhvdmVyXCIgKTtcblx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCB0aGlzLmZvY3VzYWJsZSwgbnVsbCwgXCJ1aS1zdGF0ZS1mb2N1c1wiICk7XG5cdFx0fVxuXHR9LFxuXG5cdGVuYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3NldE9wdGlvbnMoIHsgZGlzYWJsZWQ6IGZhbHNlIH0gKTtcblx0fSxcblxuXHRkaXNhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fc2V0T3B0aW9ucyggeyBkaXNhYmxlZDogdHJ1ZSB9ICk7XG5cdH0sXG5cblx0X2NsYXNzZXM6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHRcdHZhciBmdWxsID0gW107XG5cdFx0dmFyIHRoYXQgPSB0aGlzO1xuXG5cdFx0b3B0aW9ucyA9ICQuZXh0ZW5kKCB7XG5cdFx0XHRlbGVtZW50OiB0aGlzLmVsZW1lbnQsXG5cdFx0XHRjbGFzc2VzOiB0aGlzLm9wdGlvbnMuY2xhc3NlcyB8fCB7fVxuXHRcdH0sIG9wdGlvbnMgKTtcblxuXHRcdGZ1bmN0aW9uIHByb2Nlc3NDbGFzc1N0cmluZyggY2xhc3NlcywgY2hlY2tPcHRpb24gKSB7XG5cdFx0XHR2YXIgY3VycmVudCwgaTtcblx0XHRcdGZvciAoIGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0Y3VycmVudCA9IHRoYXQuY2xhc3Nlc0VsZW1lbnRMb29rdXBbIGNsYXNzZXNbIGkgXSBdIHx8ICQoKTtcblx0XHRcdFx0aWYgKCBvcHRpb25zLmFkZCApIHtcblx0XHRcdFx0XHRjdXJyZW50ID0gJCggJC51bmlxdWUoIGN1cnJlbnQuZ2V0KCkuY29uY2F0KCBvcHRpb25zLmVsZW1lbnQuZ2V0KCkgKSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y3VycmVudCA9ICQoIGN1cnJlbnQubm90KCBvcHRpb25zLmVsZW1lbnQgKS5nZXQoKSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoYXQuY2xhc3Nlc0VsZW1lbnRMb29rdXBbIGNsYXNzZXNbIGkgXSBdID0gY3VycmVudDtcblx0XHRcdFx0ZnVsbC5wdXNoKCBjbGFzc2VzWyBpIF0gKTtcblx0XHRcdFx0aWYgKCBjaGVja09wdGlvbiAmJiBvcHRpb25zLmNsYXNzZXNbIGNsYXNzZXNbIGkgXSBdICkge1xuXHRcdFx0XHRcdGZ1bGwucHVzaCggb3B0aW9ucy5jbGFzc2VzWyBjbGFzc2VzWyBpIF0gXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5fb24oIG9wdGlvbnMuZWxlbWVudCwge1xuXHRcdFx0XCJyZW1vdmVcIjogXCJfdW50cmFja0NsYXNzZXNFbGVtZW50XCJcblx0XHR9ICk7XG5cblx0XHRpZiAoIG9wdGlvbnMua2V5cyApIHtcblx0XHRcdHByb2Nlc3NDbGFzc1N0cmluZyggb3B0aW9ucy5rZXlzLm1hdGNoKCAvXFxTKy9nICkgfHwgW10sIHRydWUgKTtcblx0XHR9XG5cdFx0aWYgKCBvcHRpb25zLmV4dHJhICkge1xuXHRcdFx0cHJvY2Vzc0NsYXNzU3RyaW5nKCBvcHRpb25zLmV4dHJhLm1hdGNoKCAvXFxTKy9nICkgfHwgW10gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZnVsbC5qb2luKCBcIiBcIiApO1xuXHR9LFxuXG5cdF91bnRyYWNrQ2xhc3Nlc0VsZW1lbnQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cdFx0JC5lYWNoKCB0aGF0LmNsYXNzZXNFbGVtZW50TG9va3VwLCBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHRcdGlmICggJC5pbkFycmF5KCBldmVudC50YXJnZXQsIHZhbHVlICkgIT09IC0xICkge1xuXHRcdFx0XHR0aGF0LmNsYXNzZXNFbGVtZW50TG9va3VwWyBrZXkgXSA9ICQoIHZhbHVlLm5vdCggZXZlbnQudGFyZ2V0ICkuZ2V0KCkgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0X3JlbW92ZUNsYXNzOiBmdW5jdGlvbiggZWxlbWVudCwga2V5cywgZXh0cmEgKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3RvZ2dsZUNsYXNzKCBlbGVtZW50LCBrZXlzLCBleHRyYSwgZmFsc2UgKTtcblx0fSxcblxuXHRfYWRkQ2xhc3M6IGZ1bmN0aW9uKCBlbGVtZW50LCBrZXlzLCBleHRyYSApIHtcblx0XHRyZXR1cm4gdGhpcy5fdG9nZ2xlQ2xhc3MoIGVsZW1lbnQsIGtleXMsIGV4dHJhLCB0cnVlICk7XG5cdH0sXG5cblx0X3RvZ2dsZUNsYXNzOiBmdW5jdGlvbiggZWxlbWVudCwga2V5cywgZXh0cmEsIGFkZCApIHtcblx0XHRhZGQgPSAoIHR5cGVvZiBhZGQgPT09IFwiYm9vbGVhblwiICkgPyBhZGQgOiBleHRyYTtcblx0XHR2YXIgc2hpZnQgPSAoIHR5cGVvZiBlbGVtZW50ID09PSBcInN0cmluZ1wiIHx8IGVsZW1lbnQgPT09IG51bGwgKSxcblx0XHRcdG9wdGlvbnMgPSB7XG5cdFx0XHRcdGV4dHJhOiBzaGlmdCA/IGtleXMgOiBleHRyYSxcblx0XHRcdFx0a2V5czogc2hpZnQgPyBlbGVtZW50IDoga2V5cyxcblx0XHRcdFx0ZWxlbWVudDogc2hpZnQgPyB0aGlzLmVsZW1lbnQgOiBlbGVtZW50LFxuXHRcdFx0XHRhZGQ6IGFkZFxuXHRcdFx0fTtcblx0XHRvcHRpb25zLmVsZW1lbnQudG9nZ2xlQ2xhc3MoIHRoaXMuX2NsYXNzZXMoIG9wdGlvbnMgKSwgYWRkICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0X29uOiBmdW5jdGlvbiggc3VwcHJlc3NEaXNhYmxlZENoZWNrLCBlbGVtZW50LCBoYW5kbGVycyApIHtcblx0XHR2YXIgZGVsZWdhdGVFbGVtZW50O1xuXHRcdHZhciBpbnN0YW5jZSA9IHRoaXM7XG5cblx0XHQvLyBObyBzdXBwcmVzc0Rpc2FibGVkQ2hlY2sgZmxhZywgc2h1ZmZsZSBhcmd1bWVudHNcblx0XHRpZiAoIHR5cGVvZiBzdXBwcmVzc0Rpc2FibGVkQ2hlY2sgIT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0aGFuZGxlcnMgPSBlbGVtZW50O1xuXHRcdFx0ZWxlbWVudCA9IHN1cHByZXNzRGlzYWJsZWRDaGVjaztcblx0XHRcdHN1cHByZXNzRGlzYWJsZWRDaGVjayA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIE5vIGVsZW1lbnQgYXJndW1lbnQsIHNodWZmbGUgYW5kIHVzZSB0aGlzLmVsZW1lbnRcblx0XHRpZiAoICFoYW5kbGVycyApIHtcblx0XHRcdGhhbmRsZXJzID0gZWxlbWVudDtcblx0XHRcdGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG5cdFx0XHRkZWxlZ2F0ZUVsZW1lbnQgPSB0aGlzLndpZGdldCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbGVtZW50ID0gZGVsZWdhdGVFbGVtZW50ID0gJCggZWxlbWVudCApO1xuXHRcdFx0dGhpcy5iaW5kaW5ncyA9IHRoaXMuYmluZGluZ3MuYWRkKCBlbGVtZW50ICk7XG5cdFx0fVxuXG5cdFx0JC5lYWNoKCBoYW5kbGVycywgZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVyICkge1xuXHRcdFx0ZnVuY3Rpb24gaGFuZGxlclByb3h5KCkge1xuXG5cdFx0XHRcdC8vIEFsbG93IHdpZGdldHMgdG8gY3VzdG9taXplIHRoZSBkaXNhYmxlZCBoYW5kbGluZ1xuXHRcdFx0XHQvLyAtIGRpc2FibGVkIGFzIGFuIGFycmF5IGluc3RlYWQgb2YgYm9vbGVhblxuXHRcdFx0XHQvLyAtIGRpc2FibGVkIGNsYXNzIGFzIG1ldGhvZCBmb3IgZGlzYWJsaW5nIGluZGl2aWR1YWwgcGFydHNcblx0XHRcdFx0aWYgKCAhc3VwcHJlc3NEaXNhYmxlZENoZWNrICYmXG5cdFx0XHRcdFx0XHQoIGluc3RhbmNlLm9wdGlvbnMuZGlzYWJsZWQgPT09IHRydWUgfHxcblx0XHRcdFx0XHRcdCQoIHRoaXMgKS5oYXNDbGFzcyggXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiICkgKSApIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuICggdHlwZW9mIGhhbmRsZXIgPT09IFwic3RyaW5nXCIgPyBpbnN0YW5jZVsgaGFuZGxlciBdIDogaGFuZGxlciApXG5cdFx0XHRcdFx0LmFwcGx5KCBpbnN0YW5jZSwgYXJndW1lbnRzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvcHkgdGhlIGd1aWQgc28gZGlyZWN0IHVuYmluZGluZyB3b3Jrc1xuXHRcdFx0aWYgKCB0eXBlb2YgaGFuZGxlciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0aGFuZGxlclByb3h5Lmd1aWQgPSBoYW5kbGVyLmd1aWQgPVxuXHRcdFx0XHRcdGhhbmRsZXIuZ3VpZCB8fCBoYW5kbGVyUHJveHkuZ3VpZCB8fCAkLmd1aWQrKztcblx0XHRcdH1cblxuXHRcdFx0dmFyIG1hdGNoID0gZXZlbnQubWF0Y2goIC9eKFtcXHc6LV0qKVxccyooLiopJC8gKTtcblx0XHRcdHZhciBldmVudE5hbWUgPSBtYXRjaFsgMSBdICsgaW5zdGFuY2UuZXZlbnROYW1lc3BhY2U7XG5cdFx0XHR2YXIgc2VsZWN0b3IgPSBtYXRjaFsgMiBdO1xuXG5cdFx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0XHRkZWxlZ2F0ZUVsZW1lbnQub24oIGV2ZW50TmFtZSwgc2VsZWN0b3IsIGhhbmRsZXJQcm94eSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudC5vbiggZXZlbnROYW1lLCBoYW5kbGVyUHJveHkgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0X29mZjogZnVuY3Rpb24oIGVsZW1lbnQsIGV2ZW50TmFtZSApIHtcblx0XHRldmVudE5hbWUgPSAoIGV2ZW50TmFtZSB8fCBcIlwiICkuc3BsaXQoIFwiIFwiICkuam9pbiggdGhpcy5ldmVudE5hbWVzcGFjZSArIFwiIFwiICkgK1xuXHRcdFx0dGhpcy5ldmVudE5hbWVzcGFjZTtcblx0XHRlbGVtZW50Lm9mZiggZXZlbnROYW1lICkub2ZmKCBldmVudE5hbWUgKTtcblxuXHRcdC8vIENsZWFyIHRoZSBzdGFjayB0byBhdm9pZCBtZW1vcnkgbGVha3MgKCMxMDA1Nilcblx0XHR0aGlzLmJpbmRpbmdzID0gJCggdGhpcy5iaW5kaW5ncy5ub3QoIGVsZW1lbnQgKS5nZXQoKSApO1xuXHRcdHRoaXMuZm9jdXNhYmxlID0gJCggdGhpcy5mb2N1c2FibGUubm90KCBlbGVtZW50ICkuZ2V0KCkgKTtcblx0XHR0aGlzLmhvdmVyYWJsZSA9ICQoIHRoaXMuaG92ZXJhYmxlLm5vdCggZWxlbWVudCApLmdldCgpICk7XG5cdH0sXG5cblx0X2RlbGF5OiBmdW5jdGlvbiggaGFuZGxlciwgZGVsYXkgKSB7XG5cdFx0ZnVuY3Rpb24gaGFuZGxlclByb3h5KCkge1xuXHRcdFx0cmV0dXJuICggdHlwZW9mIGhhbmRsZXIgPT09IFwic3RyaW5nXCIgPyBpbnN0YW5jZVsgaGFuZGxlciBdIDogaGFuZGxlciApXG5cdFx0XHRcdC5hcHBseSggaW5zdGFuY2UsIGFyZ3VtZW50cyApO1xuXHRcdH1cblx0XHR2YXIgaW5zdGFuY2UgPSB0aGlzO1xuXHRcdHJldHVybiBzZXRUaW1lb3V0KCBoYW5kbGVyUHJveHksIGRlbGF5IHx8IDAgKTtcblx0fSxcblxuXHRfaG92ZXJhYmxlOiBmdW5jdGlvbiggZWxlbWVudCApIHtcblx0XHR0aGlzLmhvdmVyYWJsZSA9IHRoaXMuaG92ZXJhYmxlLmFkZCggZWxlbWVudCApO1xuXHRcdHRoaXMuX29uKCBlbGVtZW50LCB7XG5cdFx0XHRtb3VzZWVudGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdHRoaXMuX2FkZENsYXNzKCAkKCBldmVudC5jdXJyZW50VGFyZ2V0ICksIG51bGwsIFwidWktc3RhdGUtaG92ZXJcIiApO1xuXHRcdFx0fSxcblx0XHRcdG1vdXNlbGVhdmU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoICQoIGV2ZW50LmN1cnJlbnRUYXJnZXQgKSwgbnVsbCwgXCJ1aS1zdGF0ZS1ob3ZlclwiICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdF9mb2N1c2FibGU6IGZ1bmN0aW9uKCBlbGVtZW50ICkge1xuXHRcdHRoaXMuZm9jdXNhYmxlID0gdGhpcy5mb2N1c2FibGUuYWRkKCBlbGVtZW50ICk7XG5cdFx0dGhpcy5fb24oIGVsZW1lbnQsIHtcblx0XHRcdGZvY3VzaW46IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dGhpcy5fYWRkQ2xhc3MoICQoIGV2ZW50LmN1cnJlbnRUYXJnZXQgKSwgbnVsbCwgXCJ1aS1zdGF0ZS1mb2N1c1wiICk7XG5cdFx0XHR9LFxuXHRcdFx0Zm9jdXNvdXQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoICQoIGV2ZW50LmN1cnJlbnRUYXJnZXQgKSwgbnVsbCwgXCJ1aS1zdGF0ZS1mb2N1c1wiICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdF90cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZXZlbnQsIGRhdGEgKSB7XG5cdFx0dmFyIHByb3AsIG9yaWc7XG5cdFx0dmFyIGNhbGxiYWNrID0gdGhpcy5vcHRpb25zWyB0eXBlIF07XG5cblx0XHRkYXRhID0gZGF0YSB8fCB7fTtcblx0XHRldmVudCA9ICQuRXZlbnQoIGV2ZW50ICk7XG5cdFx0ZXZlbnQudHlwZSA9ICggdHlwZSA9PT0gdGhpcy53aWRnZXRFdmVudFByZWZpeCA/XG5cdFx0XHR0eXBlIDpcblx0XHRcdHRoaXMud2lkZ2V0RXZlbnRQcmVmaXggKyB0eXBlICkudG9Mb3dlckNhc2UoKTtcblxuXHRcdC8vIFRoZSBvcmlnaW5hbCBldmVudCBtYXkgY29tZSBmcm9tIGFueSBlbGVtZW50XG5cdFx0Ly8gc28gd2UgbmVlZCB0byByZXNldCB0aGUgdGFyZ2V0IG9uIHRoZSBuZXcgZXZlbnRcblx0XHRldmVudC50YXJnZXQgPSB0aGlzLmVsZW1lbnRbIDAgXTtcblxuXHRcdC8vIENvcHkgb3JpZ2luYWwgZXZlbnQgcHJvcGVydGllcyBvdmVyIHRvIHRoZSBuZXcgZXZlbnRcblx0XHRvcmlnID0gZXZlbnQub3JpZ2luYWxFdmVudDtcblx0XHRpZiAoIG9yaWcgKSB7XG5cdFx0XHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cdFx0XHRcdGlmICggISggcHJvcCBpbiBldmVudCApICkge1xuXHRcdFx0XHRcdGV2ZW50WyBwcm9wIF0gPSBvcmlnWyBwcm9wIF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmVsZW1lbnQudHJpZ2dlciggZXZlbnQsIGRhdGEgKTtcblx0XHRyZXR1cm4gISggJC5pc0Z1bmN0aW9uKCBjYWxsYmFjayApICYmXG5cdFx0XHRjYWxsYmFjay5hcHBseSggdGhpcy5lbGVtZW50WyAwIF0sIFsgZXZlbnQgXS5jb25jYXQoIGRhdGEgKSApID09PSBmYWxzZSB8fFxuXHRcdFx0ZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKTtcblx0fVxufTtcblxuJC5lYWNoKCB7IHNob3c6IFwiZmFkZUluXCIsIGhpZGU6IFwiZmFkZU91dFwiIH0sIGZ1bmN0aW9uKCBtZXRob2QsIGRlZmF1bHRFZmZlY3QgKSB7XG5cdCQuV2lkZ2V0LnByb3RvdHlwZVsgXCJfXCIgKyBtZXRob2QgXSA9IGZ1bmN0aW9uKCBlbGVtZW50LCBvcHRpb25zLCBjYWxsYmFjayApIHtcblx0XHRpZiAoIHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0b3B0aW9ucyA9IHsgZWZmZWN0OiBvcHRpb25zIH07XG5cdFx0fVxuXG5cdFx0dmFyIGhhc09wdGlvbnM7XG5cdFx0dmFyIGVmZmVjdE5hbWUgPSAhb3B0aW9ucyA/XG5cdFx0XHRtZXRob2QgOlxuXHRcdFx0b3B0aW9ucyA9PT0gdHJ1ZSB8fCB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJudW1iZXJcIiA/XG5cdFx0XHRcdGRlZmF1bHRFZmZlY3QgOlxuXHRcdFx0XHRvcHRpb25zLmVmZmVjdCB8fCBkZWZhdWx0RWZmZWN0O1xuXG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdFx0aWYgKCB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJudW1iZXJcIiApIHtcblx0XHRcdG9wdGlvbnMgPSB7IGR1cmF0aW9uOiBvcHRpb25zIH07XG5cdFx0fVxuXG5cdFx0aGFzT3B0aW9ucyA9ICEkLmlzRW1wdHlPYmplY3QoIG9wdGlvbnMgKTtcblx0XHRvcHRpb25zLmNvbXBsZXRlID0gY2FsbGJhY2s7XG5cblx0XHRpZiAoIG9wdGlvbnMuZGVsYXkgKSB7XG5cdFx0XHRlbGVtZW50LmRlbGF5KCBvcHRpb25zLmRlbGF5ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBoYXNPcHRpb25zICYmICQuZWZmZWN0cyAmJiAkLmVmZmVjdHMuZWZmZWN0WyBlZmZlY3ROYW1lIF0gKSB7XG5cdFx0XHRlbGVtZW50WyBtZXRob2QgXSggb3B0aW9ucyApO1xuXHRcdH0gZWxzZSBpZiAoIGVmZmVjdE5hbWUgIT09IG1ldGhvZCAmJiBlbGVtZW50WyBlZmZlY3ROYW1lIF0gKSB7XG5cdFx0XHRlbGVtZW50WyBlZmZlY3ROYW1lIF0oIG9wdGlvbnMuZHVyYXRpb24sIG9wdGlvbnMuZWFzaW5nLCBjYWxsYmFjayApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbGVtZW50LnF1ZXVlKCBmdW5jdGlvbiggbmV4dCApIHtcblx0XHRcdFx0JCggdGhpcyApWyBtZXRob2QgXSgpO1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrLmNhbGwoIGVsZW1lbnRbIDAgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG5leHQoKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cdH07XG59ICk7XG5cbnZhciB3aWRnZXQgPSAkLndpZGdldDtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBQb3NpdGlvbiAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL3Bvc2l0aW9uL1xuICovXG5cbi8vPj5sYWJlbDogUG9zaXRpb25cbi8vPj5ncm91cDogQ29yZVxuLy8+PmRlc2NyaXB0aW9uOiBQb3NpdGlvbnMgZWxlbWVudHMgcmVsYXRpdmUgdG8gb3RoZXIgZWxlbWVudHMuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vcG9zaXRpb24vXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vcG9zaXRpb24vXG5cblxuKCBmdW5jdGlvbigpIHtcbnZhciBjYWNoZWRTY3JvbGxiYXJXaWR0aCxcblx0bWF4ID0gTWF0aC5tYXgsXG5cdGFicyA9IE1hdGguYWJzLFxuXHRyaG9yaXpvbnRhbCA9IC9sZWZ0fGNlbnRlcnxyaWdodC8sXG5cdHJ2ZXJ0aWNhbCA9IC90b3B8Y2VudGVyfGJvdHRvbS8sXG5cdHJvZmZzZXQgPSAvW1xcK1xcLV1cXGQrKFxcLltcXGRdKyk/JT8vLFxuXHRycG9zaXRpb24gPSAvXlxcdysvLFxuXHRycGVyY2VudCA9IC8lJC8sXG5cdF9wb3NpdGlvbiA9ICQuZm4ucG9zaXRpb247XG5cbmZ1bmN0aW9uIGdldE9mZnNldHMoIG9mZnNldHMsIHdpZHRoLCBoZWlnaHQgKSB7XG5cdHJldHVybiBbXG5cdFx0cGFyc2VGbG9hdCggb2Zmc2V0c1sgMCBdICkgKiAoIHJwZXJjZW50LnRlc3QoIG9mZnNldHNbIDAgXSApID8gd2lkdGggLyAxMDAgOiAxICksXG5cdFx0cGFyc2VGbG9hdCggb2Zmc2V0c1sgMSBdICkgKiAoIHJwZXJjZW50LnRlc3QoIG9mZnNldHNbIDEgXSApID8gaGVpZ2h0IC8gMTAwIDogMSApXG5cdF07XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ3NzKCBlbGVtZW50LCBwcm9wZXJ0eSApIHtcblx0cmV0dXJuIHBhcnNlSW50KCAkLmNzcyggZWxlbWVudCwgcHJvcGVydHkgKSwgMTAgKSB8fCAwO1xufVxuXG5mdW5jdGlvbiBnZXREaW1lbnNpb25zKCBlbGVtICkge1xuXHR2YXIgcmF3ID0gZWxlbVsgMCBdO1xuXHRpZiAoIHJhdy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0d2lkdGg6IGVsZW0ud2lkdGgoKSxcblx0XHRcdGhlaWdodDogZWxlbS5oZWlnaHQoKSxcblx0XHRcdG9mZnNldDogeyB0b3A6IDAsIGxlZnQ6IDAgfVxuXHRcdH07XG5cdH1cblx0aWYgKCAkLmlzV2luZG93KCByYXcgKSApIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0d2lkdGg6IGVsZW0ud2lkdGgoKSxcblx0XHRcdGhlaWdodDogZWxlbS5oZWlnaHQoKSxcblx0XHRcdG9mZnNldDogeyB0b3A6IGVsZW0uc2Nyb2xsVG9wKCksIGxlZnQ6IGVsZW0uc2Nyb2xsTGVmdCgpIH1cblx0XHR9O1xuXHR9XG5cdGlmICggcmF3LnByZXZlbnREZWZhdWx0ICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHR3aWR0aDogMCxcblx0XHRcdGhlaWdodDogMCxcblx0XHRcdG9mZnNldDogeyB0b3A6IHJhdy5wYWdlWSwgbGVmdDogcmF3LnBhZ2VYIH1cblx0XHR9O1xuXHR9XG5cdHJldHVybiB7XG5cdFx0d2lkdGg6IGVsZW0ub3V0ZXJXaWR0aCgpLFxuXHRcdGhlaWdodDogZWxlbS5vdXRlckhlaWdodCgpLFxuXHRcdG9mZnNldDogZWxlbS5vZmZzZXQoKVxuXHR9O1xufVxuXG4kLnBvc2l0aW9uID0ge1xuXHRzY3JvbGxiYXJXaWR0aDogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCBjYWNoZWRTY3JvbGxiYXJXaWR0aCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0cmV0dXJuIGNhY2hlZFNjcm9sbGJhcldpZHRoO1xuXHRcdH1cblx0XHR2YXIgdzEsIHcyLFxuXHRcdFx0ZGl2ID0gJCggXCI8ZGl2IFwiICtcblx0XHRcdFx0XCJzdHlsZT0nZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDo1MHB4O2hlaWdodDo1MHB4O292ZXJmbG93OmhpZGRlbjsnPlwiICtcblx0XHRcdFx0XCI8ZGl2IHN0eWxlPSdoZWlnaHQ6MTAwcHg7d2lkdGg6YXV0bzsnPjwvZGl2PjwvZGl2PlwiICksXG5cdFx0XHRpbm5lckRpdiA9IGRpdi5jaGlsZHJlbigpWyAwIF07XG5cblx0XHQkKCBcImJvZHlcIiApLmFwcGVuZCggZGl2ICk7XG5cdFx0dzEgPSBpbm5lckRpdi5vZmZzZXRXaWR0aDtcblx0XHRkaXYuY3NzKCBcIm92ZXJmbG93XCIsIFwic2Nyb2xsXCIgKTtcblxuXHRcdHcyID0gaW5uZXJEaXYub2Zmc2V0V2lkdGg7XG5cblx0XHRpZiAoIHcxID09PSB3MiApIHtcblx0XHRcdHcyID0gZGl2WyAwIF0uY2xpZW50V2lkdGg7XG5cdFx0fVxuXG5cdFx0ZGl2LnJlbW92ZSgpO1xuXG5cdFx0cmV0dXJuICggY2FjaGVkU2Nyb2xsYmFyV2lkdGggPSB3MSAtIHcyICk7XG5cdH0sXG5cdGdldFNjcm9sbEluZm86IGZ1bmN0aW9uKCB3aXRoaW4gKSB7XG5cdFx0dmFyIG92ZXJmbG93WCA9IHdpdGhpbi5pc1dpbmRvdyB8fCB3aXRoaW4uaXNEb2N1bWVudCA/IFwiXCIgOlxuXHRcdFx0XHR3aXRoaW4uZWxlbWVudC5jc3MoIFwib3ZlcmZsb3cteFwiICksXG5cdFx0XHRvdmVyZmxvd1kgPSB3aXRoaW4uaXNXaW5kb3cgfHwgd2l0aGluLmlzRG9jdW1lbnQgPyBcIlwiIDpcblx0XHRcdFx0d2l0aGluLmVsZW1lbnQuY3NzKCBcIm92ZXJmbG93LXlcIiApLFxuXHRcdFx0aGFzT3ZlcmZsb3dYID0gb3ZlcmZsb3dYID09PSBcInNjcm9sbFwiIHx8XG5cdFx0XHRcdCggb3ZlcmZsb3dYID09PSBcImF1dG9cIiAmJiB3aXRoaW4ud2lkdGggPCB3aXRoaW4uZWxlbWVudFsgMCBdLnNjcm9sbFdpZHRoICksXG5cdFx0XHRoYXNPdmVyZmxvd1kgPSBvdmVyZmxvd1kgPT09IFwic2Nyb2xsXCIgfHxcblx0XHRcdFx0KCBvdmVyZmxvd1kgPT09IFwiYXV0b1wiICYmIHdpdGhpbi5oZWlnaHQgPCB3aXRoaW4uZWxlbWVudFsgMCBdLnNjcm9sbEhlaWdodCApO1xuXHRcdHJldHVybiB7XG5cdFx0XHR3aWR0aDogaGFzT3ZlcmZsb3dZID8gJC5wb3NpdGlvbi5zY3JvbGxiYXJXaWR0aCgpIDogMCxcblx0XHRcdGhlaWdodDogaGFzT3ZlcmZsb3dYID8gJC5wb3NpdGlvbi5zY3JvbGxiYXJXaWR0aCgpIDogMFxuXHRcdH07XG5cdH0sXG5cdGdldFdpdGhpbkluZm86IGZ1bmN0aW9uKCBlbGVtZW50ICkge1xuXHRcdHZhciB3aXRoaW5FbGVtZW50ID0gJCggZWxlbWVudCB8fCB3aW5kb3cgKSxcblx0XHRcdGlzV2luZG93ID0gJC5pc1dpbmRvdyggd2l0aGluRWxlbWVudFsgMCBdICksXG5cdFx0XHRpc0RvY3VtZW50ID0gISF3aXRoaW5FbGVtZW50WyAwIF0gJiYgd2l0aGluRWxlbWVudFsgMCBdLm5vZGVUeXBlID09PSA5LFxuXHRcdFx0aGFzT2Zmc2V0ID0gIWlzV2luZG93ICYmICFpc0RvY3VtZW50O1xuXHRcdHJldHVybiB7XG5cdFx0XHRlbGVtZW50OiB3aXRoaW5FbGVtZW50LFxuXHRcdFx0aXNXaW5kb3c6IGlzV2luZG93LFxuXHRcdFx0aXNEb2N1bWVudDogaXNEb2N1bWVudCxcblx0XHRcdG9mZnNldDogaGFzT2Zmc2V0ID8gJCggZWxlbWVudCApLm9mZnNldCgpIDogeyBsZWZ0OiAwLCB0b3A6IDAgfSxcblx0XHRcdHNjcm9sbExlZnQ6IHdpdGhpbkVsZW1lbnQuc2Nyb2xsTGVmdCgpLFxuXHRcdFx0c2Nyb2xsVG9wOiB3aXRoaW5FbGVtZW50LnNjcm9sbFRvcCgpLFxuXHRcdFx0d2lkdGg6IHdpdGhpbkVsZW1lbnQub3V0ZXJXaWR0aCgpLFxuXHRcdFx0aGVpZ2h0OiB3aXRoaW5FbGVtZW50Lm91dGVySGVpZ2h0KClcblx0XHR9O1xuXHR9XG59O1xuXG4kLmZuLnBvc2l0aW9uID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdGlmICggIW9wdGlvbnMgfHwgIW9wdGlvbnMub2YgKSB7XG5cdFx0cmV0dXJuIF9wb3NpdGlvbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH1cblxuXHQvLyBNYWtlIGEgY29weSwgd2UgZG9uJ3Qgd2FudCB0byBtb2RpZnkgYXJndW1lbnRzXG5cdG9wdGlvbnMgPSAkLmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHR2YXIgYXRPZmZzZXQsIHRhcmdldFdpZHRoLCB0YXJnZXRIZWlnaHQsIHRhcmdldE9mZnNldCwgYmFzZVBvc2l0aW9uLCBkaW1lbnNpb25zLFxuXHRcdHRhcmdldCA9ICQoIG9wdGlvbnMub2YgKSxcblx0XHR3aXRoaW4gPSAkLnBvc2l0aW9uLmdldFdpdGhpbkluZm8oIG9wdGlvbnMud2l0aGluICksXG5cdFx0c2Nyb2xsSW5mbyA9ICQucG9zaXRpb24uZ2V0U2Nyb2xsSW5mbyggd2l0aGluICksXG5cdFx0Y29sbGlzaW9uID0gKCBvcHRpb25zLmNvbGxpc2lvbiB8fCBcImZsaXBcIiApLnNwbGl0KCBcIiBcIiApLFxuXHRcdG9mZnNldHMgPSB7fTtcblxuXHRkaW1lbnNpb25zID0gZ2V0RGltZW5zaW9ucyggdGFyZ2V0ICk7XG5cdGlmICggdGFyZ2V0WyAwIF0ucHJldmVudERlZmF1bHQgKSB7XG5cblx0XHQvLyBGb3JjZSBsZWZ0IHRvcCB0byBhbGxvdyBmbGlwcGluZ1xuXHRcdG9wdGlvbnMuYXQgPSBcImxlZnQgdG9wXCI7XG5cdH1cblx0dGFyZ2V0V2lkdGggPSBkaW1lbnNpb25zLndpZHRoO1xuXHR0YXJnZXRIZWlnaHQgPSBkaW1lbnNpb25zLmhlaWdodDtcblx0dGFyZ2V0T2Zmc2V0ID0gZGltZW5zaW9ucy5vZmZzZXQ7XG5cblx0Ly8gQ2xvbmUgdG8gcmV1c2Ugb3JpZ2luYWwgdGFyZ2V0T2Zmc2V0IGxhdGVyXG5cdGJhc2VQb3NpdGlvbiA9ICQuZXh0ZW5kKCB7fSwgdGFyZ2V0T2Zmc2V0ICk7XG5cblx0Ly8gRm9yY2UgbXkgYW5kIGF0IHRvIGhhdmUgdmFsaWQgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgcG9zaXRpb25zXG5cdC8vIGlmIGEgdmFsdWUgaXMgbWlzc2luZyBvciBpbnZhbGlkLCBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBjZW50ZXJcblx0JC5lYWNoKCBbIFwibXlcIiwgXCJhdFwiIF0sIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBwb3MgPSAoIG9wdGlvbnNbIHRoaXMgXSB8fCBcIlwiICkuc3BsaXQoIFwiIFwiICksXG5cdFx0XHRob3Jpem9udGFsT2Zmc2V0LFxuXHRcdFx0dmVydGljYWxPZmZzZXQ7XG5cblx0XHRpZiAoIHBvcy5sZW5ndGggPT09IDEgKSB7XG5cdFx0XHRwb3MgPSByaG9yaXpvbnRhbC50ZXN0KCBwb3NbIDAgXSApID9cblx0XHRcdFx0cG9zLmNvbmNhdCggWyBcImNlbnRlclwiIF0gKSA6XG5cdFx0XHRcdHJ2ZXJ0aWNhbC50ZXN0KCBwb3NbIDAgXSApID9cblx0XHRcdFx0XHRbIFwiY2VudGVyXCIgXS5jb25jYXQoIHBvcyApIDpcblx0XHRcdFx0XHRbIFwiY2VudGVyXCIsIFwiY2VudGVyXCIgXTtcblx0XHR9XG5cdFx0cG9zWyAwIF0gPSByaG9yaXpvbnRhbC50ZXN0KCBwb3NbIDAgXSApID8gcG9zWyAwIF0gOiBcImNlbnRlclwiO1xuXHRcdHBvc1sgMSBdID0gcnZlcnRpY2FsLnRlc3QoIHBvc1sgMSBdICkgPyBwb3NbIDEgXSA6IFwiY2VudGVyXCI7XG5cblx0XHQvLyBDYWxjdWxhdGUgb2Zmc2V0c1xuXHRcdGhvcml6b250YWxPZmZzZXQgPSByb2Zmc2V0LmV4ZWMoIHBvc1sgMCBdICk7XG5cdFx0dmVydGljYWxPZmZzZXQgPSByb2Zmc2V0LmV4ZWMoIHBvc1sgMSBdICk7XG5cdFx0b2Zmc2V0c1sgdGhpcyBdID0gW1xuXHRcdFx0aG9yaXpvbnRhbE9mZnNldCA/IGhvcml6b250YWxPZmZzZXRbIDAgXSA6IDAsXG5cdFx0XHR2ZXJ0aWNhbE9mZnNldCA/IHZlcnRpY2FsT2Zmc2V0WyAwIF0gOiAwXG5cdFx0XTtcblxuXHRcdC8vIFJlZHVjZSB0byBqdXN0IHRoZSBwb3NpdGlvbnMgd2l0aG91dCB0aGUgb2Zmc2V0c1xuXHRcdG9wdGlvbnNbIHRoaXMgXSA9IFtcblx0XHRcdHJwb3NpdGlvbi5leGVjKCBwb3NbIDAgXSApWyAwIF0sXG5cdFx0XHRycG9zaXRpb24uZXhlYyggcG9zWyAxIF0gKVsgMCBdXG5cdFx0XTtcblx0fSApO1xuXG5cdC8vIE5vcm1hbGl6ZSBjb2xsaXNpb24gb3B0aW9uXG5cdGlmICggY29sbGlzaW9uLmxlbmd0aCA9PT0gMSApIHtcblx0XHRjb2xsaXNpb25bIDEgXSA9IGNvbGxpc2lvblsgMCBdO1xuXHR9XG5cblx0aWYgKCBvcHRpb25zLmF0WyAwIF0gPT09IFwicmlnaHRcIiApIHtcblx0XHRiYXNlUG9zaXRpb24ubGVmdCArPSB0YXJnZXRXaWR0aDtcblx0fSBlbHNlIGlmICggb3B0aW9ucy5hdFsgMCBdID09PSBcImNlbnRlclwiICkge1xuXHRcdGJhc2VQb3NpdGlvbi5sZWZ0ICs9IHRhcmdldFdpZHRoIC8gMjtcblx0fVxuXG5cdGlmICggb3B0aW9ucy5hdFsgMSBdID09PSBcImJvdHRvbVwiICkge1xuXHRcdGJhc2VQb3NpdGlvbi50b3AgKz0gdGFyZ2V0SGVpZ2h0O1xuXHR9IGVsc2UgaWYgKCBvcHRpb25zLmF0WyAxIF0gPT09IFwiY2VudGVyXCIgKSB7XG5cdFx0YmFzZVBvc2l0aW9uLnRvcCArPSB0YXJnZXRIZWlnaHQgLyAyO1xuXHR9XG5cblx0YXRPZmZzZXQgPSBnZXRPZmZzZXRzKCBvZmZzZXRzLmF0LCB0YXJnZXRXaWR0aCwgdGFyZ2V0SGVpZ2h0ICk7XG5cdGJhc2VQb3NpdGlvbi5sZWZ0ICs9IGF0T2Zmc2V0WyAwIF07XG5cdGJhc2VQb3NpdGlvbi50b3AgKz0gYXRPZmZzZXRbIDEgXTtcblxuXHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHR2YXIgY29sbGlzaW9uUG9zaXRpb24sIHVzaW5nLFxuXHRcdFx0ZWxlbSA9ICQoIHRoaXMgKSxcblx0XHRcdGVsZW1XaWR0aCA9IGVsZW0ub3V0ZXJXaWR0aCgpLFxuXHRcdFx0ZWxlbUhlaWdodCA9IGVsZW0ub3V0ZXJIZWlnaHQoKSxcblx0XHRcdG1hcmdpbkxlZnQgPSBwYXJzZUNzcyggdGhpcywgXCJtYXJnaW5MZWZ0XCIgKSxcblx0XHRcdG1hcmdpblRvcCA9IHBhcnNlQ3NzKCB0aGlzLCBcIm1hcmdpblRvcFwiICksXG5cdFx0XHRjb2xsaXNpb25XaWR0aCA9IGVsZW1XaWR0aCArIG1hcmdpbkxlZnQgKyBwYXJzZUNzcyggdGhpcywgXCJtYXJnaW5SaWdodFwiICkgK1xuXHRcdFx0XHRzY3JvbGxJbmZvLndpZHRoLFxuXHRcdFx0Y29sbGlzaW9uSGVpZ2h0ID0gZWxlbUhlaWdodCArIG1hcmdpblRvcCArIHBhcnNlQ3NzKCB0aGlzLCBcIm1hcmdpbkJvdHRvbVwiICkgK1xuXHRcdFx0XHRzY3JvbGxJbmZvLmhlaWdodCxcblx0XHRcdHBvc2l0aW9uID0gJC5leHRlbmQoIHt9LCBiYXNlUG9zaXRpb24gKSxcblx0XHRcdG15T2Zmc2V0ID0gZ2V0T2Zmc2V0cyggb2Zmc2V0cy5teSwgZWxlbS5vdXRlcldpZHRoKCksIGVsZW0ub3V0ZXJIZWlnaHQoKSApO1xuXG5cdFx0aWYgKCBvcHRpb25zLm15WyAwIF0gPT09IFwicmlnaHRcIiApIHtcblx0XHRcdHBvc2l0aW9uLmxlZnQgLT0gZWxlbVdpZHRoO1xuXHRcdH0gZWxzZSBpZiAoIG9wdGlvbnMubXlbIDAgXSA9PT0gXCJjZW50ZXJcIiApIHtcblx0XHRcdHBvc2l0aW9uLmxlZnQgLT0gZWxlbVdpZHRoIC8gMjtcblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbnMubXlbIDEgXSA9PT0gXCJib3R0b21cIiApIHtcblx0XHRcdHBvc2l0aW9uLnRvcCAtPSBlbGVtSGVpZ2h0O1xuXHRcdH0gZWxzZSBpZiAoIG9wdGlvbnMubXlbIDEgXSA9PT0gXCJjZW50ZXJcIiApIHtcblx0XHRcdHBvc2l0aW9uLnRvcCAtPSBlbGVtSGVpZ2h0IC8gMjtcblx0XHR9XG5cblx0XHRwb3NpdGlvbi5sZWZ0ICs9IG15T2Zmc2V0WyAwIF07XG5cdFx0cG9zaXRpb24udG9wICs9IG15T2Zmc2V0WyAxIF07XG5cblx0XHRjb2xsaXNpb25Qb3NpdGlvbiA9IHtcblx0XHRcdG1hcmdpbkxlZnQ6IG1hcmdpbkxlZnQsXG5cdFx0XHRtYXJnaW5Ub3A6IG1hcmdpblRvcFxuXHRcdH07XG5cblx0XHQkLmVhY2goIFsgXCJsZWZ0XCIsIFwidG9wXCIgXSwgZnVuY3Rpb24oIGksIGRpciApIHtcblx0XHRcdGlmICggJC51aS5wb3NpdGlvblsgY29sbGlzaW9uWyBpIF0gXSApIHtcblx0XHRcdFx0JC51aS5wb3NpdGlvblsgY29sbGlzaW9uWyBpIF0gXVsgZGlyIF0oIHBvc2l0aW9uLCB7XG5cdFx0XHRcdFx0dGFyZ2V0V2lkdGg6IHRhcmdldFdpZHRoLFxuXHRcdFx0XHRcdHRhcmdldEhlaWdodDogdGFyZ2V0SGVpZ2h0LFxuXHRcdFx0XHRcdGVsZW1XaWR0aDogZWxlbVdpZHRoLFxuXHRcdFx0XHRcdGVsZW1IZWlnaHQ6IGVsZW1IZWlnaHQsXG5cdFx0XHRcdFx0Y29sbGlzaW9uUG9zaXRpb246IGNvbGxpc2lvblBvc2l0aW9uLFxuXHRcdFx0XHRcdGNvbGxpc2lvbldpZHRoOiBjb2xsaXNpb25XaWR0aCxcblx0XHRcdFx0XHRjb2xsaXNpb25IZWlnaHQ6IGNvbGxpc2lvbkhlaWdodCxcblx0XHRcdFx0XHRvZmZzZXQ6IFsgYXRPZmZzZXRbIDAgXSArIG15T2Zmc2V0WyAwIF0sIGF0T2Zmc2V0IFsgMSBdICsgbXlPZmZzZXRbIDEgXSBdLFxuXHRcdFx0XHRcdG15OiBvcHRpb25zLm15LFxuXHRcdFx0XHRcdGF0OiBvcHRpb25zLmF0LFxuXHRcdFx0XHRcdHdpdGhpbjogd2l0aGluLFxuXHRcdFx0XHRcdGVsZW06IGVsZW1cblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdGlmICggb3B0aW9ucy51c2luZyApIHtcblxuXHRcdFx0Ly8gQWRkcyBmZWVkYmFjayBhcyBzZWNvbmQgYXJndW1lbnQgdG8gdXNpbmcgY2FsbGJhY2ssIGlmIHByZXNlbnRcblx0XHRcdHVzaW5nID0gZnVuY3Rpb24oIHByb3BzICkge1xuXHRcdFx0XHR2YXIgbGVmdCA9IHRhcmdldE9mZnNldC5sZWZ0IC0gcG9zaXRpb24ubGVmdCxcblx0XHRcdFx0XHRyaWdodCA9IGxlZnQgKyB0YXJnZXRXaWR0aCAtIGVsZW1XaWR0aCxcblx0XHRcdFx0XHR0b3AgPSB0YXJnZXRPZmZzZXQudG9wIC0gcG9zaXRpb24udG9wLFxuXHRcdFx0XHRcdGJvdHRvbSA9IHRvcCArIHRhcmdldEhlaWdodCAtIGVsZW1IZWlnaHQsXG5cdFx0XHRcdFx0ZmVlZGJhY2sgPSB7XG5cdFx0XHRcdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0XHRcdFx0ZWxlbWVudDogdGFyZ2V0LFxuXHRcdFx0XHRcdFx0XHRsZWZ0OiB0YXJnZXRPZmZzZXQubGVmdCxcblx0XHRcdFx0XHRcdFx0dG9wOiB0YXJnZXRPZmZzZXQudG9wLFxuXHRcdFx0XHRcdFx0XHR3aWR0aDogdGFyZ2V0V2lkdGgsXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogdGFyZ2V0SGVpZ2h0XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZWxlbWVudDoge1xuXHRcdFx0XHRcdFx0XHRlbGVtZW50OiBlbGVtLFxuXHRcdFx0XHRcdFx0XHRsZWZ0OiBwb3NpdGlvbi5sZWZ0LFxuXHRcdFx0XHRcdFx0XHR0b3A6IHBvc2l0aW9uLnRvcCxcblx0XHRcdFx0XHRcdFx0d2lkdGg6IGVsZW1XaWR0aCxcblx0XHRcdFx0XHRcdFx0aGVpZ2h0OiBlbGVtSGVpZ2h0XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0aG9yaXpvbnRhbDogcmlnaHQgPCAwID8gXCJsZWZ0XCIgOiBsZWZ0ID4gMCA/IFwicmlnaHRcIiA6IFwiY2VudGVyXCIsXG5cdFx0XHRcdFx0XHR2ZXJ0aWNhbDogYm90dG9tIDwgMCA/IFwidG9wXCIgOiB0b3AgPiAwID8gXCJib3R0b21cIiA6IFwibWlkZGxlXCJcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAoIHRhcmdldFdpZHRoIDwgZWxlbVdpZHRoICYmIGFicyggbGVmdCArIHJpZ2h0ICkgPCB0YXJnZXRXaWR0aCApIHtcblx0XHRcdFx0XHRmZWVkYmFjay5ob3Jpem9udGFsID0gXCJjZW50ZXJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIHRhcmdldEhlaWdodCA8IGVsZW1IZWlnaHQgJiYgYWJzKCB0b3AgKyBib3R0b20gKSA8IHRhcmdldEhlaWdodCApIHtcblx0XHRcdFx0XHRmZWVkYmFjay52ZXJ0aWNhbCA9IFwibWlkZGxlXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBtYXgoIGFicyggbGVmdCApLCBhYnMoIHJpZ2h0ICkgKSA+IG1heCggYWJzKCB0b3AgKSwgYWJzKCBib3R0b20gKSApICkge1xuXHRcdFx0XHRcdGZlZWRiYWNrLmltcG9ydGFudCA9IFwiaG9yaXpvbnRhbFwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZlZWRiYWNrLmltcG9ydGFudCA9IFwidmVydGljYWxcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRvcHRpb25zLnVzaW5nLmNhbGwoIHRoaXMsIHByb3BzLCBmZWVkYmFjayApO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRlbGVtLm9mZnNldCggJC5leHRlbmQoIHBvc2l0aW9uLCB7IHVzaW5nOiB1c2luZyB9ICkgKTtcblx0fSApO1xufTtcblxuJC51aS5wb3NpdGlvbiA9IHtcblx0Zml0OiB7XG5cdFx0bGVmdDogZnVuY3Rpb24oIHBvc2l0aW9uLCBkYXRhICkge1xuXHRcdFx0dmFyIHdpdGhpbiA9IGRhdGEud2l0aGluLFxuXHRcdFx0XHR3aXRoaW5PZmZzZXQgPSB3aXRoaW4uaXNXaW5kb3cgPyB3aXRoaW4uc2Nyb2xsTGVmdCA6IHdpdGhpbi5vZmZzZXQubGVmdCxcblx0XHRcdFx0b3V0ZXJXaWR0aCA9IHdpdGhpbi53aWR0aCxcblx0XHRcdFx0Y29sbGlzaW9uUG9zTGVmdCA9IHBvc2l0aW9uLmxlZnQgLSBkYXRhLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQsXG5cdFx0XHRcdG92ZXJMZWZ0ID0gd2l0aGluT2Zmc2V0IC0gY29sbGlzaW9uUG9zTGVmdCxcblx0XHRcdFx0b3ZlclJpZ2h0ID0gY29sbGlzaW9uUG9zTGVmdCArIGRhdGEuY29sbGlzaW9uV2lkdGggLSBvdXRlcldpZHRoIC0gd2l0aGluT2Zmc2V0LFxuXHRcdFx0XHRuZXdPdmVyUmlnaHQ7XG5cblx0XHRcdC8vIEVsZW1lbnQgaXMgd2lkZXIgdGhhbiB3aXRoaW5cblx0XHRcdGlmICggZGF0YS5jb2xsaXNpb25XaWR0aCA+IG91dGVyV2lkdGggKSB7XG5cblx0XHRcdFx0Ly8gRWxlbWVudCBpcyBpbml0aWFsbHkgb3ZlciB0aGUgbGVmdCBzaWRlIG9mIHdpdGhpblxuXHRcdFx0XHRpZiAoIG92ZXJMZWZ0ID4gMCAmJiBvdmVyUmlnaHQgPD0gMCApIHtcblx0XHRcdFx0XHRuZXdPdmVyUmlnaHQgPSBwb3NpdGlvbi5sZWZ0ICsgb3ZlckxlZnQgKyBkYXRhLmNvbGxpc2lvbldpZHRoIC0gb3V0ZXJXaWR0aCAtXG5cdFx0XHRcdFx0XHR3aXRoaW5PZmZzZXQ7XG5cdFx0XHRcdFx0cG9zaXRpb24ubGVmdCArPSBvdmVyTGVmdCAtIG5ld092ZXJSaWdodDtcblxuXHRcdFx0XHQvLyBFbGVtZW50IGlzIGluaXRpYWxseSBvdmVyIHJpZ2h0IHNpZGUgb2Ygd2l0aGluXG5cdFx0XHRcdH0gZWxzZSBpZiAoIG92ZXJSaWdodCA+IDAgJiYgb3ZlckxlZnQgPD0gMCApIHtcblx0XHRcdFx0XHRwb3NpdGlvbi5sZWZ0ID0gd2l0aGluT2Zmc2V0O1xuXG5cdFx0XHRcdC8vIEVsZW1lbnQgaXMgaW5pdGlhbGx5IG92ZXIgYm90aCBsZWZ0IGFuZCByaWdodCBzaWRlcyBvZiB3aXRoaW5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoIG92ZXJMZWZ0ID4gb3ZlclJpZ2h0ICkge1xuXHRcdFx0XHRcdFx0cG9zaXRpb24ubGVmdCA9IHdpdGhpbk9mZnNldCArIG91dGVyV2lkdGggLSBkYXRhLmNvbGxpc2lvbldpZHRoO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRwb3NpdGlvbi5sZWZ0ID0gd2l0aGluT2Zmc2V0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBUb28gZmFyIGxlZnQgLT4gYWxpZ24gd2l0aCBsZWZ0IGVkZ2Vcblx0XHRcdH0gZWxzZSBpZiAoIG92ZXJMZWZ0ID4gMCApIHtcblx0XHRcdFx0cG9zaXRpb24ubGVmdCArPSBvdmVyTGVmdDtcblxuXHRcdFx0Ly8gVG9vIGZhciByaWdodCAtPiBhbGlnbiB3aXRoIHJpZ2h0IGVkZ2Vcblx0XHRcdH0gZWxzZSBpZiAoIG92ZXJSaWdodCA+IDAgKSB7XG5cdFx0XHRcdHBvc2l0aW9uLmxlZnQgLT0gb3ZlclJpZ2h0O1xuXG5cdFx0XHQvLyBBZGp1c3QgYmFzZWQgb24gcG9zaXRpb24gYW5kIG1hcmdpblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cG9zaXRpb24ubGVmdCA9IG1heCggcG9zaXRpb24ubGVmdCAtIGNvbGxpc2lvblBvc0xlZnQsIHBvc2l0aW9uLmxlZnQgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHRvcDogZnVuY3Rpb24oIHBvc2l0aW9uLCBkYXRhICkge1xuXHRcdFx0dmFyIHdpdGhpbiA9IGRhdGEud2l0aGluLFxuXHRcdFx0XHR3aXRoaW5PZmZzZXQgPSB3aXRoaW4uaXNXaW5kb3cgPyB3aXRoaW4uc2Nyb2xsVG9wIDogd2l0aGluLm9mZnNldC50b3AsXG5cdFx0XHRcdG91dGVySGVpZ2h0ID0gZGF0YS53aXRoaW4uaGVpZ2h0LFxuXHRcdFx0XHRjb2xsaXNpb25Qb3NUb3AgPSBwb3NpdGlvbi50b3AgLSBkYXRhLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCxcblx0XHRcdFx0b3ZlclRvcCA9IHdpdGhpbk9mZnNldCAtIGNvbGxpc2lvblBvc1RvcCxcblx0XHRcdFx0b3ZlckJvdHRvbSA9IGNvbGxpc2lvblBvc1RvcCArIGRhdGEuY29sbGlzaW9uSGVpZ2h0IC0gb3V0ZXJIZWlnaHQgLSB3aXRoaW5PZmZzZXQsXG5cdFx0XHRcdG5ld092ZXJCb3R0b207XG5cblx0XHRcdC8vIEVsZW1lbnQgaXMgdGFsbGVyIHRoYW4gd2l0aGluXG5cdFx0XHRpZiAoIGRhdGEuY29sbGlzaW9uSGVpZ2h0ID4gb3V0ZXJIZWlnaHQgKSB7XG5cblx0XHRcdFx0Ly8gRWxlbWVudCBpcyBpbml0aWFsbHkgb3ZlciB0aGUgdG9wIG9mIHdpdGhpblxuXHRcdFx0XHRpZiAoIG92ZXJUb3AgPiAwICYmIG92ZXJCb3R0b20gPD0gMCApIHtcblx0XHRcdFx0XHRuZXdPdmVyQm90dG9tID0gcG9zaXRpb24udG9wICsgb3ZlclRvcCArIGRhdGEuY29sbGlzaW9uSGVpZ2h0IC0gb3V0ZXJIZWlnaHQgLVxuXHRcdFx0XHRcdFx0d2l0aGluT2Zmc2V0O1xuXHRcdFx0XHRcdHBvc2l0aW9uLnRvcCArPSBvdmVyVG9wIC0gbmV3T3ZlckJvdHRvbTtcblxuXHRcdFx0XHQvLyBFbGVtZW50IGlzIGluaXRpYWxseSBvdmVyIGJvdHRvbSBvZiB3aXRoaW5cblx0XHRcdFx0fSBlbHNlIGlmICggb3ZlckJvdHRvbSA+IDAgJiYgb3ZlclRvcCA8PSAwICkge1xuXHRcdFx0XHRcdHBvc2l0aW9uLnRvcCA9IHdpdGhpbk9mZnNldDtcblxuXHRcdFx0XHQvLyBFbGVtZW50IGlzIGluaXRpYWxseSBvdmVyIGJvdGggdG9wIGFuZCBib3R0b20gb2Ygd2l0aGluXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKCBvdmVyVG9wID4gb3ZlckJvdHRvbSApIHtcblx0XHRcdFx0XHRcdHBvc2l0aW9uLnRvcCA9IHdpdGhpbk9mZnNldCArIG91dGVySGVpZ2h0IC0gZGF0YS5jb2xsaXNpb25IZWlnaHQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHBvc2l0aW9uLnRvcCA9IHdpdGhpbk9mZnNldDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gVG9vIGZhciB1cCAtPiBhbGlnbiB3aXRoIHRvcFxuXHRcdFx0fSBlbHNlIGlmICggb3ZlclRvcCA+IDAgKSB7XG5cdFx0XHRcdHBvc2l0aW9uLnRvcCArPSBvdmVyVG9wO1xuXG5cdFx0XHQvLyBUb28gZmFyIGRvd24gLT4gYWxpZ24gd2l0aCBib3R0b20gZWRnZVxuXHRcdFx0fSBlbHNlIGlmICggb3ZlckJvdHRvbSA+IDAgKSB7XG5cdFx0XHRcdHBvc2l0aW9uLnRvcCAtPSBvdmVyQm90dG9tO1xuXG5cdFx0XHQvLyBBZGp1c3QgYmFzZWQgb24gcG9zaXRpb24gYW5kIG1hcmdpblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cG9zaXRpb24udG9wID0gbWF4KCBwb3NpdGlvbi50b3AgLSBjb2xsaXNpb25Qb3NUb3AsIHBvc2l0aW9uLnRvcCApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0ZmxpcDoge1xuXHRcdGxlZnQ6IGZ1bmN0aW9uKCBwb3NpdGlvbiwgZGF0YSApIHtcblx0XHRcdHZhciB3aXRoaW4gPSBkYXRhLndpdGhpbixcblx0XHRcdFx0d2l0aGluT2Zmc2V0ID0gd2l0aGluLm9mZnNldC5sZWZ0ICsgd2l0aGluLnNjcm9sbExlZnQsXG5cdFx0XHRcdG91dGVyV2lkdGggPSB3aXRoaW4ud2lkdGgsXG5cdFx0XHRcdG9mZnNldExlZnQgPSB3aXRoaW4uaXNXaW5kb3cgPyB3aXRoaW4uc2Nyb2xsTGVmdCA6IHdpdGhpbi5vZmZzZXQubGVmdCxcblx0XHRcdFx0Y29sbGlzaW9uUG9zTGVmdCA9IHBvc2l0aW9uLmxlZnQgLSBkYXRhLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQsXG5cdFx0XHRcdG92ZXJMZWZ0ID0gY29sbGlzaW9uUG9zTGVmdCAtIG9mZnNldExlZnQsXG5cdFx0XHRcdG92ZXJSaWdodCA9IGNvbGxpc2lvblBvc0xlZnQgKyBkYXRhLmNvbGxpc2lvbldpZHRoIC0gb3V0ZXJXaWR0aCAtIG9mZnNldExlZnQsXG5cdFx0XHRcdG15T2Zmc2V0ID0gZGF0YS5teVsgMCBdID09PSBcImxlZnRcIiA/XG5cdFx0XHRcdFx0LWRhdGEuZWxlbVdpZHRoIDpcblx0XHRcdFx0XHRkYXRhLm15WyAwIF0gPT09IFwicmlnaHRcIiA/XG5cdFx0XHRcdFx0XHRkYXRhLmVsZW1XaWR0aCA6XG5cdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRhdE9mZnNldCA9IGRhdGEuYXRbIDAgXSA9PT0gXCJsZWZ0XCIgP1xuXHRcdFx0XHRcdGRhdGEudGFyZ2V0V2lkdGggOlxuXHRcdFx0XHRcdGRhdGEuYXRbIDAgXSA9PT0gXCJyaWdodFwiID9cblx0XHRcdFx0XHRcdC1kYXRhLnRhcmdldFdpZHRoIDpcblx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdG9mZnNldCA9IC0yICogZGF0YS5vZmZzZXRbIDAgXSxcblx0XHRcdFx0bmV3T3ZlclJpZ2h0LFxuXHRcdFx0XHRuZXdPdmVyTGVmdDtcblxuXHRcdFx0aWYgKCBvdmVyTGVmdCA8IDAgKSB7XG5cdFx0XHRcdG5ld092ZXJSaWdodCA9IHBvc2l0aW9uLmxlZnQgKyBteU9mZnNldCArIGF0T2Zmc2V0ICsgb2Zmc2V0ICsgZGF0YS5jb2xsaXNpb25XaWR0aCAtXG5cdFx0XHRcdFx0b3V0ZXJXaWR0aCAtIHdpdGhpbk9mZnNldDtcblx0XHRcdFx0aWYgKCBuZXdPdmVyUmlnaHQgPCAwIHx8IG5ld092ZXJSaWdodCA8IGFicyggb3ZlckxlZnQgKSApIHtcblx0XHRcdFx0XHRwb3NpdGlvbi5sZWZ0ICs9IG15T2Zmc2V0ICsgYXRPZmZzZXQgKyBvZmZzZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoIG92ZXJSaWdodCA+IDAgKSB7XG5cdFx0XHRcdG5ld092ZXJMZWZ0ID0gcG9zaXRpb24ubGVmdCAtIGRhdGEuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCArIG15T2Zmc2V0ICtcblx0XHRcdFx0XHRhdE9mZnNldCArIG9mZnNldCAtIG9mZnNldExlZnQ7XG5cdFx0XHRcdGlmICggbmV3T3ZlckxlZnQgPiAwIHx8IGFicyggbmV3T3ZlckxlZnQgKSA8IG92ZXJSaWdodCApIHtcblx0XHRcdFx0XHRwb3NpdGlvbi5sZWZ0ICs9IG15T2Zmc2V0ICsgYXRPZmZzZXQgKyBvZmZzZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdHRvcDogZnVuY3Rpb24oIHBvc2l0aW9uLCBkYXRhICkge1xuXHRcdFx0dmFyIHdpdGhpbiA9IGRhdGEud2l0aGluLFxuXHRcdFx0XHR3aXRoaW5PZmZzZXQgPSB3aXRoaW4ub2Zmc2V0LnRvcCArIHdpdGhpbi5zY3JvbGxUb3AsXG5cdFx0XHRcdG91dGVySGVpZ2h0ID0gd2l0aGluLmhlaWdodCxcblx0XHRcdFx0b2Zmc2V0VG9wID0gd2l0aGluLmlzV2luZG93ID8gd2l0aGluLnNjcm9sbFRvcCA6IHdpdGhpbi5vZmZzZXQudG9wLFxuXHRcdFx0XHRjb2xsaXNpb25Qb3NUb3AgPSBwb3NpdGlvbi50b3AgLSBkYXRhLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCxcblx0XHRcdFx0b3ZlclRvcCA9IGNvbGxpc2lvblBvc1RvcCAtIG9mZnNldFRvcCxcblx0XHRcdFx0b3ZlckJvdHRvbSA9IGNvbGxpc2lvblBvc1RvcCArIGRhdGEuY29sbGlzaW9uSGVpZ2h0IC0gb3V0ZXJIZWlnaHQgLSBvZmZzZXRUb3AsXG5cdFx0XHRcdHRvcCA9IGRhdGEubXlbIDEgXSA9PT0gXCJ0b3BcIixcblx0XHRcdFx0bXlPZmZzZXQgPSB0b3AgP1xuXHRcdFx0XHRcdC1kYXRhLmVsZW1IZWlnaHQgOlxuXHRcdFx0XHRcdGRhdGEubXlbIDEgXSA9PT0gXCJib3R0b21cIiA/XG5cdFx0XHRcdFx0XHRkYXRhLmVsZW1IZWlnaHQgOlxuXHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0YXRPZmZzZXQgPSBkYXRhLmF0WyAxIF0gPT09IFwidG9wXCIgP1xuXHRcdFx0XHRcdGRhdGEudGFyZ2V0SGVpZ2h0IDpcblx0XHRcdFx0XHRkYXRhLmF0WyAxIF0gPT09IFwiYm90dG9tXCIgP1xuXHRcdFx0XHRcdFx0LWRhdGEudGFyZ2V0SGVpZ2h0IDpcblx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdG9mZnNldCA9IC0yICogZGF0YS5vZmZzZXRbIDEgXSxcblx0XHRcdFx0bmV3T3ZlclRvcCxcblx0XHRcdFx0bmV3T3ZlckJvdHRvbTtcblx0XHRcdGlmICggb3ZlclRvcCA8IDAgKSB7XG5cdFx0XHRcdG5ld092ZXJCb3R0b20gPSBwb3NpdGlvbi50b3AgKyBteU9mZnNldCArIGF0T2Zmc2V0ICsgb2Zmc2V0ICsgZGF0YS5jb2xsaXNpb25IZWlnaHQgLVxuXHRcdFx0XHRcdG91dGVySGVpZ2h0IC0gd2l0aGluT2Zmc2V0O1xuXHRcdFx0XHRpZiAoIG5ld092ZXJCb3R0b20gPCAwIHx8IG5ld092ZXJCb3R0b20gPCBhYnMoIG92ZXJUb3AgKSApIHtcblx0XHRcdFx0XHRwb3NpdGlvbi50b3AgKz0gbXlPZmZzZXQgKyBhdE9mZnNldCArIG9mZnNldDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICggb3ZlckJvdHRvbSA+IDAgKSB7XG5cdFx0XHRcdG5ld092ZXJUb3AgPSBwb3NpdGlvbi50b3AgLSBkYXRhLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCArIG15T2Zmc2V0ICsgYXRPZmZzZXQgK1xuXHRcdFx0XHRcdG9mZnNldCAtIG9mZnNldFRvcDtcblx0XHRcdFx0aWYgKCBuZXdPdmVyVG9wID4gMCB8fCBhYnMoIG5ld092ZXJUb3AgKSA8IG92ZXJCb3R0b20gKSB7XG5cdFx0XHRcdFx0cG9zaXRpb24udG9wICs9IG15T2Zmc2V0ICsgYXRPZmZzZXQgKyBvZmZzZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdGZsaXBmaXQ6IHtcblx0XHRsZWZ0OiBmdW5jdGlvbigpIHtcblx0XHRcdCQudWkucG9zaXRpb24uZmxpcC5sZWZ0LmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdCQudWkucG9zaXRpb24uZml0LmxlZnQuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH0sXG5cdFx0dG9wOiBmdW5jdGlvbigpIHtcblx0XHRcdCQudWkucG9zaXRpb24uZmxpcC50b3AuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0JC51aS5wb3NpdGlvbi5maXQudG9wLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9XG5cdH1cbn07XG5cbn0gKSgpO1xuXG52YXIgcG9zaXRpb24gPSAkLnVpLnBvc2l0aW9uO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIDpkYXRhIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiA6ZGF0YSBTZWxlY3RvclxuLy8+Pmdyb3VwOiBDb3JlXG4vLz4+ZGVzY3JpcHRpb246IFNlbGVjdHMgZWxlbWVudHMgd2hpY2ggaGF2ZSBkYXRhIHN0b3JlZCB1bmRlciB0aGUgc3BlY2lmaWVkIGtleS5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9kYXRhLXNlbGVjdG9yL1xuXG5cbnZhciBkYXRhID0gJC5leHRlbmQoICQuZXhwclsgXCI6XCIgXSwge1xuXHRkYXRhOiAkLmV4cHIuY3JlYXRlUHNldWRvID9cblx0XHQkLmV4cHIuY3JlYXRlUHNldWRvKCBmdW5jdGlvbiggZGF0YU5hbWUgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiAhISQuZGF0YSggZWxlbSwgZGF0YU5hbWUgKTtcblx0XHRcdH07XG5cdFx0fSApIDpcblxuXHRcdC8vIFN1cHBvcnQ6IGpRdWVyeSA8MS44XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGksIG1hdGNoICkge1xuXHRcdFx0cmV0dXJuICEhJC5kYXRhKCBlbGVtLCBtYXRjaFsgMyBdICk7XG5cdFx0fVxufSApO1xuXG4vKiFcbiAqIGpRdWVyeSBVSSBEaXNhYmxlIFNlbGVjdGlvbiAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogZGlzYWJsZVNlbGVjdGlvblxuLy8+Pmdyb3VwOiBDb3JlXG4vLz4+ZGVzY3JpcHRpb246IERpc2FibGUgc2VsZWN0aW9uIG9mIHRleHQgY29udGVudCB3aXRoaW4gdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL2Rpc2FibGVTZWxlY3Rpb24vXG5cbi8vIFRoaXMgZmlsZSBpcyBkZXByZWNhdGVkXG5cblxudmFyIGRpc2FibGVTZWxlY3Rpb24gPSAkLmZuLmV4dGVuZCgge1xuXHRkaXNhYmxlU2VsZWN0aW9uOiAoIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBldmVudFR5cGUgPSBcIm9uc2VsZWN0c3RhcnRcIiBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgP1xuXHRcdFx0XCJzZWxlY3RzdGFydFwiIDpcblx0XHRcdFwibW91c2Vkb3duXCI7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5vbiggZXZlbnRUeXBlICsgXCIudWktZGlzYWJsZVNlbGVjdGlvblwiLCBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR9ICk7XG5cdFx0fTtcblx0fSApKCksXG5cblx0ZW5hYmxlU2VsZWN0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5vZmYoIFwiLnVpLWRpc2FibGVTZWxlY3Rpb25cIiApO1xuXHR9XG59ICk7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgRWZmZWN0cyAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogRWZmZWN0cyBDb3JlXG4vLz4+Z3JvdXA6IEVmZmVjdHNcbi8vIGpzY3M6ZGlzYWJsZSBtYXhpbXVtTGluZUxlbmd0aFxuLy8+PmRlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBpbnRlcm5hbCBqUXVlcnkgZWZmZWN0cy4gSW5jbHVkZXMgbW9ycGhpbmcgYW5kIGVhc2luZy4gUmVxdWlyZWQgYnkgYWxsIG90aGVyIGVmZmVjdHMuXG4vLyBqc2NzOmVuYWJsZSBtYXhpbXVtTGluZUxlbmd0aFxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL2NhdGVnb3J5L2VmZmVjdHMtY29yZS9cbi8vPj5kZW1vczogaHR0cDovL2pxdWVyeXVpLmNvbS9lZmZlY3QvXG5cblxuXG52YXIgZGF0YVNwYWNlID0gXCJ1aS1lZmZlY3RzLVwiLFxuXHRkYXRhU3BhY2VTdHlsZSA9IFwidWktZWZmZWN0cy1zdHlsZVwiLFxuXHRkYXRhU3BhY2VBbmltYXRlZCA9IFwidWktZWZmZWN0cy1hbmltYXRlZFwiLFxuXG5cdC8vIENyZWF0ZSBhIGxvY2FsIGpRdWVyeSBiZWNhdXNlIGpRdWVyeSBDb2xvciByZWxpZXMgb24gaXQgYW5kIHRoZVxuXHQvLyBnbG9iYWwgbWF5IG5vdCBleGlzdCB3aXRoIEFNRCBhbmQgYSBjdXN0b20gYnVpbGQgKCMxMDE5OSlcblx0alF1ZXJ5ID0gJDtcblxuJC5lZmZlY3RzID0ge1xuXHRlZmZlY3Q6IHt9XG59O1xuXG4vKiFcbiAqIGpRdWVyeSBDb2xvciBBbmltYXRpb25zIHYyLjEuMlxuICogaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnktY29sb3JcbiAqXG4gKiBDb3B5cmlnaHQgMjAxNCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogV2VkIEphbiAxNiAwODo0NzowOSAyMDEzIC0wNjAwXG4gKi9cbiggZnVuY3Rpb24oIGpRdWVyeSwgdW5kZWZpbmVkICkge1xuXG5cdHZhciBzdGVwSG9va3MgPSBcImJhY2tncm91bmRDb2xvciBib3JkZXJCb3R0b21Db2xvciBib3JkZXJMZWZ0Q29sb3IgYm9yZGVyUmlnaHRDb2xvciBcIiArXG5cdFx0XCJib3JkZXJUb3BDb2xvciBjb2xvciBjb2x1bW5SdWxlQ29sb3Igb3V0bGluZUNvbG9yIHRleHREZWNvcmF0aW9uQ29sb3IgdGV4dEVtcGhhc2lzQ29sb3JcIixcblxuXHQvLyBQbHVzZXF1YWxzIHRlc3QgZm9yICs9IDEwMCAtPSAxMDBcblx0cnBsdXNlcXVhbHMgPSAvXihbXFwtK10pPVxccyooXFxkK1xcLj9cXGQqKS8sXG5cblx0Ly8gQSBzZXQgb2YgUkUncyB0aGF0IGNhbiBtYXRjaCBzdHJpbmdzIGFuZCBnZW5lcmF0ZSBjb2xvciB0dXBsZXMuXG5cdHN0cmluZ1BhcnNlcnMgPSBbIHtcblx0XHRcdHJlOiAvcmdiYT9cXChcXHMqKFxcZHsxLDN9KVxccyosXFxzKihcXGR7MSwzfSlcXHMqLFxccyooXFxkezEsM30pXFxzKig/OixcXHMqKFxcZD8oPzpcXC5cXGQrKT8pXFxzKik/XFwpLyxcblx0XHRcdHBhcnNlOiBmdW5jdGlvbiggZXhlY1Jlc3VsdCApIHtcblx0XHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0XHRleGVjUmVzdWx0WyAxIF0sXG5cdFx0XHRcdFx0ZXhlY1Jlc3VsdFsgMiBdLFxuXHRcdFx0XHRcdGV4ZWNSZXN1bHRbIDMgXSxcblx0XHRcdFx0XHRleGVjUmVzdWx0WyA0IF1cblx0XHRcdFx0XTtcblx0XHRcdH1cblx0XHR9LCB7XG5cdFx0XHRyZTogL3JnYmE/XFwoXFxzKihcXGQrKD86XFwuXFxkKyk/KVxcJVxccyosXFxzKihcXGQrKD86XFwuXFxkKyk/KVxcJVxccyosXFxzKihcXGQrKD86XFwuXFxkKyk/KVxcJVxccyooPzosXFxzKihcXGQ/KD86XFwuXFxkKyk/KVxccyopP1xcKS8sXG5cdFx0XHRwYXJzZTogZnVuY3Rpb24oIGV4ZWNSZXN1bHQgKSB7XG5cdFx0XHRcdHJldHVybiBbXG5cdFx0XHRcdFx0ZXhlY1Jlc3VsdFsgMSBdICogMi41NSxcblx0XHRcdFx0XHRleGVjUmVzdWx0WyAyIF0gKiAyLjU1LFxuXHRcdFx0XHRcdGV4ZWNSZXN1bHRbIDMgXSAqIDIuNTUsXG5cdFx0XHRcdFx0ZXhlY1Jlc3VsdFsgNCBdXG5cdFx0XHRcdF07XG5cdFx0XHR9XG5cdFx0fSwge1xuXG5cdFx0XHQvLyBUaGlzIHJlZ2V4IGlnbm9yZXMgQS1GIGJlY2F1c2UgaXQncyBjb21wYXJlZCBhZ2FpbnN0IGFuIGFscmVhZHkgbG93ZXJjYXNlZCBzdHJpbmdcblx0XHRcdHJlOiAvIyhbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KS8sXG5cdFx0XHRwYXJzZTogZnVuY3Rpb24oIGV4ZWNSZXN1bHQgKSB7XG5cdFx0XHRcdHJldHVybiBbXG5cdFx0XHRcdFx0cGFyc2VJbnQoIGV4ZWNSZXN1bHRbIDEgXSwgMTYgKSxcblx0XHRcdFx0XHRwYXJzZUludCggZXhlY1Jlc3VsdFsgMiBdLCAxNiApLFxuXHRcdFx0XHRcdHBhcnNlSW50KCBleGVjUmVzdWx0WyAzIF0sIDE2IClcblx0XHRcdFx0XTtcblx0XHRcdH1cblx0XHR9LCB7XG5cblx0XHRcdC8vIFRoaXMgcmVnZXggaWdub3JlcyBBLUYgYmVjYXVzZSBpdCdzIGNvbXBhcmVkIGFnYWluc3QgYW4gYWxyZWFkeSBsb3dlcmNhc2VkIHN0cmluZ1xuXHRcdFx0cmU6IC8jKFthLWYwLTldKShbYS1mMC05XSkoW2EtZjAtOV0pLyxcblx0XHRcdHBhcnNlOiBmdW5jdGlvbiggZXhlY1Jlc3VsdCApIHtcblx0XHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0XHRwYXJzZUludCggZXhlY1Jlc3VsdFsgMSBdICsgZXhlY1Jlc3VsdFsgMSBdLCAxNiApLFxuXHRcdFx0XHRcdHBhcnNlSW50KCBleGVjUmVzdWx0WyAyIF0gKyBleGVjUmVzdWx0WyAyIF0sIDE2ICksXG5cdFx0XHRcdFx0cGFyc2VJbnQoIGV4ZWNSZXN1bHRbIDMgXSArIGV4ZWNSZXN1bHRbIDMgXSwgMTYgKVxuXHRcdFx0XHRdO1xuXHRcdFx0fVxuXHRcdH0sIHtcblx0XHRcdHJlOiAvaHNsYT9cXChcXHMqKFxcZCsoPzpcXC5cXGQrKT8pXFxzKixcXHMqKFxcZCsoPzpcXC5cXGQrKT8pXFwlXFxzKixcXHMqKFxcZCsoPzpcXC5cXGQrKT8pXFwlXFxzKig/OixcXHMqKFxcZD8oPzpcXC5cXGQrKT8pXFxzKik/XFwpLyxcblx0XHRcdHNwYWNlOiBcImhzbGFcIixcblx0XHRcdHBhcnNlOiBmdW5jdGlvbiggZXhlY1Jlc3VsdCApIHtcblx0XHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0XHRleGVjUmVzdWx0WyAxIF0sXG5cdFx0XHRcdFx0ZXhlY1Jlc3VsdFsgMiBdIC8gMTAwLFxuXHRcdFx0XHRcdGV4ZWNSZXN1bHRbIDMgXSAvIDEwMCxcblx0XHRcdFx0XHRleGVjUmVzdWx0WyA0IF1cblx0XHRcdFx0XTtcblx0XHRcdH1cblx0XHR9IF0sXG5cblx0Ly8gSlF1ZXJ5LkNvbG9yKCApXG5cdGNvbG9yID0galF1ZXJ5LkNvbG9yID0gZnVuY3Rpb24oIGNvbG9yLCBncmVlbiwgYmx1ZSwgYWxwaGEgKSB7XG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuQ29sb3IuZm4ucGFyc2UoIGNvbG9yLCBncmVlbiwgYmx1ZSwgYWxwaGEgKTtcblx0fSxcblx0c3BhY2VzID0ge1xuXHRcdHJnYmE6IHtcblx0XHRcdHByb3BzOiB7XG5cdFx0XHRcdHJlZDoge1xuXHRcdFx0XHRcdGlkeDogMCxcblx0XHRcdFx0XHR0eXBlOiBcImJ5dGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRncmVlbjoge1xuXHRcdFx0XHRcdGlkeDogMSxcblx0XHRcdFx0XHR0eXBlOiBcImJ5dGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRibHVlOiB7XG5cdFx0XHRcdFx0aWR4OiAyLFxuXHRcdFx0XHRcdHR5cGU6IFwiYnl0ZVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0aHNsYToge1xuXHRcdFx0cHJvcHM6IHtcblx0XHRcdFx0aHVlOiB7XG5cdFx0XHRcdFx0aWR4OiAwLFxuXHRcdFx0XHRcdHR5cGU6IFwiZGVncmVlc1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNhdHVyYXRpb246IHtcblx0XHRcdFx0XHRpZHg6IDEsXG5cdFx0XHRcdFx0dHlwZTogXCJwZXJjZW50XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0bGlnaHRuZXNzOiB7XG5cdFx0XHRcdFx0aWR4OiAyLFxuXHRcdFx0XHRcdHR5cGU6IFwicGVyY2VudFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdHByb3BUeXBlcyA9IHtcblx0XHRcImJ5dGVcIjoge1xuXHRcdFx0Zmxvb3I6IHRydWUsXG5cdFx0XHRtYXg6IDI1NVxuXHRcdH0sXG5cdFx0XCJwZXJjZW50XCI6IHtcblx0XHRcdG1heDogMVxuXHRcdH0sXG5cdFx0XCJkZWdyZWVzXCI6IHtcblx0XHRcdG1vZDogMzYwLFxuXHRcdFx0Zmxvb3I6IHRydWVcblx0XHR9XG5cdH0sXG5cdHN1cHBvcnQgPSBjb2xvci5zdXBwb3J0ID0ge30sXG5cblx0Ly8gRWxlbWVudCBmb3Igc3VwcG9ydCB0ZXN0c1xuXHRzdXBwb3J0RWxlbSA9IGpRdWVyeSggXCI8cD5cIiApWyAwIF0sXG5cblx0Ly8gQ29sb3JzID0galF1ZXJ5LkNvbG9yLm5hbWVzXG5cdGNvbG9ycyxcblxuXHQvLyBMb2NhbCBhbGlhc2VzIG9mIGZ1bmN0aW9ucyBjYWxsZWQgb2Z0ZW5cblx0ZWFjaCA9IGpRdWVyeS5lYWNoO1xuXG4vLyBEZXRlcm1pbmUgcmdiYSBzdXBwb3J0IGltbWVkaWF0ZWx5XG5zdXBwb3J0RWxlbS5zdHlsZS5jc3NUZXh0ID0gXCJiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMSwxLDEsLjUpXCI7XG5zdXBwb3J0LnJnYmEgPSBzdXBwb3J0RWxlbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IuaW5kZXhPZiggXCJyZ2JhXCIgKSA+IC0xO1xuXG4vLyBEZWZpbmUgY2FjaGUgbmFtZSBhbmQgYWxwaGEgcHJvcGVydGllc1xuLy8gZm9yIHJnYmEgYW5kIGhzbGEgc3BhY2VzXG5lYWNoKCBzcGFjZXMsIGZ1bmN0aW9uKCBzcGFjZU5hbWUsIHNwYWNlICkge1xuXHRzcGFjZS5jYWNoZSA9IFwiX1wiICsgc3BhY2VOYW1lO1xuXHRzcGFjZS5wcm9wcy5hbHBoYSA9IHtcblx0XHRpZHg6IDMsXG5cdFx0dHlwZTogXCJwZXJjZW50XCIsXG5cdFx0ZGVmOiAxXG5cdH07XG59ICk7XG5cbmZ1bmN0aW9uIGNsYW1wKCB2YWx1ZSwgcHJvcCwgYWxsb3dFbXB0eSApIHtcblx0dmFyIHR5cGUgPSBwcm9wVHlwZXNbIHByb3AudHlwZSBdIHx8IHt9O1xuXG5cdGlmICggdmFsdWUgPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gKCBhbGxvd0VtcHR5IHx8ICFwcm9wLmRlZiApID8gbnVsbCA6IHByb3AuZGVmO1xuXHR9XG5cblx0Ly8gfn4gaXMgYW4gc2hvcnQgd2F5IG9mIGRvaW5nIGZsb29yIGZvciBwb3NpdGl2ZSBudW1iZXJzXG5cdHZhbHVlID0gdHlwZS5mbG9vciA/IH5+dmFsdWUgOiBwYXJzZUZsb2F0KCB2YWx1ZSApO1xuXG5cdC8vIElFIHdpbGwgcGFzcyBpbiBlbXB0eSBzdHJpbmdzIGFzIHZhbHVlIGZvciBhbHBoYSxcblx0Ly8gd2hpY2ggd2lsbCBoaXQgdGhpcyBjYXNlXG5cdGlmICggaXNOYU4oIHZhbHVlICkgKSB7XG5cdFx0cmV0dXJuIHByb3AuZGVmO1xuXHR9XG5cblx0aWYgKCB0eXBlLm1vZCApIHtcblxuXHRcdC8vIFdlIGFkZCBtb2QgYmVmb3JlIG1vZGRpbmcgdG8gbWFrZSBzdXJlIHRoYXQgbmVnYXRpdmVzIHZhbHVlc1xuXHRcdC8vIGdldCBjb252ZXJ0ZWQgcHJvcGVybHk6IC0xMCAtPiAzNTBcblx0XHRyZXR1cm4gKCB2YWx1ZSArIHR5cGUubW9kICkgJSB0eXBlLm1vZDtcblx0fVxuXG5cdC8vIEZvciBub3cgYWxsIHByb3BlcnR5IHR5cGVzIHdpdGhvdXQgbW9kIGhhdmUgbWluIGFuZCBtYXhcblx0cmV0dXJuIDAgPiB2YWx1ZSA/IDAgOiB0eXBlLm1heCA8IHZhbHVlID8gdHlwZS5tYXggOiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nUGFyc2UoIHN0cmluZyApIHtcblx0dmFyIGluc3QgPSBjb2xvcigpLFxuXHRcdHJnYmEgPSBpbnN0Ll9yZ2JhID0gW107XG5cblx0c3RyaW5nID0gc3RyaW5nLnRvTG93ZXJDYXNlKCk7XG5cblx0ZWFjaCggc3RyaW5nUGFyc2VycywgZnVuY3Rpb24oIGksIHBhcnNlciApIHtcblx0XHR2YXIgcGFyc2VkLFxuXHRcdFx0bWF0Y2ggPSBwYXJzZXIucmUuZXhlYyggc3RyaW5nICksXG5cdFx0XHR2YWx1ZXMgPSBtYXRjaCAmJiBwYXJzZXIucGFyc2UoIG1hdGNoICksXG5cdFx0XHRzcGFjZU5hbWUgPSBwYXJzZXIuc3BhY2UgfHwgXCJyZ2JhXCI7XG5cblx0XHRpZiAoIHZhbHVlcyApIHtcblx0XHRcdHBhcnNlZCA9IGluc3RbIHNwYWNlTmFtZSBdKCB2YWx1ZXMgKTtcblxuXHRcdFx0Ly8gSWYgdGhpcyB3YXMgYW4gcmdiYSBwYXJzZSB0aGUgYXNzaWdubWVudCBtaWdodCBoYXBwZW4gdHdpY2Vcblx0XHRcdC8vIG9oIHdlbGwuLi4uXG5cdFx0XHRpbnN0WyBzcGFjZXNbIHNwYWNlTmFtZSBdLmNhY2hlIF0gPSBwYXJzZWRbIHNwYWNlc1sgc3BhY2VOYW1lIF0uY2FjaGUgXTtcblx0XHRcdHJnYmEgPSBpbnN0Ll9yZ2JhID0gcGFyc2VkLl9yZ2JhO1xuXG5cdFx0XHQvLyBFeGl0IGVhY2goIHN0cmluZ1BhcnNlcnMgKSBoZXJlIGJlY2F1c2Ugd2UgbWF0Y2hlZFxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSApO1xuXG5cdC8vIEZvdW5kIGEgc3RyaW5nUGFyc2VyIHRoYXQgaGFuZGxlZCBpdFxuXHRpZiAoIHJnYmEubGVuZ3RoICkge1xuXG5cdFx0Ly8gSWYgdGhpcyBjYW1lIGZyb20gYSBwYXJzZWQgc3RyaW5nLCBmb3JjZSBcInRyYW5zcGFyZW50XCIgd2hlbiBhbHBoYSBpcyAwXG5cdFx0Ly8gY2hyb21lLCAoYW5kIG1heWJlIG90aGVycykgcmV0dXJuIFwidHJhbnNwYXJlbnRcIiBhcyByZ2JhKDAsMCwwLDApXG5cdFx0aWYgKCByZ2JhLmpvaW4oKSA9PT0gXCIwLDAsMCwwXCIgKSB7XG5cdFx0XHRqUXVlcnkuZXh0ZW5kKCByZ2JhLCBjb2xvcnMudHJhbnNwYXJlbnQgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGluc3Q7XG5cdH1cblxuXHQvLyBOYW1lZCBjb2xvcnNcblx0cmV0dXJuIGNvbG9yc1sgc3RyaW5nIF07XG59XG5cbmNvbG9yLmZuID0galF1ZXJ5LmV4dGVuZCggY29sb3IucHJvdG90eXBlLCB7XG5cdHBhcnNlOiBmdW5jdGlvbiggcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEgKSB7XG5cdFx0aWYgKCByZWQgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHRoaXMuX3JnYmEgPSBbIG51bGwsIG51bGwsIG51bGwsIG51bGwgXTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHJlZC5qcXVlcnkgfHwgcmVkLm5vZGVUeXBlICkge1xuXHRcdFx0cmVkID0galF1ZXJ5KCByZWQgKS5jc3MoIGdyZWVuICk7XG5cdFx0XHRncmVlbiA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHR2YXIgaW5zdCA9IHRoaXMsXG5cdFx0XHR0eXBlID0galF1ZXJ5LnR5cGUoIHJlZCApLFxuXHRcdFx0cmdiYSA9IHRoaXMuX3JnYmEgPSBbXTtcblxuXHRcdC8vIE1vcmUgdGhhbiAxIGFyZ3VtZW50IHNwZWNpZmllZCAtIGFzc3VtZSAoIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhIClcblx0XHRpZiAoIGdyZWVuICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZWQgPSBbIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhIF07XG5cdFx0XHR0eXBlID0gXCJhcnJheVwiO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlKCBzdHJpbmdQYXJzZSggcmVkICkgfHwgY29sb3JzLl9kZWZhdWx0ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlID09PSBcImFycmF5XCIgKSB7XG5cdFx0XHRlYWNoKCBzcGFjZXMucmdiYS5wcm9wcywgZnVuY3Rpb24oIGtleSwgcHJvcCApIHtcblx0XHRcdFx0cmdiYVsgcHJvcC5pZHggXSA9IGNsYW1wKCByZWRbIHByb3AuaWR4IF0sIHByb3AgKTtcblx0XHRcdH0gKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdGlmICggcmVkIGluc3RhbmNlb2YgY29sb3IgKSB7XG5cdFx0XHRcdGVhY2goIHNwYWNlcywgZnVuY3Rpb24oIHNwYWNlTmFtZSwgc3BhY2UgKSB7XG5cdFx0XHRcdFx0aWYgKCByZWRbIHNwYWNlLmNhY2hlIF0gKSB7XG5cdFx0XHRcdFx0XHRpbnN0WyBzcGFjZS5jYWNoZSBdID0gcmVkWyBzcGFjZS5jYWNoZSBdLnNsaWNlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlYWNoKCBzcGFjZXMsIGZ1bmN0aW9uKCBzcGFjZU5hbWUsIHNwYWNlICkge1xuXHRcdFx0XHRcdHZhciBjYWNoZSA9IHNwYWNlLmNhY2hlO1xuXHRcdFx0XHRcdGVhY2goIHNwYWNlLnByb3BzLCBmdW5jdGlvbigga2V5LCBwcm9wICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJZiB0aGUgY2FjaGUgZG9lc24ndCBleGlzdCwgYW5kIHdlIGtub3cgaG93IHRvIGNvbnZlcnRcblx0XHRcdFx0XHRcdGlmICggIWluc3RbIGNhY2hlIF0gJiYgc3BhY2UudG8gKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHZhbHVlIHdhcyBudWxsLCB3ZSBkb24ndCBuZWVkIHRvIGNvcHkgaXRcblx0XHRcdFx0XHRcdFx0Ly8gaWYgdGhlIGtleSB3YXMgYWxwaGEsIHdlIGRvbid0IG5lZWQgdG8gY29weSBpdCBlaXRoZXJcblx0XHRcdFx0XHRcdFx0aWYgKCBrZXkgPT09IFwiYWxwaGFcIiB8fCByZWRbIGtleSBdID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGluc3RbIGNhY2hlIF0gPSBzcGFjZS50byggaW5zdC5fcmdiYSApO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBUaGlzIGlzIHRoZSBvbmx5IGNhc2Ugd2hlcmUgd2UgYWxsb3cgbnVsbHMgZm9yIEFMTCBwcm9wZXJ0aWVzLlxuXHRcdFx0XHRcdFx0Ly8gY2FsbCBjbGFtcCB3aXRoIGFsd2F5c0FsbG93RW1wdHlcblx0XHRcdFx0XHRcdGluc3RbIGNhY2hlIF1bIHByb3AuaWR4IF0gPSBjbGFtcCggcmVkWyBrZXkgXSwgcHJvcCwgdHJ1ZSApO1xuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHRcdC8vIEV2ZXJ5dGhpbmcgZGVmaW5lZCBidXQgYWxwaGE/XG5cdFx0XHRcdFx0aWYgKCBpbnN0WyBjYWNoZSBdICYmXG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBudWxsLCBpbnN0WyBjYWNoZSBdLnNsaWNlKCAwLCAzICkgKSA8IDAgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFVzZSB0aGUgZGVmYXVsdCBvZiAxXG5cdFx0XHRcdFx0XHRpbnN0WyBjYWNoZSBdWyAzIF0gPSAxO1xuXHRcdFx0XHRcdFx0aWYgKCBzcGFjZS5mcm9tICkge1xuXHRcdFx0XHRcdFx0XHRpbnN0Ll9yZ2JhID0gc3BhY2UuZnJvbSggaW5zdFsgY2FjaGUgXSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9LFxuXHRpczogZnVuY3Rpb24oIGNvbXBhcmUgKSB7XG5cdFx0dmFyIGlzID0gY29sb3IoIGNvbXBhcmUgKSxcblx0XHRcdHNhbWUgPSB0cnVlLFxuXHRcdFx0aW5zdCA9IHRoaXM7XG5cblx0XHRlYWNoKCBzcGFjZXMsIGZ1bmN0aW9uKCBfLCBzcGFjZSApIHtcblx0XHRcdHZhciBsb2NhbENhY2hlLFxuXHRcdFx0XHRpc0NhY2hlID0gaXNbIHNwYWNlLmNhY2hlIF07XG5cdFx0XHRpZiAoIGlzQ2FjaGUgKSB7XG5cdFx0XHRcdGxvY2FsQ2FjaGUgPSBpbnN0WyBzcGFjZS5jYWNoZSBdIHx8IHNwYWNlLnRvICYmIHNwYWNlLnRvKCBpbnN0Ll9yZ2JhICkgfHwgW107XG5cdFx0XHRcdGVhY2goIHNwYWNlLnByb3BzLCBmdW5jdGlvbiggXywgcHJvcCApIHtcblx0XHRcdFx0XHRpZiAoIGlzQ2FjaGVbIHByb3AuaWR4IF0gIT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdHNhbWUgPSAoIGlzQ2FjaGVbIHByb3AuaWR4IF0gPT09IGxvY2FsQ2FjaGVbIHByb3AuaWR4IF0gKTtcblx0XHRcdFx0XHRcdHJldHVybiBzYW1lO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNhbWU7XG5cdFx0fSApO1xuXHRcdHJldHVybiBzYW1lO1xuXHR9LFxuXHRfc3BhY2U6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB1c2VkID0gW10sXG5cdFx0XHRpbnN0ID0gdGhpcztcblx0XHRlYWNoKCBzcGFjZXMsIGZ1bmN0aW9uKCBzcGFjZU5hbWUsIHNwYWNlICkge1xuXHRcdFx0aWYgKCBpbnN0WyBzcGFjZS5jYWNoZSBdICkge1xuXHRcdFx0XHR1c2VkLnB1c2goIHNwYWNlTmFtZSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gdXNlZC5wb3AoKTtcblx0fSxcblx0dHJhbnNpdGlvbjogZnVuY3Rpb24oIG90aGVyLCBkaXN0YW5jZSApIHtcblx0XHR2YXIgZW5kID0gY29sb3IoIG90aGVyICksXG5cdFx0XHRzcGFjZU5hbWUgPSBlbmQuX3NwYWNlKCksXG5cdFx0XHRzcGFjZSA9IHNwYWNlc1sgc3BhY2VOYW1lIF0sXG5cdFx0XHRzdGFydENvbG9yID0gdGhpcy5hbHBoYSgpID09PSAwID8gY29sb3IoIFwidHJhbnNwYXJlbnRcIiApIDogdGhpcyxcblx0XHRcdHN0YXJ0ID0gc3RhcnRDb2xvclsgc3BhY2UuY2FjaGUgXSB8fCBzcGFjZS50byggc3RhcnRDb2xvci5fcmdiYSApLFxuXHRcdFx0cmVzdWx0ID0gc3RhcnQuc2xpY2UoKTtcblxuXHRcdGVuZCA9IGVuZFsgc3BhY2UuY2FjaGUgXTtcblx0XHRlYWNoKCBzcGFjZS5wcm9wcywgZnVuY3Rpb24oIGtleSwgcHJvcCApIHtcblx0XHRcdHZhciBpbmRleCA9IHByb3AuaWR4LFxuXHRcdFx0XHRzdGFydFZhbHVlID0gc3RhcnRbIGluZGV4IF0sXG5cdFx0XHRcdGVuZFZhbHVlID0gZW5kWyBpbmRleCBdLFxuXHRcdFx0XHR0eXBlID0gcHJvcFR5cGVzWyBwcm9wLnR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gSWYgbnVsbCwgZG9uJ3Qgb3ZlcnJpZGUgc3RhcnQgdmFsdWVcblx0XHRcdGlmICggZW5kVmFsdWUgPT09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgbnVsbCAtIHVzZSBlbmRcblx0XHRcdGlmICggc3RhcnRWYWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0cmVzdWx0WyBpbmRleCBdID0gZW5kVmFsdWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoIHR5cGUubW9kICkge1xuXHRcdFx0XHRcdGlmICggZW5kVmFsdWUgLSBzdGFydFZhbHVlID4gdHlwZS5tb2QgLyAyICkge1xuXHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSArPSB0eXBlLm1vZDtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCBzdGFydFZhbHVlIC0gZW5kVmFsdWUgPiB0eXBlLm1vZCAvIDIgKSB7XG5cdFx0XHRcdFx0XHRzdGFydFZhbHVlIC09IHR5cGUubW9kO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXN1bHRbIGluZGV4IF0gPSBjbGFtcCggKCBlbmRWYWx1ZSAtIHN0YXJ0VmFsdWUgKSAqIGRpc3RhbmNlICsgc3RhcnRWYWx1ZSwgcHJvcCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gdGhpc1sgc3BhY2VOYW1lIF0oIHJlc3VsdCApO1xuXHR9LFxuXHRibGVuZDogZnVuY3Rpb24oIG9wYXF1ZSApIHtcblxuXHRcdC8vIElmIHdlIGFyZSBhbHJlYWR5IG9wYXF1ZSAtIHJldHVybiBvdXJzZWxmXG5cdFx0aWYgKCB0aGlzLl9yZ2JhWyAzIF0gPT09IDEgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR2YXIgcmdiID0gdGhpcy5fcmdiYS5zbGljZSgpLFxuXHRcdFx0YSA9IHJnYi5wb3AoKSxcblx0XHRcdGJsZW5kID0gY29sb3IoIG9wYXF1ZSApLl9yZ2JhO1xuXG5cdFx0cmV0dXJuIGNvbG9yKCBqUXVlcnkubWFwKCByZ2IsIGZ1bmN0aW9uKCB2LCBpICkge1xuXHRcdFx0cmV0dXJuICggMSAtIGEgKSAqIGJsZW5kWyBpIF0gKyBhICogdjtcblx0XHR9ICkgKTtcblx0fSxcblx0dG9SZ2JhU3RyaW5nOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgcHJlZml4ID0gXCJyZ2JhKFwiLFxuXHRcdFx0cmdiYSA9IGpRdWVyeS5tYXAoIHRoaXMuX3JnYmEsIGZ1bmN0aW9uKCB2LCBpICkge1xuXHRcdFx0XHRyZXR1cm4gdiA9PSBudWxsID8gKCBpID4gMiA/IDEgOiAwICkgOiB2O1xuXHRcdFx0fSApO1xuXG5cdFx0aWYgKCByZ2JhWyAzIF0gPT09IDEgKSB7XG5cdFx0XHRyZ2JhLnBvcCgpO1xuXHRcdFx0cHJlZml4ID0gXCJyZ2IoXCI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByZWZpeCArIHJnYmEuam9pbigpICsgXCIpXCI7XG5cdH0sXG5cdHRvSHNsYVN0cmluZzogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHByZWZpeCA9IFwiaHNsYShcIixcblx0XHRcdGhzbGEgPSBqUXVlcnkubWFwKCB0aGlzLmhzbGEoKSwgZnVuY3Rpb24oIHYsIGkgKSB7XG5cdFx0XHRcdGlmICggdiA9PSBudWxsICkge1xuXHRcdFx0XHRcdHYgPSBpID4gMiA/IDEgOiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2F0Y2ggMSBhbmQgMlxuXHRcdFx0XHRpZiAoIGkgJiYgaSA8IDMgKSB7XG5cdFx0XHRcdFx0diA9IE1hdGgucm91bmQoIHYgKiAxMDAgKSArIFwiJVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2O1xuXHRcdFx0fSApO1xuXG5cdFx0aWYgKCBoc2xhWyAzIF0gPT09IDEgKSB7XG5cdFx0XHRoc2xhLnBvcCgpO1xuXHRcdFx0cHJlZml4ID0gXCJoc2woXCI7XG5cdFx0fVxuXHRcdHJldHVybiBwcmVmaXggKyBoc2xhLmpvaW4oKSArIFwiKVwiO1xuXHR9LFxuXHR0b0hleFN0cmluZzogZnVuY3Rpb24oIGluY2x1ZGVBbHBoYSApIHtcblx0XHR2YXIgcmdiYSA9IHRoaXMuX3JnYmEuc2xpY2UoKSxcblx0XHRcdGFscGhhID0gcmdiYS5wb3AoKTtcblxuXHRcdGlmICggaW5jbHVkZUFscGhhICkge1xuXHRcdFx0cmdiYS5wdXNoKCB+figgYWxwaGEgKiAyNTUgKSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBcIiNcIiArIGpRdWVyeS5tYXAoIHJnYmEsIGZ1bmN0aW9uKCB2ICkge1xuXG5cdFx0XHQvLyBEZWZhdWx0IHRvIDAgd2hlbiBudWxscyBleGlzdFxuXHRcdFx0diA9ICggdiB8fCAwICkudG9TdHJpbmcoIDE2ICk7XG5cdFx0XHRyZXR1cm4gdi5sZW5ndGggPT09IDEgPyBcIjBcIiArIHYgOiB2O1xuXHRcdH0gKS5qb2luKCBcIlwiICk7XG5cdH0sXG5cdHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fcmdiYVsgMyBdID09PSAwID8gXCJ0cmFuc3BhcmVudFwiIDogdGhpcy50b1JnYmFTdHJpbmcoKTtcblx0fVxufSApO1xuY29sb3IuZm4ucGFyc2UucHJvdG90eXBlID0gY29sb3IuZm47XG5cbi8vIEhzbGEgY29udmVyc2lvbnMgYWRhcHRlZCBmcm9tOlxuLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9tYWFzaGFhY2svc291cmNlL2Jyb3dzZS9wYWNrYWdlcy9ncmFwaGljcy90cnVuay9zcmMvZ3JhcGhpY3MvY29sb3JzL0hVRTJSR0IuYXM/cj01MDIxXG5cbmZ1bmN0aW9uIGh1ZTJyZ2IoIHAsIHEsIGggKSB7XG5cdGggPSAoIGggKyAxICkgJSAxO1xuXHRpZiAoIGggKiA2IDwgMSApIHtcblx0XHRyZXR1cm4gcCArICggcSAtIHAgKSAqIGggKiA2O1xuXHR9XG5cdGlmICggaCAqIDIgPCAxICkge1xuXHRcdHJldHVybiBxO1xuXHR9XG5cdGlmICggaCAqIDMgPCAyICkge1xuXHRcdHJldHVybiBwICsgKCBxIC0gcCApICogKCAoIDIgLyAzICkgLSBoICkgKiA2O1xuXHR9XG5cdHJldHVybiBwO1xufVxuXG5zcGFjZXMuaHNsYS50byA9IGZ1bmN0aW9uKCByZ2JhICkge1xuXHRpZiAoIHJnYmFbIDAgXSA9PSBudWxsIHx8IHJnYmFbIDEgXSA9PSBudWxsIHx8IHJnYmFbIDIgXSA9PSBudWxsICkge1xuXHRcdHJldHVybiBbIG51bGwsIG51bGwsIG51bGwsIHJnYmFbIDMgXSBdO1xuXHR9XG5cdHZhciByID0gcmdiYVsgMCBdIC8gMjU1LFxuXHRcdGcgPSByZ2JhWyAxIF0gLyAyNTUsXG5cdFx0YiA9IHJnYmFbIDIgXSAvIDI1NSxcblx0XHRhID0gcmdiYVsgMyBdLFxuXHRcdG1heCA9IE1hdGgubWF4KCByLCBnLCBiICksXG5cdFx0bWluID0gTWF0aC5taW4oIHIsIGcsIGIgKSxcblx0XHRkaWZmID0gbWF4IC0gbWluLFxuXHRcdGFkZCA9IG1heCArIG1pbixcblx0XHRsID0gYWRkICogMC41LFxuXHRcdGgsIHM7XG5cblx0aWYgKCBtaW4gPT09IG1heCApIHtcblx0XHRoID0gMDtcblx0fSBlbHNlIGlmICggciA9PT0gbWF4ICkge1xuXHRcdGggPSAoIDYwICogKCBnIC0gYiApIC8gZGlmZiApICsgMzYwO1xuXHR9IGVsc2UgaWYgKCBnID09PSBtYXggKSB7XG5cdFx0aCA9ICggNjAgKiAoIGIgLSByICkgLyBkaWZmICkgKyAxMjA7XG5cdH0gZWxzZSB7XG5cdFx0aCA9ICggNjAgKiAoIHIgLSBnICkgLyBkaWZmICkgKyAyNDA7XG5cdH1cblxuXHQvLyBDaHJvbWEgKGRpZmYpID09IDAgbWVhbnMgZ3JleXNjYWxlIHdoaWNoLCBieSBkZWZpbml0aW9uLCBzYXR1cmF0aW9uID0gMCVcblx0Ly8gb3RoZXJ3aXNlLCBzYXR1cmF0aW9uIGlzIGJhc2VkIG9uIHRoZSByYXRpbyBvZiBjaHJvbWEgKGRpZmYpIHRvIGxpZ2h0bmVzcyAoYWRkKVxuXHRpZiAoIGRpZmYgPT09IDAgKSB7XG5cdFx0cyA9IDA7XG5cdH0gZWxzZSBpZiAoIGwgPD0gMC41ICkge1xuXHRcdHMgPSBkaWZmIC8gYWRkO1xuXHR9IGVsc2Uge1xuXHRcdHMgPSBkaWZmIC8gKCAyIC0gYWRkICk7XG5cdH1cblx0cmV0dXJuIFsgTWF0aC5yb3VuZCggaCApICUgMzYwLCBzLCBsLCBhID09IG51bGwgPyAxIDogYSBdO1xufTtcblxuc3BhY2VzLmhzbGEuZnJvbSA9IGZ1bmN0aW9uKCBoc2xhICkge1xuXHRpZiAoIGhzbGFbIDAgXSA9PSBudWxsIHx8IGhzbGFbIDEgXSA9PSBudWxsIHx8IGhzbGFbIDIgXSA9PSBudWxsICkge1xuXHRcdHJldHVybiBbIG51bGwsIG51bGwsIG51bGwsIGhzbGFbIDMgXSBdO1xuXHR9XG5cdHZhciBoID0gaHNsYVsgMCBdIC8gMzYwLFxuXHRcdHMgPSBoc2xhWyAxIF0sXG5cdFx0bCA9IGhzbGFbIDIgXSxcblx0XHRhID0gaHNsYVsgMyBdLFxuXHRcdHEgPSBsIDw9IDAuNSA/IGwgKiAoIDEgKyBzICkgOiBsICsgcyAtIGwgKiBzLFxuXHRcdHAgPSAyICogbCAtIHE7XG5cblx0cmV0dXJuIFtcblx0XHRNYXRoLnJvdW5kKCBodWUycmdiKCBwLCBxLCBoICsgKCAxIC8gMyApICkgKiAyNTUgKSxcblx0XHRNYXRoLnJvdW5kKCBodWUycmdiKCBwLCBxLCBoICkgKiAyNTUgKSxcblx0XHRNYXRoLnJvdW5kKCBodWUycmdiKCBwLCBxLCBoIC0gKCAxIC8gMyApICkgKiAyNTUgKSxcblx0XHRhXG5cdF07XG59O1xuXG5lYWNoKCBzcGFjZXMsIGZ1bmN0aW9uKCBzcGFjZU5hbWUsIHNwYWNlICkge1xuXHR2YXIgcHJvcHMgPSBzcGFjZS5wcm9wcyxcblx0XHRjYWNoZSA9IHNwYWNlLmNhY2hlLFxuXHRcdHRvID0gc3BhY2UudG8sXG5cdFx0ZnJvbSA9IHNwYWNlLmZyb207XG5cblx0Ly8gTWFrZXMgcmdiYSgpIGFuZCBoc2xhKClcblx0Y29sb3IuZm5bIHNwYWNlTmFtZSBdID0gZnVuY3Rpb24oIHZhbHVlICkge1xuXG5cdFx0Ly8gR2VuZXJhdGUgYSBjYWNoZSBmb3IgdGhpcyBzcGFjZSBpZiBpdCBkb2Vzbid0IGV4aXN0XG5cdFx0aWYgKCB0byAmJiAhdGhpc1sgY2FjaGUgXSApIHtcblx0XHRcdHRoaXNbIGNhY2hlIF0gPSB0byggdGhpcy5fcmdiYSApO1xuXHRcdH1cblx0XHRpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm4gdGhpc1sgY2FjaGUgXS5zbGljZSgpO1xuXHRcdH1cblxuXHRcdHZhciByZXQsXG5cdFx0XHR0eXBlID0galF1ZXJ5LnR5cGUoIHZhbHVlICksXG5cdFx0XHRhcnIgPSAoIHR5cGUgPT09IFwiYXJyYXlcIiB8fCB0eXBlID09PSBcIm9iamVjdFwiICkgPyB2YWx1ZSA6IGFyZ3VtZW50cyxcblx0XHRcdGxvY2FsID0gdGhpc1sgY2FjaGUgXS5zbGljZSgpO1xuXG5cdFx0ZWFjaCggcHJvcHMsIGZ1bmN0aW9uKCBrZXksIHByb3AgKSB7XG5cdFx0XHR2YXIgdmFsID0gYXJyWyB0eXBlID09PSBcIm9iamVjdFwiID8ga2V5IDogcHJvcC5pZHggXTtcblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHZhbCA9IGxvY2FsWyBwcm9wLmlkeCBdO1xuXHRcdFx0fVxuXHRcdFx0bG9jYWxbIHByb3AuaWR4IF0gPSBjbGFtcCggdmFsLCBwcm9wICk7XG5cdFx0fSApO1xuXG5cdFx0aWYgKCBmcm9tICkge1xuXHRcdFx0cmV0ID0gY29sb3IoIGZyb20oIGxvY2FsICkgKTtcblx0XHRcdHJldFsgY2FjaGUgXSA9IGxvY2FsO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbG9yKCBsb2NhbCApO1xuXHRcdH1cblx0fTtcblxuXHQvLyBNYWtlcyByZWQoKSBncmVlbigpIGJsdWUoKSBhbHBoYSgpIGh1ZSgpIHNhdHVyYXRpb24oKSBsaWdodG5lc3MoKVxuXHRlYWNoKCBwcm9wcywgZnVuY3Rpb24oIGtleSwgcHJvcCApIHtcblxuXHRcdC8vIEFscGhhIGlzIGluY2x1ZGVkIGluIG1vcmUgdGhhbiBvbmUgc3BhY2Vcblx0XHRpZiAoIGNvbG9yLmZuWyBrZXkgXSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29sb3IuZm5bIGtleSBdID0gZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIHZ0eXBlID0galF1ZXJ5LnR5cGUoIHZhbHVlICksXG5cdFx0XHRcdGZuID0gKCBrZXkgPT09IFwiYWxwaGFcIiA/ICggdGhpcy5faHNsYSA/IFwiaHNsYVwiIDogXCJyZ2JhXCIgKSA6IHNwYWNlTmFtZSApLFxuXHRcdFx0XHRsb2NhbCA9IHRoaXNbIGZuIF0oKSxcblx0XHRcdFx0Y3VyID0gbG9jYWxbIHByb3AuaWR4IF0sXG5cdFx0XHRcdG1hdGNoO1xuXG5cdFx0XHRpZiAoIHZ0eXBlID09PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0XHRyZXR1cm4gY3VyO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZ0eXBlID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUuY2FsbCggdGhpcywgY3VyICk7XG5cdFx0XHRcdHZ0eXBlID0galF1ZXJ5LnR5cGUoIHZhbHVlICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIHZhbHVlID09IG51bGwgJiYgcHJvcC5lbXB0eSApIHtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIHZ0eXBlID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0XHRtYXRjaCA9IHJwbHVzZXF1YWxzLmV4ZWMoIHZhbHVlICk7XG5cdFx0XHRcdGlmICggbWF0Y2ggKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBjdXIgKyBwYXJzZUZsb2F0KCBtYXRjaFsgMiBdICkgKiAoIG1hdGNoWyAxIF0gPT09IFwiK1wiID8gMSA6IC0xICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGxvY2FsWyBwcm9wLmlkeCBdID0gdmFsdWU7XG5cdFx0XHRyZXR1cm4gdGhpc1sgZm4gXSggbG9jYWwgKTtcblx0XHR9O1xuXHR9ICk7XG59ICk7XG5cbi8vIEFkZCBjc3NIb29rIGFuZCAuZnguc3RlcCBmdW5jdGlvbiBmb3IgZWFjaCBuYW1lZCBob29rLlxuLy8gYWNjZXB0IGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBvZiBwcm9wZXJ0aWVzXG5jb2xvci5ob29rID0gZnVuY3Rpb24oIGhvb2sgKSB7XG5cdHZhciBob29rcyA9IGhvb2suc3BsaXQoIFwiIFwiICk7XG5cdGVhY2goIGhvb2tzLCBmdW5jdGlvbiggaSwgaG9vayApIHtcblx0XHRqUXVlcnkuY3NzSG9va3NbIGhvb2sgXSA9IHtcblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgcGFyc2VkLCBjdXJFbGVtLFxuXHRcdFx0XHRcdGJhY2tncm91bmRDb2xvciA9IFwiXCI7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPT0gXCJ0cmFuc3BhcmVudFwiICYmICggalF1ZXJ5LnR5cGUoIHZhbHVlICkgIT09IFwic3RyaW5nXCIgfHxcblx0XHRcdFx0XHRcdCggcGFyc2VkID0gc3RyaW5nUGFyc2UoIHZhbHVlICkgKSApICkge1xuXHRcdFx0XHRcdHZhbHVlID0gY29sb3IoIHBhcnNlZCB8fCB2YWx1ZSApO1xuXHRcdFx0XHRcdGlmICggIXN1cHBvcnQucmdiYSAmJiB2YWx1ZS5fcmdiYVsgMyBdICE9PSAxICkge1xuXHRcdFx0XHRcdFx0Y3VyRWxlbSA9IGhvb2sgPT09IFwiYmFja2dyb3VuZENvbG9yXCIgPyBlbGVtLnBhcmVudE5vZGUgOiBlbGVtO1xuXHRcdFx0XHRcdFx0d2hpbGUgKFxuXHRcdFx0XHRcdFx0XHQoIGJhY2tncm91bmRDb2xvciA9PT0gXCJcIiB8fCBiYWNrZ3JvdW5kQ29sb3IgPT09IFwidHJhbnNwYXJlbnRcIiApICYmXG5cdFx0XHRcdFx0XHRcdGN1ckVsZW0gJiYgY3VyRWxlbS5zdHlsZVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZENvbG9yID0galF1ZXJ5LmNzcyggY3VyRWxlbSwgXCJiYWNrZ3JvdW5kQ29sb3JcIiApO1xuXHRcdFx0XHRcdFx0XHRcdGN1ckVsZW0gPSBjdXJFbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWUuYmxlbmQoIGJhY2tncm91bmRDb2xvciAmJiBiYWNrZ3JvdW5kQ29sb3IgIT09IFwidHJhbnNwYXJlbnRcIiA/XG5cdFx0XHRcdFx0XHRcdGJhY2tncm91bmRDb2xvciA6XG5cdFx0XHRcdFx0XHRcdFwiX2RlZmF1bHRcIiApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhbHVlID0gdmFsdWUudG9SZ2JhU3RyaW5nKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRlbGVtLnN0eWxlWyBob29rIF0gPSB2YWx1ZTtcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHQvLyBXcmFwcGVkIHRvIHByZXZlbnQgSUUgZnJvbSB0aHJvd2luZyBlcnJvcnMgb24gXCJpbnZhbGlkXCIgdmFsdWVzIGxpa2Vcblx0XHRcdFx0XHQvLyAnYXV0bycgb3IgJ2luaGVyaXQnXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdGpRdWVyeS5meC5zdGVwWyBob29rIF0gPSBmdW5jdGlvbiggZnggKSB7XG5cdFx0XHRpZiAoICFmeC5jb2xvckluaXQgKSB7XG5cdFx0XHRcdGZ4LnN0YXJ0ID0gY29sb3IoIGZ4LmVsZW0sIGhvb2sgKTtcblx0XHRcdFx0ZnguZW5kID0gY29sb3IoIGZ4LmVuZCApO1xuXHRcdFx0XHRmeC5jb2xvckluaXQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0alF1ZXJ5LmNzc0hvb2tzWyBob29rIF0uc2V0KCBmeC5lbGVtLCBmeC5zdGFydC50cmFuc2l0aW9uKCBmeC5lbmQsIGZ4LnBvcyApICk7XG5cdFx0fTtcblx0fSApO1xuXG59O1xuXG5jb2xvci5ob29rKCBzdGVwSG9va3MgKTtcblxualF1ZXJ5LmNzc0hvb2tzLmJvcmRlckNvbG9yID0ge1xuXHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgZXhwYW5kZWQgPSB7fTtcblxuXHRcdGVhY2goIFsgXCJUb3BcIiwgXCJSaWdodFwiLCBcIkJvdHRvbVwiLCBcIkxlZnRcIiBdLCBmdW5jdGlvbiggaSwgcGFydCApIHtcblx0XHRcdGV4cGFuZGVkWyBcImJvcmRlclwiICsgcGFydCArIFwiQ29sb3JcIiBdID0gdmFsdWU7XG5cdFx0fSApO1xuXHRcdHJldHVybiBleHBhbmRlZDtcblx0fVxufTtcblxuLy8gQmFzaWMgY29sb3IgbmFtZXMgb25seS5cbi8vIFVzYWdlIG9mIGFueSBvZiB0aGUgb3RoZXIgY29sb3IgbmFtZXMgcmVxdWlyZXMgYWRkaW5nIHlvdXJzZWxmIG9yIGluY2x1ZGluZ1xuLy8ganF1ZXJ5LmNvbG9yLnN2Zy1uYW1lcy5qcy5cbmNvbG9ycyA9IGpRdWVyeS5Db2xvci5uYW1lcyA9IHtcblxuXHQvLyA0LjEuIEJhc2ljIGNvbG9yIGtleXdvcmRzXG5cdGFxdWE6IFwiIzAwZmZmZlwiLFxuXHRibGFjazogXCIjMDAwMDAwXCIsXG5cdGJsdWU6IFwiIzAwMDBmZlwiLFxuXHRmdWNoc2lhOiBcIiNmZjAwZmZcIixcblx0Z3JheTogXCIjODA4MDgwXCIsXG5cdGdyZWVuOiBcIiMwMDgwMDBcIixcblx0bGltZTogXCIjMDBmZjAwXCIsXG5cdG1hcm9vbjogXCIjODAwMDAwXCIsXG5cdG5hdnk6IFwiIzAwMDA4MFwiLFxuXHRvbGl2ZTogXCIjODA4MDAwXCIsXG5cdHB1cnBsZTogXCIjODAwMDgwXCIsXG5cdHJlZDogXCIjZmYwMDAwXCIsXG5cdHNpbHZlcjogXCIjYzBjMGMwXCIsXG5cdHRlYWw6IFwiIzAwODA4MFwiLFxuXHR3aGl0ZTogXCIjZmZmZmZmXCIsXG5cdHllbGxvdzogXCIjZmZmZjAwXCIsXG5cblx0Ly8gNC4yLjMuIFwidHJhbnNwYXJlbnRcIiBjb2xvciBrZXl3b3JkXG5cdHRyYW5zcGFyZW50OiBbIG51bGwsIG51bGwsIG51bGwsIDAgXSxcblxuXHRfZGVmYXVsdDogXCIjZmZmZmZmXCJcbn07XG5cbn0gKSggalF1ZXJ5ICk7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIENMQVNTIEFOSU1BVElPTlMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiggZnVuY3Rpb24oKSB7XG5cbnZhciBjbGFzc0FuaW1hdGlvbkFjdGlvbnMgPSBbIFwiYWRkXCIsIFwicmVtb3ZlXCIsIFwidG9nZ2xlXCIgXSxcblx0c2hvcnRoYW5kU3R5bGVzID0ge1xuXHRcdGJvcmRlcjogMSxcblx0XHRib3JkZXJCb3R0b206IDEsXG5cdFx0Ym9yZGVyQ29sb3I6IDEsXG5cdFx0Ym9yZGVyTGVmdDogMSxcblx0XHRib3JkZXJSaWdodDogMSxcblx0XHRib3JkZXJUb3A6IDEsXG5cdFx0Ym9yZGVyV2lkdGg6IDEsXG5cdFx0bWFyZ2luOiAxLFxuXHRcdHBhZGRpbmc6IDFcblx0fTtcblxuJC5lYWNoKFxuXHRbIFwiYm9yZGVyTGVmdFN0eWxlXCIsIFwiYm9yZGVyUmlnaHRTdHlsZVwiLCBcImJvcmRlckJvdHRvbVN0eWxlXCIsIFwiYm9yZGVyVG9wU3R5bGVcIiBdLFxuXHRmdW5jdGlvbiggXywgcHJvcCApIHtcblx0XHQkLmZ4LnN0ZXBbIHByb3AgXSA9IGZ1bmN0aW9uKCBmeCApIHtcblx0XHRcdGlmICggZnguZW5kICE9PSBcIm5vbmVcIiAmJiAhZnguc2V0QXR0ciB8fCBmeC5wb3MgPT09IDEgJiYgIWZ4LnNldEF0dHIgKSB7XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZnguZWxlbSwgcHJvcCwgZnguZW5kICk7XG5cdFx0XHRcdGZ4LnNldEF0dHIgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cbik7XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRTdHlsZXMoIGVsZW0gKSB7XG5cdHZhciBrZXksIGxlbixcblx0XHRzdHlsZSA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyA/XG5cdFx0XHRlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSwgbnVsbCApIDpcblx0XHRcdGVsZW0uY3VycmVudFN0eWxlLFxuXHRcdHN0eWxlcyA9IHt9O1xuXG5cdGlmICggc3R5bGUgJiYgc3R5bGUubGVuZ3RoICYmIHN0eWxlWyAwIF0gJiYgc3R5bGVbIHN0eWxlWyAwIF0gXSApIHtcblx0XHRsZW4gPSBzdHlsZS5sZW5ndGg7XG5cdFx0d2hpbGUgKCBsZW4tLSApIHtcblx0XHRcdGtleSA9IHN0eWxlWyBsZW4gXTtcblx0XHRcdGlmICggdHlwZW9mIHN0eWxlWyBrZXkgXSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0c3R5bGVzWyAkLmNhbWVsQ2FzZSgga2V5ICkgXSA9IHN0eWxlWyBrZXkgXTtcblx0XHRcdH1cblx0XHR9XG5cblx0Ly8gU3VwcG9ydDogT3BlcmEsIElFIDw5XG5cdH0gZWxzZSB7XG5cdFx0Zm9yICgga2V5IGluIHN0eWxlICkge1xuXHRcdFx0aWYgKCB0eXBlb2Ygc3R5bGVbIGtleSBdID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0XHRzdHlsZXNbIGtleSBdID0gc3R5bGVbIGtleSBdO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbmZ1bmN0aW9uIHN0eWxlRGlmZmVyZW5jZSggb2xkU3R5bGUsIG5ld1N0eWxlICkge1xuXHR2YXIgZGlmZiA9IHt9LFxuXHRcdG5hbWUsIHZhbHVlO1xuXG5cdGZvciAoIG5hbWUgaW4gbmV3U3R5bGUgKSB7XG5cdFx0dmFsdWUgPSBuZXdTdHlsZVsgbmFtZSBdO1xuXHRcdGlmICggb2xkU3R5bGVbIG5hbWUgXSAhPT0gdmFsdWUgKSB7XG5cdFx0XHRpZiAoICFzaG9ydGhhbmRTdHlsZXNbIG5hbWUgXSApIHtcblx0XHRcdFx0aWYgKCAkLmZ4LnN0ZXBbIG5hbWUgXSB8fCAhaXNOYU4oIHBhcnNlRmxvYXQoIHZhbHVlICkgKSApIHtcblx0XHRcdFx0XHRkaWZmWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBkaWZmO1xufVxuXG4vLyBTdXBwb3J0OiBqUXVlcnkgPDEuOFxuaWYgKCAhJC5mbi5hZGRCYWNrICkge1xuXHQkLmZuLmFkZEJhY2sgPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID9cblx0XHRcdHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoIHNlbGVjdG9yIClcblx0XHQpO1xuXHR9O1xufVxuXG4kLmVmZmVjdHMuYW5pbWF0ZUNsYXNzID0gZnVuY3Rpb24oIHZhbHVlLCBkdXJhdGlvbiwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0dmFyIG8gPSAkLnNwZWVkKCBkdXJhdGlvbiwgZWFzaW5nLCBjYWxsYmFjayApO1xuXG5cdHJldHVybiB0aGlzLnF1ZXVlKCBmdW5jdGlvbigpIHtcblx0XHR2YXIgYW5pbWF0ZWQgPSAkKCB0aGlzICksXG5cdFx0XHRiYXNlQ2xhc3MgPSBhbmltYXRlZC5hdHRyKCBcImNsYXNzXCIgKSB8fCBcIlwiLFxuXHRcdFx0YXBwbHlDbGFzc0NoYW5nZSxcblx0XHRcdGFsbEFuaW1hdGlvbnMgPSBvLmNoaWxkcmVuID8gYW5pbWF0ZWQuZmluZCggXCIqXCIgKS5hZGRCYWNrKCkgOiBhbmltYXRlZDtcblxuXHRcdC8vIE1hcCB0aGUgYW5pbWF0ZWQgb2JqZWN0cyB0byBzdG9yZSB0aGUgb3JpZ2luYWwgc3R5bGVzLlxuXHRcdGFsbEFuaW1hdGlvbnMgPSBhbGxBbmltYXRpb25zLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZWwgPSAkKCB0aGlzICk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRlbDogZWwsXG5cdFx0XHRcdHN0YXJ0OiBnZXRFbGVtZW50U3R5bGVzKCB0aGlzIClcblx0XHRcdH07XG5cdFx0fSApO1xuXG5cdFx0Ly8gQXBwbHkgY2xhc3MgY2hhbmdlXG5cdFx0YXBwbHlDbGFzc0NoYW5nZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0JC5lYWNoKCBjbGFzc0FuaW1hdGlvbkFjdGlvbnMsIGZ1bmN0aW9uKCBpLCBhY3Rpb24gKSB7XG5cdFx0XHRcdGlmICggdmFsdWVbIGFjdGlvbiBdICkge1xuXHRcdFx0XHRcdGFuaW1hdGVkWyBhY3Rpb24gKyBcIkNsYXNzXCIgXSggdmFsdWVbIGFjdGlvbiBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9O1xuXHRcdGFwcGx5Q2xhc3NDaGFuZ2UoKTtcblxuXHRcdC8vIE1hcCBhbGwgYW5pbWF0ZWQgb2JqZWN0cyBhZ2FpbiAtIGNhbGN1bGF0ZSBuZXcgc3R5bGVzIGFuZCBkaWZmXG5cdFx0YWxsQW5pbWF0aW9ucyA9IGFsbEFuaW1hdGlvbnMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuZW5kID0gZ2V0RWxlbWVudFN0eWxlcyggdGhpcy5lbFsgMCBdICk7XG5cdFx0XHR0aGlzLmRpZmYgPSBzdHlsZURpZmZlcmVuY2UoIHRoaXMuc3RhcnQsIHRoaXMuZW5kICk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9ICk7XG5cblx0XHQvLyBBcHBseSBvcmlnaW5hbCBjbGFzc1xuXHRcdGFuaW1hdGVkLmF0dHIoIFwiY2xhc3NcIiwgYmFzZUNsYXNzICk7XG5cblx0XHQvLyBNYXAgYWxsIGFuaW1hdGVkIG9iamVjdHMgYWdhaW4gLSB0aGlzIHRpbWUgY29sbGVjdGluZyBhIHByb21pc2Vcblx0XHRhbGxBbmltYXRpb25zID0gYWxsQW5pbWF0aW9ucy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHN0eWxlSW5mbyA9IHRoaXMsXG5cdFx0XHRcdGRmZCA9ICQuRGVmZXJyZWQoKSxcblx0XHRcdFx0b3B0cyA9ICQuZXh0ZW5kKCB7fSwgbywge1xuXHRcdFx0XHRcdHF1ZXVlOiBmYWxzZSxcblx0XHRcdFx0XHRjb21wbGV0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRkZmQucmVzb2x2ZSggc3R5bGVJbmZvICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cblx0XHRcdHRoaXMuZWwuYW5pbWF0ZSggdGhpcy5kaWZmLCBvcHRzICk7XG5cdFx0XHRyZXR1cm4gZGZkLnByb21pc2UoKTtcblx0XHR9ICk7XG5cblx0XHQvLyBPbmNlIGFsbCBhbmltYXRpb25zIGhhdmUgY29tcGxldGVkOlxuXHRcdCQud2hlbi5hcHBseSggJCwgYWxsQW5pbWF0aW9ucy5nZXQoKSApLmRvbmUoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBTZXQgdGhlIGZpbmFsIGNsYXNzXG5cdFx0XHRhcHBseUNsYXNzQ2hhbmdlKCk7XG5cblx0XHRcdC8vIEZvciBlYWNoIGFuaW1hdGVkIGVsZW1lbnQsXG5cdFx0XHQvLyBjbGVhciBhbGwgY3NzIHByb3BlcnRpZXMgdGhhdCB3ZXJlIGFuaW1hdGVkXG5cdFx0XHQkLmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBlbCA9IHRoaXMuZWw7XG5cdFx0XHRcdCQuZWFjaCggdGhpcy5kaWZmLCBmdW5jdGlvbigga2V5ICkge1xuXHRcdFx0XHRcdGVsLmNzcygga2V5LCBcIlwiICk7XG5cdFx0XHRcdH0gKTtcblx0XHRcdH0gKTtcblxuXHRcdFx0Ly8gVGhpcyBpcyBndWFybnRlZWQgdG8gYmUgdGhlcmUgaWYgeW91IHVzZSBqUXVlcnkuc3BlZWQoKVxuXHRcdFx0Ly8gaXQgYWxzbyBoYW5kbGVzIGRlcXVldWluZyB0aGUgbmV4dCBhbmltLi4uXG5cdFx0XHRvLmNvbXBsZXRlLmNhbGwoIGFuaW1hdGVkWyAwIF0gKTtcblx0XHR9ICk7XG5cdH0gKTtcbn07XG5cbiQuZm4uZXh0ZW5kKCB7XG5cdGFkZENsYXNzOiAoIGZ1bmN0aW9uKCBvcmlnICkge1xuXHRcdHJldHVybiBmdW5jdGlvbiggY2xhc3NOYW1lcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0XHRyZXR1cm4gc3BlZWQgP1xuXHRcdFx0XHQkLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwoIHRoaXMsXG5cdFx0XHRcdFx0eyBhZGQ6IGNsYXNzTmFtZXMgfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSA6XG5cdFx0XHRcdG9yaWcuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH07XG5cdH0gKSggJC5mbi5hZGRDbGFzcyApLFxuXG5cdHJlbW92ZUNsYXNzOiAoIGZ1bmN0aW9uKCBvcmlnICkge1xuXHRcdHJldHVybiBmdW5jdGlvbiggY2xhc3NOYW1lcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDEgP1xuXHRcdFx0XHQkLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwoIHRoaXMsXG5cdFx0XHRcdFx0eyByZW1vdmU6IGNsYXNzTmFtZXMgfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSA6XG5cdFx0XHRcdG9yaWcuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH07XG5cdH0gKSggJC5mbi5yZW1vdmVDbGFzcyApLFxuXG5cdHRvZ2dsZUNsYXNzOiAoIGZ1bmN0aW9uKCBvcmlnICkge1xuXHRcdHJldHVybiBmdW5jdGlvbiggY2xhc3NOYW1lcywgZm9yY2UsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgZm9yY2UgPT09IFwiYm9vbGVhblwiIHx8IGZvcmNlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdGlmICggIXNwZWVkICkge1xuXG5cdFx0XHRcdFx0Ly8gV2l0aG91dCBzcGVlZCBwYXJhbWV0ZXJcblx0XHRcdFx0XHRyZXR1cm4gb3JpZy5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuICQuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCggdGhpcyxcblx0XHRcdFx0XHRcdCggZm9yY2UgPyB7IGFkZDogY2xhc3NOYW1lcyB9IDogeyByZW1vdmU6IGNsYXNzTmFtZXMgfSApLFxuXHRcdFx0XHRcdFx0c3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBXaXRob3V0IGZvcmNlIHBhcmFtZXRlclxuXHRcdFx0XHRyZXR1cm4gJC5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKCB0aGlzLFxuXHRcdFx0XHRcdHsgdG9nZ2xlOiBjbGFzc05hbWVzIH0sIGZvcmNlLCBzcGVlZCwgZWFzaW5nICk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fSApKCAkLmZuLnRvZ2dsZUNsYXNzICksXG5cblx0c3dpdGNoQ2xhc3M6IGZ1bmN0aW9uKCByZW1vdmUsIGFkZCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuICQuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCggdGhpcywge1xuXHRcdFx0YWRkOiBhZGQsXG5cdFx0XHRyZW1vdmU6IHJlbW92ZVxuXHRcdH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH1cbn0gKTtcblxufSApKCk7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogRUZGRUNUUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuKCBmdW5jdGlvbigpIHtcblxuaWYgKCAkLmV4cHIgJiYgJC5leHByLmZpbHRlcnMgJiYgJC5leHByLmZpbHRlcnMuYW5pbWF0ZWQgKSB7XG5cdCQuZXhwci5maWx0ZXJzLmFuaW1hdGVkID0gKCBmdW5jdGlvbiggb3JpZyApIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gISEkKCBlbGVtICkuZGF0YSggZGF0YVNwYWNlQW5pbWF0ZWQgKSB8fCBvcmlnKCBlbGVtICk7XG5cdFx0fTtcblx0fSApKCAkLmV4cHIuZmlsdGVycy5hbmltYXRlZCApO1xufVxuXG5pZiAoICQudWlCYWNrQ29tcGF0ICE9PSBmYWxzZSApIHtcblx0JC5leHRlbmQoICQuZWZmZWN0cywge1xuXG5cdFx0Ly8gU2F2ZXMgYSBzZXQgb2YgcHJvcGVydGllcyBpbiBhIGRhdGEgc3RvcmFnZVxuXHRcdHNhdmU6IGZ1bmN0aW9uKCBlbGVtZW50LCBzZXQgKSB7XG5cdFx0XHR2YXIgaSA9IDAsIGxlbmd0aCA9IHNldC5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBzZXRbIGkgXSAhPT0gbnVsbCApIHtcblx0XHRcdFx0XHRlbGVtZW50LmRhdGEoIGRhdGFTcGFjZSArIHNldFsgaSBdLCBlbGVtZW50WyAwIF0uc3R5bGVbIHNldFsgaSBdIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBSZXN0b3JlcyBhIHNldCBvZiBwcmV2aW91c2x5IHNhdmVkIHByb3BlcnRpZXMgZnJvbSBhIGRhdGEgc3RvcmFnZVxuXHRcdHJlc3RvcmU6IGZ1bmN0aW9uKCBlbGVtZW50LCBzZXQgKSB7XG5cdFx0XHR2YXIgdmFsLCBpID0gMCwgbGVuZ3RoID0gc2V0Lmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIHNldFsgaSBdICE9PSBudWxsICkge1xuXHRcdFx0XHRcdHZhbCA9IGVsZW1lbnQuZGF0YSggZGF0YVNwYWNlICsgc2V0WyBpIF0gKTtcblx0XHRcdFx0XHRlbGVtZW50LmNzcyggc2V0WyBpIF0sIHZhbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNldE1vZGU6IGZ1bmN0aW9uKCBlbCwgbW9kZSApIHtcblx0XHRcdGlmICggbW9kZSA9PT0gXCJ0b2dnbGVcIiApIHtcblx0XHRcdFx0bW9kZSA9IGVsLmlzKCBcIjpoaWRkZW5cIiApID8gXCJzaG93XCIgOiBcImhpZGVcIjtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtb2RlO1xuXHRcdH0sXG5cblx0XHQvLyBXcmFwcyB0aGUgZWxlbWVudCBhcm91bmQgYSB3cmFwcGVyIHRoYXQgY29waWVzIHBvc2l0aW9uIHByb3BlcnRpZXNcblx0XHRjcmVhdGVXcmFwcGVyOiBmdW5jdGlvbiggZWxlbWVudCApIHtcblxuXHRcdFx0Ly8gSWYgdGhlIGVsZW1lbnQgaXMgYWxyZWFkeSB3cmFwcGVkLCByZXR1cm4gaXRcblx0XHRcdGlmICggZWxlbWVudC5wYXJlbnQoKS5pcyggXCIudWktZWZmZWN0cy13cmFwcGVyXCIgKSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW1lbnQucGFyZW50KCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdyYXAgdGhlIGVsZW1lbnRcblx0XHRcdHZhciBwcm9wcyA9IHtcblx0XHRcdFx0XHR3aWR0aDogZWxlbWVudC5vdXRlcldpZHRoKCB0cnVlICksXG5cdFx0XHRcdFx0aGVpZ2h0OiBlbGVtZW50Lm91dGVySGVpZ2h0KCB0cnVlICksXG5cdFx0XHRcdFx0XCJmbG9hdFwiOiBlbGVtZW50LmNzcyggXCJmbG9hdFwiIClcblx0XHRcdFx0fSxcblx0XHRcdFx0d3JhcHBlciA9ICQoIFwiPGRpdj48L2Rpdj5cIiApXG5cdFx0XHRcdFx0LmFkZENsYXNzKCBcInVpLWVmZmVjdHMtd3JhcHBlclwiIClcblx0XHRcdFx0XHQuY3NzKCB7XG5cdFx0XHRcdFx0XHRmb250U2l6ZTogXCIxMDAlXCIsXG5cdFx0XHRcdFx0XHRiYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG5cdFx0XHRcdFx0XHRib3JkZXI6IFwibm9uZVwiLFxuXHRcdFx0XHRcdFx0bWFyZ2luOiAwLFxuXHRcdFx0XHRcdFx0cGFkZGluZzogMFxuXHRcdFx0XHRcdH0gKSxcblxuXHRcdFx0XHQvLyBTdG9yZSB0aGUgc2l6ZSBpbiBjYXNlIHdpZHRoL2hlaWdodCBhcmUgZGVmaW5lZCBpbiAlIC0gRml4ZXMgIzUyNDVcblx0XHRcdFx0c2l6ZSA9IHtcblx0XHRcdFx0XHR3aWR0aDogZWxlbWVudC53aWR0aCgpLFxuXHRcdFx0XHRcdGhlaWdodDogZWxlbWVudC5oZWlnaHQoKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhY3RpdmUgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94XG5cdFx0XHQvLyBGaXJlZm94IGluY29ycmVjdGx5IGV4cG9zZXMgYW5vbnltb3VzIGNvbnRlbnRcblx0XHRcdC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTU2MTY2NFxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YWN0aXZlLmlkO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRcdGFjdGl2ZSA9IGRvY3VtZW50LmJvZHk7XG5cdFx0XHR9XG5cblx0XHRcdGVsZW1lbnQud3JhcCggd3JhcHBlciApO1xuXG5cdFx0XHQvLyBGaXhlcyAjNzU5NSAtIEVsZW1lbnRzIGxvc2UgZm9jdXMgd2hlbiB3cmFwcGVkLlxuXHRcdFx0aWYgKCBlbGVtZW50WyAwIF0gPT09IGFjdGl2ZSB8fCAkLmNvbnRhaW5zKCBlbGVtZW50WyAwIF0sIGFjdGl2ZSApICkge1xuXHRcdFx0XHQkKCBhY3RpdmUgKS50cmlnZ2VyKCBcImZvY3VzXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSG90Zml4IGZvciBqUXVlcnkgMS40IHNpbmNlIHNvbWUgY2hhbmdlIGluIHdyYXAoKSBzZWVtcyB0byBhY3R1YWxseVxuXHRcdFx0Ly8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSB3cmFwcGVkIGVsZW1lbnRcblx0XHRcdHdyYXBwZXIgPSBlbGVtZW50LnBhcmVudCgpO1xuXG5cdFx0XHQvLyBUcmFuc2ZlciBwb3NpdGlvbmluZyBwcm9wZXJ0aWVzIHRvIHRoZSB3cmFwcGVyXG5cdFx0XHRpZiAoIGVsZW1lbnQuY3NzKCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdFx0d3JhcHBlci5jc3MoIHsgcG9zaXRpb246IFwicmVsYXRpdmVcIiB9ICk7XG5cdFx0XHRcdGVsZW1lbnQuY3NzKCB7IHBvc2l0aW9uOiBcInJlbGF0aXZlXCIgfSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JC5leHRlbmQoIHByb3BzLCB7XG5cdFx0XHRcdFx0cG9zaXRpb246IGVsZW1lbnQuY3NzKCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdFx0XHR6SW5kZXg6IGVsZW1lbnQuY3NzKCBcInotaW5kZXhcIiApXG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0JC5lYWNoKCBbIFwidG9wXCIsIFwibGVmdFwiLCBcImJvdHRvbVwiLCBcInJpZ2h0XCIgXSwgZnVuY3Rpb24oIGksIHBvcyApIHtcblx0XHRcdFx0XHRwcm9wc1sgcG9zIF0gPSBlbGVtZW50LmNzcyggcG9zICk7XG5cdFx0XHRcdFx0aWYgKCBpc05hTiggcGFyc2VJbnQoIHByb3BzWyBwb3MgXSwgMTAgKSApICkge1xuXHRcdFx0XHRcdFx0cHJvcHNbIHBvcyBdID0gXCJhdXRvXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdGVsZW1lbnQuY3NzKCB7XG5cdFx0XHRcdFx0cG9zaXRpb246IFwicmVsYXRpdmVcIixcblx0XHRcdFx0XHR0b3A6IDAsXG5cdFx0XHRcdFx0bGVmdDogMCxcblx0XHRcdFx0XHRyaWdodDogXCJhdXRvXCIsXG5cdFx0XHRcdFx0Ym90dG9tOiBcImF1dG9cIlxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0XHRlbGVtZW50LmNzcyggc2l6ZSApO1xuXG5cdFx0XHRyZXR1cm4gd3JhcHBlci5jc3MoIHByb3BzICkuc2hvdygpO1xuXHRcdH0sXG5cblx0XHRyZW1vdmVXcmFwcGVyOiBmdW5jdGlvbiggZWxlbWVudCApIHtcblx0XHRcdHZhciBhY3RpdmUgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXG5cdFx0XHRpZiAoIGVsZW1lbnQucGFyZW50KCkuaXMoIFwiLnVpLWVmZmVjdHMtd3JhcHBlclwiICkgKSB7XG5cdFx0XHRcdGVsZW1lbnQucGFyZW50KCkucmVwbGFjZVdpdGgoIGVsZW1lbnQgKTtcblxuXHRcdFx0XHQvLyBGaXhlcyAjNzU5NSAtIEVsZW1lbnRzIGxvc2UgZm9jdXMgd2hlbiB3cmFwcGVkLlxuXHRcdFx0XHRpZiAoIGVsZW1lbnRbIDAgXSA9PT0gYWN0aXZlIHx8ICQuY29udGFpbnMoIGVsZW1lbnRbIDAgXSwgYWN0aXZlICkgKSB7XG5cdFx0XHRcdFx0JCggYWN0aXZlICkudHJpZ2dlciggXCJmb2N1c1wiICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdFx0fVxuXHR9ICk7XG59XG5cbiQuZXh0ZW5kKCAkLmVmZmVjdHMsIHtcblx0dmVyc2lvbjogXCIxLjEyLjFcIixcblxuXHRkZWZpbmU6IGZ1bmN0aW9uKCBuYW1lLCBtb2RlLCBlZmZlY3QgKSB7XG5cdFx0aWYgKCAhZWZmZWN0ICkge1xuXHRcdFx0ZWZmZWN0ID0gbW9kZTtcblx0XHRcdG1vZGUgPSBcImVmZmVjdFwiO1xuXHRcdH1cblxuXHRcdCQuZWZmZWN0cy5lZmZlY3RbIG5hbWUgXSA9IGVmZmVjdDtcblx0XHQkLmVmZmVjdHMuZWZmZWN0WyBuYW1lIF0ubW9kZSA9IG1vZGU7XG5cblx0XHRyZXR1cm4gZWZmZWN0O1xuXHR9LFxuXG5cdHNjYWxlZERpbWVuc2lvbnM6IGZ1bmN0aW9uKCBlbGVtZW50LCBwZXJjZW50LCBkaXJlY3Rpb24gKSB7XG5cdFx0aWYgKCBwZXJjZW50ID09PSAwICkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aGVpZ2h0OiAwLFxuXHRcdFx0XHR3aWR0aDogMCxcblx0XHRcdFx0b3V0ZXJIZWlnaHQ6IDAsXG5cdFx0XHRcdG91dGVyV2lkdGg6IDBcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dmFyIHggPSBkaXJlY3Rpb24gIT09IFwiaG9yaXpvbnRhbFwiID8gKCAoIHBlcmNlbnQgfHwgMTAwICkgLyAxMDAgKSA6IDEsXG5cdFx0XHR5ID0gZGlyZWN0aW9uICE9PSBcInZlcnRpY2FsXCIgPyAoICggcGVyY2VudCB8fCAxMDAgKSAvIDEwMCApIDogMTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0KCkgKiB5LFxuXHRcdFx0d2lkdGg6IGVsZW1lbnQud2lkdGgoKSAqIHgsXG5cdFx0XHRvdXRlckhlaWdodDogZWxlbWVudC5vdXRlckhlaWdodCgpICogeSxcblx0XHRcdG91dGVyV2lkdGg6IGVsZW1lbnQub3V0ZXJXaWR0aCgpICogeFxuXHRcdH07XG5cblx0fSxcblxuXHRjbGlwVG9Cb3g6IGZ1bmN0aW9uKCBhbmltYXRpb24gKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHdpZHRoOiBhbmltYXRpb24uY2xpcC5yaWdodCAtIGFuaW1hdGlvbi5jbGlwLmxlZnQsXG5cdFx0XHRoZWlnaHQ6IGFuaW1hdGlvbi5jbGlwLmJvdHRvbSAtIGFuaW1hdGlvbi5jbGlwLnRvcCxcblx0XHRcdGxlZnQ6IGFuaW1hdGlvbi5jbGlwLmxlZnQsXG5cdFx0XHR0b3A6IGFuaW1hdGlvbi5jbGlwLnRvcFxuXHRcdH07XG5cdH0sXG5cblx0Ly8gSW5qZWN0cyByZWNlbnRseSBxdWV1ZWQgZnVuY3Rpb25zIHRvIGJlIGZpcnN0IGluIGxpbmUgKGFmdGVyIFwiaW5wcm9ncmVzc1wiKVxuXHR1bnNoaWZ0OiBmdW5jdGlvbiggZWxlbWVudCwgcXVldWVMZW5ndGgsIGNvdW50ICkge1xuXHRcdHZhciBxdWV1ZSA9IGVsZW1lbnQucXVldWUoKTtcblxuXHRcdGlmICggcXVldWVMZW5ndGggPiAxICkge1xuXHRcdFx0cXVldWUuc3BsaWNlLmFwcGx5KCBxdWV1ZSxcblx0XHRcdFx0WyAxLCAwIF0uY29uY2F0KCBxdWV1ZS5zcGxpY2UoIHF1ZXVlTGVuZ3RoLCBjb3VudCApICkgKTtcblx0XHR9XG5cdFx0ZWxlbWVudC5kZXF1ZXVlKCk7XG5cdH0sXG5cblx0c2F2ZVN0eWxlOiBmdW5jdGlvbiggZWxlbWVudCApIHtcblx0XHRlbGVtZW50LmRhdGEoIGRhdGFTcGFjZVN0eWxlLCBlbGVtZW50WyAwIF0uc3R5bGUuY3NzVGV4dCApO1xuXHR9LFxuXG5cdHJlc3RvcmVTdHlsZTogZnVuY3Rpb24oIGVsZW1lbnQgKSB7XG5cdFx0ZWxlbWVudFsgMCBdLnN0eWxlLmNzc1RleHQgPSBlbGVtZW50LmRhdGEoIGRhdGFTcGFjZVN0eWxlICkgfHwgXCJcIjtcblx0XHRlbGVtZW50LnJlbW92ZURhdGEoIGRhdGFTcGFjZVN0eWxlICk7XG5cdH0sXG5cblx0bW9kZTogZnVuY3Rpb24oIGVsZW1lbnQsIG1vZGUgKSB7XG5cdFx0dmFyIGhpZGRlbiA9IGVsZW1lbnQuaXMoIFwiOmhpZGRlblwiICk7XG5cblx0XHRpZiAoIG1vZGUgPT09IFwidG9nZ2xlXCIgKSB7XG5cdFx0XHRtb2RlID0gaGlkZGVuID8gXCJzaG93XCIgOiBcImhpZGVcIjtcblx0XHR9XG5cdFx0aWYgKCBoaWRkZW4gPyBtb2RlID09PSBcImhpZGVcIiA6IG1vZGUgPT09IFwic2hvd1wiICkge1xuXHRcdFx0bW9kZSA9IFwibm9uZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gbW9kZTtcblx0fSxcblxuXHQvLyBUcmFuc2xhdGVzIGEgW3RvcCxsZWZ0XSBhcnJheSBpbnRvIGEgYmFzZWxpbmUgdmFsdWVcblx0Z2V0QmFzZWxpbmU6IGZ1bmN0aW9uKCBvcmlnaW4sIG9yaWdpbmFsICkge1xuXHRcdHZhciB5LCB4O1xuXG5cdFx0c3dpdGNoICggb3JpZ2luWyAwIF0gKSB7XG5cdFx0Y2FzZSBcInRvcFwiOlxuXHRcdFx0eSA9IDA7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwibWlkZGxlXCI6XG5cdFx0XHR5ID0gMC41O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImJvdHRvbVwiOlxuXHRcdFx0eSA9IDE7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0eSA9IG9yaWdpblsgMCBdIC8gb3JpZ2luYWwuaGVpZ2h0O1xuXHRcdH1cblxuXHRcdHN3aXRjaCAoIG9yaWdpblsgMSBdICkge1xuXHRcdGNhc2UgXCJsZWZ0XCI6XG5cdFx0XHR4ID0gMDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJjZW50ZXJcIjpcblx0XHRcdHggPSAwLjU7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwicmlnaHRcIjpcblx0XHRcdHggPSAxO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHggPSBvcmlnaW5bIDEgXSAvIG9yaWdpbmFsLndpZHRoO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHR4OiB4LFxuXHRcdFx0eTogeVxuXHRcdH07XG5cdH0sXG5cblx0Ly8gQ3JlYXRlcyBhIHBsYWNlaG9sZGVyIGVsZW1lbnQgc28gdGhhdCB0aGUgb3JpZ2luYWwgZWxlbWVudCBjYW4gYmUgbWFkZSBhYnNvbHV0ZVxuXHRjcmVhdGVQbGFjZWhvbGRlcjogZnVuY3Rpb24oIGVsZW1lbnQgKSB7XG5cdFx0dmFyIHBsYWNlaG9sZGVyLFxuXHRcdFx0Y3NzUG9zaXRpb24gPSBlbGVtZW50LmNzcyggXCJwb3NpdGlvblwiICksXG5cdFx0XHRwb3NpdGlvbiA9IGVsZW1lbnQucG9zaXRpb24oKTtcblxuXHRcdC8vIExvY2sgaW4gbWFyZ2lucyBmaXJzdCB0byBhY2NvdW50IGZvciBmb3JtIGVsZW1lbnRzLCB3aGljaFxuXHRcdC8vIHdpbGwgY2hhbmdlIG1hcmdpbiBpZiB5b3UgZXhwbGljaXRseSBzZXQgaGVpZ2h0XG5cdFx0Ly8gc2VlOiBodHRwOi8vanNmaWRkbGUubmV0L0paU010LzMvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDczODBcblx0XHQvLyBTdXBwb3J0OiBTYWZhcmlcblx0XHRlbGVtZW50LmNzcygge1xuXHRcdFx0bWFyZ2luVG9wOiBlbGVtZW50LmNzcyggXCJtYXJnaW5Ub3BcIiApLFxuXHRcdFx0bWFyZ2luQm90dG9tOiBlbGVtZW50LmNzcyggXCJtYXJnaW5Cb3R0b21cIiApLFxuXHRcdFx0bWFyZ2luTGVmdDogZWxlbWVudC5jc3MoIFwibWFyZ2luTGVmdFwiICksXG5cdFx0XHRtYXJnaW5SaWdodDogZWxlbWVudC5jc3MoIFwibWFyZ2luUmlnaHRcIiApXG5cdFx0fSApXG5cdFx0Lm91dGVyV2lkdGgoIGVsZW1lbnQub3V0ZXJXaWR0aCgpIClcblx0XHQub3V0ZXJIZWlnaHQoIGVsZW1lbnQub3V0ZXJIZWlnaHQoKSApO1xuXG5cdFx0aWYgKCAvXihzdGF0aWN8cmVsYXRpdmUpLy50ZXN0KCBjc3NQb3NpdGlvbiApICkge1xuXHRcdFx0Y3NzUG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cblx0XHRcdHBsYWNlaG9sZGVyID0gJCggXCI8XCIgKyBlbGVtZW50WyAwIF0ubm9kZU5hbWUgKyBcIj5cIiApLmluc2VydEFmdGVyKCBlbGVtZW50ICkuY3NzKCB7XG5cblx0XHRcdFx0Ly8gQ29udmVydCBpbmxpbmUgdG8gaW5saW5lIGJsb2NrIHRvIGFjY291bnQgZm9yIGlubGluZSBlbGVtZW50c1xuXHRcdFx0XHQvLyB0aGF0IHR1cm4gdG8gaW5saW5lIGJsb2NrIGJhc2VkIG9uIGNvbnRlbnQgKGxpa2UgaW1nKVxuXHRcdFx0XHRkaXNwbGF5OiAvXihpbmxpbmV8cnVieSkvLnRlc3QoIGVsZW1lbnQuY3NzKCBcImRpc3BsYXlcIiApICkgP1xuXHRcdFx0XHRcdFwiaW5saW5lLWJsb2NrXCIgOlxuXHRcdFx0XHRcdFwiYmxvY2tcIixcblx0XHRcdFx0dmlzaWJpbGl0eTogXCJoaWRkZW5cIixcblxuXHRcdFx0XHQvLyBNYXJnaW5zIG5lZWQgdG8gYmUgc2V0IHRvIGFjY291bnQgZm9yIG1hcmdpbiBjb2xsYXBzZVxuXHRcdFx0XHRtYXJnaW5Ub3A6IGVsZW1lbnQuY3NzKCBcIm1hcmdpblRvcFwiICksXG5cdFx0XHRcdG1hcmdpbkJvdHRvbTogZWxlbWVudC5jc3MoIFwibWFyZ2luQm90dG9tXCIgKSxcblx0XHRcdFx0bWFyZ2luTGVmdDogZWxlbWVudC5jc3MoIFwibWFyZ2luTGVmdFwiICksXG5cdFx0XHRcdG1hcmdpblJpZ2h0OiBlbGVtZW50LmNzcyggXCJtYXJnaW5SaWdodFwiICksXG5cdFx0XHRcdFwiZmxvYXRcIjogZWxlbWVudC5jc3MoIFwiZmxvYXRcIiApXG5cdFx0XHR9IClcblx0XHRcdC5vdXRlcldpZHRoKCBlbGVtZW50Lm91dGVyV2lkdGgoKSApXG5cdFx0XHQub3V0ZXJIZWlnaHQoIGVsZW1lbnQub3V0ZXJIZWlnaHQoKSApXG5cdFx0XHQuYWRkQ2xhc3MoIFwidWktZWZmZWN0cy1wbGFjZWhvbGRlclwiICk7XG5cblx0XHRcdGVsZW1lbnQuZGF0YSggZGF0YVNwYWNlICsgXCJwbGFjZWhvbGRlclwiLCBwbGFjZWhvbGRlciApO1xuXHRcdH1cblxuXHRcdGVsZW1lbnQuY3NzKCB7XG5cdFx0XHRwb3NpdGlvbjogY3NzUG9zaXRpb24sXG5cdFx0XHRsZWZ0OiBwb3NpdGlvbi5sZWZ0LFxuXHRcdFx0dG9wOiBwb3NpdGlvbi50b3Bcblx0XHR9ICk7XG5cblx0XHRyZXR1cm4gcGxhY2Vob2xkZXI7XG5cdH0sXG5cblx0cmVtb3ZlUGxhY2Vob2xkZXI6IGZ1bmN0aW9uKCBlbGVtZW50ICkge1xuXHRcdHZhciBkYXRhS2V5ID0gZGF0YVNwYWNlICsgXCJwbGFjZWhvbGRlclwiLFxuXHRcdFx0XHRwbGFjZWhvbGRlciA9IGVsZW1lbnQuZGF0YSggZGF0YUtleSApO1xuXG5cdFx0aWYgKCBwbGFjZWhvbGRlciApIHtcblx0XHRcdHBsYWNlaG9sZGVyLnJlbW92ZSgpO1xuXHRcdFx0ZWxlbWVudC5yZW1vdmVEYXRhKCBkYXRhS2V5ICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8vIFJlbW92ZXMgYSBwbGFjZWhvbGRlciBpZiBpdCBleGlzdHMgYW5kIHJlc3RvcmVzXG5cdC8vIHByb3BlcnRpZXMgdGhhdCB3ZXJlIG1vZGlmaWVkIGR1cmluZyBwbGFjZWhvbGRlciBjcmVhdGlvblxuXHRjbGVhblVwOiBmdW5jdGlvbiggZWxlbWVudCApIHtcblx0XHQkLmVmZmVjdHMucmVzdG9yZVN0eWxlKCBlbGVtZW50ICk7XG5cdFx0JC5lZmZlY3RzLnJlbW92ZVBsYWNlaG9sZGVyKCBlbGVtZW50ICk7XG5cdH0sXG5cblx0c2V0VHJhbnNpdGlvbjogZnVuY3Rpb24oIGVsZW1lbnQsIGxpc3QsIGZhY3RvciwgdmFsdWUgKSB7XG5cdFx0dmFsdWUgPSB2YWx1ZSB8fCB7fTtcblx0XHQkLmVhY2goIGxpc3QsIGZ1bmN0aW9uKCBpLCB4ICkge1xuXHRcdFx0dmFyIHVuaXQgPSBlbGVtZW50LmNzc1VuaXQoIHggKTtcblx0XHRcdGlmICggdW5pdFsgMCBdID4gMCApIHtcblx0XHRcdFx0dmFsdWVbIHggXSA9IHVuaXRbIDAgXSAqIGZhY3RvciArIHVuaXRbIDEgXTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59ICk7XG5cbi8vIFJldHVybiBhbiBlZmZlY3Qgb3B0aW9ucyBvYmplY3QgZm9yIHRoZSBnaXZlbiBwYXJhbWV0ZXJzOlxuZnVuY3Rpb24gX25vcm1hbGl6ZUFyZ3VtZW50cyggZWZmZWN0LCBvcHRpb25zLCBzcGVlZCwgY2FsbGJhY2sgKSB7XG5cblx0Ly8gQWxsb3cgcGFzc2luZyBhbGwgb3B0aW9ucyBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyXG5cdGlmICggJC5pc1BsYWluT2JqZWN0KCBlZmZlY3QgKSApIHtcblx0XHRvcHRpb25zID0gZWZmZWN0O1xuXHRcdGVmZmVjdCA9IGVmZmVjdC5lZmZlY3Q7XG5cdH1cblxuXHQvLyBDb252ZXJ0IHRvIGFuIG9iamVjdFxuXHRlZmZlY3QgPSB7IGVmZmVjdDogZWZmZWN0IH07XG5cblx0Ly8gQ2F0Y2ggKGVmZmVjdCwgbnVsbCwgLi4uKVxuXHRpZiAoIG9wdGlvbnMgPT0gbnVsbCApIHtcblx0XHRvcHRpb25zID0ge307XG5cdH1cblxuXHQvLyBDYXRjaCAoZWZmZWN0LCBjYWxsYmFjaylcblx0aWYgKCAkLmlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHtcblx0XHRjYWxsYmFjayA9IG9wdGlvbnM7XG5cdFx0c3BlZWQgPSBudWxsO1xuXHRcdG9wdGlvbnMgPSB7fTtcblx0fVxuXG5cdC8vIENhdGNoIChlZmZlY3QsIHNwZWVkLCA/KVxuXHRpZiAoIHR5cGVvZiBvcHRpb25zID09PSBcIm51bWJlclwiIHx8ICQuZnguc3BlZWRzWyBvcHRpb25zIF0gKSB7XG5cdFx0Y2FsbGJhY2sgPSBzcGVlZDtcblx0XHRzcGVlZCA9IG9wdGlvbnM7XG5cdFx0b3B0aW9ucyA9IHt9O1xuXHR9XG5cblx0Ly8gQ2F0Y2ggKGVmZmVjdCwgb3B0aW9ucywgY2FsbGJhY2spXG5cdGlmICggJC5pc0Z1bmN0aW9uKCBzcGVlZCApICkge1xuXHRcdGNhbGxiYWNrID0gc3BlZWQ7XG5cdFx0c3BlZWQgPSBudWxsO1xuXHR9XG5cblx0Ly8gQWRkIG9wdGlvbnMgdG8gZWZmZWN0XG5cdGlmICggb3B0aW9ucyApIHtcblx0XHQkLmV4dGVuZCggZWZmZWN0LCBvcHRpb25zICk7XG5cdH1cblxuXHRzcGVlZCA9IHNwZWVkIHx8IG9wdGlvbnMuZHVyYXRpb247XG5cdGVmZmVjdC5kdXJhdGlvbiA9ICQuZngub2ZmID8gMCA6XG5cdFx0dHlwZW9mIHNwZWVkID09PSBcIm51bWJlclwiID8gc3BlZWQgOlxuXHRcdHNwZWVkIGluICQuZnguc3BlZWRzID8gJC5meC5zcGVlZHNbIHNwZWVkIF0gOlxuXHRcdCQuZnguc3BlZWRzLl9kZWZhdWx0O1xuXG5cdGVmZmVjdC5jb21wbGV0ZSA9IGNhbGxiYWNrIHx8IG9wdGlvbnMuY29tcGxldGU7XG5cblx0cmV0dXJuIGVmZmVjdDtcbn1cblxuZnVuY3Rpb24gc3RhbmRhcmRBbmltYXRpb25PcHRpb24oIG9wdGlvbiApIHtcblxuXHQvLyBWYWxpZCBzdGFuZGFyZCBzcGVlZHMgKG5vdGhpbmcsIG51bWJlciwgbmFtZWQgc3BlZWQpXG5cdGlmICggIW9wdGlvbiB8fCB0eXBlb2Ygb3B0aW9uID09PSBcIm51bWJlclwiIHx8ICQuZnguc3BlZWRzWyBvcHRpb24gXSApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIEludmFsaWQgc3RyaW5ncyAtIHRyZWF0IGFzIFwibm9ybWFsXCIgc3BlZWRcblx0aWYgKCB0eXBlb2Ygb3B0aW9uID09PSBcInN0cmluZ1wiICYmICEkLmVmZmVjdHMuZWZmZWN0WyBvcHRpb24gXSApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIENvbXBsZXRlIGNhbGxiYWNrXG5cdGlmICggJC5pc0Z1bmN0aW9uKCBvcHRpb24gKSApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIE9wdGlvbnMgaGFzaCAoYnV0IG5vdCBuYW1pbmcgYW4gZWZmZWN0KVxuXHRpZiAoIHR5cGVvZiBvcHRpb24gPT09IFwib2JqZWN0XCIgJiYgIW9wdGlvbi5lZmZlY3QgKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBEaWRuJ3QgbWF0Y2ggYW55IHN0YW5kYXJkIEFQSVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbiQuZm4uZXh0ZW5kKCB7XG5cdGVmZmVjdDogZnVuY3Rpb24oIC8qIGVmZmVjdCwgb3B0aW9ucywgc3BlZWQsIGNhbGxiYWNrICovICkge1xuXHRcdHZhciBhcmdzID0gX25vcm1hbGl6ZUFyZ3VtZW50cy5hcHBseSggdGhpcywgYXJndW1lbnRzICksXG5cdFx0XHRlZmZlY3RNZXRob2QgPSAkLmVmZmVjdHMuZWZmZWN0WyBhcmdzLmVmZmVjdCBdLFxuXHRcdFx0ZGVmYXVsdE1vZGUgPSBlZmZlY3RNZXRob2QubW9kZSxcblx0XHRcdHF1ZXVlID0gYXJncy5xdWV1ZSxcblx0XHRcdHF1ZXVlTmFtZSA9IHF1ZXVlIHx8IFwiZnhcIixcblx0XHRcdGNvbXBsZXRlID0gYXJncy5jb21wbGV0ZSxcblx0XHRcdG1vZGUgPSBhcmdzLm1vZGUsXG5cdFx0XHRtb2RlcyA9IFtdLFxuXHRcdFx0cHJlZmlsdGVyID0gZnVuY3Rpb24oIG5leHQgKSB7XG5cdFx0XHRcdHZhciBlbCA9ICQoIHRoaXMgKSxcblx0XHRcdFx0XHRub3JtYWxpemVkTW9kZSA9ICQuZWZmZWN0cy5tb2RlKCBlbCwgbW9kZSApIHx8IGRlZmF1bHRNb2RlO1xuXG5cdFx0XHRcdC8vIFNlbnRpbmVsIGZvciBkdWNrLXB1bmNoaW5nIHRoZSA6YW5pbWF0ZWQgcHN1ZWRvLXNlbGVjdG9yXG5cdFx0XHRcdGVsLmRhdGEoIGRhdGFTcGFjZUFuaW1hdGVkLCB0cnVlICk7XG5cblx0XHRcdFx0Ly8gU2F2ZSBlZmZlY3QgbW9kZSBmb3IgbGF0ZXIgdXNlLFxuXHRcdFx0XHQvLyB3ZSBjYW4ndCBqdXN0IGNhbGwgJC5lZmZlY3RzLm1vZGUgYWdhaW4gbGF0ZXIsXG5cdFx0XHRcdC8vIGFzIHRoZSAuc2hvdygpIGJlbG93IGRlc3Ryb3lzIHRoZSBpbml0aWFsIHN0YXRlXG5cdFx0XHRcdG1vZGVzLnB1c2goIG5vcm1hbGl6ZWRNb2RlICk7XG5cblx0XHRcdFx0Ly8gU2VlICQudWlCYWNrQ29tcGF0IGluc2lkZSBvZiBydW4oKSBmb3IgcmVtb3ZhbCBvZiBkZWZhdWx0TW9kZSBpbiAxLjEzXG5cdFx0XHRcdGlmICggZGVmYXVsdE1vZGUgJiYgKCBub3JtYWxpemVkTW9kZSA9PT0gXCJzaG93XCIgfHxcblx0XHRcdFx0XHRcdCggbm9ybWFsaXplZE1vZGUgPT09IGRlZmF1bHRNb2RlICYmIG5vcm1hbGl6ZWRNb2RlID09PSBcImhpZGVcIiApICkgKSB7XG5cdFx0XHRcdFx0ZWwuc2hvdygpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCAhZGVmYXVsdE1vZGUgfHwgbm9ybWFsaXplZE1vZGUgIT09IFwibm9uZVwiICkge1xuXHRcdFx0XHRcdCQuZWZmZWN0cy5zYXZlU3R5bGUoIGVsICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoICQuaXNGdW5jdGlvbiggbmV4dCApICkge1xuXHRcdFx0XHRcdG5leHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggJC5meC5vZmYgfHwgIWVmZmVjdE1ldGhvZCApIHtcblxuXHRcdFx0Ly8gRGVsZWdhdGUgdG8gdGhlIG9yaWdpbmFsIG1ldGhvZCAoZS5nLiwgLnNob3coKSkgaWYgcG9zc2libGVcblx0XHRcdGlmICggbW9kZSApIHtcblx0XHRcdFx0cmV0dXJuIHRoaXNbIG1vZGUgXSggYXJncy5kdXJhdGlvbiwgY29tcGxldGUgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGUgKSB7XG5cdFx0XHRcdFx0XHRjb21wbGV0ZS5jYWxsKCB0aGlzICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gcnVuKCBuZXh0ICkge1xuXHRcdFx0dmFyIGVsZW0gPSAkKCB0aGlzICk7XG5cblx0XHRcdGZ1bmN0aW9uIGNsZWFudXAoKSB7XG5cdFx0XHRcdGVsZW0ucmVtb3ZlRGF0YSggZGF0YVNwYWNlQW5pbWF0ZWQgKTtcblxuXHRcdFx0XHQkLmVmZmVjdHMuY2xlYW5VcCggZWxlbSApO1xuXG5cdFx0XHRcdGlmICggYXJncy5tb2RlID09PSBcImhpZGVcIiApIHtcblx0XHRcdFx0XHRlbGVtLmhpZGUoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRvbmUoKTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gZG9uZSgpIHtcblx0XHRcdFx0aWYgKCAkLmlzRnVuY3Rpb24oIGNvbXBsZXRlICkgKSB7XG5cdFx0XHRcdFx0Y29tcGxldGUuY2FsbCggZWxlbVsgMCBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoICQuaXNGdW5jdGlvbiggbmV4dCApICkge1xuXHRcdFx0XHRcdG5leHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdmVycmlkZSBtb2RlIG9wdGlvbiBvbiBhIHBlciBlbGVtZW50IGJhc2lzLFxuXHRcdFx0Ly8gYXMgdG9nZ2xlIGNhbiBiZSBlaXRoZXIgc2hvdyBvciBoaWRlIGRlcGVuZGluZyBvbiBlbGVtZW50IHN0YXRlXG5cdFx0XHRhcmdzLm1vZGUgPSBtb2Rlcy5zaGlmdCgpO1xuXG5cdFx0XHRpZiAoICQudWlCYWNrQ29tcGF0ICE9PSBmYWxzZSAmJiAhZGVmYXVsdE1vZGUgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5pcyggXCI6aGlkZGVuXCIgKSA/IG1vZGUgPT09IFwiaGlkZVwiIDogbW9kZSA9PT0gXCJzaG93XCIgKSB7XG5cblx0XHRcdFx0XHQvLyBDYWxsIHRoZSBjb3JlIG1ldGhvZCB0byB0cmFjayBcIm9sZGRpc3BsYXlcIiBwcm9wZXJseVxuXHRcdFx0XHRcdGVsZW1bIG1vZGUgXSgpO1xuXHRcdFx0XHRcdGRvbmUoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlZmZlY3RNZXRob2QuY2FsbCggZWxlbVsgMCBdLCBhcmdzLCBkb25lICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICggYXJncy5tb2RlID09PSBcIm5vbmVcIiApIHtcblxuXHRcdFx0XHRcdC8vIENhbGwgdGhlIGNvcmUgbWV0aG9kIHRvIHRyYWNrIFwib2xkZGlzcGxheVwiIHByb3Blcmx5XG5cdFx0XHRcdFx0ZWxlbVsgbW9kZSBdKCk7XG5cdFx0XHRcdFx0ZG9uZSgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVmZmVjdE1ldGhvZC5jYWxsKCBlbGVtWyAwIF0sIGFyZ3MsIGNsZWFudXAgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJ1biBwcmVmaWx0ZXIgb24gYWxsIGVsZW1lbnRzIGZpcnN0IHRvIGVuc3VyZSB0aGF0XG5cdFx0Ly8gYW55IHNob3dpbmcgb3IgaGlkaW5nIGhhcHBlbnMgYmVmb3JlIHBsYWNlaG9sZGVyIGNyZWF0aW9uLFxuXHRcdC8vIHdoaWNoIGVuc3VyZXMgdGhhdCBhbnkgbGF5b3V0IGNoYW5nZXMgYXJlIGNvcnJlY3RseSBjYXB0dXJlZC5cblx0XHRyZXR1cm4gcXVldWUgPT09IGZhbHNlID9cblx0XHRcdHRoaXMuZWFjaCggcHJlZmlsdGVyICkuZWFjaCggcnVuICkgOlxuXHRcdFx0dGhpcy5xdWV1ZSggcXVldWVOYW1lLCBwcmVmaWx0ZXIgKS5xdWV1ZSggcXVldWVOYW1lLCBydW4gKTtcblx0fSxcblxuXHRzaG93OiAoIGZ1bmN0aW9uKCBvcmlnICkge1xuXHRcdHJldHVybiBmdW5jdGlvbiggb3B0aW9uICkge1xuXHRcdFx0aWYgKCBzdGFuZGFyZEFuaW1hdGlvbk9wdGlvbiggb3B0aW9uICkgKSB7XG5cdFx0XHRcdHJldHVybiBvcmlnLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhciBhcmdzID0gX25vcm1hbGl6ZUFyZ3VtZW50cy5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdGFyZ3MubW9kZSA9IFwic2hvd1wiO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5lZmZlY3QuY2FsbCggdGhpcywgYXJncyApO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0gKSggJC5mbi5zaG93ICksXG5cblx0aGlkZTogKCBmdW5jdGlvbiggb3JpZyApIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24oIG9wdGlvbiApIHtcblx0XHRcdGlmICggc3RhbmRhcmRBbmltYXRpb25PcHRpb24oIG9wdGlvbiApICkge1xuXHRcdFx0XHRyZXR1cm4gb3JpZy5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YXIgYXJncyA9IF9ub3JtYWxpemVBcmd1bWVudHMuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRhcmdzLm1vZGUgPSBcImhpZGVcIjtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZWZmZWN0LmNhbGwoIHRoaXMsIGFyZ3MgKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9ICkoICQuZm4uaGlkZSApLFxuXG5cdHRvZ2dsZTogKCBmdW5jdGlvbiggb3JpZyApIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24oIG9wdGlvbiApIHtcblx0XHRcdGlmICggc3RhbmRhcmRBbmltYXRpb25PcHRpb24oIG9wdGlvbiApIHx8IHR5cGVvZiBvcHRpb24gPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0XHRyZXR1cm4gb3JpZy5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YXIgYXJncyA9IF9ub3JtYWxpemVBcmd1bWVudHMuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRhcmdzLm1vZGUgPSBcInRvZ2dsZVwiO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5lZmZlY3QuY2FsbCggdGhpcywgYXJncyApO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0gKSggJC5mbi50b2dnbGUgKSxcblxuXHRjc3NVbml0OiBmdW5jdGlvbigga2V5ICkge1xuXHRcdHZhciBzdHlsZSA9IHRoaXMuY3NzKCBrZXkgKSxcblx0XHRcdHZhbCA9IFtdO1xuXG5cdFx0JC5lYWNoKCBbIFwiZW1cIiwgXCJweFwiLCBcIiVcIiwgXCJwdFwiIF0sIGZ1bmN0aW9uKCBpLCB1bml0ICkge1xuXHRcdFx0aWYgKCBzdHlsZS5pbmRleE9mKCB1bml0ICkgPiAwICkge1xuXHRcdFx0XHR2YWwgPSBbIHBhcnNlRmxvYXQoIHN0eWxlICksIHVuaXQgXTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIHZhbDtcblx0fSxcblxuXHRjc3NDbGlwOiBmdW5jdGlvbiggY2xpcE9iaiApIHtcblx0XHRpZiAoIGNsaXBPYmogKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jc3MoIFwiY2xpcFwiLCBcInJlY3QoXCIgKyBjbGlwT2JqLnRvcCArIFwicHggXCIgKyBjbGlwT2JqLnJpZ2h0ICsgXCJweCBcIiArXG5cdFx0XHRcdGNsaXBPYmouYm90dG9tICsgXCJweCBcIiArIGNsaXBPYmoubGVmdCArIFwicHgpXCIgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHBhcnNlQ2xpcCggdGhpcy5jc3MoIFwiY2xpcFwiICksIHRoaXMgKTtcblx0fSxcblxuXHR0cmFuc2ZlcjogZnVuY3Rpb24oIG9wdGlvbnMsIGRvbmUgKSB7XG5cdFx0dmFyIGVsZW1lbnQgPSAkKCB0aGlzICksXG5cdFx0XHR0YXJnZXQgPSAkKCBvcHRpb25zLnRvICksXG5cdFx0XHR0YXJnZXRGaXhlZCA9IHRhcmdldC5jc3MoIFwicG9zaXRpb25cIiApID09PSBcImZpeGVkXCIsXG5cdFx0XHRib2R5ID0gJCggXCJib2R5XCIgKSxcblx0XHRcdGZpeFRvcCA9IHRhcmdldEZpeGVkID8gYm9keS5zY3JvbGxUb3AoKSA6IDAsXG5cdFx0XHRmaXhMZWZ0ID0gdGFyZ2V0Rml4ZWQgPyBib2R5LnNjcm9sbExlZnQoKSA6IDAsXG5cdFx0XHRlbmRQb3NpdGlvbiA9IHRhcmdldC5vZmZzZXQoKSxcblx0XHRcdGFuaW1hdGlvbiA9IHtcblx0XHRcdFx0dG9wOiBlbmRQb3NpdGlvbi50b3AgLSBmaXhUb3AsXG5cdFx0XHRcdGxlZnQ6IGVuZFBvc2l0aW9uLmxlZnQgLSBmaXhMZWZ0LFxuXHRcdFx0XHRoZWlnaHQ6IHRhcmdldC5pbm5lckhlaWdodCgpLFxuXHRcdFx0XHR3aWR0aDogdGFyZ2V0LmlubmVyV2lkdGgoKVxuXHRcdFx0fSxcblx0XHRcdHN0YXJ0UG9zaXRpb24gPSBlbGVtZW50Lm9mZnNldCgpLFxuXHRcdFx0dHJhbnNmZXIgPSAkKCBcIjxkaXYgY2xhc3M9J3VpLWVmZmVjdHMtdHJhbnNmZXInPjwvZGl2PlwiIClcblx0XHRcdFx0LmFwcGVuZFRvKCBcImJvZHlcIiApXG5cdFx0XHRcdC5hZGRDbGFzcyggb3B0aW9ucy5jbGFzc05hbWUgKVxuXHRcdFx0XHQuY3NzKCB7XG5cdFx0XHRcdFx0dG9wOiBzdGFydFBvc2l0aW9uLnRvcCAtIGZpeFRvcCxcblx0XHRcdFx0XHRsZWZ0OiBzdGFydFBvc2l0aW9uLmxlZnQgLSBmaXhMZWZ0LFxuXHRcdFx0XHRcdGhlaWdodDogZWxlbWVudC5pbm5lckhlaWdodCgpLFxuXHRcdFx0XHRcdHdpZHRoOiBlbGVtZW50LmlubmVyV2lkdGgoKSxcblx0XHRcdFx0XHRwb3NpdGlvbjogdGFyZ2V0Rml4ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCJcblx0XHRcdFx0fSApXG5cdFx0XHRcdC5hbmltYXRlKCBhbmltYXRpb24sIG9wdGlvbnMuZHVyYXRpb24sIG9wdGlvbnMuZWFzaW5nLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHR0cmFuc2Zlci5yZW1vdmUoKTtcblx0XHRcdFx0XHRpZiAoICQuaXNGdW5jdGlvbiggZG9uZSApICkge1xuXHRcdFx0XHRcdFx0ZG9uZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHR9XG59ICk7XG5cbmZ1bmN0aW9uIHBhcnNlQ2xpcCggc3RyLCBlbGVtZW50ICkge1xuXHRcdHZhciBvdXRlcldpZHRoID0gZWxlbWVudC5vdXRlcldpZHRoKCksXG5cdFx0XHRvdXRlckhlaWdodCA9IGVsZW1lbnQub3V0ZXJIZWlnaHQoKSxcblx0XHRcdGNsaXBSZWdleCA9IC9ecmVjdFxcKCgtP1xcZCpcXC4/XFxkKnB4fC0/XFxkKyV8YXV0byksP1xccyooLT9cXGQqXFwuP1xcZCpweHwtP1xcZCslfGF1dG8pLD9cXHMqKC0/XFxkKlxcLj9cXGQqcHh8LT9cXGQrJXxhdXRvKSw/XFxzKigtP1xcZCpcXC4/XFxkKnB4fC0/XFxkKyV8YXV0bylcXCkkLyxcblx0XHRcdHZhbHVlcyA9IGNsaXBSZWdleC5leGVjKCBzdHIgKSB8fCBbIFwiXCIsIDAsIG91dGVyV2lkdGgsIG91dGVySGVpZ2h0LCAwIF07XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBwYXJzZUZsb2F0KCB2YWx1ZXNbIDEgXSApIHx8IDAsXG5cdFx0XHRyaWdodDogdmFsdWVzWyAyIF0gPT09IFwiYXV0b1wiID8gb3V0ZXJXaWR0aCA6IHBhcnNlRmxvYXQoIHZhbHVlc1sgMiBdICksXG5cdFx0XHRib3R0b206IHZhbHVlc1sgMyBdID09PSBcImF1dG9cIiA/IG91dGVySGVpZ2h0IDogcGFyc2VGbG9hdCggdmFsdWVzWyAzIF0gKSxcblx0XHRcdGxlZnQ6IHBhcnNlRmxvYXQoIHZhbHVlc1sgNCBdICkgfHwgMFxuXHRcdH07XG59XG5cbiQuZnguc3RlcC5jbGlwID0gZnVuY3Rpb24oIGZ4ICkge1xuXHRpZiAoICFmeC5jbGlwSW5pdCApIHtcblx0XHRmeC5zdGFydCA9ICQoIGZ4LmVsZW0gKS5jc3NDbGlwKCk7XG5cdFx0aWYgKCB0eXBlb2YgZnguZW5kID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZnguZW5kID0gcGFyc2VDbGlwKCBmeC5lbmQsIGZ4LmVsZW0gKTtcblx0XHR9XG5cdFx0ZnguY2xpcEluaXQgPSB0cnVlO1xuXHR9XG5cblx0JCggZnguZWxlbSApLmNzc0NsaXAoIHtcblx0XHR0b3A6IGZ4LnBvcyAqICggZnguZW5kLnRvcCAtIGZ4LnN0YXJ0LnRvcCApICsgZnguc3RhcnQudG9wLFxuXHRcdHJpZ2h0OiBmeC5wb3MgKiAoIGZ4LmVuZC5yaWdodCAtIGZ4LnN0YXJ0LnJpZ2h0ICkgKyBmeC5zdGFydC5yaWdodCxcblx0XHRib3R0b206IGZ4LnBvcyAqICggZnguZW5kLmJvdHRvbSAtIGZ4LnN0YXJ0LmJvdHRvbSApICsgZnguc3RhcnQuYm90dG9tLFxuXHRcdGxlZnQ6IGZ4LnBvcyAqICggZnguZW5kLmxlZnQgLSBmeC5zdGFydC5sZWZ0ICkgKyBmeC5zdGFydC5sZWZ0XG5cdH0gKTtcbn07XG5cbn0gKSgpO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEVBU0lORyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiggZnVuY3Rpb24oKSB7XG5cbi8vIEJhc2VkIG9uIGVhc2luZyBlcXVhdGlvbnMgZnJvbSBSb2JlcnQgUGVubmVyIChodHRwOi8vd3d3LnJvYmVydHBlbm5lci5jb20vZWFzaW5nKVxuXG52YXIgYmFzZUVhc2luZ3MgPSB7fTtcblxuJC5lYWNoKCBbIFwiUXVhZFwiLCBcIkN1YmljXCIsIFwiUXVhcnRcIiwgXCJRdWludFwiLCBcIkV4cG9cIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcblx0YmFzZUVhc2luZ3NbIG5hbWUgXSA9IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiBNYXRoLnBvdyggcCwgaSArIDIgKTtcblx0fTtcbn0gKTtcblxuJC5leHRlbmQoIGJhc2VFYXNpbmdzLCB7XG5cdFNpbmU6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiAxIC0gTWF0aC5jb3MoIHAgKiBNYXRoLlBJIC8gMiApO1xuXHR9LFxuXHRDaXJjOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gMSAtIE1hdGguc3FydCggMSAtIHAgKiBwICk7XG5cdH0sXG5cdEVsYXN0aWM6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiBwID09PSAwIHx8IHAgPT09IDEgPyBwIDpcblx0XHRcdC1NYXRoLnBvdyggMiwgOCAqICggcCAtIDEgKSApICogTWF0aC5zaW4oICggKCBwIC0gMSApICogODAgLSA3LjUgKSAqIE1hdGguUEkgLyAxNSApO1xuXHR9LFxuXHRCYWNrOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gcCAqIHAgKiAoIDMgKiBwIC0gMiApO1xuXHR9LFxuXHRCb3VuY2U6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHZhciBwb3cyLFxuXHRcdFx0Ym91bmNlID0gNDtcblxuXHRcdHdoaWxlICggcCA8ICggKCBwb3cyID0gTWF0aC5wb3coIDIsIC0tYm91bmNlICkgKSAtIDEgKSAvIDExICkge31cblx0XHRyZXR1cm4gMSAvIE1hdGgucG93KCA0LCAzIC0gYm91bmNlICkgLSA3LjU2MjUgKiBNYXRoLnBvdyggKCBwb3cyICogMyAtIDIgKSAvIDIyIC0gcCwgMiApO1xuXHR9XG59ICk7XG5cbiQuZWFjaCggYmFzZUVhc2luZ3MsIGZ1bmN0aW9uKCBuYW1lLCBlYXNlSW4gKSB7XG5cdCQuZWFzaW5nWyBcImVhc2VJblwiICsgbmFtZSBdID0gZWFzZUluO1xuXHQkLmVhc2luZ1sgXCJlYXNlT3V0XCIgKyBuYW1lIF0gPSBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gMSAtIGVhc2VJbiggMSAtIHAgKTtcblx0fTtcblx0JC5lYXNpbmdbIFwiZWFzZUluT3V0XCIgKyBuYW1lIF0gPSBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gcCA8IDAuNSA/XG5cdFx0XHRlYXNlSW4oIHAgKiAyICkgLyAyIDpcblx0XHRcdDEgLSBlYXNlSW4oIHAgKiAtMiArIDIgKSAvIDI7XG5cdH07XG59ICk7XG5cbn0gKSgpO1xuXG52YXIgZWZmZWN0ID0gJC5lZmZlY3RzO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIEVmZmVjdHMgQmxpbmQgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IEJsaW5kIEVmZmVjdFxuLy8+Pmdyb3VwOiBFZmZlY3RzXG4vLz4+ZGVzY3JpcHRpb246IEJsaW5kcyB0aGUgZWxlbWVudC5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9ibGluZC1lZmZlY3QvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vZWZmZWN0L1xuXG5cblxudmFyIGVmZmVjdHNFZmZlY3RCbGluZCA9ICQuZWZmZWN0cy5kZWZpbmUoIFwiYmxpbmRcIiwgXCJoaWRlXCIsIGZ1bmN0aW9uKCBvcHRpb25zLCBkb25lICkge1xuXHR2YXIgbWFwID0ge1xuXHRcdFx0dXA6IFsgXCJib3R0b21cIiwgXCJ0b3BcIiBdLFxuXHRcdFx0dmVydGljYWw6IFsgXCJib3R0b21cIiwgXCJ0b3BcIiBdLFxuXHRcdFx0ZG93bjogWyBcInRvcFwiLCBcImJvdHRvbVwiIF0sXG5cdFx0XHRsZWZ0OiBbIFwicmlnaHRcIiwgXCJsZWZ0XCIgXSxcblx0XHRcdGhvcml6b250YWw6IFsgXCJyaWdodFwiLCBcImxlZnRcIiBdLFxuXHRcdFx0cmlnaHQ6IFsgXCJsZWZ0XCIsIFwicmlnaHRcIiBdXG5cdFx0fSxcblx0XHRlbGVtZW50ID0gJCggdGhpcyApLFxuXHRcdGRpcmVjdGlvbiA9IG9wdGlvbnMuZGlyZWN0aW9uIHx8IFwidXBcIixcblx0XHRzdGFydCA9IGVsZW1lbnQuY3NzQ2xpcCgpLFxuXHRcdGFuaW1hdGUgPSB7IGNsaXA6ICQuZXh0ZW5kKCB7fSwgc3RhcnQgKSB9LFxuXHRcdHBsYWNlaG9sZGVyID0gJC5lZmZlY3RzLmNyZWF0ZVBsYWNlaG9sZGVyKCBlbGVtZW50ICk7XG5cblx0YW5pbWF0ZS5jbGlwWyBtYXBbIGRpcmVjdGlvbiBdWyAwIF0gXSA9IGFuaW1hdGUuY2xpcFsgbWFwWyBkaXJlY3Rpb24gXVsgMSBdIF07XG5cblx0aWYgKCBvcHRpb25zLm1vZGUgPT09IFwic2hvd1wiICkge1xuXHRcdGVsZW1lbnQuY3NzQ2xpcCggYW5pbWF0ZS5jbGlwICk7XG5cdFx0aWYgKCBwbGFjZWhvbGRlciApIHtcblx0XHRcdHBsYWNlaG9sZGVyLmNzcyggJC5lZmZlY3RzLmNsaXBUb0JveCggYW5pbWF0ZSApICk7XG5cdFx0fVxuXG5cdFx0YW5pbWF0ZS5jbGlwID0gc3RhcnQ7XG5cdH1cblxuXHRpZiAoIHBsYWNlaG9sZGVyICkge1xuXHRcdHBsYWNlaG9sZGVyLmFuaW1hdGUoICQuZWZmZWN0cy5jbGlwVG9Cb3goIGFuaW1hdGUgKSwgb3B0aW9ucy5kdXJhdGlvbiwgb3B0aW9ucy5lYXNpbmcgKTtcblx0fVxuXG5cdGVsZW1lbnQuYW5pbWF0ZSggYW5pbWF0ZSwge1xuXHRcdHF1ZXVlOiBmYWxzZSxcblx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRlYXNpbmc6IG9wdGlvbnMuZWFzaW5nLFxuXHRcdGNvbXBsZXRlOiBkb25lXG5cdH0gKTtcbn0gKTtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBFZmZlY3RzIEJvdW5jZSAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogQm91bmNlIEVmZmVjdFxuLy8+Pmdyb3VwOiBFZmZlY3RzXG4vLz4+ZGVzY3JpcHRpb246IEJvdW5jZXMgYW4gZWxlbWVudCBob3Jpem9udGFsbHkgb3IgdmVydGljYWxseSBuIHRpbWVzLlxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL2JvdW5jZS1lZmZlY3QvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vZWZmZWN0L1xuXG5cblxudmFyIGVmZmVjdHNFZmZlY3RCb3VuY2UgPSAkLmVmZmVjdHMuZGVmaW5lKCBcImJvdW5jZVwiLCBmdW5jdGlvbiggb3B0aW9ucywgZG9uZSApIHtcblx0dmFyIHVwQW5pbSwgZG93bkFuaW0sIHJlZlZhbHVlLFxuXHRcdGVsZW1lbnQgPSAkKCB0aGlzICksXG5cblx0XHQvLyBEZWZhdWx0czpcblx0XHRtb2RlID0gb3B0aW9ucy5tb2RlLFxuXHRcdGhpZGUgPSBtb2RlID09PSBcImhpZGVcIixcblx0XHRzaG93ID0gbW9kZSA9PT0gXCJzaG93XCIsXG5cdFx0ZGlyZWN0aW9uID0gb3B0aW9ucy5kaXJlY3Rpb24gfHwgXCJ1cFwiLFxuXHRcdGRpc3RhbmNlID0gb3B0aW9ucy5kaXN0YW5jZSxcblx0XHR0aW1lcyA9IG9wdGlvbnMudGltZXMgfHwgNSxcblxuXHRcdC8vIE51bWJlciBvZiBpbnRlcm5hbCBhbmltYXRpb25zXG5cdFx0YW5pbXMgPSB0aW1lcyAqIDIgKyAoIHNob3cgfHwgaGlkZSA/IDEgOiAwICksXG5cdFx0c3BlZWQgPSBvcHRpb25zLmR1cmF0aW9uIC8gYW5pbXMsXG5cdFx0ZWFzaW5nID0gb3B0aW9ucy5lYXNpbmcsXG5cblx0XHQvLyBVdGlsaXR5OlxuXHRcdHJlZiA9ICggZGlyZWN0aW9uID09PSBcInVwXCIgfHwgZGlyZWN0aW9uID09PSBcImRvd25cIiApID8gXCJ0b3BcIiA6IFwibGVmdFwiLFxuXHRcdG1vdGlvbiA9ICggZGlyZWN0aW9uID09PSBcInVwXCIgfHwgZGlyZWN0aW9uID09PSBcImxlZnRcIiApLFxuXHRcdGkgPSAwLFxuXG5cdFx0cXVldWVsZW4gPSBlbGVtZW50LnF1ZXVlKCkubGVuZ3RoO1xuXG5cdCQuZWZmZWN0cy5jcmVhdGVQbGFjZWhvbGRlciggZWxlbWVudCApO1xuXG5cdHJlZlZhbHVlID0gZWxlbWVudC5jc3MoIHJlZiApO1xuXG5cdC8vIERlZmF1bHQgZGlzdGFuY2UgZm9yIHRoZSBCSUdHRVNUIGJvdW5jZSBpcyB0aGUgb3V0ZXIgRGlzdGFuY2UgLyAzXG5cdGlmICggIWRpc3RhbmNlICkge1xuXHRcdGRpc3RhbmNlID0gZWxlbWVudFsgcmVmID09PSBcInRvcFwiID8gXCJvdXRlckhlaWdodFwiIDogXCJvdXRlcldpZHRoXCIgXSgpIC8gMztcblx0fVxuXG5cdGlmICggc2hvdyApIHtcblx0XHRkb3duQW5pbSA9IHsgb3BhY2l0eTogMSB9O1xuXHRcdGRvd25BbmltWyByZWYgXSA9IHJlZlZhbHVlO1xuXG5cdFx0Ly8gSWYgd2UgYXJlIHNob3dpbmcsIGZvcmNlIG9wYWNpdHkgMCBhbmQgc2V0IHRoZSBpbml0aWFsIHBvc2l0aW9uXG5cdFx0Ly8gdGhlbiBkbyB0aGUgXCJmaXJzdFwiIGFuaW1hdGlvblxuXHRcdGVsZW1lbnRcblx0XHRcdC5jc3MoIFwib3BhY2l0eVwiLCAwIClcblx0XHRcdC5jc3MoIHJlZiwgbW90aW9uID8gLWRpc3RhbmNlICogMiA6IGRpc3RhbmNlICogMiApXG5cdFx0XHQuYW5pbWF0ZSggZG93bkFuaW0sIHNwZWVkLCBlYXNpbmcgKTtcblx0fVxuXG5cdC8vIFN0YXJ0IGF0IHRoZSBzbWFsbGVzdCBkaXN0YW5jZSBpZiB3ZSBhcmUgaGlkaW5nXG5cdGlmICggaGlkZSApIHtcblx0XHRkaXN0YW5jZSA9IGRpc3RhbmNlIC8gTWF0aC5wb3coIDIsIHRpbWVzIC0gMSApO1xuXHR9XG5cblx0ZG93bkFuaW0gPSB7fTtcblx0ZG93bkFuaW1bIHJlZiBdID0gcmVmVmFsdWU7XG5cblx0Ly8gQm91bmNlcyB1cC9kb3duL2xlZnQvcmlnaHQgdGhlbiBiYWNrIHRvIDAgLS0gdGltZXMgKiAyIGFuaW1hdGlvbnMgaGFwcGVuIGhlcmVcblx0Zm9yICggOyBpIDwgdGltZXM7IGkrKyApIHtcblx0XHR1cEFuaW0gPSB7fTtcblx0XHR1cEFuaW1bIHJlZiBdID0gKCBtb3Rpb24gPyBcIi09XCIgOiBcIis9XCIgKSArIGRpc3RhbmNlO1xuXG5cdFx0ZWxlbWVudFxuXHRcdFx0LmFuaW1hdGUoIHVwQW5pbSwgc3BlZWQsIGVhc2luZyApXG5cdFx0XHQuYW5pbWF0ZSggZG93bkFuaW0sIHNwZWVkLCBlYXNpbmcgKTtcblxuXHRcdGRpc3RhbmNlID0gaGlkZSA/IGRpc3RhbmNlICogMiA6IGRpc3RhbmNlIC8gMjtcblx0fVxuXG5cdC8vIExhc3QgQm91bmNlIHdoZW4gSGlkaW5nXG5cdGlmICggaGlkZSApIHtcblx0XHR1cEFuaW0gPSB7IG9wYWNpdHk6IDAgfTtcblx0XHR1cEFuaW1bIHJlZiBdID0gKCBtb3Rpb24gPyBcIi09XCIgOiBcIis9XCIgKSArIGRpc3RhbmNlO1xuXG5cdFx0ZWxlbWVudC5hbmltYXRlKCB1cEFuaW0sIHNwZWVkLCBlYXNpbmcgKTtcblx0fVxuXG5cdGVsZW1lbnQucXVldWUoIGRvbmUgKTtcblxuXHQkLmVmZmVjdHMudW5zaGlmdCggZWxlbWVudCwgcXVldWVsZW4sIGFuaW1zICsgMSApO1xufSApO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIEVmZmVjdHMgQ2xpcCAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogQ2xpcCBFZmZlY3Rcbi8vPj5ncm91cDogRWZmZWN0c1xuLy8+PmRlc2NyaXB0aW9uOiBDbGlwcyB0aGUgZWxlbWVudCBvbiBhbmQgb2ZmIGxpa2UgYW4gb2xkIFRWLlxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL2NsaXAtZWZmZWN0L1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL2VmZmVjdC9cblxuXG5cbnZhciBlZmZlY3RzRWZmZWN0Q2xpcCA9ICQuZWZmZWN0cy5kZWZpbmUoIFwiY2xpcFwiLCBcImhpZGVcIiwgZnVuY3Rpb24oIG9wdGlvbnMsIGRvbmUgKSB7XG5cdHZhciBzdGFydCxcblx0XHRhbmltYXRlID0ge30sXG5cdFx0ZWxlbWVudCA9ICQoIHRoaXMgKSxcblx0XHRkaXJlY3Rpb24gPSBvcHRpb25zLmRpcmVjdGlvbiB8fCBcInZlcnRpY2FsXCIsXG5cdFx0Ym90aCA9IGRpcmVjdGlvbiA9PT0gXCJib3RoXCIsXG5cdFx0aG9yaXpvbnRhbCA9IGJvdGggfHwgZGlyZWN0aW9uID09PSBcImhvcml6b250YWxcIixcblx0XHR2ZXJ0aWNhbCA9IGJvdGggfHwgZGlyZWN0aW9uID09PSBcInZlcnRpY2FsXCI7XG5cblx0c3RhcnQgPSBlbGVtZW50LmNzc0NsaXAoKTtcblx0YW5pbWF0ZS5jbGlwID0ge1xuXHRcdHRvcDogdmVydGljYWwgPyAoIHN0YXJ0LmJvdHRvbSAtIHN0YXJ0LnRvcCApIC8gMiA6IHN0YXJ0LnRvcCxcblx0XHRyaWdodDogaG9yaXpvbnRhbCA/ICggc3RhcnQucmlnaHQgLSBzdGFydC5sZWZ0ICkgLyAyIDogc3RhcnQucmlnaHQsXG5cdFx0Ym90dG9tOiB2ZXJ0aWNhbCA/ICggc3RhcnQuYm90dG9tIC0gc3RhcnQudG9wICkgLyAyIDogc3RhcnQuYm90dG9tLFxuXHRcdGxlZnQ6IGhvcml6b250YWwgPyAoIHN0YXJ0LnJpZ2h0IC0gc3RhcnQubGVmdCApIC8gMiA6IHN0YXJ0LmxlZnRcblx0fTtcblxuXHQkLmVmZmVjdHMuY3JlYXRlUGxhY2Vob2xkZXIoIGVsZW1lbnQgKTtcblxuXHRpZiAoIG9wdGlvbnMubW9kZSA9PT0gXCJzaG93XCIgKSB7XG5cdFx0ZWxlbWVudC5jc3NDbGlwKCBhbmltYXRlLmNsaXAgKTtcblx0XHRhbmltYXRlLmNsaXAgPSBzdGFydDtcblx0fVxuXG5cdGVsZW1lbnQuYW5pbWF0ZSggYW5pbWF0ZSwge1xuXHRcdHF1ZXVlOiBmYWxzZSxcblx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRlYXNpbmc6IG9wdGlvbnMuZWFzaW5nLFxuXHRcdGNvbXBsZXRlOiBkb25lXG5cdH0gKTtcblxufSApO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIEVmZmVjdHMgRHJvcCAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogRHJvcCBFZmZlY3Rcbi8vPj5ncm91cDogRWZmZWN0c1xuLy8+PmRlc2NyaXB0aW9uOiBNb3ZlcyBhbiBlbGVtZW50IGluIG9uZSBkaXJlY3Rpb24gYW5kIGhpZGVzIGl0IGF0IHRoZSBzYW1lIHRpbWUuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vZHJvcC1lZmZlY3QvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vZWZmZWN0L1xuXG5cblxudmFyIGVmZmVjdHNFZmZlY3REcm9wID0gJC5lZmZlY3RzLmRlZmluZSggXCJkcm9wXCIsIFwiaGlkZVwiLCBmdW5jdGlvbiggb3B0aW9ucywgZG9uZSApIHtcblxuXHR2YXIgZGlzdGFuY2UsXG5cdFx0ZWxlbWVudCA9ICQoIHRoaXMgKSxcblx0XHRtb2RlID0gb3B0aW9ucy5tb2RlLFxuXHRcdHNob3cgPSBtb2RlID09PSBcInNob3dcIixcblx0XHRkaXJlY3Rpb24gPSBvcHRpb25zLmRpcmVjdGlvbiB8fCBcImxlZnRcIixcblx0XHRyZWYgPSAoIGRpcmVjdGlvbiA9PT0gXCJ1cFwiIHx8IGRpcmVjdGlvbiA9PT0gXCJkb3duXCIgKSA/IFwidG9wXCIgOiBcImxlZnRcIixcblx0XHRtb3Rpb24gPSAoIGRpcmVjdGlvbiA9PT0gXCJ1cFwiIHx8IGRpcmVjdGlvbiA9PT0gXCJsZWZ0XCIgKSA/IFwiLT1cIiA6IFwiKz1cIixcblx0XHRvcHBvc2l0ZU1vdGlvbiA9ICggbW90aW9uID09PSBcIis9XCIgKSA/IFwiLT1cIiA6IFwiKz1cIixcblx0XHRhbmltYXRpb24gPSB7XG5cdFx0XHRvcGFjaXR5OiAwXG5cdFx0fTtcblxuXHQkLmVmZmVjdHMuY3JlYXRlUGxhY2Vob2xkZXIoIGVsZW1lbnQgKTtcblxuXHRkaXN0YW5jZSA9IG9wdGlvbnMuZGlzdGFuY2UgfHxcblx0XHRlbGVtZW50WyByZWYgPT09IFwidG9wXCIgPyBcIm91dGVySGVpZ2h0XCIgOiBcIm91dGVyV2lkdGhcIiBdKCB0cnVlICkgLyAyO1xuXG5cdGFuaW1hdGlvblsgcmVmIF0gPSBtb3Rpb24gKyBkaXN0YW5jZTtcblxuXHRpZiAoIHNob3cgKSB7XG5cdFx0ZWxlbWVudC5jc3MoIGFuaW1hdGlvbiApO1xuXG5cdFx0YW5pbWF0aW9uWyByZWYgXSA9IG9wcG9zaXRlTW90aW9uICsgZGlzdGFuY2U7XG5cdFx0YW5pbWF0aW9uLm9wYWNpdHkgPSAxO1xuXHR9XG5cblx0Ly8gQW5pbWF0ZVxuXHRlbGVtZW50LmFuaW1hdGUoIGFuaW1hdGlvbiwge1xuXHRcdHF1ZXVlOiBmYWxzZSxcblx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRlYXNpbmc6IG9wdGlvbnMuZWFzaW5nLFxuXHRcdGNvbXBsZXRlOiBkb25lXG5cdH0gKTtcbn0gKTtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBFZmZlY3RzIEV4cGxvZGUgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IEV4cGxvZGUgRWZmZWN0XG4vLz4+Z3JvdXA6IEVmZmVjdHNcbi8vIGpzY3M6ZGlzYWJsZSBtYXhpbXVtTGluZUxlbmd0aFxuLy8+PmRlc2NyaXB0aW9uOiBFeHBsb2RlcyBhbiBlbGVtZW50IGluIGFsbCBkaXJlY3Rpb25zIGludG8gbiBwaWVjZXMuIEltcGxvZGVzIGFuIGVsZW1lbnQgdG8gaXRzIG9yaWdpbmFsIHdob2xlbmVzcy5cbi8vIGpzY3M6ZW5hYmxlIG1heGltdW1MaW5lTGVuZ3RoXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vZXhwbG9kZS1lZmZlY3QvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vZWZmZWN0L1xuXG5cblxudmFyIGVmZmVjdHNFZmZlY3RFeHBsb2RlID0gJC5lZmZlY3RzLmRlZmluZSggXCJleHBsb2RlXCIsIFwiaGlkZVwiLCBmdW5jdGlvbiggb3B0aW9ucywgZG9uZSApIHtcblxuXHR2YXIgaSwgaiwgbGVmdCwgdG9wLCBteCwgbXksXG5cdFx0cm93cyA9IG9wdGlvbnMucGllY2VzID8gTWF0aC5yb3VuZCggTWF0aC5zcXJ0KCBvcHRpb25zLnBpZWNlcyApICkgOiAzLFxuXHRcdGNlbGxzID0gcm93cyxcblx0XHRlbGVtZW50ID0gJCggdGhpcyApLFxuXHRcdG1vZGUgPSBvcHRpb25zLm1vZGUsXG5cdFx0c2hvdyA9IG1vZGUgPT09IFwic2hvd1wiLFxuXG5cdFx0Ly8gU2hvdyBhbmQgdGhlbiB2aXNpYmlsaXR5OmhpZGRlbiB0aGUgZWxlbWVudCBiZWZvcmUgY2FsY3VsYXRpbmcgb2Zmc2V0XG5cdFx0b2Zmc2V0ID0gZWxlbWVudC5zaG93KCkuY3NzKCBcInZpc2liaWxpdHlcIiwgXCJoaWRkZW5cIiApLm9mZnNldCgpLFxuXG5cdFx0Ly8gV2lkdGggYW5kIGhlaWdodCBvZiBhIHBpZWNlXG5cdFx0d2lkdGggPSBNYXRoLmNlaWwoIGVsZW1lbnQub3V0ZXJXaWR0aCgpIC8gY2VsbHMgKSxcblx0XHRoZWlnaHQgPSBNYXRoLmNlaWwoIGVsZW1lbnQub3V0ZXJIZWlnaHQoKSAvIHJvd3MgKSxcblx0XHRwaWVjZXMgPSBbXTtcblxuXHQvLyBDaGlsZHJlbiBhbmltYXRlIGNvbXBsZXRlOlxuXHRmdW5jdGlvbiBjaGlsZENvbXBsZXRlKCkge1xuXHRcdHBpZWNlcy5wdXNoKCB0aGlzICk7XG5cdFx0aWYgKCBwaWVjZXMubGVuZ3RoID09PSByb3dzICogY2VsbHMgKSB7XG5cdFx0XHRhbmltQ29tcGxldGUoKTtcblx0XHR9XG5cdH1cblxuXHQvLyBDbG9uZSB0aGUgZWxlbWVudCBmb3IgZWFjaCByb3cgYW5kIGNlbGwuXG5cdGZvciAoIGkgPSAwOyBpIDwgcm93czsgaSsrICkgeyAvLyA9PT0+XG5cdFx0dG9wID0gb2Zmc2V0LnRvcCArIGkgKiBoZWlnaHQ7XG5cdFx0bXkgPSBpIC0gKCByb3dzIC0gMSApIC8gMjtcblxuXHRcdGZvciAoIGogPSAwOyBqIDwgY2VsbHM7IGorKyApIHsgLy8gfHx8XG5cdFx0XHRsZWZ0ID0gb2Zmc2V0LmxlZnQgKyBqICogd2lkdGg7XG5cdFx0XHRteCA9IGogLSAoIGNlbGxzIC0gMSApIC8gMjtcblxuXHRcdFx0Ly8gQ3JlYXRlIGEgY2xvbmUgb2YgdGhlIG5vdyBoaWRkZW4gbWFpbiBlbGVtZW50IHRoYXQgd2lsbCBiZSBhYnNvbHV0ZSBwb3NpdGlvbmVkXG5cdFx0XHQvLyB3aXRoaW4gYSB3cmFwcGVyIGRpdiBvZmYgdGhlIC1sZWZ0IGFuZCAtdG9wIGVxdWFsIHRvIHNpemUgb2Ygb3VyIHBpZWNlc1xuXHRcdFx0ZWxlbWVudFxuXHRcdFx0XHQuY2xvbmUoKVxuXHRcdFx0XHQuYXBwZW5kVG8oIFwiYm9keVwiIClcblx0XHRcdFx0LndyYXAoIFwiPGRpdj48L2Rpdj5cIiApXG5cdFx0XHRcdC5jc3MoIHtcblx0XHRcdFx0XHRwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuXHRcdFx0XHRcdHZpc2liaWxpdHk6IFwidmlzaWJsZVwiLFxuXHRcdFx0XHRcdGxlZnQ6IC1qICogd2lkdGgsXG5cdFx0XHRcdFx0dG9wOiAtaSAqIGhlaWdodFxuXHRcdFx0XHR9IClcblxuXHRcdFx0XHQvLyBTZWxlY3QgdGhlIHdyYXBwZXIgLSBtYWtlIGl0IG92ZXJmbG93OiBoaWRkZW4gYW5kIGFic29sdXRlIHBvc2l0aW9uZWQgYmFzZWQgb25cblx0XHRcdFx0Ly8gd2hlcmUgdGhlIG9yaWdpbmFsIHdhcyBsb2NhdGVkICtsZWZ0IGFuZCArdG9wIGVxdWFsIHRvIHRoZSBzaXplIG9mIHBpZWNlc1xuXHRcdFx0XHQucGFyZW50KClcblx0XHRcdFx0XHQuYWRkQ2xhc3MoIFwidWktZWZmZWN0cy1leHBsb2RlXCIgKVxuXHRcdFx0XHRcdC5jc3MoIHtcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG5cdFx0XHRcdFx0XHRvdmVyZmxvdzogXCJoaWRkZW5cIixcblx0XHRcdFx0XHRcdHdpZHRoOiB3aWR0aCxcblx0XHRcdFx0XHRcdGhlaWdodDogaGVpZ2h0LFxuXHRcdFx0XHRcdFx0bGVmdDogbGVmdCArICggc2hvdyA/IG14ICogd2lkdGggOiAwICksXG5cdFx0XHRcdFx0XHR0b3A6IHRvcCArICggc2hvdyA/IG15ICogaGVpZ2h0IDogMCApLFxuXHRcdFx0XHRcdFx0b3BhY2l0eTogc2hvdyA/IDAgOiAxXG5cdFx0XHRcdFx0fSApXG5cdFx0XHRcdFx0LmFuaW1hdGUoIHtcblx0XHRcdFx0XHRcdGxlZnQ6IGxlZnQgKyAoIHNob3cgPyAwIDogbXggKiB3aWR0aCApLFxuXHRcdFx0XHRcdFx0dG9wOiB0b3AgKyAoIHNob3cgPyAwIDogbXkgKiBoZWlnaHQgKSxcblx0XHRcdFx0XHRcdG9wYWNpdHk6IHNob3cgPyAxIDogMFxuXHRcdFx0XHRcdH0sIG9wdGlvbnMuZHVyYXRpb24gfHwgNTAwLCBvcHRpb25zLmVhc2luZywgY2hpbGRDb21wbGV0ZSApO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGFuaW1Db21wbGV0ZSgpIHtcblx0XHRlbGVtZW50LmNzcygge1xuXHRcdFx0dmlzaWJpbGl0eTogXCJ2aXNpYmxlXCJcblx0XHR9ICk7XG5cdFx0JCggcGllY2VzICkucmVtb3ZlKCk7XG5cdFx0ZG9uZSgpO1xuXHR9XG59ICk7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgRWZmZWN0cyBGYWRlIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiBGYWRlIEVmZmVjdFxuLy8+Pmdyb3VwOiBFZmZlY3RzXG4vLz4+ZGVzY3JpcHRpb246IEZhZGVzIHRoZSBlbGVtZW50LlxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL2ZhZGUtZWZmZWN0L1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL2VmZmVjdC9cblxuXG5cbnZhciBlZmZlY3RzRWZmZWN0RmFkZSA9ICQuZWZmZWN0cy5kZWZpbmUoIFwiZmFkZVwiLCBcInRvZ2dsZVwiLCBmdW5jdGlvbiggb3B0aW9ucywgZG9uZSApIHtcblx0dmFyIHNob3cgPSBvcHRpb25zLm1vZGUgPT09IFwic2hvd1wiO1xuXG5cdCQoIHRoaXMgKVxuXHRcdC5jc3MoIFwib3BhY2l0eVwiLCBzaG93ID8gMCA6IDEgKVxuXHRcdC5hbmltYXRlKCB7XG5cdFx0XHRvcGFjaXR5OiBzaG93ID8gMSA6IDBcblx0XHR9LCB7XG5cdFx0XHRxdWV1ZTogZmFsc2UsXG5cdFx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRcdGVhc2luZzogb3B0aW9ucy5lYXNpbmcsXG5cdFx0XHRjb21wbGV0ZTogZG9uZVxuXHRcdH0gKTtcbn0gKTtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBFZmZlY3RzIEZvbGQgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IEZvbGQgRWZmZWN0XG4vLz4+Z3JvdXA6IEVmZmVjdHNcbi8vPj5kZXNjcmlwdGlvbjogRm9sZHMgYW4gZWxlbWVudCBmaXJzdCBob3Jpem9udGFsbHkgYW5kIHRoZW4gdmVydGljYWxseS5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9mb2xkLWVmZmVjdC9cbi8vPj5kZW1vczogaHR0cDovL2pxdWVyeXVpLmNvbS9lZmZlY3QvXG5cblxuXG52YXIgZWZmZWN0c0VmZmVjdEZvbGQgPSAkLmVmZmVjdHMuZGVmaW5lKCBcImZvbGRcIiwgXCJoaWRlXCIsIGZ1bmN0aW9uKCBvcHRpb25zLCBkb25lICkge1xuXG5cdC8vIENyZWF0ZSBlbGVtZW50XG5cdHZhciBlbGVtZW50ID0gJCggdGhpcyApLFxuXHRcdG1vZGUgPSBvcHRpb25zLm1vZGUsXG5cdFx0c2hvdyA9IG1vZGUgPT09IFwic2hvd1wiLFxuXHRcdGhpZGUgPSBtb2RlID09PSBcImhpZGVcIixcblx0XHRzaXplID0gb3B0aW9ucy5zaXplIHx8IDE1LFxuXHRcdHBlcmNlbnQgPSAvKFswLTldKyklLy5leGVjKCBzaXplICksXG5cdFx0aG9yaXpGaXJzdCA9ICEhb3B0aW9ucy5ob3JpekZpcnN0LFxuXHRcdHJlZiA9IGhvcml6Rmlyc3QgPyBbIFwicmlnaHRcIiwgXCJib3R0b21cIiBdIDogWyBcImJvdHRvbVwiLCBcInJpZ2h0XCIgXSxcblx0XHRkdXJhdGlvbiA9IG9wdGlvbnMuZHVyYXRpb24gLyAyLFxuXG5cdFx0cGxhY2Vob2xkZXIgPSAkLmVmZmVjdHMuY3JlYXRlUGxhY2Vob2xkZXIoIGVsZW1lbnQgKSxcblxuXHRcdHN0YXJ0ID0gZWxlbWVudC5jc3NDbGlwKCksXG5cdFx0YW5pbWF0aW9uMSA9IHsgY2xpcDogJC5leHRlbmQoIHt9LCBzdGFydCApIH0sXG5cdFx0YW5pbWF0aW9uMiA9IHsgY2xpcDogJC5leHRlbmQoIHt9LCBzdGFydCApIH0sXG5cblx0XHRkaXN0YW5jZSA9IFsgc3RhcnRbIHJlZlsgMCBdIF0sIHN0YXJ0WyByZWZbIDEgXSBdIF0sXG5cblx0XHRxdWV1ZWxlbiA9IGVsZW1lbnQucXVldWUoKS5sZW5ndGg7XG5cblx0aWYgKCBwZXJjZW50ICkge1xuXHRcdHNpemUgPSBwYXJzZUludCggcGVyY2VudFsgMSBdLCAxMCApIC8gMTAwICogZGlzdGFuY2VbIGhpZGUgPyAwIDogMSBdO1xuXHR9XG5cdGFuaW1hdGlvbjEuY2xpcFsgcmVmWyAwIF0gXSA9IHNpemU7XG5cdGFuaW1hdGlvbjIuY2xpcFsgcmVmWyAwIF0gXSA9IHNpemU7XG5cdGFuaW1hdGlvbjIuY2xpcFsgcmVmWyAxIF0gXSA9IDA7XG5cblx0aWYgKCBzaG93ICkge1xuXHRcdGVsZW1lbnQuY3NzQ2xpcCggYW5pbWF0aW9uMi5jbGlwICk7XG5cdFx0aWYgKCBwbGFjZWhvbGRlciApIHtcblx0XHRcdHBsYWNlaG9sZGVyLmNzcyggJC5lZmZlY3RzLmNsaXBUb0JveCggYW5pbWF0aW9uMiApICk7XG5cdFx0fVxuXG5cdFx0YW5pbWF0aW9uMi5jbGlwID0gc3RhcnQ7XG5cdH1cblxuXHQvLyBBbmltYXRlXG5cdGVsZW1lbnRcblx0XHQucXVldWUoIGZ1bmN0aW9uKCBuZXh0ICkge1xuXHRcdFx0aWYgKCBwbGFjZWhvbGRlciApIHtcblx0XHRcdFx0cGxhY2Vob2xkZXJcblx0XHRcdFx0XHQuYW5pbWF0ZSggJC5lZmZlY3RzLmNsaXBUb0JveCggYW5pbWF0aW9uMSApLCBkdXJhdGlvbiwgb3B0aW9ucy5lYXNpbmcgKVxuXHRcdFx0XHRcdC5hbmltYXRlKCAkLmVmZmVjdHMuY2xpcFRvQm94KCBhbmltYXRpb24yICksIGR1cmF0aW9uLCBvcHRpb25zLmVhc2luZyApO1xuXHRcdFx0fVxuXG5cdFx0XHRuZXh0KCk7XG5cdFx0fSApXG5cdFx0LmFuaW1hdGUoIGFuaW1hdGlvbjEsIGR1cmF0aW9uLCBvcHRpb25zLmVhc2luZyApXG5cdFx0LmFuaW1hdGUoIGFuaW1hdGlvbjIsIGR1cmF0aW9uLCBvcHRpb25zLmVhc2luZyApXG5cdFx0LnF1ZXVlKCBkb25lICk7XG5cblx0JC5lZmZlY3RzLnVuc2hpZnQoIGVsZW1lbnQsIHF1ZXVlbGVuLCA0ICk7XG59ICk7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgRWZmZWN0cyBIaWdobGlnaHQgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IEhpZ2hsaWdodCBFZmZlY3Rcbi8vPj5ncm91cDogRWZmZWN0c1xuLy8+PmRlc2NyaXB0aW9uOiBIaWdobGlnaHRzIHRoZSBiYWNrZ3JvdW5kIG9mIGFuIGVsZW1lbnQgaW4gYSBkZWZpbmVkIGNvbG9yIGZvciBhIGN1c3RvbSBkdXJhdGlvbi5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9oaWdobGlnaHQtZWZmZWN0L1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL2VmZmVjdC9cblxuXG5cbnZhciBlZmZlY3RzRWZmZWN0SGlnaGxpZ2h0ID0gJC5lZmZlY3RzLmRlZmluZSggXCJoaWdobGlnaHRcIiwgXCJzaG93XCIsIGZ1bmN0aW9uKCBvcHRpb25zLCBkb25lICkge1xuXHR2YXIgZWxlbWVudCA9ICQoIHRoaXMgKSxcblx0XHRhbmltYXRpb24gPSB7XG5cdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IGVsZW1lbnQuY3NzKCBcImJhY2tncm91bmRDb2xvclwiIClcblx0XHR9O1xuXG5cdGlmICggb3B0aW9ucy5tb2RlID09PSBcImhpZGVcIiApIHtcblx0XHRhbmltYXRpb24ub3BhY2l0eSA9IDA7XG5cdH1cblxuXHQkLmVmZmVjdHMuc2F2ZVN0eWxlKCBlbGVtZW50ICk7XG5cblx0ZWxlbWVudFxuXHRcdC5jc3MoIHtcblx0XHRcdGJhY2tncm91bmRJbWFnZTogXCJub25lXCIsXG5cdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IG9wdGlvbnMuY29sb3IgfHwgXCIjZmZmZjk5XCJcblx0XHR9IClcblx0XHQuYW5pbWF0ZSggYW5pbWF0aW9uLCB7XG5cdFx0XHRxdWV1ZTogZmFsc2UsXG5cdFx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRcdGVhc2luZzogb3B0aW9ucy5lYXNpbmcsXG5cdFx0XHRjb21wbGV0ZTogZG9uZVxuXHRcdH0gKTtcbn0gKTtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBFZmZlY3RzIFNpemUgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IFNpemUgRWZmZWN0XG4vLz4+Z3JvdXA6IEVmZmVjdHNcbi8vPj5kZXNjcmlwdGlvbjogUmVzaXplIGFuIGVsZW1lbnQgdG8gYSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9zaXplLWVmZmVjdC9cbi8vPj5kZW1vczogaHR0cDovL2pxdWVyeXVpLmNvbS9lZmZlY3QvXG5cblxuXG52YXIgZWZmZWN0c0VmZmVjdFNpemUgPSAkLmVmZmVjdHMuZGVmaW5lKCBcInNpemVcIiwgZnVuY3Rpb24oIG9wdGlvbnMsIGRvbmUgKSB7XG5cblx0Ly8gQ3JlYXRlIGVsZW1lbnRcblx0dmFyIGJhc2VsaW5lLCBmYWN0b3IsIHRlbXAsXG5cdFx0ZWxlbWVudCA9ICQoIHRoaXMgKSxcblxuXHRcdC8vIENvcHkgZm9yIGNoaWxkcmVuXG5cdFx0Y1Byb3BzID0gWyBcImZvbnRTaXplXCIgXSxcblx0XHR2UHJvcHMgPSBbIFwiYm9yZGVyVG9wV2lkdGhcIiwgXCJib3JkZXJCb3R0b21XaWR0aFwiLCBcInBhZGRpbmdUb3BcIiwgXCJwYWRkaW5nQm90dG9tXCIgXSxcblx0XHRoUHJvcHMgPSBbIFwiYm9yZGVyTGVmdFdpZHRoXCIsIFwiYm9yZGVyUmlnaHRXaWR0aFwiLCBcInBhZGRpbmdMZWZ0XCIsIFwicGFkZGluZ1JpZ2h0XCIgXSxcblxuXHRcdC8vIFNldCBvcHRpb25zXG5cdFx0bW9kZSA9IG9wdGlvbnMubW9kZSxcblx0XHRyZXN0b3JlID0gbW9kZSAhPT0gXCJlZmZlY3RcIixcblx0XHRzY2FsZSA9IG9wdGlvbnMuc2NhbGUgfHwgXCJib3RoXCIsXG5cdFx0b3JpZ2luID0gb3B0aW9ucy5vcmlnaW4gfHwgWyBcIm1pZGRsZVwiLCBcImNlbnRlclwiIF0sXG5cdFx0cG9zaXRpb24gPSBlbGVtZW50LmNzcyggXCJwb3NpdGlvblwiICksXG5cdFx0cG9zID0gZWxlbWVudC5wb3NpdGlvbigpLFxuXHRcdG9yaWdpbmFsID0gJC5lZmZlY3RzLnNjYWxlZERpbWVuc2lvbnMoIGVsZW1lbnQgKSxcblx0XHRmcm9tID0gb3B0aW9ucy5mcm9tIHx8IG9yaWdpbmFsLFxuXHRcdHRvID0gb3B0aW9ucy50byB8fCAkLmVmZmVjdHMuc2NhbGVkRGltZW5zaW9ucyggZWxlbWVudCwgMCApO1xuXG5cdCQuZWZmZWN0cy5jcmVhdGVQbGFjZWhvbGRlciggZWxlbWVudCApO1xuXG5cdGlmICggbW9kZSA9PT0gXCJzaG93XCIgKSB7XG5cdFx0dGVtcCA9IGZyb207XG5cdFx0ZnJvbSA9IHRvO1xuXHRcdHRvID0gdGVtcDtcblx0fVxuXG5cdC8vIFNldCBzY2FsaW5nIGZhY3RvclxuXHRmYWN0b3IgPSB7XG5cdFx0ZnJvbToge1xuXHRcdFx0eTogZnJvbS5oZWlnaHQgLyBvcmlnaW5hbC5oZWlnaHQsXG5cdFx0XHR4OiBmcm9tLndpZHRoIC8gb3JpZ2luYWwud2lkdGhcblx0XHR9LFxuXHRcdHRvOiB7XG5cdFx0XHR5OiB0by5oZWlnaHQgLyBvcmlnaW5hbC5oZWlnaHQsXG5cdFx0XHR4OiB0by53aWR0aCAvIG9yaWdpbmFsLndpZHRoXG5cdFx0fVxuXHR9O1xuXG5cdC8vIFNjYWxlIHRoZSBjc3MgYm94XG5cdGlmICggc2NhbGUgPT09IFwiYm94XCIgfHwgc2NhbGUgPT09IFwiYm90aFwiICkge1xuXG5cdFx0Ly8gVmVydGljYWwgcHJvcHMgc2NhbGluZ1xuXHRcdGlmICggZmFjdG9yLmZyb20ueSAhPT0gZmFjdG9yLnRvLnkgKSB7XG5cdFx0XHRmcm9tID0gJC5lZmZlY3RzLnNldFRyYW5zaXRpb24oIGVsZW1lbnQsIHZQcm9wcywgZmFjdG9yLmZyb20ueSwgZnJvbSApO1xuXHRcdFx0dG8gPSAkLmVmZmVjdHMuc2V0VHJhbnNpdGlvbiggZWxlbWVudCwgdlByb3BzLCBmYWN0b3IudG8ueSwgdG8gKTtcblx0XHR9XG5cblx0XHQvLyBIb3Jpem9udGFsIHByb3BzIHNjYWxpbmdcblx0XHRpZiAoIGZhY3Rvci5mcm9tLnggIT09IGZhY3Rvci50by54ICkge1xuXHRcdFx0ZnJvbSA9ICQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKCBlbGVtZW50LCBoUHJvcHMsIGZhY3Rvci5mcm9tLngsIGZyb20gKTtcblx0XHRcdHRvID0gJC5lZmZlY3RzLnNldFRyYW5zaXRpb24oIGVsZW1lbnQsIGhQcm9wcywgZmFjdG9yLnRvLngsIHRvICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2NhbGUgdGhlIGNvbnRlbnRcblx0aWYgKCBzY2FsZSA9PT0gXCJjb250ZW50XCIgfHwgc2NhbGUgPT09IFwiYm90aFwiICkge1xuXG5cdFx0Ly8gVmVydGljYWwgcHJvcHMgc2NhbGluZ1xuXHRcdGlmICggZmFjdG9yLmZyb20ueSAhPT0gZmFjdG9yLnRvLnkgKSB7XG5cdFx0XHRmcm9tID0gJC5lZmZlY3RzLnNldFRyYW5zaXRpb24oIGVsZW1lbnQsIGNQcm9wcywgZmFjdG9yLmZyb20ueSwgZnJvbSApO1xuXHRcdFx0dG8gPSAkLmVmZmVjdHMuc2V0VHJhbnNpdGlvbiggZWxlbWVudCwgY1Byb3BzLCBmYWN0b3IudG8ueSwgdG8gKTtcblx0XHR9XG5cdH1cblxuXHQvLyBBZGp1c3QgdGhlIHBvc2l0aW9uIHByb3BlcnRpZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIG9yaWdpbiBwb2ludHNcblx0aWYgKCBvcmlnaW4gKSB7XG5cdFx0YmFzZWxpbmUgPSAkLmVmZmVjdHMuZ2V0QmFzZWxpbmUoIG9yaWdpbiwgb3JpZ2luYWwgKTtcblx0XHRmcm9tLnRvcCA9ICggb3JpZ2luYWwub3V0ZXJIZWlnaHQgLSBmcm9tLm91dGVySGVpZ2h0ICkgKiBiYXNlbGluZS55ICsgcG9zLnRvcDtcblx0XHRmcm9tLmxlZnQgPSAoIG9yaWdpbmFsLm91dGVyV2lkdGggLSBmcm9tLm91dGVyV2lkdGggKSAqIGJhc2VsaW5lLnggKyBwb3MubGVmdDtcblx0XHR0by50b3AgPSAoIG9yaWdpbmFsLm91dGVySGVpZ2h0IC0gdG8ub3V0ZXJIZWlnaHQgKSAqIGJhc2VsaW5lLnkgKyBwb3MudG9wO1xuXHRcdHRvLmxlZnQgPSAoIG9yaWdpbmFsLm91dGVyV2lkdGggLSB0by5vdXRlcldpZHRoICkgKiBiYXNlbGluZS54ICsgcG9zLmxlZnQ7XG5cdH1cblx0ZWxlbWVudC5jc3MoIGZyb20gKTtcblxuXHQvLyBBbmltYXRlIHRoZSBjaGlsZHJlbiBpZiBkZXNpcmVkXG5cdGlmICggc2NhbGUgPT09IFwiY29udGVudFwiIHx8IHNjYWxlID09PSBcImJvdGhcIiApIHtcblxuXHRcdHZQcm9wcyA9IHZQcm9wcy5jb25jYXQoIFsgXCJtYXJnaW5Ub3BcIiwgXCJtYXJnaW5Cb3R0b21cIiBdICkuY29uY2F0KCBjUHJvcHMgKTtcblx0XHRoUHJvcHMgPSBoUHJvcHMuY29uY2F0KCBbIFwibWFyZ2luTGVmdFwiLCBcIm1hcmdpblJpZ2h0XCIgXSApO1xuXG5cdFx0Ly8gT25seSBhbmltYXRlIGNoaWxkcmVuIHdpdGggd2lkdGggYXR0cmlidXRlcyBzcGVjaWZpZWRcblx0XHQvLyBUT0RPOiBpcyB0aGlzIHJpZ2h0PyBzaG91bGQgd2UgaW5jbHVkZSBhbnl0aGluZyB3aXRoIGNzcyB3aWR0aCBzcGVjaWZpZWQgYXMgd2VsbFxuXHRcdGVsZW1lbnQuZmluZCggXCIqW3dpZHRoXVwiICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgY2hpbGQgPSAkKCB0aGlzICksXG5cdFx0XHRcdGNoaWxkT3JpZ2luYWwgPSAkLmVmZmVjdHMuc2NhbGVkRGltZW5zaW9ucyggY2hpbGQgKSxcblx0XHRcdFx0Y2hpbGRGcm9tID0ge1xuXHRcdFx0XHRcdGhlaWdodDogY2hpbGRPcmlnaW5hbC5oZWlnaHQgKiBmYWN0b3IuZnJvbS55LFxuXHRcdFx0XHRcdHdpZHRoOiBjaGlsZE9yaWdpbmFsLndpZHRoICogZmFjdG9yLmZyb20ueCxcblx0XHRcdFx0XHRvdXRlckhlaWdodDogY2hpbGRPcmlnaW5hbC5vdXRlckhlaWdodCAqIGZhY3Rvci5mcm9tLnksXG5cdFx0XHRcdFx0b3V0ZXJXaWR0aDogY2hpbGRPcmlnaW5hbC5vdXRlcldpZHRoICogZmFjdG9yLmZyb20ueFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaGlsZFRvID0ge1xuXHRcdFx0XHRcdGhlaWdodDogY2hpbGRPcmlnaW5hbC5oZWlnaHQgKiBmYWN0b3IudG8ueSxcblx0XHRcdFx0XHR3aWR0aDogY2hpbGRPcmlnaW5hbC53aWR0aCAqIGZhY3Rvci50by54LFxuXHRcdFx0XHRcdG91dGVySGVpZ2h0OiBjaGlsZE9yaWdpbmFsLmhlaWdodCAqIGZhY3Rvci50by55LFxuXHRcdFx0XHRcdG91dGVyV2lkdGg6IGNoaWxkT3JpZ2luYWwud2lkdGggKiBmYWN0b3IudG8ueFxuXHRcdFx0XHR9O1xuXG5cdFx0XHQvLyBWZXJ0aWNhbCBwcm9wcyBzY2FsaW5nXG5cdFx0XHRpZiAoIGZhY3Rvci5mcm9tLnkgIT09IGZhY3Rvci50by55ICkge1xuXHRcdFx0XHRjaGlsZEZyb20gPSAkLmVmZmVjdHMuc2V0VHJhbnNpdGlvbiggY2hpbGQsIHZQcm9wcywgZmFjdG9yLmZyb20ueSwgY2hpbGRGcm9tICk7XG5cdFx0XHRcdGNoaWxkVG8gPSAkLmVmZmVjdHMuc2V0VHJhbnNpdGlvbiggY2hpbGQsIHZQcm9wcywgZmFjdG9yLnRvLnksIGNoaWxkVG8gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSG9yaXpvbnRhbCBwcm9wcyBzY2FsaW5nXG5cdFx0XHRpZiAoIGZhY3Rvci5mcm9tLnggIT09IGZhY3Rvci50by54ICkge1xuXHRcdFx0XHRjaGlsZEZyb20gPSAkLmVmZmVjdHMuc2V0VHJhbnNpdGlvbiggY2hpbGQsIGhQcm9wcywgZmFjdG9yLmZyb20ueCwgY2hpbGRGcm9tICk7XG5cdFx0XHRcdGNoaWxkVG8gPSAkLmVmZmVjdHMuc2V0VHJhbnNpdGlvbiggY2hpbGQsIGhQcm9wcywgZmFjdG9yLnRvLngsIGNoaWxkVG8gKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCByZXN0b3JlICkge1xuXHRcdFx0XHQkLmVmZmVjdHMuc2F2ZVN0eWxlKCBjaGlsZCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBbmltYXRlIGNoaWxkcmVuXG5cdFx0XHRjaGlsZC5jc3MoIGNoaWxkRnJvbSApO1xuXHRcdFx0Y2hpbGQuYW5pbWF0ZSggY2hpbGRUbywgb3B0aW9ucy5kdXJhdGlvbiwgb3B0aW9ucy5lYXNpbmcsIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIFJlc3RvcmUgY2hpbGRyZW5cblx0XHRcdFx0aWYgKCByZXN0b3JlICkge1xuXHRcdFx0XHRcdCQuZWZmZWN0cy5yZXN0b3JlU3R5bGUoIGNoaWxkICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBBbmltYXRlXG5cdGVsZW1lbnQuYW5pbWF0ZSggdG8sIHtcblx0XHRxdWV1ZTogZmFsc2UsXG5cdFx0ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXG5cdFx0ZWFzaW5nOiBvcHRpb25zLmVhc2luZyxcblx0XHRjb21wbGV0ZTogZnVuY3Rpb24oKSB7XG5cblx0XHRcdHZhciBvZmZzZXQgPSBlbGVtZW50Lm9mZnNldCgpO1xuXG5cdFx0XHRpZiAoIHRvLm9wYWNpdHkgPT09IDAgKSB7XG5cdFx0XHRcdGVsZW1lbnQuY3NzKCBcIm9wYWNpdHlcIiwgZnJvbS5vcGFjaXR5ICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggIXJlc3RvcmUgKSB7XG5cdFx0XHRcdGVsZW1lbnRcblx0XHRcdFx0XHQuY3NzKCBcInBvc2l0aW9uXCIsIHBvc2l0aW9uID09PSBcInN0YXRpY1wiID8gXCJyZWxhdGl2ZVwiIDogcG9zaXRpb24gKVxuXHRcdFx0XHRcdC5vZmZzZXQoIG9mZnNldCApO1xuXG5cdFx0XHRcdC8vIE5lZWQgdG8gc2F2ZSBzdHlsZSBoZXJlIHNvIHRoYXQgYXV0b21hdGljIHN0eWxlIHJlc3RvcmF0aW9uXG5cdFx0XHRcdC8vIGRvZXNuJ3QgcmVzdG9yZSB0byB0aGUgb3JpZ2luYWwgc3R5bGVzIGZyb20gYmVmb3JlIHRoZSBhbmltYXRpb24uXG5cdFx0XHRcdCQuZWZmZWN0cy5zYXZlU3R5bGUoIGVsZW1lbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0ZG9uZSgpO1xuXHRcdH1cblx0fSApO1xuXG59ICk7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgRWZmZWN0cyBTY2FsZSAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogU2NhbGUgRWZmZWN0XG4vLz4+Z3JvdXA6IEVmZmVjdHNcbi8vPj5kZXNjcmlwdGlvbjogR3Jvd3Mgb3Igc2hyaW5rcyBhbiBlbGVtZW50IGFuZCBpdHMgY29udGVudC5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9zY2FsZS1lZmZlY3QvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vZWZmZWN0L1xuXG5cblxudmFyIGVmZmVjdHNFZmZlY3RTY2FsZSA9ICQuZWZmZWN0cy5kZWZpbmUoIFwic2NhbGVcIiwgZnVuY3Rpb24oIG9wdGlvbnMsIGRvbmUgKSB7XG5cblx0Ly8gQ3JlYXRlIGVsZW1lbnRcblx0dmFyIGVsID0gJCggdGhpcyApLFxuXHRcdG1vZGUgPSBvcHRpb25zLm1vZGUsXG5cdFx0cGVyY2VudCA9IHBhcnNlSW50KCBvcHRpb25zLnBlcmNlbnQsIDEwICkgfHxcblx0XHRcdCggcGFyc2VJbnQoIG9wdGlvbnMucGVyY2VudCwgMTAgKSA9PT0gMCA/IDAgOiAoIG1vZGUgIT09IFwiZWZmZWN0XCIgPyAwIDogMTAwICkgKSxcblxuXHRcdG5ld09wdGlvbnMgPSAkLmV4dGVuZCggdHJ1ZSwge1xuXHRcdFx0ZnJvbTogJC5lZmZlY3RzLnNjYWxlZERpbWVuc2lvbnMoIGVsICksXG5cdFx0XHR0bzogJC5lZmZlY3RzLnNjYWxlZERpbWVuc2lvbnMoIGVsLCBwZXJjZW50LCBvcHRpb25zLmRpcmVjdGlvbiB8fCBcImJvdGhcIiApLFxuXHRcdFx0b3JpZ2luOiBvcHRpb25zLm9yaWdpbiB8fCBbIFwibWlkZGxlXCIsIFwiY2VudGVyXCIgXVxuXHRcdH0sIG9wdGlvbnMgKTtcblxuXHQvLyBGYWRlIG9wdGlvbiB0byBzdXBwb3J0IHB1ZmZcblx0aWYgKCBvcHRpb25zLmZhZGUgKSB7XG5cdFx0bmV3T3B0aW9ucy5mcm9tLm9wYWNpdHkgPSAxO1xuXHRcdG5ld09wdGlvbnMudG8ub3BhY2l0eSA9IDA7XG5cdH1cblxuXHQkLmVmZmVjdHMuZWZmZWN0LnNpemUuY2FsbCggdGhpcywgbmV3T3B0aW9ucywgZG9uZSApO1xufSApO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIEVmZmVjdHMgUHVmZiAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogUHVmZiBFZmZlY3Rcbi8vPj5ncm91cDogRWZmZWN0c1xuLy8+PmRlc2NyaXB0aW9uOiBDcmVhdGVzIGEgcHVmZiBlZmZlY3QgYnkgc2NhbGluZyB0aGUgZWxlbWVudCB1cCBhbmQgaGlkaW5nIGl0IGF0IHRoZSBzYW1lIHRpbWUuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vcHVmZi1lZmZlY3QvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vZWZmZWN0L1xuXG5cblxudmFyIGVmZmVjdHNFZmZlY3RQdWZmID0gJC5lZmZlY3RzLmRlZmluZSggXCJwdWZmXCIsIFwiaGlkZVwiLCBmdW5jdGlvbiggb3B0aW9ucywgZG9uZSApIHtcblx0dmFyIG5ld09wdGlvbnMgPSAkLmV4dGVuZCggdHJ1ZSwge30sIG9wdGlvbnMsIHtcblx0XHRmYWRlOiB0cnVlLFxuXHRcdHBlcmNlbnQ6IHBhcnNlSW50KCBvcHRpb25zLnBlcmNlbnQsIDEwICkgfHwgMTUwXG5cdH0gKTtcblxuXHQkLmVmZmVjdHMuZWZmZWN0LnNjYWxlLmNhbGwoIHRoaXMsIG5ld09wdGlvbnMsIGRvbmUgKTtcbn0gKTtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBFZmZlY3RzIFB1bHNhdGUgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IFB1bHNhdGUgRWZmZWN0XG4vLz4+Z3JvdXA6IEVmZmVjdHNcbi8vPj5kZXNjcmlwdGlvbjogUHVsc2F0ZXMgYW4gZWxlbWVudCBuIHRpbWVzIGJ5IGNoYW5naW5nIHRoZSBvcGFjaXR5IHRvIHplcm8gYW5kIGJhY2suXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vcHVsc2F0ZS1lZmZlY3QvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vZWZmZWN0L1xuXG5cblxudmFyIGVmZmVjdHNFZmZlY3RQdWxzYXRlID0gJC5lZmZlY3RzLmRlZmluZSggXCJwdWxzYXRlXCIsIFwic2hvd1wiLCBmdW5jdGlvbiggb3B0aW9ucywgZG9uZSApIHtcblx0dmFyIGVsZW1lbnQgPSAkKCB0aGlzICksXG5cdFx0bW9kZSA9IG9wdGlvbnMubW9kZSxcblx0XHRzaG93ID0gbW9kZSA9PT0gXCJzaG93XCIsXG5cdFx0aGlkZSA9IG1vZGUgPT09IFwiaGlkZVwiLFxuXHRcdHNob3doaWRlID0gc2hvdyB8fCBoaWRlLFxuXG5cdFx0Ly8gU2hvd2luZyBvciBoaWRpbmcgbGVhdmVzIG9mZiB0aGUgXCJsYXN0XCIgYW5pbWF0aW9uXG5cdFx0YW5pbXMgPSAoICggb3B0aW9ucy50aW1lcyB8fCA1ICkgKiAyICkgKyAoIHNob3doaWRlID8gMSA6IDAgKSxcblx0XHRkdXJhdGlvbiA9IG9wdGlvbnMuZHVyYXRpb24gLyBhbmltcyxcblx0XHRhbmltYXRlVG8gPSAwLFxuXHRcdGkgPSAxLFxuXHRcdHF1ZXVlbGVuID0gZWxlbWVudC5xdWV1ZSgpLmxlbmd0aDtcblxuXHRpZiAoIHNob3cgfHwgIWVsZW1lbnQuaXMoIFwiOnZpc2libGVcIiApICkge1xuXHRcdGVsZW1lbnQuY3NzKCBcIm9wYWNpdHlcIiwgMCApLnNob3coKTtcblx0XHRhbmltYXRlVG8gPSAxO1xuXHR9XG5cblx0Ly8gQW5pbXMgLSAxIG9wYWNpdHkgXCJ0b2dnbGVzXCJcblx0Zm9yICggOyBpIDwgYW5pbXM7IGkrKyApIHtcblx0XHRlbGVtZW50LmFuaW1hdGUoIHsgb3BhY2l0eTogYW5pbWF0ZVRvIH0sIGR1cmF0aW9uLCBvcHRpb25zLmVhc2luZyApO1xuXHRcdGFuaW1hdGVUbyA9IDEgLSBhbmltYXRlVG87XG5cdH1cblxuXHRlbGVtZW50LmFuaW1hdGUoIHsgb3BhY2l0eTogYW5pbWF0ZVRvIH0sIGR1cmF0aW9uLCBvcHRpb25zLmVhc2luZyApO1xuXG5cdGVsZW1lbnQucXVldWUoIGRvbmUgKTtcblxuXHQkLmVmZmVjdHMudW5zaGlmdCggZWxlbWVudCwgcXVldWVsZW4sIGFuaW1zICsgMSApO1xufSApO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIEVmZmVjdHMgU2hha2UgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IFNoYWtlIEVmZmVjdFxuLy8+Pmdyb3VwOiBFZmZlY3RzXG4vLz4+ZGVzY3JpcHRpb246IFNoYWtlcyBhbiBlbGVtZW50IGhvcml6b250YWxseSBvciB2ZXJ0aWNhbGx5IG4gdGltZXMuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vc2hha2UtZWZmZWN0L1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL2VmZmVjdC9cblxuXG5cbnZhciBlZmZlY3RzRWZmZWN0U2hha2UgPSAkLmVmZmVjdHMuZGVmaW5lKCBcInNoYWtlXCIsIGZ1bmN0aW9uKCBvcHRpb25zLCBkb25lICkge1xuXG5cdHZhciBpID0gMSxcblx0XHRlbGVtZW50ID0gJCggdGhpcyApLFxuXHRcdGRpcmVjdGlvbiA9IG9wdGlvbnMuZGlyZWN0aW9uIHx8IFwibGVmdFwiLFxuXHRcdGRpc3RhbmNlID0gb3B0aW9ucy5kaXN0YW5jZSB8fCAyMCxcblx0XHR0aW1lcyA9IG9wdGlvbnMudGltZXMgfHwgMyxcblx0XHRhbmltcyA9IHRpbWVzICogMiArIDEsXG5cdFx0c3BlZWQgPSBNYXRoLnJvdW5kKCBvcHRpb25zLmR1cmF0aW9uIC8gYW5pbXMgKSxcblx0XHRyZWYgPSAoIGRpcmVjdGlvbiA9PT0gXCJ1cFwiIHx8IGRpcmVjdGlvbiA9PT0gXCJkb3duXCIgKSA/IFwidG9wXCIgOiBcImxlZnRcIixcblx0XHRwb3NpdGl2ZU1vdGlvbiA9ICggZGlyZWN0aW9uID09PSBcInVwXCIgfHwgZGlyZWN0aW9uID09PSBcImxlZnRcIiApLFxuXHRcdGFuaW1hdGlvbiA9IHt9LFxuXHRcdGFuaW1hdGlvbjEgPSB7fSxcblx0XHRhbmltYXRpb24yID0ge30sXG5cblx0XHRxdWV1ZWxlbiA9IGVsZW1lbnQucXVldWUoKS5sZW5ndGg7XG5cblx0JC5lZmZlY3RzLmNyZWF0ZVBsYWNlaG9sZGVyKCBlbGVtZW50ICk7XG5cblx0Ly8gQW5pbWF0aW9uXG5cdGFuaW1hdGlvblsgcmVmIF0gPSAoIHBvc2l0aXZlTW90aW9uID8gXCItPVwiIDogXCIrPVwiICkgKyBkaXN0YW5jZTtcblx0YW5pbWF0aW9uMVsgcmVmIF0gPSAoIHBvc2l0aXZlTW90aW9uID8gXCIrPVwiIDogXCItPVwiICkgKyBkaXN0YW5jZSAqIDI7XG5cdGFuaW1hdGlvbjJbIHJlZiBdID0gKCBwb3NpdGl2ZU1vdGlvbiA/IFwiLT1cIiA6IFwiKz1cIiApICsgZGlzdGFuY2UgKiAyO1xuXG5cdC8vIEFuaW1hdGVcblx0ZWxlbWVudC5hbmltYXRlKCBhbmltYXRpb24sIHNwZWVkLCBvcHRpb25zLmVhc2luZyApO1xuXG5cdC8vIFNoYWtlc1xuXHRmb3IgKCA7IGkgPCB0aW1lczsgaSsrICkge1xuXHRcdGVsZW1lbnRcblx0XHRcdC5hbmltYXRlKCBhbmltYXRpb24xLCBzcGVlZCwgb3B0aW9ucy5lYXNpbmcgKVxuXHRcdFx0LmFuaW1hdGUoIGFuaW1hdGlvbjIsIHNwZWVkLCBvcHRpb25zLmVhc2luZyApO1xuXHR9XG5cblx0ZWxlbWVudFxuXHRcdC5hbmltYXRlKCBhbmltYXRpb24xLCBzcGVlZCwgb3B0aW9ucy5lYXNpbmcgKVxuXHRcdC5hbmltYXRlKCBhbmltYXRpb24sIHNwZWVkIC8gMiwgb3B0aW9ucy5lYXNpbmcgKVxuXHRcdC5xdWV1ZSggZG9uZSApO1xuXG5cdCQuZWZmZWN0cy51bnNoaWZ0KCBlbGVtZW50LCBxdWV1ZWxlbiwgYW5pbXMgKyAxICk7XG59ICk7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgRWZmZWN0cyBTbGlkZSAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogU2xpZGUgRWZmZWN0XG4vLz4+Z3JvdXA6IEVmZmVjdHNcbi8vPj5kZXNjcmlwdGlvbjogU2xpZGVzIGFuIGVsZW1lbnQgaW4gYW5kIG91dCBvZiB0aGUgdmlld3BvcnQuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vc2xpZGUtZWZmZWN0L1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL2VmZmVjdC9cblxuXG5cbnZhciBlZmZlY3RzRWZmZWN0U2xpZGUgPSAkLmVmZmVjdHMuZGVmaW5lKCBcInNsaWRlXCIsIFwic2hvd1wiLCBmdW5jdGlvbiggb3B0aW9ucywgZG9uZSApIHtcblx0dmFyIHN0YXJ0Q2xpcCwgc3RhcnRSZWYsXG5cdFx0ZWxlbWVudCA9ICQoIHRoaXMgKSxcblx0XHRtYXAgPSB7XG5cdFx0XHR1cDogWyBcImJvdHRvbVwiLCBcInRvcFwiIF0sXG5cdFx0XHRkb3duOiBbIFwidG9wXCIsIFwiYm90dG9tXCIgXSxcblx0XHRcdGxlZnQ6IFsgXCJyaWdodFwiLCBcImxlZnRcIiBdLFxuXHRcdFx0cmlnaHQ6IFsgXCJsZWZ0XCIsIFwicmlnaHRcIiBdXG5cdFx0fSxcblx0XHRtb2RlID0gb3B0aW9ucy5tb2RlLFxuXHRcdGRpcmVjdGlvbiA9IG9wdGlvbnMuZGlyZWN0aW9uIHx8IFwibGVmdFwiLFxuXHRcdHJlZiA9ICggZGlyZWN0aW9uID09PSBcInVwXCIgfHwgZGlyZWN0aW9uID09PSBcImRvd25cIiApID8gXCJ0b3BcIiA6IFwibGVmdFwiLFxuXHRcdHBvc2l0aXZlTW90aW9uID0gKCBkaXJlY3Rpb24gPT09IFwidXBcIiB8fCBkaXJlY3Rpb24gPT09IFwibGVmdFwiICksXG5cdFx0ZGlzdGFuY2UgPSBvcHRpb25zLmRpc3RhbmNlIHx8XG5cdFx0XHRlbGVtZW50WyByZWYgPT09IFwidG9wXCIgPyBcIm91dGVySGVpZ2h0XCIgOiBcIm91dGVyV2lkdGhcIiBdKCB0cnVlICksXG5cdFx0YW5pbWF0aW9uID0ge307XG5cblx0JC5lZmZlY3RzLmNyZWF0ZVBsYWNlaG9sZGVyKCBlbGVtZW50ICk7XG5cblx0c3RhcnRDbGlwID0gZWxlbWVudC5jc3NDbGlwKCk7XG5cdHN0YXJ0UmVmID0gZWxlbWVudC5wb3NpdGlvbigpWyByZWYgXTtcblxuXHQvLyBEZWZpbmUgaGlkZSBhbmltYXRpb25cblx0YW5pbWF0aW9uWyByZWYgXSA9ICggcG9zaXRpdmVNb3Rpb24gPyAtMSA6IDEgKSAqIGRpc3RhbmNlICsgc3RhcnRSZWY7XG5cdGFuaW1hdGlvbi5jbGlwID0gZWxlbWVudC5jc3NDbGlwKCk7XG5cdGFuaW1hdGlvbi5jbGlwWyBtYXBbIGRpcmVjdGlvbiBdWyAxIF0gXSA9IGFuaW1hdGlvbi5jbGlwWyBtYXBbIGRpcmVjdGlvbiBdWyAwIF0gXTtcblxuXHQvLyBSZXZlcnNlIHRoZSBhbmltYXRpb24gaWYgd2UncmUgc2hvd2luZ1xuXHRpZiAoIG1vZGUgPT09IFwic2hvd1wiICkge1xuXHRcdGVsZW1lbnQuY3NzQ2xpcCggYW5pbWF0aW9uLmNsaXAgKTtcblx0XHRlbGVtZW50LmNzcyggcmVmLCBhbmltYXRpb25bIHJlZiBdICk7XG5cdFx0YW5pbWF0aW9uLmNsaXAgPSBzdGFydENsaXA7XG5cdFx0YW5pbWF0aW9uWyByZWYgXSA9IHN0YXJ0UmVmO1xuXHR9XG5cblx0Ly8gQWN0dWFsbHkgYW5pbWF0ZVxuXHRlbGVtZW50LmFuaW1hdGUoIGFuaW1hdGlvbiwge1xuXHRcdHF1ZXVlOiBmYWxzZSxcblx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRlYXNpbmc6IG9wdGlvbnMuZWFzaW5nLFxuXHRcdGNvbXBsZXRlOiBkb25lXG5cdH0gKTtcbn0gKTtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBFZmZlY3RzIFRyYW5zZmVyIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiBUcmFuc2ZlciBFZmZlY3Rcbi8vPj5ncm91cDogRWZmZWN0c1xuLy8+PmRlc2NyaXB0aW9uOiBEaXNwbGF5cyBhIHRyYW5zZmVyIGVmZmVjdCBmcm9tIG9uZSBlbGVtZW50IHRvIGFub3RoZXIuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vdHJhbnNmZXItZWZmZWN0L1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL2VmZmVjdC9cblxuXG5cbnZhciBlZmZlY3Q7XG5pZiAoICQudWlCYWNrQ29tcGF0ICE9PSBmYWxzZSApIHtcblx0ZWZmZWN0ID0gJC5lZmZlY3RzLmRlZmluZSggXCJ0cmFuc2ZlclwiLCBmdW5jdGlvbiggb3B0aW9ucywgZG9uZSApIHtcblx0XHQkKCB0aGlzICkudHJhbnNmZXIoIG9wdGlvbnMsIGRvbmUgKTtcblx0fSApO1xufVxudmFyIGVmZmVjdHNFZmZlY3RUcmFuc2ZlciA9IGVmZmVjdDtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBGb2N1c2FibGUgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IDpmb2N1c2FibGUgU2VsZWN0b3Jcbi8vPj5ncm91cDogQ29yZVxuLy8+PmRlc2NyaXB0aW9uOiBTZWxlY3RzIGVsZW1lbnRzIHdoaWNoIGNhbiBiZSBmb2N1c2VkLlxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL2ZvY3VzYWJsZS1zZWxlY3Rvci9cblxuXG5cbi8vIFNlbGVjdG9yc1xuJC51aS5mb2N1c2FibGUgPSBmdW5jdGlvbiggZWxlbWVudCwgaGFzVGFiaW5kZXggKSB7XG5cdHZhciBtYXAsIG1hcE5hbWUsIGltZywgZm9jdXNhYmxlSWZWaXNpYmxlLCBmaWVsZHNldCxcblx0XHRub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHRpZiAoIFwiYXJlYVwiID09PSBub2RlTmFtZSApIHtcblx0XHRtYXAgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0bWFwTmFtZSA9IG1hcC5uYW1lO1xuXHRcdGlmICggIWVsZW1lbnQuaHJlZiB8fCAhbWFwTmFtZSB8fCBtYXAubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJtYXBcIiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aW1nID0gJCggXCJpbWdbdXNlbWFwPScjXCIgKyBtYXBOYW1lICsgXCInXVwiICk7XG5cdFx0cmV0dXJuIGltZy5sZW5ndGggPiAwICYmIGltZy5pcyggXCI6dmlzaWJsZVwiICk7XG5cdH1cblxuXHRpZiAoIC9eKGlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0KSQvLnRlc3QoIG5vZGVOYW1lICkgKSB7XG5cdFx0Zm9jdXNhYmxlSWZWaXNpYmxlID0gIWVsZW1lbnQuZGlzYWJsZWQ7XG5cblx0XHRpZiAoIGZvY3VzYWJsZUlmVmlzaWJsZSApIHtcblxuXHRcdFx0Ly8gRm9ybSBjb250cm9scyB3aXRoaW4gYSBkaXNhYmxlZCBmaWVsZHNldCBhcmUgZGlzYWJsZWQuXG5cdFx0XHQvLyBIb3dldmVyLCBjb250cm9scyB3aXRoaW4gdGhlIGZpZWxkc2V0J3MgbGVnZW5kIGRvIG5vdCBnZXQgZGlzYWJsZWQuXG5cdFx0XHQvLyBTaW5jZSBjb250cm9scyBnZW5lcmFsbHkgYXJlbid0IHBsYWNlZCBpbnNpZGUgbGVnZW5kcywgd2Ugc2tpcFxuXHRcdFx0Ly8gdGhpcyBwb3J0aW9uIG9mIHRoZSBjaGVjay5cblx0XHRcdGZpZWxkc2V0ID0gJCggZWxlbWVudCApLmNsb3Nlc3QoIFwiZmllbGRzZXRcIiApWyAwIF07XG5cdFx0XHRpZiAoIGZpZWxkc2V0ICkge1xuXHRcdFx0XHRmb2N1c2FibGVJZlZpc2libGUgPSAhZmllbGRzZXQuZGlzYWJsZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBcImFcIiA9PT0gbm9kZU5hbWUgKSB7XG5cdFx0Zm9jdXNhYmxlSWZWaXNpYmxlID0gZWxlbWVudC5ocmVmIHx8IGhhc1RhYmluZGV4O1xuXHR9IGVsc2Uge1xuXHRcdGZvY3VzYWJsZUlmVmlzaWJsZSA9IGhhc1RhYmluZGV4O1xuXHR9XG5cblx0cmV0dXJuIGZvY3VzYWJsZUlmVmlzaWJsZSAmJiAkKCBlbGVtZW50ICkuaXMoIFwiOnZpc2libGVcIiApICYmIHZpc2libGUoICQoIGVsZW1lbnQgKSApO1xufTtcblxuLy8gU3VwcG9ydDogSUUgOCBvbmx5XG4vLyBJRSA4IGRvZXNuJ3QgcmVzb2x2ZSBpbmhlcml0IHRvIHZpc2libGUvaGlkZGVuIGZvciBjb21wdXRlZCB2YWx1ZXNcbmZ1bmN0aW9uIHZpc2libGUoIGVsZW1lbnQgKSB7XG5cdHZhciB2aXNpYmlsaXR5ID0gZWxlbWVudC5jc3MoIFwidmlzaWJpbGl0eVwiICk7XG5cdHdoaWxlICggdmlzaWJpbGl0eSA9PT0gXCJpbmhlcml0XCIgKSB7XG5cdFx0ZWxlbWVudCA9IGVsZW1lbnQucGFyZW50KCk7XG5cdFx0dmlzaWJpbGl0eSA9IGVsZW1lbnQuY3NzKCBcInZpc2liaWxpdHlcIiApO1xuXHR9XG5cdHJldHVybiB2aXNpYmlsaXR5ICE9PSBcImhpZGRlblwiO1xufVxuXG4kLmV4dGVuZCggJC5leHByWyBcIjpcIiBdLCB7XG5cdGZvY3VzYWJsZTogZnVuY3Rpb24oIGVsZW1lbnQgKSB7XG5cdFx0cmV0dXJuICQudWkuZm9jdXNhYmxlKCBlbGVtZW50LCAkLmF0dHIoIGVsZW1lbnQsIFwidGFiaW5kZXhcIiApICE9IG51bGwgKTtcblx0fVxufSApO1xuXG52YXIgZm9jdXNhYmxlID0gJC51aS5mb2N1c2FibGU7XG5cblxuXG5cbi8vIFN1cHBvcnQ6IElFOCBPbmx5XG4vLyBJRTggZG9lcyBub3Qgc3VwcG9ydCB0aGUgZm9ybSBhdHRyaWJ1dGUgYW5kIHdoZW4gaXQgaXMgc3VwcGxpZWQuIEl0IG92ZXJ3cml0ZXMgdGhlIGZvcm0gcHJvcFxuLy8gd2l0aCBhIHN0cmluZywgc28gd2UgbmVlZCB0byBmaW5kIHRoZSBwcm9wZXIgZm9ybS5cbnZhciBmb3JtID0gJC5mbi5mb3JtID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0eXBlb2YgdGhpc1sgMCBdLmZvcm0gPT09IFwic3RyaW5nXCIgPyB0aGlzLmNsb3Nlc3QoIFwiZm9ybVwiICkgOiAkKCB0aGlzWyAwIF0uZm9ybSApO1xufTtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBGb3JtIFJlc2V0IE1peGluIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiBGb3JtIFJlc2V0IE1peGluXG4vLz4+Z3JvdXA6IENvcmVcbi8vPj5kZXNjcmlwdGlvbjogUmVmcmVzaCBpbnB1dCB3aWRnZXRzIHdoZW4gdGhlaXIgZm9ybSBpcyByZXNldFxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL2Zvcm0tcmVzZXQtbWl4aW4vXG5cblxuXG52YXIgZm9ybVJlc2V0TWl4aW4gPSAkLnVpLmZvcm1SZXNldE1peGluID0ge1xuXHRfZm9ybVJlc2V0SGFuZGxlcjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGZvcm0gPSAkKCB0aGlzICk7XG5cblx0XHQvLyBXYWl0IGZvciB0aGUgZm9ybSByZXNldCB0byBhY3R1YWxseSBoYXBwZW4gYmVmb3JlIHJlZnJlc2hpbmdcblx0XHRzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpbnN0YW5jZXMgPSBmb3JtLmRhdGEoIFwidWktZm9ybS1yZXNldC1pbnN0YW5jZXNcIiApO1xuXHRcdFx0JC5lYWNoKCBpbnN0YW5jZXMsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aGlzLnJlZnJlc2goKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0X2JpbmRGb3JtUmVzZXRIYW5kbGVyOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmZvcm0gPSB0aGlzLmVsZW1lbnQuZm9ybSgpO1xuXHRcdGlmICggIXRoaXMuZm9ybS5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIGluc3RhbmNlcyA9IHRoaXMuZm9ybS5kYXRhKCBcInVpLWZvcm0tcmVzZXQtaW5zdGFuY2VzXCIgKSB8fCBbXTtcblx0XHRpZiAoICFpbnN0YW5jZXMubGVuZ3RoICkge1xuXG5cdFx0XHQvLyBXZSBkb24ndCB1c2UgX29uKCkgaGVyZSBiZWNhdXNlIHdlIHVzZSBhIHNpbmdsZSBldmVudCBoYW5kbGVyIHBlciBmb3JtXG5cdFx0XHR0aGlzLmZvcm0ub24oIFwicmVzZXQudWktZm9ybS1yZXNldFwiLCB0aGlzLl9mb3JtUmVzZXRIYW5kbGVyICk7XG5cdFx0fVxuXHRcdGluc3RhbmNlcy5wdXNoKCB0aGlzICk7XG5cdFx0dGhpcy5mb3JtLmRhdGEoIFwidWktZm9ybS1yZXNldC1pbnN0YW5jZXNcIiwgaW5zdGFuY2VzICk7XG5cdH0sXG5cblx0X3VuYmluZEZvcm1SZXNldEhhbmRsZXI6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggIXRoaXMuZm9ybS5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIGluc3RhbmNlcyA9IHRoaXMuZm9ybS5kYXRhKCBcInVpLWZvcm0tcmVzZXQtaW5zdGFuY2VzXCIgKTtcblx0XHRpbnN0YW5jZXMuc3BsaWNlKCAkLmluQXJyYXkoIHRoaXMsIGluc3RhbmNlcyApLCAxICk7XG5cdFx0aWYgKCBpbnN0YW5jZXMubGVuZ3RoICkge1xuXHRcdFx0dGhpcy5mb3JtLmRhdGEoIFwidWktZm9ybS1yZXNldC1pbnN0YW5jZXNcIiwgaW5zdGFuY2VzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9ybVxuXHRcdFx0XHQucmVtb3ZlRGF0YSggXCJ1aS1mb3JtLXJlc2V0LWluc3RhbmNlc1wiIClcblx0XHRcdFx0Lm9mZiggXCJyZXNldC51aS1mb3JtLXJlc2V0XCIgKTtcblx0XHR9XG5cdH1cbn07XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgU3VwcG9ydCBmb3IgalF1ZXJ5IGNvcmUgMS43LnggMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqXG4gKi9cblxuLy8+PmxhYmVsOiBqUXVlcnkgMS43IFN1cHBvcnRcbi8vPj5ncm91cDogQ29yZVxuLy8+PmRlc2NyaXB0aW9uOiBTdXBwb3J0IHZlcnNpb24gMS43Lnggb2YgalF1ZXJ5IGNvcmVcblxuXG5cbi8vIFN1cHBvcnQ6IGpRdWVyeSAxLjcgb25seVxuLy8gTm90IGEgZ3JlYXQgd2F5IHRvIGNoZWNrIHZlcnNpb25zLCBidXQgc2luY2Ugd2Ugb25seSBzdXBwb3J0IDEuNysgYW5kIG9ubHlcbi8vIG5lZWQgdG8gZGV0ZWN0IDwxLjgsIHRoaXMgaXMgYSBzaW1wbGUgY2hlY2sgdGhhdCBzaG91bGQgc3VmZmljZS4gQ2hlY2tpbmdcbi8vIGZvciBcIjEuNy5cIiB3b3VsZCBiZSBhIGJpdCBzYWZlciwgYnV0IHRoZSB2ZXJzaW9uIHN0cmluZyBpcyAxLjcsIG5vdCAxLjcuMFxuLy8gYW5kIHdlJ2xsIG5ldmVyIHJlYWNoIDEuNzAuMCAoaWYgd2UgZG8sIHdlIGNlcnRhaW5seSB3b24ndCBiZSBzdXBwb3J0aW5nXG4vLyAxLjcgYW55bW9yZSkuIFNlZSAjMTExOTcgZm9yIHdoeSB3ZSdyZSBub3QgdXNpbmcgZmVhdHVyZSBkZXRlY3Rpb24uXG5pZiAoICQuZm4uanF1ZXJ5LnN1YnN0cmluZyggMCwgMyApID09PSBcIjEuN1wiICkge1xuXG5cdC8vIFNldHRlcnMgZm9yIC5pbm5lcldpZHRoKCksIC5pbm5lckhlaWdodCgpLCAub3V0ZXJXaWR0aCgpLCAub3V0ZXJIZWlnaHQoKVxuXHQvLyBVbmxpa2UgalF1ZXJ5IENvcmUgMS44KywgdGhlc2Ugb25seSBzdXBwb3J0IG51bWVyaWMgdmFsdWVzIHRvIHNldCB0aGVcblx0Ly8gZGltZW5zaW9ucyBpbiBwaXhlbHNcblx0JC5lYWNoKCBbIFwiV2lkdGhcIiwgXCJIZWlnaHRcIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcblx0XHR2YXIgc2lkZSA9IG5hbWUgPT09IFwiV2lkdGhcIiA/IFsgXCJMZWZ0XCIsIFwiUmlnaHRcIiBdIDogWyBcIlRvcFwiLCBcIkJvdHRvbVwiIF0sXG5cdFx0XHR0eXBlID0gbmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0b3JpZyA9IHtcblx0XHRcdFx0aW5uZXJXaWR0aDogJC5mbi5pbm5lcldpZHRoLFxuXHRcdFx0XHRpbm5lckhlaWdodDogJC5mbi5pbm5lckhlaWdodCxcblx0XHRcdFx0b3V0ZXJXaWR0aDogJC5mbi5vdXRlcldpZHRoLFxuXHRcdFx0XHRvdXRlckhlaWdodDogJC5mbi5vdXRlckhlaWdodFxuXHRcdFx0fTtcblxuXHRcdGZ1bmN0aW9uIHJlZHVjZSggZWxlbSwgc2l6ZSwgYm9yZGVyLCBtYXJnaW4gKSB7XG5cdFx0XHQkLmVhY2goIHNpZGUsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzaXplIC09IHBhcnNlRmxvYXQoICQuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIHRoaXMgKSApIHx8IDA7XG5cdFx0XHRcdGlmICggYm9yZGVyICkge1xuXHRcdFx0XHRcdHNpemUgLT0gcGFyc2VGbG9hdCggJC5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyB0aGlzICsgXCJXaWR0aFwiICkgKSB8fCAwO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggbWFyZ2luICkge1xuXHRcdFx0XHRcdHNpemUgLT0gcGFyc2VGbG9hdCggJC5jc3MoIGVsZW0sIFwibWFyZ2luXCIgKyB0aGlzICkgKSB8fCAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0XHRyZXR1cm4gc2l6ZTtcblx0XHR9XG5cblx0XHQkLmZuWyBcImlubmVyXCIgKyBuYW1lIF0gPSBmdW5jdGlvbiggc2l6ZSApIHtcblx0XHRcdGlmICggc2l6ZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gb3JpZ1sgXCJpbm5lclwiICsgbmFtZSBdLmNhbGwoIHRoaXMgKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdCQoIHRoaXMgKS5jc3MoIHR5cGUsIHJlZHVjZSggdGhpcywgc2l6ZSApICsgXCJweFwiICk7XG5cdFx0XHR9ICk7XG5cdFx0fTtcblxuXHRcdCQuZm5bIFwib3V0ZXJcIiArIG5hbWUgXSA9IGZ1bmN0aW9uKCBzaXplLCBtYXJnaW4gKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBzaXplICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHRyZXR1cm4gb3JpZ1sgXCJvdXRlclwiICsgbmFtZSBdLmNhbGwoIHRoaXMsIHNpemUgKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdCQoIHRoaXMgKS5jc3MoIHR5cGUsIHJlZHVjZSggdGhpcywgc2l6ZSwgdHJ1ZSwgbWFyZ2luICkgKyBcInB4XCIgKTtcblx0XHRcdH0gKTtcblx0XHR9O1xuXHR9ICk7XG5cblx0JC5mbi5hZGRCYWNrID0gZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/XG5cdFx0XHR0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApXG5cdFx0KTtcblx0fTtcbn1cblxuO1xuLyohXG4gKiBqUXVlcnkgVUkgS2V5Y29kZSAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogS2V5Y29kZVxuLy8+Pmdyb3VwOiBDb3JlXG4vLz4+ZGVzY3JpcHRpb246IFByb3ZpZGUga2V5Y29kZXMgYXMga2V5bmFtZXNcbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9qUXVlcnkudWkua2V5Q29kZS9cblxuXG52YXIga2V5Y29kZSA9ICQudWkua2V5Q29kZSA9IHtcblx0QkFDS1NQQUNFOiA4LFxuXHRDT01NQTogMTg4LFxuXHRERUxFVEU6IDQ2LFxuXHRET1dOOiA0MCxcblx0RU5EOiAzNSxcblx0RU5URVI6IDEzLFxuXHRFU0NBUEU6IDI3LFxuXHRIT01FOiAzNixcblx0TEVGVDogMzcsXG5cdFBBR0VfRE9XTjogMzQsXG5cdFBBR0VfVVA6IDMzLFxuXHRQRVJJT0Q6IDE5MCxcblx0UklHSFQ6IDM5LFxuXHRTUEFDRTogMzIsXG5cdFRBQjogOSxcblx0VVA6IDM4XG59O1xuXG5cblxuXG4vLyBJbnRlcm5hbCB1c2Ugb25seVxudmFyIGVzY2FwZVNlbGVjdG9yID0gJC51aS5lc2NhcGVTZWxlY3RvciA9ICggZnVuY3Rpb24oKSB7XG5cdHZhciBzZWxlY3RvckVzY2FwZSA9IC8oWyFcIiMkJSYnKCkqKywuLzo7PD0+P0BbXFxdXmB7fH1+XSkvZztcblx0cmV0dXJuIGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gc2VsZWN0b3IucmVwbGFjZSggc2VsZWN0b3JFc2NhcGUsIFwiXFxcXCQxXCIgKTtcblx0fTtcbn0gKSgpO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIExhYmVscyAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogbGFiZWxzXG4vLz4+Z3JvdXA6IENvcmVcbi8vPj5kZXNjcmlwdGlvbjogRmluZCBhbGwgdGhlIGxhYmVscyBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBpbnB1dFxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL2xhYmVscy9cblxuXG5cbnZhciBsYWJlbHMgPSAkLmZuLmxhYmVscyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgYW5jZXN0b3IsIHNlbGVjdG9yLCBpZCwgbGFiZWxzLCBhbmNlc3RvcnM7XG5cblx0Ly8gQ2hlY2sgY29udHJvbC5sYWJlbHMgZmlyc3Rcblx0aWYgKCB0aGlzWyAwIF0ubGFiZWxzICYmIHRoaXNbIDAgXS5sYWJlbHMubGVuZ3RoICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggdGhpc1sgMCBdLmxhYmVscyApO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0gMTEsIEZGIDw9IDM3LCBBbmRyb2lkIDw9IDIuMyBvbmx5XG5cdC8vIEFib3ZlIGJyb3dzZXJzIGRvIG5vdCBzdXBwb3J0IGNvbnRyb2wubGFiZWxzLiBFdmVyeXRoaW5nIGJlbG93IGlzIHRvIHN1cHBvcnQgdGhlbVxuXHQvLyBhcyB3ZWxsIGFzIGRvY3VtZW50IGZyYWdtZW50cy4gY29udHJvbC5sYWJlbHMgZG9lcyBub3Qgd29yayBvbiBkb2N1bWVudCBmcmFnbWVudHNcblx0bGFiZWxzID0gdGhpcy5lcSggMCApLnBhcmVudHMoIFwibGFiZWxcIiApO1xuXG5cdC8vIExvb2sgZm9yIHRoZSBsYWJlbCBiYXNlZCBvbiB0aGUgaWRcblx0aWQgPSB0aGlzLmF0dHIoIFwiaWRcIiApO1xuXHRpZiAoIGlkICkge1xuXG5cdFx0Ly8gV2UgZG9uJ3Qgc2VhcmNoIGFnYWluc3QgdGhlIGRvY3VtZW50IGluIGNhc2UgdGhlIGVsZW1lbnRcblx0XHQvLyBpcyBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgRE9NXG5cdFx0YW5jZXN0b3IgPSB0aGlzLmVxKCAwICkucGFyZW50cygpLmxhc3QoKTtcblxuXHRcdC8vIEdldCBhIGZ1bGwgc2V0IG9mIHRvcCBsZXZlbCBhbmNlc3RvcnNcblx0XHRhbmNlc3RvcnMgPSBhbmNlc3Rvci5hZGQoIGFuY2VzdG9yLmxlbmd0aCA/IGFuY2VzdG9yLnNpYmxpbmdzKCkgOiB0aGlzLnNpYmxpbmdzKCkgKTtcblxuXHRcdC8vIENyZWF0ZSBhIHNlbGVjdG9yIGZvciB0aGUgbGFiZWwgYmFzZWQgb24gdGhlIGlkXG5cdFx0c2VsZWN0b3IgPSBcImxhYmVsW2Zvcj0nXCIgKyAkLnVpLmVzY2FwZVNlbGVjdG9yKCBpZCApICsgXCInXVwiO1xuXG5cdFx0bGFiZWxzID0gbGFiZWxzLmFkZCggYW5jZXN0b3JzLmZpbmQoIHNlbGVjdG9yICkuYWRkQmFjayggc2VsZWN0b3IgKSApO1xuXG5cdH1cblxuXHQvLyBSZXR1cm4gd2hhdGV2ZXIgd2UgaGF2ZSBmb3VuZCBmb3IgbGFiZWxzXG5cdHJldHVybiB0aGlzLnB1c2hTdGFjayggbGFiZWxzICk7XG59O1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIFNjcm9sbCBQYXJlbnQgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IHNjcm9sbFBhcmVudFxuLy8+Pmdyb3VwOiBDb3JlXG4vLz4+ZGVzY3JpcHRpb246IEdldCB0aGUgY2xvc2VzdCBhbmNlc3RvciBlbGVtZW50IHRoYXQgaXMgc2Nyb2xsYWJsZS5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9zY3JvbGxQYXJlbnQvXG5cblxuXG52YXIgc2Nyb2xsUGFyZW50ID0gJC5mbi5zY3JvbGxQYXJlbnQgPSBmdW5jdGlvbiggaW5jbHVkZUhpZGRlbiApIHtcblx0dmFyIHBvc2l0aW9uID0gdGhpcy5jc3MoIFwicG9zaXRpb25cIiApLFxuXHRcdGV4Y2x1ZGVTdGF0aWNQYXJlbnQgPSBwb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiLFxuXHRcdG92ZXJmbG93UmVnZXggPSBpbmNsdWRlSGlkZGVuID8gLyhhdXRvfHNjcm9sbHxoaWRkZW4pLyA6IC8oYXV0b3xzY3JvbGwpLyxcblx0XHRzY3JvbGxQYXJlbnQgPSB0aGlzLnBhcmVudHMoKS5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHBhcmVudCA9ICQoIHRoaXMgKTtcblx0XHRcdGlmICggZXhjbHVkZVN0YXRpY1BhcmVudCAmJiBwYXJlbnQuY3NzKCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG92ZXJmbG93UmVnZXgudGVzdCggcGFyZW50LmNzcyggXCJvdmVyZmxvd1wiICkgKyBwYXJlbnQuY3NzKCBcIm92ZXJmbG93LXlcIiApICtcblx0XHRcdFx0cGFyZW50LmNzcyggXCJvdmVyZmxvdy14XCIgKSApO1xuXHRcdH0gKS5lcSggMCApO1xuXG5cdHJldHVybiBwb3NpdGlvbiA9PT0gXCJmaXhlZFwiIHx8ICFzY3JvbGxQYXJlbnQubGVuZ3RoID9cblx0XHQkKCB0aGlzWyAwIF0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCApIDpcblx0XHRzY3JvbGxQYXJlbnQ7XG59O1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIFRhYmJhYmxlIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiA6dGFiYmFibGUgU2VsZWN0b3Jcbi8vPj5ncm91cDogQ29yZVxuLy8+PmRlc2NyaXB0aW9uOiBTZWxlY3RzIGVsZW1lbnRzIHdoaWNoIGNhbiBiZSB0YWJiZWQgdG8uXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vdGFiYmFibGUtc2VsZWN0b3IvXG5cblxuXG52YXIgdGFiYmFibGUgPSAkLmV4dGVuZCggJC5leHByWyBcIjpcIiBdLCB7XG5cdHRhYmJhYmxlOiBmdW5jdGlvbiggZWxlbWVudCApIHtcblx0XHR2YXIgdGFiSW5kZXggPSAkLmF0dHIoIGVsZW1lbnQsIFwidGFiaW5kZXhcIiApLFxuXHRcdFx0aGFzVGFiaW5kZXggPSB0YWJJbmRleCAhPSBudWxsO1xuXHRcdHJldHVybiAoICFoYXNUYWJpbmRleCB8fCB0YWJJbmRleCA+PSAwICkgJiYgJC51aS5mb2N1c2FibGUoIGVsZW1lbnQsIGhhc1RhYmluZGV4ICk7XG5cdH1cbn0gKTtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBVbmlxdWUgSUQgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IHVuaXF1ZUlkXG4vLz4+Z3JvdXA6IENvcmVcbi8vPj5kZXNjcmlwdGlvbjogRnVuY3Rpb25zIHRvIGdlbmVyYXRlIGFuZCByZW1vdmUgdW5pcXVlSWQnc1xuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL3VuaXF1ZUlkL1xuXG5cblxudmFyIHVuaXF1ZUlkID0gJC5mbi5leHRlbmQoIHtcblx0dW5pcXVlSWQ6ICggZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHV1aWQgPSAwO1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggIXRoaXMuaWQgKSB7XG5cdFx0XHRcdFx0dGhpcy5pZCA9IFwidWktaWQtXCIgKyAoICsrdXVpZCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fTtcblx0fSApKCksXG5cblx0cmVtb3ZlVW5pcXVlSWQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAvXnVpLWlkLVxcZCskLy50ZXN0KCB0aGlzLmlkICkgKSB7XG5cdFx0XHRcdCQoIHRoaXMgKS5yZW1vdmVBdHRyKCBcImlkXCIgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBBY2NvcmRpb24gMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IEFjY29yZGlvblxuLy8+Pmdyb3VwOiBXaWRnZXRzXG4vLyBqc2NzOmRpc2FibGUgbWF4aW11bUxpbmVMZW5ndGhcbi8vPj5kZXNjcmlwdGlvbjogRGlzcGxheXMgY29sbGFwc2libGUgY29udGVudCBwYW5lbHMgZm9yIHByZXNlbnRpbmcgaW5mb3JtYXRpb24gaW4gYSBsaW1pdGVkIGFtb3VudCBvZiBzcGFjZS5cbi8vIGpzY3M6ZW5hYmxlIG1heGltdW1MaW5lTGVuZ3RoXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vYWNjb3JkaW9uL1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL2FjY29yZGlvbi9cbi8vPj5jc3Muc3RydWN0dXJlOiAuLi8uLi90aGVtZXMvYmFzZS9jb3JlLmNzc1xuLy8+PmNzcy5zdHJ1Y3R1cmU6IC4uLy4uL3RoZW1lcy9iYXNlL2FjY29yZGlvbi5jc3Ncbi8vPj5jc3MudGhlbWU6IC4uLy4uL3RoZW1lcy9iYXNlL3RoZW1lLmNzc1xuXG5cblxudmFyIHdpZGdldHNBY2NvcmRpb24gPSAkLndpZGdldCggXCJ1aS5hY2NvcmRpb25cIiwge1xuXHR2ZXJzaW9uOiBcIjEuMTIuMVwiLFxuXHRvcHRpb25zOiB7XG5cdFx0YWN0aXZlOiAwLFxuXHRcdGFuaW1hdGU6IHt9LFxuXHRcdGNsYXNzZXM6IHtcblx0XHRcdFwidWktYWNjb3JkaW9uLWhlYWRlclwiOiBcInVpLWNvcm5lci10b3BcIixcblx0XHRcdFwidWktYWNjb3JkaW9uLWhlYWRlci1jb2xsYXBzZWRcIjogXCJ1aS1jb3JuZXItYWxsXCIsXG5cdFx0XHRcInVpLWFjY29yZGlvbi1jb250ZW50XCI6IFwidWktY29ybmVyLWJvdHRvbVwiXG5cdFx0fSxcblx0XHRjb2xsYXBzaWJsZTogZmFsc2UsXG5cdFx0ZXZlbnQ6IFwiY2xpY2tcIixcblx0XHRoZWFkZXI6IFwiPiBsaSA+IDpmaXJzdC1jaGlsZCwgPiA6bm90KGxpKTpldmVuXCIsXG5cdFx0aGVpZ2h0U3R5bGU6IFwiYXV0b1wiLFxuXHRcdGljb25zOiB7XG5cdFx0XHRhY3RpdmVIZWFkZXI6IFwidWktaWNvbi10cmlhbmdsZS0xLXNcIixcblx0XHRcdGhlYWRlcjogXCJ1aS1pY29uLXRyaWFuZ2xlLTEtZVwiXG5cdFx0fSxcblxuXHRcdC8vIENhbGxiYWNrc1xuXHRcdGFjdGl2YXRlOiBudWxsLFxuXHRcdGJlZm9yZUFjdGl2YXRlOiBudWxsXG5cdH0sXG5cblx0aGlkZVByb3BzOiB7XG5cdFx0Ym9yZGVyVG9wV2lkdGg6IFwiaGlkZVwiLFxuXHRcdGJvcmRlckJvdHRvbVdpZHRoOiBcImhpZGVcIixcblx0XHRwYWRkaW5nVG9wOiBcImhpZGVcIixcblx0XHRwYWRkaW5nQm90dG9tOiBcImhpZGVcIixcblx0XHRoZWlnaHQ6IFwiaGlkZVwiXG5cdH0sXG5cblx0c2hvd1Byb3BzOiB7XG5cdFx0Ym9yZGVyVG9wV2lkdGg6IFwic2hvd1wiLFxuXHRcdGJvcmRlckJvdHRvbVdpZHRoOiBcInNob3dcIixcblx0XHRwYWRkaW5nVG9wOiBcInNob3dcIixcblx0XHRwYWRkaW5nQm90dG9tOiBcInNob3dcIixcblx0XHRoZWlnaHQ6IFwic2hvd1wiXG5cdH0sXG5cblx0X2NyZWF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHR0aGlzLnByZXZTaG93ID0gdGhpcy5wcmV2SGlkZSA9ICQoKTtcblx0XHR0aGlzLl9hZGRDbGFzcyggXCJ1aS1hY2NvcmRpb25cIiwgXCJ1aS13aWRnZXQgdWktaGVscGVyLXJlc2V0XCIgKTtcblx0XHR0aGlzLmVsZW1lbnQuYXR0ciggXCJyb2xlXCIsIFwidGFibGlzdFwiICk7XG5cblx0XHQvLyBEb24ndCBhbGxvdyBjb2xsYXBzaWJsZTogZmFsc2UgYW5kIGFjdGl2ZTogZmFsc2UgLyBudWxsXG5cdFx0aWYgKCAhb3B0aW9ucy5jb2xsYXBzaWJsZSAmJiAoIG9wdGlvbnMuYWN0aXZlID09PSBmYWxzZSB8fCBvcHRpb25zLmFjdGl2ZSA9PSBudWxsICkgKSB7XG5cdFx0XHRvcHRpb25zLmFjdGl2ZSA9IDA7XG5cdFx0fVxuXG5cdFx0dGhpcy5fcHJvY2Vzc1BhbmVscygpO1xuXG5cdFx0Ly8gaGFuZGxlIG5lZ2F0aXZlIHZhbHVlc1xuXHRcdGlmICggb3B0aW9ucy5hY3RpdmUgPCAwICkge1xuXHRcdFx0b3B0aW9ucy5hY3RpdmUgKz0gdGhpcy5oZWFkZXJzLmxlbmd0aDtcblx0XHR9XG5cdFx0dGhpcy5fcmVmcmVzaCgpO1xuXHR9LFxuXG5cdF9nZXRDcmVhdGVFdmVudERhdGE6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRoZWFkZXI6IHRoaXMuYWN0aXZlLFxuXHRcdFx0cGFuZWw6ICF0aGlzLmFjdGl2ZS5sZW5ndGggPyAkKCkgOiB0aGlzLmFjdGl2ZS5uZXh0KClcblx0XHR9O1xuXHR9LFxuXG5cdF9jcmVhdGVJY29uczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGljb24sIGNoaWxkcmVuLFxuXHRcdFx0aWNvbnMgPSB0aGlzLm9wdGlvbnMuaWNvbnM7XG5cblx0XHRpZiAoIGljb25zICkge1xuXHRcdFx0aWNvbiA9ICQoIFwiPHNwYW4+XCIgKTtcblx0XHRcdHRoaXMuX2FkZENsYXNzKCBpY29uLCBcInVpLWFjY29yZGlvbi1oZWFkZXItaWNvblwiLCBcInVpLWljb24gXCIgKyBpY29ucy5oZWFkZXIgKTtcblx0XHRcdGljb24ucHJlcGVuZFRvKCB0aGlzLmhlYWRlcnMgKTtcblx0XHRcdGNoaWxkcmVuID0gdGhpcy5hY3RpdmUuY2hpbGRyZW4oIFwiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvblwiICk7XG5cdFx0XHR0aGlzLl9yZW1vdmVDbGFzcyggY2hpbGRyZW4sIGljb25zLmhlYWRlciApXG5cdFx0XHRcdC5fYWRkQ2xhc3MoIGNoaWxkcmVuLCBudWxsLCBpY29ucy5hY3RpdmVIZWFkZXIgKVxuXHRcdFx0XHQuX2FkZENsYXNzKCB0aGlzLmhlYWRlcnMsIFwidWktYWNjb3JkaW9uLWljb25zXCIgKTtcblx0XHR9XG5cdH0sXG5cblx0X2Rlc3Ryb3lJY29uczogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIHRoaXMuaGVhZGVycywgXCJ1aS1hY2NvcmRpb24taWNvbnNcIiApO1xuXHRcdHRoaXMuaGVhZGVycy5jaGlsZHJlbiggXCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uXCIgKS5yZW1vdmUoKTtcblx0fSxcblxuXHRfZGVzdHJveTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNvbnRlbnRzO1xuXG5cdFx0Ly8gQ2xlYW4gdXAgbWFpbiBlbGVtZW50XG5cdFx0dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoIFwicm9sZVwiICk7XG5cblx0XHQvLyBDbGVhbiB1cCBoZWFkZXJzXG5cdFx0dGhpcy5oZWFkZXJzXG5cdFx0XHQucmVtb3ZlQXR0ciggXCJyb2xlIGFyaWEtZXhwYW5kZWQgYXJpYS1zZWxlY3RlZCBhcmlhLWNvbnRyb2xzIHRhYkluZGV4XCIgKVxuXHRcdFx0LnJlbW92ZVVuaXF1ZUlkKCk7XG5cblx0XHR0aGlzLl9kZXN0cm95SWNvbnMoKTtcblxuXHRcdC8vIENsZWFuIHVwIGNvbnRlbnQgcGFuZWxzXG5cdFx0Y29udGVudHMgPSB0aGlzLmhlYWRlcnMubmV4dCgpXG5cdFx0XHQuY3NzKCBcImRpc3BsYXlcIiwgXCJcIiApXG5cdFx0XHQucmVtb3ZlQXR0ciggXCJyb2xlIGFyaWEtaGlkZGVuIGFyaWEtbGFiZWxsZWRieVwiIClcblx0XHRcdC5yZW1vdmVVbmlxdWVJZCgpO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUgIT09IFwiY29udGVudFwiICkge1xuXHRcdFx0Y29udGVudHMuY3NzKCBcImhlaWdodFwiLCBcIlwiICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9zZXRPcHRpb246IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdGlmICgga2V5ID09PSBcImFjdGl2ZVwiICkge1xuXG5cdFx0XHQvLyBfYWN0aXZhdGUoKSB3aWxsIGhhbmRsZSBpbnZhbGlkIHZhbHVlcyBhbmQgdXBkYXRlIHRoaXMub3B0aW9uc1xuXHRcdFx0dGhpcy5fYWN0aXZhdGUoIHZhbHVlICk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgPT09IFwiZXZlbnRcIiApIHtcblx0XHRcdGlmICggdGhpcy5vcHRpb25zLmV2ZW50ICkge1xuXHRcdFx0XHR0aGlzLl9vZmYoIHRoaXMuaGVhZGVycywgdGhpcy5vcHRpb25zLmV2ZW50ICk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9zZXR1cEV2ZW50cyggdmFsdWUgKTtcblx0XHR9XG5cblx0XHR0aGlzLl9zdXBlcigga2V5LCB2YWx1ZSApO1xuXG5cdFx0Ly8gU2V0dGluZyBjb2xsYXBzaWJsZTogZmFsc2Ugd2hpbGUgY29sbGFwc2VkOyBvcGVuIGZpcnN0IHBhbmVsXG5cdFx0aWYgKCBrZXkgPT09IFwiY29sbGFwc2libGVcIiAmJiAhdmFsdWUgJiYgdGhpcy5vcHRpb25zLmFjdGl2ZSA9PT0gZmFsc2UgKSB7XG5cdFx0XHR0aGlzLl9hY3RpdmF0ZSggMCApO1xuXHRcdH1cblxuXHRcdGlmICgga2V5ID09PSBcImljb25zXCIgKSB7XG5cdFx0XHR0aGlzLl9kZXN0cm95SWNvbnMoKTtcblx0XHRcdGlmICggdmFsdWUgKSB7XG5cdFx0XHRcdHRoaXMuX2NyZWF0ZUljb25zKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdF9zZXRPcHRpb25EaXNhYmxlZDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHRoaXMuX3N1cGVyKCB2YWx1ZSApO1xuXG5cdFx0dGhpcy5lbGVtZW50LmF0dHIoIFwiYXJpYS1kaXNhYmxlZFwiLCB2YWx1ZSApO1xuXG5cdFx0Ly8gU3VwcG9ydDogSUU4IE9ubHlcblx0XHQvLyAjNTMzMiAvICM2MDU5IC0gb3BhY2l0eSBkb2Vzbid0IGNhc2NhZGUgdG8gcG9zaXRpb25lZCBlbGVtZW50cyBpbiBJRVxuXHRcdC8vIHNvIHdlIG5lZWQgdG8gYWRkIHRoZSBkaXNhYmxlZCBjbGFzcyB0byB0aGUgaGVhZGVycyBhbmQgcGFuZWxzXG5cdFx0dGhpcy5fdG9nZ2xlQ2xhc3MoIG51bGwsIFwidWktc3RhdGUtZGlzYWJsZWRcIiwgISF2YWx1ZSApO1xuXHRcdHRoaXMuX3RvZ2dsZUNsYXNzKCB0aGlzLmhlYWRlcnMuYWRkKCB0aGlzLmhlYWRlcnMubmV4dCgpICksIG51bGwsIFwidWktc3RhdGUtZGlzYWJsZWRcIixcblx0XHRcdCEhdmFsdWUgKTtcblx0fSxcblxuXHRfa2V5ZG93bjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGlmICggZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIGtleUNvZGUgPSAkLnVpLmtleUNvZGUsXG5cdFx0XHRsZW5ndGggPSB0aGlzLmhlYWRlcnMubGVuZ3RoLFxuXHRcdFx0Y3VycmVudEluZGV4ID0gdGhpcy5oZWFkZXJzLmluZGV4KCBldmVudC50YXJnZXQgKSxcblx0XHRcdHRvRm9jdXMgPSBmYWxzZTtcblxuXHRcdHN3aXRjaCAoIGV2ZW50LmtleUNvZGUgKSB7XG5cdFx0Y2FzZSBrZXlDb2RlLlJJR0hUOlxuXHRcdGNhc2Uga2V5Q29kZS5ET1dOOlxuXHRcdFx0dG9Gb2N1cyA9IHRoaXMuaGVhZGVyc1sgKCBjdXJyZW50SW5kZXggKyAxICkgJSBsZW5ndGggXTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2Uga2V5Q29kZS5MRUZUOlxuXHRcdGNhc2Uga2V5Q29kZS5VUDpcblx0XHRcdHRvRm9jdXMgPSB0aGlzLmhlYWRlcnNbICggY3VycmVudEluZGV4IC0gMSArIGxlbmd0aCApICUgbGVuZ3RoIF07XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIGtleUNvZGUuU1BBQ0U6XG5cdFx0Y2FzZSBrZXlDb2RlLkVOVEVSOlxuXHRcdFx0dGhpcy5fZXZlbnRIYW5kbGVyKCBldmVudCApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBrZXlDb2RlLkhPTUU6XG5cdFx0XHR0b0ZvY3VzID0gdGhpcy5oZWFkZXJzWyAwIF07XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIGtleUNvZGUuRU5EOlxuXHRcdFx0dG9Gb2N1cyA9IHRoaXMuaGVhZGVyc1sgbGVuZ3RoIC0gMSBdO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0aWYgKCB0b0ZvY3VzICkge1xuXHRcdFx0JCggZXZlbnQudGFyZ2V0ICkuYXR0ciggXCJ0YWJJbmRleFwiLCAtMSApO1xuXHRcdFx0JCggdG9Gb2N1cyApLmF0dHIoIFwidGFiSW5kZXhcIiwgMCApO1xuXHRcdFx0JCggdG9Gb2N1cyApLnRyaWdnZXIoIFwiZm9jdXNcIiApO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH0sXG5cblx0X3BhbmVsS2V5RG93bjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGlmICggZXZlbnQua2V5Q29kZSA9PT0gJC51aS5rZXlDb2RlLlVQICYmIGV2ZW50LmN0cmxLZXkgKSB7XG5cdFx0XHQkKCBldmVudC5jdXJyZW50VGFyZ2V0ICkucHJldigpLnRyaWdnZXIoIFwiZm9jdXNcIiApO1xuXHRcdH1cblx0fSxcblxuXHRyZWZyZXNoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblx0XHR0aGlzLl9wcm9jZXNzUGFuZWxzKCk7XG5cblx0XHQvLyBXYXMgY29sbGFwc2VkIG9yIG5vIHBhbmVsXG5cdFx0aWYgKCAoIG9wdGlvbnMuYWN0aXZlID09PSBmYWxzZSAmJiBvcHRpb25zLmNvbGxhcHNpYmxlID09PSB0cnVlICkgfHxcblx0XHRcdFx0IXRoaXMuaGVhZGVycy5sZW5ndGggKSB7XG5cdFx0XHRvcHRpb25zLmFjdGl2ZSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5hY3RpdmUgPSAkKCk7XG5cblx0XHQvLyBhY3RpdmUgZmFsc2Ugb25seSB3aGVuIGNvbGxhcHNpYmxlIGlzIHRydWVcblx0XHR9IGVsc2UgaWYgKCBvcHRpb25zLmFjdGl2ZSA9PT0gZmFsc2UgKSB7XG5cdFx0XHR0aGlzLl9hY3RpdmF0ZSggMCApO1xuXG5cdFx0Ly8gd2FzIGFjdGl2ZSwgYnV0IGFjdGl2ZSBwYW5lbCBpcyBnb25lXG5cdFx0fSBlbHNlIGlmICggdGhpcy5hY3RpdmUubGVuZ3RoICYmICEkLmNvbnRhaW5zKCB0aGlzLmVsZW1lbnRbIDAgXSwgdGhpcy5hY3RpdmVbIDAgXSApICkge1xuXG5cdFx0XHQvLyBhbGwgcmVtYWluaW5nIHBhbmVsIGFyZSBkaXNhYmxlZFxuXHRcdFx0aWYgKCB0aGlzLmhlYWRlcnMubGVuZ3RoID09PSB0aGlzLmhlYWRlcnMuZmluZCggXCIudWktc3RhdGUtZGlzYWJsZWRcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0b3B0aW9ucy5hY3RpdmUgPSBmYWxzZTtcblx0XHRcdFx0dGhpcy5hY3RpdmUgPSAkKCk7XG5cblx0XHRcdC8vIGFjdGl2YXRlIHByZXZpb3VzIHBhbmVsXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLl9hY3RpdmF0ZSggTWF0aC5tYXgoIDAsIG9wdGlvbnMuYWN0aXZlIC0gMSApICk7XG5cdFx0XHR9XG5cblx0XHQvLyB3YXMgYWN0aXZlLCBhY3RpdmUgcGFuZWwgc3RpbGwgZXhpc3RzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gbWFrZSBzdXJlIGFjdGl2ZSBpbmRleCBpcyBjb3JyZWN0XG5cdFx0XHRvcHRpb25zLmFjdGl2ZSA9IHRoaXMuaGVhZGVycy5pbmRleCggdGhpcy5hY3RpdmUgKTtcblx0XHR9XG5cblx0XHR0aGlzLl9kZXN0cm95SWNvbnMoKTtcblxuXHRcdHRoaXMuX3JlZnJlc2goKTtcblx0fSxcblxuXHRfcHJvY2Vzc1BhbmVsczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHByZXZIZWFkZXJzID0gdGhpcy5oZWFkZXJzLFxuXHRcdFx0cHJldlBhbmVscyA9IHRoaXMucGFuZWxzO1xuXG5cdFx0dGhpcy5oZWFkZXJzID0gdGhpcy5lbGVtZW50LmZpbmQoIHRoaXMub3B0aW9ucy5oZWFkZXIgKTtcblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5oZWFkZXJzLCBcInVpLWFjY29yZGlvbi1oZWFkZXIgdWktYWNjb3JkaW9uLWhlYWRlci1jb2xsYXBzZWRcIixcblx0XHRcdFwidWktc3RhdGUtZGVmYXVsdFwiICk7XG5cblx0XHR0aGlzLnBhbmVscyA9IHRoaXMuaGVhZGVycy5uZXh0KCkuZmlsdGVyKCBcIjpub3QoLnVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSlcIiApLmhpZGUoKTtcblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5wYW5lbHMsIFwidWktYWNjb3JkaW9uLWNvbnRlbnRcIiwgXCJ1aS1oZWxwZXItcmVzZXQgdWktd2lkZ2V0LWNvbnRlbnRcIiApO1xuXG5cdFx0Ly8gQXZvaWQgbWVtb3J5IGxlYWtzICgjMTAwNTYpXG5cdFx0aWYgKCBwcmV2UGFuZWxzICkge1xuXHRcdFx0dGhpcy5fb2ZmKCBwcmV2SGVhZGVycy5ub3QoIHRoaXMuaGVhZGVycyApICk7XG5cdFx0XHR0aGlzLl9vZmYoIHByZXZQYW5lbHMubm90KCB0aGlzLnBhbmVscyApICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9yZWZyZXNoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWF4SGVpZ2h0LFxuXHRcdFx0b3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcblx0XHRcdGhlaWdodFN0eWxlID0gb3B0aW9ucy5oZWlnaHRTdHlsZSxcblx0XHRcdHBhcmVudCA9IHRoaXMuZWxlbWVudC5wYXJlbnQoKTtcblxuXHRcdHRoaXMuYWN0aXZlID0gdGhpcy5fZmluZEFjdGl2ZSggb3B0aW9ucy5hY3RpdmUgKTtcblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5hY3RpdmUsIFwidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmVcIiwgXCJ1aS1zdGF0ZS1hY3RpdmVcIiApXG5cdFx0XHQuX3JlbW92ZUNsYXNzKCB0aGlzLmFjdGl2ZSwgXCJ1aS1hY2NvcmRpb24taGVhZGVyLWNvbGxhcHNlZFwiICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMuYWN0aXZlLm5leHQoKSwgXCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmVcIiApO1xuXHRcdHRoaXMuYWN0aXZlLm5leHQoKS5zaG93KCk7XG5cblx0XHR0aGlzLmhlYWRlcnNcblx0XHRcdC5hdHRyKCBcInJvbGVcIiwgXCJ0YWJcIiApXG5cdFx0XHQuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBoZWFkZXIgPSAkKCB0aGlzICksXG5cdFx0XHRcdFx0aGVhZGVySWQgPSBoZWFkZXIudW5pcXVlSWQoKS5hdHRyKCBcImlkXCIgKSxcblx0XHRcdFx0XHRwYW5lbCA9IGhlYWRlci5uZXh0KCksXG5cdFx0XHRcdFx0cGFuZWxJZCA9IHBhbmVsLnVuaXF1ZUlkKCkuYXR0ciggXCJpZFwiICk7XG5cdFx0XHRcdGhlYWRlci5hdHRyKCBcImFyaWEtY29udHJvbHNcIiwgcGFuZWxJZCApO1xuXHRcdFx0XHRwYW5lbC5hdHRyKCBcImFyaWEtbGFiZWxsZWRieVwiLCBoZWFkZXJJZCApO1xuXHRcdFx0fSApXG5cdFx0XHQubmV4dCgpXG5cdFx0XHRcdC5hdHRyKCBcInJvbGVcIiwgXCJ0YWJwYW5lbFwiICk7XG5cblx0XHR0aGlzLmhlYWRlcnNcblx0XHRcdC5ub3QoIHRoaXMuYWN0aXZlIClcblx0XHRcdFx0LmF0dHIoIHtcblx0XHRcdFx0XHRcImFyaWEtc2VsZWN0ZWRcIjogXCJmYWxzZVwiLFxuXHRcdFx0XHRcdFwiYXJpYS1leHBhbmRlZFwiOiBcImZhbHNlXCIsXG5cdFx0XHRcdFx0dGFiSW5kZXg6IC0xXG5cdFx0XHRcdH0gKVxuXHRcdFx0XHQubmV4dCgpXG5cdFx0XHRcdFx0LmF0dHIoIHtcblx0XHRcdFx0XHRcdFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCJcblx0XHRcdFx0XHR9IClcblx0XHRcdFx0XHQuaGlkZSgpO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIGF0IGxlYXN0IG9uZSBoZWFkZXIgaXMgaW4gdGhlIHRhYiBvcmRlclxuXHRcdGlmICggIXRoaXMuYWN0aXZlLmxlbmd0aCApIHtcblx0XHRcdHRoaXMuaGVhZGVycy5lcSggMCApLmF0dHIoIFwidGFiSW5kZXhcIiwgMCApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmFjdGl2ZS5hdHRyKCB7XG5cdFx0XHRcdFwiYXJpYS1zZWxlY3RlZFwiOiBcInRydWVcIixcblx0XHRcdFx0XCJhcmlhLWV4cGFuZGVkXCI6IFwidHJ1ZVwiLFxuXHRcdFx0XHR0YWJJbmRleDogMFxuXHRcdFx0fSApXG5cdFx0XHRcdC5uZXh0KClcblx0XHRcdFx0XHQuYXR0cigge1xuXHRcdFx0XHRcdFx0XCJhcmlhLWhpZGRlblwiOiBcImZhbHNlXCJcblx0XHRcdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fY3JlYXRlSWNvbnMoKTtcblxuXHRcdHRoaXMuX3NldHVwRXZlbnRzKCBvcHRpb25zLmV2ZW50ICk7XG5cblx0XHRpZiAoIGhlaWdodFN0eWxlID09PSBcImZpbGxcIiApIHtcblx0XHRcdG1heEhlaWdodCA9IHBhcmVudC5oZWlnaHQoKTtcblx0XHRcdHRoaXMuZWxlbWVudC5zaWJsaW5ncyggXCI6dmlzaWJsZVwiICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gJCggdGhpcyApLFxuXHRcdFx0XHRcdHBvc2l0aW9uID0gZWxlbS5jc3MoIFwicG9zaXRpb25cIiApO1xuXG5cdFx0XHRcdGlmICggcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJmaXhlZFwiICkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRtYXhIZWlnaHQgLT0gZWxlbS5vdXRlckhlaWdodCggdHJ1ZSApO1xuXHRcdFx0fSApO1xuXG5cdFx0XHR0aGlzLmhlYWRlcnMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdG1heEhlaWdodCAtPSAkKCB0aGlzICkub3V0ZXJIZWlnaHQoIHRydWUgKTtcblx0XHRcdH0gKTtcblxuXHRcdFx0dGhpcy5oZWFkZXJzLm5leHQoKVxuXHRcdFx0XHQuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0JCggdGhpcyApLmhlaWdodCggTWF0aC5tYXgoIDAsIG1heEhlaWdodCAtXG5cdFx0XHRcdFx0XHQkKCB0aGlzICkuaW5uZXJIZWlnaHQoKSArICQoIHRoaXMgKS5oZWlnaHQoKSApICk7XG5cdFx0XHRcdH0gKVxuXHRcdFx0XHQuY3NzKCBcIm92ZXJmbG93XCIsIFwiYXV0b1wiICk7XG5cdFx0fSBlbHNlIGlmICggaGVpZ2h0U3R5bGUgPT09IFwiYXV0b1wiICkge1xuXHRcdFx0bWF4SGVpZ2h0ID0gMDtcblx0XHRcdHRoaXMuaGVhZGVycy5uZXh0KClcblx0XHRcdFx0LmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHZhciBpc1Zpc2libGUgPSAkKCB0aGlzICkuaXMoIFwiOnZpc2libGVcIiApO1xuXHRcdFx0XHRcdGlmICggIWlzVmlzaWJsZSApIHtcblx0XHRcdFx0XHRcdCQoIHRoaXMgKS5zaG93KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG1heEhlaWdodCA9IE1hdGgubWF4KCBtYXhIZWlnaHQsICQoIHRoaXMgKS5jc3MoIFwiaGVpZ2h0XCIsIFwiXCIgKS5oZWlnaHQoKSApO1xuXHRcdFx0XHRcdGlmICggIWlzVmlzaWJsZSApIHtcblx0XHRcdFx0XHRcdCQoIHRoaXMgKS5oaWRlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IClcblx0XHRcdFx0LmhlaWdodCggbWF4SGVpZ2h0ICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9hY3RpdmF0ZTogZnVuY3Rpb24oIGluZGV4ICkge1xuXHRcdHZhciBhY3RpdmUgPSB0aGlzLl9maW5kQWN0aXZlKCBpbmRleCApWyAwIF07XG5cblx0XHQvLyBUcnlpbmcgdG8gYWN0aXZhdGUgdGhlIGFscmVhZHkgYWN0aXZlIHBhbmVsXG5cdFx0aWYgKCBhY3RpdmUgPT09IHRoaXMuYWN0aXZlWyAwIF0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gVHJ5aW5nIHRvIGNvbGxhcHNlLCBzaW11bGF0ZSBhIGNsaWNrIG9uIHRoZSBjdXJyZW50bHkgYWN0aXZlIGhlYWRlclxuXHRcdGFjdGl2ZSA9IGFjdGl2ZSB8fCB0aGlzLmFjdGl2ZVsgMCBdO1xuXG5cdFx0dGhpcy5fZXZlbnRIYW5kbGVyKCB7XG5cdFx0XHR0YXJnZXQ6IGFjdGl2ZSxcblx0XHRcdGN1cnJlbnRUYXJnZXQ6IGFjdGl2ZSxcblx0XHRcdHByZXZlbnREZWZhdWx0OiAkLm5vb3Bcblx0XHR9ICk7XG5cdH0sXG5cblx0X2ZpbmRBY3RpdmU6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdHlwZW9mIHNlbGVjdG9yID09PSBcIm51bWJlclwiID8gdGhpcy5oZWFkZXJzLmVxKCBzZWxlY3RvciApIDogJCgpO1xuXHR9LFxuXG5cdF9zZXR1cEV2ZW50czogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBldmVudHMgPSB7XG5cdFx0XHRrZXlkb3duOiBcIl9rZXlkb3duXCJcblx0XHR9O1xuXHRcdGlmICggZXZlbnQgKSB7XG5cdFx0XHQkLmVhY2goIGV2ZW50LnNwbGl0KCBcIiBcIiApLCBmdW5jdGlvbiggaW5kZXgsIGV2ZW50TmFtZSApIHtcblx0XHRcdFx0ZXZlbnRzWyBldmVudE5hbWUgXSA9IFwiX2V2ZW50SGFuZGxlclwiO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHRoaXMuX29mZiggdGhpcy5oZWFkZXJzLmFkZCggdGhpcy5oZWFkZXJzLm5leHQoKSApICk7XG5cdFx0dGhpcy5fb24oIHRoaXMuaGVhZGVycywgZXZlbnRzICk7XG5cdFx0dGhpcy5fb24oIHRoaXMuaGVhZGVycy5uZXh0KCksIHsga2V5ZG93bjogXCJfcGFuZWxLZXlEb3duXCIgfSApO1xuXHRcdHRoaXMuX2hvdmVyYWJsZSggdGhpcy5oZWFkZXJzICk7XG5cdFx0dGhpcy5fZm9jdXNhYmxlKCB0aGlzLmhlYWRlcnMgKTtcblx0fSxcblxuXHRfZXZlbnRIYW5kbGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGFjdGl2ZUNoaWxkcmVuLCBjbGlja2VkQ2hpbGRyZW4sXG5cdFx0XHRvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuXHRcdFx0YWN0aXZlID0gdGhpcy5hY3RpdmUsXG5cdFx0XHRjbGlja2VkID0gJCggZXZlbnQuY3VycmVudFRhcmdldCApLFxuXHRcdFx0Y2xpY2tlZElzQWN0aXZlID0gY2xpY2tlZFsgMCBdID09PSBhY3RpdmVbIDAgXSxcblx0XHRcdGNvbGxhcHNpbmcgPSBjbGlja2VkSXNBY3RpdmUgJiYgb3B0aW9ucy5jb2xsYXBzaWJsZSxcblx0XHRcdHRvU2hvdyA9IGNvbGxhcHNpbmcgPyAkKCkgOiBjbGlja2VkLm5leHQoKSxcblx0XHRcdHRvSGlkZSA9IGFjdGl2ZS5uZXh0KCksXG5cdFx0XHRldmVudERhdGEgPSB7XG5cdFx0XHRcdG9sZEhlYWRlcjogYWN0aXZlLFxuXHRcdFx0XHRvbGRQYW5lbDogdG9IaWRlLFxuXHRcdFx0XHRuZXdIZWFkZXI6IGNvbGxhcHNpbmcgPyAkKCkgOiBjbGlja2VkLFxuXHRcdFx0XHRuZXdQYW5lbDogdG9TaG93XG5cdFx0XHR9O1xuXG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdGlmIChcblxuXHRcdFx0XHQvLyBjbGljayBvbiBhY3RpdmUgaGVhZGVyLCBidXQgbm90IGNvbGxhcHNpYmxlXG5cdFx0XHRcdCggY2xpY2tlZElzQWN0aXZlICYmICFvcHRpb25zLmNvbGxhcHNpYmxlICkgfHxcblxuXHRcdFx0XHQvLyBhbGxvdyBjYW5jZWxpbmcgYWN0aXZhdGlvblxuXHRcdFx0XHQoIHRoaXMuX3RyaWdnZXIoIFwiYmVmb3JlQWN0aXZhdGVcIiwgZXZlbnQsIGV2ZW50RGF0YSApID09PSBmYWxzZSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdG9wdGlvbnMuYWN0aXZlID0gY29sbGFwc2luZyA/IGZhbHNlIDogdGhpcy5oZWFkZXJzLmluZGV4KCBjbGlja2VkICk7XG5cblx0XHQvLyBXaGVuIHRoZSBjYWxsIHRvIC5fdG9nZ2xlKCkgY29tZXMgYWZ0ZXIgdGhlIGNsYXNzIGNoYW5nZXNcblx0XHQvLyBpdCBjYXVzZXMgYSB2ZXJ5IG9kZCBidWcgaW4gSUUgOCAoc2VlICM2NzIwKVxuXHRcdHRoaXMuYWN0aXZlID0gY2xpY2tlZElzQWN0aXZlID8gJCgpIDogY2xpY2tlZDtcblx0XHR0aGlzLl90b2dnbGUoIGV2ZW50RGF0YSApO1xuXG5cdFx0Ly8gU3dpdGNoIGNsYXNzZXNcblx0XHQvLyBjb3JuZXIgY2xhc3NlcyBvbiB0aGUgcHJldmlvdXNseSBhY3RpdmUgaGVhZGVyIHN0YXkgYWZ0ZXIgdGhlIGFuaW1hdGlvblxuXHRcdHRoaXMuX3JlbW92ZUNsYXNzKCBhY3RpdmUsIFwidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmVcIiwgXCJ1aS1zdGF0ZS1hY3RpdmVcIiApO1xuXHRcdGlmICggb3B0aW9ucy5pY29ucyApIHtcblx0XHRcdGFjdGl2ZUNoaWxkcmVuID0gYWN0aXZlLmNoaWxkcmVuKCBcIi51aS1hY2NvcmRpb24taGVhZGVyLWljb25cIiApO1xuXHRcdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIGFjdGl2ZUNoaWxkcmVuLCBudWxsLCBvcHRpb25zLmljb25zLmFjdGl2ZUhlYWRlciApXG5cdFx0XHRcdC5fYWRkQ2xhc3MoIGFjdGl2ZUNoaWxkcmVuLCBudWxsLCBvcHRpb25zLmljb25zLmhlYWRlciApO1xuXHRcdH1cblxuXHRcdGlmICggIWNsaWNrZWRJc0FjdGl2ZSApIHtcblx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCBjbGlja2VkLCBcInVpLWFjY29yZGlvbi1oZWFkZXItY29sbGFwc2VkXCIgKVxuXHRcdFx0XHQuX2FkZENsYXNzKCBjbGlja2VkLCBcInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlXCIsIFwidWktc3RhdGUtYWN0aXZlXCIgKTtcblx0XHRcdGlmICggb3B0aW9ucy5pY29ucyApIHtcblx0XHRcdFx0Y2xpY2tlZENoaWxkcmVuID0gY2xpY2tlZC5jaGlsZHJlbiggXCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uXCIgKTtcblx0XHRcdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIGNsaWNrZWRDaGlsZHJlbiwgbnVsbCwgb3B0aW9ucy5pY29ucy5oZWFkZXIgKVxuXHRcdFx0XHRcdC5fYWRkQ2xhc3MoIGNsaWNrZWRDaGlsZHJlbiwgbnVsbCwgb3B0aW9ucy5pY29ucy5hY3RpdmVIZWFkZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fYWRkQ2xhc3MoIGNsaWNrZWQubmV4dCgpLCBcInVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZVwiICk7XG5cdFx0fVxuXHR9LFxuXG5cdF90b2dnbGU6IGZ1bmN0aW9uKCBkYXRhICkge1xuXHRcdHZhciB0b1Nob3cgPSBkYXRhLm5ld1BhbmVsLFxuXHRcdFx0dG9IaWRlID0gdGhpcy5wcmV2U2hvdy5sZW5ndGggPyB0aGlzLnByZXZTaG93IDogZGF0YS5vbGRQYW5lbDtcblxuXHRcdC8vIEhhbmRsZSBhY3RpdmF0aW5nIGEgcGFuZWwgZHVyaW5nIHRoZSBhbmltYXRpb24gZm9yIGFub3RoZXIgYWN0aXZhdGlvblxuXHRcdHRoaXMucHJldlNob3cuYWRkKCB0aGlzLnByZXZIaWRlICkuc3RvcCggdHJ1ZSwgdHJ1ZSApO1xuXHRcdHRoaXMucHJldlNob3cgPSB0b1Nob3c7XG5cdFx0dGhpcy5wcmV2SGlkZSA9IHRvSGlkZTtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmFuaW1hdGUgKSB7XG5cdFx0XHR0aGlzLl9hbmltYXRlKCB0b1Nob3csIHRvSGlkZSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0b0hpZGUuaGlkZSgpO1xuXHRcdFx0dG9TaG93LnNob3coKTtcblx0XHRcdHRoaXMuX3RvZ2dsZUNvbXBsZXRlKCBkYXRhICk7XG5cdFx0fVxuXG5cdFx0dG9IaWRlLmF0dHIoIHtcblx0XHRcdFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCJcblx0XHR9ICk7XG5cdFx0dG9IaWRlLnByZXYoKS5hdHRyKCB7XG5cdFx0XHRcImFyaWEtc2VsZWN0ZWRcIjogXCJmYWxzZVwiLFxuXHRcdFx0XCJhcmlhLWV4cGFuZGVkXCI6IFwiZmFsc2VcIlxuXHRcdH0gKTtcblxuXHRcdC8vIGlmIHdlJ3JlIHN3aXRjaGluZyBwYW5lbHMsIHJlbW92ZSB0aGUgb2xkIGhlYWRlciBmcm9tIHRoZSB0YWIgb3JkZXJcblx0XHQvLyBpZiB3ZSdyZSBvcGVuaW5nIGZyb20gY29sbGFwc2VkIHN0YXRlLCByZW1vdmUgdGhlIHByZXZpb3VzIGhlYWRlciBmcm9tIHRoZSB0YWIgb3JkZXJcblx0XHQvLyBpZiB3ZSdyZSBjb2xsYXBzaW5nLCB0aGVuIGtlZXAgdGhlIGNvbGxhcHNpbmcgaGVhZGVyIGluIHRoZSB0YWIgb3JkZXJcblx0XHRpZiAoIHRvU2hvdy5sZW5ndGggJiYgdG9IaWRlLmxlbmd0aCApIHtcblx0XHRcdHRvSGlkZS5wcmV2KCkuYXR0cigge1xuXHRcdFx0XHRcInRhYkluZGV4XCI6IC0xLFxuXHRcdFx0XHRcImFyaWEtZXhwYW5kZWRcIjogXCJmYWxzZVwiXG5cdFx0XHR9ICk7XG5cdFx0fSBlbHNlIGlmICggdG9TaG93Lmxlbmd0aCApIHtcblx0XHRcdHRoaXMuaGVhZGVycy5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoICQoIHRoaXMgKS5hdHRyKCBcInRhYkluZGV4XCIgKSwgMTAgKSA9PT0gMDtcblx0XHRcdH0gKVxuXHRcdFx0XHQuYXR0ciggXCJ0YWJJbmRleFwiLCAtMSApO1xuXHRcdH1cblxuXHRcdHRvU2hvd1xuXHRcdFx0LmF0dHIoIFwiYXJpYS1oaWRkZW5cIiwgXCJmYWxzZVwiIClcblx0XHRcdC5wcmV2KClcblx0XHRcdFx0LmF0dHIoIHtcblx0XHRcdFx0XHRcImFyaWEtc2VsZWN0ZWRcIjogXCJ0cnVlXCIsXG5cdFx0XHRcdFx0XCJhcmlhLWV4cGFuZGVkXCI6IFwidHJ1ZVwiLFxuXHRcdFx0XHRcdHRhYkluZGV4OiAwXG5cdFx0XHRcdH0gKTtcblx0fSxcblxuXHRfYW5pbWF0ZTogZnVuY3Rpb24oIHRvU2hvdywgdG9IaWRlLCBkYXRhICkge1xuXHRcdHZhciB0b3RhbCwgZWFzaW5nLCBkdXJhdGlvbixcblx0XHRcdHRoYXQgPSB0aGlzLFxuXHRcdFx0YWRqdXN0ID0gMCxcblx0XHRcdGJveFNpemluZyA9IHRvU2hvdy5jc3MoIFwiYm94LXNpemluZ1wiICksXG5cdFx0XHRkb3duID0gdG9TaG93Lmxlbmd0aCAmJlxuXHRcdFx0XHQoICF0b0hpZGUubGVuZ3RoIHx8ICggdG9TaG93LmluZGV4KCkgPCB0b0hpZGUuaW5kZXgoKSApICksXG5cdFx0XHRhbmltYXRlID0gdGhpcy5vcHRpb25zLmFuaW1hdGUgfHwge30sXG5cdFx0XHRvcHRpb25zID0gZG93biAmJiBhbmltYXRlLmRvd24gfHwgYW5pbWF0ZSxcblx0XHRcdGNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHRoYXQuX3RvZ2dsZUNvbXBsZXRlKCBkYXRhICk7XG5cdFx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJudW1iZXJcIiApIHtcblx0XHRcdGR1cmF0aW9uID0gb3B0aW9ucztcblx0XHR9XG5cdFx0aWYgKCB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGVhc2luZyA9IG9wdGlvbnM7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbCBiYWNrIGZyb20gb3B0aW9ucyB0byBhbmltYXRpb24gaW4gY2FzZSBvZiBwYXJ0aWFsIGRvd24gc2V0dGluZ3Ncblx0XHRlYXNpbmcgPSBlYXNpbmcgfHwgb3B0aW9ucy5lYXNpbmcgfHwgYW5pbWF0ZS5lYXNpbmc7XG5cdFx0ZHVyYXRpb24gPSBkdXJhdGlvbiB8fCBvcHRpb25zLmR1cmF0aW9uIHx8IGFuaW1hdGUuZHVyYXRpb247XG5cblx0XHRpZiAoICF0b0hpZGUubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHRvU2hvdy5hbmltYXRlKCB0aGlzLnNob3dQcm9wcywgZHVyYXRpb24sIGVhc2luZywgY29tcGxldGUgKTtcblx0XHR9XG5cdFx0aWYgKCAhdG9TaG93Lmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0b0hpZGUuYW5pbWF0ZSggdGhpcy5oaWRlUHJvcHMsIGR1cmF0aW9uLCBlYXNpbmcsIGNvbXBsZXRlICk7XG5cdFx0fVxuXG5cdFx0dG90YWwgPSB0b1Nob3cuc2hvdygpLm91dGVySGVpZ2h0KCk7XG5cdFx0dG9IaWRlLmFuaW1hdGUoIHRoaXMuaGlkZVByb3BzLCB7XG5cdFx0XHRkdXJhdGlvbjogZHVyYXRpb24sXG5cdFx0XHRlYXNpbmc6IGVhc2luZyxcblx0XHRcdHN0ZXA6IGZ1bmN0aW9uKCBub3csIGZ4ICkge1xuXHRcdFx0XHRmeC5ub3cgPSBNYXRoLnJvdW5kKCBub3cgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0dG9TaG93XG5cdFx0XHQuaGlkZSgpXG5cdFx0XHQuYW5pbWF0ZSggdGhpcy5zaG93UHJvcHMsIHtcblx0XHRcdFx0ZHVyYXRpb246IGR1cmF0aW9uLFxuXHRcdFx0XHRlYXNpbmc6IGVhc2luZyxcblx0XHRcdFx0Y29tcGxldGU6IGNvbXBsZXRlLFxuXHRcdFx0XHRzdGVwOiBmdW5jdGlvbiggbm93LCBmeCApIHtcblx0XHRcdFx0XHRmeC5ub3cgPSBNYXRoLnJvdW5kKCBub3cgKTtcblx0XHRcdFx0XHRpZiAoIGZ4LnByb3AgIT09IFwiaGVpZ2h0XCIgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGJveFNpemluZyA9PT0gXCJjb250ZW50LWJveFwiICkge1xuXHRcdFx0XHRcdFx0XHRhZGp1c3QgKz0gZngubm93O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoIHRoYXQub3B0aW9ucy5oZWlnaHRTdHlsZSAhPT0gXCJjb250ZW50XCIgKSB7XG5cdFx0XHRcdFx0XHRmeC5ub3cgPSBNYXRoLnJvdW5kKCB0b3RhbCAtIHRvSGlkZS5vdXRlckhlaWdodCgpIC0gYWRqdXN0ICk7XG5cdFx0XHRcdFx0XHRhZGp1c3QgPSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXG5cdF90b2dnbGVDb21wbGV0ZTogZnVuY3Rpb24oIGRhdGEgKSB7XG5cdFx0dmFyIHRvSGlkZSA9IGRhdGEub2xkUGFuZWwsXG5cdFx0XHRwcmV2ID0gdG9IaWRlLnByZXYoKTtcblxuXHRcdHRoaXMuX3JlbW92ZUNsYXNzKCB0b0hpZGUsIFwidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlXCIgKTtcblx0XHR0aGlzLl9yZW1vdmVDbGFzcyggcHJldiwgXCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZVwiIClcblx0XHRcdC5fYWRkQ2xhc3MoIHByZXYsIFwidWktYWNjb3JkaW9uLWhlYWRlci1jb2xsYXBzZWRcIiApO1xuXG5cdFx0Ly8gV29yayBhcm91bmQgZm9yIHJlbmRlcmluZyBidWcgaW4gSUUgKCM1NDIxKVxuXHRcdGlmICggdG9IaWRlLmxlbmd0aCApIHtcblx0XHRcdHRvSGlkZS5wYXJlbnQoKVsgMCBdLmNsYXNzTmFtZSA9IHRvSGlkZS5wYXJlbnQoKVsgMCBdLmNsYXNzTmFtZTtcblx0XHR9XG5cdFx0dGhpcy5fdHJpZ2dlciggXCJhY3RpdmF0ZVwiLCBudWxsLCBkYXRhICk7XG5cdH1cbn0gKTtcblxuXG5cbnZhciBzYWZlQWN0aXZlRWxlbWVudCA9ICQudWkuc2FmZUFjdGl2ZUVsZW1lbnQgPSBmdW5jdGlvbiggZG9jdW1lbnQgKSB7XG5cdHZhciBhY3RpdmVFbGVtZW50O1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHQvLyBJRTkgdGhyb3dzIGFuIFwiVW5zcGVjaWZpZWQgZXJyb3JcIiBhY2Nlc3NpbmcgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBmcm9tIGFuIDxpZnJhbWU+XG5cdHRyeSB7XG5cdFx0YWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdH0gY2F0Y2ggKCBlcnJvciApIHtcblx0XHRhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYm9keTtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIElFIG1heSByZXR1cm4gbnVsbCBpbnN0ZWFkIG9mIGFuIGVsZW1lbnRcblx0Ly8gSW50ZXJlc3RpbmdseSwgdGhpcyBvbmx5IHNlZW1zIHRvIG9jY3VyIHdoZW4gTk9UIGluIGFuIGlmcmFtZVxuXHRpZiAoICFhY3RpdmVFbGVtZW50ICkge1xuXHRcdGFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudC5ib2R5O1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHQvLyBJRTExIHJldHVybnMgYSBzZWVtaW5nbHkgZW1wdHkgb2JqZWN0IGluIHNvbWUgY2FzZXMgd2hlbiBhY2Nlc3Npbmdcblx0Ly8gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBmcm9tIGFuIDxpZnJhbWU+XG5cdGlmICggIWFjdGl2ZUVsZW1lbnQubm9kZU5hbWUgKSB7XG5cdFx0YWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmJvZHk7XG5cdH1cblxuXHRyZXR1cm4gYWN0aXZlRWxlbWVudDtcbn07XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgTWVudSAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogTWVudVxuLy8+Pmdyb3VwOiBXaWRnZXRzXG4vLz4+ZGVzY3JpcHRpb246IENyZWF0ZXMgbmVzdGFibGUgbWVudXMuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vbWVudS9cbi8vPj5kZW1vczogaHR0cDovL2pxdWVyeXVpLmNvbS9tZW51L1xuLy8+PmNzcy5zdHJ1Y3R1cmU6IC4uLy4uL3RoZW1lcy9iYXNlL2NvcmUuY3NzXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvbWVudS5jc3Ncbi8vPj5jc3MudGhlbWU6IC4uLy4uL3RoZW1lcy9iYXNlL3RoZW1lLmNzc1xuXG5cblxudmFyIHdpZGdldHNNZW51ID0gJC53aWRnZXQoIFwidWkubWVudVwiLCB7XG5cdHZlcnNpb246IFwiMS4xMi4xXCIsXG5cdGRlZmF1bHRFbGVtZW50OiBcIjx1bD5cIixcblx0ZGVsYXk6IDMwMCxcblx0b3B0aW9uczoge1xuXHRcdGljb25zOiB7XG5cdFx0XHRzdWJtZW51OiBcInVpLWljb24tY2FyZXQtMS1lXCJcblx0XHR9LFxuXHRcdGl0ZW1zOiBcIj4gKlwiLFxuXHRcdG1lbnVzOiBcInVsXCIsXG5cdFx0cG9zaXRpb246IHtcblx0XHRcdG15OiBcImxlZnQgdG9wXCIsXG5cdFx0XHRhdDogXCJyaWdodCB0b3BcIlxuXHRcdH0sXG5cdFx0cm9sZTogXCJtZW51XCIsXG5cblx0XHQvLyBDYWxsYmFja3Ncblx0XHRibHVyOiBudWxsLFxuXHRcdGZvY3VzOiBudWxsLFxuXHRcdHNlbGVjdDogbnVsbFxuXHR9LFxuXG5cdF9jcmVhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuYWN0aXZlTWVudSA9IHRoaXMuZWxlbWVudDtcblxuXHRcdC8vIEZsYWcgdXNlZCB0byBwcmV2ZW50IGZpcmluZyBvZiB0aGUgY2xpY2sgaGFuZGxlclxuXHRcdC8vIGFzIHRoZSBldmVudCBidWJibGVzIHVwIHRocm91Z2ggbmVzdGVkIG1lbnVzXG5cdFx0dGhpcy5tb3VzZUhhbmRsZWQgPSBmYWxzZTtcblx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdC51bmlxdWVJZCgpXG5cdFx0XHQuYXR0cigge1xuXHRcdFx0XHRyb2xlOiB0aGlzLm9wdGlvbnMucm9sZSxcblx0XHRcdFx0dGFiSW5kZXg6IDBcblx0XHRcdH0gKTtcblxuXHRcdHRoaXMuX2FkZENsYXNzKCBcInVpLW1lbnVcIiwgXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnRcIiApO1xuXHRcdHRoaXMuX29uKCB7XG5cblx0XHRcdC8vIFByZXZlbnQgZm9jdXMgZnJvbSBzdGlja2luZyB0byBsaW5rcyBpbnNpZGUgbWVudSBhZnRlciBjbGlja2luZ1xuXHRcdFx0Ly8gdGhlbSAoZm9jdXMgc2hvdWxkIGFsd2F5cyBzdGF5IG9uIFVMIGR1cmluZyBuYXZpZ2F0aW9uKS5cblx0XHRcdFwibW91c2Vkb3duIC51aS1tZW51LWl0ZW1cIjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0fSxcblx0XHRcdFwiY2xpY2sgLnVpLW1lbnUtaXRlbVwiOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSAkKCBldmVudC50YXJnZXQgKTtcblx0XHRcdFx0dmFyIGFjdGl2ZSA9ICQoICQudWkuc2FmZUFjdGl2ZUVsZW1lbnQoIHRoaXMuZG9jdW1lbnRbIDAgXSApICk7XG5cdFx0XHRcdGlmICggIXRoaXMubW91c2VIYW5kbGVkICYmIHRhcmdldC5ub3QoIFwiLnVpLXN0YXRlLWRpc2FibGVkXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0dGhpcy5zZWxlY3QoIGV2ZW50ICk7XG5cblx0XHRcdFx0XHQvLyBPbmx5IHNldCB0aGUgbW91c2VIYW5kbGVkIGZsYWcgaWYgdGhlIGV2ZW50IHdpbGwgYnViYmxlLCBzZWUgIzk0NjkuXG5cdFx0XHRcdFx0aWYgKCAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdHRoaXMubW91c2VIYW5kbGVkID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPcGVuIHN1Ym1lbnUgb24gY2xpY2tcblx0XHRcdFx0XHRpZiAoIHRhcmdldC5oYXMoIFwiLnVpLW1lbnVcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdHRoaXMuZXhwYW5kKCBldmVudCApO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoICF0aGlzLmVsZW1lbnQuaXMoIFwiOmZvY3VzXCIgKSAmJlxuXHRcdFx0XHRcdFx0XHRhY3RpdmUuY2xvc2VzdCggXCIudWktbWVudVwiICkubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0XHQvLyBSZWRpcmVjdCBmb2N1cyB0byB0aGUgbWVudVxuXHRcdFx0XHRcdFx0dGhpcy5lbGVtZW50LnRyaWdnZXIoIFwiZm9jdXNcIiwgWyB0cnVlIF0gKTtcblxuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIGFjdGl2ZSBpdGVtIGlzIG9uIHRoZSB0b3AgbGV2ZWwsIGxldCBpdCBzdGF5IGFjdGl2ZS5cblx0XHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgYmx1ciB0aGUgYWN0aXZlIGl0ZW0gc2luY2UgaXQgaXMgbm8gbG9uZ2VyIHZpc2libGUuXG5cdFx0XHRcdFx0XHRpZiAoIHRoaXMuYWN0aXZlICYmIHRoaXMuYWN0aXZlLnBhcmVudHMoIFwiLnVpLW1lbnVcIiApLmxlbmd0aCA9PT0gMSApIHtcblx0XHRcdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KCB0aGlzLnRpbWVyICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0XCJtb3VzZWVudGVyIC51aS1tZW51LWl0ZW1cIjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRcdC8vIElnbm9yZSBtb3VzZSBldmVudHMgd2hpbGUgdHlwZWFoZWFkIGlzIGFjdGl2ZSwgc2VlICMxMDQ1OC5cblx0XHRcdFx0Ly8gUHJldmVudHMgZm9jdXNpbmcgdGhlIHdyb25nIGl0ZW0gd2hlbiB0eXBlYWhlYWQgY2F1c2VzIGEgc2Nyb2xsIHdoaWxlIHRoZSBtb3VzZVxuXHRcdFx0XHQvLyBpcyBvdmVyIGFuIGl0ZW0gaW4gdGhlIG1lbnVcblx0XHRcdFx0aWYgKCB0aGlzLnByZXZpb3VzRmlsdGVyICkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBhY3R1YWxUYXJnZXQgPSAkKCBldmVudC50YXJnZXQgKS5jbG9zZXN0KCBcIi51aS1tZW51LWl0ZW1cIiApLFxuXHRcdFx0XHRcdHRhcmdldCA9ICQoIGV2ZW50LmN1cnJlbnRUYXJnZXQgKTtcblxuXHRcdFx0XHQvLyBJZ25vcmUgYnViYmxlZCBldmVudHMgb24gcGFyZW50IGl0ZW1zLCBzZWUgIzExNjQxXG5cdFx0XHRcdGlmICggYWN0dWFsVGFyZ2V0WyAwIF0gIT09IHRhcmdldFsgMCBdICkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlbW92ZSB1aS1zdGF0ZS1hY3RpdmUgY2xhc3MgZnJvbSBzaWJsaW5ncyBvZiB0aGUgbmV3bHkgZm9jdXNlZCBtZW51IGl0ZW1cblx0XHRcdFx0Ly8gdG8gYXZvaWQgYSBqdW1wIGNhdXNlZCBieSBhZGphY2VudCBlbGVtZW50cyBib3RoIGhhdmluZyBhIGNsYXNzIHdpdGggYSBib3JkZXJcblx0XHRcdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIHRhcmdldC5zaWJsaW5ncygpLmNoaWxkcmVuKCBcIi51aS1zdGF0ZS1hY3RpdmVcIiApLFxuXHRcdFx0XHRcdG51bGwsIFwidWktc3RhdGUtYWN0aXZlXCIgKTtcblx0XHRcdFx0dGhpcy5mb2N1cyggZXZlbnQsIHRhcmdldCApO1xuXHRcdFx0fSxcblx0XHRcdG1vdXNlbGVhdmU6IFwiY29sbGFwc2VBbGxcIixcblx0XHRcdFwibW91c2VsZWF2ZSAudWktbWVudVwiOiBcImNvbGxhcHNlQWxsXCIsXG5cdFx0XHRmb2N1czogZnVuY3Rpb24oIGV2ZW50LCBrZWVwQWN0aXZlSXRlbSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSdzIGFscmVhZHkgYW4gYWN0aXZlIGl0ZW0sIGtlZXAgaXQgYWN0aXZlXG5cdFx0XHRcdC8vIElmIG5vdCwgYWN0aXZhdGUgdGhlIGZpcnN0IGl0ZW1cblx0XHRcdFx0dmFyIGl0ZW0gPSB0aGlzLmFjdGl2ZSB8fCB0aGlzLmVsZW1lbnQuZmluZCggdGhpcy5vcHRpb25zLml0ZW1zICkuZXEoIDAgKTtcblxuXHRcdFx0XHRpZiAoICFrZWVwQWN0aXZlSXRlbSApIHtcblx0XHRcdFx0XHR0aGlzLmZvY3VzKCBldmVudCwgaXRlbSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0Ymx1cjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHR0aGlzLl9kZWxheSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIG5vdENvbnRhaW5lZCA9ICEkLmNvbnRhaW5zKFxuXHRcdFx0XHRcdFx0dGhpcy5lbGVtZW50WyAwIF0sXG5cdFx0XHRcdFx0XHQkLnVpLnNhZmVBY3RpdmVFbGVtZW50KCB0aGlzLmRvY3VtZW50WyAwIF0gKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKCBub3RDb250YWluZWQgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbGxhcHNlQWxsKCBldmVudCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0fSxcblx0XHRcdGtleWRvd246IFwiX2tleWRvd25cIlxuXHRcdH0gKTtcblxuXHRcdHRoaXMucmVmcmVzaCgpO1xuXG5cdFx0Ly8gQ2xpY2tzIG91dHNpZGUgb2YgYSBtZW51IGNvbGxhcHNlIGFueSBvcGVuIG1lbnVzXG5cdFx0dGhpcy5fb24oIHRoaXMuZG9jdW1lbnQsIHtcblx0XHRcdGNsaWNrOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdGlmICggdGhpcy5fY2xvc2VPbkRvY3VtZW50Q2xpY2soIGV2ZW50ICkgKSB7XG5cdFx0XHRcdFx0dGhpcy5jb2xsYXBzZUFsbCggZXZlbnQgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlc2V0IHRoZSBtb3VzZUhhbmRsZWQgZmxhZ1xuXHRcdFx0XHR0aGlzLm1vdXNlSGFuZGxlZCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRfZGVzdHJveTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGl0ZW1zID0gdGhpcy5lbGVtZW50LmZpbmQoIFwiLnVpLW1lbnUtaXRlbVwiIClcblx0XHRcdFx0LnJlbW92ZUF0dHIoIFwicm9sZSBhcmlhLWRpc2FibGVkXCIgKSxcblx0XHRcdHN1Ym1lbnVzID0gaXRlbXMuY2hpbGRyZW4oIFwiLnVpLW1lbnUtaXRlbS13cmFwcGVyXCIgKVxuXHRcdFx0XHQucmVtb3ZlVW5pcXVlSWQoKVxuXHRcdFx0XHQucmVtb3ZlQXR0ciggXCJ0YWJJbmRleCByb2xlIGFyaWEtaGFzcG9wdXBcIiApO1xuXG5cdFx0Ly8gRGVzdHJveSAoc3ViKW1lbnVzXG5cdFx0dGhpcy5lbGVtZW50XG5cdFx0XHQucmVtb3ZlQXR0ciggXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIiApXG5cdFx0XHQuZmluZCggXCIudWktbWVudVwiICkuYWRkQmFjaygpXG5cdFx0XHRcdC5yZW1vdmVBdHRyKCBcInJvbGUgYXJpYS1sYWJlbGxlZGJ5IGFyaWEtZXhwYW5kZWQgYXJpYS1oaWRkZW4gYXJpYS1kaXNhYmxlZCBcIiArXG5cdFx0XHRcdFx0XCJ0YWJJbmRleFwiIClcblx0XHRcdFx0LnJlbW92ZVVuaXF1ZUlkKClcblx0XHRcdFx0LnNob3coKTtcblxuXHRcdHN1Ym1lbnVzLmNoaWxkcmVuKCkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZWxlbSA9ICQoIHRoaXMgKTtcblx0XHRcdGlmICggZWxlbS5kYXRhKCBcInVpLW1lbnUtc3VibWVudS1jYXJldFwiICkgKSB7XG5cdFx0XHRcdGVsZW0ucmVtb3ZlKCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdF9rZXlkb3duOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIG1hdGNoLCBwcmV2LCBjaGFyYWN0ZXIsIHNraXAsXG5cdFx0XHRwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG5cblx0XHRzd2l0Y2ggKCBldmVudC5rZXlDb2RlICkge1xuXHRcdGNhc2UgJC51aS5rZXlDb2RlLlBBR0VfVVA6XG5cdFx0XHR0aGlzLnByZXZpb3VzUGFnZSggZXZlbnQgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJC51aS5rZXlDb2RlLlBBR0VfRE9XTjpcblx0XHRcdHRoaXMubmV4dFBhZ2UoIGV2ZW50ICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICQudWkua2V5Q29kZS5IT01FOlxuXHRcdFx0dGhpcy5fbW92ZSggXCJmaXJzdFwiLCBcImZpcnN0XCIsIGV2ZW50ICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICQudWkua2V5Q29kZS5FTkQ6XG5cdFx0XHR0aGlzLl9tb3ZlKCBcImxhc3RcIiwgXCJsYXN0XCIsIGV2ZW50ICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICQudWkua2V5Q29kZS5VUDpcblx0XHRcdHRoaXMucHJldmlvdXMoIGV2ZW50ICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICQudWkua2V5Q29kZS5ET1dOOlxuXHRcdFx0dGhpcy5uZXh0KCBldmVudCApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAkLnVpLmtleUNvZGUuTEVGVDpcblx0XHRcdHRoaXMuY29sbGFwc2UoIGV2ZW50ICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICQudWkua2V5Q29kZS5SSUdIVDpcblx0XHRcdGlmICggdGhpcy5hY3RpdmUgJiYgIXRoaXMuYWN0aXZlLmlzKCBcIi51aS1zdGF0ZS1kaXNhYmxlZFwiICkgKSB7XG5cdFx0XHRcdHRoaXMuZXhwYW5kKCBldmVudCApO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAkLnVpLmtleUNvZGUuRU5URVI6XG5cdFx0Y2FzZSAkLnVpLmtleUNvZGUuU1BBQ0U6XG5cdFx0XHR0aGlzLl9hY3RpdmF0ZSggZXZlbnQgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJC51aS5rZXlDb2RlLkVTQ0FQRTpcblx0XHRcdHRoaXMuY29sbGFwc2UoIGV2ZW50ICk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0cHJldmVudERlZmF1bHQgPSBmYWxzZTtcblx0XHRcdHByZXYgPSB0aGlzLnByZXZpb3VzRmlsdGVyIHx8IFwiXCI7XG5cdFx0XHRza2lwID0gZmFsc2U7XG5cblx0XHRcdC8vIFN1cHBvcnQgbnVtYmVyIHBhZCB2YWx1ZXNcblx0XHRcdGNoYXJhY3RlciA9IGV2ZW50LmtleUNvZGUgPj0gOTYgJiYgZXZlbnQua2V5Q29kZSA8PSAxMDUgP1xuXHRcdFx0XHQoIGV2ZW50LmtleUNvZGUgLSA5NiApLnRvU3RyaW5nKCkgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKCBldmVudC5rZXlDb2RlICk7XG5cblx0XHRcdGNsZWFyVGltZW91dCggdGhpcy5maWx0ZXJUaW1lciApO1xuXG5cdFx0XHRpZiAoIGNoYXJhY3RlciA9PT0gcHJldiApIHtcblx0XHRcdFx0c2tpcCA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjaGFyYWN0ZXIgPSBwcmV2ICsgY2hhcmFjdGVyO1xuXHRcdFx0fVxuXG5cdFx0XHRtYXRjaCA9IHRoaXMuX2ZpbHRlck1lbnVJdGVtcyggY2hhcmFjdGVyICk7XG5cdFx0XHRtYXRjaCA9IHNraXAgJiYgbWF0Y2guaW5kZXgoIHRoaXMuYWN0aXZlLm5leHQoKSApICE9PSAtMSA/XG5cdFx0XHRcdHRoaXMuYWN0aXZlLm5leHRBbGwoIFwiLnVpLW1lbnUtaXRlbVwiICkgOlxuXHRcdFx0XHRtYXRjaDtcblxuXHRcdFx0Ly8gSWYgbm8gbWF0Y2hlcyBvbiB0aGUgY3VycmVudCBmaWx0ZXIsIHJlc2V0IHRvIHRoZSBsYXN0IGNoYXJhY3RlciBwcmVzc2VkXG5cdFx0XHQvLyB0byBtb3ZlIGRvd24gdGhlIG1lbnUgdG8gdGhlIGZpcnN0IGl0ZW0gdGhhdCBzdGFydHMgd2l0aCB0aGF0IGNoYXJhY3RlclxuXHRcdFx0aWYgKCAhbWF0Y2gubGVuZ3RoICkge1xuXHRcdFx0XHRjaGFyYWN0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCBldmVudC5rZXlDb2RlICk7XG5cdFx0XHRcdG1hdGNoID0gdGhpcy5fZmlsdGVyTWVudUl0ZW1zKCBjaGFyYWN0ZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBtYXRjaC5sZW5ndGggKSB7XG5cdFx0XHRcdHRoaXMuZm9jdXMoIGV2ZW50LCBtYXRjaCApO1xuXHRcdFx0XHR0aGlzLnByZXZpb3VzRmlsdGVyID0gY2hhcmFjdGVyO1xuXHRcdFx0XHR0aGlzLmZpbHRlclRpbWVyID0gdGhpcy5fZGVsYXkoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLnByZXZpb3VzRmlsdGVyO1xuXHRcdFx0XHR9LCAxMDAwICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWxldGUgdGhpcy5wcmV2aW91c0ZpbHRlcjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHByZXZlbnREZWZhdWx0ICkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH0sXG5cblx0X2FjdGl2YXRlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0aWYgKCB0aGlzLmFjdGl2ZSAmJiAhdGhpcy5hY3RpdmUuaXMoIFwiLnVpLXN0YXRlLWRpc2FibGVkXCIgKSApIHtcblx0XHRcdGlmICggdGhpcy5hY3RpdmUuY2hpbGRyZW4oIFwiW2FyaWEtaGFzcG9wdXA9J3RydWUnXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHR0aGlzLmV4cGFuZCggZXZlbnQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0KCBldmVudCApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRyZWZyZXNoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWVudXMsIGl0ZW1zLCBuZXdTdWJtZW51cywgbmV3SXRlbXMsIG5ld1dyYXBwZXJzLFxuXHRcdFx0dGhhdCA9IHRoaXMsXG5cdFx0XHRpY29uID0gdGhpcy5vcHRpb25zLmljb25zLnN1Ym1lbnUsXG5cdFx0XHRzdWJtZW51cyA9IHRoaXMuZWxlbWVudC5maW5kKCB0aGlzLm9wdGlvbnMubWVudXMgKTtcblxuXHRcdHRoaXMuX3RvZ2dsZUNsYXNzKCBcInVpLW1lbnUtaWNvbnNcIiwgbnVsbCwgISF0aGlzLmVsZW1lbnQuZmluZCggXCIudWktaWNvblwiICkubGVuZ3RoICk7XG5cblx0XHQvLyBJbml0aWFsaXplIG5lc3RlZCBtZW51c1xuXHRcdG5ld1N1Ym1lbnVzID0gc3VibWVudXMuZmlsdGVyKCBcIjpub3QoLnVpLW1lbnUpXCIgKVxuXHRcdFx0LmhpZGUoKVxuXHRcdFx0LmF0dHIoIHtcblx0XHRcdFx0cm9sZTogdGhpcy5vcHRpb25zLnJvbGUsXG5cdFx0XHRcdFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG5cdFx0XHRcdFwiYXJpYS1leHBhbmRlZFwiOiBcImZhbHNlXCJcblx0XHRcdH0gKVxuXHRcdFx0LmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgbWVudSA9ICQoIHRoaXMgKSxcblx0XHRcdFx0XHRpdGVtID0gbWVudS5wcmV2KCksXG5cdFx0XHRcdFx0c3VibWVudUNhcmV0ID0gJCggXCI8c3Bhbj5cIiApLmRhdGEoIFwidWktbWVudS1zdWJtZW51LWNhcmV0XCIsIHRydWUgKTtcblxuXHRcdFx0XHR0aGF0Ll9hZGRDbGFzcyggc3VibWVudUNhcmV0LCBcInVpLW1lbnUtaWNvblwiLCBcInVpLWljb24gXCIgKyBpY29uICk7XG5cdFx0XHRcdGl0ZW1cblx0XHRcdFx0XHQuYXR0ciggXCJhcmlhLWhhc3BvcHVwXCIsIFwidHJ1ZVwiIClcblx0XHRcdFx0XHQucHJlcGVuZCggc3VibWVudUNhcmV0ICk7XG5cdFx0XHRcdG1lbnUuYXR0ciggXCJhcmlhLWxhYmVsbGVkYnlcIiwgaXRlbS5hdHRyKCBcImlkXCIgKSApO1xuXHRcdFx0fSApO1xuXG5cdFx0dGhpcy5fYWRkQ2xhc3MoIG5ld1N1Ym1lbnVzLCBcInVpLW1lbnVcIiwgXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktZnJvbnRcIiApO1xuXG5cdFx0bWVudXMgPSBzdWJtZW51cy5hZGQoIHRoaXMuZWxlbWVudCApO1xuXHRcdGl0ZW1zID0gbWVudXMuZmluZCggdGhpcy5vcHRpb25zLml0ZW1zICk7XG5cblx0XHQvLyBJbml0aWFsaXplIG1lbnUtaXRlbXMgY29udGFpbmluZyBzcGFjZXMgYW5kL29yIGRhc2hlcyBvbmx5IGFzIGRpdmlkZXJzXG5cdFx0aXRlbXMubm90KCBcIi51aS1tZW51LWl0ZW1cIiApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGl0ZW0gPSAkKCB0aGlzICk7XG5cdFx0XHRpZiAoIHRoYXQuX2lzRGl2aWRlciggaXRlbSApICkge1xuXHRcdFx0XHR0aGF0Ll9hZGRDbGFzcyggaXRlbSwgXCJ1aS1tZW51LWRpdmlkZXJcIiwgXCJ1aS13aWRnZXQtY29udGVudFwiICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdFx0Ly8gRG9uJ3QgcmVmcmVzaCBsaXN0IGl0ZW1zIHRoYXQgYXJlIGFscmVhZHkgYWRhcHRlZFxuXHRcdG5ld0l0ZW1zID0gaXRlbXMubm90KCBcIi51aS1tZW51LWl0ZW0sIC51aS1tZW51LWRpdmlkZXJcIiApO1xuXHRcdG5ld1dyYXBwZXJzID0gbmV3SXRlbXMuY2hpbGRyZW4oKVxuXHRcdFx0Lm5vdCggXCIudWktbWVudVwiIClcblx0XHRcdFx0LnVuaXF1ZUlkKClcblx0XHRcdFx0LmF0dHIoIHtcblx0XHRcdFx0XHR0YWJJbmRleDogLTEsXG5cdFx0XHRcdFx0cm9sZTogdGhpcy5faXRlbVJvbGUoKVxuXHRcdFx0XHR9ICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIG5ld0l0ZW1zLCBcInVpLW1lbnUtaXRlbVwiIClcblx0XHRcdC5fYWRkQ2xhc3MoIG5ld1dyYXBwZXJzLCBcInVpLW1lbnUtaXRlbS13cmFwcGVyXCIgKTtcblxuXHRcdC8vIEFkZCBhcmlhLWRpc2FibGVkIGF0dHJpYnV0ZSB0byBhbnkgZGlzYWJsZWQgbWVudSBpdGVtXG5cdFx0aXRlbXMuZmlsdGVyKCBcIi51aS1zdGF0ZS1kaXNhYmxlZFwiICkuYXR0ciggXCJhcmlhLWRpc2FibGVkXCIsIFwidHJ1ZVwiICk7XG5cblx0XHQvLyBJZiB0aGUgYWN0aXZlIGl0ZW0gaGFzIGJlZW4gcmVtb3ZlZCwgYmx1ciB0aGUgbWVudVxuXHRcdGlmICggdGhpcy5hY3RpdmUgJiYgISQuY29udGFpbnMoIHRoaXMuZWxlbWVudFsgMCBdLCB0aGlzLmFjdGl2ZVsgMCBdICkgKSB7XG5cdFx0XHR0aGlzLmJsdXIoKTtcblx0XHR9XG5cdH0sXG5cblx0X2l0ZW1Sb2xlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVudTogXCJtZW51aXRlbVwiLFxuXHRcdFx0bGlzdGJveDogXCJvcHRpb25cIlxuXHRcdH1bIHRoaXMub3B0aW9ucy5yb2xlIF07XG5cdH0sXG5cblx0X3NldE9wdGlvbjogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0aWYgKCBrZXkgPT09IFwiaWNvbnNcIiApIHtcblx0XHRcdHZhciBpY29ucyA9IHRoaXMuZWxlbWVudC5maW5kKCBcIi51aS1tZW51LWljb25cIiApO1xuXHRcdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIGljb25zLCBudWxsLCB0aGlzLm9wdGlvbnMuaWNvbnMuc3VibWVudSApXG5cdFx0XHRcdC5fYWRkQ2xhc3MoIGljb25zLCBudWxsLCB2YWx1ZS5zdWJtZW51ICk7XG5cdFx0fVxuXHRcdHRoaXMuX3N1cGVyKCBrZXksIHZhbHVlICk7XG5cdH0sXG5cblx0X3NldE9wdGlvbkRpc2FibGVkOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dGhpcy5fc3VwZXIoIHZhbHVlICk7XG5cblx0XHR0aGlzLmVsZW1lbnQuYXR0ciggXCJhcmlhLWRpc2FibGVkXCIsIFN0cmluZyggdmFsdWUgKSApO1xuXHRcdHRoaXMuX3RvZ2dsZUNsYXNzKCBudWxsLCBcInVpLXN0YXRlLWRpc2FibGVkXCIsICEhdmFsdWUgKTtcblx0fSxcblxuXHRmb2N1czogZnVuY3Rpb24oIGV2ZW50LCBpdGVtICkge1xuXHRcdHZhciBuZXN0ZWQsIGZvY3VzZWQsIGFjdGl2ZVBhcmVudDtcblx0XHR0aGlzLmJsdXIoIGV2ZW50LCBldmVudCAmJiBldmVudC50eXBlID09PSBcImZvY3VzXCIgKTtcblxuXHRcdHRoaXMuX3Njcm9sbEludG9WaWV3KCBpdGVtICk7XG5cblx0XHR0aGlzLmFjdGl2ZSA9IGl0ZW0uZmlyc3QoKTtcblxuXHRcdGZvY3VzZWQgPSB0aGlzLmFjdGl2ZS5jaGlsZHJlbiggXCIudWktbWVudS1pdGVtLXdyYXBwZXJcIiApO1xuXHRcdHRoaXMuX2FkZENsYXNzKCBmb2N1c2VkLCBudWxsLCBcInVpLXN0YXRlLWFjdGl2ZVwiICk7XG5cblx0XHQvLyBPbmx5IHVwZGF0ZSBhcmlhLWFjdGl2ZWRlc2NlbmRhbnQgaWYgdGhlcmUncyBhIHJvbGVcblx0XHQvLyBvdGhlcndpc2Ugd2UgYXNzdW1lIGZvY3VzIGlzIG1hbmFnZWQgZWxzZXdoZXJlXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMucm9sZSApIHtcblx0XHRcdHRoaXMuZWxlbWVudC5hdHRyKCBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLCBmb2N1c2VkLmF0dHIoIFwiaWRcIiApICk7XG5cdFx0fVxuXG5cdFx0Ly8gSGlnaGxpZ2h0IGFjdGl2ZSBwYXJlbnQgbWVudSBpdGVtLCBpZiBhbnlcblx0XHRhY3RpdmVQYXJlbnQgPSB0aGlzLmFjdGl2ZVxuXHRcdFx0LnBhcmVudCgpXG5cdFx0XHRcdC5jbG9zZXN0KCBcIi51aS1tZW51LWl0ZW1cIiApXG5cdFx0XHRcdFx0LmNoaWxkcmVuKCBcIi51aS1tZW51LWl0ZW0td3JhcHBlclwiICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIGFjdGl2ZVBhcmVudCwgbnVsbCwgXCJ1aS1zdGF0ZS1hY3RpdmVcIiApO1xuXG5cdFx0aWYgKCBldmVudCAmJiBldmVudC50eXBlID09PSBcImtleWRvd25cIiApIHtcblx0XHRcdHRoaXMuX2Nsb3NlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudGltZXIgPSB0aGlzLl9kZWxheSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHRoaXMuX2Nsb3NlKCk7XG5cdFx0XHR9LCB0aGlzLmRlbGF5ICk7XG5cdFx0fVxuXG5cdFx0bmVzdGVkID0gaXRlbS5jaGlsZHJlbiggXCIudWktbWVudVwiICk7XG5cdFx0aWYgKCBuZXN0ZWQubGVuZ3RoICYmIGV2ZW50ICYmICggL15tb3VzZS8udGVzdCggZXZlbnQudHlwZSApICkgKSB7XG5cdFx0XHR0aGlzLl9zdGFydE9wZW5pbmcoIG5lc3RlZCApO1xuXHRcdH1cblx0XHR0aGlzLmFjdGl2ZU1lbnUgPSBpdGVtLnBhcmVudCgpO1xuXG5cdFx0dGhpcy5fdHJpZ2dlciggXCJmb2N1c1wiLCBldmVudCwgeyBpdGVtOiBpdGVtIH0gKTtcblx0fSxcblxuXHRfc2Nyb2xsSW50b1ZpZXc6IGZ1bmN0aW9uKCBpdGVtICkge1xuXHRcdHZhciBib3JkZXJUb3AsIHBhZGRpbmdUb3AsIG9mZnNldCwgc2Nyb2xsLCBlbGVtZW50SGVpZ2h0LCBpdGVtSGVpZ2h0O1xuXHRcdGlmICggdGhpcy5faGFzU2Nyb2xsKCkgKSB7XG5cdFx0XHRib3JkZXJUb3AgPSBwYXJzZUZsb2F0KCAkLmNzcyggdGhpcy5hY3RpdmVNZW51WyAwIF0sIFwiYm9yZGVyVG9wV2lkdGhcIiApICkgfHwgMDtcblx0XHRcdHBhZGRpbmdUb3AgPSBwYXJzZUZsb2F0KCAkLmNzcyggdGhpcy5hY3RpdmVNZW51WyAwIF0sIFwicGFkZGluZ1RvcFwiICkgKSB8fCAwO1xuXHRcdFx0b2Zmc2V0ID0gaXRlbS5vZmZzZXQoKS50b3AgLSB0aGlzLmFjdGl2ZU1lbnUub2Zmc2V0KCkudG9wIC0gYm9yZGVyVG9wIC0gcGFkZGluZ1RvcDtcblx0XHRcdHNjcm9sbCA9IHRoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AoKTtcblx0XHRcdGVsZW1lbnRIZWlnaHQgPSB0aGlzLmFjdGl2ZU1lbnUuaGVpZ2h0KCk7XG5cdFx0XHRpdGVtSGVpZ2h0ID0gaXRlbS5vdXRlckhlaWdodCgpO1xuXG5cdFx0XHRpZiAoIG9mZnNldCA8IDAgKSB7XG5cdFx0XHRcdHRoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AoIHNjcm9sbCArIG9mZnNldCApO1xuXHRcdFx0fSBlbHNlIGlmICggb2Zmc2V0ICsgaXRlbUhlaWdodCA+IGVsZW1lbnRIZWlnaHQgKSB7XG5cdFx0XHRcdHRoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AoIHNjcm9sbCArIG9mZnNldCAtIGVsZW1lbnRIZWlnaHQgKyBpdGVtSGVpZ2h0ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdGJsdXI6IGZ1bmN0aW9uKCBldmVudCwgZnJvbUZvY3VzICkge1xuXHRcdGlmICggIWZyb21Gb2N1cyApIHtcblx0XHRcdGNsZWFyVGltZW91dCggdGhpcy50aW1lciApO1xuXHRcdH1cblxuXHRcdGlmICggIXRoaXMuYWN0aXZlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX3JlbW92ZUNsYXNzKCB0aGlzLmFjdGl2ZS5jaGlsZHJlbiggXCIudWktbWVudS1pdGVtLXdyYXBwZXJcIiApLFxuXHRcdFx0bnVsbCwgXCJ1aS1zdGF0ZS1hY3RpdmVcIiApO1xuXG5cdFx0dGhpcy5fdHJpZ2dlciggXCJibHVyXCIsIGV2ZW50LCB7IGl0ZW06IHRoaXMuYWN0aXZlIH0gKTtcblx0XHR0aGlzLmFjdGl2ZSA9IG51bGw7XG5cdH0sXG5cblx0X3N0YXJ0T3BlbmluZzogZnVuY3Rpb24oIHN1Ym1lbnUgKSB7XG5cdFx0Y2xlYXJUaW1lb3V0KCB0aGlzLnRpbWVyICk7XG5cblx0XHQvLyBEb24ndCBvcGVuIGlmIGFscmVhZHkgb3BlbiBmaXhlcyBhIEZpcmVmb3ggYnVnIHRoYXQgY2F1c2VkIGEgLjUgcGl4ZWxcblx0XHQvLyBzaGlmdCBpbiB0aGUgc3VibWVudSBwb3NpdGlvbiB3aGVuIG1vdXNpbmcgb3ZlciB0aGUgY2FyZXQgaWNvblxuXHRcdGlmICggc3VibWVudS5hdHRyKCBcImFyaWEtaGlkZGVuXCIgKSAhPT0gXCJ0cnVlXCIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy50aW1lciA9IHRoaXMuX2RlbGF5KCBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuX2Nsb3NlKCk7XG5cdFx0XHR0aGlzLl9vcGVuKCBzdWJtZW51ICk7XG5cdFx0fSwgdGhpcy5kZWxheSApO1xuXHR9LFxuXG5cdF9vcGVuOiBmdW5jdGlvbiggc3VibWVudSApIHtcblx0XHR2YXIgcG9zaXRpb24gPSAkLmV4dGVuZCgge1xuXHRcdFx0b2Y6IHRoaXMuYWN0aXZlXG5cdFx0fSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uICk7XG5cblx0XHRjbGVhclRpbWVvdXQoIHRoaXMudGltZXIgKTtcblx0XHR0aGlzLmVsZW1lbnQuZmluZCggXCIudWktbWVudVwiICkubm90KCBzdWJtZW51LnBhcmVudHMoIFwiLnVpLW1lbnVcIiApIClcblx0XHRcdC5oaWRlKClcblx0XHRcdC5hdHRyKCBcImFyaWEtaGlkZGVuXCIsIFwidHJ1ZVwiICk7XG5cblx0XHRzdWJtZW51XG5cdFx0XHQuc2hvdygpXG5cdFx0XHQucmVtb3ZlQXR0ciggXCJhcmlhLWhpZGRlblwiIClcblx0XHRcdC5hdHRyKCBcImFyaWEtZXhwYW5kZWRcIiwgXCJ0cnVlXCIgKVxuXHRcdFx0LnBvc2l0aW9uKCBwb3NpdGlvbiApO1xuXHR9LFxuXG5cdGNvbGxhcHNlQWxsOiBmdW5jdGlvbiggZXZlbnQsIGFsbCApIHtcblx0XHRjbGVhclRpbWVvdXQoIHRoaXMudGltZXIgKTtcblx0XHR0aGlzLnRpbWVyID0gdGhpcy5fZGVsYXkoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBJZiB3ZSB3ZXJlIHBhc3NlZCBhbiBldmVudCwgbG9vayBmb3IgdGhlIHN1Ym1lbnUgdGhhdCBjb250YWlucyB0aGUgZXZlbnRcblx0XHRcdHZhciBjdXJyZW50TWVudSA9IGFsbCA/IHRoaXMuZWxlbWVudCA6XG5cdFx0XHRcdCQoIGV2ZW50ICYmIGV2ZW50LnRhcmdldCApLmNsb3Nlc3QoIHRoaXMuZWxlbWVudC5maW5kKCBcIi51aS1tZW51XCIgKSApO1xuXG5cdFx0XHQvLyBJZiB3ZSBmb3VuZCBubyB2YWxpZCBzdWJtZW51IGFuY2VzdG9yLCB1c2UgdGhlIG1haW4gbWVudSB0byBjbG9zZSBhbGxcblx0XHRcdC8vIHN1YiBtZW51cyBhbnl3YXlcblx0XHRcdGlmICggIWN1cnJlbnRNZW51Lmxlbmd0aCApIHtcblx0XHRcdFx0Y3VycmVudE1lbnUgPSB0aGlzLmVsZW1lbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX2Nsb3NlKCBjdXJyZW50TWVudSApO1xuXG5cdFx0XHR0aGlzLmJsdXIoIGV2ZW50ICk7XG5cblx0XHRcdC8vIFdvcmsgYXJvdW5kIGFjdGl2ZSBpdGVtIHN0YXlpbmcgYWN0aXZlIGFmdGVyIG1lbnUgaXMgYmx1cnJlZFxuXHRcdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIGN1cnJlbnRNZW51LmZpbmQoIFwiLnVpLXN0YXRlLWFjdGl2ZVwiICksIG51bGwsIFwidWktc3RhdGUtYWN0aXZlXCIgKTtcblxuXHRcdFx0dGhpcy5hY3RpdmVNZW51ID0gY3VycmVudE1lbnU7XG5cdFx0fSwgdGhpcy5kZWxheSApO1xuXHR9LFxuXG5cdC8vIFdpdGggbm8gYXJndW1lbnRzLCBjbG9zZXMgdGhlIGN1cnJlbnRseSBhY3RpdmUgbWVudSAtIGlmIG5vdGhpbmcgaXMgYWN0aXZlXG5cdC8vIGl0IGNsb3NlcyBhbGwgbWVudXMuICBJZiBwYXNzZWQgYW4gYXJndW1lbnQsIGl0IHdpbGwgc2VhcmNoIGZvciBtZW51cyBCRUxPV1xuXHRfY2xvc2U6IGZ1bmN0aW9uKCBzdGFydE1lbnUgKSB7XG5cdFx0aWYgKCAhc3RhcnRNZW51ICkge1xuXHRcdFx0c3RhcnRNZW51ID0gdGhpcy5hY3RpdmUgPyB0aGlzLmFjdGl2ZS5wYXJlbnQoKSA6IHRoaXMuZWxlbWVudDtcblx0XHR9XG5cblx0XHRzdGFydE1lbnUuZmluZCggXCIudWktbWVudVwiIClcblx0XHRcdC5oaWRlKClcblx0XHRcdC5hdHRyKCBcImFyaWEtaGlkZGVuXCIsIFwidHJ1ZVwiIClcblx0XHRcdC5hdHRyKCBcImFyaWEtZXhwYW5kZWRcIiwgXCJmYWxzZVwiICk7XG5cdH0sXG5cblx0X2Nsb3NlT25Eb2N1bWVudENsaWNrOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0cmV0dXJuICEkKCBldmVudC50YXJnZXQgKS5jbG9zZXN0KCBcIi51aS1tZW51XCIgKS5sZW5ndGg7XG5cdH0sXG5cblx0X2lzRGl2aWRlcjogZnVuY3Rpb24oIGl0ZW0gKSB7XG5cblx0XHQvLyBNYXRjaCBoeXBoZW4sIGVtIGRhc2gsIGVuIGRhc2hcblx0XHRyZXR1cm4gIS9bXlxcLVxcdTIwMTRcXHUyMDEzXFxzXS8udGVzdCggaXRlbS50ZXh0KCkgKTtcblx0fSxcblxuXHRjb2xsYXBzZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBuZXdJdGVtID0gdGhpcy5hY3RpdmUgJiZcblx0XHRcdHRoaXMuYWN0aXZlLnBhcmVudCgpLmNsb3Nlc3QoIFwiLnVpLW1lbnUtaXRlbVwiLCB0aGlzLmVsZW1lbnQgKTtcblx0XHRpZiAoIG5ld0l0ZW0gJiYgbmV3SXRlbS5sZW5ndGggKSB7XG5cdFx0XHR0aGlzLl9jbG9zZSgpO1xuXHRcdFx0dGhpcy5mb2N1cyggZXZlbnQsIG5ld0l0ZW0gKTtcblx0XHR9XG5cdH0sXG5cblx0ZXhwYW5kOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIG5ld0l0ZW0gPSB0aGlzLmFjdGl2ZSAmJlxuXHRcdFx0dGhpcy5hY3RpdmVcblx0XHRcdFx0LmNoaWxkcmVuKCBcIi51aS1tZW51IFwiIClcblx0XHRcdFx0XHQuZmluZCggdGhpcy5vcHRpb25zLml0ZW1zIClcblx0XHRcdFx0XHRcdC5maXJzdCgpO1xuXG5cdFx0aWYgKCBuZXdJdGVtICYmIG5ld0l0ZW0ubGVuZ3RoICkge1xuXHRcdFx0dGhpcy5fb3BlbiggbmV3SXRlbS5wYXJlbnQoKSApO1xuXG5cdFx0XHQvLyBEZWxheSBzbyBGaXJlZm94IHdpbGwgbm90IGhpZGUgYWN0aXZlZGVzY2VuZGFudCBjaGFuZ2UgaW4gZXhwYW5kaW5nIHN1Ym1lbnUgZnJvbSBBVFxuXHRcdFx0dGhpcy5fZGVsYXkoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aGlzLmZvY3VzKCBldmVudCwgbmV3SXRlbSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblx0fSxcblxuXHRuZXh0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dGhpcy5fbW92ZSggXCJuZXh0XCIsIFwiZmlyc3RcIiwgZXZlbnQgKTtcblx0fSxcblxuXHRwcmV2aW91czogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHRoaXMuX21vdmUoIFwicHJldlwiLCBcImxhc3RcIiwgZXZlbnQgKTtcblx0fSxcblxuXHRpc0ZpcnN0SXRlbTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWN0aXZlICYmICF0aGlzLmFjdGl2ZS5wcmV2QWxsKCBcIi51aS1tZW51LWl0ZW1cIiApLmxlbmd0aDtcblx0fSxcblxuXHRpc0xhc3RJdGVtOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5hY3RpdmUgJiYgIXRoaXMuYWN0aXZlLm5leHRBbGwoIFwiLnVpLW1lbnUtaXRlbVwiICkubGVuZ3RoO1xuXHR9LFxuXG5cdF9tb3ZlOiBmdW5jdGlvbiggZGlyZWN0aW9uLCBmaWx0ZXIsIGV2ZW50ICkge1xuXHRcdHZhciBuZXh0O1xuXHRcdGlmICggdGhpcy5hY3RpdmUgKSB7XG5cdFx0XHRpZiAoIGRpcmVjdGlvbiA9PT0gXCJmaXJzdFwiIHx8IGRpcmVjdGlvbiA9PT0gXCJsYXN0XCIgKSB7XG5cdFx0XHRcdG5leHQgPSB0aGlzLmFjdGl2ZVxuXHRcdFx0XHRcdFsgZGlyZWN0aW9uID09PSBcImZpcnN0XCIgPyBcInByZXZBbGxcIiA6IFwibmV4dEFsbFwiIF0oIFwiLnVpLW1lbnUtaXRlbVwiIClcblx0XHRcdFx0XHQuZXEoIC0xICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuZXh0ID0gdGhpcy5hY3RpdmVcblx0XHRcdFx0XHRbIGRpcmVjdGlvbiArIFwiQWxsXCIgXSggXCIudWktbWVudS1pdGVtXCIgKVxuXHRcdFx0XHRcdC5lcSggMCApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoICFuZXh0IHx8ICFuZXh0Lmxlbmd0aCB8fCAhdGhpcy5hY3RpdmUgKSB7XG5cdFx0XHRuZXh0ID0gdGhpcy5hY3RpdmVNZW51LmZpbmQoIHRoaXMub3B0aW9ucy5pdGVtcyApWyBmaWx0ZXIgXSgpO1xuXHRcdH1cblxuXHRcdHRoaXMuZm9jdXMoIGV2ZW50LCBuZXh0ICk7XG5cdH0sXG5cblx0bmV4dFBhZ2U6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgaXRlbSwgYmFzZSwgaGVpZ2h0O1xuXG5cdFx0aWYgKCAhdGhpcy5hY3RpdmUgKSB7XG5cdFx0XHR0aGlzLm5leHQoIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICggdGhpcy5pc0xhc3RJdGVtKCkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICggdGhpcy5faGFzU2Nyb2xsKCkgKSB7XG5cdFx0XHRiYXNlID0gdGhpcy5hY3RpdmUub2Zmc2V0KCkudG9wO1xuXHRcdFx0aGVpZ2h0ID0gdGhpcy5lbGVtZW50LmhlaWdodCgpO1xuXHRcdFx0dGhpcy5hY3RpdmUubmV4dEFsbCggXCIudWktbWVudS1pdGVtXCIgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aXRlbSA9ICQoIHRoaXMgKTtcblx0XHRcdFx0cmV0dXJuIGl0ZW0ub2Zmc2V0KCkudG9wIC0gYmFzZSAtIGhlaWdodCA8IDA7XG5cdFx0XHR9ICk7XG5cblx0XHRcdHRoaXMuZm9jdXMoIGV2ZW50LCBpdGVtICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXMoIGV2ZW50LCB0aGlzLmFjdGl2ZU1lbnUuZmluZCggdGhpcy5vcHRpb25zLml0ZW1zIClcblx0XHRcdFx0WyAhdGhpcy5hY3RpdmUgPyBcImZpcnN0XCIgOiBcImxhc3RcIiBdKCkgKTtcblx0XHR9XG5cdH0sXG5cblx0cHJldmlvdXNQYWdlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGl0ZW0sIGJhc2UsIGhlaWdodDtcblx0XHRpZiAoICF0aGlzLmFjdGl2ZSApIHtcblx0XHRcdHRoaXMubmV4dCggZXZlbnQgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCB0aGlzLmlzRmlyc3RJdGVtKCkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICggdGhpcy5faGFzU2Nyb2xsKCkgKSB7XG5cdFx0XHRiYXNlID0gdGhpcy5hY3RpdmUub2Zmc2V0KCkudG9wO1xuXHRcdFx0aGVpZ2h0ID0gdGhpcy5lbGVtZW50LmhlaWdodCgpO1xuXHRcdFx0dGhpcy5hY3RpdmUucHJldkFsbCggXCIudWktbWVudS1pdGVtXCIgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aXRlbSA9ICQoIHRoaXMgKTtcblx0XHRcdFx0cmV0dXJuIGl0ZW0ub2Zmc2V0KCkudG9wIC0gYmFzZSArIGhlaWdodCA+IDA7XG5cdFx0XHR9ICk7XG5cblx0XHRcdHRoaXMuZm9jdXMoIGV2ZW50LCBpdGVtICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXMoIGV2ZW50LCB0aGlzLmFjdGl2ZU1lbnUuZmluZCggdGhpcy5vcHRpb25zLml0ZW1zICkuZmlyc3QoKSApO1xuXHRcdH1cblx0fSxcblxuXHRfaGFzU2Nyb2xsOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCkgPCB0aGlzLmVsZW1lbnQucHJvcCggXCJzY3JvbGxIZWlnaHRcIiApO1xuXHR9LFxuXG5cdHNlbGVjdDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0Ly8gVE9ETzogSXQgc2hvdWxkIG5ldmVyIGJlIHBvc3NpYmxlIHRvIG5vdCBoYXZlIGFuIGFjdGl2ZSBpdGVtIGF0IHRoaXNcblx0XHQvLyBwb2ludCwgYnV0IHRoZSB0ZXN0cyBkb24ndCB0cmlnZ2VyIG1vdXNlZW50ZXIgYmVmb3JlIGNsaWNrLlxuXHRcdHRoaXMuYWN0aXZlID0gdGhpcy5hY3RpdmUgfHwgJCggZXZlbnQudGFyZ2V0ICkuY2xvc2VzdCggXCIudWktbWVudS1pdGVtXCIgKTtcblx0XHR2YXIgdWkgPSB7IGl0ZW06IHRoaXMuYWN0aXZlIH07XG5cdFx0aWYgKCAhdGhpcy5hY3RpdmUuaGFzKCBcIi51aS1tZW51XCIgKS5sZW5ndGggKSB7XG5cdFx0XHR0aGlzLmNvbGxhcHNlQWxsKCBldmVudCwgdHJ1ZSApO1xuXHRcdH1cblx0XHR0aGlzLl90cmlnZ2VyKCBcInNlbGVjdFwiLCBldmVudCwgdWkgKTtcblx0fSxcblxuXHRfZmlsdGVyTWVudUl0ZW1zOiBmdW5jdGlvbiggY2hhcmFjdGVyICkge1xuXHRcdHZhciBlc2NhcGVkQ2hhcmFjdGVyID0gY2hhcmFjdGVyLnJlcGxhY2UoIC9bXFwtXFxbXFxde30oKSorPy4sXFxcXFxcXiR8I1xcc10vZywgXCJcXFxcJCZcIiApLFxuXHRcdFx0cmVnZXggPSBuZXcgUmVnRXhwKCBcIl5cIiArIGVzY2FwZWRDaGFyYWN0ZXIsIFwiaVwiICk7XG5cblx0XHRyZXR1cm4gdGhpcy5hY3RpdmVNZW51XG5cdFx0XHQuZmluZCggdGhpcy5vcHRpb25zLml0ZW1zIClcblxuXHRcdFx0XHQvLyBPbmx5IG1hdGNoIG9uIGl0ZW1zLCBub3QgZGl2aWRlcnMgb3Igb3RoZXIgY29udGVudCAoIzEwNTcxKVxuXHRcdFx0XHQuZmlsdGVyKCBcIi51aS1tZW51LWl0ZW1cIiApXG5cdFx0XHRcdFx0LmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVnZXgudGVzdChcblx0XHRcdFx0XHRcdFx0JC50cmltKCAkKCB0aGlzICkuY2hpbGRyZW4oIFwiLnVpLW1lbnUtaXRlbS13cmFwcGVyXCIgKS50ZXh0KCkgKSApO1xuXHRcdFx0XHRcdH0gKTtcblx0fVxufSApO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIEF1dG9jb21wbGV0ZSAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogQXV0b2NvbXBsZXRlXG4vLz4+Z3JvdXA6IFdpZGdldHNcbi8vPj5kZXNjcmlwdGlvbjogTGlzdHMgc3VnZ2VzdGVkIHdvcmRzIGFzIHRoZSB1c2VyIGlzIHR5cGluZy5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9hdXRvY29tcGxldGUvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vYXV0b2NvbXBsZXRlL1xuLy8+PmNzcy5zdHJ1Y3R1cmU6IC4uLy4uL3RoZW1lcy9iYXNlL2NvcmUuY3NzXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvYXV0b2NvbXBsZXRlLmNzc1xuLy8+PmNzcy50aGVtZTogLi4vLi4vdGhlbWVzL2Jhc2UvdGhlbWUuY3NzXG5cblxuXG4kLndpZGdldCggXCJ1aS5hdXRvY29tcGxldGVcIiwge1xuXHR2ZXJzaW9uOiBcIjEuMTIuMVwiLFxuXHRkZWZhdWx0RWxlbWVudDogXCI8aW5wdXQ+XCIsXG5cdG9wdGlvbnM6IHtcblx0XHRhcHBlbmRUbzogbnVsbCxcblx0XHRhdXRvRm9jdXM6IGZhbHNlLFxuXHRcdGRlbGF5OiAzMDAsXG5cdFx0bWluTGVuZ3RoOiAxLFxuXHRcdHBvc2l0aW9uOiB7XG5cdFx0XHRteTogXCJsZWZ0IHRvcFwiLFxuXHRcdFx0YXQ6IFwibGVmdCBib3R0b21cIixcblx0XHRcdGNvbGxpc2lvbjogXCJub25lXCJcblx0XHR9LFxuXHRcdHNvdXJjZTogbnVsbCxcblxuXHRcdC8vIENhbGxiYWNrc1xuXHRcdGNoYW5nZTogbnVsbCxcblx0XHRjbG9zZTogbnVsbCxcblx0XHRmb2N1czogbnVsbCxcblx0XHRvcGVuOiBudWxsLFxuXHRcdHJlc3BvbnNlOiBudWxsLFxuXHRcdHNlYXJjaDogbnVsbCxcblx0XHRzZWxlY3Q6IG51bGxcblx0fSxcblxuXHRyZXF1ZXN0SW5kZXg6IDAsXG5cdHBlbmRpbmc6IDAsXG5cblx0X2NyZWF0ZTogZnVuY3Rpb24oKSB7XG5cblx0XHQvLyBTb21lIGJyb3dzZXJzIG9ubHkgcmVwZWF0IGtleWRvd24gZXZlbnRzLCBub3Qga2V5cHJlc3MgZXZlbnRzLFxuXHRcdC8vIHNvIHdlIHVzZSB0aGUgc3VwcHJlc3NLZXlQcmVzcyBmbGFnIHRvIGRldGVybWluZSBpZiB3ZSd2ZSBhbHJlYWR5XG5cdFx0Ly8gaGFuZGxlZCB0aGUga2V5ZG93biBldmVudC4gIzcyNjlcblx0XHQvLyBVbmZvcnR1bmF0ZWx5IHRoZSBjb2RlIGZvciAmIGluIGtleXByZXNzIGlzIHRoZSBzYW1lIGFzIHRoZSB1cCBhcnJvdyxcblx0XHQvLyBzbyB3ZSB1c2UgdGhlIHN1cHByZXNzS2V5UHJlc3NSZXBlYXQgZmxhZyB0byBhdm9pZCBoYW5kbGluZyBrZXlwcmVzc1xuXHRcdC8vIGV2ZW50cyB3aGVuIHdlIGtub3cgdGhlIGtleWRvd24gZXZlbnQgd2FzIHVzZWQgdG8gbW9kaWZ5IHRoZVxuXHRcdC8vIHNlYXJjaCB0ZXJtLiAjNzc5OVxuXHRcdHZhciBzdXBwcmVzc0tleVByZXNzLCBzdXBwcmVzc0tleVByZXNzUmVwZWF0LCBzdXBwcmVzc0lucHV0LFxuXHRcdFx0bm9kZU5hbWUgPSB0aGlzLmVsZW1lbnRbIDAgXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0aXNUZXh0YXJlYSA9IG5vZGVOYW1lID09PSBcInRleHRhcmVhXCIsXG5cdFx0XHRpc0lucHV0ID0gbm9kZU5hbWUgPT09IFwiaW5wdXRcIjtcblxuXHRcdC8vIFRleHRhcmVhcyBhcmUgYWx3YXlzIG11bHRpLWxpbmVcblx0XHQvLyBJbnB1dHMgYXJlIGFsd2F5cyBzaW5nbGUtbGluZSwgZXZlbiBpZiBpbnNpZGUgYSBjb250ZW50RWRpdGFibGUgZWxlbWVudFxuXHRcdC8vIElFIGFsc28gdHJlYXRzIGlucHV0cyBhcyBjb250ZW50RWRpdGFibGVcblx0XHQvLyBBbGwgb3RoZXIgZWxlbWVudCB0eXBlcyBhcmUgZGV0ZXJtaW5lZCBieSB3aGV0aGVyIG9yIG5vdCB0aGV5J3JlIGNvbnRlbnRFZGl0YWJsZVxuXHRcdHRoaXMuaXNNdWx0aUxpbmUgPSBpc1RleHRhcmVhIHx8ICFpc0lucHV0ICYmIHRoaXMuX2lzQ29udGVudEVkaXRhYmxlKCB0aGlzLmVsZW1lbnQgKTtcblxuXHRcdHRoaXMudmFsdWVNZXRob2QgPSB0aGlzLmVsZW1lbnRbIGlzVGV4dGFyZWEgfHwgaXNJbnB1dCA/IFwidmFsXCIgOiBcInRleHRcIiBdO1xuXHRcdHRoaXMuaXNOZXdNZW51ID0gdHJ1ZTtcblxuXHRcdHRoaXMuX2FkZENsYXNzKCBcInVpLWF1dG9jb21wbGV0ZS1pbnB1dFwiICk7XG5cdFx0dGhpcy5lbGVtZW50LmF0dHIoIFwiYXV0b2NvbXBsZXRlXCIsIFwib2ZmXCIgKTtcblxuXHRcdHRoaXMuX29uKCB0aGlzLmVsZW1lbnQsIHtcblx0XHRcdGtleWRvd246IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0aWYgKCB0aGlzLmVsZW1lbnQucHJvcCggXCJyZWFkT25seVwiICkgKSB7XG5cdFx0XHRcdFx0c3VwcHJlc3NLZXlQcmVzcyA9IHRydWU7XG5cdFx0XHRcdFx0c3VwcHJlc3NJbnB1dCA9IHRydWU7XG5cdFx0XHRcdFx0c3VwcHJlc3NLZXlQcmVzc1JlcGVhdCA9IHRydWU7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c3VwcHJlc3NLZXlQcmVzcyA9IGZhbHNlO1xuXHRcdFx0XHRzdXBwcmVzc0lucHV0ID0gZmFsc2U7XG5cdFx0XHRcdHN1cHByZXNzS2V5UHJlc3NSZXBlYXQgPSBmYWxzZTtcblx0XHRcdFx0dmFyIGtleUNvZGUgPSAkLnVpLmtleUNvZGU7XG5cdFx0XHRcdHN3aXRjaCAoIGV2ZW50LmtleUNvZGUgKSB7XG5cdFx0XHRcdGNhc2Uga2V5Q29kZS5QQUdFX1VQOlxuXHRcdFx0XHRcdHN1cHByZXNzS2V5UHJlc3MgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXMuX21vdmUoIFwicHJldmlvdXNQYWdlXCIsIGV2ZW50ICk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2Uga2V5Q29kZS5QQUdFX0RPV046XG5cdFx0XHRcdFx0c3VwcHJlc3NLZXlQcmVzcyA9IHRydWU7XG5cdFx0XHRcdFx0dGhpcy5fbW92ZSggXCJuZXh0UGFnZVwiLCBldmVudCApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIGtleUNvZGUuVVA6XG5cdFx0XHRcdFx0c3VwcHJlc3NLZXlQcmVzcyA9IHRydWU7XG5cdFx0XHRcdFx0dGhpcy5fa2V5RXZlbnQoIFwicHJldmlvdXNcIiwgZXZlbnQgKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBrZXlDb2RlLkRPV046XG5cdFx0XHRcdFx0c3VwcHJlc3NLZXlQcmVzcyA9IHRydWU7XG5cdFx0XHRcdFx0dGhpcy5fa2V5RXZlbnQoIFwibmV4dFwiLCBldmVudCApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIGtleUNvZGUuRU5URVI6XG5cblx0XHRcdFx0XHQvLyB3aGVuIG1lbnUgaXMgb3BlbiBhbmQgaGFzIGZvY3VzXG5cdFx0XHRcdFx0aWYgKCB0aGlzLm1lbnUuYWN0aXZlICkge1xuXG5cdFx0XHRcdFx0XHQvLyAjNjA1NSAtIE9wZXJhIHN0aWxsIGFsbG93cyB0aGUga2V5cHJlc3MgdG8gb2NjdXJcblx0XHRcdFx0XHRcdC8vIHdoaWNoIGNhdXNlcyBmb3JtcyB0byBzdWJtaXRcblx0XHRcdFx0XHRcdHN1cHByZXNzS2V5UHJlc3MgPSB0cnVlO1xuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdHRoaXMubWVudS5zZWxlY3QoIGV2ZW50ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIGtleUNvZGUuVEFCOlxuXHRcdFx0XHRcdGlmICggdGhpcy5tZW51LmFjdGl2ZSApIHtcblx0XHRcdFx0XHRcdHRoaXMubWVudS5zZWxlY3QoIGV2ZW50ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIGtleUNvZGUuRVNDQVBFOlxuXHRcdFx0XHRcdGlmICggdGhpcy5tZW51LmVsZW1lbnQuaXMoIFwiOnZpc2libGVcIiApICkge1xuXHRcdFx0XHRcdFx0aWYgKCAhdGhpcy5pc011bHRpTGluZSApIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fdmFsdWUoIHRoaXMudGVybSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5jbG9zZSggZXZlbnQgKTtcblxuXHRcdFx0XHRcdFx0Ly8gRGlmZmVyZW50IGJyb3dzZXJzIGhhdmUgZGlmZmVyZW50IGRlZmF1bHQgYmVoYXZpb3IgZm9yIGVzY2FwZVxuXHRcdFx0XHRcdFx0Ly8gU2luZ2xlIHByZXNzIGNhbiBtZWFuIHVuZG8gb3IgY2xlYXJcblx0XHRcdFx0XHRcdC8vIERvdWJsZSBwcmVzcyBpbiBJRSBtZWFucyBjbGVhciB0aGUgd2hvbGUgZm9ybVxuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0c3VwcHJlc3NLZXlQcmVzc1JlcGVhdCA9IHRydWU7XG5cblx0XHRcdFx0XHQvLyBzZWFyY2ggdGltZW91dCBzaG91bGQgYmUgdHJpZ2dlcmVkIGJlZm9yZSB0aGUgaW5wdXQgdmFsdWUgaXMgY2hhbmdlZFxuXHRcdFx0XHRcdHRoaXMuX3NlYXJjaFRpbWVvdXQoIGV2ZW50ICk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRrZXlwcmVzczogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHRpZiAoIHN1cHByZXNzS2V5UHJlc3MgKSB7XG5cdFx0XHRcdFx0c3VwcHJlc3NLZXlQcmVzcyA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmICggIXRoaXMuaXNNdWx0aUxpbmUgfHwgdGhpcy5tZW51LmVsZW1lbnQuaXMoIFwiOnZpc2libGVcIiApICkge1xuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggc3VwcHJlc3NLZXlQcmVzc1JlcGVhdCApIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXBsaWNhdGUgc29tZSBrZXkgaGFuZGxlcnMgdG8gYWxsb3cgdGhlbSB0byByZXBlYXQgaW4gRmlyZWZveCBhbmQgT3BlcmFcblx0XHRcdFx0dmFyIGtleUNvZGUgPSAkLnVpLmtleUNvZGU7XG5cdFx0XHRcdHN3aXRjaCAoIGV2ZW50LmtleUNvZGUgKSB7XG5cdFx0XHRcdGNhc2Uga2V5Q29kZS5QQUdFX1VQOlxuXHRcdFx0XHRcdHRoaXMuX21vdmUoIFwicHJldmlvdXNQYWdlXCIsIGV2ZW50ICk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2Uga2V5Q29kZS5QQUdFX0RPV046XG5cdFx0XHRcdFx0dGhpcy5fbW92ZSggXCJuZXh0UGFnZVwiLCBldmVudCApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIGtleUNvZGUuVVA6XG5cdFx0XHRcdFx0dGhpcy5fa2V5RXZlbnQoIFwicHJldmlvdXNcIiwgZXZlbnQgKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBrZXlDb2RlLkRPV046XG5cdFx0XHRcdFx0dGhpcy5fa2V5RXZlbnQoIFwibmV4dFwiLCBldmVudCApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0aW5wdXQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0aWYgKCBzdXBwcmVzc0lucHV0ICkge1xuXHRcdFx0XHRcdHN1cHByZXNzSW5wdXQgPSBmYWxzZTtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl9zZWFyY2hUaW1lb3V0KCBldmVudCApO1xuXHRcdFx0fSxcblx0XHRcdGZvY3VzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW0gPSBudWxsO1xuXHRcdFx0XHR0aGlzLnByZXZpb3VzID0gdGhpcy5fdmFsdWUoKTtcblx0XHRcdH0sXG5cdFx0XHRibHVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdGlmICggdGhpcy5jYW5jZWxCbHVyICkge1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLmNhbmNlbEJsdXI7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2xlYXJUaW1lb3V0KCB0aGlzLnNlYXJjaGluZyApO1xuXHRcdFx0XHR0aGlzLmNsb3NlKCBldmVudCApO1xuXHRcdFx0XHR0aGlzLl9jaGFuZ2UoIGV2ZW50ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdFx0dGhpcy5faW5pdFNvdXJjZSgpO1xuXHRcdHRoaXMubWVudSA9ICQoIFwiPHVsPlwiIClcblx0XHRcdC5hcHBlbmRUbyggdGhpcy5fYXBwZW5kVG8oKSApXG5cdFx0XHQubWVudSgge1xuXG5cdFx0XHRcdC8vIGRpc2FibGUgQVJJQSBzdXBwb3J0LCB0aGUgbGl2ZSByZWdpb24gdGFrZXMgY2FyZSBvZiB0aGF0XG5cdFx0XHRcdHJvbGU6IG51bGxcblx0XHRcdH0gKVxuXHRcdFx0LmhpZGUoKVxuXHRcdFx0Lm1lbnUoIFwiaW5zdGFuY2VcIiApO1xuXG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMubWVudS5lbGVtZW50LCBcInVpLWF1dG9jb21wbGV0ZVwiLCBcInVpLWZyb250XCIgKTtcblx0XHR0aGlzLl9vbiggdGhpcy5tZW51LmVsZW1lbnQsIHtcblx0XHRcdG1vdXNlZG93bjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRcdC8vIHByZXZlbnQgbW92aW5nIGZvY3VzIG91dCBvZiB0aGUgdGV4dCBmaWVsZFxuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHRcdC8vIElFIGRvZXNuJ3QgcHJldmVudCBtb3ZpbmcgZm9jdXMgZXZlbiB3aXRoIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblx0XHRcdFx0Ly8gc28gd2Ugc2V0IGEgZmxhZyB0byBrbm93IHdoZW4gd2Ugc2hvdWxkIGlnbm9yZSB0aGUgYmx1ciBldmVudFxuXHRcdFx0XHR0aGlzLmNhbmNlbEJsdXIgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLl9kZWxheSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMuY2FuY2VsQmx1cjtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDggb25seVxuXHRcdFx0XHRcdC8vIFJpZ2h0IGNsaWNraW5nIGEgbWVudSBpdGVtIG9yIHNlbGVjdGluZyB0ZXh0IGZyb20gdGhlIG1lbnUgaXRlbXMgd2lsbFxuXHRcdFx0XHRcdC8vIHJlc3VsdCBpbiBmb2N1cyBtb3Zpbmcgb3V0IG9mIHRoZSBpbnB1dC4gSG93ZXZlciwgd2UndmUgYWxyZWFkeSByZWNlaXZlZFxuXHRcdFx0XHRcdC8vIGFuZCBpZ25vcmVkIHRoZSBibHVyIGV2ZW50IGJlY2F1c2Ugb2YgdGhlIGNhbmNlbEJsdXIgZmxhZyBzZXQgYWJvdmUuIFNvXG5cdFx0XHRcdFx0Ly8gd2UgcmVzdG9yZSBmb2N1cyB0byBlbnN1cmUgdGhhdCB0aGUgbWVudSBjbG9zZXMgcHJvcGVybHkgYmFzZWQgb24gdGhlIHVzZXInc1xuXHRcdFx0XHRcdC8vIG5leHQgYWN0aW9ucy5cblx0XHRcdFx0XHRpZiAoIHRoaXMuZWxlbWVudFsgMCBdICE9PSAkLnVpLnNhZmVBY3RpdmVFbGVtZW50KCB0aGlzLmRvY3VtZW50WyAwIF0gKSApIHtcblx0XHRcdFx0XHRcdHRoaXMuZWxlbWVudC50cmlnZ2VyKCBcImZvY3VzXCIgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdH0sXG5cdFx0XHRtZW51Zm9jdXM6IGZ1bmN0aW9uKCBldmVudCwgdWkgKSB7XG5cdFx0XHRcdHZhciBsYWJlbCwgaXRlbTtcblxuXHRcdFx0XHQvLyBzdXBwb3J0OiBGaXJlZm94XG5cdFx0XHRcdC8vIFByZXZlbnQgYWNjaWRlbnRhbCBhY3RpdmF0aW9uIG9mIG1lbnUgaXRlbXMgaW4gRmlyZWZveCAoIzcwMjQgIzkxMTgpXG5cdFx0XHRcdGlmICggdGhpcy5pc05ld01lbnUgKSB7XG5cdFx0XHRcdFx0dGhpcy5pc05ld01lbnUgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAoIGV2ZW50Lm9yaWdpbmFsRXZlbnQgJiYgL15tb3VzZS8udGVzdCggZXZlbnQub3JpZ2luYWxFdmVudC50eXBlICkgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm1lbnUuYmx1cigpO1xuXG5cdFx0XHRcdFx0XHR0aGlzLmRvY3VtZW50Lm9uZSggXCJtb3VzZW1vdmVcIiwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdCQoIGV2ZW50LnRhcmdldCApLnRyaWdnZXIoIGV2ZW50Lm9yaWdpbmFsRXZlbnQgKTtcblx0XHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGl0ZW0gPSB1aS5pdGVtLmRhdGEoIFwidWktYXV0b2NvbXBsZXRlLWl0ZW1cIiApO1xuXHRcdFx0XHRpZiAoIGZhbHNlICE9PSB0aGlzLl90cmlnZ2VyKCBcImZvY3VzXCIsIGV2ZW50LCB7IGl0ZW06IGl0ZW0gfSApICkge1xuXG5cdFx0XHRcdFx0Ly8gdXNlIHZhbHVlIHRvIG1hdGNoIHdoYXQgd2lsbCBlbmQgdXAgaW4gdGhlIGlucHV0LCBpZiBpdCB3YXMgYSBrZXkgZXZlbnRcblx0XHRcdFx0XHRpZiAoIGV2ZW50Lm9yaWdpbmFsRXZlbnQgJiYgL15rZXkvLnRlc3QoIGV2ZW50Lm9yaWdpbmFsRXZlbnQudHlwZSApICkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdmFsdWUoIGl0ZW0udmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBbm5vdW5jZSB0aGUgdmFsdWUgaW4gdGhlIGxpdmVSZWdpb25cblx0XHRcdFx0bGFiZWwgPSB1aS5pdGVtLmF0dHIoIFwiYXJpYS1sYWJlbFwiICkgfHwgaXRlbS52YWx1ZTtcblx0XHRcdFx0aWYgKCBsYWJlbCAmJiAkLnRyaW0oIGxhYmVsICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdHRoaXMubGl2ZVJlZ2lvbi5jaGlsZHJlbigpLmhpZGUoKTtcblx0XHRcdFx0XHQkKCBcIjxkaXY+XCIgKS50ZXh0KCBsYWJlbCApLmFwcGVuZFRvKCB0aGlzLmxpdmVSZWdpb24gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG1lbnVzZWxlY3Q6IGZ1bmN0aW9uKCBldmVudCwgdWkgKSB7XG5cdFx0XHRcdHZhciBpdGVtID0gdWkuaXRlbS5kYXRhKCBcInVpLWF1dG9jb21wbGV0ZS1pdGVtXCIgKSxcblx0XHRcdFx0XHRwcmV2aW91cyA9IHRoaXMucHJldmlvdXM7XG5cblx0XHRcdFx0Ly8gT25seSB0cmlnZ2VyIHdoZW4gZm9jdXMgd2FzIGxvc3QgKGNsaWNrIG9uIG1lbnUpXG5cdFx0XHRcdGlmICggdGhpcy5lbGVtZW50WyAwIF0gIT09ICQudWkuc2FmZUFjdGl2ZUVsZW1lbnQoIHRoaXMuZG9jdW1lbnRbIDAgXSApICkge1xuXHRcdFx0XHRcdHRoaXMuZWxlbWVudC50cmlnZ2VyKCBcImZvY3VzXCIgKTtcblx0XHRcdFx0XHR0aGlzLnByZXZpb3VzID0gcHJldmlvdXM7XG5cblx0XHRcdFx0XHQvLyAjNjEwOSAtIElFIHRyaWdnZXJzIHR3byBmb2N1cyBldmVudHMgYW5kIHRoZSBzZWNvbmRcblx0XHRcdFx0XHQvLyBpcyBhc3luY2hyb25vdXMsIHNvIHdlIG5lZWQgdG8gcmVzZXQgdGhlIHByZXZpb3VzXG5cdFx0XHRcdFx0Ly8gdGVybSBzeW5jaHJvbm91c2x5IGFuZCBhc3luY2hyb25vdXNseSA6LShcblx0XHRcdFx0XHR0aGlzLl9kZWxheSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnByZXZpb3VzID0gcHJldmlvdXM7XG5cdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbSA9IGl0ZW07XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBmYWxzZSAhPT0gdGhpcy5fdHJpZ2dlciggXCJzZWxlY3RcIiwgZXZlbnQsIHsgaXRlbTogaXRlbSB9ICkgKSB7XG5cdFx0XHRcdFx0dGhpcy5fdmFsdWUoIGl0ZW0udmFsdWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIHJlc2V0IHRoZSB0ZXJtIGFmdGVyIHRoZSBzZWxlY3QgZXZlbnRcblx0XHRcdFx0Ly8gdGhpcyBhbGxvd3MgY3VzdG9tIHNlbGVjdCBoYW5kbGluZyB0byB3b3JrIHByb3Blcmx5XG5cdFx0XHRcdHRoaXMudGVybSA9IHRoaXMuX3ZhbHVlKCk7XG5cblx0XHRcdFx0dGhpcy5jbG9zZSggZXZlbnQgKTtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW0gPSBpdGVtO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdHRoaXMubGl2ZVJlZ2lvbiA9ICQoIFwiPGRpdj5cIiwge1xuXHRcdFx0cm9sZTogXCJzdGF0dXNcIixcblx0XHRcdFwiYXJpYS1saXZlXCI6IFwiYXNzZXJ0aXZlXCIsXG5cdFx0XHRcImFyaWEtcmVsZXZhbnRcIjogXCJhZGRpdGlvbnNcIlxuXHRcdH0gKVxuXHRcdFx0LmFwcGVuZFRvKCB0aGlzLmRvY3VtZW50WyAwIF0uYm9keSApO1xuXG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMubGl2ZVJlZ2lvbiwgbnVsbCwgXCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGVcIiApO1xuXG5cdFx0Ly8gVHVybmluZyBvZmYgYXV0b2NvbXBsZXRlIHByZXZlbnRzIHRoZSBicm93c2VyIGZyb20gcmVtZW1iZXJpbmcgdGhlXG5cdFx0Ly8gdmFsdWUgd2hlbiBuYXZpZ2F0aW5nIHRocm91Z2ggaGlzdG9yeSwgc28gd2UgcmUtZW5hYmxlIGF1dG9jb21wbGV0ZVxuXHRcdC8vIGlmIHRoZSBwYWdlIGlzIHVubG9hZGVkIGJlZm9yZSB0aGUgd2lkZ2V0IGlzIGRlc3Ryb3llZC4gIzc3OTBcblx0XHR0aGlzLl9vbiggdGhpcy53aW5kb3csIHtcblx0XHRcdGJlZm9yZXVubG9hZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyKCBcImF1dG9jb21wbGV0ZVwiICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdF9kZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHRjbGVhclRpbWVvdXQoIHRoaXMuc2VhcmNoaW5nICk7XG5cdFx0dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoIFwiYXV0b2NvbXBsZXRlXCIgKTtcblx0XHR0aGlzLm1lbnUuZWxlbWVudC5yZW1vdmUoKTtcblx0XHR0aGlzLmxpdmVSZWdpb24ucmVtb3ZlKCk7XG5cdH0sXG5cblx0X3NldE9wdGlvbjogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dGhpcy5fc3VwZXIoIGtleSwgdmFsdWUgKTtcblx0XHRpZiAoIGtleSA9PT0gXCJzb3VyY2VcIiApIHtcblx0XHRcdHRoaXMuX2luaXRTb3VyY2UoKTtcblx0XHR9XG5cdFx0aWYgKCBrZXkgPT09IFwiYXBwZW5kVG9cIiApIHtcblx0XHRcdHRoaXMubWVudS5lbGVtZW50LmFwcGVuZFRvKCB0aGlzLl9hcHBlbmRUbygpICk7XG5cdFx0fVxuXHRcdGlmICgga2V5ID09PSBcImRpc2FibGVkXCIgJiYgdmFsdWUgJiYgdGhpcy54aHIgKSB7XG5cdFx0XHR0aGlzLnhoci5hYm9ydCgpO1xuXHRcdH1cblx0fSxcblxuXHRfaXNFdmVudFRhcmdldEluV2lkZ2V0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIG1lbnVFbGVtZW50ID0gdGhpcy5tZW51LmVsZW1lbnRbIDAgXTtcblxuXHRcdHJldHVybiBldmVudC50YXJnZXQgPT09IHRoaXMuZWxlbWVudFsgMCBdIHx8XG5cdFx0XHRldmVudC50YXJnZXQgPT09IG1lbnVFbGVtZW50IHx8XG5cdFx0XHQkLmNvbnRhaW5zKCBtZW51RWxlbWVudCwgZXZlbnQudGFyZ2V0ICk7XG5cdH0sXG5cblx0X2Nsb3NlT25DbGlja091dHNpZGU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRpZiAoICF0aGlzLl9pc0V2ZW50VGFyZ2V0SW5XaWRnZXQoIGV2ZW50ICkgKSB7XG5cdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdF9hcHBlbmRUbzogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLm9wdGlvbnMuYXBwZW5kVG87XG5cblx0XHRpZiAoIGVsZW1lbnQgKSB7XG5cdFx0XHRlbGVtZW50ID0gZWxlbWVudC5qcXVlcnkgfHwgZWxlbWVudC5ub2RlVHlwZSA/XG5cdFx0XHRcdCQoIGVsZW1lbnQgKSA6XG5cdFx0XHRcdHRoaXMuZG9jdW1lbnQuZmluZCggZWxlbWVudCApLmVxKCAwICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhZWxlbWVudCB8fCAhZWxlbWVudFsgMCBdICkge1xuXHRcdFx0ZWxlbWVudCA9IHRoaXMuZWxlbWVudC5jbG9zZXN0KCBcIi51aS1mcm9udCwgZGlhbG9nXCIgKTtcblx0XHR9XG5cblx0XHRpZiAoICFlbGVtZW50Lmxlbmd0aCApIHtcblx0XHRcdGVsZW1lbnQgPSB0aGlzLmRvY3VtZW50WyAwIF0uYm9keTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fSxcblxuXHRfaW5pdFNvdXJjZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGFycmF5LCB1cmwsXG5cdFx0XHR0aGF0ID0gdGhpcztcblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHRoaXMub3B0aW9ucy5zb3VyY2UgKSApIHtcblx0XHRcdGFycmF5ID0gdGhpcy5vcHRpb25zLnNvdXJjZTtcblx0XHRcdHRoaXMuc291cmNlID0gZnVuY3Rpb24oIHJlcXVlc3QsIHJlc3BvbnNlICkge1xuXHRcdFx0XHRyZXNwb25zZSggJC51aS5hdXRvY29tcGxldGUuZmlsdGVyKCBhcnJheSwgcmVxdWVzdC50ZXJtICkgKTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmICggdHlwZW9mIHRoaXMub3B0aW9ucy5zb3VyY2UgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHR1cmwgPSB0aGlzLm9wdGlvbnMuc291cmNlO1xuXHRcdFx0dGhpcy5zb3VyY2UgPSBmdW5jdGlvbiggcmVxdWVzdCwgcmVzcG9uc2UgKSB7XG5cdFx0XHRcdGlmICggdGhhdC54aHIgKSB7XG5cdFx0XHRcdFx0dGhhdC54aHIuYWJvcnQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGF0LnhociA9ICQuYWpheCgge1xuXHRcdFx0XHRcdHVybDogdXJsLFxuXHRcdFx0XHRcdGRhdGE6IHJlcXVlc3QsXG5cdFx0XHRcdFx0ZGF0YVR5cGU6IFwianNvblwiLFxuXHRcdFx0XHRcdHN1Y2Nlc3M6IGZ1bmN0aW9uKCBkYXRhICkge1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UoIGRhdGEgKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9yOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlKCBbXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zb3VyY2UgPSB0aGlzLm9wdGlvbnMuc291cmNlO1xuXHRcdH1cblx0fSxcblxuXHRfc2VhcmNoVGltZW91dDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGNsZWFyVGltZW91dCggdGhpcy5zZWFyY2hpbmcgKTtcblx0XHR0aGlzLnNlYXJjaGluZyA9IHRoaXMuX2RlbGF5KCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gU2VhcmNoIGlmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZCwgb3IgaWYgdGhlIHVzZXIgcmV0eXBlcyB0aGUgc2FtZSB2YWx1ZSAoc2VlICM3NDM0KVxuXHRcdFx0dmFyIGVxdWFsVmFsdWVzID0gdGhpcy50ZXJtID09PSB0aGlzLl92YWx1ZSgpLFxuXHRcdFx0XHRtZW51VmlzaWJsZSA9IHRoaXMubWVudS5lbGVtZW50LmlzKCBcIjp2aXNpYmxlXCIgKSxcblx0XHRcdFx0bW9kaWZpZXJLZXkgPSBldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5O1xuXG5cdFx0XHRpZiAoICFlcXVhbFZhbHVlcyB8fCAoIGVxdWFsVmFsdWVzICYmICFtZW51VmlzaWJsZSAmJiAhbW9kaWZpZXJLZXkgKSApIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW0gPSBudWxsO1xuXHRcdFx0XHR0aGlzLnNlYXJjaCggbnVsbCwgZXZlbnQgKTtcblx0XHRcdH1cblx0XHR9LCB0aGlzLm9wdGlvbnMuZGVsYXkgKTtcblx0fSxcblxuXHRzZWFyY2g6IGZ1bmN0aW9uKCB2YWx1ZSwgZXZlbnQgKSB7XG5cdFx0dmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gdmFsdWUgOiB0aGlzLl92YWx1ZSgpO1xuXG5cdFx0Ly8gQWx3YXlzIHNhdmUgdGhlIGFjdHVhbCB2YWx1ZSwgbm90IHRoZSBvbmUgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG5cdFx0dGhpcy50ZXJtID0gdGhpcy5fdmFsdWUoKTtcblxuXHRcdGlmICggdmFsdWUubGVuZ3RoIDwgdGhpcy5vcHRpb25zLm1pbkxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmNsb3NlKCBldmVudCApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5fdHJpZ2dlciggXCJzZWFyY2hcIiwgZXZlbnQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX3NlYXJjaCggdmFsdWUgKTtcblx0fSxcblxuXHRfc2VhcmNoOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dGhpcy5wZW5kaW5nKys7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIFwidWktYXV0b2NvbXBsZXRlLWxvYWRpbmdcIiApO1xuXHRcdHRoaXMuY2FuY2VsU2VhcmNoID0gZmFsc2U7XG5cblx0XHR0aGlzLnNvdXJjZSggeyB0ZXJtOiB2YWx1ZSB9LCB0aGlzLl9yZXNwb25zZSgpICk7XG5cdH0sXG5cblx0X3Jlc3BvbnNlOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW5kZXggPSArK3RoaXMucmVxdWVzdEluZGV4O1xuXG5cdFx0cmV0dXJuICQucHJveHkoIGZ1bmN0aW9uKCBjb250ZW50ICkge1xuXHRcdFx0aWYgKCBpbmRleCA9PT0gdGhpcy5yZXF1ZXN0SW5kZXggKSB7XG5cdFx0XHRcdHRoaXMuX19yZXNwb25zZSggY29udGVudCApO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnBlbmRpbmctLTtcblx0XHRcdGlmICggIXRoaXMucGVuZGluZyApIHtcblx0XHRcdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIFwidWktYXV0b2NvbXBsZXRlLWxvYWRpbmdcIiApO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMgKTtcblx0fSxcblxuXHRfX3Jlc3BvbnNlOiBmdW5jdGlvbiggY29udGVudCApIHtcblx0XHRpZiAoIGNvbnRlbnQgKSB7XG5cdFx0XHRjb250ZW50ID0gdGhpcy5fbm9ybWFsaXplKCBjb250ZW50ICk7XG5cdFx0fVxuXHRcdHRoaXMuX3RyaWdnZXIoIFwicmVzcG9uc2VcIiwgbnVsbCwgeyBjb250ZW50OiBjb250ZW50IH0gKTtcblx0XHRpZiAoICF0aGlzLm9wdGlvbnMuZGlzYWJsZWQgJiYgY29udGVudCAmJiBjb250ZW50Lmxlbmd0aCAmJiAhdGhpcy5jYW5jZWxTZWFyY2ggKSB7XG5cdFx0XHR0aGlzLl9zdWdnZXN0KCBjb250ZW50ICk7XG5cdFx0XHR0aGlzLl90cmlnZ2VyKCBcIm9wZW5cIiApO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIHVzZSAuX2Nsb3NlKCkgaW5zdGVhZCBvZiAuY2xvc2UoKSBzbyB3ZSBkb24ndCBjYW5jZWwgZnV0dXJlIHNlYXJjaGVzXG5cdFx0XHR0aGlzLl9jbG9zZSgpO1xuXHRcdH1cblx0fSxcblxuXHRjbG9zZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHRoaXMuY2FuY2VsU2VhcmNoID0gdHJ1ZTtcblx0XHR0aGlzLl9jbG9zZSggZXZlbnQgKTtcblx0fSxcblxuXHRfY2xvc2U6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdC8vIFJlbW92ZSB0aGUgaGFuZGxlciB0aGF0IGNsb3NlcyB0aGUgbWVudSBvbiBvdXRzaWRlIGNsaWNrc1xuXHRcdHRoaXMuX29mZiggdGhpcy5kb2N1bWVudCwgXCJtb3VzZWRvd25cIiApO1xuXG5cdFx0aWYgKCB0aGlzLm1lbnUuZWxlbWVudC5pcyggXCI6dmlzaWJsZVwiICkgKSB7XG5cdFx0XHR0aGlzLm1lbnUuZWxlbWVudC5oaWRlKCk7XG5cdFx0XHR0aGlzLm1lbnUuYmx1cigpO1xuXHRcdFx0dGhpcy5pc05ld01lbnUgPSB0cnVlO1xuXHRcdFx0dGhpcy5fdHJpZ2dlciggXCJjbG9zZVwiLCBldmVudCApO1xuXHRcdH1cblx0fSxcblxuXHRfY2hhbmdlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0aWYgKCB0aGlzLnByZXZpb3VzICE9PSB0aGlzLl92YWx1ZSgpICkge1xuXHRcdFx0dGhpcy5fdHJpZ2dlciggXCJjaGFuZ2VcIiwgZXZlbnQsIHsgaXRlbTogdGhpcy5zZWxlY3RlZEl0ZW0gfSApO1xuXHRcdH1cblx0fSxcblxuXHRfbm9ybWFsaXplOiBmdW5jdGlvbiggaXRlbXMgKSB7XG5cblx0XHQvLyBhc3N1bWUgYWxsIGl0ZW1zIGhhdmUgdGhlIHJpZ2h0IGZvcm1hdCB3aGVuIHRoZSBmaXJzdCBpdGVtIGlzIGNvbXBsZXRlXG5cdFx0aWYgKCBpdGVtcy5sZW5ndGggJiYgaXRlbXNbIDAgXS5sYWJlbCAmJiBpdGVtc1sgMCBdLnZhbHVlICkge1xuXHRcdFx0cmV0dXJuIGl0ZW1zO1xuXHRcdH1cblx0XHRyZXR1cm4gJC5tYXAoIGl0ZW1zLCBmdW5jdGlvbiggaXRlbSApIHtcblx0XHRcdGlmICggdHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0bGFiZWw6IGl0ZW0sXG5cdFx0XHRcdFx0dmFsdWU6IGl0ZW1cblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiAkLmV4dGVuZCgge30sIGl0ZW0sIHtcblx0XHRcdFx0bGFiZWw6IGl0ZW0ubGFiZWwgfHwgaXRlbS52YWx1ZSxcblx0XHRcdFx0dmFsdWU6IGl0ZW0udmFsdWUgfHwgaXRlbS5sYWJlbFxuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRfc3VnZ2VzdDogZnVuY3Rpb24oIGl0ZW1zICkge1xuXHRcdHZhciB1bCA9IHRoaXMubWVudS5lbGVtZW50LmVtcHR5KCk7XG5cdFx0dGhpcy5fcmVuZGVyTWVudSggdWwsIGl0ZW1zICk7XG5cdFx0dGhpcy5pc05ld01lbnUgPSB0cnVlO1xuXHRcdHRoaXMubWVudS5yZWZyZXNoKCk7XG5cblx0XHQvLyBTaXplIGFuZCBwb3NpdGlvbiBtZW51XG5cdFx0dWwuc2hvdygpO1xuXHRcdHRoaXMuX3Jlc2l6ZU1lbnUoKTtcblx0XHR1bC5wb3NpdGlvbiggJC5leHRlbmQoIHtcblx0XHRcdG9mOiB0aGlzLmVsZW1lbnRcblx0XHR9LCB0aGlzLm9wdGlvbnMucG9zaXRpb24gKSApO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuYXV0b0ZvY3VzICkge1xuXHRcdFx0dGhpcy5tZW51Lm5leHQoKTtcblx0XHR9XG5cblx0XHQvLyBMaXN0ZW4gZm9yIGludGVyYWN0aW9ucyBvdXRzaWRlIG9mIHRoZSB3aWRnZXQgKCM2NjQyKVxuXHRcdHRoaXMuX29uKCB0aGlzLmRvY3VtZW50LCB7XG5cdFx0XHRtb3VzZWRvd246IFwiX2Nsb3NlT25DbGlja091dHNpZGVcIlxuXHRcdH0gKTtcblx0fSxcblxuXHRfcmVzaXplTWVudTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHVsID0gdGhpcy5tZW51LmVsZW1lbnQ7XG5cdFx0dWwub3V0ZXJXaWR0aCggTWF0aC5tYXgoXG5cblx0XHRcdC8vIEZpcmVmb3ggd3JhcHMgbG9uZyB0ZXh0IChwb3NzaWJseSBhIHJvdW5kaW5nIGJ1Zylcblx0XHRcdC8vIHNvIHdlIGFkZCAxcHggdG8gYXZvaWQgdGhlIHdyYXBwaW5nICgjNzUxMylcblx0XHRcdHVsLndpZHRoKCBcIlwiICkub3V0ZXJXaWR0aCgpICsgMSxcblx0XHRcdHRoaXMuZWxlbWVudC5vdXRlcldpZHRoKClcblx0XHQpICk7XG5cdH0sXG5cblx0X3JlbmRlck1lbnU6IGZ1bmN0aW9uKCB1bCwgaXRlbXMgKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzO1xuXHRcdCQuZWFjaCggaXRlbXMsIGZ1bmN0aW9uKCBpbmRleCwgaXRlbSApIHtcblx0XHRcdHRoYXQuX3JlbmRlckl0ZW1EYXRhKCB1bCwgaXRlbSApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRfcmVuZGVySXRlbURhdGE6IGZ1bmN0aW9uKCB1bCwgaXRlbSApIHtcblx0XHRyZXR1cm4gdGhpcy5fcmVuZGVySXRlbSggdWwsIGl0ZW0gKS5kYXRhKCBcInVpLWF1dG9jb21wbGV0ZS1pdGVtXCIsIGl0ZW0gKTtcblx0fSxcblxuXHRfcmVuZGVySXRlbTogZnVuY3Rpb24oIHVsLCBpdGVtICkge1xuXHRcdHJldHVybiAkKCBcIjxsaT5cIiApXG5cdFx0XHQuYXBwZW5kKCAkKCBcIjxkaXY+XCIgKS50ZXh0KCBpdGVtLmxhYmVsICkgKVxuXHRcdFx0LmFwcGVuZFRvKCB1bCApO1xuXHR9LFxuXG5cdF9tb3ZlOiBmdW5jdGlvbiggZGlyZWN0aW9uLCBldmVudCApIHtcblx0XHRpZiAoICF0aGlzLm1lbnUuZWxlbWVudC5pcyggXCI6dmlzaWJsZVwiICkgKSB7XG5cdFx0XHR0aGlzLnNlYXJjaCggbnVsbCwgZXZlbnQgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCB0aGlzLm1lbnUuaXNGaXJzdEl0ZW0oKSAmJiAvXnByZXZpb3VzLy50ZXN0KCBkaXJlY3Rpb24gKSB8fFxuXHRcdFx0XHR0aGlzLm1lbnUuaXNMYXN0SXRlbSgpICYmIC9ebmV4dC8udGVzdCggZGlyZWN0aW9uICkgKSB7XG5cblx0XHRcdGlmICggIXRoaXMuaXNNdWx0aUxpbmUgKSB7XG5cdFx0XHRcdHRoaXMuX3ZhbHVlKCB0aGlzLnRlcm0gKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5tZW51LmJsdXIoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5tZW51WyBkaXJlY3Rpb24gXSggZXZlbnQgKTtcblx0fSxcblxuXHR3aWRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1lbnUuZWxlbWVudDtcblx0fSxcblxuXHRfdmFsdWU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnZhbHVlTWV0aG9kLmFwcGx5KCB0aGlzLmVsZW1lbnQsIGFyZ3VtZW50cyApO1xuXHR9LFxuXG5cdF9rZXlFdmVudDogZnVuY3Rpb24oIGtleUV2ZW50LCBldmVudCApIHtcblx0XHRpZiAoICF0aGlzLmlzTXVsdGlMaW5lIHx8IHRoaXMubWVudS5lbGVtZW50LmlzKCBcIjp2aXNpYmxlXCIgKSApIHtcblx0XHRcdHRoaXMuX21vdmUoIGtleUV2ZW50LCBldmVudCApO1xuXG5cdFx0XHQvLyBQcmV2ZW50cyBtb3ZpbmcgY3Vyc29yIHRvIGJlZ2lubmluZy9lbmQgb2YgdGhlIHRleHQgZmllbGQgaW4gc29tZSBicm93c2Vyc1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NTBcblx0Ly8gV2Ugc2hvdWxkIGJlIGFibGUgdG8ganVzdCB1c2UgdGhpcy5lbGVtZW50LnByb3AoIFwiaXNDb250ZW50RWRpdGFibGVcIiApXG5cdC8vIGJ1dCBoaWRkZW4gZWxlbWVudHMgYWx3YXlzIHJlcG9ydCBmYWxzZSBpbiBDaHJvbWUuXG5cdC8vIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zMTMwODJcblx0X2lzQ29udGVudEVkaXRhYmxlOiBmdW5jdGlvbiggZWxlbWVudCApIHtcblx0XHRpZiAoICFlbGVtZW50Lmxlbmd0aCApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR2YXIgZWRpdGFibGUgPSBlbGVtZW50LnByb3AoIFwiY29udGVudEVkaXRhYmxlXCIgKTtcblxuXHRcdGlmICggZWRpdGFibGUgPT09IFwiaW5oZXJpdFwiICkge1xuXHRcdCAgcmV0dXJuIHRoaXMuX2lzQ29udGVudEVkaXRhYmxlKCBlbGVtZW50LnBhcmVudCgpICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVkaXRhYmxlID09PSBcInRydWVcIjtcblx0fVxufSApO1xuXG4kLmV4dGVuZCggJC51aS5hdXRvY29tcGxldGUsIHtcblx0ZXNjYXBlUmVnZXg6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gdmFsdWUucmVwbGFjZSggL1tcXC1cXFtcXF17fSgpKis/LixcXFxcXFxeJHwjXFxzXS9nLCBcIlxcXFwkJlwiICk7XG5cdH0sXG5cdGZpbHRlcjogZnVuY3Rpb24oIGFycmF5LCB0ZXJtICkge1xuXHRcdHZhciBtYXRjaGVyID0gbmV3IFJlZ0V4cCggJC51aS5hdXRvY29tcGxldGUuZXNjYXBlUmVnZXgoIHRlcm0gKSwgXCJpXCIgKTtcblx0XHRyZXR1cm4gJC5ncmVwKCBhcnJheSwgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXIudGVzdCggdmFsdWUubGFiZWwgfHwgdmFsdWUudmFsdWUgfHwgdmFsdWUgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuLy8gTGl2ZSByZWdpb24gZXh0ZW5zaW9uLCBhZGRpbmcgYSBgbWVzc2FnZXNgIG9wdGlvblxuLy8gTk9URTogVGhpcyBpcyBhbiBleHBlcmltZW50YWwgQVBJLiBXZSBhcmUgc3RpbGwgaW52ZXN0aWdhdGluZ1xuLy8gYSBmdWxsIHNvbHV0aW9uIGZvciBzdHJpbmcgbWFuaXB1bGF0aW9uIGFuZCBpbnRlcm5hdGlvbmFsaXphdGlvbi5cbiQud2lkZ2V0KCBcInVpLmF1dG9jb21wbGV0ZVwiLCAkLnVpLmF1dG9jb21wbGV0ZSwge1xuXHRvcHRpb25zOiB7XG5cdFx0bWVzc2FnZXM6IHtcblx0XHRcdG5vUmVzdWx0czogXCJObyBzZWFyY2ggcmVzdWx0cy5cIixcblx0XHRcdHJlc3VsdHM6IGZ1bmN0aW9uKCBhbW91bnQgKSB7XG5cdFx0XHRcdHJldHVybiBhbW91bnQgKyAoIGFtb3VudCA+IDEgPyBcIiByZXN1bHRzIGFyZVwiIDogXCIgcmVzdWx0IGlzXCIgKSArXG5cdFx0XHRcdFx0XCIgYXZhaWxhYmxlLCB1c2UgdXAgYW5kIGRvd24gYXJyb3cga2V5cyB0byBuYXZpZ2F0ZS5cIjtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0X19yZXNwb25zZTogZnVuY3Rpb24oIGNvbnRlbnQgKSB7XG5cdFx0dmFyIG1lc3NhZ2U7XG5cdFx0dGhpcy5fc3VwZXJBcHBseSggYXJndW1lbnRzICk7XG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgfHwgdGhpcy5jYW5jZWxTZWFyY2ggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICggY29udGVudCAmJiBjb250ZW50Lmxlbmd0aCApIHtcblx0XHRcdG1lc3NhZ2UgPSB0aGlzLm9wdGlvbnMubWVzc2FnZXMucmVzdWx0cyggY29udGVudC5sZW5ndGggKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWVzc2FnZSA9IHRoaXMub3B0aW9ucy5tZXNzYWdlcy5ub1Jlc3VsdHM7XG5cdFx0fVxuXHRcdHRoaXMubGl2ZVJlZ2lvbi5jaGlsZHJlbigpLmhpZGUoKTtcblx0XHQkKCBcIjxkaXY+XCIgKS50ZXh0KCBtZXNzYWdlICkuYXBwZW5kVG8oIHRoaXMubGl2ZVJlZ2lvbiApO1xuXHR9XG59ICk7XG5cbnZhciB3aWRnZXRzQXV0b2NvbXBsZXRlID0gJC51aS5hdXRvY29tcGxldGU7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgQ29udHJvbGdyb3VwIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiBDb250cm9sZ3JvdXBcbi8vPj5ncm91cDogV2lkZ2V0c1xuLy8+PmRlc2NyaXB0aW9uOiBWaXN1YWxseSBncm91cHMgZm9ybSBjb250cm9sIHdpZGdldHNcbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9jb250cm9sZ3JvdXAvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vY29udHJvbGdyb3VwL1xuLy8+PmNzcy5zdHJ1Y3R1cmU6IC4uLy4uL3RoZW1lcy9iYXNlL2NvcmUuY3NzXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvY29udHJvbGdyb3VwLmNzc1xuLy8+PmNzcy50aGVtZTogLi4vLi4vdGhlbWVzL2Jhc2UvdGhlbWUuY3NzXG5cblxudmFyIGNvbnRyb2xncm91cENvcm5lclJlZ2V4ID0gL3VpLWNvcm5lci0oW2Etel0pezIsNn0vZztcblxudmFyIHdpZGdldHNDb250cm9sZ3JvdXAgPSAkLndpZGdldCggXCJ1aS5jb250cm9sZ3JvdXBcIiwge1xuXHR2ZXJzaW9uOiBcIjEuMTIuMVwiLFxuXHRkZWZhdWx0RWxlbWVudDogXCI8ZGl2PlwiLFxuXHRvcHRpb25zOiB7XG5cdFx0ZGlyZWN0aW9uOiBcImhvcml6b250YWxcIixcblx0XHRkaXNhYmxlZDogbnVsbCxcblx0XHRvbmx5VmlzaWJsZTogdHJ1ZSxcblx0XHRpdGVtczoge1xuXHRcdFx0XCJidXR0b25cIjogXCJpbnB1dFt0eXBlPWJ1dHRvbl0sIGlucHV0W3R5cGU9c3VibWl0XSwgaW5wdXRbdHlwZT1yZXNldF0sIGJ1dHRvbiwgYVwiLFxuXHRcdFx0XCJjb250cm9sZ3JvdXBMYWJlbFwiOiBcIi51aS1jb250cm9sZ3JvdXAtbGFiZWxcIixcblx0XHRcdFwiY2hlY2tib3hyYWRpb1wiOiBcImlucHV0W3R5cGU9J2NoZWNrYm94J10sIGlucHV0W3R5cGU9J3JhZGlvJ11cIixcblx0XHRcdFwic2VsZWN0bWVudVwiOiBcInNlbGVjdFwiLFxuXHRcdFx0XCJzcGlubmVyXCI6IFwiLnVpLXNwaW5uZXItaW5wdXRcIlxuXHRcdH1cblx0fSxcblxuXHRfY3JlYXRlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLl9lbmhhbmNlKCk7XG5cdH0sXG5cblx0Ly8gVG8gc3VwcG9ydCB0aGUgZW5oYW5jZWQgb3B0aW9uIGluIGpRdWVyeSBNb2JpbGUsIHdlIGlzb2xhdGUgRE9NIG1hbmlwdWxhdGlvblxuXHRfZW5oYW5jZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5lbGVtZW50LmF0dHIoIFwicm9sZVwiLCBcInRvb2xiYXJcIiApO1xuXHRcdHRoaXMucmVmcmVzaCgpO1xuXHR9LFxuXG5cdF9kZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLl9jYWxsQ2hpbGRNZXRob2QoIFwiZGVzdHJveVwiICk7XG5cdFx0dGhpcy5jaGlsZFdpZGdldHMucmVtb3ZlRGF0YSggXCJ1aS1jb250cm9sZ3JvdXAtZGF0YVwiICk7XG5cdFx0dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoIFwicm9sZVwiICk7XG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuaXRlbXMuY29udHJvbGdyb3VwTGFiZWwgKSB7XG5cdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0LmZpbmQoIHRoaXMub3B0aW9ucy5pdGVtcy5jb250cm9sZ3JvdXBMYWJlbCApXG5cdFx0XHRcdC5maW5kKCBcIi51aS1jb250cm9sZ3JvdXAtbGFiZWwtY29udGVudHNcIiApXG5cdFx0XHRcdC5jb250ZW50cygpLnVud3JhcCgpO1xuXHRcdH1cblx0fSxcblxuXHRfaW5pdFdpZGdldHM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aGF0ID0gdGhpcyxcblx0XHRcdGNoaWxkV2lkZ2V0cyA9IFtdO1xuXG5cdFx0Ly8gRmlyc3Qgd2UgaXRlcmF0ZSBvdmVyIGVhY2ggb2YgdGhlIGl0ZW1zIG9wdGlvbnNcblx0XHQkLmVhY2goIHRoaXMub3B0aW9ucy5pdGVtcywgZnVuY3Rpb24oIHdpZGdldCwgc2VsZWN0b3IgKSB7XG5cdFx0XHR2YXIgbGFiZWxzO1xuXHRcdFx0dmFyIG9wdGlvbnMgPSB7fTtcblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoZSB3aWRnZXQgaGFzIGEgc2VsZWN0b3Igc2V0XG5cdFx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHdpZGdldCA9PT0gXCJjb250cm9sZ3JvdXBMYWJlbFwiICkge1xuXHRcdFx0XHRsYWJlbHMgPSB0aGF0LmVsZW1lbnQuZmluZCggc2VsZWN0b3IgKTtcblx0XHRcdFx0bGFiZWxzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHZhciBlbGVtZW50ID0gJCggdGhpcyApO1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtZW50LmNoaWxkcmVuKCBcIi51aS1jb250cm9sZ3JvdXAtbGFiZWwtY29udGVudHNcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxlbWVudC5jb250ZW50cygpXG5cdFx0XHRcdFx0XHQud3JhcEFsbCggXCI8c3BhbiBjbGFzcz0ndWktY29udHJvbGdyb3VwLWxhYmVsLWNvbnRlbnRzJz48L3NwYW4+XCIgKTtcblx0XHRcdFx0fSApO1xuXHRcdFx0XHR0aGF0Ll9hZGRDbGFzcyggbGFiZWxzLCBudWxsLCBcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1zdGF0ZS1kZWZhdWx0XCIgKTtcblx0XHRcdFx0Y2hpbGRXaWRnZXRzID0gY2hpbGRXaWRnZXRzLmNvbmNhdCggbGFiZWxzLmdldCgpICk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoZSB3aWRnZXQgYWN0dWFsbHkgZXhpc3RzXG5cdFx0XHRpZiAoICEkLmZuWyB3aWRnZXQgXSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBXZSBhc3N1bWUgZXZlcnl0aGluZyBpcyBpbiB0aGUgbWlkZGxlIHRvIHN0YXJ0IGJlY2F1c2Ugd2UgY2FuJ3QgZGV0ZXJtaW5lXG5cdFx0XHQvLyBmaXJzdCAvIGxhc3QgZWxlbWVudHMgdW50aWwgYWxsIGVuaGFuY21lbnRzIGFyZSBkb25lLlxuXHRcdFx0aWYgKCB0aGF0WyBcIl9cIiArIHdpZGdldCArIFwiT3B0aW9uc1wiIF0gKSB7XG5cdFx0XHRcdG9wdGlvbnMgPSB0aGF0WyBcIl9cIiArIHdpZGdldCArIFwiT3B0aW9uc1wiIF0oIFwibWlkZGxlXCIgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9wdGlvbnMgPSB7IGNsYXNzZXM6IHt9IH07XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZpbmQgaW5zdGFuY2VzIG9mIHRoaXMgd2lkZ2V0IGluc2lkZSBjb250cm9sZ3JvdXAgYW5kIGluaXQgdGhlbVxuXHRcdFx0dGhhdC5lbGVtZW50XG5cdFx0XHRcdC5maW5kKCBzZWxlY3RvciApXG5cdFx0XHRcdC5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHR2YXIgZWxlbWVudCA9ICQoIHRoaXMgKTtcblx0XHRcdFx0XHR2YXIgaW5zdGFuY2UgPSBlbGVtZW50WyB3aWRnZXQgXSggXCJpbnN0YW5jZVwiICk7XG5cblx0XHRcdFx0XHQvLyBXZSBuZWVkIHRvIGNsb25lIHRoZSBkZWZhdWx0IG9wdGlvbnMgZm9yIHRoaXMgdHlwZSBvZiB3aWRnZXQgdG8gYXZvaWRcblx0XHRcdFx0XHQvLyBwb2xsdXRpbmcgdGhlIHZhcmlhYmxlIG9wdGlvbnMgd2hpY2ggaGFzIGEgd2lkZXIgc2NvcGUgdGhhbiBhIHNpbmdsZSB3aWRnZXQuXG5cdFx0XHRcdFx0dmFyIGluc3RhbmNlT3B0aW9ucyA9ICQud2lkZ2V0LmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHRcdFx0XHRcdC8vIElmIHRoZSBidXR0b24gaXMgdGhlIGNoaWxkIG9mIGEgc3Bpbm5lciBpZ25vcmUgaXRcblx0XHRcdFx0XHQvLyBUT0RPOiBGaW5kIGEgbW9yZSBnZW5lcmljIHNvbHV0aW9uXG5cdFx0XHRcdFx0aWYgKCB3aWRnZXQgPT09IFwiYnV0dG9uXCIgJiYgZWxlbWVudC5wYXJlbnQoIFwiLnVpLXNwaW5uZXJcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBDcmVhdGUgdGhlIHdpZGdldCBpZiBpdCBkb2Vzbid0IGV4aXN0XG5cdFx0XHRcdFx0aWYgKCAhaW5zdGFuY2UgKSB7XG5cdFx0XHRcdFx0XHRpbnN0YW5jZSA9IGVsZW1lbnRbIHdpZGdldCBdKClbIHdpZGdldCBdKCBcImluc3RhbmNlXCIgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBpbnN0YW5jZSApIHtcblx0XHRcdFx0XHRcdGluc3RhbmNlT3B0aW9ucy5jbGFzc2VzID1cblx0XHRcdFx0XHRcdFx0dGhhdC5fcmVzb2x2ZUNsYXNzZXNWYWx1ZXMoIGluc3RhbmNlT3B0aW9ucy5jbGFzc2VzLCBpbnN0YW5jZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbGVtZW50WyB3aWRnZXQgXSggaW5zdGFuY2VPcHRpb25zICk7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJvbGdyb3VwIHRvIGJlIGFibGUgdG8gcmVmZXJlbmNlXG5cdFx0XHRcdFx0Ly8gZnJvbSB0aGUgb3V0ZXJtb3N0IGVsZW1lbnQgZm9yIGNoYW5naW5nIG9wdGlvbnMgYW5kIHJlZnJlc2hcblx0XHRcdFx0XHR2YXIgd2lkZ2V0RWxlbWVudCA9IGVsZW1lbnRbIHdpZGdldCBdKCBcIndpZGdldFwiICk7XG5cdFx0XHRcdFx0JC5kYXRhKCB3aWRnZXRFbGVtZW50WyAwIF0sIFwidWktY29udHJvbGdyb3VwLWRhdGFcIixcblx0XHRcdFx0XHRcdGluc3RhbmNlID8gaW5zdGFuY2UgOiBlbGVtZW50WyB3aWRnZXQgXSggXCJpbnN0YW5jZVwiICkgKTtcblxuXHRcdFx0XHRcdGNoaWxkV2lkZ2V0cy5wdXNoKCB3aWRnZXRFbGVtZW50WyAwIF0gKTtcblx0XHRcdFx0fSApO1xuXHRcdH0gKTtcblxuXHRcdHRoaXMuY2hpbGRXaWRnZXRzID0gJCggJC51bmlxdWUoIGNoaWxkV2lkZ2V0cyApICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMuY2hpbGRXaWRnZXRzLCBcInVpLWNvbnRyb2xncm91cC1pdGVtXCIgKTtcblx0fSxcblxuXHRfY2FsbENoaWxkTWV0aG9kOiBmdW5jdGlvbiggbWV0aG9kICkge1xuXHRcdHRoaXMuY2hpbGRXaWRnZXRzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGVsZW1lbnQgPSAkKCB0aGlzICksXG5cdFx0XHRcdGRhdGEgPSBlbGVtZW50LmRhdGEoIFwidWktY29udHJvbGdyb3VwLWRhdGFcIiApO1xuXHRcdFx0aWYgKCBkYXRhICYmIGRhdGFbIG1ldGhvZCBdICkge1xuXHRcdFx0XHRkYXRhWyBtZXRob2QgXSgpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRfdXBkYXRlQ29ybmVyQ2xhc3M6IGZ1bmN0aW9uKCBlbGVtZW50LCBwb3NpdGlvbiApIHtcblx0XHR2YXIgcmVtb3ZlID0gXCJ1aS1jb3JuZXItdG9wIHVpLWNvcm5lci1ib3R0b20gdWktY29ybmVyLWxlZnQgdWktY29ybmVyLXJpZ2h0IHVpLWNvcm5lci1hbGxcIjtcblx0XHR2YXIgYWRkID0gdGhpcy5fYnVpbGRTaW1wbGVPcHRpb25zKCBwb3NpdGlvbiwgXCJsYWJlbFwiICkuY2xhc3Nlcy5sYWJlbDtcblxuXHRcdHRoaXMuX3JlbW92ZUNsYXNzKCBlbGVtZW50LCBudWxsLCByZW1vdmUgKTtcblx0XHR0aGlzLl9hZGRDbGFzcyggZWxlbWVudCwgbnVsbCwgYWRkICk7XG5cdH0sXG5cblx0X2J1aWxkU2ltcGxlT3B0aW9uczogZnVuY3Rpb24oIHBvc2l0aW9uLCBrZXkgKSB7XG5cdFx0dmFyIGRpcmVjdGlvbiA9IHRoaXMub3B0aW9ucy5kaXJlY3Rpb24gPT09IFwidmVydGljYWxcIjtcblx0XHR2YXIgcmVzdWx0ID0ge1xuXHRcdFx0Y2xhc3Nlczoge31cblx0XHR9O1xuXHRcdHJlc3VsdC5jbGFzc2VzWyBrZXkgXSA9IHtcblx0XHRcdFwibWlkZGxlXCI6IFwiXCIsXG5cdFx0XHRcImZpcnN0XCI6IFwidWktY29ybmVyLVwiICsgKCBkaXJlY3Rpb24gPyBcInRvcFwiIDogXCJsZWZ0XCIgKSxcblx0XHRcdFwibGFzdFwiOiBcInVpLWNvcm5lci1cIiArICggZGlyZWN0aW9uID8gXCJib3R0b21cIiA6IFwicmlnaHRcIiApLFxuXHRcdFx0XCJvbmx5XCI6IFwidWktY29ybmVyLWFsbFwiXG5cdFx0fVsgcG9zaXRpb24gXTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0X3NwaW5uZXJPcHRpb25zOiBmdW5jdGlvbiggcG9zaXRpb24gKSB7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLl9idWlsZFNpbXBsZU9wdGlvbnMoIHBvc2l0aW9uLCBcInVpLXNwaW5uZXJcIiApO1xuXG5cdFx0b3B0aW9ucy5jbGFzc2VzWyBcInVpLXNwaW5uZXItdXBcIiBdID0gXCJcIjtcblx0XHRvcHRpb25zLmNsYXNzZXNbIFwidWktc3Bpbm5lci1kb3duXCIgXSA9IFwiXCI7XG5cblx0XHRyZXR1cm4gb3B0aW9ucztcblx0fSxcblxuXHRfYnV0dG9uT3B0aW9uczogZnVuY3Rpb24oIHBvc2l0aW9uICkge1xuXHRcdHJldHVybiB0aGlzLl9idWlsZFNpbXBsZU9wdGlvbnMoIHBvc2l0aW9uLCBcInVpLWJ1dHRvblwiICk7XG5cdH0sXG5cblx0X2NoZWNrYm94cmFkaW9PcHRpb25zOiBmdW5jdGlvbiggcG9zaXRpb24gKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2J1aWxkU2ltcGxlT3B0aW9ucyggcG9zaXRpb24sIFwidWktY2hlY2tib3hyYWRpby1sYWJlbFwiICk7XG5cdH0sXG5cblx0X3NlbGVjdG1lbnVPcHRpb25zOiBmdW5jdGlvbiggcG9zaXRpb24gKSB7XG5cdFx0dmFyIGRpcmVjdGlvbiA9IHRoaXMub3B0aW9ucy5kaXJlY3Rpb24gPT09IFwidmVydGljYWxcIjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0d2lkdGg6IGRpcmVjdGlvbiA/IFwiYXV0b1wiIDogZmFsc2UsXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdG1pZGRsZToge1xuXHRcdFx0XHRcdFwidWktc2VsZWN0bWVudS1idXR0b24tb3BlblwiOiBcIlwiLFxuXHRcdFx0XHRcdFwidWktc2VsZWN0bWVudS1idXR0b24tY2xvc2VkXCI6IFwiXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Zmlyc3Q6IHtcblx0XHRcdFx0XHRcInVpLXNlbGVjdG1lbnUtYnV0dG9uLW9wZW5cIjogXCJ1aS1jb3JuZXItXCIgKyAoIGRpcmVjdGlvbiA/IFwidG9wXCIgOiBcInRsXCIgKSxcblx0XHRcdFx0XHRcInVpLXNlbGVjdG1lbnUtYnV0dG9uLWNsb3NlZFwiOiBcInVpLWNvcm5lci1cIiArICggZGlyZWN0aW9uID8gXCJ0b3BcIiA6IFwibGVmdFwiIClcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFzdDoge1xuXHRcdFx0XHRcdFwidWktc2VsZWN0bWVudS1idXR0b24tb3BlblwiOiBkaXJlY3Rpb24gPyBcIlwiIDogXCJ1aS1jb3JuZXItdHJcIixcblx0XHRcdFx0XHRcInVpLXNlbGVjdG1lbnUtYnV0dG9uLWNsb3NlZFwiOiBcInVpLWNvcm5lci1cIiArICggZGlyZWN0aW9uID8gXCJib3R0b21cIiA6IFwicmlnaHRcIiApXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9ubHk6IHtcblx0XHRcdFx0XHRcInVpLXNlbGVjdG1lbnUtYnV0dG9uLW9wZW5cIjogXCJ1aS1jb3JuZXItdG9wXCIsXG5cdFx0XHRcdFx0XCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1jbG9zZWRcIjogXCJ1aS1jb3JuZXItYWxsXCJcblx0XHRcdFx0fVxuXG5cdFx0XHR9WyBwb3NpdGlvbiBdXG5cdFx0fTtcblx0fSxcblxuXHRfcmVzb2x2ZUNsYXNzZXNWYWx1ZXM6IGZ1bmN0aW9uKCBjbGFzc2VzLCBpbnN0YW5jZSApIHtcblx0XHR2YXIgcmVzdWx0ID0ge307XG5cdFx0JC5lYWNoKCBjbGFzc2VzLCBmdW5jdGlvbigga2V5ICkge1xuXHRcdFx0dmFyIGN1cnJlbnQgPSBpbnN0YW5jZS5vcHRpb25zLmNsYXNzZXNbIGtleSBdIHx8IFwiXCI7XG5cdFx0XHRjdXJyZW50ID0gJC50cmltKCBjdXJyZW50LnJlcGxhY2UoIGNvbnRyb2xncm91cENvcm5lclJlZ2V4LCBcIlwiICkgKTtcblx0XHRcdHJlc3VsdFsga2V5IF0gPSAoIGN1cnJlbnQgKyBcIiBcIiArIGNsYXNzZXNbIGtleSBdICkucmVwbGFjZSggL1xccysvZywgXCIgXCIgKTtcblx0XHR9ICk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblxuXHRfc2V0T3B0aW9uOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHRpZiAoIGtleSA9PT0gXCJkaXJlY3Rpb25cIiApIHtcblx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCBcInVpLWNvbnRyb2xncm91cC1cIiArIHRoaXMub3B0aW9ucy5kaXJlY3Rpb24gKTtcblx0XHR9XG5cblx0XHR0aGlzLl9zdXBlcigga2V5LCB2YWx1ZSApO1xuXHRcdGlmICgga2V5ID09PSBcImRpc2FibGVkXCIgKSB7XG5cdFx0XHR0aGlzLl9jYWxsQ2hpbGRNZXRob2QoIHZhbHVlID8gXCJkaXNhYmxlXCIgOiBcImVuYWJsZVwiICk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5yZWZyZXNoKCk7XG5cdH0sXG5cblx0cmVmcmVzaDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNoaWxkcmVuLFxuXHRcdFx0dGhhdCA9IHRoaXM7XG5cblx0XHR0aGlzLl9hZGRDbGFzcyggXCJ1aS1jb250cm9sZ3JvdXAgdWktY29udHJvbGdyb3VwLVwiICsgdGhpcy5vcHRpb25zLmRpcmVjdGlvbiApO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uID09PSBcImhvcml6b250YWxcIiApIHtcblx0XHRcdHRoaXMuX2FkZENsYXNzKCBudWxsLCBcInVpLWhlbHBlci1jbGVhcmZpeFwiICk7XG5cdFx0fVxuXHRcdHRoaXMuX2luaXRXaWRnZXRzKCk7XG5cblx0XHRjaGlsZHJlbiA9IHRoaXMuY2hpbGRXaWRnZXRzO1xuXG5cdFx0Ly8gV2UgZmlsdGVyIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHRyYWNrIGFsbCBjaGlsZFdpZGdldHMgbm90IGp1c3QgdGhlIHZpc2libGUgb25lc1xuXHRcdGlmICggdGhpcy5vcHRpb25zLm9ubHlWaXNpYmxlICkge1xuXHRcdFx0Y2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoIFwiOnZpc2libGVcIiApO1xuXHRcdH1cblxuXHRcdGlmICggY2hpbGRyZW4ubGVuZ3RoICkge1xuXG5cdFx0XHQvLyBXZSBkbyB0aGlzIGxhc3QgYmVjYXVzZSB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBhbGwgZW5oYW5jbWVudCBpcyBkb25lXG5cdFx0XHQvLyBiZWZvcmUgZGV0ZXJtaW5pbmcgZmlyc3QgYW5kIGxhc3Rcblx0XHRcdCQuZWFjaCggWyBcImZpcnN0XCIsIFwibGFzdFwiIF0sIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBpbnN0YW5jZSA9IGNoaWxkcmVuWyB2YWx1ZSBdKCkuZGF0YSggXCJ1aS1jb250cm9sZ3JvdXAtZGF0YVwiICk7XG5cblx0XHRcdFx0aWYgKCBpbnN0YW5jZSAmJiB0aGF0WyBcIl9cIiArIGluc3RhbmNlLndpZGdldE5hbWUgKyBcIk9wdGlvbnNcIiBdICkge1xuXHRcdFx0XHRcdHZhciBvcHRpb25zID0gdGhhdFsgXCJfXCIgKyBpbnN0YW5jZS53aWRnZXROYW1lICsgXCJPcHRpb25zXCIgXShcblx0XHRcdFx0XHRcdGNoaWxkcmVuLmxlbmd0aCA9PT0gMSA/IFwib25seVwiIDogdmFsdWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdG9wdGlvbnMuY2xhc3NlcyA9IHRoYXQuX3Jlc29sdmVDbGFzc2VzVmFsdWVzKCBvcHRpb25zLmNsYXNzZXMsIGluc3RhbmNlICk7XG5cdFx0XHRcdFx0aW5zdGFuY2UuZWxlbWVudFsgaW5zdGFuY2Uud2lkZ2V0TmFtZSBdKCBvcHRpb25zICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhhdC5fdXBkYXRlQ29ybmVyQ2xhc3MoIGNoaWxkcmVuWyB2YWx1ZSBdKCksIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblxuXHRcdFx0Ly8gRmluYWxseSBjYWxsIHRoZSByZWZyZXNoIG1ldGhvZCBvbiBlYWNoIG9mIHRoZSBjaGlsZCB3aWRnZXRzLlxuXHRcdFx0dGhpcy5fY2FsbENoaWxkTWV0aG9kKCBcInJlZnJlc2hcIiApO1xuXHRcdH1cblx0fVxufSApO1xuXG4vKiFcbiAqIGpRdWVyeSBVSSBDaGVja2JveHJhZGlvIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiBDaGVja2JveHJhZGlvXG4vLz4+Z3JvdXA6IFdpZGdldHNcbi8vPj5kZXNjcmlwdGlvbjogRW5oYW5jZXMgYSBmb3JtIHdpdGggbXVsdGlwbGUgdGhlbWVhYmxlIGNoZWNrYm94ZXMgb3IgcmFkaW8gYnV0dG9ucy5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9jaGVja2JveHJhZGlvL1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL2NoZWNrYm94cmFkaW8vXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvY29yZS5jc3Ncbi8vPj5jc3Muc3RydWN0dXJlOiAuLi8uLi90aGVtZXMvYmFzZS9idXR0b24uY3NzXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvY2hlY2tib3hyYWRpby5jc3Ncbi8vPj5jc3MudGhlbWU6IC4uLy4uL3RoZW1lcy9iYXNlL3RoZW1lLmNzc1xuXG5cblxuJC53aWRnZXQoIFwidWkuY2hlY2tib3hyYWRpb1wiLCBbICQudWkuZm9ybVJlc2V0TWl4aW4sIHtcblx0dmVyc2lvbjogXCIxLjEyLjFcIixcblx0b3B0aW9uczoge1xuXHRcdGRpc2FibGVkOiBudWxsLFxuXHRcdGxhYmVsOiBudWxsLFxuXHRcdGljb246IHRydWUsXG5cdFx0Y2xhc3Nlczoge1xuXHRcdFx0XCJ1aS1jaGVja2JveHJhZGlvLWxhYmVsXCI6IFwidWktY29ybmVyLWFsbFwiLFxuXHRcdFx0XCJ1aS1jaGVja2JveHJhZGlvLWljb25cIjogXCJ1aS1jb3JuZXItYWxsXCJcblx0XHR9XG5cdH0sXG5cblx0X2dldENyZWF0ZU9wdGlvbnM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBkaXNhYmxlZCwgbGFiZWxzO1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMuX3N1cGVyKCkgfHwge307XG5cblx0XHQvLyBXZSByZWFkIHRoZSB0eXBlIGhlcmUsIGJlY2F1c2UgaXQgbWFrZXMgbW9yZSBzZW5zZSB0byB0aHJvdyBhIGVsZW1lbnQgdHlwZSBlcnJvciBmaXJzdCxcblx0XHQvLyByYXRoZXIgdGhlbiB0aGUgZXJyb3IgZm9yIGxhY2sgb2YgYSBsYWJlbC4gT2Z0ZW4gaWYgaXRzIHRoZSB3cm9uZyB0eXBlLCBpdFxuXHRcdC8vIHdvbid0IGhhdmUgYSBsYWJlbCAoZS5nLiBjYWxsaW5nIG9uIGEgZGl2LCBidG4sIGV0Yylcblx0XHR0aGlzLl9yZWFkVHlwZSgpO1xuXG5cdFx0bGFiZWxzID0gdGhpcy5lbGVtZW50LmxhYmVscygpO1xuXG5cdFx0Ly8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGxhYmVscywgdXNlIHRoZSBsYXN0IG9uZVxuXHRcdHRoaXMubGFiZWwgPSAkKCBsYWJlbHNbIGxhYmVscy5sZW5ndGggLSAxIF0gKTtcblx0XHRpZiAoICF0aGlzLmxhYmVsLmxlbmd0aCApIHtcblx0XHRcdCQuZXJyb3IoIFwiTm8gbGFiZWwgZm91bmQgZm9yIGNoZWNrYm94cmFkaW8gd2lkZ2V0XCIgKTtcblx0XHR9XG5cblx0XHR0aGlzLm9yaWdpbmFsTGFiZWwgPSBcIlwiO1xuXG5cdFx0Ly8gV2UgbmVlZCB0byBnZXQgdGhlIGxhYmVsIHRleHQgYnV0IHRoaXMgbWF5IGFsc28gbmVlZCB0byBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY29udGFpbiB0aGVcblx0XHQvLyBpbnB1dCBpdHNlbGYuXG5cdFx0dGhpcy5sYWJlbC5jb250ZW50cygpLm5vdCggdGhpcy5lbGVtZW50WyAwIF0gKS5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gVGhlIGxhYmVsIGNvbnRlbnRzIGNvdWxkIGJlIHRleHQsIGh0bWwsIG9yIGEgbWl4LiBXZSBjb25jYXQgZWFjaCBlbGVtZW50IHRvIGdldCBhXG5cdFx0XHQvLyBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGxhYmVsLCB3aXRob3V0IHRoZSBpbnB1dCBhcyBwYXJ0IG9mIGl0LlxuXHRcdFx0dGhhdC5vcmlnaW5hbExhYmVsICs9IHRoaXMubm9kZVR5cGUgPT09IDMgPyAkKCB0aGlzICkudGV4dCgpIDogdGhpcy5vdXRlckhUTUw7XG5cdFx0fSApO1xuXG5cdFx0Ly8gU2V0IHRoZSBsYWJlbCBvcHRpb24gaWYgd2UgZm91bmQgbGFiZWwgdGV4dFxuXHRcdGlmICggdGhpcy5vcmlnaW5hbExhYmVsICkge1xuXHRcdFx0b3B0aW9ucy5sYWJlbCA9IHRoaXMub3JpZ2luYWxMYWJlbDtcblx0XHR9XG5cblx0XHRkaXNhYmxlZCA9IHRoaXMuZWxlbWVudFsgMCBdLmRpc2FibGVkO1xuXHRcdGlmICggZGlzYWJsZWQgIT0gbnVsbCApIHtcblx0XHRcdG9wdGlvbnMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcblx0XHR9XG5cdFx0cmV0dXJuIG9wdGlvbnM7XG5cdH0sXG5cblx0X2NyZWF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNoZWNrZWQgPSB0aGlzLmVsZW1lbnRbIDAgXS5jaGVja2VkO1xuXG5cdFx0dGhpcy5fYmluZEZvcm1SZXNldEhhbmRsZXIoKTtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmRpc2FibGVkID09IG51bGwgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMuZGlzYWJsZWQgPSB0aGlzLmVsZW1lbnRbIDAgXS5kaXNhYmxlZDtcblx0XHR9XG5cblx0XHR0aGlzLl9zZXRPcHRpb24oIFwiZGlzYWJsZWRcIiwgdGhpcy5vcHRpb25zLmRpc2FibGVkICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIFwidWktY2hlY2tib3hyYWRpb1wiLCBcInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZVwiICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMubGFiZWwsIFwidWktY2hlY2tib3hyYWRpby1sYWJlbFwiLCBcInVpLWJ1dHRvbiB1aS13aWRnZXRcIiApO1xuXG5cdFx0aWYgKCB0aGlzLnR5cGUgPT09IFwicmFkaW9cIiApIHtcblx0XHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLmxhYmVsLCBcInVpLWNoZWNrYm94cmFkaW8tcmFkaW8tbGFiZWxcIiApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmxhYmVsICYmIHRoaXMub3B0aW9ucy5sYWJlbCAhPT0gdGhpcy5vcmlnaW5hbExhYmVsICkge1xuXHRcdFx0dGhpcy5fdXBkYXRlTGFiZWwoKTtcblx0XHR9IGVsc2UgaWYgKCB0aGlzLm9yaWdpbmFsTGFiZWwgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMubGFiZWwgPSB0aGlzLm9yaWdpbmFsTGFiZWw7XG5cdFx0fVxuXG5cdFx0dGhpcy5fZW5oYW5jZSgpO1xuXG5cdFx0aWYgKCBjaGVja2VkICkge1xuXHRcdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMubGFiZWwsIFwidWktY2hlY2tib3hyYWRpby1jaGVja2VkXCIsIFwidWktc3RhdGUtYWN0aXZlXCIgKTtcblx0XHRcdGlmICggdGhpcy5pY29uICkge1xuXHRcdFx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5pY29uLCBudWxsLCBcInVpLXN0YXRlLWhvdmVyXCIgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLl9vbigge1xuXHRcdFx0Y2hhbmdlOiBcIl90b2dnbGVDbGFzc2VzXCIsXG5cdFx0XHRmb2N1czogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLmxhYmVsLCBudWxsLCBcInVpLXN0YXRlLWZvY3VzIHVpLXZpc3VhbC1mb2N1c1wiICk7XG5cdFx0XHR9LFxuXHRcdFx0Ymx1cjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCB0aGlzLmxhYmVsLCBudWxsLCBcInVpLXN0YXRlLWZvY3VzIHVpLXZpc3VhbC1mb2N1c1wiICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdF9yZWFkVHlwZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5vZGVOYW1lID0gdGhpcy5lbGVtZW50WyAwIF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHR0aGlzLnR5cGUgPSB0aGlzLmVsZW1lbnRbIDAgXS50eXBlO1xuXHRcdGlmICggbm9kZU5hbWUgIT09IFwiaW5wdXRcIiB8fCAhL3JhZGlvfGNoZWNrYm94Ly50ZXN0KCB0aGlzLnR5cGUgKSApIHtcblx0XHRcdCQuZXJyb3IoIFwiQ2FuJ3QgY3JlYXRlIGNoZWNrYm94cmFkaW8gb24gZWxlbWVudC5ub2RlTmFtZT1cIiArIG5vZGVOYW1lICtcblx0XHRcdFx0XCIgYW5kIGVsZW1lbnQudHlwZT1cIiArIHRoaXMudHlwZSApO1xuXHRcdH1cblx0fSxcblxuXHQvLyBTdXBwb3J0IGpRdWVyeSBNb2JpbGUgZW5oYW5jZWQgb3B0aW9uXG5cdF9lbmhhbmNlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLl91cGRhdGVJY29uKCB0aGlzLmVsZW1lbnRbIDAgXS5jaGVja2VkICk7XG5cdH0sXG5cblx0d2lkZ2V0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5sYWJlbDtcblx0fSxcblxuXHRfZ2V0UmFkaW9Hcm91cDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGdyb3VwO1xuXHRcdHZhciBuYW1lID0gdGhpcy5lbGVtZW50WyAwIF0ubmFtZTtcblx0XHR2YXIgbmFtZVNlbGVjdG9yID0gXCJpbnB1dFtuYW1lPSdcIiArICQudWkuZXNjYXBlU2VsZWN0b3IoIG5hbWUgKSArIFwiJ11cIjtcblxuXHRcdGlmICggIW5hbWUgKSB7XG5cdFx0XHRyZXR1cm4gJCggW10gKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuZm9ybS5sZW5ndGggKSB7XG5cdFx0XHRncm91cCA9ICQoIHRoaXMuZm9ybVsgMCBdLmVsZW1lbnRzICkuZmlsdGVyKCBuYW1lU2VsZWN0b3IgKTtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBOb3QgaW5zaWRlIGEgZm9ybSwgY2hlY2sgYWxsIGlucHV0cyB0aGF0IGFsc28gYXJlIG5vdCBpbnNpZGUgYSBmb3JtXG5cdFx0XHRncm91cCA9ICQoIG5hbWVTZWxlY3RvciApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAkKCB0aGlzICkuZm9ybSgpLmxlbmd0aCA9PT0gMDtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZ3JvdXAubm90KCB0aGlzLmVsZW1lbnQgKTtcblx0fSxcblxuXHRfdG9nZ2xlQ2xhc3NlczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNoZWNrZWQgPSB0aGlzLmVsZW1lbnRbIDAgXS5jaGVja2VkO1xuXHRcdHRoaXMuX3RvZ2dsZUNsYXNzKCB0aGlzLmxhYmVsLCBcInVpLWNoZWNrYm94cmFkaW8tY2hlY2tlZFwiLCBcInVpLXN0YXRlLWFjdGl2ZVwiLCBjaGVja2VkICk7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5pY29uICYmIHRoaXMudHlwZSA9PT0gXCJjaGVja2JveFwiICkge1xuXHRcdFx0dGhpcy5fdG9nZ2xlQ2xhc3MoIHRoaXMuaWNvbiwgbnVsbCwgXCJ1aS1pY29uLWNoZWNrIHVpLXN0YXRlLWNoZWNrZWRcIiwgY2hlY2tlZCApXG5cdFx0XHRcdC5fdG9nZ2xlQ2xhc3MoIHRoaXMuaWNvbiwgbnVsbCwgXCJ1aS1pY29uLWJsYW5rXCIsICFjaGVja2VkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLnR5cGUgPT09IFwicmFkaW9cIiApIHtcblx0XHRcdHRoaXMuX2dldFJhZGlvR3JvdXAoKVxuXHRcdFx0XHQuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIGluc3RhbmNlID0gJCggdGhpcyApLmNoZWNrYm94cmFkaW8oIFwiaW5zdGFuY2VcIiApO1xuXG5cdFx0XHRcdFx0aWYgKCBpbnN0YW5jZSApIHtcblx0XHRcdFx0XHRcdGluc3RhbmNlLl9yZW1vdmVDbGFzcyggaW5zdGFuY2UubGFiZWwsXG5cdFx0XHRcdFx0XHRcdFwidWktY2hlY2tib3hyYWRpby1jaGVja2VkXCIsIFwidWktc3RhdGUtYWN0aXZlXCIgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHR9XG5cdH0sXG5cblx0X2Rlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuX3VuYmluZEZvcm1SZXNldEhhbmRsZXIoKTtcblxuXHRcdGlmICggdGhpcy5pY29uICkge1xuXHRcdFx0dGhpcy5pY29uLnJlbW92ZSgpO1xuXHRcdFx0dGhpcy5pY29uU3BhY2UucmVtb3ZlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdF9zZXRPcHRpb246IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXG5cdFx0Ly8gV2UgZG9uJ3QgYWxsb3cgdGhlIHZhbHVlIHRvIGJlIHNldCB0byBub3RoaW5nXG5cdFx0aWYgKCBrZXkgPT09IFwibGFiZWxcIiAmJiAhdmFsdWUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5fc3VwZXIoIGtleSwgdmFsdWUgKTtcblxuXHRcdGlmICgga2V5ID09PSBcImRpc2FibGVkXCIgKSB7XG5cdFx0XHR0aGlzLl90b2dnbGVDbGFzcyggdGhpcy5sYWJlbCwgbnVsbCwgXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCB2YWx1ZSApO1xuXHRcdFx0dGhpcy5lbGVtZW50WyAwIF0uZGlzYWJsZWQgPSB2YWx1ZTtcblxuXHRcdFx0Ly8gRG9uJ3QgcmVmcmVzaCB3aGVuIHNldHRpbmcgZGlzYWJsZWRcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5yZWZyZXNoKCk7XG5cdH0sXG5cblx0X3VwZGF0ZUljb246IGZ1bmN0aW9uKCBjaGVja2VkICkge1xuXHRcdHZhciB0b0FkZCA9IFwidWktaWNvbiB1aS1pY29uLWJhY2tncm91bmQgXCI7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5pY29uICkge1xuXHRcdFx0aWYgKCAhdGhpcy5pY29uICkge1xuXHRcdFx0XHR0aGlzLmljb24gPSAkKCBcIjxzcGFuPlwiICk7XG5cdFx0XHRcdHRoaXMuaWNvblNwYWNlID0gJCggXCI8c3Bhbj4gPC9zcGFuPlwiICk7XG5cdFx0XHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLmljb25TcGFjZSwgXCJ1aS1jaGVja2JveHJhZGlvLWljb24tc3BhY2VcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHRoaXMudHlwZSA9PT0gXCJjaGVja2JveFwiICkge1xuXHRcdFx0XHR0b0FkZCArPSBjaGVja2VkID8gXCJ1aS1pY29uLWNoZWNrIHVpLXN0YXRlLWNoZWNrZWRcIiA6IFwidWktaWNvbi1ibGFua1wiO1xuXHRcdFx0XHR0aGlzLl9yZW1vdmVDbGFzcyggdGhpcy5pY29uLCBudWxsLCBjaGVja2VkID8gXCJ1aS1pY29uLWJsYW5rXCIgOiBcInVpLWljb24tY2hlY2tcIiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dG9BZGQgKz0gXCJ1aS1pY29uLWJsYW5rXCI7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5pY29uLCBcInVpLWNoZWNrYm94cmFkaW8taWNvblwiLCB0b0FkZCApO1xuXHRcdFx0aWYgKCAhY2hlY2tlZCApIHtcblx0XHRcdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIHRoaXMuaWNvbiwgbnVsbCwgXCJ1aS1pY29uLWNoZWNrIHVpLXN0YXRlLWNoZWNrZWRcIiApO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5pY29uLnByZXBlbmRUbyggdGhpcy5sYWJlbCApLmFmdGVyKCB0aGlzLmljb25TcGFjZSApO1xuXHRcdH0gZWxzZSBpZiAoIHRoaXMuaWNvbiAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dGhpcy5pY29uLnJlbW92ZSgpO1xuXHRcdFx0dGhpcy5pY29uU3BhY2UucmVtb3ZlKCk7XG5cdFx0XHRkZWxldGUgdGhpcy5pY29uO1xuXHRcdH1cblx0fSxcblxuXHRfdXBkYXRlTGFiZWw6IGZ1bmN0aW9uKCkge1xuXG5cdFx0Ly8gUmVtb3ZlIHRoZSBjb250ZW50cyBvZiB0aGUgbGFiZWwgKCBtaW51cyB0aGUgaWNvbiwgaWNvbiBzcGFjZSwgYW5kIGlucHV0IClcblx0XHR2YXIgY29udGVudHMgPSB0aGlzLmxhYmVsLmNvbnRlbnRzKCkubm90KCB0aGlzLmVsZW1lbnRbIDAgXSApO1xuXHRcdGlmICggdGhpcy5pY29uICkge1xuXHRcdFx0Y29udGVudHMgPSBjb250ZW50cy5ub3QoIHRoaXMuaWNvblsgMCBdICk7XG5cdFx0fVxuXHRcdGlmICggdGhpcy5pY29uU3BhY2UgKSB7XG5cdFx0XHRjb250ZW50cyA9IGNvbnRlbnRzLm5vdCggdGhpcy5pY29uU3BhY2VbIDAgXSApO1xuXHRcdH1cblx0XHRjb250ZW50cy5yZW1vdmUoKTtcblxuXHRcdHRoaXMubGFiZWwuYXBwZW5kKCB0aGlzLm9wdGlvbnMubGFiZWwgKTtcblx0fSxcblxuXHRyZWZyZXNoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY2hlY2tlZCA9IHRoaXMuZWxlbWVudFsgMCBdLmNoZWNrZWQsXG5cdFx0XHRpc0Rpc2FibGVkID0gdGhpcy5lbGVtZW50WyAwIF0uZGlzYWJsZWQ7XG5cblx0XHR0aGlzLl91cGRhdGVJY29uKCBjaGVja2VkICk7XG5cdFx0dGhpcy5fdG9nZ2xlQ2xhc3MoIHRoaXMubGFiZWwsIFwidWktY2hlY2tib3hyYWRpby1jaGVja2VkXCIsIFwidWktc3RhdGUtYWN0aXZlXCIsIGNoZWNrZWQgKTtcblx0XHRpZiAoIHRoaXMub3B0aW9ucy5sYWJlbCAhPT0gbnVsbCApIHtcblx0XHRcdHRoaXMuX3VwZGF0ZUxhYmVsKCk7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Rpc2FibGVkICE9PSB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgKSB7XG5cdFx0XHR0aGlzLl9zZXRPcHRpb25zKCB7IFwiZGlzYWJsZWRcIjogaXNEaXNhYmxlZCB9ICk7XG5cdFx0fVxuXHR9XG5cbn0gXSApO1xuXG52YXIgd2lkZ2V0c0NoZWNrYm94cmFkaW8gPSAkLnVpLmNoZWNrYm94cmFkaW87XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgQnV0dG9uIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiBCdXR0b25cbi8vPj5ncm91cDogV2lkZ2V0c1xuLy8+PmRlc2NyaXB0aW9uOiBFbmhhbmNlcyBhIGZvcm0gd2l0aCB0aGVtZWFibGUgYnV0dG9ucy5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9idXR0b24vXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vYnV0dG9uL1xuLy8+PmNzcy5zdHJ1Y3R1cmU6IC4uLy4uL3RoZW1lcy9iYXNlL2NvcmUuY3NzXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvYnV0dG9uLmNzc1xuLy8+PmNzcy50aGVtZTogLi4vLi4vdGhlbWVzL2Jhc2UvdGhlbWUuY3NzXG5cblxuXG4kLndpZGdldCggXCJ1aS5idXR0b25cIiwge1xuXHR2ZXJzaW9uOiBcIjEuMTIuMVwiLFxuXHRkZWZhdWx0RWxlbWVudDogXCI8YnV0dG9uPlwiLFxuXHRvcHRpb25zOiB7XG5cdFx0Y2xhc3Nlczoge1xuXHRcdFx0XCJ1aS1idXR0b25cIjogXCJ1aS1jb3JuZXItYWxsXCJcblx0XHR9LFxuXHRcdGRpc2FibGVkOiBudWxsLFxuXHRcdGljb246IG51bGwsXG5cdFx0aWNvblBvc2l0aW9uOiBcImJlZ2lubmluZ1wiLFxuXHRcdGxhYmVsOiBudWxsLFxuXHRcdHNob3dMYWJlbDogdHJ1ZVxuXHR9LFxuXG5cdF9nZXRDcmVhdGVPcHRpb25zOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZGlzYWJsZWQsXG5cblx0XHRcdC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBjYXNlcyBsaWtlIGluIGpRdWVyeSBNb2JpbGUgd2hlcmUgdGhlIGJhc2Ugd2lkZ2V0IGRvZXMgaGF2ZVxuXHRcdFx0Ly8gYW4gaW1wbGVtZW50YXRpb24gb2YgX2dldENyZWF0ZU9wdGlvbnNcblx0XHRcdG9wdGlvbnMgPSB0aGlzLl9zdXBlcigpIHx8IHt9O1xuXG5cdFx0dGhpcy5pc0lucHV0ID0gdGhpcy5lbGVtZW50LmlzKCBcImlucHV0XCIgKTtcblxuXHRcdGRpc2FibGVkID0gdGhpcy5lbGVtZW50WyAwIF0uZGlzYWJsZWQ7XG5cdFx0aWYgKCBkaXNhYmxlZCAhPSBudWxsICkge1xuXHRcdFx0b3B0aW9ucy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuXHRcdH1cblxuXHRcdHRoaXMub3JpZ2luYWxMYWJlbCA9IHRoaXMuaXNJbnB1dCA/IHRoaXMuZWxlbWVudC52YWwoKSA6IHRoaXMuZWxlbWVudC5odG1sKCk7XG5cdFx0aWYgKCB0aGlzLm9yaWdpbmFsTGFiZWwgKSB7XG5cdFx0XHRvcHRpb25zLmxhYmVsID0gdGhpcy5vcmlnaW5hbExhYmVsO1xuXHRcdH1cblxuXHRcdHJldHVybiBvcHRpb25zO1xuXHR9LFxuXG5cdF9jcmVhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggIXRoaXMub3B0aW9uLnNob3dMYWJlbCAmICF0aGlzLm9wdGlvbnMuaWNvbiApIHtcblx0XHRcdHRoaXMub3B0aW9ucy5zaG93TGFiZWwgPSB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIFdlIGhhdmUgdG8gY2hlY2sgdGhlIG9wdGlvbiBhZ2FpbiBoZXJlIGV2ZW4gdGhvdWdoIHdlIGRpZCBpbiBfZ2V0Q3JlYXRlT3B0aW9ucyxcblx0XHQvLyBiZWNhdXNlIG51bGwgbWF5IGhhdmUgYmVlbiBwYXNzZWQgb24gaW5pdCB3aGljaCB3b3VsZCBvdmVycmlkZSB3aGF0IHdhcyBzZXQgaW5cblx0XHQvLyBfZ2V0Q3JlYXRlT3B0aW9uc1xuXHRcdGlmICggdGhpcy5vcHRpb25zLmRpc2FibGVkID09IG51bGwgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMuZGlzYWJsZWQgPSB0aGlzLmVsZW1lbnRbIDAgXS5kaXNhYmxlZCB8fCBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLmhhc1RpdGxlID0gISF0aGlzLmVsZW1lbnQuYXR0ciggXCJ0aXRsZVwiICk7XG5cblx0XHQvLyBDaGVjayB0byBzZWUgaWYgdGhlIGxhYmVsIG5lZWRzIHRvIGJlIHNldCBvciBpZiBpdHMgYWxyZWFkeSBjb3JyZWN0XG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMubGFiZWwgJiYgdGhpcy5vcHRpb25zLmxhYmVsICE9PSB0aGlzLm9yaWdpbmFsTGFiZWwgKSB7XG5cdFx0XHRpZiAoIHRoaXMuaXNJbnB1dCApIHtcblx0XHRcdFx0dGhpcy5lbGVtZW50LnZhbCggdGhpcy5vcHRpb25zLmxhYmVsICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQuaHRtbCggdGhpcy5vcHRpb25zLmxhYmVsICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuX2FkZENsYXNzKCBcInVpLWJ1dHRvblwiLCBcInVpLXdpZGdldFwiICk7XG5cdFx0dGhpcy5fc2V0T3B0aW9uKCBcImRpc2FibGVkXCIsIHRoaXMub3B0aW9ucy5kaXNhYmxlZCApO1xuXHRcdHRoaXMuX2VuaGFuY2UoKTtcblxuXHRcdGlmICggdGhpcy5lbGVtZW50LmlzKCBcImFcIiApICkge1xuXHRcdFx0dGhpcy5fb24oIHtcblx0XHRcdFx0XCJrZXl1cFwiOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdFx0aWYgKCBldmVudC5rZXlDb2RlID09PSAkLnVpLmtleUNvZGUuU1BBQ0UgKSB7XG5cdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQaGFudG9tSlMgPD0gMS45LCBJRSA4IE9ubHlcblx0XHRcdFx0XHRcdC8vIElmIGEgbmF0aXZlIGNsaWNrIGlzIGF2YWlsYWJsZSB1c2UgaXQgc28gd2UgYWN0dWFsbHkgY2F1c2UgbmF2aWdhdGlvblxuXHRcdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIGp1c3QgdHJpZ2dlciBhIGNsaWNrIGV2ZW50XG5cdFx0XHRcdFx0XHRpZiAoIHRoaXMuZWxlbWVudFsgMCBdLmNsaWNrICkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmVsZW1lbnRbIDAgXS5jbGljaygpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5lbGVtZW50LnRyaWdnZXIoIFwiY2xpY2tcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblx0fSxcblxuXHRfZW5oYW5jZTogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhdGhpcy5lbGVtZW50LmlzKCBcImJ1dHRvblwiICkgKSB7XG5cdFx0XHR0aGlzLmVsZW1lbnQuYXR0ciggXCJyb2xlXCIsIFwiYnV0dG9uXCIgKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5pY29uICkge1xuXHRcdFx0dGhpcy5fdXBkYXRlSWNvbiggXCJpY29uXCIsIHRoaXMub3B0aW9ucy5pY29uICk7XG5cdFx0XHR0aGlzLl91cGRhdGVUb29sdGlwKCk7XG5cdFx0fVxuXHR9LFxuXG5cdF91cGRhdGVUb29sdGlwOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnRpdGxlID0gdGhpcy5lbGVtZW50LmF0dHIoIFwidGl0bGVcIiApO1xuXG5cdFx0aWYgKCAhdGhpcy5vcHRpb25zLnNob3dMYWJlbCAmJiAhdGhpcy50aXRsZSApIHtcblx0XHRcdHRoaXMuZWxlbWVudC5hdHRyKCBcInRpdGxlXCIsIHRoaXMub3B0aW9ucy5sYWJlbCApO1xuXHRcdH1cblx0fSxcblxuXHRfdXBkYXRlSWNvbjogZnVuY3Rpb24oIG9wdGlvbiwgdmFsdWUgKSB7XG5cdFx0dmFyIGljb24gPSBvcHRpb24gIT09IFwiaWNvblBvc2l0aW9uXCIsXG5cdFx0XHRwb3NpdGlvbiA9IGljb24gPyB0aGlzLm9wdGlvbnMuaWNvblBvc2l0aW9uIDogdmFsdWUsXG5cdFx0XHRkaXNwbGF5QmxvY2sgPSBwb3NpdGlvbiA9PT0gXCJ0b3BcIiB8fCBwb3NpdGlvbiA9PT0gXCJib3R0b21cIjtcblxuXHRcdC8vIENyZWF0ZSBpY29uXG5cdFx0aWYgKCAhdGhpcy5pY29uICkge1xuXHRcdFx0dGhpcy5pY29uID0gJCggXCI8c3Bhbj5cIiApO1xuXG5cdFx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5pY29uLCBcInVpLWJ1dHRvbi1pY29uXCIsIFwidWktaWNvblwiICk7XG5cblx0XHRcdGlmICggIXRoaXMub3B0aW9ucy5zaG93TGFiZWwgKSB7XG5cdFx0XHRcdHRoaXMuX2FkZENsYXNzKCBcInVpLWJ1dHRvbi1pY29uLW9ubHlcIiApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIGljb24gKSB7XG5cblx0XHRcdC8vIElmIHdlIGFyZSB1cGRhdGluZyB0aGUgaWNvbiByZW1vdmUgdGhlIG9sZCBpY29uIGNsYXNzXG5cdFx0XHR0aGlzLl9yZW1vdmVDbGFzcyggdGhpcy5pY29uLCBudWxsLCB0aGlzLm9wdGlvbnMuaWNvbiApO1xuXHRcdH1cblxuXHRcdC8vIElmIHdlIGFyZSB1cGRhdGluZyB0aGUgaWNvbiBhZGQgdGhlIG5ldyBpY29uIGNsYXNzXG5cdFx0aWYgKCBpY29uICkge1xuXHRcdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMuaWNvbiwgbnVsbCwgdmFsdWUgKTtcblx0XHR9XG5cblx0XHR0aGlzLl9hdHRhY2hJY29uKCBwb3NpdGlvbiApO1xuXG5cdFx0Ly8gSWYgdGhlIGljb24gaXMgb24gdG9wIG9yIGJvdHRvbSB3ZSBuZWVkIHRvIGFkZCB0aGUgdWktd2lkZ2V0LWljb24tYmxvY2sgY2xhc3MgYW5kIHJlbW92ZVxuXHRcdC8vIHRoZSBpY29uU3BhY2UgaWYgdGhlcmUgaXMgb25lLlxuXHRcdGlmICggZGlzcGxheUJsb2NrICkge1xuXHRcdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMuaWNvbiwgbnVsbCwgXCJ1aS13aWRnZXQtaWNvbi1ibG9ja1wiICk7XG5cdFx0XHRpZiAoIHRoaXMuaWNvblNwYWNlICkge1xuXHRcdFx0XHR0aGlzLmljb25TcGFjZS5yZW1vdmUoKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBQb3NpdGlvbiBpcyBiZWdpbm5pbmcgb3IgZW5kIHNvIHJlbW92ZSB0aGUgdWktd2lkZ2V0LWljb24tYmxvY2sgY2xhc3MgYW5kIGFkZCB0aGVcblx0XHRcdC8vIHNwYWNlIGlmIGl0IGRvZXMgbm90IGV4aXN0XG5cdFx0XHRpZiAoICF0aGlzLmljb25TcGFjZSApIHtcblx0XHRcdFx0dGhpcy5pY29uU3BhY2UgPSAkKCBcIjxzcGFuPiA8L3NwYW4+XCIgKTtcblx0XHRcdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMuaWNvblNwYWNlLCBcInVpLWJ1dHRvbi1pY29uLXNwYWNlXCIgKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCB0aGlzLmljb24sIG51bGwsIFwidWktd2lnZXQtaWNvbi1ibG9ja1wiICk7XG5cdFx0XHR0aGlzLl9hdHRhY2hJY29uU3BhY2UoIHBvc2l0aW9uICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9kZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmVsZW1lbnQucmVtb3ZlQXR0ciggXCJyb2xlXCIgKTtcblxuXHRcdGlmICggdGhpcy5pY29uICkge1xuXHRcdFx0dGhpcy5pY29uLnJlbW92ZSgpO1xuXHRcdH1cblx0XHRpZiAoIHRoaXMuaWNvblNwYWNlICkge1xuXHRcdFx0dGhpcy5pY29uU3BhY2UucmVtb3ZlKCk7XG5cdFx0fVxuXHRcdGlmICggIXRoaXMuaGFzVGl0bGUgKSB7XG5cdFx0XHR0aGlzLmVsZW1lbnQucmVtb3ZlQXR0ciggXCJ0aXRsZVwiICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9hdHRhY2hJY29uU3BhY2U6IGZ1bmN0aW9uKCBpY29uUG9zaXRpb24gKSB7XG5cdFx0dGhpcy5pY29uWyAvXig/OmVuZHxib3R0b20pLy50ZXN0KCBpY29uUG9zaXRpb24gKSA/IFwiYmVmb3JlXCIgOiBcImFmdGVyXCIgXSggdGhpcy5pY29uU3BhY2UgKTtcblx0fSxcblxuXHRfYXR0YWNoSWNvbjogZnVuY3Rpb24oIGljb25Qb3NpdGlvbiApIHtcblx0XHR0aGlzLmVsZW1lbnRbIC9eKD86ZW5kfGJvdHRvbSkvLnRlc3QoIGljb25Qb3NpdGlvbiApID8gXCJhcHBlbmRcIiA6IFwicHJlcGVuZFwiIF0oIHRoaXMuaWNvbiApO1xuXHR9LFxuXG5cdF9zZXRPcHRpb25zOiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHR2YXIgbmV3U2hvd0xhYmVsID0gb3B0aW9ucy5zaG93TGFiZWwgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHRoaXMub3B0aW9ucy5zaG93TGFiZWwgOlxuXHRcdFx0XHRvcHRpb25zLnNob3dMYWJlbCxcblx0XHRcdG5ld0ljb24gPSBvcHRpb25zLmljb24gPT09IHVuZGVmaW5lZCA/IHRoaXMub3B0aW9ucy5pY29uIDogb3B0aW9ucy5pY29uO1xuXG5cdFx0aWYgKCAhbmV3U2hvd0xhYmVsICYmICFuZXdJY29uICkge1xuXHRcdFx0b3B0aW9ucy5zaG93TGFiZWwgPSB0cnVlO1xuXHRcdH1cblx0XHR0aGlzLl9zdXBlciggb3B0aW9ucyApO1xuXHR9LFxuXG5cdF9zZXRPcHRpb246IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdGlmICgga2V5ID09PSBcImljb25cIiApIHtcblx0XHRcdGlmICggdmFsdWUgKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUljb24oIGtleSwgdmFsdWUgKTtcblx0XHRcdH0gZWxzZSBpZiAoIHRoaXMuaWNvbiApIHtcblx0XHRcdFx0dGhpcy5pY29uLnJlbW92ZSgpO1xuXHRcdFx0XHRpZiAoIHRoaXMuaWNvblNwYWNlICkge1xuXHRcdFx0XHRcdHRoaXMuaWNvblNwYWNlLnJlbW92ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgPT09IFwiaWNvblBvc2l0aW9uXCIgKSB7XG5cdFx0XHR0aGlzLl91cGRhdGVJY29uKCBrZXksIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHdlIGNhbid0IGVuZCB1cCB3aXRoIGEgYnV0dG9uIHRoYXQgaGFzIG5laXRoZXIgdGV4dCBub3IgaWNvblxuXHRcdGlmICgga2V5ID09PSBcInNob3dMYWJlbFwiICkge1xuXHRcdFx0XHR0aGlzLl90b2dnbGVDbGFzcyggXCJ1aS1idXR0b24taWNvbi1vbmx5XCIsIG51bGwsICF2YWx1ZSApO1xuXHRcdFx0XHR0aGlzLl91cGRhdGVUb29sdGlwKCk7XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgPT09IFwibGFiZWxcIiApIHtcblx0XHRcdGlmICggdGhpcy5pc0lucHV0ICkge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQudmFsKCB2YWx1ZSApO1xuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhbiBpY29uLCBhcHBlbmQgaXQsIGVsc2Ugbm90aGluZyB0aGVuIGFwcGVuZCB0aGUgdmFsdWVcblx0XHRcdFx0Ly8gdGhpcyBhdm9pZHMgcmVtb3ZhbCBvZiB0aGUgaWNvbiB3aGVuIHNldHRpbmcgbGFiZWwgdGV4dFxuXHRcdFx0XHR0aGlzLmVsZW1lbnQuaHRtbCggdmFsdWUgKTtcblx0XHRcdFx0aWYgKCB0aGlzLmljb24gKSB7XG5cdFx0XHRcdFx0dGhpcy5fYXR0YWNoSWNvbiggdGhpcy5vcHRpb25zLmljb25Qb3NpdGlvbiApO1xuXHRcdFx0XHRcdHRoaXMuX2F0dGFjaEljb25TcGFjZSggdGhpcy5vcHRpb25zLmljb25Qb3NpdGlvbiApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5fc3VwZXIoIGtleSwgdmFsdWUgKTtcblxuXHRcdGlmICgga2V5ID09PSBcImRpc2FibGVkXCIgKSB7XG5cdFx0XHR0aGlzLl90b2dnbGVDbGFzcyggbnVsbCwgXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCB2YWx1ZSApO1xuXHRcdFx0dGhpcy5lbGVtZW50WyAwIF0uZGlzYWJsZWQgPSB2YWx1ZTtcblx0XHRcdGlmICggdmFsdWUgKSB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5ibHVyKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHJlZnJlc2g6IGZ1bmN0aW9uKCkge1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRvIG9ubHkgY2hlY2sgZGlzYWJsZWQgaWYgaXRzIGFuIGVsZW1lbnQgdGhhdCBzdXBwb3J0cyB0aGlzIG90aGVyd2lzZVxuXHRcdC8vIGNoZWNrIGZvciB0aGUgZGlzYWJsZWQgY2xhc3MgdG8gZGV0ZXJtaW5lIHN0YXRlXG5cdFx0dmFyIGlzRGlzYWJsZWQgPSB0aGlzLmVsZW1lbnQuaXMoIFwiaW5wdXQsIGJ1dHRvblwiICkgP1xuXHRcdFx0dGhpcy5lbGVtZW50WyAwIF0uZGlzYWJsZWQgOiB0aGlzLmVsZW1lbnQuaGFzQ2xhc3MoIFwidWktYnV0dG9uLWRpc2FibGVkXCIgKTtcblxuXHRcdGlmICggaXNEaXNhYmxlZCAhPT0gdGhpcy5vcHRpb25zLmRpc2FibGVkICkge1xuXHRcdFx0dGhpcy5fc2V0T3B0aW9ucyggeyBkaXNhYmxlZDogaXNEaXNhYmxlZCB9ICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fdXBkYXRlVG9vbHRpcCgpO1xuXHR9XG59ICk7XG5cbi8vIERFUFJFQ0FURURcbmlmICggJC51aUJhY2tDb21wYXQgIT09IGZhbHNlICkge1xuXG5cdC8vIFRleHQgYW5kIEljb25zIG9wdGlvbnNcblx0JC53aWRnZXQoIFwidWkuYnV0dG9uXCIsICQudWkuYnV0dG9uLCB7XG5cdFx0b3B0aW9uczoge1xuXHRcdFx0dGV4dDogdHJ1ZSxcblx0XHRcdGljb25zOiB7XG5cdFx0XHRcdHByaW1hcnk6IG51bGwsXG5cdFx0XHRcdHNlY29uZGFyeTogbnVsbFxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRfY3JlYXRlOiBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggdGhpcy5vcHRpb25zLnNob3dMYWJlbCAmJiAhdGhpcy5vcHRpb25zLnRleHQgKSB7XG5cdFx0XHRcdHRoaXMub3B0aW9ucy5zaG93TGFiZWwgPSB0aGlzLm9wdGlvbnMudGV4dDtcblx0XHRcdH1cblx0XHRcdGlmICggIXRoaXMub3B0aW9ucy5zaG93TGFiZWwgJiYgdGhpcy5vcHRpb25zLnRleHQgKSB7XG5cdFx0XHRcdHRoaXMub3B0aW9ucy50ZXh0ID0gdGhpcy5vcHRpb25zLnNob3dMYWJlbDtcblx0XHRcdH1cblx0XHRcdGlmICggIXRoaXMub3B0aW9ucy5pY29uICYmICggdGhpcy5vcHRpb25zLmljb25zLnByaW1hcnkgfHxcblx0XHRcdFx0XHR0aGlzLm9wdGlvbnMuaWNvbnMuc2Vjb25kYXJ5ICkgKSB7XG5cdFx0XHRcdGlmICggdGhpcy5vcHRpb25zLmljb25zLnByaW1hcnkgKSB7XG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLmljb24gPSB0aGlzLm9wdGlvbnMuaWNvbnMucHJpbWFyeTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLm9wdGlvbnMuaWNvbiA9IHRoaXMub3B0aW9ucy5pY29ucy5zZWNvbmRhcnk7XG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLmljb25Qb3NpdGlvbiA9IFwiZW5kXCI7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoIHRoaXMub3B0aW9ucy5pY29uICkge1xuXHRcdFx0XHR0aGlzLm9wdGlvbnMuaWNvbnMucHJpbWFyeSA9IHRoaXMub3B0aW9ucy5pY29uO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fc3VwZXIoKTtcblx0XHR9LFxuXG5cdFx0X3NldE9wdGlvbjogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0XHRpZiAoIGtleSA9PT0gXCJ0ZXh0XCIgKSB7XG5cdFx0XHRcdHRoaXMuX3N1cGVyKCBcInNob3dMYWJlbFwiLCB2YWx1ZSApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGtleSA9PT0gXCJzaG93TGFiZWxcIiApIHtcblx0XHRcdFx0dGhpcy5vcHRpb25zLnRleHQgPSB2YWx1ZTtcblx0XHRcdH1cblx0XHRcdGlmICgga2V5ID09PSBcImljb25cIiApIHtcblx0XHRcdFx0dGhpcy5vcHRpb25zLmljb25zLnByaW1hcnkgPSB2YWx1ZTtcblx0XHRcdH1cblx0XHRcdGlmICgga2V5ID09PSBcImljb25zXCIgKSB7XG5cdFx0XHRcdGlmICggdmFsdWUucHJpbWFyeSApIHtcblx0XHRcdFx0XHR0aGlzLl9zdXBlciggXCJpY29uXCIsIHZhbHVlLnByaW1hcnkgKTtcblx0XHRcdFx0XHR0aGlzLl9zdXBlciggXCJpY29uUG9zaXRpb25cIiwgXCJiZWdpbm5pbmdcIiApO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZS5zZWNvbmRhcnkgKSB7XG5cdFx0XHRcdFx0dGhpcy5fc3VwZXIoIFwiaWNvblwiLCB2YWx1ZS5zZWNvbmRhcnkgKTtcblx0XHRcdFx0XHR0aGlzLl9zdXBlciggXCJpY29uUG9zaXRpb25cIiwgXCJlbmRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9zdXBlckFwcGx5KCBhcmd1bWVudHMgKTtcblx0XHR9XG5cdH0gKTtcblxuXHQkLmZuLmJ1dHRvbiA9ICggZnVuY3Rpb24oIG9yaWcgKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhdGhpcy5sZW5ndGggfHwgKCB0aGlzLmxlbmd0aCAmJiB0aGlzWyAwIF0udGFnTmFtZSAhPT0gXCJJTlBVVFwiICkgfHxcblx0XHRcdFx0XHQoIHRoaXMubGVuZ3RoICYmIHRoaXNbIDAgXS50YWdOYW1lID09PSBcIklOUFVUXCIgJiYgKFxuXHRcdFx0XHRcdFx0dGhpcy5hdHRyKCBcInR5cGVcIiApICE9PSBcImNoZWNrYm94XCIgJiYgdGhpcy5hdHRyKCBcInR5cGVcIiApICE9PSBcInJhZGlvXCJcblx0XHRcdFx0XHQpICkgKSB7XG5cdFx0XHRcdHJldHVybiBvcmlnLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdH1cblx0XHRcdGlmICggISQudWkuY2hlY2tib3hyYWRpbyApIHtcblx0XHRcdFx0JC5lcnJvciggXCJDaGVja2JveHJhZGlvIHdpZGdldCBtaXNzaW5nXCIgKTtcblx0XHRcdH1cblx0XHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCA9PT0gMCApIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2hlY2tib3hyYWRpbygge1xuXHRcdFx0XHRcdFwiaWNvblwiOiBmYWxzZVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5jaGVja2JveHJhZGlvLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9O1xuXHR9ICkoICQuZm4uYnV0dG9uICk7XG5cblx0JC5mbi5idXR0b25zZXQgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAoICEkLnVpLmNvbnRyb2xncm91cCApIHtcblx0XHRcdCQuZXJyb3IoIFwiQ29udHJvbGdyb3VwIHdpZGdldCBtaXNzaW5nXCIgKTtcblx0XHR9XG5cdFx0aWYgKCBhcmd1bWVudHNbIDAgXSA9PT0gXCJvcHRpb25cIiAmJiBhcmd1bWVudHNbIDEgXSA9PT0gXCJpdGVtc1wiICYmIGFyZ3VtZW50c1sgMiBdICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udHJvbGdyb3VwLmFwcGx5KCB0aGlzLFxuXHRcdFx0XHRbIGFyZ3VtZW50c1sgMCBdLCBcIml0ZW1zLmJ1dHRvblwiLCBhcmd1bWVudHNbIDIgXSBdICk7XG5cdFx0fVxuXHRcdGlmICggYXJndW1lbnRzWyAwIF0gPT09IFwib3B0aW9uXCIgJiYgYXJndW1lbnRzWyAxIF0gPT09IFwiaXRlbXNcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbnRyb2xncm91cC5hcHBseSggdGhpcywgWyBhcmd1bWVudHNbIDAgXSwgXCJpdGVtcy5idXR0b25cIiBdICk7XG5cdFx0fVxuXHRcdGlmICggdHlwZW9mIGFyZ3VtZW50c1sgMCBdID09PSBcIm9iamVjdFwiICYmIGFyZ3VtZW50c1sgMCBdLml0ZW1zICkge1xuXHRcdFx0YXJndW1lbnRzWyAwIF0uaXRlbXMgPSB7XG5cdFx0XHRcdGJ1dHRvbjogYXJndW1lbnRzWyAwIF0uaXRlbXNcblx0XHRcdH07XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmNvbnRyb2xncm91cC5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH07XG59XG5cbnZhciB3aWRnZXRzQnV0dG9uID0gJC51aS5idXR0b247XG5cblxuLy8ganNjczpkaXNhYmxlIG1heGltdW1MaW5lTGVuZ3RoXG4vKiBqc2NzOmRpc2FibGUgcmVxdWlyZUNhbWVsQ2FzZU9yVXBwZXJDYXNlSWRlbnRpZmllcnMgKi9cbi8qIVxuICogalF1ZXJ5IFVJIERhdGVwaWNrZXIgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IERhdGVwaWNrZXJcbi8vPj5ncm91cDogV2lkZ2V0c1xuLy8+PmRlc2NyaXB0aW9uOiBEaXNwbGF5cyBhIGNhbGVuZGFyIGZyb20gYW4gaW5wdXQgb3IgaW5saW5lIGZvciBzZWxlY3RpbmcgZGF0ZXMuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vZGF0ZXBpY2tlci9cbi8vPj5kZW1vczogaHR0cDovL2pxdWVyeXVpLmNvbS9kYXRlcGlja2VyL1xuLy8+PmNzcy5zdHJ1Y3R1cmU6IC4uLy4uL3RoZW1lcy9iYXNlL2NvcmUuY3NzXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvZGF0ZXBpY2tlci5jc3Ncbi8vPj5jc3MudGhlbWU6IC4uLy4uL3RoZW1lcy9iYXNlL3RoZW1lLmNzc1xuXG5cblxuJC5leHRlbmQoICQudWksIHsgZGF0ZXBpY2tlcjogeyB2ZXJzaW9uOiBcIjEuMTIuMVwiIH0gfSApO1xuXG52YXIgZGF0ZXBpY2tlcl9pbnN0QWN0aXZlO1xuXG5mdW5jdGlvbiBkYXRlcGlja2VyX2dldFppbmRleCggZWxlbSApIHtcblx0dmFyIHBvc2l0aW9uLCB2YWx1ZTtcblx0d2hpbGUgKCBlbGVtLmxlbmd0aCAmJiBlbGVtWyAwIF0gIT09IGRvY3VtZW50ICkge1xuXG5cdFx0Ly8gSWdub3JlIHotaW5kZXggaWYgcG9zaXRpb24gaXMgc2V0IHRvIGEgdmFsdWUgd2hlcmUgei1pbmRleCBpcyBpZ25vcmVkIGJ5IHRoZSBicm93c2VyXG5cdFx0Ly8gVGhpcyBtYWtlcyBiZWhhdmlvciBvZiB0aGlzIGZ1bmN0aW9uIGNvbnNpc3RlbnQgYWNyb3NzIGJyb3dzZXJzXG5cdFx0Ly8gV2ViS2l0IGFsd2F5cyByZXR1cm5zIGF1dG8gaWYgdGhlIGVsZW1lbnQgaXMgcG9zaXRpb25lZFxuXHRcdHBvc2l0aW9uID0gZWxlbS5jc3MoIFwicG9zaXRpb25cIiApO1xuXHRcdGlmICggcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJyZWxhdGl2ZVwiIHx8IHBvc2l0aW9uID09PSBcImZpeGVkXCIgKSB7XG5cblx0XHRcdC8vIElFIHJldHVybnMgMCB3aGVuIHpJbmRleCBpcyBub3Qgc3BlY2lmaWVkXG5cdFx0XHQvLyBvdGhlciBicm93c2VycyByZXR1cm4gYSBzdHJpbmdcblx0XHRcdC8vIHdlIGlnbm9yZSB0aGUgY2FzZSBvZiBuZXN0ZWQgZWxlbWVudHMgd2l0aCBhbiBleHBsaWNpdCB2YWx1ZSBvZiAwXG5cdFx0XHQvLyA8ZGl2IHN0eWxlPVwiei1pbmRleDogLTEwO1wiPjxkaXYgc3R5bGU9XCJ6LWluZGV4OiAwO1wiPjwvZGl2PjwvZGl2PlxuXHRcdFx0dmFsdWUgPSBwYXJzZUludCggZWxlbS5jc3MoIFwiekluZGV4XCIgKSwgMTAgKTtcblx0XHRcdGlmICggIWlzTmFOKCB2YWx1ZSApICYmIHZhbHVlICE9PSAwICkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsZW0gPSBlbGVtLnBhcmVudCgpO1xuXHR9XG5cblx0cmV0dXJuIDA7XG59XG4vKiBEYXRlIHBpY2tlciBtYW5hZ2VyLlxuICAgVXNlIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcywgJC5kYXRlcGlja2VyLCB0byBpbnRlcmFjdCB3aXRoIHRoZSBkYXRlIHBpY2tlci5cbiAgIFNldHRpbmdzIGZvciAoZ3JvdXBzIG9mKSBkYXRlIHBpY2tlcnMgYXJlIG1haW50YWluZWQgaW4gYW4gaW5zdGFuY2Ugb2JqZWN0LFxuICAgYWxsb3dpbmcgbXVsdGlwbGUgZGlmZmVyZW50IHNldHRpbmdzIG9uIHRoZSBzYW1lIHBhZ2UuICovXG5cbmZ1bmN0aW9uIERhdGVwaWNrZXIoKSB7XG5cdHRoaXMuX2N1ckluc3QgPSBudWxsOyAvLyBUaGUgY3VycmVudCBpbnN0YW5jZSBpbiB1c2Vcblx0dGhpcy5fa2V5RXZlbnQgPSBmYWxzZTsgLy8gSWYgdGhlIGxhc3QgZXZlbnQgd2FzIGEga2V5IGV2ZW50XG5cdHRoaXMuX2Rpc2FibGVkSW5wdXRzID0gW107IC8vIExpc3Qgb2YgZGF0ZSBwaWNrZXIgaW5wdXRzIHRoYXQgaGF2ZSBiZWVuIGRpc2FibGVkXG5cdHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nID0gZmFsc2U7IC8vIFRydWUgaWYgdGhlIHBvcHVwIHBpY2tlciBpcyBzaG93aW5nICwgZmFsc2UgaWYgbm90XG5cdHRoaXMuX2luRGlhbG9nID0gZmFsc2U7IC8vIFRydWUgaWYgc2hvd2luZyB3aXRoaW4gYSBcImRpYWxvZ1wiLCBmYWxzZSBpZiBub3Rcblx0dGhpcy5fbWFpbkRpdklkID0gXCJ1aS1kYXRlcGlja2VyLWRpdlwiOyAvLyBUaGUgSUQgb2YgdGhlIG1haW4gZGF0ZXBpY2tlciBkaXZpc2lvblxuXHR0aGlzLl9pbmxpbmVDbGFzcyA9IFwidWktZGF0ZXBpY2tlci1pbmxpbmVcIjsgLy8gVGhlIG5hbWUgb2YgdGhlIGlubGluZSBtYXJrZXIgY2xhc3Ncblx0dGhpcy5fYXBwZW5kQ2xhc3MgPSBcInVpLWRhdGVwaWNrZXItYXBwZW5kXCI7IC8vIFRoZSBuYW1lIG9mIHRoZSBhcHBlbmQgbWFya2VyIGNsYXNzXG5cdHRoaXMuX3RyaWdnZXJDbGFzcyA9IFwidWktZGF0ZXBpY2tlci10cmlnZ2VyXCI7IC8vIFRoZSBuYW1lIG9mIHRoZSB0cmlnZ2VyIG1hcmtlciBjbGFzc1xuXHR0aGlzLl9kaWFsb2dDbGFzcyA9IFwidWktZGF0ZXBpY2tlci1kaWFsb2dcIjsgLy8gVGhlIG5hbWUgb2YgdGhlIGRpYWxvZyBtYXJrZXIgY2xhc3Ncblx0dGhpcy5fZGlzYWJsZUNsYXNzID0gXCJ1aS1kYXRlcGlja2VyLWRpc2FibGVkXCI7IC8vIFRoZSBuYW1lIG9mIHRoZSBkaXNhYmxlZCBjb3ZlcmluZyBtYXJrZXIgY2xhc3Ncblx0dGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3MgPSBcInVpLWRhdGVwaWNrZXItdW5zZWxlY3RhYmxlXCI7IC8vIFRoZSBuYW1lIG9mIHRoZSB1bnNlbGVjdGFibGUgY2VsbCBtYXJrZXIgY2xhc3Ncblx0dGhpcy5fY3VycmVudENsYXNzID0gXCJ1aS1kYXRlcGlja2VyLWN1cnJlbnQtZGF5XCI7IC8vIFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGRheSBtYXJrZXIgY2xhc3Ncblx0dGhpcy5fZGF5T3ZlckNsYXNzID0gXCJ1aS1kYXRlcGlja2VyLWRheXMtY2VsbC1vdmVyXCI7IC8vIFRoZSBuYW1lIG9mIHRoZSBkYXkgaG92ZXIgbWFya2VyIGNsYXNzXG5cdHRoaXMucmVnaW9uYWwgPSBbXTsgLy8gQXZhaWxhYmxlIHJlZ2lvbmFsIHNldHRpbmdzLCBpbmRleGVkIGJ5IGxhbmd1YWdlIGNvZGVcblx0dGhpcy5yZWdpb25hbFsgXCJcIiBdID0geyAvLyBEZWZhdWx0IHJlZ2lvbmFsIHNldHRpbmdzXG5cdFx0Y2xvc2VUZXh0OiBcIkRvbmVcIiwgLy8gRGlzcGxheSB0ZXh0IGZvciBjbG9zZSBsaW5rXG5cdFx0cHJldlRleHQ6IFwiUHJldlwiLCAvLyBEaXNwbGF5IHRleHQgZm9yIHByZXZpb3VzIG1vbnRoIGxpbmtcblx0XHRuZXh0VGV4dDogXCJOZXh0XCIsIC8vIERpc3BsYXkgdGV4dCBmb3IgbmV4dCBtb250aCBsaW5rXG5cdFx0Y3VycmVudFRleHQ6IFwiVG9kYXlcIiwgLy8gRGlzcGxheSB0ZXh0IGZvciBjdXJyZW50IG1vbnRoIGxpbmtcblx0XHRtb250aE5hbWVzOiBbIFwiSmFudWFyeVwiLFwiRmVicnVhcnlcIixcIk1hcmNoXCIsXCJBcHJpbFwiLFwiTWF5XCIsXCJKdW5lXCIsXG5cdFx0XHRcIkp1bHlcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYmVyXCIsXCJPY3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVjZW1iZXJcIiBdLCAvLyBOYW1lcyBvZiBtb250aHMgZm9yIGRyb3AtZG93biBhbmQgZm9ybWF0dGluZ1xuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyBcIkphblwiLCBcIkZlYlwiLCBcIk1hclwiLCBcIkFwclwiLCBcIk1heVwiLCBcIkp1blwiLCBcIkp1bFwiLCBcIkF1Z1wiLCBcIlNlcFwiLCBcIk9jdFwiLCBcIk5vdlwiLCBcIkRlY1wiIF0sIC8vIEZvciBmb3JtYXR0aW5nXG5cdFx0ZGF5TmFtZXM6IFsgXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiIF0sIC8vIEZvciBmb3JtYXR0aW5nXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyBcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiIF0sIC8vIEZvciBmb3JtYXR0aW5nXG5cdFx0ZGF5TmFtZXNNaW46IFsgXCJTdVwiLFwiTW9cIixcIlR1XCIsXCJXZVwiLFwiVGhcIixcIkZyXCIsXCJTYVwiIF0sIC8vIENvbHVtbiBoZWFkaW5ncyBmb3IgZGF5cyBzdGFydGluZyBhdCBTdW5kYXlcblx0XHR3ZWVrSGVhZGVyOiBcIldrXCIsIC8vIENvbHVtbiBoZWFkZXIgZm9yIHdlZWsgb2YgdGhlIHllYXJcblx0XHRkYXRlRm9ybWF0OiBcIm1tL2RkL3l5XCIsIC8vIFNlZSBmb3JtYXQgb3B0aW9ucyBvbiBwYXJzZURhdGVcblx0XHRmaXJzdERheTogMCwgLy8gVGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlaywgU3VuID0gMCwgTW9uID0gMSwgLi4uXG5cdFx0aXNSVEw6IGZhbHNlLCAvLyBUcnVlIGlmIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2UsIGZhbHNlIGlmIGxlZnQtdG8tcmlnaHRcblx0XHRzaG93TW9udGhBZnRlclllYXI6IGZhbHNlLCAvLyBUcnVlIGlmIHRoZSB5ZWFyIHNlbGVjdCBwcmVjZWRlcyBtb250aCwgZmFsc2UgZm9yIG1vbnRoIHRoZW4geWVhclxuXHRcdHllYXJTdWZmaXg6IFwiXCIgLy8gQWRkaXRpb25hbCB0ZXh0IHRvIGFwcGVuZCB0byB0aGUgeWVhciBpbiB0aGUgbW9udGggaGVhZGVyc1xuXHR9O1xuXHR0aGlzLl9kZWZhdWx0cyA9IHsgLy8gR2xvYmFsIGRlZmF1bHRzIGZvciBhbGwgdGhlIGRhdGUgcGlja2VyIGluc3RhbmNlc1xuXHRcdHNob3dPbjogXCJmb2N1c1wiLCAvLyBcImZvY3VzXCIgZm9yIHBvcHVwIG9uIGZvY3VzLFxuXHRcdFx0Ly8gXCJidXR0b25cIiBmb3IgdHJpZ2dlciBidXR0b24sIG9yIFwiYm90aFwiIGZvciBlaXRoZXJcblx0XHRzaG93QW5pbTogXCJmYWRlSW5cIiwgLy8gTmFtZSBvZiBqUXVlcnkgYW5pbWF0aW9uIGZvciBwb3B1cFxuXHRcdHNob3dPcHRpb25zOiB7fSwgLy8gT3B0aW9ucyBmb3IgZW5oYW5jZWQgYW5pbWF0aW9uc1xuXHRcdGRlZmF1bHREYXRlOiBudWxsLCAvLyBVc2VkIHdoZW4gZmllbGQgaXMgYmxhbms6IGFjdHVhbCBkYXRlLFxuXHRcdFx0Ly8gKy8tbnVtYmVyIGZvciBvZmZzZXQgZnJvbSB0b2RheSwgbnVsbCBmb3IgdG9kYXlcblx0XHRhcHBlbmRUZXh0OiBcIlwiLCAvLyBEaXNwbGF5IHRleHQgZm9sbG93aW5nIHRoZSBpbnB1dCBib3gsIGUuZy4gc2hvd2luZyB0aGUgZm9ybWF0XG5cdFx0YnV0dG9uVGV4dDogXCIuLi5cIiwgLy8gVGV4dCBmb3IgdHJpZ2dlciBidXR0b25cblx0XHRidXR0b25JbWFnZTogXCJcIiwgLy8gVVJMIGZvciB0cmlnZ2VyIGJ1dHRvbiBpbWFnZVxuXHRcdGJ1dHRvbkltYWdlT25seTogZmFsc2UsIC8vIFRydWUgaWYgdGhlIGltYWdlIGFwcGVhcnMgYWxvbmUsIGZhbHNlIGlmIGl0IGFwcGVhcnMgb24gYSBidXR0b25cblx0XHRoaWRlSWZOb1ByZXZOZXh0OiBmYWxzZSwgLy8gVHJ1ZSB0byBoaWRlIG5leHQvcHJldmlvdXMgbW9udGggbGlua3Ncblx0XHRcdC8vIGlmIG5vdCBhcHBsaWNhYmxlLCBmYWxzZSB0byBqdXN0IGRpc2FibGUgdGhlbVxuXHRcdG5hdmlnYXRpb25Bc0RhdGVGb3JtYXQ6IGZhbHNlLCAvLyBUcnVlIGlmIGRhdGUgZm9ybWF0dGluZyBhcHBsaWVkIHRvIHByZXYvdG9kYXkvbmV4dCBsaW5rc1xuXHRcdGdvdG9DdXJyZW50OiBmYWxzZSwgLy8gVHJ1ZSBpZiB0b2RheSBsaW5rIGdvZXMgYmFjayB0byBjdXJyZW50IHNlbGVjdGlvbiBpbnN0ZWFkXG5cdFx0Y2hhbmdlTW9udGg6IGZhbHNlLCAvLyBUcnVlIGlmIG1vbnRoIGNhbiBiZSBzZWxlY3RlZCBkaXJlY3RseSwgZmFsc2UgaWYgb25seSBwcmV2L25leHRcblx0XHRjaGFuZ2VZZWFyOiBmYWxzZSwgLy8gVHJ1ZSBpZiB5ZWFyIGNhbiBiZSBzZWxlY3RlZCBkaXJlY3RseSwgZmFsc2UgaWYgb25seSBwcmV2L25leHRcblx0XHR5ZWFyUmFuZ2U6IFwiYy0xMDpjKzEwXCIsIC8vIFJhbmdlIG9mIHllYXJzIHRvIGRpc3BsYXkgaW4gZHJvcC1kb3duLFxuXHRcdFx0Ly8gZWl0aGVyIHJlbGF0aXZlIHRvIHRvZGF5J3MgeWVhciAoLW5uOitubiksIHJlbGF0aXZlIHRvIGN1cnJlbnRseSBkaXNwbGF5ZWQgeWVhclxuXHRcdFx0Ly8gKGMtbm46YytubiksIGFic29sdXRlIChubm5uOm5ubm4pLCBvciBhIGNvbWJpbmF0aW9uIG9mIHRoZSBhYm92ZSAobm5ubjotbilcblx0XHRzaG93T3RoZXJNb250aHM6IGZhbHNlLCAvLyBUcnVlIHRvIHNob3cgZGF0ZXMgaW4gb3RoZXIgbW9udGhzLCBmYWxzZSB0byBsZWF2ZSBibGFua1xuXHRcdHNlbGVjdE90aGVyTW9udGhzOiBmYWxzZSwgLy8gVHJ1ZSB0byBhbGxvdyBzZWxlY3Rpb24gb2YgZGF0ZXMgaW4gb3RoZXIgbW9udGhzLCBmYWxzZSBmb3IgdW5zZWxlY3RhYmxlXG5cdFx0c2hvd1dlZWs6IGZhbHNlLCAvLyBUcnVlIHRvIHNob3cgd2VlayBvZiB0aGUgeWVhciwgZmFsc2UgdG8gbm90IHNob3cgaXRcblx0XHRjYWxjdWxhdGVXZWVrOiB0aGlzLmlzbzg2MDFXZWVrLCAvLyBIb3cgdG8gY2FsY3VsYXRlIHRoZSB3ZWVrIG9mIHRoZSB5ZWFyLFxuXHRcdFx0Ly8gdGFrZXMgYSBEYXRlIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIHdlZWsgZm9yIGl0XG5cdFx0c2hvcnRZZWFyQ3V0b2ZmOiBcIisxMFwiLCAvLyBTaG9ydCB5ZWFyIHZhbHVlcyA8IHRoaXMgYXJlIGluIHRoZSBjdXJyZW50IGNlbnR1cnksXG5cdFx0XHQvLyA+IHRoaXMgYXJlIGluIHRoZSBwcmV2aW91cyBjZW50dXJ5LFxuXHRcdFx0Ly8gc3RyaW5nIHZhbHVlIHN0YXJ0aW5nIHdpdGggXCIrXCIgZm9yIGN1cnJlbnQgeWVhciArIHZhbHVlXG5cdFx0bWluRGF0ZTogbnVsbCwgLy8gVGhlIGVhcmxpZXN0IHNlbGVjdGFibGUgZGF0ZSwgb3IgbnVsbCBmb3Igbm8gbGltaXRcblx0XHRtYXhEYXRlOiBudWxsLCAvLyBUaGUgbGF0ZXN0IHNlbGVjdGFibGUgZGF0ZSwgb3IgbnVsbCBmb3Igbm8gbGltaXRcblx0XHRkdXJhdGlvbjogXCJmYXN0XCIsIC8vIER1cmF0aW9uIG9mIGRpc3BsYXkvY2xvc3VyZVxuXHRcdGJlZm9yZVNob3dEYXk6IG51bGwsIC8vIEZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBkYXRlIGFuZCByZXR1cm5zIGFuIGFycmF5IHdpdGhcblx0XHRcdC8vIFswXSA9IHRydWUgaWYgc2VsZWN0YWJsZSwgZmFsc2UgaWYgbm90LCBbMV0gPSBjdXN0b20gQ1NTIGNsYXNzIG5hbWUocykgb3IgXCJcIixcblx0XHRcdC8vIFsyXSA9IGNlbGwgdGl0bGUgKG9wdGlvbmFsKSwgZS5nLiAkLmRhdGVwaWNrZXIubm9XZWVrZW5kc1xuXHRcdGJlZm9yZVNob3c6IG51bGwsIC8vIEZ1bmN0aW9uIHRoYXQgdGFrZXMgYW4gaW5wdXQgZmllbGQgYW5kXG5cdFx0XHQvLyByZXR1cm5zIGEgc2V0IG9mIGN1c3RvbSBzZXR0aW5ncyBmb3IgdGhlIGRhdGUgcGlja2VyXG5cdFx0b25TZWxlY3Q6IG51bGwsIC8vIERlZmluZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gYSBkYXRlIGlzIHNlbGVjdGVkXG5cdFx0b25DaGFuZ2VNb250aFllYXI6IG51bGwsIC8vIERlZmluZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gdGhlIG1vbnRoIG9yIHllYXIgaXMgY2hhbmdlZFxuXHRcdG9uQ2xvc2U6IG51bGwsIC8vIERlZmluZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gdGhlIGRhdGVwaWNrZXIgaXMgY2xvc2VkXG5cdFx0bnVtYmVyT2ZNb250aHM6IDEsIC8vIE51bWJlciBvZiBtb250aHMgdG8gc2hvdyBhdCBhIHRpbWVcblx0XHRzaG93Q3VycmVudEF0UG9zOiAwLCAvLyBUaGUgcG9zaXRpb24gaW4gbXVsdGlwZSBtb250aHMgYXQgd2hpY2ggdG8gc2hvdyB0aGUgY3VycmVudCBtb250aCAoc3RhcnRpbmcgYXQgMClcblx0XHRzdGVwTW9udGhzOiAxLCAvLyBOdW1iZXIgb2YgbW9udGhzIHRvIHN0ZXAgYmFjay9mb3J3YXJkXG5cdFx0c3RlcEJpZ01vbnRoczogMTIsIC8vIE51bWJlciBvZiBtb250aHMgdG8gc3RlcCBiYWNrL2ZvcndhcmQgZm9yIHRoZSBiaWcgbGlua3Ncblx0XHRhbHRGaWVsZDogXCJcIiwgLy8gU2VsZWN0b3IgZm9yIGFuIGFsdGVybmF0ZSBmaWVsZCB0byBzdG9yZSBzZWxlY3RlZCBkYXRlcyBpbnRvXG5cdFx0YWx0Rm9ybWF0OiBcIlwiLCAvLyBUaGUgZGF0ZSBmb3JtYXQgdG8gdXNlIGZvciB0aGUgYWx0ZXJuYXRlIGZpZWxkXG5cdFx0Y29uc3RyYWluSW5wdXQ6IHRydWUsIC8vIFRoZSBpbnB1dCBpcyBjb25zdHJhaW5lZCBieSB0aGUgY3VycmVudCBkYXRlIGZvcm1hdFxuXHRcdHNob3dCdXR0b25QYW5lbDogZmFsc2UsIC8vIFRydWUgdG8gc2hvdyBidXR0b24gcGFuZWwsIGZhbHNlIHRvIG5vdCBzaG93IGl0XG5cdFx0YXV0b1NpemU6IGZhbHNlLCAvLyBUcnVlIHRvIHNpemUgdGhlIGlucHV0IGZvciB0aGUgZGF0ZSBmb3JtYXQsIGZhbHNlIHRvIGxlYXZlIGFzIGlzXG5cdFx0ZGlzYWJsZWQ6IGZhbHNlIC8vIFRoZSBpbml0aWFsIGRpc2FibGVkIHN0YXRlXG5cdH07XG5cdCQuZXh0ZW5kKCB0aGlzLl9kZWZhdWx0cywgdGhpcy5yZWdpb25hbFsgXCJcIiBdICk7XG5cdHRoaXMucmVnaW9uYWwuZW4gPSAkLmV4dGVuZCggdHJ1ZSwge30sIHRoaXMucmVnaW9uYWxbIFwiXCIgXSApO1xuXHR0aGlzLnJlZ2lvbmFsWyBcImVuLVVTXCIgXSA9ICQuZXh0ZW5kKCB0cnVlLCB7fSwgdGhpcy5yZWdpb25hbC5lbiApO1xuXHR0aGlzLmRwRGl2ID0gZGF0ZXBpY2tlcl9iaW5kSG92ZXIoICQoIFwiPGRpdiBpZD0nXCIgKyB0aGlzLl9tYWluRGl2SWQgKyBcIicgY2xhc3M9J3VpLWRhdGVwaWNrZXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsJz48L2Rpdj5cIiApICk7XG59XG5cbiQuZXh0ZW5kKCBEYXRlcGlja2VyLnByb3RvdHlwZSwge1xuXHQvKiBDbGFzcyBuYW1lIGFkZGVkIHRvIGVsZW1lbnRzIHRvIGluZGljYXRlIGFscmVhZHkgY29uZmlndXJlZCB3aXRoIGEgZGF0ZSBwaWNrZXIuICovXG5cdG1hcmtlckNsYXNzTmFtZTogXCJoYXNEYXRlcGlja2VyXCIsXG5cblx0Ly9LZWVwIHRyYWNrIG9mIHRoZSBtYXhpbXVtIG51bWJlciBvZiByb3dzIGRpc3BsYXllZCAoc2VlICM3MDQzKVxuXHRtYXhSb3dzOiA0LFxuXG5cdC8vIFRPRE8gcmVuYW1lIHRvIFwid2lkZ2V0XCIgd2hlbiBzd2l0Y2hpbmcgdG8gd2lkZ2V0IGZhY3Rvcnlcblx0X3dpZGdldERhdGVwaWNrZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmRwRGl2O1xuXHR9LFxuXG5cdC8qIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciBhbGwgaW5zdGFuY2VzIG9mIHRoZSBkYXRlIHBpY2tlci5cblx0ICogQHBhcmFtICBzZXR0aW5ncyAgb2JqZWN0IC0gdGhlIG5ldyBzZXR0aW5ncyB0byB1c2UgYXMgZGVmYXVsdHMgKGFub255bW91cyBvYmplY3QpXG5cdCAqIEByZXR1cm4gdGhlIG1hbmFnZXIgb2JqZWN0XG5cdCAqL1xuXHRzZXREZWZhdWx0czogZnVuY3Rpb24oIHNldHRpbmdzICkge1xuXHRcdGRhdGVwaWNrZXJfZXh0ZW5kUmVtb3ZlKCB0aGlzLl9kZWZhdWx0cywgc2V0dGluZ3MgfHwge30gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHQvKiBBdHRhY2ggdGhlIGRhdGUgcGlja2VyIHRvIGEgalF1ZXJ5IHNlbGVjdGlvbi5cblx0ICogQHBhcmFtICB0YXJnZXRcdGVsZW1lbnQgLSB0aGUgdGFyZ2V0IGlucHV0IGZpZWxkIG9yIGRpdmlzaW9uIG9yIHNwYW5cblx0ICogQHBhcmFtICBzZXR0aW5ncyAgb2JqZWN0IC0gdGhlIG5ldyBzZXR0aW5ncyB0byB1c2UgZm9yIHRoaXMgZGF0ZSBwaWNrZXIgaW5zdGFuY2UgKGFub255bW91cylcblx0ICovXG5cdF9hdHRhY2hEYXRlcGlja2VyOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHtcblx0XHR2YXIgbm9kZU5hbWUsIGlubGluZSwgaW5zdDtcblx0XHRub2RlTmFtZSA9IHRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdGlubGluZSA9ICggbm9kZU5hbWUgPT09IFwiZGl2XCIgfHwgbm9kZU5hbWUgPT09IFwic3BhblwiICk7XG5cdFx0aWYgKCAhdGFyZ2V0LmlkICkge1xuXHRcdFx0dGhpcy51dWlkICs9IDE7XG5cdFx0XHR0YXJnZXQuaWQgPSBcImRwXCIgKyB0aGlzLnV1aWQ7XG5cdFx0fVxuXHRcdGluc3QgPSB0aGlzLl9uZXdJbnN0KCAkKCB0YXJnZXQgKSwgaW5saW5lICk7XG5cdFx0aW5zdC5zZXR0aW5ncyA9ICQuZXh0ZW5kKCB7fSwgc2V0dGluZ3MgfHwge30gKTtcblx0XHRpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgKSB7XG5cdFx0XHR0aGlzLl9jb25uZWN0RGF0ZXBpY2tlciggdGFyZ2V0LCBpbnN0ICk7XG5cdFx0fSBlbHNlIGlmICggaW5saW5lICkge1xuXHRcdFx0dGhpcy5faW5saW5lRGF0ZXBpY2tlciggdGFyZ2V0LCBpbnN0ICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvYmplY3QuICovXG5cdF9uZXdJbnN0OiBmdW5jdGlvbiggdGFyZ2V0LCBpbmxpbmUgKSB7XG5cdFx0dmFyIGlkID0gdGFyZ2V0WyAwIF0uaWQucmVwbGFjZSggLyhbXkEtWmEtejAtOV9cXC1dKS9nLCBcIlxcXFxcXFxcJDFcIiApOyAvLyBlc2NhcGUgalF1ZXJ5IG1ldGEgY2hhcnNcblx0XHRyZXR1cm4geyBpZDogaWQsIGlucHV0OiB0YXJnZXQsIC8vIGFzc29jaWF0ZWQgdGFyZ2V0XG5cdFx0XHRzZWxlY3RlZERheTogMCwgc2VsZWN0ZWRNb250aDogMCwgc2VsZWN0ZWRZZWFyOiAwLCAvLyBjdXJyZW50IHNlbGVjdGlvblxuXHRcdFx0ZHJhd01vbnRoOiAwLCBkcmF3WWVhcjogMCwgLy8gbW9udGggYmVpbmcgZHJhd25cblx0XHRcdGlubGluZTogaW5saW5lLCAvLyBpcyBkYXRlcGlja2VyIGlubGluZSBvciBub3Rcblx0XHRcdGRwRGl2OiAoICFpbmxpbmUgPyB0aGlzLmRwRGl2IDogLy8gcHJlc2VudGF0aW9uIGRpdlxuXHRcdFx0ZGF0ZXBpY2tlcl9iaW5kSG92ZXIoICQoIFwiPGRpdiBjbGFzcz0nXCIgKyB0aGlzLl9pbmxpbmVDbGFzcyArIFwiIHVpLWRhdGVwaWNrZXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsJz48L2Rpdj5cIiApICkgKSB9O1xuXHR9LFxuXG5cdC8qIEF0dGFjaCB0aGUgZGF0ZSBwaWNrZXIgdG8gYW4gaW5wdXQgZmllbGQuICovXG5cdF9jb25uZWN0RGF0ZXBpY2tlcjogZnVuY3Rpb24oIHRhcmdldCwgaW5zdCApIHtcblx0XHR2YXIgaW5wdXQgPSAkKCB0YXJnZXQgKTtcblx0XHRpbnN0LmFwcGVuZCA9ICQoIFtdICk7XG5cdFx0aW5zdC50cmlnZ2VyID0gJCggW10gKTtcblx0XHRpZiAoIGlucHV0Lmhhc0NsYXNzKCB0aGlzLm1hcmtlckNsYXNzTmFtZSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLl9hdHRhY2htZW50cyggaW5wdXQsIGluc3QgKTtcblx0XHRpbnB1dC5hZGRDbGFzcyggdGhpcy5tYXJrZXJDbGFzc05hbWUgKS5vbiggXCJrZXlkb3duXCIsIHRoaXMuX2RvS2V5RG93biApLlxuXHRcdFx0b24oIFwia2V5cHJlc3NcIiwgdGhpcy5fZG9LZXlQcmVzcyApLm9uKCBcImtleXVwXCIsIHRoaXMuX2RvS2V5VXAgKTtcblx0XHR0aGlzLl9hdXRvU2l6ZSggaW5zdCApO1xuXHRcdCQuZGF0YSggdGFyZ2V0LCBcImRhdGVwaWNrZXJcIiwgaW5zdCApO1xuXG5cdFx0Ly9JZiBkaXNhYmxlZCBvcHRpb24gaXMgdHJ1ZSwgZGlzYWJsZSB0aGUgZGF0ZXBpY2tlciBvbmNlIGl0IGhhcyBiZWVuIGF0dGFjaGVkIHRvIHRoZSBpbnB1dCAoc2VlIHRpY2tldCAjNTY2NSlcblx0XHRpZiAoIGluc3Quc2V0dGluZ3MuZGlzYWJsZWQgKSB7XG5cdFx0XHR0aGlzLl9kaXNhYmxlRGF0ZXBpY2tlciggdGFyZ2V0ICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qIE1ha2UgYXR0YWNobWVudHMgYmFzZWQgb24gc2V0dGluZ3MuICovXG5cdF9hdHRhY2htZW50czogZnVuY3Rpb24oIGlucHV0LCBpbnN0ICkge1xuXHRcdHZhciBzaG93T24sIGJ1dHRvblRleHQsIGJ1dHRvbkltYWdlLFxuXHRcdFx0YXBwZW5kVGV4dCA9IHRoaXMuX2dldCggaW5zdCwgXCJhcHBlbmRUZXh0XCIgKSxcblx0XHRcdGlzUlRMID0gdGhpcy5fZ2V0KCBpbnN0LCBcImlzUlRMXCIgKTtcblxuXHRcdGlmICggaW5zdC5hcHBlbmQgKSB7XG5cdFx0XHRpbnN0LmFwcGVuZC5yZW1vdmUoKTtcblx0XHR9XG5cdFx0aWYgKCBhcHBlbmRUZXh0ICkge1xuXHRcdFx0aW5zdC5hcHBlbmQgPSAkKCBcIjxzcGFuIGNsYXNzPSdcIiArIHRoaXMuX2FwcGVuZENsYXNzICsgXCInPlwiICsgYXBwZW5kVGV4dCArIFwiPC9zcGFuPlwiICk7XG5cdFx0XHRpbnB1dFsgaXNSVEwgPyBcImJlZm9yZVwiIDogXCJhZnRlclwiIF0oIGluc3QuYXBwZW5kICk7XG5cdFx0fVxuXG5cdFx0aW5wdXQub2ZmKCBcImZvY3VzXCIsIHRoaXMuX3Nob3dEYXRlcGlja2VyICk7XG5cblx0XHRpZiAoIGluc3QudHJpZ2dlciApIHtcblx0XHRcdGluc3QudHJpZ2dlci5yZW1vdmUoKTtcblx0XHR9XG5cblx0XHRzaG93T24gPSB0aGlzLl9nZXQoIGluc3QsIFwic2hvd09uXCIgKTtcblx0XHRpZiAoIHNob3dPbiA9PT0gXCJmb2N1c1wiIHx8IHNob3dPbiA9PT0gXCJib3RoXCIgKSB7IC8vIHBvcC11cCBkYXRlIHBpY2tlciB3aGVuIGluIHRoZSBtYXJrZWQgZmllbGRcblx0XHRcdGlucHV0Lm9uKCBcImZvY3VzXCIsIHRoaXMuX3Nob3dEYXRlcGlja2VyICk7XG5cdFx0fVxuXHRcdGlmICggc2hvd09uID09PSBcImJ1dHRvblwiIHx8IHNob3dPbiA9PT0gXCJib3RoXCIgKSB7IC8vIHBvcC11cCBkYXRlIHBpY2tlciB3aGVuIGJ1dHRvbiBjbGlja2VkXG5cdFx0XHRidXR0b25UZXh0ID0gdGhpcy5fZ2V0KCBpbnN0LCBcImJ1dHRvblRleHRcIiApO1xuXHRcdFx0YnV0dG9uSW1hZ2UgPSB0aGlzLl9nZXQoIGluc3QsIFwiYnV0dG9uSW1hZ2VcIiApO1xuXHRcdFx0aW5zdC50cmlnZ2VyID0gJCggdGhpcy5fZ2V0KCBpbnN0LCBcImJ1dHRvbkltYWdlT25seVwiICkgP1xuXHRcdFx0XHQkKCBcIjxpbWcvPlwiICkuYWRkQ2xhc3MoIHRoaXMuX3RyaWdnZXJDbGFzcyApLlxuXHRcdFx0XHRcdGF0dHIoIHsgc3JjOiBidXR0b25JbWFnZSwgYWx0OiBidXR0b25UZXh0LCB0aXRsZTogYnV0dG9uVGV4dCB9ICkgOlxuXHRcdFx0XHQkKCBcIjxidXR0b24gdHlwZT0nYnV0dG9uJz48L2J1dHRvbj5cIiApLmFkZENsYXNzKCB0aGlzLl90cmlnZ2VyQ2xhc3MgKS5cblx0XHRcdFx0XHRodG1sKCAhYnV0dG9uSW1hZ2UgPyBidXR0b25UZXh0IDogJCggXCI8aW1nLz5cIiApLmF0dHIoXG5cdFx0XHRcdFx0eyBzcmM6YnV0dG9uSW1hZ2UsIGFsdDpidXR0b25UZXh0LCB0aXRsZTpidXR0b25UZXh0IH0gKSApICk7XG5cdFx0XHRpbnB1dFsgaXNSVEwgPyBcImJlZm9yZVwiIDogXCJhZnRlclwiIF0oIGluc3QudHJpZ2dlciApO1xuXHRcdFx0aW5zdC50cmlnZ2VyLm9uKCBcImNsaWNrXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcgJiYgJC5kYXRlcGlja2VyLl9sYXN0SW5wdXQgPT09IGlucHV0WyAwIF0gKSB7XG5cdFx0XHRcdFx0JC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCAkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nICYmICQuZGF0ZXBpY2tlci5fbGFzdElucHV0ICE9PSBpbnB1dFsgMCBdICkge1xuXHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTtcblx0XHRcdFx0XHQkLmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKCBpbnB1dFsgMCBdICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0JC5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlciggaW5wdXRbIDAgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gKTtcblx0XHR9XG5cdH0sXG5cblx0LyogQXBwbHkgdGhlIG1heGltdW0gbGVuZ3RoIGZvciB0aGUgZGF0ZSBmb3JtYXQuICovXG5cdF9hdXRvU2l6ZTogZnVuY3Rpb24oIGluc3QgKSB7XG5cdFx0aWYgKCB0aGlzLl9nZXQoIGluc3QsIFwiYXV0b1NpemVcIiApICYmICFpbnN0LmlubGluZSApIHtcblx0XHRcdHZhciBmaW5kTWF4LCBtYXgsIG1heEksIGksXG5cdFx0XHRcdGRhdGUgPSBuZXcgRGF0ZSggMjAwOSwgMTIgLSAxLCAyMCApLCAvLyBFbnN1cmUgZG91YmxlIGRpZ2l0c1xuXHRcdFx0XHRkYXRlRm9ybWF0ID0gdGhpcy5fZ2V0KCBpbnN0LCBcImRhdGVGb3JtYXRcIiApO1xuXG5cdFx0XHRpZiAoIGRhdGVGb3JtYXQubWF0Y2goIC9bRE1dLyApICkge1xuXHRcdFx0XHRmaW5kTWF4ID0gZnVuY3Rpb24oIG5hbWVzICkge1xuXHRcdFx0XHRcdG1heCA9IDA7XG5cdFx0XHRcdFx0bWF4SSA9IDA7XG5cdFx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0XHRcdGlmICggbmFtZXNbIGkgXS5sZW5ndGggPiBtYXggKSB7XG5cdFx0XHRcdFx0XHRcdG1heCA9IG5hbWVzWyBpIF0ubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRtYXhJID0gaTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG1heEk7XG5cdFx0XHRcdH07XG5cdFx0XHRcdGRhdGUuc2V0TW9udGgoIGZpbmRNYXgoIHRoaXMuX2dldCggaW5zdCwgKCBkYXRlRm9ybWF0Lm1hdGNoKCAvTU0vICkgP1xuXHRcdFx0XHRcdFwibW9udGhOYW1lc1wiIDogXCJtb250aE5hbWVzU2hvcnRcIiApICkgKSApO1xuXHRcdFx0XHRkYXRlLnNldERhdGUoIGZpbmRNYXgoIHRoaXMuX2dldCggaW5zdCwgKCBkYXRlRm9ybWF0Lm1hdGNoKCAvREQvICkgP1xuXHRcdFx0XHRcdFwiZGF5TmFtZXNcIiA6IFwiZGF5TmFtZXNTaG9ydFwiICkgKSApICsgMjAgLSBkYXRlLmdldERheSgpICk7XG5cdFx0XHR9XG5cdFx0XHRpbnN0LmlucHV0LmF0dHIoIFwic2l6ZVwiLCB0aGlzLl9mb3JtYXREYXRlKCBpbnN0LCBkYXRlICkubGVuZ3RoICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qIEF0dGFjaCBhbiBpbmxpbmUgZGF0ZSBwaWNrZXIgdG8gYSBkaXYuICovXG5cdF9pbmxpbmVEYXRlcGlja2VyOiBmdW5jdGlvbiggdGFyZ2V0LCBpbnN0ICkge1xuXHRcdHZhciBkaXZTcGFuID0gJCggdGFyZ2V0ICk7XG5cdFx0aWYgKCBkaXZTcGFuLmhhc0NsYXNzKCB0aGlzLm1hcmtlckNsYXNzTmFtZSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRkaXZTcGFuLmFkZENsYXNzKCB0aGlzLm1hcmtlckNsYXNzTmFtZSApLmFwcGVuZCggaW5zdC5kcERpdiApO1xuXHRcdCQuZGF0YSggdGFyZ2V0LCBcImRhdGVwaWNrZXJcIiwgaW5zdCApO1xuXHRcdHRoaXMuX3NldERhdGUoIGluc3QsIHRoaXMuX2dldERlZmF1bHREYXRlKCBpbnN0ICksIHRydWUgKTtcblx0XHR0aGlzLl91cGRhdGVEYXRlcGlja2VyKCBpbnN0ICk7XG5cdFx0dGhpcy5fdXBkYXRlQWx0ZXJuYXRlKCBpbnN0ICk7XG5cblx0XHQvL0lmIGRpc2FibGVkIG9wdGlvbiBpcyB0cnVlLCBkaXNhYmxlIHRoZSBkYXRlcGlja2VyIGJlZm9yZSBzaG93aW5nIGl0IChzZWUgdGlja2V0ICM1NjY1KVxuXHRcdGlmICggaW5zdC5zZXR0aW5ncy5kaXNhYmxlZCApIHtcblx0XHRcdHRoaXMuX2Rpc2FibGVEYXRlcGlja2VyKCB0YXJnZXQgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgZGlzcGxheTpibG9jayBpbiBwbGFjZSBvZiBpbnN0LmRwRGl2LnNob3coKSB3aGljaCB3b24ndCB3b3JrIG9uIGRpc2Nvbm5lY3RlZCBlbGVtZW50c1xuXHRcdC8vIGh0dHA6Ly9idWdzLmpxdWVyeXVpLmNvbS90aWNrZXQvNzU1MiAtIEEgRGF0ZXBpY2tlciBjcmVhdGVkIG9uIGEgZGV0YWNoZWQgZGl2IGhhcyB6ZXJvIGhlaWdodFxuXHRcdGluc3QuZHBEaXYuY3NzKCBcImRpc3BsYXlcIiwgXCJibG9ja1wiICk7XG5cdH0sXG5cblx0LyogUG9wLXVwIHRoZSBkYXRlIHBpY2tlciBpbiBhIFwiZGlhbG9nXCIgYm94LlxuXHQgKiBAcGFyYW0gIGlucHV0IGVsZW1lbnQgLSBpZ25vcmVkXG5cdCAqIEBwYXJhbSAgZGF0ZVx0c3RyaW5nIG9yIERhdGUgLSB0aGUgaW5pdGlhbCBkYXRlIHRvIGRpc3BsYXlcblx0ICogQHBhcmFtICBvblNlbGVjdCAgZnVuY3Rpb24gLSB0aGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgZGF0ZSBpcyBzZWxlY3RlZFxuXHQgKiBAcGFyYW0gIHNldHRpbmdzICBvYmplY3QgLSB1cGRhdGUgdGhlIGRpYWxvZyBkYXRlIHBpY2tlciBpbnN0YW5jZSdzIHNldHRpbmdzIChhbm9ueW1vdXMgb2JqZWN0KVxuXHQgKiBAcGFyYW0gIHBvcyBpbnRbMl0gLSBjb29yZGluYXRlcyBmb3IgdGhlIGRpYWxvZydzIHBvc2l0aW9uIHdpdGhpbiB0aGUgc2NyZWVuIG9yXG5cdCAqXHRcdFx0XHRcdGV2ZW50IC0gd2l0aCB4L3kgY29vcmRpbmF0ZXMgb3Jcblx0ICpcdFx0XHRcdFx0bGVhdmUgZW1wdHkgZm9yIGRlZmF1bHQgKHNjcmVlbiBjZW50cmUpXG5cdCAqIEByZXR1cm4gdGhlIG1hbmFnZXIgb2JqZWN0XG5cdCAqL1xuXHRfZGlhbG9nRGF0ZXBpY2tlcjogZnVuY3Rpb24oIGlucHV0LCBkYXRlLCBvblNlbGVjdCwgc2V0dGluZ3MsIHBvcyApIHtcblx0XHR2YXIgaWQsIGJyb3dzZXJXaWR0aCwgYnJvd3NlckhlaWdodCwgc2Nyb2xsWCwgc2Nyb2xsWSxcblx0XHRcdGluc3QgPSB0aGlzLl9kaWFsb2dJbnN0OyAvLyBpbnRlcm5hbCBpbnN0YW5jZVxuXG5cdFx0aWYgKCAhaW5zdCApIHtcblx0XHRcdHRoaXMudXVpZCArPSAxO1xuXHRcdFx0aWQgPSBcImRwXCIgKyB0aGlzLnV1aWQ7XG5cdFx0XHR0aGlzLl9kaWFsb2dJbnB1dCA9ICQoIFwiPGlucHV0IHR5cGU9J3RleHQnIGlkPSdcIiArIGlkICtcblx0XHRcdFx0XCInIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogLTEwMHB4OyB3aWR0aDogMHB4OycvPlwiICk7XG5cdFx0XHR0aGlzLl9kaWFsb2dJbnB1dC5vbiggXCJrZXlkb3duXCIsIHRoaXMuX2RvS2V5RG93biApO1xuXHRcdFx0JCggXCJib2R5XCIgKS5hcHBlbmQoIHRoaXMuX2RpYWxvZ0lucHV0ICk7XG5cdFx0XHRpbnN0ID0gdGhpcy5fZGlhbG9nSW5zdCA9IHRoaXMuX25ld0luc3QoIHRoaXMuX2RpYWxvZ0lucHV0LCBmYWxzZSApO1xuXHRcdFx0aW5zdC5zZXR0aW5ncyA9IHt9O1xuXHRcdFx0JC5kYXRhKCB0aGlzLl9kaWFsb2dJbnB1dFsgMCBdLCBcImRhdGVwaWNrZXJcIiwgaW5zdCApO1xuXHRcdH1cblx0XHRkYXRlcGlja2VyX2V4dGVuZFJlbW92ZSggaW5zdC5zZXR0aW5ncywgc2V0dGluZ3MgfHwge30gKTtcblx0XHRkYXRlID0gKCBkYXRlICYmIGRhdGUuY29uc3RydWN0b3IgPT09IERhdGUgPyB0aGlzLl9mb3JtYXREYXRlKCBpbnN0LCBkYXRlICkgOiBkYXRlICk7XG5cdFx0dGhpcy5fZGlhbG9nSW5wdXQudmFsKCBkYXRlICk7XG5cblx0XHR0aGlzLl9wb3MgPSAoIHBvcyA/ICggcG9zLmxlbmd0aCA/IHBvcyA6IFsgcG9zLnBhZ2VYLCBwb3MucGFnZVkgXSApIDogbnVsbCApO1xuXHRcdGlmICggIXRoaXMuX3BvcyApIHtcblx0XHRcdGJyb3dzZXJXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcblx0XHRcdGJyb3dzZXJIZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuXHRcdFx0c2Nyb2xsWCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdDtcblx0XHRcdHNjcm9sbFkgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wO1xuXHRcdFx0dGhpcy5fcG9zID0gLy8gc2hvdWxkIHVzZSBhY3R1YWwgd2lkdGgvaGVpZ2h0IGJlbG93XG5cdFx0XHRcdFsgKCBicm93c2VyV2lkdGggLyAyICkgLSAxMDAgKyBzY3JvbGxYLCAoIGJyb3dzZXJIZWlnaHQgLyAyICkgLSAxNTAgKyBzY3JvbGxZIF07XG5cdFx0fVxuXG5cdFx0Ly8gTW92ZSBpbnB1dCBvbiBzY3JlZW4gZm9yIGZvY3VzLCBidXQgaGlkZGVuIGJlaGluZCBkaWFsb2dcblx0XHR0aGlzLl9kaWFsb2dJbnB1dC5jc3MoIFwibGVmdFwiLCAoIHRoaXMuX3Bvc1sgMCBdICsgMjAgKSArIFwicHhcIiApLmNzcyggXCJ0b3BcIiwgdGhpcy5fcG9zWyAxIF0gKyBcInB4XCIgKTtcblx0XHRpbnN0LnNldHRpbmdzLm9uU2VsZWN0ID0gb25TZWxlY3Q7XG5cdFx0dGhpcy5faW5EaWFsb2cgPSB0cnVlO1xuXHRcdHRoaXMuZHBEaXYuYWRkQ2xhc3MoIHRoaXMuX2RpYWxvZ0NsYXNzICk7XG5cdFx0dGhpcy5fc2hvd0RhdGVwaWNrZXIoIHRoaXMuX2RpYWxvZ0lucHV0WyAwIF0gKTtcblx0XHRpZiAoICQuYmxvY2tVSSApIHtcblx0XHRcdCQuYmxvY2tVSSggdGhpcy5kcERpdiApO1xuXHRcdH1cblx0XHQkLmRhdGEoIHRoaXMuX2RpYWxvZ0lucHV0WyAwIF0sIFwiZGF0ZXBpY2tlclwiLCBpbnN0ICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0LyogRGV0YWNoIGEgZGF0ZXBpY2tlciBmcm9tIGl0cyBjb250cm9sLlxuXHQgKiBAcGFyYW0gIHRhcmdldFx0ZWxlbWVudCAtIHRoZSB0YXJnZXQgaW5wdXQgZmllbGQgb3IgZGl2aXNpb24gb3Igc3BhblxuXHQgKi9cblx0X2Rlc3Ryb3lEYXRlcGlja2VyOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdHZhciBub2RlTmFtZSxcblx0XHRcdCR0YXJnZXQgPSAkKCB0YXJnZXQgKSxcblx0XHRcdGluc3QgPSAkLmRhdGEoIHRhcmdldCwgXCJkYXRlcGlja2VyXCIgKTtcblxuXHRcdGlmICggISR0YXJnZXQuaGFzQ2xhc3MoIHRoaXMubWFya2VyQ2xhc3NOYW1lICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bm9kZU5hbWUgPSB0YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHQkLnJlbW92ZURhdGEoIHRhcmdldCwgXCJkYXRlcGlja2VyXCIgKTtcblx0XHRpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgKSB7XG5cdFx0XHRpbnN0LmFwcGVuZC5yZW1vdmUoKTtcblx0XHRcdGluc3QudHJpZ2dlci5yZW1vdmUoKTtcblx0XHRcdCR0YXJnZXQucmVtb3ZlQ2xhc3MoIHRoaXMubWFya2VyQ2xhc3NOYW1lICkuXG5cdFx0XHRcdG9mZiggXCJmb2N1c1wiLCB0aGlzLl9zaG93RGF0ZXBpY2tlciApLlxuXHRcdFx0XHRvZmYoIFwia2V5ZG93blwiLCB0aGlzLl9kb0tleURvd24gKS5cblx0XHRcdFx0b2ZmKCBcImtleXByZXNzXCIsIHRoaXMuX2RvS2V5UHJlc3MgKS5cblx0XHRcdFx0b2ZmKCBcImtleXVwXCIsIHRoaXMuX2RvS2V5VXAgKTtcblx0XHR9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gXCJkaXZcIiB8fCBub2RlTmFtZSA9PT0gXCJzcGFuXCIgKSB7XG5cdFx0XHQkdGFyZ2V0LnJlbW92ZUNsYXNzKCB0aGlzLm1hcmtlckNsYXNzTmFtZSApLmVtcHR5KCk7XG5cdFx0fVxuXG5cdFx0aWYgKCBkYXRlcGlja2VyX2luc3RBY3RpdmUgPT09IGluc3QgKSB7XG5cdFx0XHRkYXRlcGlja2VyX2luc3RBY3RpdmUgPSBudWxsO1xuXHRcdH1cblx0fSxcblxuXHQvKiBFbmFibGUgdGhlIGRhdGUgcGlja2VyIHRvIGEgalF1ZXJ5IHNlbGVjdGlvbi5cblx0ICogQHBhcmFtICB0YXJnZXRcdGVsZW1lbnQgLSB0aGUgdGFyZ2V0IGlucHV0IGZpZWxkIG9yIGRpdmlzaW9uIG9yIHNwYW5cblx0ICovXG5cdF9lbmFibGVEYXRlcGlja2VyOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdHZhciBub2RlTmFtZSwgaW5saW5lLFxuXHRcdFx0JHRhcmdldCA9ICQoIHRhcmdldCApLFxuXHRcdFx0aW5zdCA9ICQuZGF0YSggdGFyZ2V0LCBcImRhdGVwaWNrZXJcIiApO1xuXG5cdFx0aWYgKCAhJHRhcmdldC5oYXNDbGFzcyggdGhpcy5tYXJrZXJDbGFzc05hbWUgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRub2RlTmFtZSA9IHRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiApIHtcblx0XHRcdHRhcmdldC5kaXNhYmxlZCA9IGZhbHNlO1xuXHRcdFx0aW5zdC50cmlnZ2VyLmZpbHRlciggXCJidXR0b25cIiApLlxuXHRcdFx0XHRlYWNoKCBmdW5jdGlvbigpIHsgdGhpcy5kaXNhYmxlZCA9IGZhbHNlOyB9ICkuZW5kKCkuXG5cdFx0XHRcdGZpbHRlciggXCJpbWdcIiApLmNzcyggeyBvcGFjaXR5OiBcIjEuMFwiLCBjdXJzb3I6IFwiXCIgfSApO1xuXHRcdH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSBcImRpdlwiIHx8IG5vZGVOYW1lID09PSBcInNwYW5cIiApIHtcblx0XHRcdGlubGluZSA9ICR0YXJnZXQuY2hpbGRyZW4oIFwiLlwiICsgdGhpcy5faW5saW5lQ2xhc3MgKTtcblx0XHRcdGlubGluZS5jaGlsZHJlbigpLnJlbW92ZUNsYXNzKCBcInVpLXN0YXRlLWRpc2FibGVkXCIgKTtcblx0XHRcdGlubGluZS5maW5kKCBcInNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLCBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyXCIgKS5cblx0XHRcdFx0cHJvcCggXCJkaXNhYmxlZFwiLCBmYWxzZSApO1xuXHRcdH1cblx0XHR0aGlzLl9kaXNhYmxlZElucHV0cyA9ICQubWFwKCB0aGlzLl9kaXNhYmxlZElucHV0cyxcblx0XHRcdGZ1bmN0aW9uKCB2YWx1ZSApIHsgcmV0dXJuICggdmFsdWUgPT09IHRhcmdldCA/IG51bGwgOiB2YWx1ZSApOyB9ICk7IC8vIGRlbGV0ZSBlbnRyeVxuXHR9LFxuXG5cdC8qIERpc2FibGUgdGhlIGRhdGUgcGlja2VyIHRvIGEgalF1ZXJ5IHNlbGVjdGlvbi5cblx0ICogQHBhcmFtICB0YXJnZXRcdGVsZW1lbnQgLSB0aGUgdGFyZ2V0IGlucHV0IGZpZWxkIG9yIGRpdmlzaW9uIG9yIHNwYW5cblx0ICovXG5cdF9kaXNhYmxlRGF0ZXBpY2tlcjogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHR2YXIgbm9kZU5hbWUsIGlubGluZSxcblx0XHRcdCR0YXJnZXQgPSAkKCB0YXJnZXQgKSxcblx0XHRcdGluc3QgPSAkLmRhdGEoIHRhcmdldCwgXCJkYXRlcGlja2VyXCIgKTtcblxuXHRcdGlmICggISR0YXJnZXQuaGFzQ2xhc3MoIHRoaXMubWFya2VyQ2xhc3NOYW1lICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bm9kZU5hbWUgPSB0YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgKSB7XG5cdFx0XHR0YXJnZXQuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0aW5zdC50cmlnZ2VyLmZpbHRlciggXCJidXR0b25cIiApLlxuXHRcdFx0XHRlYWNoKCBmdW5jdGlvbigpIHsgdGhpcy5kaXNhYmxlZCA9IHRydWU7IH0gKS5lbmQoKS5cblx0XHRcdFx0ZmlsdGVyKCBcImltZ1wiICkuY3NzKCB7IG9wYWNpdHk6IFwiMC41XCIsIGN1cnNvcjogXCJkZWZhdWx0XCIgfSApO1xuXHRcdH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSBcImRpdlwiIHx8IG5vZGVOYW1lID09PSBcInNwYW5cIiApIHtcblx0XHRcdGlubGluZSA9ICR0YXJnZXQuY2hpbGRyZW4oIFwiLlwiICsgdGhpcy5faW5saW5lQ2xhc3MgKTtcblx0XHRcdGlubGluZS5jaGlsZHJlbigpLmFkZENsYXNzKCBcInVpLXN0YXRlLWRpc2FibGVkXCIgKTtcblx0XHRcdGlubGluZS5maW5kKCBcInNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLCBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyXCIgKS5cblx0XHRcdFx0cHJvcCggXCJkaXNhYmxlZFwiLCB0cnVlICk7XG5cdFx0fVxuXHRcdHRoaXMuX2Rpc2FibGVkSW5wdXRzID0gJC5tYXAoIHRoaXMuX2Rpc2FibGVkSW5wdXRzLFxuXHRcdFx0ZnVuY3Rpb24oIHZhbHVlICkgeyByZXR1cm4gKCB2YWx1ZSA9PT0gdGFyZ2V0ID8gbnVsbCA6IHZhbHVlICk7IH0gKTsgLy8gZGVsZXRlIGVudHJ5XG5cdFx0dGhpcy5fZGlzYWJsZWRJbnB1dHNbIHRoaXMuX2Rpc2FibGVkSW5wdXRzLmxlbmd0aCBdID0gdGFyZ2V0O1xuXHR9LFxuXG5cdC8qIElzIHRoZSBmaXJzdCBmaWVsZCBpbiBhIGpRdWVyeSBjb2xsZWN0aW9uIGRpc2FibGVkIGFzIGEgZGF0ZXBpY2tlcj9cblx0ICogQHBhcmFtICB0YXJnZXRcdGVsZW1lbnQgLSB0aGUgdGFyZ2V0IGlucHV0IGZpZWxkIG9yIGRpdmlzaW9uIG9yIHNwYW5cblx0ICogQHJldHVybiBib29sZWFuIC0gdHJ1ZSBpZiBkaXNhYmxlZCwgZmFsc2UgaWYgZW5hYmxlZFxuXHQgKi9cblx0X2lzRGlzYWJsZWREYXRlcGlja2VyOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdGlmICggIXRhcmdldCApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Zm9yICggdmFyIGkgPSAwOyBpIDwgdGhpcy5fZGlzYWJsZWRJbnB1dHMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRpZiAoIHRoaXMuX2Rpc2FibGVkSW5wdXRzWyBpIF0gPT09IHRhcmdldCApIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHQvKiBSZXRyaWV2ZSB0aGUgaW5zdGFuY2UgZGF0YSBmb3IgdGhlIHRhcmdldCBjb250cm9sLlxuXHQgKiBAcGFyYW0gIHRhcmdldCAgZWxlbWVudCAtIHRoZSB0YXJnZXQgaW5wdXQgZmllbGQgb3IgZGl2aXNpb24gb3Igc3BhblxuXHQgKiBAcmV0dXJuICBvYmplY3QgLSB0aGUgYXNzb2NpYXRlZCBpbnN0YW5jZSBkYXRhXG5cdCAqIEB0aHJvd3MgIGVycm9yIGlmIGEgalF1ZXJ5IHByb2JsZW0gZ2V0dGluZyBkYXRhXG5cdCAqL1xuXHRfZ2V0SW5zdDogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuICQuZGF0YSggdGFyZ2V0LCBcImRhdGVwaWNrZXJcIiApO1xuXHRcdH1cblx0XHRjYXRjaCAoIGVyciApIHtcblx0XHRcdHRocm93IFwiTWlzc2luZyBpbnN0YW5jZSBkYXRhIGZvciB0aGlzIGRhdGVwaWNrZXJcIjtcblx0XHR9XG5cdH0sXG5cblx0LyogVXBkYXRlIG9yIHJldHJpZXZlIHRoZSBzZXR0aW5ncyBmb3IgYSBkYXRlIHBpY2tlciBhdHRhY2hlZCB0byBhbiBpbnB1dCBmaWVsZCBvciBkaXZpc2lvbi5cblx0ICogQHBhcmFtICB0YXJnZXQgIGVsZW1lbnQgLSB0aGUgdGFyZ2V0IGlucHV0IGZpZWxkIG9yIGRpdmlzaW9uIG9yIHNwYW5cblx0ICogQHBhcmFtICBuYW1lXHRvYmplY3QgLSB0aGUgbmV3IHNldHRpbmdzIHRvIHVwZGF0ZSBvclxuXHQgKlx0XHRcdFx0c3RyaW5nIC0gdGhlIG5hbWUgb2YgdGhlIHNldHRpbmcgdG8gY2hhbmdlIG9yIHJldHJpZXZlLFxuXHQgKlx0XHRcdFx0d2hlbiByZXRyaWV2aW5nIGFsc28gXCJhbGxcIiBmb3IgYWxsIGluc3RhbmNlIHNldHRpbmdzIG9yXG5cdCAqXHRcdFx0XHRcImRlZmF1bHRzXCIgZm9yIGFsbCBnbG9iYWwgZGVmYXVsdHNcblx0ICogQHBhcmFtICB2YWx1ZSAgIGFueSAtIHRoZSBuZXcgdmFsdWUgZm9yIHRoZSBzZXR0aW5nXG5cdCAqXHRcdFx0XHQob21pdCBpZiBhYm92ZSBpcyBhbiBvYmplY3Qgb3IgdG8gcmV0cmlldmUgYSB2YWx1ZSlcblx0ICovXG5cdF9vcHRpb25EYXRlcGlja2VyOiBmdW5jdGlvbiggdGFyZ2V0LCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgc2V0dGluZ3MsIGRhdGUsIG1pbkRhdGUsIG1heERhdGUsXG5cdFx0XHRpbnN0ID0gdGhpcy5fZ2V0SW5zdCggdGFyZ2V0ICk7XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgdHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gKCBuYW1lID09PSBcImRlZmF1bHRzXCIgPyAkLmV4dGVuZCgge30sICQuZGF0ZXBpY2tlci5fZGVmYXVsdHMgKSA6XG5cdFx0XHRcdCggaW5zdCA/ICggbmFtZSA9PT0gXCJhbGxcIiA/ICQuZXh0ZW5kKCB7fSwgaW5zdC5zZXR0aW5ncyApIDpcblx0XHRcdFx0dGhpcy5fZ2V0KCBpbnN0LCBuYW1lICkgKSA6IG51bGwgKSApO1xuXHRcdH1cblxuXHRcdHNldHRpbmdzID0gbmFtZSB8fCB7fTtcblx0XHRpZiAoIHR5cGVvZiBuYW1lID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0c2V0dGluZ3MgPSB7fTtcblx0XHRcdHNldHRpbmdzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGluc3QgKSB7XG5cdFx0XHRpZiAoIHRoaXMuX2N1ckluc3QgPT09IGluc3QgKSB7XG5cdFx0XHRcdHRoaXMuX2hpZGVEYXRlcGlja2VyKCk7XG5cdFx0XHR9XG5cblx0XHRcdGRhdGUgPSB0aGlzLl9nZXREYXRlRGF0ZXBpY2tlciggdGFyZ2V0LCB0cnVlICk7XG5cdFx0XHRtaW5EYXRlID0gdGhpcy5fZ2V0TWluTWF4RGF0ZSggaW5zdCwgXCJtaW5cIiApO1xuXHRcdFx0bWF4RGF0ZSA9IHRoaXMuX2dldE1pbk1heERhdGUoIGluc3QsIFwibWF4XCIgKTtcblx0XHRcdGRhdGVwaWNrZXJfZXh0ZW5kUmVtb3ZlKCBpbnN0LnNldHRpbmdzLCBzZXR0aW5ncyApO1xuXG5cdFx0XHQvLyByZWZvcm1hdCB0aGUgb2xkIG1pbkRhdGUvbWF4RGF0ZSB2YWx1ZXMgaWYgZGF0ZUZvcm1hdCBjaGFuZ2VzIGFuZCBhIG5ldyBtaW5EYXRlL21heERhdGUgaXNuJ3QgcHJvdmlkZWRcblx0XHRcdGlmICggbWluRGF0ZSAhPT0gbnVsbCAmJiBzZXR0aW5ncy5kYXRlRm9ybWF0ICE9PSB1bmRlZmluZWQgJiYgc2V0dGluZ3MubWluRGF0ZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRpbnN0LnNldHRpbmdzLm1pbkRhdGUgPSB0aGlzLl9mb3JtYXREYXRlKCBpbnN0LCBtaW5EYXRlICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG1heERhdGUgIT09IG51bGwgJiYgc2V0dGluZ3MuZGF0ZUZvcm1hdCAhPT0gdW5kZWZpbmVkICYmIHNldHRpbmdzLm1heERhdGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0aW5zdC5zZXR0aW5ncy5tYXhEYXRlID0gdGhpcy5fZm9ybWF0RGF0ZSggaW5zdCwgbWF4RGF0ZSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBcImRpc2FibGVkXCIgaW4gc2V0dGluZ3MgKSB7XG5cdFx0XHRcdGlmICggc2V0dGluZ3MuZGlzYWJsZWQgKSB7XG5cdFx0XHRcdFx0dGhpcy5fZGlzYWJsZURhdGVwaWNrZXIoIHRhcmdldCApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuX2VuYWJsZURhdGVwaWNrZXIoIHRhcmdldCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9hdHRhY2htZW50cyggJCggdGFyZ2V0ICksIGluc3QgKTtcblx0XHRcdHRoaXMuX2F1dG9TaXplKCBpbnN0ICk7XG5cdFx0XHR0aGlzLl9zZXREYXRlKCBpbnN0LCBkYXRlICk7XG5cdFx0XHR0aGlzLl91cGRhdGVBbHRlcm5hdGUoIGluc3QgKTtcblx0XHRcdHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoIGluc3QgKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gQ2hhbmdlIG1ldGhvZCBkZXByZWNhdGVkXG5cdF9jaGFuZ2VEYXRlcGlja2VyOiBmdW5jdGlvbiggdGFyZ2V0LCBuYW1lLCB2YWx1ZSApIHtcblx0XHR0aGlzLl9vcHRpb25EYXRlcGlja2VyKCB0YXJnZXQsIG5hbWUsIHZhbHVlICk7XG5cdH0sXG5cblx0LyogUmVkcmF3IHRoZSBkYXRlIHBpY2tlciBhdHRhY2hlZCB0byBhbiBpbnB1dCBmaWVsZCBvciBkaXZpc2lvbi5cblx0ICogQHBhcmFtICB0YXJnZXQgIGVsZW1lbnQgLSB0aGUgdGFyZ2V0IGlucHV0IGZpZWxkIG9yIGRpdmlzaW9uIG9yIHNwYW5cblx0ICovXG5cdF9yZWZyZXNoRGF0ZXBpY2tlcjogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoIHRhcmdldCApO1xuXHRcdGlmICggaW5zdCApIHtcblx0XHRcdHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoIGluc3QgKTtcblx0XHR9XG5cdH0sXG5cblx0LyogU2V0IHRoZSBkYXRlcyBmb3IgYSBqUXVlcnkgc2VsZWN0aW9uLlxuXHQgKiBAcGFyYW0gIHRhcmdldCBlbGVtZW50IC0gdGhlIHRhcmdldCBpbnB1dCBmaWVsZCBvciBkaXZpc2lvbiBvciBzcGFuXG5cdCAqIEBwYXJhbSAgZGF0ZVx0RGF0ZSAtIHRoZSBuZXcgZGF0ZVxuXHQgKi9cblx0X3NldERhdGVEYXRlcGlja2VyOiBmdW5jdGlvbiggdGFyZ2V0LCBkYXRlICkge1xuXHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdCggdGFyZ2V0ICk7XG5cdFx0aWYgKCBpbnN0ICkge1xuXHRcdFx0dGhpcy5fc2V0RGF0ZSggaW5zdCwgZGF0ZSApO1xuXHRcdFx0dGhpcy5fdXBkYXRlRGF0ZXBpY2tlciggaW5zdCApO1xuXHRcdFx0dGhpcy5fdXBkYXRlQWx0ZXJuYXRlKCBpbnN0ICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qIEdldCB0aGUgZGF0ZShzKSBmb3IgdGhlIGZpcnN0IGVudHJ5IGluIGEgalF1ZXJ5IHNlbGVjdGlvbi5cblx0ICogQHBhcmFtICB0YXJnZXQgZWxlbWVudCAtIHRoZSB0YXJnZXQgaW5wdXQgZmllbGQgb3IgZGl2aXNpb24gb3Igc3BhblxuXHQgKiBAcGFyYW0gIG5vRGVmYXVsdCBib29sZWFuIC0gdHJ1ZSBpZiBubyBkZWZhdWx0IGRhdGUgaXMgdG8gYmUgdXNlZFxuXHQgKiBAcmV0dXJuIERhdGUgLSB0aGUgY3VycmVudCBkYXRlXG5cdCAqL1xuXHRfZ2V0RGF0ZURhdGVwaWNrZXI6IGZ1bmN0aW9uKCB0YXJnZXQsIG5vRGVmYXVsdCApIHtcblx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoIHRhcmdldCApO1xuXHRcdGlmICggaW5zdCAmJiAhaW5zdC5pbmxpbmUgKSB7XG5cdFx0XHR0aGlzLl9zZXREYXRlRnJvbUZpZWxkKCBpbnN0LCBub0RlZmF1bHQgKTtcblx0XHR9XG5cdFx0cmV0dXJuICggaW5zdCA/IHRoaXMuX2dldERhdGUoIGluc3QgKSA6IG51bGwgKTtcblx0fSxcblxuXHQvKiBIYW5kbGUga2V5c3Ryb2tlcy4gKi9cblx0X2RvS2V5RG93bjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBvblNlbGVjdCwgZGF0ZVN0ciwgc2VsLFxuXHRcdFx0aW5zdCA9ICQuZGF0ZXBpY2tlci5fZ2V0SW5zdCggZXZlbnQudGFyZ2V0ICksXG5cdFx0XHRoYW5kbGVkID0gdHJ1ZSxcblx0XHRcdGlzUlRMID0gaW5zdC5kcERpdi5pcyggXCIudWktZGF0ZXBpY2tlci1ydGxcIiApO1xuXG5cdFx0aW5zdC5fa2V5RXZlbnQgPSB0cnVlO1xuXHRcdGlmICggJC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyApIHtcblx0XHRcdHN3aXRjaCAoIGV2ZW50LmtleUNvZGUgKSB7XG5cdFx0XHRcdGNhc2UgOTogJC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpO1xuXHRcdFx0XHRcdFx0aGFuZGxlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0YnJlYWs7IC8vIGhpZGUgb24gdGFiIG91dFxuXHRcdFx0XHRjYXNlIDEzOiBzZWwgPSAkKCBcInRkLlwiICsgJC5kYXRlcGlja2VyLl9kYXlPdmVyQ2xhc3MgKyBcIjpub3QoLlwiICtcblx0XHRcdFx0XHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fY3VycmVudENsYXNzICsgXCIpXCIsIGluc3QuZHBEaXYgKTtcblx0XHRcdFx0XHRcdGlmICggc2VsWyAwIF0gKSB7XG5cdFx0XHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fc2VsZWN0RGF5KCBldmVudC50YXJnZXQsIGluc3Quc2VsZWN0ZWRNb250aCwgaW5zdC5zZWxlY3RlZFllYXIsIHNlbFsgMCBdICk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdG9uU2VsZWN0ID0gJC5kYXRlcGlja2VyLl9nZXQoIGluc3QsIFwib25TZWxlY3RcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCBvblNlbGVjdCApIHtcblx0XHRcdFx0XHRcdFx0ZGF0ZVN0ciA9ICQuZGF0ZXBpY2tlci5fZm9ybWF0RGF0ZSggaW5zdCApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFRyaWdnZXIgY3VzdG9tIGNhbGxiYWNrXG5cdFx0XHRcdFx0XHRcdG9uU2VsZWN0LmFwcGx5KCAoIGluc3QuaW5wdXQgPyBpbnN0LmlucHV0WyAwIF0gOiBudWxsICksIFsgZGF0ZVN0ciwgaW5zdCBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQkLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTsgLy8gZG9uJ3Qgc3VibWl0IHRoZSBmb3JtXG5cdFx0XHRcdGNhc2UgMjc6ICQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTtcblx0XHRcdFx0XHRcdGJyZWFrOyAvLyBoaWRlIG9uIGVzY2FwZVxuXHRcdFx0XHRjYXNlIDMzOiAkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoIGV2ZW50LnRhcmdldCwgKCBldmVudC5jdHJsS2V5ID9cblx0XHRcdFx0XHRcdFx0LSQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcInN0ZXBCaWdNb250aHNcIiApIDpcblx0XHRcdFx0XHRcdFx0LSQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcInN0ZXBNb250aHNcIiApICksIFwiTVwiICk7XG5cdFx0XHRcdFx0XHRicmVhazsgLy8gcHJldmlvdXMgbW9udGgveWVhciBvbiBwYWdlIHVwLysgY3RybFxuXHRcdFx0XHRjYXNlIDM0OiAkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoIGV2ZW50LnRhcmdldCwgKCBldmVudC5jdHJsS2V5ID9cblx0XHRcdFx0XHRcdFx0KyQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcInN0ZXBCaWdNb250aHNcIiApIDpcblx0XHRcdFx0XHRcdFx0KyQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcInN0ZXBNb250aHNcIiApICksIFwiTVwiICk7XG5cdFx0XHRcdFx0XHRicmVhazsgLy8gbmV4dCBtb250aC95ZWFyIG9uIHBhZ2UgZG93bi8rIGN0cmxcblx0XHRcdFx0Y2FzZSAzNTogaWYgKCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgKSB7XG5cdFx0XHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fY2xlYXJEYXRlKCBldmVudC50YXJnZXQgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGhhbmRsZWQgPSBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXk7XG5cdFx0XHRcdFx0XHRicmVhazsgLy8gY2xlYXIgb24gY3RybCBvciBjb21tYW5kICtlbmRcblx0XHRcdFx0Y2FzZSAzNjogaWYgKCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgKSB7XG5cdFx0XHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fZ290b1RvZGF5KCBldmVudC50YXJnZXQgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGhhbmRsZWQgPSBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXk7XG5cdFx0XHRcdFx0XHRicmVhazsgLy8gY3VycmVudCBvbiBjdHJsIG9yIGNvbW1hbmQgK2hvbWVcblx0XHRcdFx0Y2FzZSAzNzogaWYgKCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgKSB7XG5cdFx0XHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSggZXZlbnQudGFyZ2V0LCAoIGlzUlRMID8gKzEgOiAtMSApLCBcIkRcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aGFuZGxlZCA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTtcblxuXHRcdFx0XHRcdFx0Ly8gLTEgZGF5IG9uIGN0cmwgb3IgY29tbWFuZCArbGVmdFxuXHRcdFx0XHRcdFx0aWYgKCBldmVudC5vcmlnaW5hbEV2ZW50LmFsdEtleSApIHtcblx0XHRcdFx0XHRcdFx0JC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKCBldmVudC50YXJnZXQsICggZXZlbnQuY3RybEtleSA/XG5cdFx0XHRcdFx0XHRcdFx0LSQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcInN0ZXBCaWdNb250aHNcIiApIDpcblx0XHRcdFx0XHRcdFx0XHQtJC5kYXRlcGlja2VyLl9nZXQoIGluc3QsIFwic3RlcE1vbnRoc1wiICkgKSwgXCJNXCIgKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gbmV4dCBtb250aC95ZWFyIG9uIGFsdCArbGVmdCBvbiBNYWNcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIDM4OiBpZiAoIGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSApIHtcblx0XHRcdFx0XHRcdFx0JC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKCBldmVudC50YXJnZXQsIC03LCBcIkRcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aGFuZGxlZCA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTtcblx0XHRcdFx0XHRcdGJyZWFrOyAvLyAtMSB3ZWVrIG9uIGN0cmwgb3IgY29tbWFuZCArdXBcblx0XHRcdFx0Y2FzZSAzOTogaWYgKCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgKSB7XG5cdFx0XHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSggZXZlbnQudGFyZ2V0LCAoIGlzUlRMID8gLTEgOiArMSApLCBcIkRcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aGFuZGxlZCA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTtcblxuXHRcdFx0XHRcdFx0Ly8gKzEgZGF5IG9uIGN0cmwgb3IgY29tbWFuZCArcmlnaHRcblx0XHRcdFx0XHRcdGlmICggZXZlbnQub3JpZ2luYWxFdmVudC5hbHRLZXkgKSB7XG5cdFx0XHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSggZXZlbnQudGFyZ2V0LCAoIGV2ZW50LmN0cmxLZXkgP1xuXHRcdFx0XHRcdFx0XHRcdCskLmRhdGVwaWNrZXIuX2dldCggaW5zdCwgXCJzdGVwQmlnTW9udGhzXCIgKSA6XG5cdFx0XHRcdFx0XHRcdFx0KyQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcInN0ZXBNb250aHNcIiApICksIFwiTVwiICk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIG5leHQgbW9udGgveWVhciBvbiBhbHQgK3JpZ2h0XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSA0MDogaWYgKCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgKSB7XG5cdFx0XHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSggZXZlbnQudGFyZ2V0LCArNywgXCJEXCIgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGhhbmRsZWQgPSBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXk7XG5cdFx0XHRcdFx0XHRicmVhazsgLy8gKzEgd2VlayBvbiBjdHJsIG9yIGNvbW1hbmQgK2Rvd25cblx0XHRcdFx0ZGVmYXVsdDogaGFuZGxlZCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIGV2ZW50LmtleUNvZGUgPT09IDM2ICYmIGV2ZW50LmN0cmxLZXkgKSB7IC8vIGRpc3BsYXkgdGhlIGRhdGUgcGlja2VyIG9uIGN0cmwraG9tZVxuXHRcdFx0JC5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlciggdGhpcyApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRoYW5kbGVkID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKCBoYW5kbGVkICkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fSxcblxuXHQvKiBGaWx0ZXIgZW50ZXJlZCBjaGFyYWN0ZXJzIC0gYmFzZWQgb24gZGF0ZSBmb3JtYXQuICovXG5cdF9kb0tleVByZXNzOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGNoYXJzLCBjaHIsXG5cdFx0XHRpbnN0ID0gJC5kYXRlcGlja2VyLl9nZXRJbnN0KCBldmVudC50YXJnZXQgKTtcblxuXHRcdGlmICggJC5kYXRlcGlja2VyLl9nZXQoIGluc3QsIFwiY29uc3RyYWluSW5wdXRcIiApICkge1xuXHRcdFx0Y2hhcnMgPSAkLmRhdGVwaWNrZXIuX3Bvc3NpYmxlQ2hhcnMoICQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcImRhdGVGb3JtYXRcIiApICk7XG5cdFx0XHRjaHIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCBldmVudC5jaGFyQ29kZSA9PSBudWxsID8gZXZlbnQua2V5Q29kZSA6IGV2ZW50LmNoYXJDb2RlICk7XG5cdFx0XHRyZXR1cm4gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8ICggY2hyIDwgXCIgXCIgfHwgIWNoYXJzIHx8IGNoYXJzLmluZGV4T2YoIGNociApID4gLTEgKTtcblx0XHR9XG5cdH0sXG5cblx0LyogU3luY2hyb25pc2UgbWFudWFsIGVudHJ5IGFuZCBmaWVsZC9hbHRlcm5hdGUgZmllbGQuICovXG5cdF9kb0tleVVwOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGRhdGUsXG5cdFx0XHRpbnN0ID0gJC5kYXRlcGlja2VyLl9nZXRJbnN0KCBldmVudC50YXJnZXQgKTtcblxuXHRcdGlmICggaW5zdC5pbnB1dC52YWwoKSAhPT0gaW5zdC5sYXN0VmFsICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0ZSA9ICQuZGF0ZXBpY2tlci5wYXJzZURhdGUoICQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcImRhdGVGb3JtYXRcIiApLFxuXHRcdFx0XHRcdCggaW5zdC5pbnB1dCA/IGluc3QuaW5wdXQudmFsKCkgOiBudWxsICksXG5cdFx0XHRcdFx0JC5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcoIGluc3QgKSApO1xuXG5cdFx0XHRcdGlmICggZGF0ZSApIHsgLy8gb25seSBpZiB2YWxpZFxuXHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZCggaW5zdCApO1xuXHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fdXBkYXRlQWx0ZXJuYXRlKCBpbnN0ICk7XG5cdFx0XHRcdFx0JC5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKCBpbnN0ICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNhdGNoICggZXJyICkge1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKiBQb3AtdXAgdGhlIGRhdGUgcGlja2VyIGZvciBhIGdpdmVuIGlucHV0IGZpZWxkLlxuXHQgKiBJZiBmYWxzZSByZXR1cm5lZCBmcm9tIGJlZm9yZVNob3cgZXZlbnQgaGFuZGxlciBkbyBub3Qgc2hvdy5cblx0ICogQHBhcmFtICBpbnB1dCAgZWxlbWVudCAtIHRoZSBpbnB1dCBmaWVsZCBhdHRhY2hlZCB0byB0aGUgZGF0ZSBwaWNrZXIgb3Jcblx0ICpcdFx0XHRcdFx0ZXZlbnQgLSBpZiB0cmlnZ2VyZWQgYnkgZm9jdXNcblx0ICovXG5cdF9zaG93RGF0ZXBpY2tlcjogZnVuY3Rpb24oIGlucHV0ICkge1xuXHRcdGlucHV0ID0gaW5wdXQudGFyZ2V0IHx8IGlucHV0O1xuXHRcdGlmICggaW5wdXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJpbnB1dFwiICkgeyAvLyBmaW5kIGZyb20gYnV0dG9uL2ltYWdlIHRyaWdnZXJcblx0XHRcdGlucHV0ID0gJCggXCJpbnB1dFwiLCBpbnB1dC5wYXJlbnROb2RlIClbIDAgXTtcblx0XHR9XG5cblx0XHRpZiAoICQuZGF0ZXBpY2tlci5faXNEaXNhYmxlZERhdGVwaWNrZXIoIGlucHV0ICkgfHwgJC5kYXRlcGlja2VyLl9sYXN0SW5wdXQgPT09IGlucHV0ICkgeyAvLyBhbHJlYWR5IGhlcmVcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgaW5zdCwgYmVmb3JlU2hvdywgYmVmb3JlU2hvd1NldHRpbmdzLCBpc0ZpeGVkLFxuXHRcdFx0b2Zmc2V0LCBzaG93QW5pbSwgZHVyYXRpb247XG5cblx0XHRpbnN0ID0gJC5kYXRlcGlja2VyLl9nZXRJbnN0KCBpbnB1dCApO1xuXHRcdGlmICggJC5kYXRlcGlja2VyLl9jdXJJbnN0ICYmICQuZGF0ZXBpY2tlci5fY3VySW5zdCAhPT0gaW5zdCApIHtcblx0XHRcdCQuZGF0ZXBpY2tlci5fY3VySW5zdC5kcERpdi5zdG9wKCB0cnVlLCB0cnVlICk7XG5cdFx0XHRpZiAoIGluc3QgJiYgJC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyApIHtcblx0XHRcdFx0JC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlciggJC5kYXRlcGlja2VyLl9jdXJJbnN0LmlucHV0WyAwIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRiZWZvcmVTaG93ID0gJC5kYXRlcGlja2VyLl9nZXQoIGluc3QsIFwiYmVmb3JlU2hvd1wiICk7XG5cdFx0YmVmb3JlU2hvd1NldHRpbmdzID0gYmVmb3JlU2hvdyA/IGJlZm9yZVNob3cuYXBwbHkoIGlucHV0LCBbIGlucHV0LCBpbnN0IF0gKSA6IHt9O1xuXHRcdGlmICggYmVmb3JlU2hvd1NldHRpbmdzID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0ZGF0ZXBpY2tlcl9leHRlbmRSZW1vdmUoIGluc3Quc2V0dGluZ3MsIGJlZm9yZVNob3dTZXR0aW5ncyApO1xuXG5cdFx0aW5zdC5sYXN0VmFsID0gbnVsbDtcblx0XHQkLmRhdGVwaWNrZXIuX2xhc3RJbnB1dCA9IGlucHV0O1xuXHRcdCQuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZCggaW5zdCApO1xuXG5cdFx0aWYgKCAkLmRhdGVwaWNrZXIuX2luRGlhbG9nICkgeyAvLyBoaWRlIGN1cnNvclxuXHRcdFx0aW5wdXQudmFsdWUgPSBcIlwiO1xuXHRcdH1cblx0XHRpZiAoICEkLmRhdGVwaWNrZXIuX3BvcyApIHsgLy8gcG9zaXRpb24gYmVsb3cgaW5wdXRcblx0XHRcdCQuZGF0ZXBpY2tlci5fcG9zID0gJC5kYXRlcGlja2VyLl9maW5kUG9zKCBpbnB1dCApO1xuXHRcdFx0JC5kYXRlcGlja2VyLl9wb3NbIDEgXSArPSBpbnB1dC5vZmZzZXRIZWlnaHQ7IC8vIGFkZCB0aGUgaGVpZ2h0XG5cdFx0fVxuXG5cdFx0aXNGaXhlZCA9IGZhbHNlO1xuXHRcdCQoIGlucHV0ICkucGFyZW50cygpLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aXNGaXhlZCB8PSAkKCB0aGlzICkuY3NzKCBcInBvc2l0aW9uXCIgKSA9PT0gXCJmaXhlZFwiO1xuXHRcdFx0cmV0dXJuICFpc0ZpeGVkO1xuXHRcdH0gKTtcblxuXHRcdG9mZnNldCA9IHsgbGVmdDogJC5kYXRlcGlja2VyLl9wb3NbIDAgXSwgdG9wOiAkLmRhdGVwaWNrZXIuX3Bvc1sgMSBdIH07XG5cdFx0JC5kYXRlcGlja2VyLl9wb3MgPSBudWxsO1xuXG5cdFx0Ly90byBhdm9pZCBmbGFzaGVzIG9uIEZpcmVmb3hcblx0XHRpbnN0LmRwRGl2LmVtcHR5KCk7XG5cblx0XHQvLyBkZXRlcm1pbmUgc2l6aW5nIG9mZnNjcmVlblxuXHRcdGluc3QuZHBEaXYuY3NzKCB7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIGRpc3BsYXk6IFwiYmxvY2tcIiwgdG9wOiBcIi0xMDAwcHhcIiB9ICk7XG5cdFx0JC5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKCBpbnN0ICk7XG5cblx0XHQvLyBmaXggd2lkdGggZm9yIGR5bmFtaWMgbnVtYmVyIG9mIGRhdGUgcGlja2Vyc1xuXHRcdC8vIGFuZCBhZGp1c3QgcG9zaXRpb24gYmVmb3JlIHNob3dpbmdcblx0XHRvZmZzZXQgPSAkLmRhdGVwaWNrZXIuX2NoZWNrT2Zmc2V0KCBpbnN0LCBvZmZzZXQsIGlzRml4ZWQgKTtcblx0XHRpbnN0LmRwRGl2LmNzcyggeyBwb3NpdGlvbjogKCAkLmRhdGVwaWNrZXIuX2luRGlhbG9nICYmICQuYmxvY2tVSSA/XG5cdFx0XHRcInN0YXRpY1wiIDogKCBpc0ZpeGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiICkgKSwgZGlzcGxheTogXCJub25lXCIsXG5cdFx0XHRsZWZ0OiBvZmZzZXQubGVmdCArIFwicHhcIiwgdG9wOiBvZmZzZXQudG9wICsgXCJweFwiIH0gKTtcblxuXHRcdGlmICggIWluc3QuaW5saW5lICkge1xuXHRcdFx0c2hvd0FuaW0gPSAkLmRhdGVwaWNrZXIuX2dldCggaW5zdCwgXCJzaG93QW5pbVwiICk7XG5cdFx0XHRkdXJhdGlvbiA9ICQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcImR1cmF0aW9uXCIgKTtcblx0XHRcdGluc3QuZHBEaXYuY3NzKCBcInotaW5kZXhcIiwgZGF0ZXBpY2tlcl9nZXRaaW5kZXgoICQoIGlucHV0ICkgKSArIDEgKTtcblx0XHRcdCQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcgPSB0cnVlO1xuXG5cdFx0XHRpZiAoICQuZWZmZWN0cyAmJiAkLmVmZmVjdHMuZWZmZWN0WyBzaG93QW5pbSBdICkge1xuXHRcdFx0XHRpbnN0LmRwRGl2LnNob3coIHNob3dBbmltLCAkLmRhdGVwaWNrZXIuX2dldCggaW5zdCwgXCJzaG93T3B0aW9uc1wiICksIGR1cmF0aW9uICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbnN0LmRwRGl2WyBzaG93QW5pbSB8fCBcInNob3dcIiBdKCBzaG93QW5pbSA/IGR1cmF0aW9uIDogbnVsbCApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoICQuZGF0ZXBpY2tlci5fc2hvdWxkRm9jdXNJbnB1dCggaW5zdCApICkge1xuXHRcdFx0XHRpbnN0LmlucHV0LnRyaWdnZXIoIFwiZm9jdXNcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQkLmRhdGVwaWNrZXIuX2N1ckluc3QgPSBpbnN0O1xuXHRcdH1cblx0fSxcblxuXHQvKiBHZW5lcmF0ZSB0aGUgZGF0ZSBwaWNrZXIgY29udGVudC4gKi9cblx0X3VwZGF0ZURhdGVwaWNrZXI6IGZ1bmN0aW9uKCBpbnN0ICkge1xuXHRcdHRoaXMubWF4Um93cyA9IDQ7IC8vUmVzZXQgdGhlIG1heCBudW1iZXIgb2Ygcm93cyBiZWluZyBkaXNwbGF5ZWQgKHNlZSAjNzA0Mylcblx0XHRkYXRlcGlja2VyX2luc3RBY3RpdmUgPSBpbnN0OyAvLyBmb3IgZGVsZWdhdGUgaG92ZXIgZXZlbnRzXG5cdFx0aW5zdC5kcERpdi5lbXB0eSgpLmFwcGVuZCggdGhpcy5fZ2VuZXJhdGVIVE1MKCBpbnN0ICkgKTtcblx0XHR0aGlzLl9hdHRhY2hIYW5kbGVycyggaW5zdCApO1xuXG5cdFx0dmFyIG9yaWd5ZWFyc2h0bWwsXG5cdFx0XHRudW1Nb250aHMgPSB0aGlzLl9nZXROdW1iZXJPZk1vbnRocyggaW5zdCApLFxuXHRcdFx0Y29scyA9IG51bU1vbnRoc1sgMSBdLFxuXHRcdFx0d2lkdGggPSAxNyxcblx0XHRcdGFjdGl2ZUNlbGwgPSBpbnN0LmRwRGl2LmZpbmQoIFwiLlwiICsgdGhpcy5fZGF5T3ZlckNsYXNzICsgXCIgYVwiICk7XG5cblx0XHRpZiAoIGFjdGl2ZUNlbGwubGVuZ3RoID4gMCApIHtcblx0XHRcdGRhdGVwaWNrZXJfaGFuZGxlTW91c2VvdmVyLmFwcGx5KCBhY3RpdmVDZWxsLmdldCggMCApICk7XG5cdFx0fVxuXG5cdFx0aW5zdC5kcERpdi5yZW1vdmVDbGFzcyggXCJ1aS1kYXRlcGlja2VyLW11bHRpLTIgdWktZGF0ZXBpY2tlci1tdWx0aS0zIHVpLWRhdGVwaWNrZXItbXVsdGktNFwiICkud2lkdGgoIFwiXCIgKTtcblx0XHRpZiAoIGNvbHMgPiAxICkge1xuXHRcdFx0aW5zdC5kcERpdi5hZGRDbGFzcyggXCJ1aS1kYXRlcGlja2VyLW11bHRpLVwiICsgY29scyApLmNzcyggXCJ3aWR0aFwiLCAoIHdpZHRoICogY29scyApICsgXCJlbVwiICk7XG5cdFx0fVxuXHRcdGluc3QuZHBEaXZbICggbnVtTW9udGhzWyAwIF0gIT09IDEgfHwgbnVtTW9udGhzWyAxIF0gIT09IDEgPyBcImFkZFwiIDogXCJyZW1vdmVcIiApICtcblx0XHRcdFwiQ2xhc3NcIiBdKCBcInVpLWRhdGVwaWNrZXItbXVsdGlcIiApO1xuXHRcdGluc3QuZHBEaXZbICggdGhpcy5fZ2V0KCBpbnN0LCBcImlzUlRMXCIgKSA/IFwiYWRkXCIgOiBcInJlbW92ZVwiICkgK1xuXHRcdFx0XCJDbGFzc1wiIF0oIFwidWktZGF0ZXBpY2tlci1ydGxcIiApO1xuXG5cdFx0aWYgKCBpbnN0ID09PSAkLmRhdGVwaWNrZXIuX2N1ckluc3QgJiYgJC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyAmJiAkLmRhdGVwaWNrZXIuX3Nob3VsZEZvY3VzSW5wdXQoIGluc3QgKSApIHtcblx0XHRcdGluc3QuaW5wdXQudHJpZ2dlciggXCJmb2N1c1wiICk7XG5cdFx0fVxuXG5cdFx0Ly8gRGVmZmVyZWQgcmVuZGVyIG9mIHRoZSB5ZWFycyBzZWxlY3QgKHRvIGF2b2lkIGZsYXNoZXMgb24gRmlyZWZveClcblx0XHRpZiAoIGluc3QueWVhcnNodG1sICkge1xuXHRcdFx0b3JpZ3llYXJzaHRtbCA9IGluc3QueWVhcnNodG1sO1xuXHRcdFx0c2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly9hc3N1cmUgdGhhdCBpbnN0LnllYXJzaHRtbCBkaWRuJ3QgY2hhbmdlLlxuXHRcdFx0XHRpZiAoIG9yaWd5ZWFyc2h0bWwgPT09IGluc3QueWVhcnNodG1sICYmIGluc3QueWVhcnNodG1sICkge1xuXHRcdFx0XHRcdGluc3QuZHBEaXYuZmluZCggXCJzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyOmZpcnN0XCIgKS5yZXBsYWNlV2l0aCggaW5zdC55ZWFyc2h0bWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvcmlneWVhcnNodG1sID0gaW5zdC55ZWFyc2h0bWwgPSBudWxsO1xuXHRcdFx0fSwgMCApO1xuXHRcdH1cblx0fSxcblxuXHQvLyAjNjY5NCAtIGRvbid0IGZvY3VzIHRoZSBpbnB1dCBpZiBpdCdzIGFscmVhZHkgZm9jdXNlZFxuXHQvLyB0aGlzIGJyZWFrcyB0aGUgY2hhbmdlIGV2ZW50IGluIElFXG5cdC8vIFN1cHBvcnQ6IElFIGFuZCBqUXVlcnkgPDEuOVxuXHRfc2hvdWxkRm9jdXNJbnB1dDogZnVuY3Rpb24oIGluc3QgKSB7XG5cdFx0cmV0dXJuIGluc3QuaW5wdXQgJiYgaW5zdC5pbnB1dC5pcyggXCI6dmlzaWJsZVwiICkgJiYgIWluc3QuaW5wdXQuaXMoIFwiOmRpc2FibGVkXCIgKSAmJiAhaW5zdC5pbnB1dC5pcyggXCI6Zm9jdXNcIiApO1xuXHR9LFxuXG5cdC8qIENoZWNrIHBvc2l0aW9uaW5nIHRvIHJlbWFpbiBvbiBzY3JlZW4uICovXG5cdF9jaGVja09mZnNldDogZnVuY3Rpb24oIGluc3QsIG9mZnNldCwgaXNGaXhlZCApIHtcblx0XHR2YXIgZHBXaWR0aCA9IGluc3QuZHBEaXYub3V0ZXJXaWR0aCgpLFxuXHRcdFx0ZHBIZWlnaHQgPSBpbnN0LmRwRGl2Lm91dGVySGVpZ2h0KCksXG5cdFx0XHRpbnB1dFdpZHRoID0gaW5zdC5pbnB1dCA/IGluc3QuaW5wdXQub3V0ZXJXaWR0aCgpIDogMCxcblx0XHRcdGlucHV0SGVpZ2h0ID0gaW5zdC5pbnB1dCA/IGluc3QuaW5wdXQub3V0ZXJIZWlnaHQoKSA6IDAsXG5cdFx0XHR2aWV3V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggKyAoIGlzRml4ZWQgPyAwIDogJCggZG9jdW1lbnQgKS5zY3JvbGxMZWZ0KCkgKSxcblx0XHRcdHZpZXdIZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0ICsgKCBpc0ZpeGVkID8gMCA6ICQoIGRvY3VtZW50ICkuc2Nyb2xsVG9wKCkgKTtcblxuXHRcdG9mZnNldC5sZWZ0IC09ICggdGhpcy5fZ2V0KCBpbnN0LCBcImlzUlRMXCIgKSA/ICggZHBXaWR0aCAtIGlucHV0V2lkdGggKSA6IDAgKTtcblx0XHRvZmZzZXQubGVmdCAtPSAoIGlzRml4ZWQgJiYgb2Zmc2V0LmxlZnQgPT09IGluc3QuaW5wdXQub2Zmc2V0KCkubGVmdCApID8gJCggZG9jdW1lbnQgKS5zY3JvbGxMZWZ0KCkgOiAwO1xuXHRcdG9mZnNldC50b3AgLT0gKCBpc0ZpeGVkICYmIG9mZnNldC50b3AgPT09ICggaW5zdC5pbnB1dC5vZmZzZXQoKS50b3AgKyBpbnB1dEhlaWdodCApICkgPyAkKCBkb2N1bWVudCApLnNjcm9sbFRvcCgpIDogMDtcblxuXHRcdC8vIE5vdyBjaGVjayBpZiBkYXRlcGlja2VyIGlzIHNob3dpbmcgb3V0c2lkZSB3aW5kb3cgdmlld3BvcnQgLSBtb3ZlIHRvIGEgYmV0dGVyIHBsYWNlIGlmIHNvLlxuXHRcdG9mZnNldC5sZWZ0IC09IE1hdGgubWluKCBvZmZzZXQubGVmdCwgKCBvZmZzZXQubGVmdCArIGRwV2lkdGggPiB2aWV3V2lkdGggJiYgdmlld1dpZHRoID4gZHBXaWR0aCApID9cblx0XHRcdE1hdGguYWJzKCBvZmZzZXQubGVmdCArIGRwV2lkdGggLSB2aWV3V2lkdGggKSA6IDAgKTtcblx0XHRvZmZzZXQudG9wIC09IE1hdGgubWluKCBvZmZzZXQudG9wLCAoIG9mZnNldC50b3AgKyBkcEhlaWdodCA+IHZpZXdIZWlnaHQgJiYgdmlld0hlaWdodCA+IGRwSGVpZ2h0ICkgP1xuXHRcdFx0TWF0aC5hYnMoIGRwSGVpZ2h0ICsgaW5wdXRIZWlnaHQgKSA6IDAgKTtcblxuXHRcdHJldHVybiBvZmZzZXQ7XG5cdH0sXG5cblx0LyogRmluZCBhbiBvYmplY3QncyBwb3NpdGlvbiBvbiB0aGUgc2NyZWVuLiAqL1xuXHRfZmluZFBvczogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgcG9zaXRpb24sXG5cdFx0XHRpbnN0ID0gdGhpcy5fZ2V0SW5zdCggb2JqICksXG5cdFx0XHRpc1JUTCA9IHRoaXMuX2dldCggaW5zdCwgXCJpc1JUTFwiICk7XG5cblx0XHR3aGlsZSAoIG9iaiAmJiAoIG9iai50eXBlID09PSBcImhpZGRlblwiIHx8IG9iai5ub2RlVHlwZSAhPT0gMSB8fCAkLmV4cHIuZmlsdGVycy5oaWRkZW4oIG9iaiApICkgKSB7XG5cdFx0XHRvYmogPSBvYmpbIGlzUlRMID8gXCJwcmV2aW91c1NpYmxpbmdcIiA6IFwibmV4dFNpYmxpbmdcIiBdO1xuXHRcdH1cblxuXHRcdHBvc2l0aW9uID0gJCggb2JqICkub2Zmc2V0KCk7XG5cdFx0cmV0dXJuIFsgcG9zaXRpb24ubGVmdCwgcG9zaXRpb24udG9wIF07XG5cdH0sXG5cblx0LyogSGlkZSB0aGUgZGF0ZSBwaWNrZXIgZnJvbSB2aWV3LlxuXHQgKiBAcGFyYW0gIGlucHV0ICBlbGVtZW50IC0gdGhlIGlucHV0IGZpZWxkIGF0dGFjaGVkIHRvIHRoZSBkYXRlIHBpY2tlclxuXHQgKi9cblx0X2hpZGVEYXRlcGlja2VyOiBmdW5jdGlvbiggaW5wdXQgKSB7XG5cdFx0dmFyIHNob3dBbmltLCBkdXJhdGlvbiwgcG9zdFByb2Nlc3MsIG9uQ2xvc2UsXG5cdFx0XHRpbnN0ID0gdGhpcy5fY3VySW5zdDtcblxuXHRcdGlmICggIWluc3QgfHwgKCBpbnB1dCAmJiBpbnN0ICE9PSAkLmRhdGEoIGlucHV0LCBcImRhdGVwaWNrZXJcIiApICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLl9kYXRlcGlja2VyU2hvd2luZyApIHtcblx0XHRcdHNob3dBbmltID0gdGhpcy5fZ2V0KCBpbnN0LCBcInNob3dBbmltXCIgKTtcblx0XHRcdGR1cmF0aW9uID0gdGhpcy5fZ2V0KCBpbnN0LCBcImR1cmF0aW9uXCIgKTtcblx0XHRcdHBvc3RQcm9jZXNzID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdCQuZGF0ZXBpY2tlci5fdGlkeURpYWxvZyggaW5zdCApO1xuXHRcdFx0fTtcblxuXHRcdFx0Ly8gREVQUkVDQVRFRDogYWZ0ZXIgQkMgZm9yIDEuOC54ICQuZWZmZWN0c1sgc2hvd0FuaW0gXSBpcyBub3QgbmVlZGVkXG5cdFx0XHRpZiAoICQuZWZmZWN0cyAmJiAoICQuZWZmZWN0cy5lZmZlY3RbIHNob3dBbmltIF0gfHwgJC5lZmZlY3RzWyBzaG93QW5pbSBdICkgKSB7XG5cdFx0XHRcdGluc3QuZHBEaXYuaGlkZSggc2hvd0FuaW0sICQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcInNob3dPcHRpb25zXCIgKSwgZHVyYXRpb24sIHBvc3RQcm9jZXNzICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbnN0LmRwRGl2WyAoIHNob3dBbmltID09PSBcInNsaWRlRG93blwiID8gXCJzbGlkZVVwXCIgOlxuXHRcdFx0XHRcdCggc2hvd0FuaW0gPT09IFwiZmFkZUluXCIgPyBcImZhZGVPdXRcIiA6IFwiaGlkZVwiICkgKSBdKCAoIHNob3dBbmltID8gZHVyYXRpb24gOiBudWxsICksIHBvc3RQcm9jZXNzICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggIXNob3dBbmltICkge1xuXHRcdFx0XHRwb3N0UHJvY2VzcygpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fZGF0ZXBpY2tlclNob3dpbmcgPSBmYWxzZTtcblxuXHRcdFx0b25DbG9zZSA9IHRoaXMuX2dldCggaW5zdCwgXCJvbkNsb3NlXCIgKTtcblx0XHRcdGlmICggb25DbG9zZSApIHtcblx0XHRcdFx0b25DbG9zZS5hcHBseSggKCBpbnN0LmlucHV0ID8gaW5zdC5pbnB1dFsgMCBdIDogbnVsbCApLCBbICggaW5zdC5pbnB1dCA/IGluc3QuaW5wdXQudmFsKCkgOiBcIlwiICksIGluc3QgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9sYXN0SW5wdXQgPSBudWxsO1xuXHRcdFx0aWYgKCB0aGlzLl9pbkRpYWxvZyApIHtcblx0XHRcdFx0dGhpcy5fZGlhbG9nSW5wdXQuY3NzKCB7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIGxlZnQ6IFwiMFwiLCB0b3A6IFwiLTEwMHB4XCIgfSApO1xuXHRcdFx0XHRpZiAoICQuYmxvY2tVSSApIHtcblx0XHRcdFx0XHQkLnVuYmxvY2tVSSgpO1xuXHRcdFx0XHRcdCQoIFwiYm9keVwiICkuYXBwZW5kKCB0aGlzLmRwRGl2ICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuX2luRGlhbG9nID0gZmFsc2U7XG5cdFx0fVxuXHR9LFxuXG5cdC8qIFRpZHkgdXAgYWZ0ZXIgYSBkaWFsb2cgZGlzcGxheS4gKi9cblx0X3RpZHlEaWFsb2c6IGZ1bmN0aW9uKCBpbnN0ICkge1xuXHRcdGluc3QuZHBEaXYucmVtb3ZlQ2xhc3MoIHRoaXMuX2RpYWxvZ0NsYXNzICkub2ZmKCBcIi51aS1kYXRlcGlja2VyLWNhbGVuZGFyXCIgKTtcblx0fSxcblxuXHQvKiBDbG9zZSBkYXRlIHBpY2tlciBpZiBjbGlja2VkIGVsc2V3aGVyZS4gKi9cblx0X2NoZWNrRXh0ZXJuYWxDbGljazogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGlmICggISQuZGF0ZXBpY2tlci5fY3VySW5zdCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgJHRhcmdldCA9ICQoIGV2ZW50LnRhcmdldCApLFxuXHRcdFx0aW5zdCA9ICQuZGF0ZXBpY2tlci5fZ2V0SW5zdCggJHRhcmdldFsgMCBdICk7XG5cblx0XHRpZiAoICggKCAkdGFyZ2V0WyAwIF0uaWQgIT09ICQuZGF0ZXBpY2tlci5fbWFpbkRpdklkICYmXG5cdFx0XHRcdCR0YXJnZXQucGFyZW50cyggXCIjXCIgKyAkLmRhdGVwaWNrZXIuX21haW5EaXZJZCApLmxlbmd0aCA9PT0gMCAmJlxuXHRcdFx0XHQhJHRhcmdldC5oYXNDbGFzcyggJC5kYXRlcGlja2VyLm1hcmtlckNsYXNzTmFtZSApICYmXG5cdFx0XHRcdCEkdGFyZ2V0LmNsb3Nlc3QoIFwiLlwiICsgJC5kYXRlcGlja2VyLl90cmlnZ2VyQ2xhc3MgKS5sZW5ndGggJiZcblx0XHRcdFx0JC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyAmJiAhKCAkLmRhdGVwaWNrZXIuX2luRGlhbG9nICYmICQuYmxvY2tVSSApICkgKSB8fFxuXHRcdFx0KCAkdGFyZ2V0Lmhhc0NsYXNzKCAkLmRhdGVwaWNrZXIubWFya2VyQ2xhc3NOYW1lICkgJiYgJC5kYXRlcGlja2VyLl9jdXJJbnN0ICE9PSBpbnN0ICkgKSB7XG5cdFx0XHRcdCQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTtcblx0XHR9XG5cdH0sXG5cblx0LyogQWRqdXN0IG9uZSBvZiB0aGUgZGF0ZSBzdWItZmllbGRzLiAqL1xuXHRfYWRqdXN0RGF0ZTogZnVuY3Rpb24oIGlkLCBvZmZzZXQsIHBlcmlvZCApIHtcblx0XHR2YXIgdGFyZ2V0ID0gJCggaWQgKSxcblx0XHRcdGluc3QgPSB0aGlzLl9nZXRJbnN0KCB0YXJnZXRbIDAgXSApO1xuXG5cdFx0aWYgKCB0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlciggdGFyZ2V0WyAwIF0gKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5fYWRqdXN0SW5zdERhdGUoIGluc3QsIG9mZnNldCArXG5cdFx0XHQoIHBlcmlvZCA9PT0gXCJNXCIgPyB0aGlzLl9nZXQoIGluc3QsIFwic2hvd0N1cnJlbnRBdFBvc1wiICkgOiAwICksIC8vIHVuZG8gcG9zaXRpb25pbmdcblx0XHRcdHBlcmlvZCApO1xuXHRcdHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoIGluc3QgKTtcblx0fSxcblxuXHQvKiBBY3Rpb24gZm9yIGN1cnJlbnQgbGluay4gKi9cblx0X2dvdG9Ub2RheTogZnVuY3Rpb24oIGlkICkge1xuXHRcdHZhciBkYXRlLFxuXHRcdFx0dGFyZ2V0ID0gJCggaWQgKSxcblx0XHRcdGluc3QgPSB0aGlzLl9nZXRJbnN0KCB0YXJnZXRbIDAgXSApO1xuXG5cdFx0aWYgKCB0aGlzLl9nZXQoIGluc3QsIFwiZ290b0N1cnJlbnRcIiApICYmIGluc3QuY3VycmVudERheSApIHtcblx0XHRcdGluc3Quc2VsZWN0ZWREYXkgPSBpbnN0LmN1cnJlbnREYXk7XG5cdFx0XHRpbnN0LmRyYXdNb250aCA9IGluc3Quc2VsZWN0ZWRNb250aCA9IGluc3QuY3VycmVudE1vbnRoO1xuXHRcdFx0aW5zdC5kcmF3WWVhciA9IGluc3Quc2VsZWN0ZWRZZWFyID0gaW5zdC5jdXJyZW50WWVhcjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRpbnN0LnNlbGVjdGVkRGF5ID0gZGF0ZS5nZXREYXRlKCk7XG5cdFx0XHRpbnN0LmRyYXdNb250aCA9IGluc3Quc2VsZWN0ZWRNb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcblx0XHRcdGluc3QuZHJhd1llYXIgPSBpbnN0LnNlbGVjdGVkWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcblx0XHR9XG5cdFx0dGhpcy5fbm90aWZ5Q2hhbmdlKCBpbnN0ICk7XG5cdFx0dGhpcy5fYWRqdXN0RGF0ZSggdGFyZ2V0ICk7XG5cdH0sXG5cblx0LyogQWN0aW9uIGZvciBzZWxlY3RpbmcgYSBuZXcgbW9udGgveWVhci4gKi9cblx0X3NlbGVjdE1vbnRoWWVhcjogZnVuY3Rpb24oIGlkLCBzZWxlY3QsIHBlcmlvZCApIHtcblx0XHR2YXIgdGFyZ2V0ID0gJCggaWQgKSxcblx0XHRcdGluc3QgPSB0aGlzLl9nZXRJbnN0KCB0YXJnZXRbIDAgXSApO1xuXG5cdFx0aW5zdFsgXCJzZWxlY3RlZFwiICsgKCBwZXJpb2QgPT09IFwiTVwiID8gXCJNb250aFwiIDogXCJZZWFyXCIgKSBdID1cblx0XHRpbnN0WyBcImRyYXdcIiArICggcGVyaW9kID09PSBcIk1cIiA/IFwiTW9udGhcIiA6IFwiWWVhclwiICkgXSA9XG5cdFx0XHRwYXJzZUludCggc2VsZWN0Lm9wdGlvbnNbIHNlbGVjdC5zZWxlY3RlZEluZGV4IF0udmFsdWUsIDEwICk7XG5cblx0XHR0aGlzLl9ub3RpZnlDaGFuZ2UoIGluc3QgKTtcblx0XHR0aGlzLl9hZGp1c3REYXRlKCB0YXJnZXQgKTtcblx0fSxcblxuXHQvKiBBY3Rpb24gZm9yIHNlbGVjdGluZyBhIGRheS4gKi9cblx0X3NlbGVjdERheTogZnVuY3Rpb24oIGlkLCBtb250aCwgeWVhciwgdGQgKSB7XG5cdFx0dmFyIGluc3QsXG5cdFx0XHR0YXJnZXQgPSAkKCBpZCApO1xuXG5cdFx0aWYgKCAkKCB0ZCApLmhhc0NsYXNzKCB0aGlzLl91bnNlbGVjdGFibGVDbGFzcyApIHx8IHRoaXMuX2lzRGlzYWJsZWREYXRlcGlja2VyKCB0YXJnZXRbIDAgXSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGluc3QgPSB0aGlzLl9nZXRJbnN0KCB0YXJnZXRbIDAgXSApO1xuXHRcdGluc3Quc2VsZWN0ZWREYXkgPSBpbnN0LmN1cnJlbnREYXkgPSAkKCBcImFcIiwgdGQgKS5odG1sKCk7XG5cdFx0aW5zdC5zZWxlY3RlZE1vbnRoID0gaW5zdC5jdXJyZW50TW9udGggPSBtb250aDtcblx0XHRpbnN0LnNlbGVjdGVkWWVhciA9IGluc3QuY3VycmVudFllYXIgPSB5ZWFyO1xuXHRcdHRoaXMuX3NlbGVjdERhdGUoIGlkLCB0aGlzLl9mb3JtYXREYXRlKCBpbnN0LFxuXHRcdFx0aW5zdC5jdXJyZW50RGF5LCBpbnN0LmN1cnJlbnRNb250aCwgaW5zdC5jdXJyZW50WWVhciApICk7XG5cdH0sXG5cblx0LyogRXJhc2UgdGhlIGlucHV0IGZpZWxkIGFuZCBoaWRlIHRoZSBkYXRlIHBpY2tlci4gKi9cblx0X2NsZWFyRGF0ZTogZnVuY3Rpb24oIGlkICkge1xuXHRcdHZhciB0YXJnZXQgPSAkKCBpZCApO1xuXHRcdHRoaXMuX3NlbGVjdERhdGUoIHRhcmdldCwgXCJcIiApO1xuXHR9LFxuXG5cdC8qIFVwZGF0ZSB0aGUgaW5wdXQgZmllbGQgd2l0aCB0aGUgc2VsZWN0ZWQgZGF0ZS4gKi9cblx0X3NlbGVjdERhdGU6IGZ1bmN0aW9uKCBpZCwgZGF0ZVN0ciApIHtcblx0XHR2YXIgb25TZWxlY3QsXG5cdFx0XHR0YXJnZXQgPSAkKCBpZCApLFxuXHRcdFx0aW5zdCA9IHRoaXMuX2dldEluc3QoIHRhcmdldFsgMCBdICk7XG5cblx0XHRkYXRlU3RyID0gKCBkYXRlU3RyICE9IG51bGwgPyBkYXRlU3RyIDogdGhpcy5fZm9ybWF0RGF0ZSggaW5zdCApICk7XG5cdFx0aWYgKCBpbnN0LmlucHV0ICkge1xuXHRcdFx0aW5zdC5pbnB1dC52YWwoIGRhdGVTdHIgKTtcblx0XHR9XG5cdFx0dGhpcy5fdXBkYXRlQWx0ZXJuYXRlKCBpbnN0ICk7XG5cblx0XHRvblNlbGVjdCA9IHRoaXMuX2dldCggaW5zdCwgXCJvblNlbGVjdFwiICk7XG5cdFx0aWYgKCBvblNlbGVjdCApIHtcblx0XHRcdG9uU2VsZWN0LmFwcGx5KCAoIGluc3QuaW5wdXQgPyBpbnN0LmlucHV0WyAwIF0gOiBudWxsICksIFsgZGF0ZVN0ciwgaW5zdCBdICk7ICAvLyB0cmlnZ2VyIGN1c3RvbSBjYWxsYmFja1xuXHRcdH0gZWxzZSBpZiAoIGluc3QuaW5wdXQgKSB7XG5cdFx0XHRpbnN0LmlucHV0LnRyaWdnZXIoIFwiY2hhbmdlXCIgKTsgLy8gZmlyZSB0aGUgY2hhbmdlIGV2ZW50XG5cdFx0fVxuXG5cdFx0aWYgKCBpbnN0LmlubGluZSApIHtcblx0XHRcdHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoIGluc3QgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5faGlkZURhdGVwaWNrZXIoKTtcblx0XHRcdHRoaXMuX2xhc3RJbnB1dCA9IGluc3QuaW5wdXRbIDAgXTtcblx0XHRcdGlmICggdHlwZW9mKCBpbnN0LmlucHV0WyAwIF0gKSAhPT0gXCJvYmplY3RcIiApIHtcblx0XHRcdFx0aW5zdC5pbnB1dC50cmlnZ2VyKCBcImZvY3VzXCIgKTsgLy8gcmVzdG9yZSBmb2N1c1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fbGFzdElucHV0ID0gbnVsbDtcblx0XHR9XG5cdH0sXG5cblx0LyogVXBkYXRlIGFueSBhbHRlcm5hdGUgZmllbGQgdG8gc3luY2hyb25pc2Ugd2l0aCB0aGUgbWFpbiBmaWVsZC4gKi9cblx0X3VwZGF0ZUFsdGVybmF0ZTogZnVuY3Rpb24oIGluc3QgKSB7XG5cdFx0dmFyIGFsdEZvcm1hdCwgZGF0ZSwgZGF0ZVN0cixcblx0XHRcdGFsdEZpZWxkID0gdGhpcy5fZ2V0KCBpbnN0LCBcImFsdEZpZWxkXCIgKTtcblxuXHRcdGlmICggYWx0RmllbGQgKSB7IC8vIHVwZGF0ZSBhbHRlcm5hdGUgZmllbGQgdG9vXG5cdFx0XHRhbHRGb3JtYXQgPSB0aGlzLl9nZXQoIGluc3QsIFwiYWx0Rm9ybWF0XCIgKSB8fCB0aGlzLl9nZXQoIGluc3QsIFwiZGF0ZUZvcm1hdFwiICk7XG5cdFx0XHRkYXRlID0gdGhpcy5fZ2V0RGF0ZSggaW5zdCApO1xuXHRcdFx0ZGF0ZVN0ciA9IHRoaXMuZm9ybWF0RGF0ZSggYWx0Rm9ybWF0LCBkYXRlLCB0aGlzLl9nZXRGb3JtYXRDb25maWcoIGluc3QgKSApO1xuXHRcdFx0JCggYWx0RmllbGQgKS52YWwoIGRhdGVTdHIgKTtcblx0XHR9XG5cdH0sXG5cblx0LyogU2V0IGFzIGJlZm9yZVNob3dEYXkgZnVuY3Rpb24gdG8gcHJldmVudCBzZWxlY3Rpb24gb2Ygd2Vla2VuZHMuXG5cdCAqIEBwYXJhbSAgZGF0ZSAgRGF0ZSAtIHRoZSBkYXRlIHRvIGN1c3RvbWlzZVxuXHQgKiBAcmV0dXJuIFtib29sZWFuLCBzdHJpbmddIC0gaXMgdGhpcyBkYXRlIHNlbGVjdGFibGU/LCB3aGF0IGlzIGl0cyBDU1MgY2xhc3M/XG5cdCAqL1xuXHRub1dlZWtlbmRzOiBmdW5jdGlvbiggZGF0ZSApIHtcblx0XHR2YXIgZGF5ID0gZGF0ZS5nZXREYXkoKTtcblx0XHRyZXR1cm4gWyAoIGRheSA+IDAgJiYgZGF5IDwgNiApLCBcIlwiIF07XG5cdH0sXG5cblx0LyogU2V0IGFzIGNhbGN1bGF0ZVdlZWsgdG8gZGV0ZXJtaW5lIHRoZSB3ZWVrIG9mIHRoZSB5ZWFyIGJhc2VkIG9uIHRoZSBJU08gODYwMSBkZWZpbml0aW9uLlxuXHQgKiBAcGFyYW0gIGRhdGUgIERhdGUgLSB0aGUgZGF0ZSB0byBnZXQgdGhlIHdlZWsgZm9yXG5cdCAqIEByZXR1cm4gIG51bWJlciAtIHRoZSBudW1iZXIgb2YgdGhlIHdlZWsgd2l0aGluIHRoZSB5ZWFyIHRoYXQgY29udGFpbnMgdGhpcyBkYXRlXG5cdCAqL1xuXHRpc284NjAxV2VlazogZnVuY3Rpb24oIGRhdGUgKSB7XG5cdFx0dmFyIHRpbWUsXG5cdFx0XHRjaGVja0RhdGUgPSBuZXcgRGF0ZSggZGF0ZS5nZXRUaW1lKCkgKTtcblxuXHRcdC8vIEZpbmQgVGh1cnNkYXkgb2YgdGhpcyB3ZWVrIHN0YXJ0aW5nIG9uIE1vbmRheVxuXHRcdGNoZWNrRGF0ZS5zZXREYXRlKCBjaGVja0RhdGUuZ2V0RGF0ZSgpICsgNCAtICggY2hlY2tEYXRlLmdldERheSgpIHx8IDcgKSApO1xuXG5cdFx0dGltZSA9IGNoZWNrRGF0ZS5nZXRUaW1lKCk7XG5cdFx0Y2hlY2tEYXRlLnNldE1vbnRoKCAwICk7IC8vIENvbXBhcmUgd2l0aCBKYW4gMVxuXHRcdGNoZWNrRGF0ZS5zZXREYXRlKCAxICk7XG5cdFx0cmV0dXJuIE1hdGguZmxvb3IoIE1hdGgucm91bmQoICggdGltZSAtIGNoZWNrRGF0ZSApIC8gODY0MDAwMDAgKSAvIDcgKSArIDE7XG5cdH0sXG5cblx0LyogUGFyc2UgYSBzdHJpbmcgdmFsdWUgaW50byBhIGRhdGUgb2JqZWN0LlxuXHQgKiBTZWUgZm9ybWF0RGF0ZSBiZWxvdyBmb3IgdGhlIHBvc3NpYmxlIGZvcm1hdHMuXG5cdCAqXG5cdCAqIEBwYXJhbSAgZm9ybWF0IHN0cmluZyAtIHRoZSBleHBlY3RlZCBmb3JtYXQgb2YgdGhlIGRhdGVcblx0ICogQHBhcmFtICB2YWx1ZSBzdHJpbmcgLSB0aGUgZGF0ZSBpbiB0aGUgYWJvdmUgZm9ybWF0XG5cdCAqIEBwYXJhbSAgc2V0dGluZ3MgT2JqZWN0IC0gYXR0cmlidXRlcyBpbmNsdWRlOlxuXHQgKlx0XHRcdFx0XHRzaG9ydFllYXJDdXRvZmYgIG51bWJlciAtIHRoZSBjdXRvZmYgeWVhciBmb3IgZGV0ZXJtaW5pbmcgdGhlIGNlbnR1cnkgKG9wdGlvbmFsKVxuXHQgKlx0XHRcdFx0XHRkYXlOYW1lc1Nob3J0XHRzdHJpbmdbN10gLSBhYmJyZXZpYXRlZCBuYW1lcyBvZiB0aGUgZGF5cyBmcm9tIFN1bmRheSAob3B0aW9uYWwpXG5cdCAqXHRcdFx0XHRcdGRheU5hbWVzXHRcdHN0cmluZ1s3XSAtIG5hbWVzIG9mIHRoZSBkYXlzIGZyb20gU3VuZGF5IChvcHRpb25hbClcblx0ICpcdFx0XHRcdFx0bW9udGhOYW1lc1Nob3J0IHN0cmluZ1sxMl0gLSBhYmJyZXZpYXRlZCBuYW1lcyBvZiB0aGUgbW9udGhzIChvcHRpb25hbClcblx0ICpcdFx0XHRcdFx0bW9udGhOYW1lc1x0XHRzdHJpbmdbMTJdIC0gbmFtZXMgb2YgdGhlIG1vbnRocyAob3B0aW9uYWwpXG5cdCAqIEByZXR1cm4gIERhdGUgLSB0aGUgZXh0cmFjdGVkIGRhdGUgdmFsdWUgb3IgbnVsbCBpZiB2YWx1ZSBpcyBibGFua1xuXHQgKi9cblx0cGFyc2VEYXRlOiBmdW5jdGlvbiggZm9ybWF0LCB2YWx1ZSwgc2V0dGluZ3MgKSB7XG5cdFx0aWYgKCBmb3JtYXQgPT0gbnVsbCB8fCB2YWx1ZSA9PSBudWxsICkge1xuXHRcdFx0dGhyb3cgXCJJbnZhbGlkIGFyZ3VtZW50c1wiO1xuXHRcdH1cblxuXHRcdHZhbHVlID0gKCB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgPyB2YWx1ZS50b1N0cmluZygpIDogdmFsdWUgKyBcIlwiICk7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gXCJcIiApIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHZhciBpRm9ybWF0LCBkaW0sIGV4dHJhLFxuXHRcdFx0aVZhbHVlID0gMCxcblx0XHRcdHNob3J0WWVhckN1dG9mZlRlbXAgPSAoIHNldHRpbmdzID8gc2V0dGluZ3Muc2hvcnRZZWFyQ3V0b2ZmIDogbnVsbCApIHx8IHRoaXMuX2RlZmF1bHRzLnNob3J0WWVhckN1dG9mZixcblx0XHRcdHNob3J0WWVhckN1dG9mZiA9ICggdHlwZW9mIHNob3J0WWVhckN1dG9mZlRlbXAgIT09IFwic3RyaW5nXCIgPyBzaG9ydFllYXJDdXRvZmZUZW1wIDpcblx0XHRcdFx0bmV3IERhdGUoKS5nZXRGdWxsWWVhcigpICUgMTAwICsgcGFyc2VJbnQoIHNob3J0WWVhckN1dG9mZlRlbXAsIDEwICkgKSxcblx0XHRcdGRheU5hbWVzU2hvcnQgPSAoIHNldHRpbmdzID8gc2V0dGluZ3MuZGF5TmFtZXNTaG9ydCA6IG51bGwgKSB8fCB0aGlzLl9kZWZhdWx0cy5kYXlOYW1lc1Nob3J0LFxuXHRcdFx0ZGF5TmFtZXMgPSAoIHNldHRpbmdzID8gc2V0dGluZ3MuZGF5TmFtZXMgOiBudWxsICkgfHwgdGhpcy5fZGVmYXVsdHMuZGF5TmFtZXMsXG5cdFx0XHRtb250aE5hbWVzU2hvcnQgPSAoIHNldHRpbmdzID8gc2V0dGluZ3MubW9udGhOYW1lc1Nob3J0IDogbnVsbCApIHx8IHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxcblx0XHRcdG1vbnRoTmFtZXMgPSAoIHNldHRpbmdzID8gc2V0dGluZ3MubW9udGhOYW1lcyA6IG51bGwgKSB8fCB0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzLFxuXHRcdFx0eWVhciA9IC0xLFxuXHRcdFx0bW9udGggPSAtMSxcblx0XHRcdGRheSA9IC0xLFxuXHRcdFx0ZG95ID0gLTEsXG5cdFx0XHRsaXRlcmFsID0gZmFsc2UsXG5cdFx0XHRkYXRlLFxuXG5cdFx0XHQvLyBDaGVjayB3aGV0aGVyIGEgZm9ybWF0IGNoYXJhY3RlciBpcyBkb3VibGVkXG5cdFx0XHRsb29rQWhlYWQgPSBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRcdHZhciBtYXRjaGVzID0gKCBpRm9ybWF0ICsgMSA8IGZvcm1hdC5sZW5ndGggJiYgZm9ybWF0LmNoYXJBdCggaUZvcm1hdCArIDEgKSA9PT0gbWF0Y2ggKTtcblx0XHRcdFx0aWYgKCBtYXRjaGVzICkge1xuXHRcdFx0XHRcdGlGb3JtYXQrKztcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbWF0Y2hlcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIEV4dHJhY3QgYSBudW1iZXIgZnJvbSB0aGUgc3RyaW5nIHZhbHVlXG5cdFx0XHRnZXROdW1iZXIgPSBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRcdHZhciBpc0RvdWJsZWQgPSBsb29rQWhlYWQoIG1hdGNoICksXG5cdFx0XHRcdFx0c2l6ZSA9ICggbWF0Y2ggPT09IFwiQFwiID8gMTQgOiAoIG1hdGNoID09PSBcIiFcIiA/IDIwIDpcblx0XHRcdFx0XHQoIG1hdGNoID09PSBcInlcIiAmJiBpc0RvdWJsZWQgPyA0IDogKCBtYXRjaCA9PT0gXCJvXCIgPyAzIDogMiApICkgKSApLFxuXHRcdFx0XHRcdG1pblNpemUgPSAoIG1hdGNoID09PSBcInlcIiA/IHNpemUgOiAxICksXG5cdFx0XHRcdFx0ZGlnaXRzID0gbmV3IFJlZ0V4cCggXCJeXFxcXGR7XCIgKyBtaW5TaXplICsgXCIsXCIgKyBzaXplICsgXCJ9XCIgKSxcblx0XHRcdFx0XHRudW0gPSB2YWx1ZS5zdWJzdHJpbmcoIGlWYWx1ZSApLm1hdGNoKCBkaWdpdHMgKTtcblx0XHRcdFx0aWYgKCAhbnVtICkge1xuXHRcdFx0XHRcdHRocm93IFwiTWlzc2luZyBudW1iZXIgYXQgcG9zaXRpb24gXCIgKyBpVmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aVZhbHVlICs9IG51bVsgMCBdLmxlbmd0aDtcblx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KCBudW1bIDAgXSwgMTAgKTtcblx0XHRcdH0sXG5cblx0XHRcdC8vIEV4dHJhY3QgYSBuYW1lIGZyb20gdGhlIHN0cmluZyB2YWx1ZSBhbmQgY29udmVydCB0byBhbiBpbmRleFxuXHRcdFx0Z2V0TmFtZSA9IGZ1bmN0aW9uKCBtYXRjaCwgc2hvcnROYW1lcywgbG9uZ05hbWVzICkge1xuXHRcdFx0XHR2YXIgaW5kZXggPSAtMSxcblx0XHRcdFx0XHRuYW1lcyA9ICQubWFwKCBsb29rQWhlYWQoIG1hdGNoICkgPyBsb25nTmFtZXMgOiBzaG9ydE5hbWVzLCBmdW5jdGlvbiggdiwgayApIHtcblx0XHRcdFx0XHRcdHJldHVybiBbIFsgaywgdiBdIF07XG5cdFx0XHRcdFx0fSApLnNvcnQoIGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIC0oIGFbIDEgXS5sZW5ndGggLSBiWyAxIF0ubGVuZ3RoICk7XG5cdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdCQuZWFjaCggbmFtZXMsIGZ1bmN0aW9uKCBpLCBwYWlyICkge1xuXHRcdFx0XHRcdHZhciBuYW1lID0gcGFpclsgMSBdO1xuXHRcdFx0XHRcdGlmICggdmFsdWUuc3Vic3RyKCBpVmFsdWUsIG5hbWUubGVuZ3RoICkudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpICkge1xuXHRcdFx0XHRcdFx0aW5kZXggPSBwYWlyWyAwIF07XG5cdFx0XHRcdFx0XHRpVmFsdWUgKz0gbmFtZS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdGlmICggaW5kZXggIT09IC0xICkge1xuXHRcdFx0XHRcdHJldHVybiBpbmRleCArIDE7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhyb3cgXCJVbmtub3duIG5hbWUgYXQgcG9zaXRpb24gXCIgKyBpVmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8vIENvbmZpcm0gdGhhdCBhIGxpdGVyYWwgY2hhcmFjdGVyIG1hdGNoZXMgdGhlIHN0cmluZyB2YWx1ZVxuXHRcdFx0Y2hlY2tMaXRlcmFsID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggdmFsdWUuY2hhckF0KCBpVmFsdWUgKSAhPT0gZm9ybWF0LmNoYXJBdCggaUZvcm1hdCApICkge1xuXHRcdFx0XHRcdHRocm93IFwiVW5leHBlY3RlZCBsaXRlcmFsIGF0IHBvc2l0aW9uIFwiICsgaVZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlWYWx1ZSsrO1xuXHRcdFx0fTtcblxuXHRcdGZvciAoIGlGb3JtYXQgPSAwOyBpRm9ybWF0IDwgZm9ybWF0Lmxlbmd0aDsgaUZvcm1hdCsrICkge1xuXHRcdFx0aWYgKCBsaXRlcmFsICkge1xuXHRcdFx0XHRpZiAoIGZvcm1hdC5jaGFyQXQoIGlGb3JtYXQgKSA9PT0gXCInXCIgJiYgIWxvb2tBaGVhZCggXCInXCIgKSApIHtcblx0XHRcdFx0XHRsaXRlcmFsID0gZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y2hlY2tMaXRlcmFsKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN3aXRjaCAoIGZvcm1hdC5jaGFyQXQoIGlGb3JtYXQgKSApIHtcblx0XHRcdFx0XHRjYXNlIFwiZFwiOlxuXHRcdFx0XHRcdFx0ZGF5ID0gZ2V0TnVtYmVyKCBcImRcIiApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIkRcIjpcblx0XHRcdFx0XHRcdGdldE5hbWUoIFwiRFwiLCBkYXlOYW1lc1Nob3J0LCBkYXlOYW1lcyApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIm9cIjpcblx0XHRcdFx0XHRcdGRveSA9IGdldE51bWJlciggXCJvXCIgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJtXCI6XG5cdFx0XHRcdFx0XHRtb250aCA9IGdldE51bWJlciggXCJtXCIgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJNXCI6XG5cdFx0XHRcdFx0XHRtb250aCA9IGdldE5hbWUoIFwiTVwiLCBtb250aE5hbWVzU2hvcnQsIG1vbnRoTmFtZXMgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJ5XCI6XG5cdFx0XHRcdFx0XHR5ZWFyID0gZ2V0TnVtYmVyKCBcInlcIiApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIkBcIjpcblx0XHRcdFx0XHRcdGRhdGUgPSBuZXcgRGF0ZSggZ2V0TnVtYmVyKCBcIkBcIiApICk7XG5cdFx0XHRcdFx0XHR5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuXHRcdFx0XHRcdFx0bW9udGggPSBkYXRlLmdldE1vbnRoKCkgKyAxO1xuXHRcdFx0XHRcdFx0ZGF5ID0gZGF0ZS5nZXREYXRlKCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiIVwiOlxuXHRcdFx0XHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKCAoIGdldE51bWJlciggXCIhXCIgKSAtIHRoaXMuX3RpY2tzVG8xOTcwICkgLyAxMDAwMCApO1xuXHRcdFx0XHRcdFx0eWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcblx0XHRcdFx0XHRcdG1vbnRoID0gZGF0ZS5nZXRNb250aCgpICsgMTtcblx0XHRcdFx0XHRcdGRheSA9IGRhdGUuZ2V0RGF0ZSgpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIidcIjpcblx0XHRcdFx0XHRcdGlmICggbG9va0FoZWFkKCBcIidcIiApICkge1xuXHRcdFx0XHRcdFx0XHRjaGVja0xpdGVyYWwoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGxpdGVyYWwgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGNoZWNrTGl0ZXJhbCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBpVmFsdWUgPCB2YWx1ZS5sZW5ndGggKSB7XG5cdFx0XHRleHRyYSA9IHZhbHVlLnN1YnN0ciggaVZhbHVlICk7XG5cdFx0XHRpZiAoICEvXlxccysvLnRlc3QoIGV4dHJhICkgKSB7XG5cdFx0XHRcdHRocm93IFwiRXh0cmEvdW5wYXJzZWQgY2hhcmFjdGVycyBmb3VuZCBpbiBkYXRlOiBcIiArIGV4dHJhO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggeWVhciA9PT0gLTEgKSB7XG5cdFx0XHR5ZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuXHRcdH0gZWxzZSBpZiAoIHllYXIgPCAxMDAgKSB7XG5cdFx0XHR5ZWFyICs9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSAtIG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSAlIDEwMCArXG5cdFx0XHRcdCggeWVhciA8PSBzaG9ydFllYXJDdXRvZmYgPyAwIDogLTEwMCApO1xuXHRcdH1cblxuXHRcdGlmICggZG95ID4gLTEgKSB7XG5cdFx0XHRtb250aCA9IDE7XG5cdFx0XHRkYXkgPSBkb3k7XG5cdFx0XHRkbyB7XG5cdFx0XHRcdGRpbSA9IHRoaXMuX2dldERheXNJbk1vbnRoKCB5ZWFyLCBtb250aCAtIDEgKTtcblx0XHRcdFx0aWYgKCBkYXkgPD0gZGltICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1vbnRoKys7XG5cdFx0XHRcdGRheSAtPSBkaW07XG5cdFx0XHR9IHdoaWxlICggdHJ1ZSApO1xuXHRcdH1cblxuXHRcdGRhdGUgPSB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdCggbmV3IERhdGUoIHllYXIsIG1vbnRoIC0gMSwgZGF5ICkgKTtcblx0XHRpZiAoIGRhdGUuZ2V0RnVsbFllYXIoKSAhPT0geWVhciB8fCBkYXRlLmdldE1vbnRoKCkgKyAxICE9PSBtb250aCB8fCBkYXRlLmdldERhdGUoKSAhPT0gZGF5ICkge1xuXHRcdFx0dGhyb3cgXCJJbnZhbGlkIGRhdGVcIjsgLy8gRS5nLiAzMS8wMi8wMFxuXHRcdH1cblx0XHRyZXR1cm4gZGF0ZTtcblx0fSxcblxuXHQvKiBTdGFuZGFyZCBkYXRlIGZvcm1hdHMuICovXG5cdEFUT006IFwieXktbW0tZGRcIiwgLy8gUkZDIDMzMzkgKElTTyA4NjAxKVxuXHRDT09LSUU6IFwiRCwgZGQgTSB5eVwiLFxuXHRJU09fODYwMTogXCJ5eS1tbS1kZFwiLFxuXHRSRkNfODIyOiBcIkQsIGQgTSB5XCIsXG5cdFJGQ184NTA6IFwiREQsIGRkLU0teVwiLFxuXHRSRkNfMTAzNjogXCJELCBkIE0geVwiLFxuXHRSRkNfMTEyMzogXCJELCBkIE0geXlcIixcblx0UkZDXzI4MjI6IFwiRCwgZCBNIHl5XCIsXG5cdFJTUzogXCJELCBkIE0geVwiLCAvLyBSRkMgODIyXG5cdFRJQ0tTOiBcIiFcIixcblx0VElNRVNUQU1QOiBcIkBcIixcblx0VzNDOiBcInl5LW1tLWRkXCIsIC8vIElTTyA4NjAxXG5cblx0X3RpY2tzVG8xOTcwOiAoICggKCAxOTcwIC0gMSApICogMzY1ICsgTWF0aC5mbG9vciggMTk3MCAvIDQgKSAtIE1hdGguZmxvb3IoIDE5NzAgLyAxMDAgKSArXG5cdFx0TWF0aC5mbG9vciggMTk3MCAvIDQwMCApICkgKiAyNCAqIDYwICogNjAgKiAxMDAwMDAwMCApLFxuXG5cdC8qIEZvcm1hdCBhIGRhdGUgb2JqZWN0IGludG8gYSBzdHJpbmcgdmFsdWUuXG5cdCAqIFRoZSBmb3JtYXQgY2FuIGJlIGNvbWJpbmF0aW9ucyBvZiB0aGUgZm9sbG93aW5nOlxuXHQgKiBkICAtIGRheSBvZiBtb250aCAobm8gbGVhZGluZyB6ZXJvKVxuXHQgKiBkZCAtIGRheSBvZiBtb250aCAodHdvIGRpZ2l0KVxuXHQgKiBvICAtIGRheSBvZiB5ZWFyIChubyBsZWFkaW5nIHplcm9zKVxuXHQgKiBvbyAtIGRheSBvZiB5ZWFyICh0aHJlZSBkaWdpdClcblx0ICogRCAgLSBkYXkgbmFtZSBzaG9ydFxuXHQgKiBERCAtIGRheSBuYW1lIGxvbmdcblx0ICogbSAgLSBtb250aCBvZiB5ZWFyIChubyBsZWFkaW5nIHplcm8pXG5cdCAqIG1tIC0gbW9udGggb2YgeWVhciAodHdvIGRpZ2l0KVxuXHQgKiBNICAtIG1vbnRoIG5hbWUgc2hvcnRcblx0ICogTU0gLSBtb250aCBuYW1lIGxvbmdcblx0ICogeSAgLSB5ZWFyICh0d28gZGlnaXQpXG5cdCAqIHl5IC0geWVhciAoZm91ciBkaWdpdClcblx0ICogQCAtIFVuaXggdGltZXN0YW1wIChtcyBzaW5jZSAwMS8wMS8xOTcwKVxuXHQgKiAhIC0gV2luZG93cyB0aWNrcyAoMTAwbnMgc2luY2UgMDEvMDEvMDAwMSlcblx0ICogXCIuLi5cIiAtIGxpdGVyYWwgdGV4dFxuXHQgKiAnJyAtIHNpbmdsZSBxdW90ZVxuXHQgKlxuXHQgKiBAcGFyYW0gIGZvcm1hdCBzdHJpbmcgLSB0aGUgZGVzaXJlZCBmb3JtYXQgb2YgdGhlIGRhdGVcblx0ICogQHBhcmFtICBkYXRlIERhdGUgLSB0aGUgZGF0ZSB2YWx1ZSB0byBmb3JtYXRcblx0ICogQHBhcmFtICBzZXR0aW5ncyBPYmplY3QgLSBhdHRyaWJ1dGVzIGluY2x1ZGU6XG5cdCAqXHRcdFx0XHRcdGRheU5hbWVzU2hvcnRcdHN0cmluZ1s3XSAtIGFiYnJldmlhdGVkIG5hbWVzIG9mIHRoZSBkYXlzIGZyb20gU3VuZGF5IChvcHRpb25hbClcblx0ICpcdFx0XHRcdFx0ZGF5TmFtZXNcdFx0c3RyaW5nWzddIC0gbmFtZXMgb2YgdGhlIGRheXMgZnJvbSBTdW5kYXkgKG9wdGlvbmFsKVxuXHQgKlx0XHRcdFx0XHRtb250aE5hbWVzU2hvcnQgc3RyaW5nWzEyXSAtIGFiYnJldmlhdGVkIG5hbWVzIG9mIHRoZSBtb250aHMgKG9wdGlvbmFsKVxuXHQgKlx0XHRcdFx0XHRtb250aE5hbWVzXHRcdHN0cmluZ1sxMl0gLSBuYW1lcyBvZiB0aGUgbW9udGhzIChvcHRpb25hbClcblx0ICogQHJldHVybiAgc3RyaW5nIC0gdGhlIGRhdGUgaW4gdGhlIGFib3ZlIGZvcm1hdFxuXHQgKi9cblx0Zm9ybWF0RGF0ZTogZnVuY3Rpb24oIGZvcm1hdCwgZGF0ZSwgc2V0dGluZ3MgKSB7XG5cdFx0aWYgKCAhZGF0ZSApIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblxuXHRcdHZhciBpRm9ybWF0LFxuXHRcdFx0ZGF5TmFtZXNTaG9ydCA9ICggc2V0dGluZ3MgPyBzZXR0aW5ncy5kYXlOYW1lc1Nob3J0IDogbnVsbCApIHx8IHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzU2hvcnQsXG5cdFx0XHRkYXlOYW1lcyA9ICggc2V0dGluZ3MgPyBzZXR0aW5ncy5kYXlOYW1lcyA6IG51bGwgKSB8fCB0aGlzLl9kZWZhdWx0cy5kYXlOYW1lcyxcblx0XHRcdG1vbnRoTmFtZXNTaG9ydCA9ICggc2V0dGluZ3MgPyBzZXR0aW5ncy5tb250aE5hbWVzU2hvcnQgOiBudWxsICkgfHwgdGhpcy5fZGVmYXVsdHMubW9udGhOYW1lc1Nob3J0LFxuXHRcdFx0bW9udGhOYW1lcyA9ICggc2V0dGluZ3MgPyBzZXR0aW5ncy5tb250aE5hbWVzIDogbnVsbCApIHx8IHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXMsXG5cblx0XHRcdC8vIENoZWNrIHdoZXRoZXIgYSBmb3JtYXQgY2hhcmFjdGVyIGlzIGRvdWJsZWRcblx0XHRcdGxvb2tBaGVhZCA9IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdFx0dmFyIG1hdGNoZXMgPSAoIGlGb3JtYXQgKyAxIDwgZm9ybWF0Lmxlbmd0aCAmJiBmb3JtYXQuY2hhckF0KCBpRm9ybWF0ICsgMSApID09PSBtYXRjaCApO1xuXHRcdFx0XHRpZiAoIG1hdGNoZXMgKSB7XG5cdFx0XHRcdFx0aUZvcm1hdCsrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBtYXRjaGVzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRm9ybWF0IGEgbnVtYmVyLCB3aXRoIGxlYWRpbmcgemVybyBpZiBuZWNlc3Nhcnlcblx0XHRcdGZvcm1hdE51bWJlciA9IGZ1bmN0aW9uKCBtYXRjaCwgdmFsdWUsIGxlbiApIHtcblx0XHRcdFx0dmFyIG51bSA9IFwiXCIgKyB2YWx1ZTtcblx0XHRcdFx0aWYgKCBsb29rQWhlYWQoIG1hdGNoICkgKSB7XG5cdFx0XHRcdFx0d2hpbGUgKCBudW0ubGVuZ3RoIDwgbGVuICkge1xuXHRcdFx0XHRcdFx0bnVtID0gXCIwXCIgKyBudW07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBudW07XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBGb3JtYXQgYSBuYW1lLCBzaG9ydCBvciBsb25nIGFzIHJlcXVlc3RlZFxuXHRcdFx0Zm9ybWF0TmFtZSA9IGZ1bmN0aW9uKCBtYXRjaCwgdmFsdWUsIHNob3J0TmFtZXMsIGxvbmdOYW1lcyApIHtcblx0XHRcdFx0cmV0dXJuICggbG9va0FoZWFkKCBtYXRjaCApID8gbG9uZ05hbWVzWyB2YWx1ZSBdIDogc2hvcnROYW1lc1sgdmFsdWUgXSApO1xuXHRcdFx0fSxcblx0XHRcdG91dHB1dCA9IFwiXCIsXG5cdFx0XHRsaXRlcmFsID0gZmFsc2U7XG5cblx0XHRpZiAoIGRhdGUgKSB7XG5cdFx0XHRmb3IgKCBpRm9ybWF0ID0gMDsgaUZvcm1hdCA8IGZvcm1hdC5sZW5ndGg7IGlGb3JtYXQrKyApIHtcblx0XHRcdFx0aWYgKCBsaXRlcmFsICkge1xuXHRcdFx0XHRcdGlmICggZm9ybWF0LmNoYXJBdCggaUZvcm1hdCApID09PSBcIidcIiAmJiAhbG9va0FoZWFkKCBcIidcIiApICkge1xuXHRcdFx0XHRcdFx0bGl0ZXJhbCA9IGZhbHNlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvdXRwdXQgKz0gZm9ybWF0LmNoYXJBdCggaUZvcm1hdCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzd2l0Y2ggKCBmb3JtYXQuY2hhckF0KCBpRm9ybWF0ICkgKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiZFwiOlxuXHRcdFx0XHRcdFx0XHRvdXRwdXQgKz0gZm9ybWF0TnVtYmVyKCBcImRcIiwgZGF0ZS5nZXREYXRlKCksIDIgKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRFwiOlxuXHRcdFx0XHRcdFx0XHRvdXRwdXQgKz0gZm9ybWF0TmFtZSggXCJEXCIsIGRhdGUuZ2V0RGF5KCksIGRheU5hbWVzU2hvcnQsIGRheU5hbWVzICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIm9cIjpcblx0XHRcdFx0XHRcdFx0b3V0cHV0ICs9IGZvcm1hdE51bWJlciggXCJvXCIsXG5cdFx0XHRcdFx0XHRcdFx0TWF0aC5yb3VuZCggKCBuZXcgRGF0ZSggZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpICkuZ2V0VGltZSgpIC0gbmV3IERhdGUoIGRhdGUuZ2V0RnVsbFllYXIoKSwgMCwgMCApLmdldFRpbWUoKSApIC8gODY0MDAwMDAgKSwgMyApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJtXCI6XG5cdFx0XHRcdFx0XHRcdG91dHB1dCArPSBmb3JtYXROdW1iZXIoIFwibVwiLCBkYXRlLmdldE1vbnRoKCkgKyAxLCAyICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIk1cIjpcblx0XHRcdFx0XHRcdFx0b3V0cHV0ICs9IGZvcm1hdE5hbWUoIFwiTVwiLCBkYXRlLmdldE1vbnRoKCksIG1vbnRoTmFtZXNTaG9ydCwgbW9udGhOYW1lcyApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJ5XCI6XG5cdFx0XHRcdFx0XHRcdG91dHB1dCArPSAoIGxvb2tBaGVhZCggXCJ5XCIgKSA/IGRhdGUuZ2V0RnVsbFllYXIoKSA6XG5cdFx0XHRcdFx0XHRcdFx0KCBkYXRlLmdldEZ1bGxZZWFyKCkgJSAxMDAgPCAxMCA/IFwiMFwiIDogXCJcIiApICsgZGF0ZS5nZXRGdWxsWWVhcigpICUgMTAwICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkBcIjpcblx0XHRcdFx0XHRcdFx0b3V0cHV0ICs9IGRhdGUuZ2V0VGltZSgpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCIhXCI6XG5cdFx0XHRcdFx0XHRcdG91dHB1dCArPSBkYXRlLmdldFRpbWUoKSAqIDEwMDAwICsgdGhpcy5fdGlja3NUbzE5NzA7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIidcIjpcblx0XHRcdFx0XHRcdFx0aWYgKCBsb29rQWhlYWQoIFwiJ1wiICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0b3V0cHV0ICs9IFwiJ1wiO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGxpdGVyYWwgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0b3V0cHV0ICs9IGZvcm1hdC5jaGFyQXQoIGlGb3JtYXQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fSxcblxuXHQvKiBFeHRyYWN0IGFsbCBwb3NzaWJsZSBjaGFyYWN0ZXJzIGZyb20gdGhlIGRhdGUgZm9ybWF0LiAqL1xuXHRfcG9zc2libGVDaGFyczogZnVuY3Rpb24oIGZvcm1hdCApIHtcblx0XHR2YXIgaUZvcm1hdCxcblx0XHRcdGNoYXJzID0gXCJcIixcblx0XHRcdGxpdGVyYWwgPSBmYWxzZSxcblxuXHRcdFx0Ly8gQ2hlY2sgd2hldGhlciBhIGZvcm1hdCBjaGFyYWN0ZXIgaXMgZG91YmxlZFxuXHRcdFx0bG9va0FoZWFkID0gZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0XHR2YXIgbWF0Y2hlcyA9ICggaUZvcm1hdCArIDEgPCBmb3JtYXQubGVuZ3RoICYmIGZvcm1hdC5jaGFyQXQoIGlGb3JtYXQgKyAxICkgPT09IG1hdGNoICk7XG5cdFx0XHRcdGlmICggbWF0Y2hlcyApIHtcblx0XHRcdFx0XHRpRm9ybWF0Kys7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG1hdGNoZXM7XG5cdFx0XHR9O1xuXG5cdFx0Zm9yICggaUZvcm1hdCA9IDA7IGlGb3JtYXQgPCBmb3JtYXQubGVuZ3RoOyBpRm9ybWF0KysgKSB7XG5cdFx0XHRpZiAoIGxpdGVyYWwgKSB7XG5cdFx0XHRcdGlmICggZm9ybWF0LmNoYXJBdCggaUZvcm1hdCApID09PSBcIidcIiAmJiAhbG9va0FoZWFkKCBcIidcIiApICkge1xuXHRcdFx0XHRcdGxpdGVyYWwgPSBmYWxzZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjaGFycyArPSBmb3JtYXQuY2hhckF0KCBpRm9ybWF0ICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN3aXRjaCAoIGZvcm1hdC5jaGFyQXQoIGlGb3JtYXQgKSApIHtcblx0XHRcdFx0XHRjYXNlIFwiZFwiOiBjYXNlIFwibVwiOiBjYXNlIFwieVwiOiBjYXNlIFwiQFwiOlxuXHRcdFx0XHRcdFx0Y2hhcnMgKz0gXCIwMTIzNDU2Nzg5XCI7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiRFwiOiBjYXNlIFwiTVwiOlxuXHRcdFx0XHRcdFx0cmV0dXJuIG51bGw7IC8vIEFjY2VwdCBhbnl0aGluZ1xuXHRcdFx0XHRcdGNhc2UgXCInXCI6XG5cdFx0XHRcdFx0XHRpZiAoIGxvb2tBaGVhZCggXCInXCIgKSApIHtcblx0XHRcdFx0XHRcdFx0Y2hhcnMgKz0gXCInXCI7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRsaXRlcmFsID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRjaGFycyArPSBmb3JtYXQuY2hhckF0KCBpRm9ybWF0ICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNoYXJzO1xuXHR9LFxuXG5cdC8qIEdldCBhIHNldHRpbmcgdmFsdWUsIGRlZmF1bHRpbmcgaWYgbmVjZXNzYXJ5LiAqL1xuXHRfZ2V0OiBmdW5jdGlvbiggaW5zdCwgbmFtZSApIHtcblx0XHRyZXR1cm4gaW5zdC5zZXR0aW5nc1sgbmFtZSBdICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0aW5zdC5zZXR0aW5nc1sgbmFtZSBdIDogdGhpcy5fZGVmYXVsdHNbIG5hbWUgXTtcblx0fSxcblxuXHQvKiBQYXJzZSBleGlzdGluZyBkYXRlIGFuZCBpbml0aWFsaXNlIGRhdGUgcGlja2VyLiAqL1xuXHRfc2V0RGF0ZUZyb21GaWVsZDogZnVuY3Rpb24oIGluc3QsIG5vRGVmYXVsdCApIHtcblx0XHRpZiAoIGluc3QuaW5wdXQudmFsKCkgPT09IGluc3QubGFzdFZhbCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgZGF0ZUZvcm1hdCA9IHRoaXMuX2dldCggaW5zdCwgXCJkYXRlRm9ybWF0XCIgKSxcblx0XHRcdGRhdGVzID0gaW5zdC5sYXN0VmFsID0gaW5zdC5pbnB1dCA/IGluc3QuaW5wdXQudmFsKCkgOiBudWxsLFxuXHRcdFx0ZGVmYXVsdERhdGUgPSB0aGlzLl9nZXREZWZhdWx0RGF0ZSggaW5zdCApLFxuXHRcdFx0ZGF0ZSA9IGRlZmF1bHREYXRlLFxuXHRcdFx0c2V0dGluZ3MgPSB0aGlzLl9nZXRGb3JtYXRDb25maWcoIGluc3QgKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRkYXRlID0gdGhpcy5wYXJzZURhdGUoIGRhdGVGb3JtYXQsIGRhdGVzLCBzZXR0aW5ncyApIHx8IGRlZmF1bHREYXRlO1xuXHRcdH0gY2F0Y2ggKCBldmVudCApIHtcblx0XHRcdGRhdGVzID0gKCBub0RlZmF1bHQgPyBcIlwiIDogZGF0ZXMgKTtcblx0XHR9XG5cdFx0aW5zdC5zZWxlY3RlZERheSA9IGRhdGUuZ2V0RGF0ZSgpO1xuXHRcdGluc3QuZHJhd01vbnRoID0gaW5zdC5zZWxlY3RlZE1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuXHRcdGluc3QuZHJhd1llYXIgPSBpbnN0LnNlbGVjdGVkWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcblx0XHRpbnN0LmN1cnJlbnREYXkgPSAoIGRhdGVzID8gZGF0ZS5nZXREYXRlKCkgOiAwICk7XG5cdFx0aW5zdC5jdXJyZW50TW9udGggPSAoIGRhdGVzID8gZGF0ZS5nZXRNb250aCgpIDogMCApO1xuXHRcdGluc3QuY3VycmVudFllYXIgPSAoIGRhdGVzID8gZGF0ZS5nZXRGdWxsWWVhcigpIDogMCApO1xuXHRcdHRoaXMuX2FkanVzdEluc3REYXRlKCBpbnN0ICk7XG5cdH0sXG5cblx0LyogUmV0cmlldmUgdGhlIGRlZmF1bHQgZGF0ZSBzaG93biBvbiBvcGVuaW5nLiAqL1xuXHRfZ2V0RGVmYXVsdERhdGU6IGZ1bmN0aW9uKCBpbnN0ICkge1xuXHRcdHJldHVybiB0aGlzLl9yZXN0cmljdE1pbk1heCggaW5zdCxcblx0XHRcdHRoaXMuX2RldGVybWluZURhdGUoIGluc3QsIHRoaXMuX2dldCggaW5zdCwgXCJkZWZhdWx0RGF0ZVwiICksIG5ldyBEYXRlKCkgKSApO1xuXHR9LFxuXG5cdC8qIEEgZGF0ZSBtYXkgYmUgc3BlY2lmaWVkIGFzIGFuIGV4YWN0IHZhbHVlIG9yIGEgcmVsYXRpdmUgb25lLiAqL1xuXHRfZGV0ZXJtaW5lRGF0ZTogZnVuY3Rpb24oIGluc3QsIGRhdGUsIGRlZmF1bHREYXRlICkge1xuXHRcdHZhciBvZmZzZXROdW1lcmljID0gZnVuY3Rpb24oIG9mZnNldCApIHtcblx0XHRcdFx0dmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0XHRkYXRlLnNldERhdGUoIGRhdGUuZ2V0RGF0ZSgpICsgb2Zmc2V0ICk7XG5cdFx0XHRcdHJldHVybiBkYXRlO1xuXHRcdFx0fSxcblx0XHRcdG9mZnNldFN0cmluZyA9IGZ1bmN0aW9uKCBvZmZzZXQgKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cmV0dXJuICQuZGF0ZXBpY2tlci5wYXJzZURhdGUoICQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcImRhdGVGb3JtYXRcIiApLFxuXHRcdFx0XHRcdFx0b2Zmc2V0LCAkLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyggaW5zdCApICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0Ly8gSWdub3JlXG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgZGF0ZSA9ICggb2Zmc2V0LnRvTG93ZXJDYXNlKCkubWF0Y2goIC9eYy8gKSA/XG5cdFx0XHRcdFx0JC5kYXRlcGlja2VyLl9nZXREYXRlKCBpbnN0ICkgOiBudWxsICkgfHwgbmV3IERhdGUoKSxcblx0XHRcdFx0XHR5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpLFxuXHRcdFx0XHRcdG1vbnRoID0gZGF0ZS5nZXRNb250aCgpLFxuXHRcdFx0XHRcdGRheSA9IGRhdGUuZ2V0RGF0ZSgpLFxuXHRcdFx0XHRcdHBhdHRlcm4gPSAvKFsrXFwtXT9bMC05XSspXFxzKihkfER8d3xXfG18TXx5fFkpPy9nLFxuXHRcdFx0XHRcdG1hdGNoZXMgPSBwYXR0ZXJuLmV4ZWMoIG9mZnNldCApO1xuXG5cdFx0XHRcdHdoaWxlICggbWF0Y2hlcyApIHtcblx0XHRcdFx0XHRzd2l0Y2ggKCBtYXRjaGVzWyAyIF0gfHwgXCJkXCIgKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiZFwiIDogY2FzZSBcIkRcIiA6XG5cdFx0XHRcdFx0XHRcdGRheSArPSBwYXJzZUludCggbWF0Y2hlc1sgMSBdLCAxMCApOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJ3XCIgOiBjYXNlIFwiV1wiIDpcblx0XHRcdFx0XHRcdFx0ZGF5ICs9IHBhcnNlSW50KCBtYXRjaGVzWyAxIF0sIDEwICkgKiA3OyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJtXCIgOiBjYXNlIFwiTVwiIDpcblx0XHRcdFx0XHRcdFx0bW9udGggKz0gcGFyc2VJbnQoIG1hdGNoZXNbIDEgXSwgMTAgKTtcblx0XHRcdFx0XHRcdFx0ZGF5ID0gTWF0aC5taW4oIGRheSwgJC5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aCggeWVhciwgbW9udGggKSApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJ5XCI6IGNhc2UgXCJZXCIgOlxuXHRcdFx0XHRcdFx0XHR5ZWFyICs9IHBhcnNlSW50KCBtYXRjaGVzWyAxIF0sIDEwICk7XG5cdFx0XHRcdFx0XHRcdGRheSA9IE1hdGgubWluKCBkYXksICQuZGF0ZXBpY2tlci5fZ2V0RGF5c0luTW9udGgoIHllYXIsIG1vbnRoICkgKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG1hdGNoZXMgPSBwYXR0ZXJuLmV4ZWMoIG9mZnNldCApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBuZXcgRGF0ZSggeWVhciwgbW9udGgsIGRheSApO1xuXHRcdFx0fSxcblx0XHRcdG5ld0RhdGUgPSAoIGRhdGUgPT0gbnVsbCB8fCBkYXRlID09PSBcIlwiID8gZGVmYXVsdERhdGUgOiAoIHR5cGVvZiBkYXRlID09PSBcInN0cmluZ1wiID8gb2Zmc2V0U3RyaW5nKCBkYXRlICkgOlxuXHRcdFx0XHQoIHR5cGVvZiBkYXRlID09PSBcIm51bWJlclwiID8gKCBpc05hTiggZGF0ZSApID8gZGVmYXVsdERhdGUgOiBvZmZzZXROdW1lcmljKCBkYXRlICkgKSA6IG5ldyBEYXRlKCBkYXRlLmdldFRpbWUoKSApICkgKSApO1xuXG5cdFx0bmV3RGF0ZSA9ICggbmV3RGF0ZSAmJiBuZXdEYXRlLnRvU3RyaW5nKCkgPT09IFwiSW52YWxpZCBEYXRlXCIgPyBkZWZhdWx0RGF0ZSA6IG5ld0RhdGUgKTtcblx0XHRpZiAoIG5ld0RhdGUgKSB7XG5cdFx0XHRuZXdEYXRlLnNldEhvdXJzKCAwICk7XG5cdFx0XHRuZXdEYXRlLnNldE1pbnV0ZXMoIDAgKTtcblx0XHRcdG5ld0RhdGUuc2V0U2Vjb25kcyggMCApO1xuXHRcdFx0bmV3RGF0ZS5zZXRNaWxsaXNlY29uZHMoIDAgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KCBuZXdEYXRlICk7XG5cdH0sXG5cblx0LyogSGFuZGxlIHN3aXRjaCB0by9mcm9tIGRheWxpZ2h0IHNhdmluZy5cblx0ICogSG91cnMgbWF5IGJlIG5vbi16ZXJvIG9uIGRheWxpZ2h0IHNhdmluZyBjdXQtb3Zlcjpcblx0ICogPiAxMiB3aGVuIG1pZG5pZ2h0IGNoYW5nZW92ZXIsIGJ1dCB0aGVuIGNhbm5vdCBnZW5lcmF0ZVxuXHQgKiBtaWRuaWdodCBkYXRldGltZSwgc28ganVtcCB0byAxQU0sIG90aGVyd2lzZSByZXNldC5cblx0ICogQHBhcmFtICBkYXRlICAoRGF0ZSkgdGhlIGRhdGUgdG8gY2hlY2tcblx0ICogQHJldHVybiAgKERhdGUpIHRoZSBjb3JyZWN0ZWQgZGF0ZVxuXHQgKi9cblx0X2RheWxpZ2h0U2F2aW5nQWRqdXN0OiBmdW5jdGlvbiggZGF0ZSApIHtcblx0XHRpZiAoICFkYXRlICkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGRhdGUuc2V0SG91cnMoIGRhdGUuZ2V0SG91cnMoKSA+IDEyID8gZGF0ZS5nZXRIb3VycygpICsgMiA6IDAgKTtcblx0XHRyZXR1cm4gZGF0ZTtcblx0fSxcblxuXHQvKiBTZXQgdGhlIGRhdGUocykgZGlyZWN0bHkuICovXG5cdF9zZXREYXRlOiBmdW5jdGlvbiggaW5zdCwgZGF0ZSwgbm9DaGFuZ2UgKSB7XG5cdFx0dmFyIGNsZWFyID0gIWRhdGUsXG5cdFx0XHRvcmlnTW9udGggPSBpbnN0LnNlbGVjdGVkTW9udGgsXG5cdFx0XHRvcmlnWWVhciA9IGluc3Quc2VsZWN0ZWRZZWFyLFxuXHRcdFx0bmV3RGF0ZSA9IHRoaXMuX3Jlc3RyaWN0TWluTWF4KCBpbnN0LCB0aGlzLl9kZXRlcm1pbmVEYXRlKCBpbnN0LCBkYXRlLCBuZXcgRGF0ZSgpICkgKTtcblxuXHRcdGluc3Quc2VsZWN0ZWREYXkgPSBpbnN0LmN1cnJlbnREYXkgPSBuZXdEYXRlLmdldERhdGUoKTtcblx0XHRpbnN0LmRyYXdNb250aCA9IGluc3Quc2VsZWN0ZWRNb250aCA9IGluc3QuY3VycmVudE1vbnRoID0gbmV3RGF0ZS5nZXRNb250aCgpO1xuXHRcdGluc3QuZHJhd1llYXIgPSBpbnN0LnNlbGVjdGVkWWVhciA9IGluc3QuY3VycmVudFllYXIgPSBuZXdEYXRlLmdldEZ1bGxZZWFyKCk7XG5cdFx0aWYgKCAoIG9yaWdNb250aCAhPT0gaW5zdC5zZWxlY3RlZE1vbnRoIHx8IG9yaWdZZWFyICE9PSBpbnN0LnNlbGVjdGVkWWVhciApICYmICFub0NoYW5nZSApIHtcblx0XHRcdHRoaXMuX25vdGlmeUNoYW5nZSggaW5zdCApO1xuXHRcdH1cblx0XHR0aGlzLl9hZGp1c3RJbnN0RGF0ZSggaW5zdCApO1xuXHRcdGlmICggaW5zdC5pbnB1dCApIHtcblx0XHRcdGluc3QuaW5wdXQudmFsKCBjbGVhciA/IFwiXCIgOiB0aGlzLl9mb3JtYXREYXRlKCBpbnN0ICkgKTtcblx0XHR9XG5cdH0sXG5cblx0LyogUmV0cmlldmUgdGhlIGRhdGUocykgZGlyZWN0bHkuICovXG5cdF9nZXREYXRlOiBmdW5jdGlvbiggaW5zdCApIHtcblx0XHR2YXIgc3RhcnREYXRlID0gKCAhaW5zdC5jdXJyZW50WWVhciB8fCAoIGluc3QuaW5wdXQgJiYgaW5zdC5pbnB1dC52YWwoKSA9PT0gXCJcIiApID8gbnVsbCA6XG5cdFx0XHR0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdCggbmV3IERhdGUoXG5cdFx0XHRpbnN0LmN1cnJlbnRZZWFyLCBpbnN0LmN1cnJlbnRNb250aCwgaW5zdC5jdXJyZW50RGF5ICkgKSApO1xuXHRcdFx0cmV0dXJuIHN0YXJ0RGF0ZTtcblx0fSxcblxuXHQvKiBBdHRhY2ggdGhlIG9ueHh4IGhhbmRsZXJzLiAgVGhlc2UgYXJlIGRlY2xhcmVkIHN0YXRpY2FsbHkgc29cblx0ICogdGhleSB3b3JrIHdpdGggc3RhdGljIGNvZGUgdHJhbnNmb3JtZXJzIGxpa2UgQ2FqYS5cblx0ICovXG5cdF9hdHRhY2hIYW5kbGVyczogZnVuY3Rpb24oIGluc3QgKSB7XG5cdFx0dmFyIHN0ZXBNb250aHMgPSB0aGlzLl9nZXQoIGluc3QsIFwic3RlcE1vbnRoc1wiICksXG5cdFx0XHRpZCA9IFwiI1wiICsgaW5zdC5pZC5yZXBsYWNlKCAvXFxcXFxcXFwvZywgXCJcXFxcXCIgKTtcblx0XHRpbnN0LmRwRGl2LmZpbmQoIFwiW2RhdGEtaGFuZGxlcl1cIiApLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaGFuZGxlciA9IHtcblx0XHRcdFx0cHJldjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0JC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKCBpZCwgLXN0ZXBNb250aHMsIFwiTVwiICk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG5leHQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSggaWQsICtzdGVwTW9udGhzLCBcIk1cIiApO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHQkLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRvZGF5OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHQkLmRhdGVwaWNrZXIuX2dvdG9Ub2RheSggaWQgKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0c2VsZWN0RGF5OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHQkLmRhdGVwaWNrZXIuX3NlbGVjdERheSggaWQsICt0aGlzLmdldEF0dHJpYnV0ZSggXCJkYXRhLW1vbnRoXCIgKSwgK3RoaXMuZ2V0QXR0cmlidXRlKCBcImRhdGEteWVhclwiICksIHRoaXMgKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNlbGVjdE1vbnRoOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHQkLmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhciggaWQsIHRoaXMsIFwiTVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRzZWxlY3RZZWFyOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHQkLmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhciggaWQsIHRoaXMsIFwiWVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0JCggdGhpcyApLm9uKCB0aGlzLmdldEF0dHJpYnV0ZSggXCJkYXRhLWV2ZW50XCIgKSwgaGFuZGxlclsgdGhpcy5nZXRBdHRyaWJ1dGUoIFwiZGF0YS1oYW5kbGVyXCIgKSBdICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdC8qIEdlbmVyYXRlIHRoZSBIVE1MIGZvciB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZGF0ZSBwaWNrZXIuICovXG5cdF9nZW5lcmF0ZUhUTUw6IGZ1bmN0aW9uKCBpbnN0ICkge1xuXHRcdHZhciBtYXhEcmF3LCBwcmV2VGV4dCwgcHJldiwgbmV4dFRleHQsIG5leHQsIGN1cnJlbnRUZXh0LCBnb3RvRGF0ZSxcblx0XHRcdGNvbnRyb2xzLCBidXR0b25QYW5lbCwgZmlyc3REYXksIHNob3dXZWVrLCBkYXlOYW1lcywgZGF5TmFtZXNNaW4sXG5cdFx0XHRtb250aE5hbWVzLCBtb250aE5hbWVzU2hvcnQsIGJlZm9yZVNob3dEYXksIHNob3dPdGhlck1vbnRocyxcblx0XHRcdHNlbGVjdE90aGVyTW9udGhzLCBkZWZhdWx0RGF0ZSwgaHRtbCwgZG93LCByb3csIGdyb3VwLCBjb2wsIHNlbGVjdGVkRGF0ZSxcblx0XHRcdGNvcm5lckNsYXNzLCBjYWxlbmRlciwgdGhlYWQsIGRheSwgZGF5c0luTW9udGgsIGxlYWREYXlzLCBjdXJSb3dzLCBudW1Sb3dzLFxuXHRcdFx0cHJpbnREYXRlLCBkUm93LCB0Ym9keSwgZGF5U2V0dGluZ3MsIG90aGVyTW9udGgsIHVuc2VsZWN0YWJsZSxcblx0XHRcdHRlbXBEYXRlID0gbmV3IERhdGUoKSxcblx0XHRcdHRvZGF5ID0gdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoXG5cdFx0XHRcdG5ldyBEYXRlKCB0ZW1wRGF0ZS5nZXRGdWxsWWVhcigpLCB0ZW1wRGF0ZS5nZXRNb250aCgpLCB0ZW1wRGF0ZS5nZXREYXRlKCkgKSApLCAvLyBjbGVhciB0aW1lXG5cdFx0XHRpc1JUTCA9IHRoaXMuX2dldCggaW5zdCwgXCJpc1JUTFwiICksXG5cdFx0XHRzaG93QnV0dG9uUGFuZWwgPSB0aGlzLl9nZXQoIGluc3QsIFwic2hvd0J1dHRvblBhbmVsXCIgKSxcblx0XHRcdGhpZGVJZk5vUHJldk5leHQgPSB0aGlzLl9nZXQoIGluc3QsIFwiaGlkZUlmTm9QcmV2TmV4dFwiICksXG5cdFx0XHRuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0ID0gdGhpcy5fZ2V0KCBpbnN0LCBcIm5hdmlnYXRpb25Bc0RhdGVGb3JtYXRcIiApLFxuXHRcdFx0bnVtTW9udGhzID0gdGhpcy5fZ2V0TnVtYmVyT2ZNb250aHMoIGluc3QgKSxcblx0XHRcdHNob3dDdXJyZW50QXRQb3MgPSB0aGlzLl9nZXQoIGluc3QsIFwic2hvd0N1cnJlbnRBdFBvc1wiICksXG5cdFx0XHRzdGVwTW9udGhzID0gdGhpcy5fZ2V0KCBpbnN0LCBcInN0ZXBNb250aHNcIiApLFxuXHRcdFx0aXNNdWx0aU1vbnRoID0gKCBudW1Nb250aHNbIDAgXSAhPT0gMSB8fCBudW1Nb250aHNbIDEgXSAhPT0gMSApLFxuXHRcdFx0Y3VycmVudERhdGUgPSB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdCggKCAhaW5zdC5jdXJyZW50RGF5ID8gbmV3IERhdGUoIDk5OTksIDksIDkgKSA6XG5cdFx0XHRcdG5ldyBEYXRlKCBpbnN0LmN1cnJlbnRZZWFyLCBpbnN0LmN1cnJlbnRNb250aCwgaW5zdC5jdXJyZW50RGF5ICkgKSApLFxuXHRcdFx0bWluRGF0ZSA9IHRoaXMuX2dldE1pbk1heERhdGUoIGluc3QsIFwibWluXCIgKSxcblx0XHRcdG1heERhdGUgPSB0aGlzLl9nZXRNaW5NYXhEYXRlKCBpbnN0LCBcIm1heFwiICksXG5cdFx0XHRkcmF3TW9udGggPSBpbnN0LmRyYXdNb250aCAtIHNob3dDdXJyZW50QXRQb3MsXG5cdFx0XHRkcmF3WWVhciA9IGluc3QuZHJhd1llYXI7XG5cblx0XHRpZiAoIGRyYXdNb250aCA8IDAgKSB7XG5cdFx0XHRkcmF3TW9udGggKz0gMTI7XG5cdFx0XHRkcmF3WWVhci0tO1xuXHRcdH1cblx0XHRpZiAoIG1heERhdGUgKSB7XG5cdFx0XHRtYXhEcmF3ID0gdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoIG5ldyBEYXRlKCBtYXhEYXRlLmdldEZ1bGxZZWFyKCksXG5cdFx0XHRcdG1heERhdGUuZ2V0TW9udGgoKSAtICggbnVtTW9udGhzWyAwIF0gKiBudW1Nb250aHNbIDEgXSApICsgMSwgbWF4RGF0ZS5nZXREYXRlKCkgKSApO1xuXHRcdFx0bWF4RHJhdyA9ICggbWluRGF0ZSAmJiBtYXhEcmF3IDwgbWluRGF0ZSA/IG1pbkRhdGUgOiBtYXhEcmF3ICk7XG5cdFx0XHR3aGlsZSAoIHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KCBuZXcgRGF0ZSggZHJhd1llYXIsIGRyYXdNb250aCwgMSApICkgPiBtYXhEcmF3ICkge1xuXHRcdFx0XHRkcmF3TW9udGgtLTtcblx0XHRcdFx0aWYgKCBkcmF3TW9udGggPCAwICkge1xuXHRcdFx0XHRcdGRyYXdNb250aCA9IDExO1xuXHRcdFx0XHRcdGRyYXdZZWFyLS07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aW5zdC5kcmF3TW9udGggPSBkcmF3TW9udGg7XG5cdFx0aW5zdC5kcmF3WWVhciA9IGRyYXdZZWFyO1xuXG5cdFx0cHJldlRleHQgPSB0aGlzLl9nZXQoIGluc3QsIFwicHJldlRleHRcIiApO1xuXHRcdHByZXZUZXh0ID0gKCAhbmF2aWdhdGlvbkFzRGF0ZUZvcm1hdCA/IHByZXZUZXh0IDogdGhpcy5mb3JtYXREYXRlKCBwcmV2VGV4dCxcblx0XHRcdHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KCBuZXcgRGF0ZSggZHJhd1llYXIsIGRyYXdNb250aCAtIHN0ZXBNb250aHMsIDEgKSApLFxuXHRcdFx0dGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKCBpbnN0ICkgKSApO1xuXG5cdFx0cHJldiA9ICggdGhpcy5fY2FuQWRqdXN0TW9udGgoIGluc3QsIC0xLCBkcmF3WWVhciwgZHJhd01vbnRoICkgP1xuXHRcdFx0XCI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0ncHJldicgZGF0YS1ldmVudD0nY2xpY2snXCIgK1xuXHRcdFx0XCIgdGl0bGU9J1wiICsgcHJldlRleHQgKyBcIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtXCIgKyAoIGlzUlRMID8gXCJlXCIgOiBcIndcIiApICsgXCInPlwiICsgcHJldlRleHQgKyBcIjwvc3Bhbj48L2E+XCIgOlxuXHRcdFx0KCBoaWRlSWZOb1ByZXZOZXh0ID8gXCJcIiA6IFwiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWRpc2FibGVkJyB0aXRsZT0nXCIgKyBwcmV2VGV4dCArIFwiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS1cIiArICggaXNSVEwgPyBcImVcIiA6IFwid1wiICkgKyBcIic+XCIgKyBwcmV2VGV4dCArIFwiPC9zcGFuPjwvYT5cIiApICk7XG5cblx0XHRuZXh0VGV4dCA9IHRoaXMuX2dldCggaW5zdCwgXCJuZXh0VGV4dFwiICk7XG5cdFx0bmV4dFRleHQgPSAoICFuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0ID8gbmV4dFRleHQgOiB0aGlzLmZvcm1hdERhdGUoIG5leHRUZXh0LFxuXHRcdFx0dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoIG5ldyBEYXRlKCBkcmF3WWVhciwgZHJhd01vbnRoICsgc3RlcE1vbnRocywgMSApICksXG5cdFx0XHR0aGlzLl9nZXRGb3JtYXRDb25maWcoIGluc3QgKSApICk7XG5cblx0XHRuZXh0ID0gKCB0aGlzLl9jYW5BZGp1c3RNb250aCggaW5zdCwgKzEsIGRyYXdZZWFyLCBkcmF3TW9udGggKSA/XG5cdFx0XHRcIjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSduZXh0JyBkYXRhLWV2ZW50PSdjbGljaydcIiArXG5cdFx0XHRcIiB0aXRsZT0nXCIgKyBuZXh0VGV4dCArIFwiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS1cIiArICggaXNSVEwgPyBcIndcIiA6IFwiZVwiICkgKyBcIic+XCIgKyBuZXh0VGV4dCArIFwiPC9zcGFuPjwvYT5cIiA6XG5cdFx0XHQoIGhpZGVJZk5vUHJldk5leHQgPyBcIlwiIDogXCI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1uZXh0IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtZGlzYWJsZWQnIHRpdGxlPSdcIiArIG5leHRUZXh0ICsgXCInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLVwiICsgKCBpc1JUTCA/IFwid1wiIDogXCJlXCIgKSArIFwiJz5cIiArIG5leHRUZXh0ICsgXCI8L3NwYW4+PC9hPlwiICkgKTtcblxuXHRcdGN1cnJlbnRUZXh0ID0gdGhpcy5fZ2V0KCBpbnN0LCBcImN1cnJlbnRUZXh0XCIgKTtcblx0XHRnb3RvRGF0ZSA9ICggdGhpcy5fZ2V0KCBpbnN0LCBcImdvdG9DdXJyZW50XCIgKSAmJiBpbnN0LmN1cnJlbnREYXkgPyBjdXJyZW50RGF0ZSA6IHRvZGF5ICk7XG5cdFx0Y3VycmVudFRleHQgPSAoICFuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0ID8gY3VycmVudFRleHQgOlxuXHRcdFx0dGhpcy5mb3JtYXREYXRlKCBjdXJyZW50VGV4dCwgZ290b0RhdGUsIHRoaXMuX2dldEZvcm1hdENvbmZpZyggaW5zdCApICkgKTtcblxuXHRcdGNvbnRyb2xzID0gKCAhaW5zdC5pbmxpbmUgPyBcIjxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz0ndWktZGF0ZXBpY2tlci1jbG9zZSB1aS1zdGF0ZS1kZWZhdWx0IHVpLXByaW9yaXR5LXByaW1hcnkgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSdoaWRlJyBkYXRhLWV2ZW50PSdjbGljayc+XCIgK1xuXHRcdFx0dGhpcy5fZ2V0KCBpbnN0LCBcImNsb3NlVGV4dFwiICkgKyBcIjwvYnV0dG9uPlwiIDogXCJcIiApO1xuXG5cdFx0YnV0dG9uUGFuZWwgPSAoIHNob3dCdXR0b25QYW5lbCApID8gXCI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgdWktd2lkZ2V0LWNvbnRlbnQnPlwiICsgKCBpc1JUTCA/IGNvbnRyb2xzIDogXCJcIiApICtcblx0XHRcdCggdGhpcy5faXNJblJhbmdlKCBpbnN0LCBnb3RvRGF0ZSApID8gXCI8YnV0dG9uIHR5cGU9J2J1dHRvbicgY2xhc3M9J3VpLWRhdGVwaWNrZXItY3VycmVudCB1aS1zdGF0ZS1kZWZhdWx0IHVpLXByaW9yaXR5LXNlY29uZGFyeSB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J3RvZGF5JyBkYXRhLWV2ZW50PSdjbGljaydcIiArXG5cdFx0XHRcIj5cIiArIGN1cnJlbnRUZXh0ICsgXCI8L2J1dHRvbj5cIiA6IFwiXCIgKSArICggaXNSVEwgPyBcIlwiIDogY29udHJvbHMgKSArIFwiPC9kaXY+XCIgOiBcIlwiO1xuXG5cdFx0Zmlyc3REYXkgPSBwYXJzZUludCggdGhpcy5fZ2V0KCBpbnN0LCBcImZpcnN0RGF5XCIgKSwgMTAgKTtcblx0XHRmaXJzdERheSA9ICggaXNOYU4oIGZpcnN0RGF5ICkgPyAwIDogZmlyc3REYXkgKTtcblxuXHRcdHNob3dXZWVrID0gdGhpcy5fZ2V0KCBpbnN0LCBcInNob3dXZWVrXCIgKTtcblx0XHRkYXlOYW1lcyA9IHRoaXMuX2dldCggaW5zdCwgXCJkYXlOYW1lc1wiICk7XG5cdFx0ZGF5TmFtZXNNaW4gPSB0aGlzLl9nZXQoIGluc3QsIFwiZGF5TmFtZXNNaW5cIiApO1xuXHRcdG1vbnRoTmFtZXMgPSB0aGlzLl9nZXQoIGluc3QsIFwibW9udGhOYW1lc1wiICk7XG5cdFx0bW9udGhOYW1lc1Nob3J0ID0gdGhpcy5fZ2V0KCBpbnN0LCBcIm1vbnRoTmFtZXNTaG9ydFwiICk7XG5cdFx0YmVmb3JlU2hvd0RheSA9IHRoaXMuX2dldCggaW5zdCwgXCJiZWZvcmVTaG93RGF5XCIgKTtcblx0XHRzaG93T3RoZXJNb250aHMgPSB0aGlzLl9nZXQoIGluc3QsIFwic2hvd090aGVyTW9udGhzXCIgKTtcblx0XHRzZWxlY3RPdGhlck1vbnRocyA9IHRoaXMuX2dldCggaW5zdCwgXCJzZWxlY3RPdGhlck1vbnRoc1wiICk7XG5cdFx0ZGVmYXVsdERhdGUgPSB0aGlzLl9nZXREZWZhdWx0RGF0ZSggaW5zdCApO1xuXHRcdGh0bWwgPSBcIlwiO1xuXG5cdFx0Zm9yICggcm93ID0gMDsgcm93IDwgbnVtTW9udGhzWyAwIF07IHJvdysrICkge1xuXHRcdFx0Z3JvdXAgPSBcIlwiO1xuXHRcdFx0dGhpcy5tYXhSb3dzID0gNDtcblx0XHRcdGZvciAoIGNvbCA9IDA7IGNvbCA8IG51bU1vbnRoc1sgMSBdOyBjb2wrKyApIHtcblx0XHRcdFx0c2VsZWN0ZWREYXRlID0gdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoIG5ldyBEYXRlKCBkcmF3WWVhciwgZHJhd01vbnRoLCBpbnN0LnNlbGVjdGVkRGF5ICkgKTtcblx0XHRcdFx0Y29ybmVyQ2xhc3MgPSBcIiB1aS1jb3JuZXItYWxsXCI7XG5cdFx0XHRcdGNhbGVuZGVyID0gXCJcIjtcblx0XHRcdFx0aWYgKCBpc011bHRpTW9udGggKSB7XG5cdFx0XHRcdFx0Y2FsZW5kZXIgKz0gXCI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWdyb3VwXCI7XG5cdFx0XHRcdFx0aWYgKCBudW1Nb250aHNbIDEgXSA+IDEgKSB7XG5cdFx0XHRcdFx0XHRzd2l0Y2ggKCBjb2wgKSB7XG5cdFx0XHRcdFx0XHRcdGNhc2UgMDogY2FsZW5kZXIgKz0gXCIgdWktZGF0ZXBpY2tlci1ncm91cC1maXJzdFwiO1xuXHRcdFx0XHRcdFx0XHRcdGNvcm5lckNsYXNzID0gXCIgdWktY29ybmVyLVwiICsgKCBpc1JUTCA/IFwicmlnaHRcIiA6IFwibGVmdFwiICk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlIG51bU1vbnRoc1sgMSBdIC0gMTogY2FsZW5kZXIgKz0gXCIgdWktZGF0ZXBpY2tlci1ncm91cC1sYXN0XCI7XG5cdFx0XHRcdFx0XHRcdFx0Y29ybmVyQ2xhc3MgPSBcIiB1aS1jb3JuZXItXCIgKyAoIGlzUlRMID8gXCJsZWZ0XCIgOiBcInJpZ2h0XCIgKTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRcdGRlZmF1bHQ6IGNhbGVuZGVyICs9IFwiIHVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlXCI7IGNvcm5lckNsYXNzID0gXCJcIjsgYnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhbGVuZGVyICs9IFwiJz5cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjYWxlbmRlciArPSBcIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItaGVhZGVyIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4XCIgKyBjb3JuZXJDbGFzcyArIFwiJz5cIiArXG5cdFx0XHRcdFx0KCAvYWxsfGxlZnQvLnRlc3QoIGNvcm5lckNsYXNzICkgJiYgcm93ID09PSAwID8gKCBpc1JUTCA/IG5leHQgOiBwcmV2ICkgOiBcIlwiICkgK1xuXHRcdFx0XHRcdCggL2FsbHxyaWdodC8udGVzdCggY29ybmVyQ2xhc3MgKSAmJiByb3cgPT09IDAgPyAoIGlzUlRMID8gcHJldiA6IG5leHQgKSA6IFwiXCIgKSArXG5cdFx0XHRcdFx0dGhpcy5fZ2VuZXJhdGVNb250aFllYXJIZWFkZXIoIGluc3QsIGRyYXdNb250aCwgZHJhd1llYXIsIG1pbkRhdGUsIG1heERhdGUsXG5cdFx0XHRcdFx0cm93ID4gMCB8fCBjb2wgPiAwLCBtb250aE5hbWVzLCBtb250aE5hbWVzU2hvcnQgKSArIC8vIGRyYXcgbW9udGggaGVhZGVyc1xuXHRcdFx0XHRcdFwiPC9kaXY+PHRhYmxlIGNsYXNzPSd1aS1kYXRlcGlja2VyLWNhbGVuZGFyJz48dGhlYWQ+XCIgK1xuXHRcdFx0XHRcdFwiPHRyPlwiO1xuXHRcdFx0XHR0aGVhZCA9ICggc2hvd1dlZWsgPyBcIjx0aCBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWNvbCc+XCIgKyB0aGlzLl9nZXQoIGluc3QsIFwid2Vla0hlYWRlclwiICkgKyBcIjwvdGg+XCIgOiBcIlwiICk7XG5cdFx0XHRcdGZvciAoIGRvdyA9IDA7IGRvdyA8IDc7IGRvdysrICkgeyAvLyBkYXlzIG9mIHRoZSB3ZWVrXG5cdFx0XHRcdFx0ZGF5ID0gKCBkb3cgKyBmaXJzdERheSApICUgNztcblx0XHRcdFx0XHR0aGVhZCArPSBcIjx0aCBzY29wZT0nY29sJ1wiICsgKCAoIGRvdyArIGZpcnN0RGF5ICsgNiApICUgNyA+PSA1ID8gXCIgY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1lbmQnXCIgOiBcIlwiICkgKyBcIj5cIiArXG5cdFx0XHRcdFx0XHRcIjxzcGFuIHRpdGxlPSdcIiArIGRheU5hbWVzWyBkYXkgXSArIFwiJz5cIiArIGRheU5hbWVzTWluWyBkYXkgXSArIFwiPC9zcGFuPjwvdGg+XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FsZW5kZXIgKz0gdGhlYWQgKyBcIjwvdHI+PC90aGVhZD48dGJvZHk+XCI7XG5cdFx0XHRcdGRheXNJbk1vbnRoID0gdGhpcy5fZ2V0RGF5c0luTW9udGgoIGRyYXdZZWFyLCBkcmF3TW9udGggKTtcblx0XHRcdFx0aWYgKCBkcmF3WWVhciA9PT0gaW5zdC5zZWxlY3RlZFllYXIgJiYgZHJhd01vbnRoID09PSBpbnN0LnNlbGVjdGVkTW9udGggKSB7XG5cdFx0XHRcdFx0aW5zdC5zZWxlY3RlZERheSA9IE1hdGgubWluKCBpbnN0LnNlbGVjdGVkRGF5LCBkYXlzSW5Nb250aCApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxlYWREYXlzID0gKCB0aGlzLl9nZXRGaXJzdERheU9mTW9udGgoIGRyYXdZZWFyLCBkcmF3TW9udGggKSAtIGZpcnN0RGF5ICsgNyApICUgNztcblx0XHRcdFx0Y3VyUm93cyA9IE1hdGguY2VpbCggKCBsZWFkRGF5cyArIGRheXNJbk1vbnRoICkgLyA3ICk7IC8vIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIHJvd3MgdG8gZ2VuZXJhdGVcblx0XHRcdFx0bnVtUm93cyA9ICggaXNNdWx0aU1vbnRoID8gdGhpcy5tYXhSb3dzID4gY3VyUm93cyA/IHRoaXMubWF4Um93cyA6IGN1clJvd3MgOiBjdXJSb3dzICk7IC8vSWYgbXVsdGlwbGUgbW9udGhzLCB1c2UgdGhlIGhpZ2hlciBudW1iZXIgb2Ygcm93cyAoc2VlICM3MDQzKVxuXHRcdFx0XHR0aGlzLm1heFJvd3MgPSBudW1Sb3dzO1xuXHRcdFx0XHRwcmludERhdGUgPSB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdCggbmV3IERhdGUoIGRyYXdZZWFyLCBkcmF3TW9udGgsIDEgLSBsZWFkRGF5cyApICk7XG5cdFx0XHRcdGZvciAoIGRSb3cgPSAwOyBkUm93IDwgbnVtUm93czsgZFJvdysrICkgeyAvLyBjcmVhdGUgZGF0ZSBwaWNrZXIgcm93c1xuXHRcdFx0XHRcdGNhbGVuZGVyICs9IFwiPHRyPlwiO1xuXHRcdFx0XHRcdHRib2R5ID0gKCAhc2hvd1dlZWsgPyBcIlwiIDogXCI8dGQgY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1jb2wnPlwiICtcblx0XHRcdFx0XHRcdHRoaXMuX2dldCggaW5zdCwgXCJjYWxjdWxhdGVXZWVrXCIgKSggcHJpbnREYXRlICkgKyBcIjwvdGQ+XCIgKTtcblx0XHRcdFx0XHRmb3IgKCBkb3cgPSAwOyBkb3cgPCA3OyBkb3crKyApIHsgLy8gY3JlYXRlIGRhdGUgcGlja2VyIGRheXNcblx0XHRcdFx0XHRcdGRheVNldHRpbmdzID0gKCBiZWZvcmVTaG93RGF5ID9cblx0XHRcdFx0XHRcdFx0YmVmb3JlU2hvd0RheS5hcHBseSggKCBpbnN0LmlucHV0ID8gaW5zdC5pbnB1dFsgMCBdIDogbnVsbCApLCBbIHByaW50RGF0ZSBdICkgOiBbIHRydWUsIFwiXCIgXSApO1xuXHRcdFx0XHRcdFx0b3RoZXJNb250aCA9ICggcHJpbnREYXRlLmdldE1vbnRoKCkgIT09IGRyYXdNb250aCApO1xuXHRcdFx0XHRcdFx0dW5zZWxlY3RhYmxlID0gKCBvdGhlck1vbnRoICYmICFzZWxlY3RPdGhlck1vbnRocyApIHx8ICFkYXlTZXR0aW5nc1sgMCBdIHx8XG5cdFx0XHRcdFx0XHRcdCggbWluRGF0ZSAmJiBwcmludERhdGUgPCBtaW5EYXRlICkgfHwgKCBtYXhEYXRlICYmIHByaW50RGF0ZSA+IG1heERhdGUgKTtcblx0XHRcdFx0XHRcdHRib2R5ICs9IFwiPHRkIGNsYXNzPSdcIiArXG5cdFx0XHRcdFx0XHRcdCggKCBkb3cgKyBmaXJzdERheSArIDYgKSAlIDcgPj0gNSA/IFwiIHVpLWRhdGVwaWNrZXItd2Vlay1lbmRcIiA6IFwiXCIgKSArIC8vIGhpZ2hsaWdodCB3ZWVrZW5kc1xuXHRcdFx0XHRcdFx0XHQoIG90aGVyTW9udGggPyBcIiB1aS1kYXRlcGlja2VyLW90aGVyLW1vbnRoXCIgOiBcIlwiICkgKyAvLyBoaWdobGlnaHQgZGF5cyBmcm9tIG90aGVyIG1vbnRoc1xuXHRcdFx0XHRcdFx0XHQoICggcHJpbnREYXRlLmdldFRpbWUoKSA9PT0gc2VsZWN0ZWREYXRlLmdldFRpbWUoKSAmJiBkcmF3TW9udGggPT09IGluc3Quc2VsZWN0ZWRNb250aCAmJiBpbnN0Ll9rZXlFdmVudCApIHx8IC8vIHVzZXIgcHJlc3NlZCBrZXlcblx0XHRcdFx0XHRcdFx0KCBkZWZhdWx0RGF0ZS5nZXRUaW1lKCkgPT09IHByaW50RGF0ZS5nZXRUaW1lKCkgJiYgZGVmYXVsdERhdGUuZ2V0VGltZSgpID09PSBzZWxlY3RlZERhdGUuZ2V0VGltZSgpICkgP1xuXG5cdFx0XHRcdFx0XHRcdC8vIG9yIGRlZmF1bHREYXRlIGlzIGN1cnJlbnQgcHJpbnRlZERhdGUgYW5kIGRlZmF1bHREYXRlIGlzIHNlbGVjdGVkRGF0ZVxuXHRcdFx0XHRcdFx0XHRcIiBcIiArIHRoaXMuX2RheU92ZXJDbGFzcyA6IFwiXCIgKSArIC8vIGhpZ2hsaWdodCBzZWxlY3RlZCBkYXlcblx0XHRcdFx0XHRcdFx0KCB1bnNlbGVjdGFibGUgPyBcIiBcIiArIHRoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzICsgXCIgdWktc3RhdGUtZGlzYWJsZWRcIiA6IFwiXCIgKSArICAvLyBoaWdobGlnaHQgdW5zZWxlY3RhYmxlIGRheXNcblx0XHRcdFx0XHRcdFx0KCBvdGhlck1vbnRoICYmICFzaG93T3RoZXJNb250aHMgPyBcIlwiIDogXCIgXCIgKyBkYXlTZXR0aW5nc1sgMSBdICsgLy8gaGlnaGxpZ2h0IGN1c3RvbSBkYXRlc1xuXHRcdFx0XHRcdFx0XHQoIHByaW50RGF0ZS5nZXRUaW1lKCkgPT09IGN1cnJlbnREYXRlLmdldFRpbWUoKSA/IFwiIFwiICsgdGhpcy5fY3VycmVudENsYXNzIDogXCJcIiApICsgLy8gaGlnaGxpZ2h0IHNlbGVjdGVkIGRheVxuXHRcdFx0XHRcdFx0XHQoIHByaW50RGF0ZS5nZXRUaW1lKCkgPT09IHRvZGF5LmdldFRpbWUoKSA/IFwiIHVpLWRhdGVwaWNrZXItdG9kYXlcIiA6IFwiXCIgKSApICsgXCInXCIgKyAvLyBoaWdobGlnaHQgdG9kYXkgKGlmIGRpZmZlcmVudClcblx0XHRcdFx0XHRcdFx0KCAoICFvdGhlck1vbnRoIHx8IHNob3dPdGhlck1vbnRocyApICYmIGRheVNldHRpbmdzWyAyIF0gPyBcIiB0aXRsZT0nXCIgKyBkYXlTZXR0aW5nc1sgMiBdLnJlcGxhY2UoIC8nL2csIFwiJiMzOTtcIiApICsgXCInXCIgOiBcIlwiICkgKyAvLyBjZWxsIHRpdGxlXG5cdFx0XHRcdFx0XHRcdCggdW5zZWxlY3RhYmxlID8gXCJcIiA6IFwiIGRhdGEtaGFuZGxlcj0nc2VsZWN0RGF5JyBkYXRhLWV2ZW50PSdjbGljaycgZGF0YS1tb250aD0nXCIgKyBwcmludERhdGUuZ2V0TW9udGgoKSArIFwiJyBkYXRhLXllYXI9J1wiICsgcHJpbnREYXRlLmdldEZ1bGxZZWFyKCkgKyBcIidcIiApICsgXCI+XCIgKyAvLyBhY3Rpb25zXG5cdFx0XHRcdFx0XHRcdCggb3RoZXJNb250aCAmJiAhc2hvd090aGVyTW9udGhzID8gXCImI3hhMDtcIiA6IC8vIGRpc3BsYXkgZm9yIG90aGVyIG1vbnRoc1xuXHRcdFx0XHRcdFx0XHQoIHVuc2VsZWN0YWJsZSA/IFwiPHNwYW4gY2xhc3M9J3VpLXN0YXRlLWRlZmF1bHQnPlwiICsgcHJpbnREYXRlLmdldERhdGUoKSArIFwiPC9zcGFuPlwiIDogXCI8YSBjbGFzcz0ndWktc3RhdGUtZGVmYXVsdFwiICtcblx0XHRcdFx0XHRcdFx0KCBwcmludERhdGUuZ2V0VGltZSgpID09PSB0b2RheS5nZXRUaW1lKCkgPyBcIiB1aS1zdGF0ZS1oaWdobGlnaHRcIiA6IFwiXCIgKSArXG5cdFx0XHRcdFx0XHRcdCggcHJpbnREYXRlLmdldFRpbWUoKSA9PT0gY3VycmVudERhdGUuZ2V0VGltZSgpID8gXCIgdWktc3RhdGUtYWN0aXZlXCIgOiBcIlwiICkgKyAvLyBoaWdobGlnaHQgc2VsZWN0ZWQgZGF5XG5cdFx0XHRcdFx0XHRcdCggb3RoZXJNb250aCA/IFwiIHVpLXByaW9yaXR5LXNlY29uZGFyeVwiIDogXCJcIiApICsgLy8gZGlzdGluZ3Vpc2ggZGF0ZXMgZnJvbSBvdGhlciBtb250aHNcblx0XHRcdFx0XHRcdFx0XCInIGhyZWY9JyMnPlwiICsgcHJpbnREYXRlLmdldERhdGUoKSArIFwiPC9hPlwiICkgKSArIFwiPC90ZD5cIjsgLy8gZGlzcGxheSBzZWxlY3RhYmxlIGRhdGVcblx0XHRcdFx0XHRcdHByaW50RGF0ZS5zZXREYXRlKCBwcmludERhdGUuZ2V0RGF0ZSgpICsgMSApO1xuXHRcdFx0XHRcdFx0cHJpbnREYXRlID0gdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoIHByaW50RGF0ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYWxlbmRlciArPSB0Ym9keSArIFwiPC90cj5cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRkcmF3TW9udGgrKztcblx0XHRcdFx0aWYgKCBkcmF3TW9udGggPiAxMSApIHtcblx0XHRcdFx0XHRkcmF3TW9udGggPSAwO1xuXHRcdFx0XHRcdGRyYXdZZWFyKys7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FsZW5kZXIgKz0gXCI8L3Rib2R5PjwvdGFibGU+XCIgKyAoIGlzTXVsdGlNb250aCA/IFwiPC9kaXY+XCIgK1xuXHRcdFx0XHRcdFx0XHQoICggbnVtTW9udGhzWyAwIF0gPiAwICYmIGNvbCA9PT0gbnVtTW9udGhzWyAxIF0gLSAxICkgPyBcIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItcm93LWJyZWFrJz48L2Rpdj5cIiA6IFwiXCIgKSA6IFwiXCIgKTtcblx0XHRcdFx0Z3JvdXAgKz0gY2FsZW5kZXI7XG5cdFx0XHR9XG5cdFx0XHRodG1sICs9IGdyb3VwO1xuXHRcdH1cblx0XHRodG1sICs9IGJ1dHRvblBhbmVsO1xuXHRcdGluc3QuX2tleUV2ZW50ID0gZmFsc2U7XG5cdFx0cmV0dXJuIGh0bWw7XG5cdH0sXG5cblx0LyogR2VuZXJhdGUgdGhlIG1vbnRoIGFuZCB5ZWFyIGhlYWRlci4gKi9cblx0X2dlbmVyYXRlTW9udGhZZWFySGVhZGVyOiBmdW5jdGlvbiggaW5zdCwgZHJhd01vbnRoLCBkcmF3WWVhciwgbWluRGF0ZSwgbWF4RGF0ZSxcblx0XHRcdHNlY29uZGFyeSwgbW9udGhOYW1lcywgbW9udGhOYW1lc1Nob3J0ICkge1xuXG5cdFx0dmFyIGluTWluWWVhciwgaW5NYXhZZWFyLCBtb250aCwgeWVhcnMsIHRoaXNZZWFyLCBkZXRlcm1pbmVZZWFyLCB5ZWFyLCBlbmRZZWFyLFxuXHRcdFx0Y2hhbmdlTW9udGggPSB0aGlzLl9nZXQoIGluc3QsIFwiY2hhbmdlTW9udGhcIiApLFxuXHRcdFx0Y2hhbmdlWWVhciA9IHRoaXMuX2dldCggaW5zdCwgXCJjaGFuZ2VZZWFyXCIgKSxcblx0XHRcdHNob3dNb250aEFmdGVyWWVhciA9IHRoaXMuX2dldCggaW5zdCwgXCJzaG93TW9udGhBZnRlclllYXJcIiApLFxuXHRcdFx0aHRtbCA9IFwiPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci10aXRsZSc+XCIsXG5cdFx0XHRtb250aEh0bWwgPSBcIlwiO1xuXG5cdFx0Ly8gTW9udGggc2VsZWN0aW9uXG5cdFx0aWYgKCBzZWNvbmRhcnkgfHwgIWNoYW5nZU1vbnRoICkge1xuXHRcdFx0bW9udGhIdG1sICs9IFwiPHNwYW4gY2xhc3M9J3VpLWRhdGVwaWNrZXItbW9udGgnPlwiICsgbW9udGhOYW1lc1sgZHJhd01vbnRoIF0gKyBcIjwvc3Bhbj5cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aW5NaW5ZZWFyID0gKCBtaW5EYXRlICYmIG1pbkRhdGUuZ2V0RnVsbFllYXIoKSA9PT0gZHJhd1llYXIgKTtcblx0XHRcdGluTWF4WWVhciA9ICggbWF4RGF0ZSAmJiBtYXhEYXRlLmdldEZ1bGxZZWFyKCkgPT09IGRyYXdZZWFyICk7XG5cdFx0XHRtb250aEh0bWwgKz0gXCI8c2VsZWN0IGNsYXNzPSd1aS1kYXRlcGlja2VyLW1vbnRoJyBkYXRhLWhhbmRsZXI9J3NlbGVjdE1vbnRoJyBkYXRhLWV2ZW50PSdjaGFuZ2UnPlwiO1xuXHRcdFx0Zm9yICggbW9udGggPSAwOyBtb250aCA8IDEyOyBtb250aCsrICkge1xuXHRcdFx0XHRpZiAoICggIWluTWluWWVhciB8fCBtb250aCA+PSBtaW5EYXRlLmdldE1vbnRoKCkgKSAmJiAoICFpbk1heFllYXIgfHwgbW9udGggPD0gbWF4RGF0ZS5nZXRNb250aCgpICkgKSB7XG5cdFx0XHRcdFx0bW9udGhIdG1sICs9IFwiPG9wdGlvbiB2YWx1ZT0nXCIgKyBtb250aCArIFwiJ1wiICtcblx0XHRcdFx0XHRcdCggbW9udGggPT09IGRyYXdNb250aCA/IFwiIHNlbGVjdGVkPSdzZWxlY3RlZCdcIiA6IFwiXCIgKSArXG5cdFx0XHRcdFx0XHRcIj5cIiArIG1vbnRoTmFtZXNTaG9ydFsgbW9udGggXSArIFwiPC9vcHRpb24+XCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG1vbnRoSHRtbCArPSBcIjwvc2VsZWN0PlwiO1xuXHRcdH1cblxuXHRcdGlmICggIXNob3dNb250aEFmdGVyWWVhciApIHtcblx0XHRcdGh0bWwgKz0gbW9udGhIdG1sICsgKCBzZWNvbmRhcnkgfHwgISggY2hhbmdlTW9udGggJiYgY2hhbmdlWWVhciApID8gXCImI3hhMDtcIiA6IFwiXCIgKTtcblx0XHR9XG5cblx0XHQvLyBZZWFyIHNlbGVjdGlvblxuXHRcdGlmICggIWluc3QueWVhcnNodG1sICkge1xuXHRcdFx0aW5zdC55ZWFyc2h0bWwgPSBcIlwiO1xuXHRcdFx0aWYgKCBzZWNvbmRhcnkgfHwgIWNoYW5nZVllYXIgKSB7XG5cdFx0XHRcdGh0bWwgKz0gXCI8c3BhbiBjbGFzcz0ndWktZGF0ZXBpY2tlci15ZWFyJz5cIiArIGRyYXdZZWFyICsgXCI8L3NwYW4+XCI7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIGRldGVybWluZSByYW5nZSBvZiB5ZWFycyB0byBkaXNwbGF5XG5cdFx0XHRcdHllYXJzID0gdGhpcy5fZ2V0KCBpbnN0LCBcInllYXJSYW5nZVwiICkuc3BsaXQoIFwiOlwiICk7XG5cdFx0XHRcdHRoaXNZZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuXHRcdFx0XHRkZXRlcm1pbmVZZWFyID0gZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHZhciB5ZWFyID0gKCB2YWx1ZS5tYXRjaCggL2NbK1xcLV0uKi8gKSA/IGRyYXdZZWFyICsgcGFyc2VJbnQoIHZhbHVlLnN1YnN0cmluZyggMSApLCAxMCApIDpcblx0XHRcdFx0XHRcdCggdmFsdWUubWF0Y2goIC9bK1xcLV0uKi8gKSA/IHRoaXNZZWFyICsgcGFyc2VJbnQoIHZhbHVlLCAxMCApIDpcblx0XHRcdFx0XHRcdHBhcnNlSW50KCB2YWx1ZSwgMTAgKSApICk7XG5cdFx0XHRcdFx0cmV0dXJuICggaXNOYU4oIHllYXIgKSA/IHRoaXNZZWFyIDogeWVhciApO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHR5ZWFyID0gZGV0ZXJtaW5lWWVhciggeWVhcnNbIDAgXSApO1xuXHRcdFx0XHRlbmRZZWFyID0gTWF0aC5tYXgoIHllYXIsIGRldGVybWluZVllYXIoIHllYXJzWyAxIF0gfHwgXCJcIiApICk7XG5cdFx0XHRcdHllYXIgPSAoIG1pbkRhdGUgPyBNYXRoLm1heCggeWVhciwgbWluRGF0ZS5nZXRGdWxsWWVhcigpICkgOiB5ZWFyICk7XG5cdFx0XHRcdGVuZFllYXIgPSAoIG1heERhdGUgPyBNYXRoLm1pbiggZW5kWWVhciwgbWF4RGF0ZS5nZXRGdWxsWWVhcigpICkgOiBlbmRZZWFyICk7XG5cdFx0XHRcdGluc3QueWVhcnNodG1sICs9IFwiPHNlbGVjdCBjbGFzcz0ndWktZGF0ZXBpY2tlci15ZWFyJyBkYXRhLWhhbmRsZXI9J3NlbGVjdFllYXInIGRhdGEtZXZlbnQ9J2NoYW5nZSc+XCI7XG5cdFx0XHRcdGZvciAoIDsgeWVhciA8PSBlbmRZZWFyOyB5ZWFyKysgKSB7XG5cdFx0XHRcdFx0aW5zdC55ZWFyc2h0bWwgKz0gXCI8b3B0aW9uIHZhbHVlPSdcIiArIHllYXIgKyBcIidcIiArXG5cdFx0XHRcdFx0XHQoIHllYXIgPT09IGRyYXdZZWFyID8gXCIgc2VsZWN0ZWQ9J3NlbGVjdGVkJ1wiIDogXCJcIiApICtcblx0XHRcdFx0XHRcdFwiPlwiICsgeWVhciArIFwiPC9vcHRpb24+XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5zdC55ZWFyc2h0bWwgKz0gXCI8L3NlbGVjdD5cIjtcblxuXHRcdFx0XHRodG1sICs9IGluc3QueWVhcnNodG1sO1xuXHRcdFx0XHRpbnN0LnllYXJzaHRtbCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aHRtbCArPSB0aGlzLl9nZXQoIGluc3QsIFwieWVhclN1ZmZpeFwiICk7XG5cdFx0aWYgKCBzaG93TW9udGhBZnRlclllYXIgKSB7XG5cdFx0XHRodG1sICs9ICggc2Vjb25kYXJ5IHx8ICEoIGNoYW5nZU1vbnRoICYmIGNoYW5nZVllYXIgKSA/IFwiJiN4YTA7XCIgOiBcIlwiICkgKyBtb250aEh0bWw7XG5cdFx0fVxuXHRcdGh0bWwgKz0gXCI8L2Rpdj5cIjsgLy8gQ2xvc2UgZGF0ZXBpY2tlcl9oZWFkZXJcblx0XHRyZXR1cm4gaHRtbDtcblx0fSxcblxuXHQvKiBBZGp1c3Qgb25lIG9mIHRoZSBkYXRlIHN1Yi1maWVsZHMuICovXG5cdF9hZGp1c3RJbnN0RGF0ZTogZnVuY3Rpb24oIGluc3QsIG9mZnNldCwgcGVyaW9kICkge1xuXHRcdHZhciB5ZWFyID0gaW5zdC5zZWxlY3RlZFllYXIgKyAoIHBlcmlvZCA9PT0gXCJZXCIgPyBvZmZzZXQgOiAwICksXG5cdFx0XHRtb250aCA9IGluc3Quc2VsZWN0ZWRNb250aCArICggcGVyaW9kID09PSBcIk1cIiA/IG9mZnNldCA6IDAgKSxcblx0XHRcdGRheSA9IE1hdGgubWluKCBpbnN0LnNlbGVjdGVkRGF5LCB0aGlzLl9nZXREYXlzSW5Nb250aCggeWVhciwgbW9udGggKSApICsgKCBwZXJpb2QgPT09IFwiRFwiID8gb2Zmc2V0IDogMCApLFxuXHRcdFx0ZGF0ZSA9IHRoaXMuX3Jlc3RyaWN0TWluTWF4KCBpbnN0LCB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdCggbmV3IERhdGUoIHllYXIsIG1vbnRoLCBkYXkgKSApICk7XG5cblx0XHRpbnN0LnNlbGVjdGVkRGF5ID0gZGF0ZS5nZXREYXRlKCk7XG5cdFx0aW5zdC5kcmF3TW9udGggPSBpbnN0LnNlbGVjdGVkTW9udGggPSBkYXRlLmdldE1vbnRoKCk7XG5cdFx0aW5zdC5kcmF3WWVhciA9IGluc3Quc2VsZWN0ZWRZZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuXHRcdGlmICggcGVyaW9kID09PSBcIk1cIiB8fCBwZXJpb2QgPT09IFwiWVwiICkge1xuXHRcdFx0dGhpcy5fbm90aWZ5Q2hhbmdlKCBpbnN0ICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qIEVuc3VyZSBhIGRhdGUgaXMgd2l0aGluIGFueSBtaW4vbWF4IGJvdW5kcy4gKi9cblx0X3Jlc3RyaWN0TWluTWF4OiBmdW5jdGlvbiggaW5zdCwgZGF0ZSApIHtcblx0XHR2YXIgbWluRGF0ZSA9IHRoaXMuX2dldE1pbk1heERhdGUoIGluc3QsIFwibWluXCIgKSxcblx0XHRcdG1heERhdGUgPSB0aGlzLl9nZXRNaW5NYXhEYXRlKCBpbnN0LCBcIm1heFwiICksXG5cdFx0XHRuZXdEYXRlID0gKCBtaW5EYXRlICYmIGRhdGUgPCBtaW5EYXRlID8gbWluRGF0ZSA6IGRhdGUgKTtcblx0XHRyZXR1cm4gKCBtYXhEYXRlICYmIG5ld0RhdGUgPiBtYXhEYXRlID8gbWF4RGF0ZSA6IG5ld0RhdGUgKTtcblx0fSxcblxuXHQvKiBOb3RpZnkgY2hhbmdlIG9mIG1vbnRoL3llYXIuICovXG5cdF9ub3RpZnlDaGFuZ2U6IGZ1bmN0aW9uKCBpbnN0ICkge1xuXHRcdHZhciBvbkNoYW5nZSA9IHRoaXMuX2dldCggaW5zdCwgXCJvbkNoYW5nZU1vbnRoWWVhclwiICk7XG5cdFx0aWYgKCBvbkNoYW5nZSApIHtcblx0XHRcdG9uQ2hhbmdlLmFwcGx5KCAoIGluc3QuaW5wdXQgPyBpbnN0LmlucHV0WyAwIF0gOiBudWxsICksXG5cdFx0XHRcdFsgaW5zdC5zZWxlY3RlZFllYXIsIGluc3Quc2VsZWN0ZWRNb250aCArIDEsIGluc3QgXSApO1xuXHRcdH1cblx0fSxcblxuXHQvKiBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBtb250aHMgdG8gc2hvdy4gKi9cblx0X2dldE51bWJlck9mTW9udGhzOiBmdW5jdGlvbiggaW5zdCApIHtcblx0XHR2YXIgbnVtTW9udGhzID0gdGhpcy5fZ2V0KCBpbnN0LCBcIm51bWJlck9mTW9udGhzXCIgKTtcblx0XHRyZXR1cm4gKCBudW1Nb250aHMgPT0gbnVsbCA/IFsgMSwgMSBdIDogKCB0eXBlb2YgbnVtTW9udGhzID09PSBcIm51bWJlclwiID8gWyAxLCBudW1Nb250aHMgXSA6IG51bU1vbnRocyApICk7XG5cdH0sXG5cblx0LyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IG1heGltdW0gZGF0ZSAtIGVuc3VyZSBubyB0aW1lIGNvbXBvbmVudHMgYXJlIHNldC4gKi9cblx0X2dldE1pbk1heERhdGU6IGZ1bmN0aW9uKCBpbnN0LCBtaW5NYXggKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2RldGVybWluZURhdGUoIGluc3QsIHRoaXMuX2dldCggaW5zdCwgbWluTWF4ICsgXCJEYXRlXCIgKSwgbnVsbCApO1xuXHR9LFxuXG5cdC8qIEZpbmQgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgZ2l2ZW4gbW9udGguICovXG5cdF9nZXREYXlzSW5Nb250aDogZnVuY3Rpb24oIHllYXIsIG1vbnRoICkge1xuXHRcdHJldHVybiAzMiAtIHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KCBuZXcgRGF0ZSggeWVhciwgbW9udGgsIDMyICkgKS5nZXREYXRlKCk7XG5cdH0sXG5cblx0LyogRmluZCB0aGUgZGF5IG9mIHRoZSB3ZWVrIG9mIHRoZSBmaXJzdCBvZiBhIG1vbnRoLiAqL1xuXHRfZ2V0Rmlyc3REYXlPZk1vbnRoOiBmdW5jdGlvbiggeWVhciwgbW9udGggKSB7XG5cdFx0cmV0dXJuIG5ldyBEYXRlKCB5ZWFyLCBtb250aCwgMSApLmdldERheSgpO1xuXHR9LFxuXG5cdC8qIERldGVybWluZXMgaWYgd2Ugc2hvdWxkIGFsbG93IGEgXCJuZXh0L3ByZXZcIiBtb250aCBkaXNwbGF5IGNoYW5nZS4gKi9cblx0X2NhbkFkanVzdE1vbnRoOiBmdW5jdGlvbiggaW5zdCwgb2Zmc2V0LCBjdXJZZWFyLCBjdXJNb250aCApIHtcblx0XHR2YXIgbnVtTW9udGhzID0gdGhpcy5fZ2V0TnVtYmVyT2ZNb250aHMoIGluc3QgKSxcblx0XHRcdGRhdGUgPSB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdCggbmV3IERhdGUoIGN1clllYXIsXG5cdFx0XHRjdXJNb250aCArICggb2Zmc2V0IDwgMCA/IG9mZnNldCA6IG51bU1vbnRoc1sgMCBdICogbnVtTW9udGhzWyAxIF0gKSwgMSApICk7XG5cblx0XHRpZiAoIG9mZnNldCA8IDAgKSB7XG5cdFx0XHRkYXRlLnNldERhdGUoIHRoaXMuX2dldERheXNJbk1vbnRoKCBkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSApICk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9pc0luUmFuZ2UoIGluc3QsIGRhdGUgKTtcblx0fSxcblxuXHQvKiBJcyB0aGUgZ2l2ZW4gZGF0ZSBpbiB0aGUgYWNjZXB0ZWQgcmFuZ2U/ICovXG5cdF9pc0luUmFuZ2U6IGZ1bmN0aW9uKCBpbnN0LCBkYXRlICkge1xuXHRcdHZhciB5ZWFyU3BsaXQsIGN1cnJlbnRZZWFyLFxuXHRcdFx0bWluRGF0ZSA9IHRoaXMuX2dldE1pbk1heERhdGUoIGluc3QsIFwibWluXCIgKSxcblx0XHRcdG1heERhdGUgPSB0aGlzLl9nZXRNaW5NYXhEYXRlKCBpbnN0LCBcIm1heFwiICksXG5cdFx0XHRtaW5ZZWFyID0gbnVsbCxcblx0XHRcdG1heFllYXIgPSBudWxsLFxuXHRcdFx0eWVhcnMgPSB0aGlzLl9nZXQoIGluc3QsIFwieWVhclJhbmdlXCIgKTtcblx0XHRcdGlmICggeWVhcnMgKSB7XG5cdFx0XHRcdHllYXJTcGxpdCA9IHllYXJzLnNwbGl0KCBcIjpcIiApO1xuXHRcdFx0XHRjdXJyZW50WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcblx0XHRcdFx0bWluWWVhciA9IHBhcnNlSW50KCB5ZWFyU3BsaXRbIDAgXSwgMTAgKTtcblx0XHRcdFx0bWF4WWVhciA9IHBhcnNlSW50KCB5ZWFyU3BsaXRbIDEgXSwgMTAgKTtcblx0XHRcdFx0aWYgKCB5ZWFyU3BsaXRbIDAgXS5tYXRjaCggL1srXFwtXS4qLyApICkge1xuXHRcdFx0XHRcdG1pblllYXIgKz0gY3VycmVudFllYXI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCB5ZWFyU3BsaXRbIDEgXS5tYXRjaCggL1srXFwtXS4qLyApICkge1xuXHRcdFx0XHRcdG1heFllYXIgKz0gY3VycmVudFllYXI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdHJldHVybiAoICggIW1pbkRhdGUgfHwgZGF0ZS5nZXRUaW1lKCkgPj0gbWluRGF0ZS5nZXRUaW1lKCkgKSAmJlxuXHRcdFx0KCAhbWF4RGF0ZSB8fCBkYXRlLmdldFRpbWUoKSA8PSBtYXhEYXRlLmdldFRpbWUoKSApICYmXG5cdFx0XHQoICFtaW5ZZWFyIHx8IGRhdGUuZ2V0RnVsbFllYXIoKSA+PSBtaW5ZZWFyICkgJiZcblx0XHRcdCggIW1heFllYXIgfHwgZGF0ZS5nZXRGdWxsWWVhcigpIDw9IG1heFllYXIgKSApO1xuXHR9LFxuXG5cdC8qIFByb3ZpZGUgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIGZvcm1hdHRpbmcvcGFyc2luZy4gKi9cblx0X2dldEZvcm1hdENvbmZpZzogZnVuY3Rpb24oIGluc3QgKSB7XG5cdFx0dmFyIHNob3J0WWVhckN1dG9mZiA9IHRoaXMuX2dldCggaW5zdCwgXCJzaG9ydFllYXJDdXRvZmZcIiApO1xuXHRcdHNob3J0WWVhckN1dG9mZiA9ICggdHlwZW9mIHNob3J0WWVhckN1dG9mZiAhPT0gXCJzdHJpbmdcIiA/IHNob3J0WWVhckN1dG9mZiA6XG5cdFx0XHRuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkgJSAxMDAgKyBwYXJzZUludCggc2hvcnRZZWFyQ3V0b2ZmLCAxMCApICk7XG5cdFx0cmV0dXJuIHsgc2hvcnRZZWFyQ3V0b2ZmOiBzaG9ydFllYXJDdXRvZmYsXG5cdFx0XHRkYXlOYW1lc1Nob3J0OiB0aGlzLl9nZXQoIGluc3QsIFwiZGF5TmFtZXNTaG9ydFwiICksIGRheU5hbWVzOiB0aGlzLl9nZXQoIGluc3QsIFwiZGF5TmFtZXNcIiApLFxuXHRcdFx0bW9udGhOYW1lc1Nob3J0OiB0aGlzLl9nZXQoIGluc3QsIFwibW9udGhOYW1lc1Nob3J0XCIgKSwgbW9udGhOYW1lczogdGhpcy5fZ2V0KCBpbnN0LCBcIm1vbnRoTmFtZXNcIiApIH07XG5cdH0sXG5cblx0LyogRm9ybWF0IHRoZSBnaXZlbiBkYXRlIGZvciBkaXNwbGF5LiAqL1xuXHRfZm9ybWF0RGF0ZTogZnVuY3Rpb24oIGluc3QsIGRheSwgbW9udGgsIHllYXIgKSB7XG5cdFx0aWYgKCAhZGF5ICkge1xuXHRcdFx0aW5zdC5jdXJyZW50RGF5ID0gaW5zdC5zZWxlY3RlZERheTtcblx0XHRcdGluc3QuY3VycmVudE1vbnRoID0gaW5zdC5zZWxlY3RlZE1vbnRoO1xuXHRcdFx0aW5zdC5jdXJyZW50WWVhciA9IGluc3Quc2VsZWN0ZWRZZWFyO1xuXHRcdH1cblx0XHR2YXIgZGF0ZSA9ICggZGF5ID8gKCB0eXBlb2YgZGF5ID09PSBcIm9iamVjdFwiID8gZGF5IDpcblx0XHRcdHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KCBuZXcgRGF0ZSggeWVhciwgbW9udGgsIGRheSApICkgKSA6XG5cdFx0XHR0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdCggbmV3IERhdGUoIGluc3QuY3VycmVudFllYXIsIGluc3QuY3VycmVudE1vbnRoLCBpbnN0LmN1cnJlbnREYXkgKSApICk7XG5cdFx0cmV0dXJuIHRoaXMuZm9ybWF0RGF0ZSggdGhpcy5fZ2V0KCBpbnN0LCBcImRhdGVGb3JtYXRcIiApLCBkYXRlLCB0aGlzLl9nZXRGb3JtYXRDb25maWcoIGluc3QgKSApO1xuXHR9XG59ICk7XG5cbi8qXG4gKiBCaW5kIGhvdmVyIGV2ZW50cyBmb3IgZGF0ZXBpY2tlciBlbGVtZW50cy5cbiAqIERvbmUgdmlhIGRlbGVnYXRlIHNvIHRoZSBiaW5kaW5nIG9ubHkgb2NjdXJzIG9uY2UgaW4gdGhlIGxpZmV0aW1lIG9mIHRoZSBwYXJlbnQgZGl2LlxuICogR2xvYmFsIGRhdGVwaWNrZXJfaW5zdEFjdGl2ZSwgc2V0IGJ5IF91cGRhdGVEYXRlcGlja2VyIGFsbG93cyB0aGUgaGFuZGxlcnMgdG8gZmluZCB0aGVpciB3YXkgYmFjayB0byB0aGUgYWN0aXZlIHBpY2tlci5cbiAqL1xuZnVuY3Rpb24gZGF0ZXBpY2tlcl9iaW5kSG92ZXIoIGRwRGl2ICkge1xuXHR2YXIgc2VsZWN0b3IgPSBcImJ1dHRvbiwgLnVpLWRhdGVwaWNrZXItcHJldiwgLnVpLWRhdGVwaWNrZXItbmV4dCwgLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdGQgYVwiO1xuXHRyZXR1cm4gZHBEaXYub24oIFwibW91c2VvdXRcIiwgc2VsZWN0b3IsIGZ1bmN0aW9uKCkge1xuXHRcdFx0JCggdGhpcyApLnJlbW92ZUNsYXNzKCBcInVpLXN0YXRlLWhvdmVyXCIgKTtcblx0XHRcdGlmICggdGhpcy5jbGFzc05hbWUuaW5kZXhPZiggXCJ1aS1kYXRlcGlja2VyLXByZXZcIiApICE9PSAtMSApIHtcblx0XHRcdFx0JCggdGhpcyApLnJlbW92ZUNsYXNzKCBcInVpLWRhdGVwaWNrZXItcHJldi1ob3ZlclwiICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIHRoaXMuY2xhc3NOYW1lLmluZGV4T2YoIFwidWktZGF0ZXBpY2tlci1uZXh0XCIgKSAhPT0gLTEgKSB7XG5cdFx0XHRcdCQoIHRoaXMgKS5yZW1vdmVDbGFzcyggXCJ1aS1kYXRlcGlja2VyLW5leHQtaG92ZXJcIiApO1xuXHRcdFx0fVxuXHRcdH0gKVxuXHRcdC5vbiggXCJtb3VzZW92ZXJcIiwgc2VsZWN0b3IsIGRhdGVwaWNrZXJfaGFuZGxlTW91c2VvdmVyICk7XG59XG5cbmZ1bmN0aW9uIGRhdGVwaWNrZXJfaGFuZGxlTW91c2VvdmVyKCkge1xuXHRpZiAoICEkLmRhdGVwaWNrZXIuX2lzRGlzYWJsZWREYXRlcGlja2VyKCBkYXRlcGlja2VyX2luc3RBY3RpdmUuaW5saW5lID8gZGF0ZXBpY2tlcl9pbnN0QWN0aXZlLmRwRGl2LnBhcmVudCgpWyAwIF0gOiBkYXRlcGlja2VyX2luc3RBY3RpdmUuaW5wdXRbIDAgXSApICkge1xuXHRcdCQoIHRoaXMgKS5wYXJlbnRzKCBcIi51aS1kYXRlcGlja2VyLWNhbGVuZGFyXCIgKS5maW5kKCBcImFcIiApLnJlbW92ZUNsYXNzKCBcInVpLXN0YXRlLWhvdmVyXCIgKTtcblx0XHQkKCB0aGlzICkuYWRkQ2xhc3MoIFwidWktc3RhdGUtaG92ZXJcIiApO1xuXHRcdGlmICggdGhpcy5jbGFzc05hbWUuaW5kZXhPZiggXCJ1aS1kYXRlcGlja2VyLXByZXZcIiApICE9PSAtMSApIHtcblx0XHRcdCQoIHRoaXMgKS5hZGRDbGFzcyggXCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXJcIiApO1xuXHRcdH1cblx0XHRpZiAoIHRoaXMuY2xhc3NOYW1lLmluZGV4T2YoIFwidWktZGF0ZXBpY2tlci1uZXh0XCIgKSAhPT0gLTEgKSB7XG5cdFx0XHQkKCB0aGlzICkuYWRkQ2xhc3MoIFwidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyXCIgKTtcblx0XHR9XG5cdH1cbn1cblxuLyogalF1ZXJ5IGV4dGVuZCBub3cgaWdub3JlcyBudWxscyEgKi9cbmZ1bmN0aW9uIGRhdGVwaWNrZXJfZXh0ZW5kUmVtb3ZlKCB0YXJnZXQsIHByb3BzICkge1xuXHQkLmV4dGVuZCggdGFyZ2V0LCBwcm9wcyApO1xuXHRmb3IgKCB2YXIgbmFtZSBpbiBwcm9wcyApIHtcblx0XHRpZiAoIHByb3BzWyBuYW1lIF0gPT0gbnVsbCApIHtcblx0XHRcdHRhcmdldFsgbmFtZSBdID0gcHJvcHNbIG5hbWUgXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRhcmdldDtcbn1cblxuLyogSW52b2tlIHRoZSBkYXRlcGlja2VyIGZ1bmN0aW9uYWxpdHkuXG4gICBAcGFyYW0gIG9wdGlvbnMgIHN0cmluZyAtIGEgY29tbWFuZCwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgb3Jcblx0XHRcdFx0XHRPYmplY3QgLSBzZXR0aW5ncyBmb3IgYXR0YWNoaW5nIG5ldyBkYXRlcGlja2VyIGZ1bmN0aW9uYWxpdHlcbiAgIEByZXR1cm4gIGpRdWVyeSBvYmplY3QgKi9cbiQuZm4uZGF0ZXBpY2tlciA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdC8qIFZlcmlmeSBhbiBlbXB0eSBjb2xsZWN0aW9uIHdhc24ndCBwYXNzZWQgLSBGaXhlcyAjNjk3NiAqL1xuXHRpZiAoICF0aGlzLmxlbmd0aCApIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qIEluaXRpYWxpc2UgdGhlIGRhdGUgcGlja2VyLiAqL1xuXHRpZiAoICEkLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQgKSB7XG5cdFx0JCggZG9jdW1lbnQgKS5vbiggXCJtb3VzZWRvd25cIiwgJC5kYXRlcGlja2VyLl9jaGVja0V4dGVybmFsQ2xpY2sgKTtcblx0XHQkLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXHR9XG5cblx0LyogQXBwZW5kIGRhdGVwaWNrZXIgbWFpbiBjb250YWluZXIgdG8gYm9keSBpZiBub3QgZXhpc3QuICovXG5cdGlmICggJCggXCIjXCIgKyAkLmRhdGVwaWNrZXIuX21haW5EaXZJZCApLmxlbmd0aCA9PT0gMCApIHtcblx0XHQkKCBcImJvZHlcIiApLmFwcGVuZCggJC5kYXRlcGlja2VyLmRwRGl2ICk7XG5cdH1cblxuXHR2YXIgb3RoZXJBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMSApO1xuXHRpZiAoIHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiICYmICggb3B0aW9ucyA9PT0gXCJpc0Rpc2FibGVkXCIgfHwgb3B0aW9ucyA9PT0gXCJnZXREYXRlXCIgfHwgb3B0aW9ucyA9PT0gXCJ3aWRnZXRcIiApICkge1xuXHRcdHJldHVybiAkLmRhdGVwaWNrZXJbIFwiX1wiICsgb3B0aW9ucyArIFwiRGF0ZXBpY2tlclwiIF0uXG5cdFx0XHRhcHBseSggJC5kYXRlcGlja2VyLCBbIHRoaXNbIDAgXSBdLmNvbmNhdCggb3RoZXJBcmdzICkgKTtcblx0fVxuXHRpZiAoIG9wdGlvbnMgPT09IFwib3B0aW9uXCIgJiYgYXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiB0eXBlb2YgYXJndW1lbnRzWyAxIF0gPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuICQuZGF0ZXBpY2tlclsgXCJfXCIgKyBvcHRpb25zICsgXCJEYXRlcGlja2VyXCIgXS5cblx0XHRcdGFwcGx5KCAkLmRhdGVwaWNrZXIsIFsgdGhpc1sgMCBdIF0uY29uY2F0KCBvdGhlckFyZ3MgKSApO1xuXHR9XG5cdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiID9cblx0XHRcdCQuZGF0ZXBpY2tlclsgXCJfXCIgKyBvcHRpb25zICsgXCJEYXRlcGlja2VyXCIgXS5cblx0XHRcdFx0YXBwbHkoICQuZGF0ZXBpY2tlciwgWyB0aGlzIF0uY29uY2F0KCBvdGhlckFyZ3MgKSApIDpcblx0XHRcdCQuZGF0ZXBpY2tlci5fYXR0YWNoRGF0ZXBpY2tlciggdGhpcywgb3B0aW9ucyApO1xuXHR9ICk7XG59O1xuXG4kLmRhdGVwaWNrZXIgPSBuZXcgRGF0ZXBpY2tlcigpOyAvLyBzaW5nbGV0b24gaW5zdGFuY2VcbiQuZGF0ZXBpY2tlci5pbml0aWFsaXplZCA9IGZhbHNlO1xuJC5kYXRlcGlja2VyLnV1aWQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiQuZGF0ZXBpY2tlci52ZXJzaW9uID0gXCIxLjEyLjFcIjtcblxudmFyIHdpZGdldHNEYXRlcGlja2VyID0gJC5kYXRlcGlja2VyO1xuXG5cblxuXG4vLyBUaGlzIGZpbGUgaXMgZGVwcmVjYXRlZFxudmFyIGllID0gJC51aS5pZSA9ICEhL21zaWUgW1xcdy5dKy8uZXhlYyggbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpICk7XG5cbi8qIVxuICogalF1ZXJ5IFVJIE1vdXNlIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiBNb3VzZVxuLy8+Pmdyb3VwOiBXaWRnZXRzXG4vLz4+ZGVzY3JpcHRpb246IEFic3RyYWN0cyBtb3VzZS1iYXNlZCBpbnRlcmFjdGlvbnMgdG8gYXNzaXN0IGluIGNyZWF0aW5nIGNlcnRhaW4gd2lkZ2V0cy5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9tb3VzZS9cblxuXG5cbnZhciBtb3VzZUhhbmRsZWQgPSBmYWxzZTtcbiQoIGRvY3VtZW50ICkub24oIFwibW91c2V1cFwiLCBmdW5jdGlvbigpIHtcblx0bW91c2VIYW5kbGVkID0gZmFsc2U7XG59ICk7XG5cbnZhciB3aWRnZXRzTW91c2UgPSAkLndpZGdldCggXCJ1aS5tb3VzZVwiLCB7XG5cdHZlcnNpb246IFwiMS4xMi4xXCIsXG5cdG9wdGlvbnM6IHtcblx0XHRjYW5jZWw6IFwiaW5wdXQsIHRleHRhcmVhLCBidXR0b24sIHNlbGVjdCwgb3B0aW9uXCIsXG5cdFx0ZGlzdGFuY2U6IDEsXG5cdFx0ZGVsYXk6IDBcblx0fSxcblx0X21vdXNlSW5pdDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzO1xuXG5cdFx0dGhpcy5lbGVtZW50XG5cdFx0XHQub24oIFwibW91c2Vkb3duLlwiICsgdGhpcy53aWRnZXROYW1lLCBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdHJldHVybiB0aGF0Ll9tb3VzZURvd24oIGV2ZW50ICk7XG5cdFx0XHR9IClcblx0XHRcdC5vbiggXCJjbGljay5cIiArIHRoaXMud2lkZ2V0TmFtZSwgZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHRpZiAoIHRydWUgPT09ICQuZGF0YSggZXZlbnQudGFyZ2V0LCB0aGF0LndpZGdldE5hbWUgKyBcIi5wcmV2ZW50Q2xpY2tFdmVudFwiICkgKSB7XG5cdFx0XHRcdFx0JC5yZW1vdmVEYXRhKCBldmVudC50YXJnZXQsIHRoYXQud2lkZ2V0TmFtZSArIFwiLnByZXZlbnRDbGlja0V2ZW50XCIgKTtcblx0XHRcdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblxuXHRcdHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuXHR9LFxuXG5cdC8vIFRPRE86IG1ha2Ugc3VyZSBkZXN0cm95aW5nIG9uZSBpbnN0YW5jZSBvZiBtb3VzZSBkb2Vzbid0IG1lc3Mgd2l0aFxuXHQvLyBvdGhlciBpbnN0YW5jZXMgb2YgbW91c2Vcblx0X21vdXNlRGVzdHJveTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5lbGVtZW50Lm9mZiggXCIuXCIgKyB0aGlzLndpZGdldE5hbWUgKTtcblx0XHRpZiAoIHRoaXMuX21vdXNlTW92ZURlbGVnYXRlICkge1xuXHRcdFx0dGhpcy5kb2N1bWVudFxuXHRcdFx0XHQub2ZmKCBcIm1vdXNlbW92ZS5cIiArIHRoaXMud2lkZ2V0TmFtZSwgdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUgKVxuXHRcdFx0XHQub2ZmKCBcIm1vdXNldXAuXCIgKyB0aGlzLndpZGdldE5hbWUsIHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSApO1xuXHRcdH1cblx0fSxcblxuXHRfbW91c2VEb3duOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHQvLyBkb24ndCBsZXQgbW9yZSB0aGFuIG9uZSB3aWRnZXQgaGFuZGxlIG1vdXNlU3RhcnRcblx0XHRpZiAoIG1vdXNlSGFuZGxlZCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9tb3VzZU1vdmVkID0gZmFsc2U7XG5cblx0XHQvLyBXZSBtYXkgaGF2ZSBtaXNzZWQgbW91c2V1cCAob3V0IG9mIHdpbmRvdylcblx0XHQoIHRoaXMuX21vdXNlU3RhcnRlZCAmJiB0aGlzLl9tb3VzZVVwKCBldmVudCApICk7XG5cblx0XHR0aGlzLl9tb3VzZURvd25FdmVudCA9IGV2ZW50O1xuXG5cdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0YnRuSXNMZWZ0ID0gKCBldmVudC53aGljaCA9PT0gMSApLFxuXG5cdFx0XHQvLyBldmVudC50YXJnZXQubm9kZU5hbWUgd29ya3MgYXJvdW5kIGEgYnVnIGluIElFIDggd2l0aFxuXHRcdFx0Ly8gZGlzYWJsZWQgaW5wdXRzICgjNzYyMClcblx0XHRcdGVsSXNDYW5jZWwgPSAoIHR5cGVvZiB0aGlzLm9wdGlvbnMuY2FuY2VsID09PSBcInN0cmluZ1wiICYmIGV2ZW50LnRhcmdldC5ub2RlTmFtZSA/XG5cdFx0XHRcdCQoIGV2ZW50LnRhcmdldCApLmNsb3Nlc3QoIHRoaXMub3B0aW9ucy5jYW5jZWwgKS5sZW5ndGggOiBmYWxzZSApO1xuXHRcdGlmICggIWJ0bklzTGVmdCB8fCBlbElzQ2FuY2VsIHx8ICF0aGlzLl9tb3VzZUNhcHR1cmUoIGV2ZW50ICkgKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHR0aGlzLm1vdXNlRGVsYXlNZXQgPSAhdGhpcy5vcHRpb25zLmRlbGF5O1xuXHRcdGlmICggIXRoaXMubW91c2VEZWxheU1ldCApIHtcblx0XHRcdHRoaXMuX21vdXNlRGVsYXlUaW1lciA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aGF0Lm1vdXNlRGVsYXlNZXQgPSB0cnVlO1xuXHRcdFx0fSwgdGhpcy5vcHRpb25zLmRlbGF5ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLl9tb3VzZURpc3RhbmNlTWV0KCBldmVudCApICYmIHRoaXMuX21vdXNlRGVsYXlNZXQoIGV2ZW50ICkgKSB7XG5cdFx0XHR0aGlzLl9tb3VzZVN0YXJ0ZWQgPSAoIHRoaXMuX21vdXNlU3RhcnQoIGV2ZW50ICkgIT09IGZhbHNlICk7XG5cdFx0XHRpZiAoICF0aGlzLl9tb3VzZVN0YXJ0ZWQgKSB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENsaWNrIGV2ZW50IG1heSBuZXZlciBoYXZlIGZpcmVkIChHZWNrbyAmIE9wZXJhKVxuXHRcdGlmICggdHJ1ZSA9PT0gJC5kYXRhKCBldmVudC50YXJnZXQsIHRoaXMud2lkZ2V0TmFtZSArIFwiLnByZXZlbnRDbGlja0V2ZW50XCIgKSApIHtcblx0XHRcdCQucmVtb3ZlRGF0YSggZXZlbnQudGFyZ2V0LCB0aGlzLndpZGdldE5hbWUgKyBcIi5wcmV2ZW50Q2xpY2tFdmVudFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlc2UgZGVsZWdhdGVzIGFyZSByZXF1aXJlZCB0byBrZWVwIGNvbnRleHRcblx0XHR0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSA9IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHJldHVybiB0aGF0Ll9tb3VzZU1vdmUoIGV2ZW50ICk7XG5cdFx0fTtcblx0XHR0aGlzLl9tb3VzZVVwRGVsZWdhdGUgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRyZXR1cm4gdGhhdC5fbW91c2VVcCggZXZlbnQgKTtcblx0XHR9O1xuXG5cdFx0dGhpcy5kb2N1bWVudFxuXHRcdFx0Lm9uKCBcIm1vdXNlbW92ZS5cIiArIHRoaXMud2lkZ2V0TmFtZSwgdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUgKVxuXHRcdFx0Lm9uKCBcIm1vdXNldXAuXCIgKyB0aGlzLndpZGdldE5hbWUsIHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSApO1xuXG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdG1vdXNlSGFuZGxlZCA9IHRydWU7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0X21vdXNlTW92ZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0Ly8gT25seSBjaGVjayBmb3IgbW91c2V1cHMgb3V0c2lkZSB0aGUgZG9jdW1lbnQgaWYgeW91J3ZlIG1vdmVkIGluc2lkZSB0aGUgZG9jdW1lbnRcblx0XHQvLyBhdCBsZWFzdCBvbmNlLiBUaGlzIHByZXZlbnRzIHRoZSBmaXJpbmcgb2YgbW91c2V1cCBpbiB0aGUgY2FzZSBvZiBJRTw5LCB3aGljaCB3aWxsXG5cdFx0Ly8gZmlyZSBhIG1vdXNlbW92ZSBldmVudCBpZiBjb250ZW50IGlzIHBsYWNlZCB1bmRlciB0aGUgY3Vyc29yLiBTZWUgIzc3Nzhcblx0XHQvLyBTdXBwb3J0OiBJRSA8OVxuXHRcdGlmICggdGhpcy5fbW91c2VNb3ZlZCApIHtcblxuXHRcdFx0Ly8gSUUgbW91c2V1cCBjaGVjayAtIG1vdXNldXAgaGFwcGVuZWQgd2hlbiBtb3VzZSB3YXMgb3V0IG9mIHdpbmRvd1xuXHRcdFx0aWYgKCAkLnVpLmllICYmICggIWRvY3VtZW50LmRvY3VtZW50TW9kZSB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPCA5ICkgJiZcblx0XHRcdFx0XHQhZXZlbnQuYnV0dG9uICkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fbW91c2VVcCggZXZlbnQgKTtcblxuXHRcdFx0Ly8gSWZyYW1lIG1vdXNldXAgY2hlY2sgLSBtb3VzZXVwIG9jY3VycmVkIGluIGFub3RoZXIgZG9jdW1lbnRcblx0XHRcdH0gZWxzZSBpZiAoICFldmVudC53aGljaCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgPD04IC0gOVxuXHRcdFx0XHQvLyBTYWZhcmkgc2V0cyB3aGljaCB0byAwIGlmIHlvdSBwcmVzcyBhbnkgb2YgdGhlIGZvbGxvd2luZyBrZXlzXG5cdFx0XHRcdC8vIGR1cmluZyBhIGRyYWcgKCMxNDQ2MSlcblx0XHRcdFx0aWYgKCBldmVudC5vcmlnaW5hbEV2ZW50LmFsdEtleSB8fCBldmVudC5vcmlnaW5hbEV2ZW50LmN0cmxLZXkgfHxcblx0XHRcdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQubWV0YUtleSB8fCBldmVudC5vcmlnaW5hbEV2ZW50LnNoaWZ0S2V5ICkge1xuXHRcdFx0XHRcdHRoaXMuaWdub3JlTWlzc2luZ1doaWNoID0gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIGlmICggIXRoaXMuaWdub3JlTWlzc2luZ1doaWNoICkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLl9tb3VzZVVwKCBldmVudCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBldmVudC53aGljaCB8fCBldmVudC5idXR0b24gKSB7XG5cdFx0XHR0aGlzLl9tb3VzZU1vdmVkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuX21vdXNlU3RhcnRlZCApIHtcblx0XHRcdHRoaXMuX21vdXNlRHJhZyggZXZlbnQgKTtcblx0XHRcdHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5fbW91c2VEaXN0YW5jZU1ldCggZXZlbnQgKSAmJiB0aGlzLl9tb3VzZURlbGF5TWV0KCBldmVudCApICkge1xuXHRcdFx0dGhpcy5fbW91c2VTdGFydGVkID1cblx0XHRcdFx0KCB0aGlzLl9tb3VzZVN0YXJ0KCB0aGlzLl9tb3VzZURvd25FdmVudCwgZXZlbnQgKSAhPT0gZmFsc2UgKTtcblx0XHRcdCggdGhpcy5fbW91c2VTdGFydGVkID8gdGhpcy5fbW91c2VEcmFnKCBldmVudCApIDogdGhpcy5fbW91c2VVcCggZXZlbnQgKSApO1xuXHRcdH1cblxuXHRcdHJldHVybiAhdGhpcy5fbW91c2VTdGFydGVkO1xuXHR9LFxuXG5cdF9tb3VzZVVwOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dGhpcy5kb2N1bWVudFxuXHRcdFx0Lm9mZiggXCJtb3VzZW1vdmUuXCIgKyB0aGlzLndpZGdldE5hbWUsIHRoaXMuX21vdXNlTW92ZURlbGVnYXRlIClcblx0XHRcdC5vZmYoIFwibW91c2V1cC5cIiArIHRoaXMud2lkZ2V0TmFtZSwgdGhpcy5fbW91c2VVcERlbGVnYXRlICk7XG5cblx0XHRpZiAoIHRoaXMuX21vdXNlU3RhcnRlZCApIHtcblx0XHRcdHRoaXMuX21vdXNlU3RhcnRlZCA9IGZhbHNlO1xuXG5cdFx0XHRpZiAoIGV2ZW50LnRhcmdldCA9PT0gdGhpcy5fbW91c2VEb3duRXZlbnQudGFyZ2V0ICkge1xuXHRcdFx0XHQkLmRhdGEoIGV2ZW50LnRhcmdldCwgdGhpcy53aWRnZXROYW1lICsgXCIucHJldmVudENsaWNrRXZlbnRcIiwgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9tb3VzZVN0b3AoIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLl9tb3VzZURlbGF5VGltZXIgKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQoIHRoaXMuX21vdXNlRGVsYXlUaW1lciApO1xuXHRcdFx0ZGVsZXRlIHRoaXMuX21vdXNlRGVsYXlUaW1lcjtcblx0XHR9XG5cblx0XHR0aGlzLmlnbm9yZU1pc3NpbmdXaGljaCA9IGZhbHNlO1xuXHRcdG1vdXNlSGFuZGxlZCA9IGZhbHNlO1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdH0sXG5cblx0X21vdXNlRGlzdGFuY2VNZXQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRyZXR1cm4gKCBNYXRoLm1heChcblx0XHRcdFx0TWF0aC5hYnMoIHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VYIC0gZXZlbnQucGFnZVggKSxcblx0XHRcdFx0TWF0aC5hYnMoIHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VZIC0gZXZlbnQucGFnZVkgKVxuXHRcdFx0KSA+PSB0aGlzLm9wdGlvbnMuZGlzdGFuY2Vcblx0XHQpO1xuXHR9LFxuXG5cdF9tb3VzZURlbGF5TWV0OiBmdW5jdGlvbiggLyogZXZlbnQgKi8gKSB7XG5cdFx0cmV0dXJuIHRoaXMubW91c2VEZWxheU1ldDtcblx0fSxcblxuXHQvLyBUaGVzZSBhcmUgcGxhY2Vob2xkZXIgbWV0aG9kcywgdG8gYmUgb3ZlcnJpZGVuIGJ5IGV4dGVuZGluZyBwbHVnaW5cblx0X21vdXNlU3RhcnQ6IGZ1bmN0aW9uKCAvKiBldmVudCAqLyApIHt9LFxuXHRfbW91c2VEcmFnOiBmdW5jdGlvbiggLyogZXZlbnQgKi8gKSB7fSxcblx0X21vdXNlU3RvcDogZnVuY3Rpb24oIC8qIGV2ZW50ICovICkge30sXG5cdF9tb3VzZUNhcHR1cmU6IGZ1bmN0aW9uKCAvKiBldmVudCAqLyApIHsgcmV0dXJuIHRydWU7IH1cbn0gKTtcblxuXG5cblxuLy8gJC51aS5wbHVnaW4gaXMgZGVwcmVjYXRlZC4gVXNlICQud2lkZ2V0KCkgZXh0ZW5zaW9ucyBpbnN0ZWFkLlxudmFyIHBsdWdpbiA9ICQudWkucGx1Z2luID0ge1xuXHRhZGQ6IGZ1bmN0aW9uKCBtb2R1bGUsIG9wdGlvbiwgc2V0ICkge1xuXHRcdHZhciBpLFxuXHRcdFx0cHJvdG8gPSAkLnVpWyBtb2R1bGUgXS5wcm90b3R5cGU7XG5cdFx0Zm9yICggaSBpbiBzZXQgKSB7XG5cdFx0XHRwcm90by5wbHVnaW5zWyBpIF0gPSBwcm90by5wbHVnaW5zWyBpIF0gfHwgW107XG5cdFx0XHRwcm90by5wbHVnaW5zWyBpIF0ucHVzaCggWyBvcHRpb24sIHNldFsgaSBdIF0gKTtcblx0XHR9XG5cdH0sXG5cdGNhbGw6IGZ1bmN0aW9uKCBpbnN0YW5jZSwgbmFtZSwgYXJncywgYWxsb3dEaXNjb25uZWN0ZWQgKSB7XG5cdFx0dmFyIGksXG5cdFx0XHRzZXQgPSBpbnN0YW5jZS5wbHVnaW5zWyBuYW1lIF07XG5cblx0XHRpZiAoICFzZXQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCAhYWxsb3dEaXNjb25uZWN0ZWQgJiYgKCAhaW5zdGFuY2UuZWxlbWVudFsgMCBdLnBhcmVudE5vZGUgfHxcblx0XHRcdFx0aW5zdGFuY2UuZWxlbWVudFsgMCBdLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IDExICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Zm9yICggaSA9IDA7IGkgPCBzZXQubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRpZiAoIGluc3RhbmNlLm9wdGlvbnNbIHNldFsgaSBdWyAwIF0gXSApIHtcblx0XHRcdFx0c2V0WyBpIF1bIDEgXS5hcHBseSggaW5zdGFuY2UuZWxlbWVudCwgYXJncyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuXG5cbnZhciBzYWZlQmx1ciA9ICQudWkuc2FmZUJsdXIgPSBmdW5jdGlvbiggZWxlbWVudCApIHtcblxuXHQvLyBTdXBwb3J0OiBJRTkgLSAxMCBvbmx5XG5cdC8vIElmIHRoZSA8Ym9keT4gaXMgYmx1cnJlZCwgSUUgd2lsbCBzd2l0Y2ggd2luZG93cywgc2VlICM5NDIwXG5cdGlmICggZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwiYm9keVwiICkge1xuXHRcdCQoIGVsZW1lbnQgKS50cmlnZ2VyKCBcImJsdXJcIiApO1xuXHR9XG59O1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIERyYWdnYWJsZSAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogRHJhZ2dhYmxlXG4vLz4+Z3JvdXA6IEludGVyYWN0aW9uc1xuLy8+PmRlc2NyaXB0aW9uOiBFbmFibGVzIGRyYWdnaW5nIGZ1bmN0aW9uYWxpdHkgZm9yIGFueSBlbGVtZW50LlxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL2RyYWdnYWJsZS9cbi8vPj5kZW1vczogaHR0cDovL2pxdWVyeXVpLmNvbS9kcmFnZ2FibGUvXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvZHJhZ2dhYmxlLmNzc1xuXG5cblxuJC53aWRnZXQoIFwidWkuZHJhZ2dhYmxlXCIsICQudWkubW91c2UsIHtcblx0dmVyc2lvbjogXCIxLjEyLjFcIixcblx0d2lkZ2V0RXZlbnRQcmVmaXg6IFwiZHJhZ1wiLFxuXHRvcHRpb25zOiB7XG5cdFx0YWRkQ2xhc3NlczogdHJ1ZSxcblx0XHRhcHBlbmRUbzogXCJwYXJlbnRcIixcblx0XHRheGlzOiBmYWxzZSxcblx0XHRjb25uZWN0VG9Tb3J0YWJsZTogZmFsc2UsXG5cdFx0Y29udGFpbm1lbnQ6IGZhbHNlLFxuXHRcdGN1cnNvcjogXCJhdXRvXCIsXG5cdFx0Y3Vyc29yQXQ6IGZhbHNlLFxuXHRcdGdyaWQ6IGZhbHNlLFxuXHRcdGhhbmRsZTogZmFsc2UsXG5cdFx0aGVscGVyOiBcIm9yaWdpbmFsXCIsXG5cdFx0aWZyYW1lRml4OiBmYWxzZSxcblx0XHRvcGFjaXR5OiBmYWxzZSxcblx0XHRyZWZyZXNoUG9zaXRpb25zOiBmYWxzZSxcblx0XHRyZXZlcnQ6IGZhbHNlLFxuXHRcdHJldmVydER1cmF0aW9uOiA1MDAsXG5cdFx0c2NvcGU6IFwiZGVmYXVsdFwiLFxuXHRcdHNjcm9sbDogdHJ1ZSxcblx0XHRzY3JvbGxTZW5zaXRpdml0eTogMjAsXG5cdFx0c2Nyb2xsU3BlZWQ6IDIwLFxuXHRcdHNuYXA6IGZhbHNlLFxuXHRcdHNuYXBNb2RlOiBcImJvdGhcIixcblx0XHRzbmFwVG9sZXJhbmNlOiAyMCxcblx0XHRzdGFjazogZmFsc2UsXG5cdFx0ekluZGV4OiBmYWxzZSxcblxuXHRcdC8vIENhbGxiYWNrc1xuXHRcdGRyYWc6IG51bGwsXG5cdFx0c3RhcnQ6IG51bGwsXG5cdFx0c3RvcDogbnVsbFxuXHR9LFxuXHRfY3JlYXRlOiBmdW5jdGlvbigpIHtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmhlbHBlciA9PT0gXCJvcmlnaW5hbFwiICkge1xuXHRcdFx0dGhpcy5fc2V0UG9zaXRpb25SZWxhdGl2ZSgpO1xuXHRcdH1cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5hZGRDbGFzc2VzICkge1xuXHRcdFx0dGhpcy5fYWRkQ2xhc3MoIFwidWktZHJhZ2dhYmxlXCIgKTtcblx0XHR9XG5cdFx0dGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCk7XG5cblx0XHR0aGlzLl9tb3VzZUluaXQoKTtcblx0fSxcblxuXHRfc2V0T3B0aW9uOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHR0aGlzLl9zdXBlcigga2V5LCB2YWx1ZSApO1xuXHRcdGlmICgga2V5ID09PSBcImhhbmRsZVwiICkge1xuXHRcdFx0dGhpcy5fcmVtb3ZlSGFuZGxlQ2xhc3NOYW1lKCk7XG5cdFx0XHR0aGlzLl9zZXRIYW5kbGVDbGFzc05hbWUoKTtcblx0XHR9XG5cdH0sXG5cblx0X2Rlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggKCB0aGlzLmhlbHBlciB8fCB0aGlzLmVsZW1lbnQgKS5pcyggXCIudWktZHJhZ2dhYmxlLWRyYWdnaW5nXCIgKSApIHtcblx0XHRcdHRoaXMuZGVzdHJveU9uQ2xlYXIgPSB0cnVlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLl9yZW1vdmVIYW5kbGVDbGFzc05hbWUoKTtcblx0XHR0aGlzLl9tb3VzZURlc3Ryb3koKTtcblx0fSxcblxuXHRfbW91c2VDYXB0dXJlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIG8gPSB0aGlzLm9wdGlvbnM7XG5cblx0XHQvLyBBbW9uZyBvdGhlcnMsIHByZXZlbnQgYSBkcmFnIG9uIGEgcmVzaXphYmxlLWhhbmRsZVxuXHRcdGlmICggdGhpcy5oZWxwZXIgfHwgby5kaXNhYmxlZCB8fFxuXHRcdFx0XHQkKCBldmVudC50YXJnZXQgKS5jbG9zZXN0KCBcIi51aS1yZXNpemFibGUtaGFuZGxlXCIgKS5sZW5ndGggPiAwICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vUXVpdCBpZiB3ZSdyZSBub3Qgb24gYSB2YWxpZCBoYW5kbGVcblx0XHR0aGlzLmhhbmRsZSA9IHRoaXMuX2dldEhhbmRsZSggZXZlbnQgKTtcblx0XHRpZiAoICF0aGlzLmhhbmRsZSApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLl9ibHVyQWN0aXZlRWxlbWVudCggZXZlbnQgKTtcblxuXHRcdHRoaXMuX2Jsb2NrRnJhbWVzKCBvLmlmcmFtZUZpeCA9PT0gdHJ1ZSA/IFwiaWZyYW1lXCIgOiBvLmlmcmFtZUZpeCApO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cblx0fSxcblxuXHRfYmxvY2tGcmFtZXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR0aGlzLmlmcmFtZUJsb2NrcyA9IHRoaXMuZG9jdW1lbnQuZmluZCggc2VsZWN0b3IgKS5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGlmcmFtZSA9ICQoIHRoaXMgKTtcblxuXHRcdFx0cmV0dXJuICQoIFwiPGRpdj5cIiApXG5cdFx0XHRcdC5jc3MoIFwicG9zaXRpb25cIiwgXCJhYnNvbHV0ZVwiIClcblx0XHRcdFx0LmFwcGVuZFRvKCBpZnJhbWUucGFyZW50KCkgKVxuXHRcdFx0XHQub3V0ZXJXaWR0aCggaWZyYW1lLm91dGVyV2lkdGgoKSApXG5cdFx0XHRcdC5vdXRlckhlaWdodCggaWZyYW1lLm91dGVySGVpZ2h0KCkgKVxuXHRcdFx0XHQub2Zmc2V0KCBpZnJhbWUub2Zmc2V0KCkgKVsgMCBdO1xuXHRcdH0gKTtcblx0fSxcblxuXHRfdW5ibG9ja0ZyYW1lczogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCB0aGlzLmlmcmFtZUJsb2NrcyApIHtcblx0XHRcdHRoaXMuaWZyYW1lQmxvY2tzLnJlbW92ZSgpO1xuXHRcdFx0ZGVsZXRlIHRoaXMuaWZyYW1lQmxvY2tzO1xuXHRcdH1cblx0fSxcblxuXHRfYmx1ckFjdGl2ZUVsZW1lbnQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgYWN0aXZlRWxlbWVudCA9ICQudWkuc2FmZUFjdGl2ZUVsZW1lbnQoIHRoaXMuZG9jdW1lbnRbIDAgXSApLFxuXHRcdFx0dGFyZ2V0ID0gJCggZXZlbnQudGFyZ2V0ICk7XG5cblx0XHQvLyBEb24ndCBibHVyIGlmIHRoZSBldmVudCBvY2N1cnJlZCBvbiBhbiBlbGVtZW50IHRoYXQgaXMgd2l0aGluXG5cdFx0Ly8gdGhlIGN1cnJlbnRseSBmb2N1c2VkIGVsZW1lbnRcblx0XHQvLyBTZWUgIzEwNTI3LCAjMTI0NzJcblx0XHRpZiAoIHRhcmdldC5jbG9zZXN0KCBhY3RpdmVFbGVtZW50ICkubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEJsdXIgYW55IGVsZW1lbnQgdGhhdCBjdXJyZW50bHkgaGFzIGZvY3VzLCBzZWUgIzQyNjFcblx0XHQkLnVpLnNhZmVCbHVyKCBhY3RpdmVFbGVtZW50ICk7XG5cdH0sXG5cblx0X21vdXNlU3RhcnQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdHZhciBvID0gdGhpcy5vcHRpb25zO1xuXG5cdFx0Ly9DcmVhdGUgYW5kIGFwcGVuZCB0aGUgdmlzaWJsZSBoZWxwZXJcblx0XHR0aGlzLmhlbHBlciA9IHRoaXMuX2NyZWF0ZUhlbHBlciggZXZlbnQgKTtcblxuXHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLmhlbHBlciwgXCJ1aS1kcmFnZ2FibGUtZHJhZ2dpbmdcIiApO1xuXG5cdFx0Ly9DYWNoZSB0aGUgaGVscGVyIHNpemVcblx0XHR0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCk7XG5cblx0XHQvL0lmIGRkbWFuYWdlciBpcyB1c2VkIGZvciBkcm9wcGFibGVzLCBzZXQgdGhlIGdsb2JhbCBkcmFnZ2FibGVcblx0XHRpZiAoICQudWkuZGRtYW5hZ2VyICkge1xuXHRcdFx0JC51aS5kZG1hbmFnZXIuY3VycmVudCA9IHRoaXM7XG5cdFx0fVxuXG5cdFx0Lypcblx0XHQgKiAtIFBvc2l0aW9uIGdlbmVyYXRpb24gLVxuXHRcdCAqIFRoaXMgYmxvY2sgZ2VuZXJhdGVzIGV2ZXJ5dGhpbmcgcG9zaXRpb24gcmVsYXRlZCAtIGl0J3MgdGhlIGNvcmUgb2YgZHJhZ2dhYmxlcy5cblx0XHQgKi9cblxuXHRcdC8vQ2FjaGUgdGhlIG1hcmdpbnMgb2YgdGhlIG9yaWdpbmFsIGVsZW1lbnRcblx0XHR0aGlzLl9jYWNoZU1hcmdpbnMoKTtcblxuXHRcdC8vU3RvcmUgdGhlIGhlbHBlcidzIGNzcyBwb3NpdGlvblxuXHRcdHRoaXMuY3NzUG9zaXRpb24gPSB0aGlzLmhlbHBlci5jc3MoIFwicG9zaXRpb25cIiApO1xuXHRcdHRoaXMuc2Nyb2xsUGFyZW50ID0gdGhpcy5oZWxwZXIuc2Nyb2xsUGFyZW50KCB0cnVlICk7XG5cdFx0dGhpcy5vZmZzZXRQYXJlbnQgPSB0aGlzLmhlbHBlci5vZmZzZXRQYXJlbnQoKTtcblx0XHR0aGlzLmhhc0ZpeGVkQW5jZXN0b3IgPSB0aGlzLmhlbHBlci5wYXJlbnRzKCkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICQoIHRoaXMgKS5jc3MoIFwicG9zaXRpb25cIiApID09PSBcImZpeGVkXCI7XG5cdFx0XHR9ICkubGVuZ3RoID4gMDtcblxuXHRcdC8vVGhlIGVsZW1lbnQncyBhYnNvbHV0ZSBwb3NpdGlvbiBvbiB0aGUgcGFnZSBtaW51cyBtYXJnaW5zXG5cdFx0dGhpcy5wb3NpdGlvbkFicyA9IHRoaXMuZWxlbWVudC5vZmZzZXQoKTtcblx0XHR0aGlzLl9yZWZyZXNoT2Zmc2V0cyggZXZlbnQgKTtcblxuXHRcdC8vR2VuZXJhdGUgdGhlIG9yaWdpbmFsIHBvc2l0aW9uXG5cdFx0dGhpcy5vcmlnaW5hbFBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbiA9IHRoaXMuX2dlbmVyYXRlUG9zaXRpb24oIGV2ZW50LCBmYWxzZSApO1xuXHRcdHRoaXMub3JpZ2luYWxQYWdlWCA9IGV2ZW50LnBhZ2VYO1xuXHRcdHRoaXMub3JpZ2luYWxQYWdlWSA9IGV2ZW50LnBhZ2VZO1xuXG5cdFx0Ly9BZGp1c3QgdGhlIG1vdXNlIG9mZnNldCByZWxhdGl2ZSB0byB0aGUgaGVscGVyIGlmIFwiY3Vyc29yQXRcIiBpcyBzdXBwbGllZFxuXHRcdCggby5jdXJzb3JBdCAmJiB0aGlzLl9hZGp1c3RPZmZzZXRGcm9tSGVscGVyKCBvLmN1cnNvckF0ICkgKTtcblxuXHRcdC8vU2V0IGEgY29udGFpbm1lbnQgaWYgZ2l2ZW4gaW4gdGhlIG9wdGlvbnNcblx0XHR0aGlzLl9zZXRDb250YWlubWVudCgpO1xuXG5cdFx0Ly9UcmlnZ2VyIGV2ZW50ICsgY2FsbGJhY2tzXG5cdFx0aWYgKCB0aGlzLl90cmlnZ2VyKCBcInN0YXJ0XCIsIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0dGhpcy5fY2xlYXIoKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvL1JlY2FjaGUgdGhlIGhlbHBlciBzaXplXG5cdFx0dGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpO1xuXG5cdFx0Ly9QcmVwYXJlIHRoZSBkcm9wcGFibGUgb2Zmc2V0c1xuXHRcdGlmICggJC51aS5kZG1hbmFnZXIgJiYgIW8uZHJvcEJlaGF2aW91ciApIHtcblx0XHRcdCQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdC8vIEV4ZWN1dGUgdGhlIGRyYWcgb25jZSAtIHRoaXMgY2F1c2VzIHRoZSBoZWxwZXIgbm90IHRvIGJlIHZpc2libGUgYmVmb3JlIGdldHRpbmcgaXRzXG5cdFx0Ly8gY29ycmVjdCBwb3NpdGlvblxuXHRcdHRoaXMuX21vdXNlRHJhZyggZXZlbnQsIHRydWUgKTtcblxuXHRcdC8vIElmIHRoZSBkZG1hbmFnZXIgaXMgdXNlZCBmb3IgZHJvcHBhYmxlcywgaW5mb3JtIHRoZSBtYW5hZ2VyIHRoYXQgZHJhZ2dpbmcgaGFzIHN0YXJ0ZWRcblx0XHQvLyAoc2VlICM1MDAzKVxuXHRcdGlmICggJC51aS5kZG1hbmFnZXIgKSB7XG5cdFx0XHQkLnVpLmRkbWFuYWdlci5kcmFnU3RhcnQoIHRoaXMsIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0X3JlZnJlc2hPZmZzZXRzOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dGhpcy5vZmZzZXQgPSB7XG5cdFx0XHR0b3A6IHRoaXMucG9zaXRpb25BYnMudG9wIC0gdGhpcy5tYXJnaW5zLnRvcCxcblx0XHRcdGxlZnQ6IHRoaXMucG9zaXRpb25BYnMubGVmdCAtIHRoaXMubWFyZ2lucy5sZWZ0LFxuXHRcdFx0c2Nyb2xsOiBmYWxzZSxcblx0XHRcdHBhcmVudDogdGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCksXG5cdFx0XHRyZWxhdGl2ZTogdGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKVxuXHRcdH07XG5cblx0XHR0aGlzLm9mZnNldC5jbGljayA9IHtcblx0XHRcdGxlZnQ6IGV2ZW50LnBhZ2VYIC0gdGhpcy5vZmZzZXQubGVmdCxcblx0XHRcdHRvcDogZXZlbnQucGFnZVkgLSB0aGlzLm9mZnNldC50b3Bcblx0XHR9O1xuXHR9LFxuXG5cdF9tb3VzZURyYWc6IGZ1bmN0aW9uKCBldmVudCwgbm9Qcm9wYWdhdGlvbiApIHtcblxuXHRcdC8vIHJlc2V0IGFueSBuZWNlc3NhcnkgY2FjaGVkIHByb3BlcnRpZXMgKHNlZSAjNTAwOSlcblx0XHRpZiAoIHRoaXMuaGFzRml4ZWRBbmNlc3RvciApIHtcblx0XHRcdHRoaXMub2Zmc2V0LnBhcmVudCA9IHRoaXMuX2dldFBhcmVudE9mZnNldCgpO1xuXHRcdH1cblxuXHRcdC8vQ29tcHV0ZSB0aGUgaGVscGVycyBwb3NpdGlvblxuXHRcdHRoaXMucG9zaXRpb24gPSB0aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKCBldmVudCwgdHJ1ZSApO1xuXHRcdHRoaXMucG9zaXRpb25BYnMgPSB0aGlzLl9jb252ZXJ0UG9zaXRpb25UbyggXCJhYnNvbHV0ZVwiICk7XG5cblx0XHQvL0NhbGwgcGx1Z2lucyBhbmQgY2FsbGJhY2tzIGFuZCB1c2UgdGhlIHJlc3VsdGluZyBwb3NpdGlvbiBpZiBzb21ldGhpbmcgaXMgcmV0dXJuZWRcblx0XHRpZiAoICFub1Byb3BhZ2F0aW9uICkge1xuXHRcdFx0dmFyIHVpID0gdGhpcy5fdWlIYXNoKCk7XG5cdFx0XHRpZiAoIHRoaXMuX3RyaWdnZXIoIFwiZHJhZ1wiLCBldmVudCwgdWkgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdHRoaXMuX21vdXNlVXAoIG5ldyAkLkV2ZW50KCBcIm1vdXNldXBcIiwgZXZlbnQgKSApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnBvc2l0aW9uID0gdWkucG9zaXRpb247XG5cdFx0fVxuXG5cdFx0dGhpcy5oZWxwZXJbIDAgXS5zdHlsZS5sZWZ0ID0gdGhpcy5wb3NpdGlvbi5sZWZ0ICsgXCJweFwiO1xuXHRcdHRoaXMuaGVscGVyWyAwIF0uc3R5bGUudG9wID0gdGhpcy5wb3NpdGlvbi50b3AgKyBcInB4XCI7XG5cblx0XHRpZiAoICQudWkuZGRtYW5hZ2VyICkge1xuXHRcdFx0JC51aS5kZG1hbmFnZXIuZHJhZyggdGhpcywgZXZlbnQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0X21vdXNlU3RvcDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0Ly9JZiB3ZSBhcmUgdXNpbmcgZHJvcHBhYmxlcywgaW5mb3JtIHRoZSBtYW5hZ2VyIGFib3V0IHRoZSBkcm9wXG5cdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0ZHJvcHBlZCA9IGZhbHNlO1xuXHRcdGlmICggJC51aS5kZG1hbmFnZXIgJiYgIXRoaXMub3B0aW9ucy5kcm9wQmVoYXZpb3VyICkge1xuXHRcdFx0ZHJvcHBlZCA9ICQudWkuZGRtYW5hZ2VyLmRyb3AoIHRoaXMsIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0Ly9pZiBhIGRyb3AgY29tZXMgZnJvbSBvdXRzaWRlIChhIHNvcnRhYmxlKVxuXHRcdGlmICggdGhpcy5kcm9wcGVkICkge1xuXHRcdFx0ZHJvcHBlZCA9IHRoaXMuZHJvcHBlZDtcblx0XHRcdHRoaXMuZHJvcHBlZCA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmICggKCB0aGlzLm9wdGlvbnMucmV2ZXJ0ID09PSBcImludmFsaWRcIiAmJiAhZHJvcHBlZCApIHx8XG5cdFx0XHRcdCggdGhpcy5vcHRpb25zLnJldmVydCA9PT0gXCJ2YWxpZFwiICYmIGRyb3BwZWQgKSB8fFxuXHRcdFx0XHR0aGlzLm9wdGlvbnMucmV2ZXJ0ID09PSB0cnVlIHx8ICggJC5pc0Z1bmN0aW9uKCB0aGlzLm9wdGlvbnMucmV2ZXJ0ICkgJiZcblx0XHRcdFx0dGhpcy5vcHRpb25zLnJldmVydC5jYWxsKCB0aGlzLmVsZW1lbnQsIGRyb3BwZWQgKSApXG5cdFx0KSB7XG5cdFx0XHQkKCB0aGlzLmhlbHBlciApLmFuaW1hdGUoXG5cdFx0XHRcdHRoaXMub3JpZ2luYWxQb3NpdGlvbixcblx0XHRcdFx0cGFyc2VJbnQoIHRoaXMub3B0aW9ucy5yZXZlcnREdXJhdGlvbiwgMTAgKSxcblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGF0Ll90cmlnZ2VyKCBcInN0b3BcIiwgZXZlbnQgKSAhPT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHR0aGF0Ll9jbGVhcigpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCB0aGlzLl90cmlnZ2VyKCBcInN0b3BcIiwgZXZlbnQgKSAhPT0gZmFsc2UgKSB7XG5cdFx0XHRcdHRoaXMuX2NsZWFyKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdF9tb3VzZVVwOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dGhpcy5fdW5ibG9ja0ZyYW1lcygpO1xuXG5cdFx0Ly8gSWYgdGhlIGRkbWFuYWdlciBpcyB1c2VkIGZvciBkcm9wcGFibGVzLCBpbmZvcm0gdGhlIG1hbmFnZXIgdGhhdCBkcmFnZ2luZyBoYXMgc3RvcHBlZFxuXHRcdC8vIChzZWUgIzUwMDMpXG5cdFx0aWYgKCAkLnVpLmRkbWFuYWdlciApIHtcblx0XHRcdCQudWkuZGRtYW5hZ2VyLmRyYWdTdG9wKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdC8vIE9ubHkgbmVlZCB0byBmb2N1cyBpZiB0aGUgZXZlbnQgb2NjdXJyZWQgb24gdGhlIGRyYWdnYWJsZSBpdHNlbGYsIHNlZSAjMTA1Mjdcblx0XHRpZiAoIHRoaXMuaGFuZGxlRWxlbWVudC5pcyggZXZlbnQudGFyZ2V0ICkgKSB7XG5cblx0XHRcdC8vIFRoZSBpbnRlcmFjdGlvbiBpcyBvdmVyOyB3aGV0aGVyIG9yIG5vdCB0aGUgY2xpY2sgcmVzdWx0ZWQgaW4gYSBkcmFnLFxuXHRcdFx0Ly8gZm9jdXMgdGhlIGVsZW1lbnRcblx0XHRcdHRoaXMuZWxlbWVudC50cmlnZ2VyKCBcImZvY3VzXCIgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gJC51aS5tb3VzZS5wcm90b3R5cGUuX21vdXNlVXAuY2FsbCggdGhpcywgZXZlbnQgKTtcblx0fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9uKCkge1xuXG5cdFx0aWYgKCB0aGlzLmhlbHBlci5pcyggXCIudWktZHJhZ2dhYmxlLWRyYWdnaW5nXCIgKSApIHtcblx0XHRcdHRoaXMuX21vdXNlVXAoIG5ldyAkLkV2ZW50KCBcIm1vdXNldXBcIiwgeyB0YXJnZXQ6IHRoaXMuZWxlbWVudFsgMCBdIH0gKSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9jbGVhcigpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0X2dldEhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHJldHVybiB0aGlzLm9wdGlvbnMuaGFuZGxlID9cblx0XHRcdCEhJCggZXZlbnQudGFyZ2V0ICkuY2xvc2VzdCggdGhpcy5lbGVtZW50LmZpbmQoIHRoaXMub3B0aW9ucy5oYW5kbGUgKSApLmxlbmd0aCA6XG5cdFx0XHR0cnVlO1xuXHR9LFxuXG5cdF9zZXRIYW5kbGVDbGFzc05hbWU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuaGFuZGxlRWxlbWVudCA9IHRoaXMub3B0aW9ucy5oYW5kbGUgP1xuXHRcdFx0dGhpcy5lbGVtZW50LmZpbmQoIHRoaXMub3B0aW9ucy5oYW5kbGUgKSA6IHRoaXMuZWxlbWVudDtcblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5oYW5kbGVFbGVtZW50LCBcInVpLWRyYWdnYWJsZS1oYW5kbGVcIiApO1xuXHR9LFxuXG5cdF9yZW1vdmVIYW5kbGVDbGFzc05hbWU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuX3JlbW92ZUNsYXNzKCB0aGlzLmhhbmRsZUVsZW1lbnQsIFwidWktZHJhZ2dhYmxlLWhhbmRsZVwiICk7XG5cdH0sXG5cblx0X2NyZWF0ZUhlbHBlcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0dmFyIG8gPSB0aGlzLm9wdGlvbnMsXG5cdFx0XHRoZWxwZXJJc0Z1bmN0aW9uID0gJC5pc0Z1bmN0aW9uKCBvLmhlbHBlciApLFxuXHRcdFx0aGVscGVyID0gaGVscGVySXNGdW5jdGlvbiA/XG5cdFx0XHRcdCQoIG8uaGVscGVyLmFwcGx5KCB0aGlzLmVsZW1lbnRbIDAgXSwgWyBldmVudCBdICkgKSA6XG5cdFx0XHRcdCggby5oZWxwZXIgPT09IFwiY2xvbmVcIiA/XG5cdFx0XHRcdFx0dGhpcy5lbGVtZW50LmNsb25lKCkucmVtb3ZlQXR0ciggXCJpZFwiICkgOlxuXHRcdFx0XHRcdHRoaXMuZWxlbWVudCApO1xuXG5cdFx0aWYgKCAhaGVscGVyLnBhcmVudHMoIFwiYm9keVwiICkubGVuZ3RoICkge1xuXHRcdFx0aGVscGVyLmFwcGVuZFRvKCAoIG8uYXBwZW5kVG8gPT09IFwicGFyZW50XCIgP1xuXHRcdFx0XHR0aGlzLmVsZW1lbnRbIDAgXS5wYXJlbnROb2RlIDpcblx0XHRcdFx0by5hcHBlbmRUbyApICk7XG5cdFx0fVxuXG5cdFx0Ly8gSHR0cDovL2J1Z3MuanF1ZXJ5dWkuY29tL3RpY2tldC85NDQ2XG5cdFx0Ly8gYSBoZWxwZXIgZnVuY3Rpb24gY2FuIHJldHVybiB0aGUgb3JpZ2luYWwgZWxlbWVudFxuXHRcdC8vIHdoaWNoIHdvdWxkbid0IGhhdmUgYmVlbiBzZXQgdG8gcmVsYXRpdmUgaW4gX2NyZWF0ZVxuXHRcdGlmICggaGVscGVySXNGdW5jdGlvbiAmJiBoZWxwZXJbIDAgXSA9PT0gdGhpcy5lbGVtZW50WyAwIF0gKSB7XG5cdFx0XHR0aGlzLl9zZXRQb3NpdGlvblJlbGF0aXZlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKCBoZWxwZXJbIDAgXSAhPT0gdGhpcy5lbGVtZW50WyAwIF0gJiZcblx0XHRcdFx0ISggLyhmaXhlZHxhYnNvbHV0ZSkvICkudGVzdCggaGVscGVyLmNzcyggXCJwb3NpdGlvblwiICkgKSApIHtcblx0XHRcdGhlbHBlci5jc3MoIFwicG9zaXRpb25cIiwgXCJhYnNvbHV0ZVwiICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGhlbHBlcjtcblxuXHR9LFxuXG5cdF9zZXRQb3NpdGlvblJlbGF0aXZlOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICEoIC9eKD86cnxhfGYpLyApLnRlc3QoIHRoaXMuZWxlbWVudC5jc3MoIFwicG9zaXRpb25cIiApICkgKSB7XG5cdFx0XHR0aGlzLmVsZW1lbnRbIDAgXS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0XHR9XG5cdH0sXG5cblx0X2FkanVzdE9mZnNldEZyb21IZWxwZXI6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0aWYgKCB0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0b2JqID0gb2JqLnNwbGl0KCBcIiBcIiApO1xuXHRcdH1cblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIG9iaiApICkge1xuXHRcdFx0b2JqID0geyBsZWZ0OiArb2JqWyAwIF0sIHRvcDogK29ialsgMSBdIHx8IDAgfTtcblx0XHR9XG5cdFx0aWYgKCBcImxlZnRcIiBpbiBvYmogKSB7XG5cdFx0XHR0aGlzLm9mZnNldC5jbGljay5sZWZ0ID0gb2JqLmxlZnQgKyB0aGlzLm1hcmdpbnMubGVmdDtcblx0XHR9XG5cdFx0aWYgKCBcInJpZ2h0XCIgaW4gb2JqICkge1xuXHRcdFx0dGhpcy5vZmZzZXQuY2xpY2subGVmdCA9IHRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLSBvYmoucmlnaHQgKyB0aGlzLm1hcmdpbnMubGVmdDtcblx0XHR9XG5cdFx0aWYgKCBcInRvcFwiIGluIG9iaiApIHtcblx0XHRcdHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA9IG9iai50b3AgKyB0aGlzLm1hcmdpbnMudG9wO1xuXHRcdH1cblx0XHRpZiAoIFwiYm90dG9tXCIgaW4gb2JqICkge1xuXHRcdFx0dGhpcy5vZmZzZXQuY2xpY2sudG9wID0gdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQgLSBvYmouYm90dG9tICsgdGhpcy5tYXJnaW5zLnRvcDtcblx0XHR9XG5cdH0sXG5cblx0X2lzUm9vdE5vZGU6IGZ1bmN0aW9uKCBlbGVtZW50ICkge1xuXHRcdHJldHVybiAoIC8oaHRtbHxib2R5KS9pICkudGVzdCggZWxlbWVudC50YWdOYW1lICkgfHwgZWxlbWVudCA9PT0gdGhpcy5kb2N1bWVudFsgMCBdO1xuXHR9LFxuXG5cdF9nZXRQYXJlbnRPZmZzZXQ6IGZ1bmN0aW9uKCkge1xuXG5cdFx0Ly9HZXQgdGhlIG9mZnNldFBhcmVudCBhbmQgY2FjaGUgaXRzIHBvc2l0aW9uXG5cdFx0dmFyIHBvID0gdGhpcy5vZmZzZXRQYXJlbnQub2Zmc2V0KCksXG5cdFx0XHRkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRbIDAgXTtcblxuXHRcdC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2Ugd2hlcmUgd2UgbmVlZCB0byBtb2RpZnkgYSBvZmZzZXQgY2FsY3VsYXRlZCBvbiBzdGFydCwgc2luY2UgdGhlXG5cdFx0Ly8gZm9sbG93aW5nIGhhcHBlbmVkOlxuXHRcdC8vIDEuIFRoZSBwb3NpdGlvbiBvZiB0aGUgaGVscGVyIGlzIGFic29sdXRlLCBzbyBpdCdzIHBvc2l0aW9uIGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlXG5cdFx0Ly8gbmV4dCBwb3NpdGlvbmVkIHBhcmVudFxuXHRcdC8vIDIuIFRoZSBhY3R1YWwgb2Zmc2V0IHBhcmVudCBpcyBhIGNoaWxkIG9mIHRoZSBzY3JvbGwgcGFyZW50LCBhbmQgdGhlIHNjcm9sbCBwYXJlbnQgaXNuJ3Rcblx0XHQvLyB0aGUgZG9jdW1lbnQsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHNjcm9sbCBpcyBpbmNsdWRlZCBpbiB0aGUgaW5pdGlhbCBjYWxjdWxhdGlvbiBvZiB0aGVcblx0XHQvLyBvZmZzZXQgb2YgdGhlIHBhcmVudCwgYW5kIG5ldmVyIHJlY2FsY3VsYXRlZCB1cG9uIGRyYWdcblx0XHRpZiAoIHRoaXMuY3NzUG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiAmJiB0aGlzLnNjcm9sbFBhcmVudFsgMCBdICE9PSBkb2N1bWVudCAmJlxuXHRcdFx0XHQkLmNvbnRhaW5zKCB0aGlzLnNjcm9sbFBhcmVudFsgMCBdLCB0aGlzLm9mZnNldFBhcmVudFsgMCBdICkgKSB7XG5cdFx0XHRwby5sZWZ0ICs9IHRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTtcblx0XHRcdHBvLnRvcCArPSB0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuX2lzUm9vdE5vZGUoIHRoaXMub2Zmc2V0UGFyZW50WyAwIF0gKSApIHtcblx0XHRcdHBvID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBwby50b3AgKyAoIHBhcnNlSW50KCB0aGlzLm9mZnNldFBhcmVudC5jc3MoIFwiYm9yZGVyVG9wV2lkdGhcIiApLCAxMCApIHx8IDAgKSxcblx0XHRcdGxlZnQ6IHBvLmxlZnQgKyAoIHBhcnNlSW50KCB0aGlzLm9mZnNldFBhcmVudC5jc3MoIFwiYm9yZGVyTGVmdFdpZHRoXCIgKSwgMTAgKSB8fCAwIClcblx0XHR9O1xuXG5cdH0sXG5cblx0X2dldFJlbGF0aXZlT2Zmc2V0OiBmdW5jdGlvbigpIHtcblx0XHRpZiAoIHRoaXMuY3NzUG9zaXRpb24gIT09IFwicmVsYXRpdmVcIiApIHtcblx0XHRcdHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9O1xuXHRcdH1cblxuXHRcdHZhciBwID0gdGhpcy5lbGVtZW50LnBvc2l0aW9uKCksXG5cdFx0XHRzY3JvbGxJc1Jvb3ROb2RlID0gdGhpcy5faXNSb290Tm9kZSggdGhpcy5zY3JvbGxQYXJlbnRbIDAgXSApO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogcC50b3AgLSAoIHBhcnNlSW50KCB0aGlzLmhlbHBlci5jc3MoIFwidG9wXCIgKSwgMTAgKSB8fCAwICkgK1xuXHRcdFx0XHQoICFzY3JvbGxJc1Jvb3ROb2RlID8gdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCkgOiAwICksXG5cdFx0XHRsZWZ0OiBwLmxlZnQgLSAoIHBhcnNlSW50KCB0aGlzLmhlbHBlci5jc3MoIFwibGVmdFwiICksIDEwICkgfHwgMCApICtcblx0XHRcdFx0KCAhc2Nyb2xsSXNSb290Tm9kZSA/IHRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKSA6IDAgKVxuXHRcdH07XG5cblx0fSxcblxuXHRfY2FjaGVNYXJnaW5zOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLm1hcmdpbnMgPSB7XG5cdFx0XHRsZWZ0OiAoIHBhcnNlSW50KCB0aGlzLmVsZW1lbnQuY3NzKCBcIm1hcmdpbkxlZnRcIiApLCAxMCApIHx8IDAgKSxcblx0XHRcdHRvcDogKCBwYXJzZUludCggdGhpcy5lbGVtZW50LmNzcyggXCJtYXJnaW5Ub3BcIiApLCAxMCApIHx8IDAgKSxcblx0XHRcdHJpZ2h0OiAoIHBhcnNlSW50KCB0aGlzLmVsZW1lbnQuY3NzKCBcIm1hcmdpblJpZ2h0XCIgKSwgMTAgKSB8fCAwICksXG5cdFx0XHRib3R0b206ICggcGFyc2VJbnQoIHRoaXMuZWxlbWVudC5jc3MoIFwibWFyZ2luQm90dG9tXCIgKSwgMTAgKSB8fCAwIClcblx0XHR9O1xuXHR9LFxuXG5cdF9jYWNoZUhlbHBlclByb3BvcnRpb25zOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmhlbHBlclByb3BvcnRpb25zID0ge1xuXHRcdFx0d2lkdGg6IHRoaXMuaGVscGVyLm91dGVyV2lkdGgoKSxcblx0XHRcdGhlaWdodDogdGhpcy5oZWxwZXIub3V0ZXJIZWlnaHQoKVxuXHRcdH07XG5cdH0sXG5cblx0X3NldENvbnRhaW5tZW50OiBmdW5jdGlvbigpIHtcblxuXHRcdHZhciBpc1VzZXJTY3JvbGxhYmxlLCBjLCBjZSxcblx0XHRcdG8gPSB0aGlzLm9wdGlvbnMsXG5cdFx0XHRkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRbIDAgXTtcblxuXHRcdHRoaXMucmVsYXRpdmVDb250YWluZXIgPSBudWxsO1xuXG5cdFx0aWYgKCAhby5jb250YWlubWVudCApIHtcblx0XHRcdHRoaXMuY29udGFpbm1lbnQgPSBudWxsO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggby5jb250YWlubWVudCA9PT0gXCJ3aW5kb3dcIiApIHtcblx0XHRcdHRoaXMuY29udGFpbm1lbnQgPSBbXG5cdFx0XHRcdCQoIHdpbmRvdyApLnNjcm9sbExlZnQoKSAtIHRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQgLSB0aGlzLm9mZnNldC5wYXJlbnQubGVmdCxcblx0XHRcdFx0JCggd2luZG93ICkuc2Nyb2xsVG9wKCkgLSB0aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AgLSB0aGlzLm9mZnNldC5wYXJlbnQudG9wLFxuXHRcdFx0XHQkKCB3aW5kb3cgKS5zY3JvbGxMZWZ0KCkgKyAkKCB3aW5kb3cgKS53aWR0aCgpIC1cblx0XHRcdFx0XHR0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoIC0gdGhpcy5tYXJnaW5zLmxlZnQsXG5cdFx0XHRcdCQoIHdpbmRvdyApLnNjcm9sbFRvcCgpICtcblx0XHRcdFx0XHQoICQoIHdpbmRvdyApLmhlaWdodCgpIHx8IGRvY3VtZW50LmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHQgKSAtXG5cdFx0XHRcdFx0dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQgLSB0aGlzLm1hcmdpbnMudG9wXG5cdFx0XHRdO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggby5jb250YWlubWVudCA9PT0gXCJkb2N1bWVudFwiICkge1xuXHRcdFx0dGhpcy5jb250YWlubWVudCA9IFtcblx0XHRcdFx0MCxcblx0XHRcdFx0MCxcblx0XHRcdFx0JCggZG9jdW1lbnQgKS53aWR0aCgpIC0gdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCAtIHRoaXMubWFyZ2lucy5sZWZ0LFxuXHRcdFx0XHQoICQoIGRvY3VtZW50ICkuaGVpZ2h0KCkgfHwgZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCApIC1cblx0XHRcdFx0XHR0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCAtIHRoaXMubWFyZ2lucy50b3Bcblx0XHRcdF07XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBvLmNvbnRhaW5tZW50LmNvbnN0cnVjdG9yID09PSBBcnJheSApIHtcblx0XHRcdHRoaXMuY29udGFpbm1lbnQgPSBvLmNvbnRhaW5tZW50O1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggby5jb250YWlubWVudCA9PT0gXCJwYXJlbnRcIiApIHtcblx0XHRcdG8uY29udGFpbm1lbnQgPSB0aGlzLmhlbHBlclsgMCBdLnBhcmVudE5vZGU7XG5cdFx0fVxuXG5cdFx0YyA9ICQoIG8uY29udGFpbm1lbnQgKTtcblx0XHRjZSA9IGNbIDAgXTtcblxuXHRcdGlmICggIWNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlzVXNlclNjcm9sbGFibGUgPSAvKHNjcm9sbHxhdXRvKS8udGVzdCggYy5jc3MoIFwib3ZlcmZsb3dcIiApICk7XG5cblx0XHR0aGlzLmNvbnRhaW5tZW50ID0gW1xuXHRcdFx0KCBwYXJzZUludCggYy5jc3MoIFwiYm9yZGVyTGVmdFdpZHRoXCIgKSwgMTAgKSB8fCAwICkgK1xuXHRcdFx0XHQoIHBhcnNlSW50KCBjLmNzcyggXCJwYWRkaW5nTGVmdFwiICksIDEwICkgfHwgMCApLFxuXHRcdFx0KCBwYXJzZUludCggYy5jc3MoIFwiYm9yZGVyVG9wV2lkdGhcIiApLCAxMCApIHx8IDAgKSArXG5cdFx0XHRcdCggcGFyc2VJbnQoIGMuY3NzKCBcInBhZGRpbmdUb3BcIiApLCAxMCApIHx8IDAgKSxcblx0XHRcdCggaXNVc2VyU2Nyb2xsYWJsZSA/IE1hdGgubWF4KCBjZS5zY3JvbGxXaWR0aCwgY2Uub2Zmc2V0V2lkdGggKSA6IGNlLm9mZnNldFdpZHRoICkgLVxuXHRcdFx0XHQoIHBhcnNlSW50KCBjLmNzcyggXCJib3JkZXJSaWdodFdpZHRoXCIgKSwgMTAgKSB8fCAwICkgLVxuXHRcdFx0XHQoIHBhcnNlSW50KCBjLmNzcyggXCJwYWRkaW5nUmlnaHRcIiApLCAxMCApIHx8IDAgKSAtXG5cdFx0XHRcdHRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLVxuXHRcdFx0XHR0aGlzLm1hcmdpbnMubGVmdCAtXG5cdFx0XHRcdHRoaXMubWFyZ2lucy5yaWdodCxcblx0XHRcdCggaXNVc2VyU2Nyb2xsYWJsZSA/IE1hdGgubWF4KCBjZS5zY3JvbGxIZWlnaHQsIGNlLm9mZnNldEhlaWdodCApIDogY2Uub2Zmc2V0SGVpZ2h0ICkgLVxuXHRcdFx0XHQoIHBhcnNlSW50KCBjLmNzcyggXCJib3JkZXJCb3R0b21XaWR0aFwiICksIDEwICkgfHwgMCApIC1cblx0XHRcdFx0KCBwYXJzZUludCggYy5jc3MoIFwicGFkZGluZ0JvdHRvbVwiICksIDEwICkgfHwgMCApIC1cblx0XHRcdFx0dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQgLVxuXHRcdFx0XHR0aGlzLm1hcmdpbnMudG9wIC1cblx0XHRcdFx0dGhpcy5tYXJnaW5zLmJvdHRvbVxuXHRcdF07XG5cdFx0dGhpcy5yZWxhdGl2ZUNvbnRhaW5lciA9IGM7XG5cdH0sXG5cblx0X2NvbnZlcnRQb3NpdGlvblRvOiBmdW5jdGlvbiggZCwgcG9zICkge1xuXG5cdFx0aWYgKCAhcG9zICkge1xuXHRcdFx0cG9zID0gdGhpcy5wb3NpdGlvbjtcblx0XHR9XG5cblx0XHR2YXIgbW9kID0gZCA9PT0gXCJhYnNvbHV0ZVwiID8gMSA6IC0xLFxuXHRcdFx0c2Nyb2xsSXNSb290Tm9kZSA9IHRoaXMuX2lzUm9vdE5vZGUoIHRoaXMuc2Nyb2xsUGFyZW50WyAwIF0gKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IChcblxuXHRcdFx0XHQvLyBUaGUgYWJzb2x1dGUgbW91c2UgcG9zaXRpb25cblx0XHRcdFx0cG9zLnRvcFx0K1xuXG5cdFx0XHRcdC8vIE9ubHkgZm9yIHJlbGF0aXZlIHBvc2l0aW9uZWQgbm9kZXM6IFJlbGF0aXZlIG9mZnNldCBmcm9tIGVsZW1lbnQgdG8gb2Zmc2V0IHBhcmVudFxuXHRcdFx0XHR0aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AgKiBtb2QgK1xuXG5cdFx0XHRcdC8vIFRoZSBvZmZzZXRQYXJlbnQncyBvZmZzZXQgd2l0aG91dCBib3JkZXJzIChvZmZzZXQgKyBib3JkZXIpXG5cdFx0XHRcdHRoaXMub2Zmc2V0LnBhcmVudC50b3AgKiBtb2QgLVxuXHRcdFx0XHQoICggdGhpcy5jc3NQb3NpdGlvbiA9PT0gXCJmaXhlZFwiID9cblx0XHRcdFx0XHQtdGhpcy5vZmZzZXQuc2Nyb2xsLnRvcCA6XG5cdFx0XHRcdFx0KCBzY3JvbGxJc1Jvb3ROb2RlID8gMCA6IHRoaXMub2Zmc2V0LnNjcm9sbC50b3AgKSApICogbW9kIClcblx0XHRcdCksXG5cdFx0XHRsZWZ0OiAoXG5cblx0XHRcdFx0Ly8gVGhlIGFic29sdXRlIG1vdXNlIHBvc2l0aW9uXG5cdFx0XHRcdHBvcy5sZWZ0ICtcblxuXHRcdFx0XHQvLyBPbmx5IGZvciByZWxhdGl2ZSBwb3NpdGlvbmVkIG5vZGVzOiBSZWxhdGl2ZSBvZmZzZXQgZnJvbSBlbGVtZW50IHRvIG9mZnNldCBwYXJlbnRcblx0XHRcdFx0dGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdCAqIG1vZCArXG5cblx0XHRcdFx0Ly8gVGhlIG9mZnNldFBhcmVudCdzIG9mZnNldCB3aXRob3V0IGJvcmRlcnMgKG9mZnNldCArIGJvcmRlcilcblx0XHRcdFx0dGhpcy5vZmZzZXQucGFyZW50LmxlZnQgKiBtb2RcdC1cblx0XHRcdFx0KCAoIHRoaXMuY3NzUG9zaXRpb24gPT09IFwiZml4ZWRcIiA/XG5cdFx0XHRcdFx0LXRoaXMub2Zmc2V0LnNjcm9sbC5sZWZ0IDpcblx0XHRcdFx0XHQoIHNjcm9sbElzUm9vdE5vZGUgPyAwIDogdGhpcy5vZmZzZXQuc2Nyb2xsLmxlZnQgKSApICogbW9kIClcblx0XHRcdClcblx0XHR9O1xuXG5cdH0sXG5cblx0X2dlbmVyYXRlUG9zaXRpb246IGZ1bmN0aW9uKCBldmVudCwgY29uc3RyYWluUG9zaXRpb24gKSB7XG5cblx0XHR2YXIgY29udGFpbm1lbnQsIGNvLCB0b3AsIGxlZnQsXG5cdFx0XHRvID0gdGhpcy5vcHRpb25zLFxuXHRcdFx0c2Nyb2xsSXNSb290Tm9kZSA9IHRoaXMuX2lzUm9vdE5vZGUoIHRoaXMuc2Nyb2xsUGFyZW50WyAwIF0gKSxcblx0XHRcdHBhZ2VYID0gZXZlbnQucGFnZVgsXG5cdFx0XHRwYWdlWSA9IGV2ZW50LnBhZ2VZO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIHNjcm9sbFxuXHRcdGlmICggIXNjcm9sbElzUm9vdE5vZGUgfHwgIXRoaXMub2Zmc2V0LnNjcm9sbCApIHtcblx0XHRcdHRoaXMub2Zmc2V0LnNjcm9sbCA9IHtcblx0XHRcdFx0dG9wOiB0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSxcblx0XHRcdFx0bGVmdDogdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8qXG5cdFx0ICogLSBQb3NpdGlvbiBjb25zdHJhaW5pbmcgLVxuXHRcdCAqIENvbnN0cmFpbiB0aGUgcG9zaXRpb24gdG8gYSBtaXggb2YgZ3JpZCwgY29udGFpbm1lbnQuXG5cdFx0ICovXG5cblx0XHQvLyBJZiB3ZSBhcmUgbm90IGRyYWdnaW5nIHlldCwgd2Ugd29uJ3QgY2hlY2sgZm9yIG9wdGlvbnNcblx0XHRpZiAoIGNvbnN0cmFpblBvc2l0aW9uICkge1xuXHRcdFx0aWYgKCB0aGlzLmNvbnRhaW5tZW50ICkge1xuXHRcdFx0XHRpZiAoIHRoaXMucmVsYXRpdmVDb250YWluZXIgKSB7XG5cdFx0XHRcdFx0Y28gPSB0aGlzLnJlbGF0aXZlQ29udGFpbmVyLm9mZnNldCgpO1xuXHRcdFx0XHRcdGNvbnRhaW5tZW50ID0gW1xuXHRcdFx0XHRcdFx0dGhpcy5jb250YWlubWVudFsgMCBdICsgY28ubGVmdCxcblx0XHRcdFx0XHRcdHRoaXMuY29udGFpbm1lbnRbIDEgXSArIGNvLnRvcCxcblx0XHRcdFx0XHRcdHRoaXMuY29udGFpbm1lbnRbIDIgXSArIGNvLmxlZnQsXG5cdFx0XHRcdFx0XHR0aGlzLmNvbnRhaW5tZW50WyAzIF0gKyBjby50b3Bcblx0XHRcdFx0XHRdO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRhaW5tZW50ID0gdGhpcy5jb250YWlubWVudDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggZXZlbnQucGFnZVggLSB0aGlzLm9mZnNldC5jbGljay5sZWZ0IDwgY29udGFpbm1lbnRbIDAgXSApIHtcblx0XHRcdFx0XHRwYWdlWCA9IGNvbnRhaW5tZW50WyAwIF0gKyB0aGlzLm9mZnNldC5jbGljay5sZWZ0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggZXZlbnQucGFnZVkgLSB0aGlzLm9mZnNldC5jbGljay50b3AgPCBjb250YWlubWVudFsgMSBdICkge1xuXHRcdFx0XHRcdHBhZ2VZID0gY29udGFpbm1lbnRbIDEgXSArIHRoaXMub2Zmc2V0LmNsaWNrLnRvcDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIGV2ZW50LnBhZ2VYIC0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCA+IGNvbnRhaW5tZW50WyAyIF0gKSB7XG5cdFx0XHRcdFx0cGFnZVggPSBjb250YWlubWVudFsgMiBdICsgdGhpcy5vZmZzZXQuY2xpY2subGVmdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIGV2ZW50LnBhZ2VZIC0gdGhpcy5vZmZzZXQuY2xpY2sudG9wID4gY29udGFpbm1lbnRbIDMgXSApIHtcblx0XHRcdFx0XHRwYWdlWSA9IGNvbnRhaW5tZW50WyAzIF0gKyB0aGlzLm9mZnNldC5jbGljay50b3A7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBvLmdyaWQgKSB7XG5cblx0XHRcdFx0Ly9DaGVjayBmb3IgZ3JpZCBlbGVtZW50cyBzZXQgdG8gMCB0byBwcmV2ZW50IGRpdmlkZSBieSAwIGVycm9yIGNhdXNpbmcgaW52YWxpZFxuXHRcdFx0XHQvLyBhcmd1bWVudCBlcnJvcnMgaW4gSUUgKHNlZSB0aWNrZXQgIzY5NTApXG5cdFx0XHRcdHRvcCA9IG8uZ3JpZFsgMSBdID8gdGhpcy5vcmlnaW5hbFBhZ2VZICsgTWF0aC5yb3VuZCggKCBwYWdlWSAtXG5cdFx0XHRcdFx0dGhpcy5vcmlnaW5hbFBhZ2VZICkgLyBvLmdyaWRbIDEgXSApICogby5ncmlkWyAxIF0gOiB0aGlzLm9yaWdpbmFsUGFnZVk7XG5cdFx0XHRcdHBhZ2VZID0gY29udGFpbm1lbnQgPyAoICggdG9wIC0gdGhpcy5vZmZzZXQuY2xpY2sudG9wID49IGNvbnRhaW5tZW50WyAxIF0gfHxcblx0XHRcdFx0XHR0b3AgLSB0aGlzLm9mZnNldC5jbGljay50b3AgPiBjb250YWlubWVudFsgMyBdICkgP1xuXHRcdFx0XHRcdFx0dG9wIDpcblx0XHRcdFx0XHRcdCggKCB0b3AgLSB0aGlzLm9mZnNldC5jbGljay50b3AgPj0gY29udGFpbm1lbnRbIDEgXSApID9cblx0XHRcdFx0XHRcdFx0dG9wIC0gby5ncmlkWyAxIF0gOiB0b3AgKyBvLmdyaWRbIDEgXSApICkgOiB0b3A7XG5cblx0XHRcdFx0bGVmdCA9IG8uZ3JpZFsgMCBdID8gdGhpcy5vcmlnaW5hbFBhZ2VYICtcblx0XHRcdFx0XHRNYXRoLnJvdW5kKCAoIHBhZ2VYIC0gdGhpcy5vcmlnaW5hbFBhZ2VYICkgLyBvLmdyaWRbIDAgXSApICogby5ncmlkWyAwIF0gOlxuXHRcdFx0XHRcdHRoaXMub3JpZ2luYWxQYWdlWDtcblx0XHRcdFx0cGFnZVggPSBjb250YWlubWVudCA/ICggKCBsZWZ0IC0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCA+PSBjb250YWlubWVudFsgMCBdIHx8XG5cdFx0XHRcdFx0bGVmdCAtIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQgPiBjb250YWlubWVudFsgMiBdICkgP1xuXHRcdFx0XHRcdFx0bGVmdCA6XG5cdFx0XHRcdFx0XHQoICggbGVmdCAtIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQgPj0gY29udGFpbm1lbnRbIDAgXSApID9cblx0XHRcdFx0XHRcdFx0bGVmdCAtIG8uZ3JpZFsgMCBdIDogbGVmdCArIG8uZ3JpZFsgMCBdICkgKSA6IGxlZnQ7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggby5heGlzID09PSBcInlcIiApIHtcblx0XHRcdFx0cGFnZVggPSB0aGlzLm9yaWdpbmFsUGFnZVg7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggby5heGlzID09PSBcInhcIiApIHtcblx0XHRcdFx0cGFnZVkgPSB0aGlzLm9yaWdpbmFsUGFnZVk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogKFxuXG5cdFx0XHRcdC8vIFRoZSBhYnNvbHV0ZSBtb3VzZSBwb3NpdGlvblxuXHRcdFx0XHRwYWdlWSAtXG5cblx0XHRcdFx0Ly8gQ2xpY2sgb2Zmc2V0IChyZWxhdGl2ZSB0byB0aGUgZWxlbWVudClcblx0XHRcdFx0dGhpcy5vZmZzZXQuY2xpY2sudG9wIC1cblxuXHRcdFx0XHQvLyBPbmx5IGZvciByZWxhdGl2ZSBwb3NpdGlvbmVkIG5vZGVzOiBSZWxhdGl2ZSBvZmZzZXQgZnJvbSBlbGVtZW50IHRvIG9mZnNldCBwYXJlbnRcblx0XHRcdFx0dGhpcy5vZmZzZXQucmVsYXRpdmUudG9wIC1cblxuXHRcdFx0XHQvLyBUaGUgb2Zmc2V0UGFyZW50J3Mgb2Zmc2V0IHdpdGhvdXQgYm9yZGVycyAob2Zmc2V0ICsgYm9yZGVyKVxuXHRcdFx0XHR0aGlzLm9mZnNldC5wYXJlbnQudG9wICtcblx0XHRcdFx0KCB0aGlzLmNzc1Bvc2l0aW9uID09PSBcImZpeGVkXCIgP1xuXHRcdFx0XHRcdC10aGlzLm9mZnNldC5zY3JvbGwudG9wIDpcblx0XHRcdFx0XHQoIHNjcm9sbElzUm9vdE5vZGUgPyAwIDogdGhpcy5vZmZzZXQuc2Nyb2xsLnRvcCApIClcblx0XHRcdCksXG5cdFx0XHRsZWZ0OiAoXG5cblx0XHRcdFx0Ly8gVGhlIGFic29sdXRlIG1vdXNlIHBvc2l0aW9uXG5cdFx0XHRcdHBhZ2VYIC1cblxuXHRcdFx0XHQvLyBDbGljayBvZmZzZXQgKHJlbGF0aXZlIHRvIHRoZSBlbGVtZW50KVxuXHRcdFx0XHR0aGlzLm9mZnNldC5jbGljay5sZWZ0IC1cblxuXHRcdFx0XHQvLyBPbmx5IGZvciByZWxhdGl2ZSBwb3NpdGlvbmVkIG5vZGVzOiBSZWxhdGl2ZSBvZmZzZXQgZnJvbSBlbGVtZW50IHRvIG9mZnNldCBwYXJlbnRcblx0XHRcdFx0dGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdCAtXG5cblx0XHRcdFx0Ly8gVGhlIG9mZnNldFBhcmVudCdzIG9mZnNldCB3aXRob3V0IGJvcmRlcnMgKG9mZnNldCArIGJvcmRlcilcblx0XHRcdFx0dGhpcy5vZmZzZXQucGFyZW50LmxlZnQgK1xuXHRcdFx0XHQoIHRoaXMuY3NzUG9zaXRpb24gPT09IFwiZml4ZWRcIiA/XG5cdFx0XHRcdFx0LXRoaXMub2Zmc2V0LnNjcm9sbC5sZWZ0IDpcblx0XHRcdFx0XHQoIHNjcm9sbElzUm9vdE5vZGUgPyAwIDogdGhpcy5vZmZzZXQuc2Nyb2xsLmxlZnQgKSApXG5cdFx0XHQpXG5cdFx0fTtcblxuXHR9LFxuXG5cdF9jbGVhcjogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIHRoaXMuaGVscGVyLCBcInVpLWRyYWdnYWJsZS1kcmFnZ2luZ1wiICk7XG5cdFx0aWYgKCB0aGlzLmhlbHBlclsgMCBdICE9PSB0aGlzLmVsZW1lbnRbIDAgXSAmJiAhdGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsICkge1xuXHRcdFx0dGhpcy5oZWxwZXIucmVtb3ZlKCk7XG5cdFx0fVxuXHRcdHRoaXMuaGVscGVyID0gbnVsbDtcblx0XHR0aGlzLmNhbmNlbEhlbHBlclJlbW92YWwgPSBmYWxzZTtcblx0XHRpZiAoIHRoaXMuZGVzdHJveU9uQ2xlYXIgKSB7XG5cdFx0XHR0aGlzLmRlc3Ryb3koKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gRnJvbSBub3cgb24gYnVsayBzdHVmZiAtIG1haW5seSBoZWxwZXJzXG5cblx0X3RyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBldmVudCwgdWkgKSB7XG5cdFx0dWkgPSB1aSB8fCB0aGlzLl91aUhhc2goKTtcblx0XHQkLnVpLnBsdWdpbi5jYWxsKCB0aGlzLCB0eXBlLCBbIGV2ZW50LCB1aSwgdGhpcyBdLCB0cnVlICk7XG5cblx0XHQvLyBBYnNvbHV0ZSBwb3NpdGlvbiBhbmQgb2Zmc2V0IChzZWUgIzY4ODQgKSBoYXZlIHRvIGJlIHJlY2FsY3VsYXRlZCBhZnRlciBwbHVnaW5zXG5cdFx0aWYgKCAvXihkcmFnfHN0YXJ0fHN0b3ApLy50ZXN0KCB0eXBlICkgKSB7XG5cdFx0XHR0aGlzLnBvc2l0aW9uQWJzID0gdGhpcy5fY29udmVydFBvc2l0aW9uVG8oIFwiYWJzb2x1dGVcIiApO1xuXHRcdFx0dWkub2Zmc2V0ID0gdGhpcy5wb3NpdGlvbkFicztcblx0XHR9XG5cdFx0cmV0dXJuICQuV2lkZ2V0LnByb3RvdHlwZS5fdHJpZ2dlci5jYWxsKCB0aGlzLCB0eXBlLCBldmVudCwgdWkgKTtcblx0fSxcblxuXHRwbHVnaW5zOiB7fSxcblxuXHRfdWlIYXNoOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aGVscGVyOiB0aGlzLmhlbHBlcixcblx0XHRcdHBvc2l0aW9uOiB0aGlzLnBvc2l0aW9uLFxuXHRcdFx0b3JpZ2luYWxQb3NpdGlvbjogdGhpcy5vcmlnaW5hbFBvc2l0aW9uLFxuXHRcdFx0b2Zmc2V0OiB0aGlzLnBvc2l0aW9uQWJzXG5cdFx0fTtcblx0fVxuXG59ICk7XG5cbiQudWkucGx1Z2luLmFkZCggXCJkcmFnZ2FibGVcIiwgXCJjb25uZWN0VG9Tb3J0YWJsZVwiLCB7XG5cdHN0YXJ0OiBmdW5jdGlvbiggZXZlbnQsIHVpLCBkcmFnZ2FibGUgKSB7XG5cdFx0dmFyIHVpU29ydGFibGUgPSAkLmV4dGVuZCgge30sIHVpLCB7XG5cdFx0XHRpdGVtOiBkcmFnZ2FibGUuZWxlbWVudFxuXHRcdH0gKTtcblxuXHRcdGRyYWdnYWJsZS5zb3J0YWJsZXMgPSBbXTtcblx0XHQkKCBkcmFnZ2FibGUub3B0aW9ucy5jb25uZWN0VG9Tb3J0YWJsZSApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNvcnRhYmxlID0gJCggdGhpcyApLnNvcnRhYmxlKCBcImluc3RhbmNlXCIgKTtcblxuXHRcdFx0aWYgKCBzb3J0YWJsZSAmJiAhc29ydGFibGUub3B0aW9ucy5kaXNhYmxlZCApIHtcblx0XHRcdFx0ZHJhZ2dhYmxlLnNvcnRhYmxlcy5wdXNoKCBzb3J0YWJsZSApO1xuXG5cdFx0XHRcdC8vIFJlZnJlc2hQb3NpdGlvbnMgaXMgY2FsbGVkIGF0IGRyYWcgc3RhcnQgdG8gcmVmcmVzaCB0aGUgY29udGFpbmVyQ2FjaGVcblx0XHRcdFx0Ly8gd2hpY2ggaXMgdXNlZCBpbiBkcmFnLiBUaGlzIGVuc3VyZXMgaXQncyBpbml0aWFsaXplZCBhbmQgc3luY2hyb25pemVkXG5cdFx0XHRcdC8vIHdpdGggYW55IGNoYW5nZXMgdGhhdCBtaWdodCBoYXZlIGhhcHBlbmVkIG9uIHRoZSBwYWdlIHNpbmNlIGluaXRpYWxpemF0aW9uLlxuXHRcdFx0XHRzb3J0YWJsZS5yZWZyZXNoUG9zaXRpb25zKCk7XG5cdFx0XHRcdHNvcnRhYmxlLl90cmlnZ2VyKCBcImFjdGl2YXRlXCIsIGV2ZW50LCB1aVNvcnRhYmxlICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXHRzdG9wOiBmdW5jdGlvbiggZXZlbnQsIHVpLCBkcmFnZ2FibGUgKSB7XG5cdFx0dmFyIHVpU29ydGFibGUgPSAkLmV4dGVuZCgge30sIHVpLCB7XG5cdFx0XHRpdGVtOiBkcmFnZ2FibGUuZWxlbWVudFxuXHRcdH0gKTtcblxuXHRcdGRyYWdnYWJsZS5jYW5jZWxIZWxwZXJSZW1vdmFsID0gZmFsc2U7XG5cblx0XHQkLmVhY2goIGRyYWdnYWJsZS5zb3J0YWJsZXMsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNvcnRhYmxlID0gdGhpcztcblxuXHRcdFx0aWYgKCBzb3J0YWJsZS5pc092ZXIgKSB7XG5cdFx0XHRcdHNvcnRhYmxlLmlzT3ZlciA9IDA7XG5cblx0XHRcdFx0Ly8gQWxsb3cgdGhpcyBzb3J0YWJsZSB0byBoYW5kbGUgcmVtb3ZpbmcgdGhlIGhlbHBlclxuXHRcdFx0XHRkcmFnZ2FibGUuY2FuY2VsSGVscGVyUmVtb3ZhbCA9IHRydWU7XG5cdFx0XHRcdHNvcnRhYmxlLmNhbmNlbEhlbHBlclJlbW92YWwgPSBmYWxzZTtcblxuXHRcdFx0XHQvLyBVc2UgX3N0b3JlZENTUyBUbyByZXN0b3JlIHByb3BlcnRpZXMgaW4gdGhlIHNvcnRhYmxlLFxuXHRcdFx0XHQvLyBhcyB0aGlzIGFsc28gaGFuZGxlcyByZXZlcnQgKCM5Njc1KSBzaW5jZSB0aGUgZHJhZ2dhYmxlXG5cdFx0XHRcdC8vIG1heSBoYXZlIG1vZGlmaWVkIHRoZW0gaW4gdW5leHBlY3RlZCB3YXlzICgjODgwOSlcblx0XHRcdFx0c29ydGFibGUuX3N0b3JlZENTUyA9IHtcblx0XHRcdFx0XHRwb3NpdGlvbjogc29ydGFibGUucGxhY2Vob2xkZXIuY3NzKCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdFx0XHR0b3A6IHNvcnRhYmxlLnBsYWNlaG9sZGVyLmNzcyggXCJ0b3BcIiApLFxuXHRcdFx0XHRcdGxlZnQ6IHNvcnRhYmxlLnBsYWNlaG9sZGVyLmNzcyggXCJsZWZ0XCIgKVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdHNvcnRhYmxlLl9tb3VzZVN0b3AoIGV2ZW50ICk7XG5cblx0XHRcdFx0Ly8gT25jZSBkcmFnIGhhcyBlbmRlZCwgdGhlIHNvcnRhYmxlIHNob3VsZCByZXR1cm4gdG8gdXNpbmdcblx0XHRcdFx0Ly8gaXRzIG9yaWdpbmFsIGhlbHBlciwgbm90IHRoZSBzaGFyZWQgaGVscGVyIGZyb20gZHJhZ2dhYmxlXG5cdFx0XHRcdHNvcnRhYmxlLm9wdGlvbnMuaGVscGVyID0gc29ydGFibGUub3B0aW9ucy5faGVscGVyO1xuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IHRoaXMgU29ydGFibGUgZnJvbSByZW1vdmluZyB0aGUgaGVscGVyLlxuXHRcdFx0XHQvLyBIb3dldmVyLCBkb24ndCBzZXQgdGhlIGRyYWdnYWJsZSB0byByZW1vdmUgdGhlIGhlbHBlclxuXHRcdFx0XHQvLyBlaXRoZXIgYXMgYW5vdGhlciBjb25uZWN0ZWQgU29ydGFibGUgbWF5IHlldCBoYW5kbGUgdGhlIHJlbW92YWwuXG5cdFx0XHRcdHNvcnRhYmxlLmNhbmNlbEhlbHBlclJlbW92YWwgPSB0cnVlO1xuXG5cdFx0XHRcdHNvcnRhYmxlLl90cmlnZ2VyKCBcImRlYWN0aXZhdGVcIiwgZXZlbnQsIHVpU29ydGFibGUgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cdGRyYWc6IGZ1bmN0aW9uKCBldmVudCwgdWksIGRyYWdnYWJsZSApIHtcblx0XHQkLmVhY2goIGRyYWdnYWJsZS5zb3J0YWJsZXMsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGlubmVybW9zdEludGVyc2VjdGluZyA9IGZhbHNlLFxuXHRcdFx0XHRzb3J0YWJsZSA9IHRoaXM7XG5cblx0XHRcdC8vIENvcHkgb3ZlciB2YXJpYWJsZXMgdGhhdCBzb3J0YWJsZSdzIF9pbnRlcnNlY3RzV2l0aCB1c2VzXG5cdFx0XHRzb3J0YWJsZS5wb3NpdGlvbkFicyA9IGRyYWdnYWJsZS5wb3NpdGlvbkFicztcblx0XHRcdHNvcnRhYmxlLmhlbHBlclByb3BvcnRpb25zID0gZHJhZ2dhYmxlLmhlbHBlclByb3BvcnRpb25zO1xuXHRcdFx0c29ydGFibGUub2Zmc2V0LmNsaWNrID0gZHJhZ2dhYmxlLm9mZnNldC5jbGljaztcblxuXHRcdFx0aWYgKCBzb3J0YWJsZS5faW50ZXJzZWN0c1dpdGgoIHNvcnRhYmxlLmNvbnRhaW5lckNhY2hlICkgKSB7XG5cdFx0XHRcdGlubmVybW9zdEludGVyc2VjdGluZyA9IHRydWU7XG5cblx0XHRcdFx0JC5lYWNoKCBkcmFnZ2FibGUuc29ydGFibGVzLCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdC8vIENvcHkgb3ZlciB2YXJpYWJsZXMgdGhhdCBzb3J0YWJsZSdzIF9pbnRlcnNlY3RzV2l0aCB1c2VzXG5cdFx0XHRcdFx0dGhpcy5wb3NpdGlvbkFicyA9IGRyYWdnYWJsZS5wb3NpdGlvbkFicztcblx0XHRcdFx0XHR0aGlzLmhlbHBlclByb3BvcnRpb25zID0gZHJhZ2dhYmxlLmhlbHBlclByb3BvcnRpb25zO1xuXHRcdFx0XHRcdHRoaXMub2Zmc2V0LmNsaWNrID0gZHJhZ2dhYmxlLm9mZnNldC5jbGljaztcblxuXHRcdFx0XHRcdGlmICggdGhpcyAhPT0gc29ydGFibGUgJiZcblx0XHRcdFx0XHRcdFx0dGhpcy5faW50ZXJzZWN0c1dpdGgoIHRoaXMuY29udGFpbmVyQ2FjaGUgKSAmJlxuXHRcdFx0XHRcdFx0XHQkLmNvbnRhaW5zKCBzb3J0YWJsZS5lbGVtZW50WyAwIF0sIHRoaXMuZWxlbWVudFsgMCBdICkgKSB7XG5cdFx0XHRcdFx0XHRpbm5lcm1vc3RJbnRlcnNlY3RpbmcgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gaW5uZXJtb3N0SW50ZXJzZWN0aW5nO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaW5uZXJtb3N0SW50ZXJzZWN0aW5nICkge1xuXG5cdFx0XHRcdC8vIElmIGl0IGludGVyc2VjdHMsIHdlIHVzZSBhIGxpdHRsZSBpc092ZXIgdmFyaWFibGUgYW5kIHNldCBpdCBvbmNlLFxuXHRcdFx0XHQvLyBzbyB0aGF0IHRoZSBtb3ZlLWluIHN0dWZmIGdldHMgZmlyZWQgb25seSBvbmNlLlxuXHRcdFx0XHRpZiAoICFzb3J0YWJsZS5pc092ZXIgKSB7XG5cdFx0XHRcdFx0c29ydGFibGUuaXNPdmVyID0gMTtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGRyYWdnYWJsZSdzIHBhcmVudCBpbiBjYXNlIHdlIG5lZWQgdG8gcmVhcHBlbmQgdG8gaXQgbGF0ZXIuXG5cdFx0XHRcdFx0ZHJhZ2dhYmxlLl9wYXJlbnQgPSB1aS5oZWxwZXIucGFyZW50KCk7XG5cblx0XHRcdFx0XHRzb3J0YWJsZS5jdXJyZW50SXRlbSA9IHVpLmhlbHBlclxuXHRcdFx0XHRcdFx0LmFwcGVuZFRvKCBzb3J0YWJsZS5lbGVtZW50IClcblx0XHRcdFx0XHRcdC5kYXRhKCBcInVpLXNvcnRhYmxlLWl0ZW1cIiwgdHJ1ZSApO1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgaGVscGVyIG9wdGlvbiB0byBsYXRlciByZXN0b3JlIGl0XG5cdFx0XHRcdFx0c29ydGFibGUub3B0aW9ucy5faGVscGVyID0gc29ydGFibGUub3B0aW9ucy5oZWxwZXI7XG5cblx0XHRcdFx0XHRzb3J0YWJsZS5vcHRpb25zLmhlbHBlciA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHVpLmhlbHBlclsgMCBdO1xuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHQvLyBGaXJlIHRoZSBzdGFydCBldmVudHMgb2YgdGhlIHNvcnRhYmxlIHdpdGggb3VyIHBhc3NlZCBicm93c2VyIGV2ZW50LFxuXHRcdFx0XHRcdC8vIGFuZCBvdXIgb3duIGhlbHBlciAoc28gaXQgZG9lc24ndCBjcmVhdGUgYSBuZXcgb25lKVxuXHRcdFx0XHRcdGV2ZW50LnRhcmdldCA9IHNvcnRhYmxlLmN1cnJlbnRJdGVtWyAwIF07XG5cdFx0XHRcdFx0c29ydGFibGUuX21vdXNlQ2FwdHVyZSggZXZlbnQsIHRydWUgKTtcblx0XHRcdFx0XHRzb3J0YWJsZS5fbW91c2VTdGFydCggZXZlbnQsIHRydWUsIHRydWUgKTtcblxuXHRcdFx0XHRcdC8vIEJlY2F1c2UgdGhlIGJyb3dzZXIgZXZlbnQgaXMgd2F5IG9mZiB0aGUgbmV3IGFwcGVuZGVkIHBvcnRsZXQsXG5cdFx0XHRcdFx0Ly8gbW9kaWZ5IG5lY2Vzc2FyeSB2YXJpYWJsZXMgdG8gcmVmbGVjdCB0aGUgY2hhbmdlc1xuXHRcdFx0XHRcdHNvcnRhYmxlLm9mZnNldC5jbGljay50b3AgPSBkcmFnZ2FibGUub2Zmc2V0LmNsaWNrLnRvcDtcblx0XHRcdFx0XHRzb3J0YWJsZS5vZmZzZXQuY2xpY2subGVmdCA9IGRyYWdnYWJsZS5vZmZzZXQuY2xpY2subGVmdDtcblx0XHRcdFx0XHRzb3J0YWJsZS5vZmZzZXQucGFyZW50LmxlZnQgLT0gZHJhZ2dhYmxlLm9mZnNldC5wYXJlbnQubGVmdCAtXG5cdFx0XHRcdFx0XHRzb3J0YWJsZS5vZmZzZXQucGFyZW50LmxlZnQ7XG5cdFx0XHRcdFx0c29ydGFibGUub2Zmc2V0LnBhcmVudC50b3AgLT0gZHJhZ2dhYmxlLm9mZnNldC5wYXJlbnQudG9wIC1cblx0XHRcdFx0XHRcdHNvcnRhYmxlLm9mZnNldC5wYXJlbnQudG9wO1xuXG5cdFx0XHRcdFx0ZHJhZ2dhYmxlLl90cmlnZ2VyKCBcInRvU29ydGFibGVcIiwgZXZlbnQgKTtcblxuXHRcdFx0XHRcdC8vIEluZm9ybSBkcmFnZ2FibGUgdGhhdCB0aGUgaGVscGVyIGlzIGluIGEgdmFsaWQgZHJvcCB6b25lLFxuXHRcdFx0XHRcdC8vIHVzZWQgc29sZWx5IGluIHRoZSByZXZlcnQgb3B0aW9uIHRvIGhhbmRsZSBcInZhbGlkL2ludmFsaWRcIi5cblx0XHRcdFx0XHRkcmFnZ2FibGUuZHJvcHBlZCA9IHNvcnRhYmxlLmVsZW1lbnQ7XG5cblx0XHRcdFx0XHQvLyBOZWVkIHRvIHJlZnJlc2hQb3NpdGlvbnMgb2YgYWxsIHNvcnRhYmxlcyBpbiB0aGUgY2FzZSB0aGF0XG5cdFx0XHRcdFx0Ly8gYWRkaW5nIHRvIG9uZSBzb3J0YWJsZSBjaGFuZ2VzIHRoZSBsb2NhdGlvbiBvZiB0aGUgb3RoZXIgc29ydGFibGVzICgjOTY3NSlcblx0XHRcdFx0XHQkLmVhY2goIGRyYWdnYWJsZS5zb3J0YWJsZXMsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0dGhpcy5yZWZyZXNoUG9zaXRpb25zKCk7XG5cdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdFx0Ly8gSGFjayBzbyByZWNlaXZlL3VwZGF0ZSBjYWxsYmFja3Mgd29yayAobW9zdGx5KVxuXHRcdFx0XHRcdGRyYWdnYWJsZS5jdXJyZW50SXRlbSA9IGRyYWdnYWJsZS5lbGVtZW50O1xuXHRcdFx0XHRcdHNvcnRhYmxlLmZyb21PdXRzaWRlID0gZHJhZ2dhYmxlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzb3J0YWJsZS5jdXJyZW50SXRlbSApIHtcblx0XHRcdFx0XHRzb3J0YWJsZS5fbW91c2VEcmFnKCBldmVudCApO1xuXG5cdFx0XHRcdFx0Ly8gQ29weSB0aGUgc29ydGFibGUncyBwb3NpdGlvbiBiZWNhdXNlIHRoZSBkcmFnZ2FibGUncyBjYW4gcG90ZW50aWFsbHkgcmVmbGVjdFxuXHRcdFx0XHRcdC8vIGEgcmVsYXRpdmUgcG9zaXRpb24sIHdoaWxlIHNvcnRhYmxlIGlzIGFsd2F5cyBhYnNvbHV0ZSwgd2hpY2ggdGhlIGRyYWdnZWRcblx0XHRcdFx0XHQvLyBlbGVtZW50IGhhcyBub3cgYmVjb21lLiAoIzg4MDkpXG5cdFx0XHRcdFx0dWkucG9zaXRpb24gPSBzb3J0YWJsZS5wb3NpdGlvbjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBJZiBpdCBkb2Vzbid0IGludGVyc2VjdCB3aXRoIHRoZSBzb3J0YWJsZSwgYW5kIGl0IGludGVyc2VjdGVkIGJlZm9yZSxcblx0XHRcdFx0Ly8gd2UgZmFrZSB0aGUgZHJhZyBzdG9wIG9mIHRoZSBzb3J0YWJsZSwgYnV0IG1ha2Ugc3VyZSBpdCBkb2Vzbid0IHJlbW92ZVxuXHRcdFx0XHQvLyB0aGUgaGVscGVyIGJ5IHVzaW5nIGNhbmNlbEhlbHBlclJlbW92YWwuXG5cdFx0XHRcdGlmICggc29ydGFibGUuaXNPdmVyICkge1xuXG5cdFx0XHRcdFx0c29ydGFibGUuaXNPdmVyID0gMDtcblx0XHRcdFx0XHRzb3J0YWJsZS5jYW5jZWxIZWxwZXJSZW1vdmFsID0gdHJ1ZTtcblxuXHRcdFx0XHRcdC8vIENhbGxpbmcgc29ydGFibGUncyBtb3VzZVN0b3Agd291bGQgdHJpZ2dlciBhIHJldmVydCxcblx0XHRcdFx0XHQvLyBzbyByZXZlcnQgbXVzdCBiZSB0ZW1wb3JhcmlseSBmYWxzZSB1bnRpbCBhZnRlciBtb3VzZVN0b3AgaXMgY2FsbGVkLlxuXHRcdFx0XHRcdHNvcnRhYmxlLm9wdGlvbnMuX3JldmVydCA9IHNvcnRhYmxlLm9wdGlvbnMucmV2ZXJ0O1xuXHRcdFx0XHRcdHNvcnRhYmxlLm9wdGlvbnMucmV2ZXJ0ID0gZmFsc2U7XG5cblx0XHRcdFx0XHRzb3J0YWJsZS5fdHJpZ2dlciggXCJvdXRcIiwgZXZlbnQsIHNvcnRhYmxlLl91aUhhc2goIHNvcnRhYmxlICkgKTtcblx0XHRcdFx0XHRzb3J0YWJsZS5fbW91c2VTdG9wKCBldmVudCwgdHJ1ZSApO1xuXG5cdFx0XHRcdFx0Ly8gUmVzdG9yZSBzb3J0YWJsZSBiZWhhdmlvcnMgdGhhdCB3ZXJlIG1vZGZpZWRcblx0XHRcdFx0XHQvLyB3aGVuIHRoZSBkcmFnZ2FibGUgZW50ZXJlZCB0aGUgc29ydGFibGUgYXJlYSAoIzk0ODEpXG5cdFx0XHRcdFx0c29ydGFibGUub3B0aW9ucy5yZXZlcnQgPSBzb3J0YWJsZS5vcHRpb25zLl9yZXZlcnQ7XG5cdFx0XHRcdFx0c29ydGFibGUub3B0aW9ucy5oZWxwZXIgPSBzb3J0YWJsZS5vcHRpb25zLl9oZWxwZXI7XG5cblx0XHRcdFx0XHRpZiAoIHNvcnRhYmxlLnBsYWNlaG9sZGVyICkge1xuXHRcdFx0XHRcdFx0c29ydGFibGUucGxhY2Vob2xkZXIucmVtb3ZlKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUmVzdG9yZSBhbmQgcmVjYWxjdWxhdGUgdGhlIGRyYWdnYWJsZSdzIG9mZnNldCBjb25zaWRlcmluZyB0aGUgc29ydGFibGVcblx0XHRcdFx0XHQvLyBtYXkgaGF2ZSBtb2RpZmllZCB0aGVtIGluIHVuZXhwZWN0ZWQgd2F5cy4gKCM4ODA5LCAjMTA2NjkpXG5cdFx0XHRcdFx0dWkuaGVscGVyLmFwcGVuZFRvKCBkcmFnZ2FibGUuX3BhcmVudCApO1xuXHRcdFx0XHRcdGRyYWdnYWJsZS5fcmVmcmVzaE9mZnNldHMoIGV2ZW50ICk7XG5cdFx0XHRcdFx0dWkucG9zaXRpb24gPSBkcmFnZ2FibGUuX2dlbmVyYXRlUG9zaXRpb24oIGV2ZW50LCB0cnVlICk7XG5cblx0XHRcdFx0XHRkcmFnZ2FibGUuX3RyaWdnZXIoIFwiZnJvbVNvcnRhYmxlXCIsIGV2ZW50ICk7XG5cblx0XHRcdFx0XHQvLyBJbmZvcm0gZHJhZ2dhYmxlIHRoYXQgdGhlIGhlbHBlciBpcyBubyBsb25nZXIgaW4gYSB2YWxpZCBkcm9wIHpvbmVcblx0XHRcdFx0XHRkcmFnZ2FibGUuZHJvcHBlZCA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0Ly8gTmVlZCB0byByZWZyZXNoUG9zaXRpb25zIG9mIGFsbCBzb3J0YWJsZXMganVzdCBpbiBjYXNlIHJlbW92aW5nXG5cdFx0XHRcdFx0Ly8gZnJvbSBvbmUgc29ydGFibGUgY2hhbmdlcyB0aGUgbG9jYXRpb24gb2Ygb3RoZXIgc29ydGFibGVzICgjOTY3NSlcblx0XHRcdFx0XHQkLmVhY2goIGRyYWdnYWJsZS5zb3J0YWJsZXMsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0dGhpcy5yZWZyZXNoUG9zaXRpb25zKCk7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbiQudWkucGx1Z2luLmFkZCggXCJkcmFnZ2FibGVcIiwgXCJjdXJzb3JcIiwge1xuXHRzdGFydDogZnVuY3Rpb24oIGV2ZW50LCB1aSwgaW5zdGFuY2UgKSB7XG5cdFx0dmFyIHQgPSAkKCBcImJvZHlcIiApLFxuXHRcdFx0byA9IGluc3RhbmNlLm9wdGlvbnM7XG5cblx0XHRpZiAoIHQuY3NzKCBcImN1cnNvclwiICkgKSB7XG5cdFx0XHRvLl9jdXJzb3IgPSB0LmNzcyggXCJjdXJzb3JcIiApO1xuXHRcdH1cblx0XHR0LmNzcyggXCJjdXJzb3JcIiwgby5jdXJzb3IgKTtcblx0fSxcblx0c3RvcDogZnVuY3Rpb24oIGV2ZW50LCB1aSwgaW5zdGFuY2UgKSB7XG5cdFx0dmFyIG8gPSBpbnN0YW5jZS5vcHRpb25zO1xuXHRcdGlmICggby5fY3Vyc29yICkge1xuXHRcdFx0JCggXCJib2R5XCIgKS5jc3MoIFwiY3Vyc29yXCIsIG8uX2N1cnNvciApO1xuXHRcdH1cblx0fVxufSApO1xuXG4kLnVpLnBsdWdpbi5hZGQoIFwiZHJhZ2dhYmxlXCIsIFwib3BhY2l0eVwiLCB7XG5cdHN0YXJ0OiBmdW5jdGlvbiggZXZlbnQsIHVpLCBpbnN0YW5jZSApIHtcblx0XHR2YXIgdCA9ICQoIHVpLmhlbHBlciApLFxuXHRcdFx0byA9IGluc3RhbmNlLm9wdGlvbnM7XG5cdFx0aWYgKCB0LmNzcyggXCJvcGFjaXR5XCIgKSApIHtcblx0XHRcdG8uX29wYWNpdHkgPSB0LmNzcyggXCJvcGFjaXR5XCIgKTtcblx0XHR9XG5cdFx0dC5jc3MoIFwib3BhY2l0eVwiLCBvLm9wYWNpdHkgKTtcblx0fSxcblx0c3RvcDogZnVuY3Rpb24oIGV2ZW50LCB1aSwgaW5zdGFuY2UgKSB7XG5cdFx0dmFyIG8gPSBpbnN0YW5jZS5vcHRpb25zO1xuXHRcdGlmICggby5fb3BhY2l0eSApIHtcblx0XHRcdCQoIHVpLmhlbHBlciApLmNzcyggXCJvcGFjaXR5XCIsIG8uX29wYWNpdHkgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxuJC51aS5wbHVnaW4uYWRkKCBcImRyYWdnYWJsZVwiLCBcInNjcm9sbFwiLCB7XG5cdHN0YXJ0OiBmdW5jdGlvbiggZXZlbnQsIHVpLCBpICkge1xuXHRcdGlmICggIWkuc2Nyb2xsUGFyZW50Tm90SGlkZGVuICkge1xuXHRcdFx0aS5zY3JvbGxQYXJlbnROb3RIaWRkZW4gPSBpLmhlbHBlci5zY3JvbGxQYXJlbnQoIGZhbHNlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBpLnNjcm9sbFBhcmVudE5vdEhpZGRlblsgMCBdLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpIHtcblx0XHRcdGkub3ZlcmZsb3dPZmZzZXQgPSB7IHRvcDogMCwgbGVmdDogMH07IC8vIEhBQUFBQ0tcblx0XHR9IGVsc2UgaWYgKCBpLnNjcm9sbFBhcmVudE5vdEhpZGRlblsgMCBdICE9PSBpLmRvY3VtZW50WyAwIF0gJiZcblx0XHRcdFx0aS5zY3JvbGxQYXJlbnROb3RIaWRkZW5bIDAgXS50YWdOYW1lICE9PSBcIkhUTUxcIiApIHtcblx0XHRcdGkub3ZlcmZsb3dPZmZzZXQgPSBpLnNjcm9sbFBhcmVudE5vdEhpZGRlbi5vZmZzZXQoKTtcblx0XHR9XG5cdH0sXG5cdGRyYWc6IGZ1bmN0aW9uKCBldmVudCwgdWksIGkgICkge1xuXG5cdFx0dmFyIG8gPSBpLm9wdGlvbnMsXG5cdFx0XHRzY3JvbGxlZCA9IGZhbHNlLFxuXHRcdFx0c2Nyb2xsUGFyZW50ID0gaS5zY3JvbGxQYXJlbnROb3RIaWRkZW5bIDAgXSxcblx0XHRcdGRvY3VtZW50ID0gaS5kb2N1bWVudFsgMCBdO1xuXG5cdFx0aWYgKCBzY3JvbGxQYXJlbnQgIT09IGRvY3VtZW50ICYmIHNjcm9sbFBhcmVudC50YWdOYW1lICE9PSBcIkhUTUxcIiApIHtcblx0XHRcdGlmICggIW8uYXhpcyB8fCBvLmF4aXMgIT09IFwieFwiICkge1xuXHRcdFx0XHRpZiAoICggaS5vdmVyZmxvd09mZnNldC50b3AgKyBzY3JvbGxQYXJlbnQub2Zmc2V0SGVpZ2h0ICkgLSBldmVudC5wYWdlWSA8XG5cdFx0XHRcdFx0XHRvLnNjcm9sbFNlbnNpdGl2aXR5ICkge1xuXHRcdFx0XHRcdHNjcm9sbFBhcmVudC5zY3JvbGxUb3AgPSBzY3JvbGxlZCA9IHNjcm9sbFBhcmVudC5zY3JvbGxUb3AgKyBvLnNjcm9sbFNwZWVkO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCBldmVudC5wYWdlWSAtIGkub3ZlcmZsb3dPZmZzZXQudG9wIDwgby5zY3JvbGxTZW5zaXRpdml0eSApIHtcblx0XHRcdFx0XHRzY3JvbGxQYXJlbnQuc2Nyb2xsVG9wID0gc2Nyb2xsZWQgPSBzY3JvbGxQYXJlbnQuc2Nyb2xsVG9wIC0gby5zY3JvbGxTcGVlZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoICFvLmF4aXMgfHwgby5heGlzICE9PSBcInlcIiApIHtcblx0XHRcdFx0aWYgKCAoIGkub3ZlcmZsb3dPZmZzZXQubGVmdCArIHNjcm9sbFBhcmVudC5vZmZzZXRXaWR0aCApIC0gZXZlbnQucGFnZVggPFxuXHRcdFx0XHRcdFx0by5zY3JvbGxTZW5zaXRpdml0eSApIHtcblx0XHRcdFx0XHRzY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbGVkID0gc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQgKyBvLnNjcm9sbFNwZWVkO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCBldmVudC5wYWdlWCAtIGkub3ZlcmZsb3dPZmZzZXQubGVmdCA8IG8uc2Nyb2xsU2Vuc2l0aXZpdHkgKSB7XG5cdFx0XHRcdFx0c2Nyb2xsUGFyZW50LnNjcm9sbExlZnQgPSBzY3JvbGxlZCA9IHNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0IC0gby5zY3JvbGxTcGVlZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0aWYgKCAhby5heGlzIHx8IG8uYXhpcyAhPT0gXCJ4XCIgKSB7XG5cdFx0XHRcdGlmICggZXZlbnQucGFnZVkgLSAkKCBkb2N1bWVudCApLnNjcm9sbFRvcCgpIDwgby5zY3JvbGxTZW5zaXRpdml0eSApIHtcblx0XHRcdFx0XHRzY3JvbGxlZCA9ICQoIGRvY3VtZW50ICkuc2Nyb2xsVG9wKCAkKCBkb2N1bWVudCApLnNjcm9sbFRvcCgpIC0gby5zY3JvbGxTcGVlZCApO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCAkKCB3aW5kb3cgKS5oZWlnaHQoKSAtICggZXZlbnQucGFnZVkgLSAkKCBkb2N1bWVudCApLnNjcm9sbFRvcCgpICkgPFxuXHRcdFx0XHRcdFx0by5zY3JvbGxTZW5zaXRpdml0eSApIHtcblx0XHRcdFx0XHRzY3JvbGxlZCA9ICQoIGRvY3VtZW50ICkuc2Nyb2xsVG9wKCAkKCBkb2N1bWVudCApLnNjcm9sbFRvcCgpICsgby5zY3JvbGxTcGVlZCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggIW8uYXhpcyB8fCBvLmF4aXMgIT09IFwieVwiICkge1xuXHRcdFx0XHRpZiAoIGV2ZW50LnBhZ2VYIC0gJCggZG9jdW1lbnQgKS5zY3JvbGxMZWZ0KCkgPCBvLnNjcm9sbFNlbnNpdGl2aXR5ICkge1xuXHRcdFx0XHRcdHNjcm9sbGVkID0gJCggZG9jdW1lbnQgKS5zY3JvbGxMZWZ0KFxuXHRcdFx0XHRcdFx0JCggZG9jdW1lbnQgKS5zY3JvbGxMZWZ0KCkgLSBvLnNjcm9sbFNwZWVkXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIGlmICggJCggd2luZG93ICkud2lkdGgoKSAtICggZXZlbnQucGFnZVggLSAkKCBkb2N1bWVudCApLnNjcm9sbExlZnQoKSApIDxcblx0XHRcdFx0XHRcdG8uc2Nyb2xsU2Vuc2l0aXZpdHkgKSB7XG5cdFx0XHRcdFx0c2Nyb2xsZWQgPSAkKCBkb2N1bWVudCApLnNjcm9sbExlZnQoXG5cdFx0XHRcdFx0XHQkKCBkb2N1bWVudCApLnNjcm9sbExlZnQoKSArIG8uc2Nyb2xsU3BlZWRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIHNjcm9sbGVkICE9PSBmYWxzZSAmJiAkLnVpLmRkbWFuYWdlciAmJiAhby5kcm9wQmVoYXZpb3VyICkge1xuXHRcdFx0JC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMoIGksIGV2ZW50ICk7XG5cdFx0fVxuXG5cdH1cbn0gKTtcblxuJC51aS5wbHVnaW4uYWRkKCBcImRyYWdnYWJsZVwiLCBcInNuYXBcIiwge1xuXHRzdGFydDogZnVuY3Rpb24oIGV2ZW50LCB1aSwgaSApIHtcblxuXHRcdHZhciBvID0gaS5vcHRpb25zO1xuXG5cdFx0aS5zbmFwRWxlbWVudHMgPSBbXTtcblxuXHRcdCQoIG8uc25hcC5jb25zdHJ1Y3RvciAhPT0gU3RyaW5nID8gKCBvLnNuYXAuaXRlbXMgfHwgXCI6ZGF0YSh1aS1kcmFnZ2FibGUpXCIgKSA6IG8uc25hcCApXG5cdFx0XHQuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciAkdCA9ICQoIHRoaXMgKSxcblx0XHRcdFx0XHQkbyA9ICR0Lm9mZnNldCgpO1xuXHRcdFx0XHRpZiAoIHRoaXMgIT09IGkuZWxlbWVudFsgMCBdICkge1xuXHRcdFx0XHRcdGkuc25hcEVsZW1lbnRzLnB1c2goIHtcblx0XHRcdFx0XHRcdGl0ZW06IHRoaXMsXG5cdFx0XHRcdFx0XHR3aWR0aDogJHQub3V0ZXJXaWR0aCgpLCBoZWlnaHQ6ICR0Lm91dGVySGVpZ2h0KCksXG5cdFx0XHRcdFx0XHR0b3A6ICRvLnRvcCwgbGVmdDogJG8ubGVmdFxuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXG5cdH0sXG5cdGRyYWc6IGZ1bmN0aW9uKCBldmVudCwgdWksIGluc3QgKSB7XG5cblx0XHR2YXIgdHMsIGJzLCBscywgcnMsIGwsIHIsIHQsIGIsIGksIGZpcnN0LFxuXHRcdFx0byA9IGluc3Qub3B0aW9ucyxcblx0XHRcdGQgPSBvLnNuYXBUb2xlcmFuY2UsXG5cdFx0XHR4MSA9IHVpLm9mZnNldC5sZWZ0LCB4MiA9IHgxICsgaW5zdC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCxcblx0XHRcdHkxID0gdWkub2Zmc2V0LnRvcCwgeTIgPSB5MSArIGluc3QuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0O1xuXG5cdFx0Zm9yICggaSA9IGluc3Quc25hcEVsZW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tICkge1xuXG5cdFx0XHRsID0gaW5zdC5zbmFwRWxlbWVudHNbIGkgXS5sZWZ0IC0gaW5zdC5tYXJnaW5zLmxlZnQ7XG5cdFx0XHRyID0gbCArIGluc3Quc25hcEVsZW1lbnRzWyBpIF0ud2lkdGg7XG5cdFx0XHR0ID0gaW5zdC5zbmFwRWxlbWVudHNbIGkgXS50b3AgLSBpbnN0Lm1hcmdpbnMudG9wO1xuXHRcdFx0YiA9IHQgKyBpbnN0LnNuYXBFbGVtZW50c1sgaSBdLmhlaWdodDtcblxuXHRcdFx0aWYgKCB4MiA8IGwgLSBkIHx8IHgxID4gciArIGQgfHwgeTIgPCB0IC0gZCB8fCB5MSA+IGIgKyBkIHx8XG5cdFx0XHRcdFx0ISQuY29udGFpbnMoIGluc3Quc25hcEVsZW1lbnRzWyBpIF0uaXRlbS5vd25lckRvY3VtZW50LFxuXHRcdFx0XHRcdGluc3Quc25hcEVsZW1lbnRzWyBpIF0uaXRlbSApICkge1xuXHRcdFx0XHRpZiAoIGluc3Quc25hcEVsZW1lbnRzWyBpIF0uc25hcHBpbmcgKSB7XG5cdFx0XHRcdFx0KCBpbnN0Lm9wdGlvbnMuc25hcC5yZWxlYXNlICYmXG5cdFx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMuc25hcC5yZWxlYXNlLmNhbGwoXG5cdFx0XHRcdFx0XHRcdGluc3QuZWxlbWVudCxcblx0XHRcdFx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdFx0XHRcdCQuZXh0ZW5kKCBpbnN0Ll91aUhhc2goKSwgeyBzbmFwSXRlbTogaW5zdC5zbmFwRWxlbWVudHNbIGkgXS5pdGVtIH0gKVxuXHRcdFx0XHRcdFx0KSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluc3Quc25hcEVsZW1lbnRzWyBpIF0uc25hcHBpbmcgPSBmYWxzZTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggby5zbmFwTW9kZSAhPT0gXCJpbm5lclwiICkge1xuXHRcdFx0XHR0cyA9IE1hdGguYWJzKCB0IC0geTIgKSA8PSBkO1xuXHRcdFx0XHRicyA9IE1hdGguYWJzKCBiIC0geTEgKSA8PSBkO1xuXHRcdFx0XHRscyA9IE1hdGguYWJzKCBsIC0geDIgKSA8PSBkO1xuXHRcdFx0XHRycyA9IE1hdGguYWJzKCByIC0geDEgKSA8PSBkO1xuXHRcdFx0XHRpZiAoIHRzICkge1xuXHRcdFx0XHRcdHVpLnBvc2l0aW9uLnRvcCA9IGluc3QuX2NvbnZlcnRQb3NpdGlvblRvKCBcInJlbGF0aXZlXCIsIHtcblx0XHRcdFx0XHRcdHRvcDogdCAtIGluc3QuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LFxuXHRcdFx0XHRcdFx0bGVmdDogMFxuXHRcdFx0XHRcdH0gKS50b3A7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBicyApIHtcblx0XHRcdFx0XHR1aS5wb3NpdGlvbi50b3AgPSBpbnN0Ll9jb252ZXJ0UG9zaXRpb25UbyggXCJyZWxhdGl2ZVwiLCB7XG5cdFx0XHRcdFx0XHR0b3A6IGIsXG5cdFx0XHRcdFx0XHRsZWZ0OiAwXG5cdFx0XHRcdFx0fSApLnRvcDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIGxzICkge1xuXHRcdFx0XHRcdHVpLnBvc2l0aW9uLmxlZnQgPSBpbnN0Ll9jb252ZXJ0UG9zaXRpb25UbyggXCJyZWxhdGl2ZVwiLCB7XG5cdFx0XHRcdFx0XHR0b3A6IDAsXG5cdFx0XHRcdFx0XHRsZWZ0OiBsIC0gaW5zdC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aFxuXHRcdFx0XHRcdH0gKS5sZWZ0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggcnMgKSB7XG5cdFx0XHRcdFx0dWkucG9zaXRpb24ubGVmdCA9IGluc3QuX2NvbnZlcnRQb3NpdGlvblRvKCBcInJlbGF0aXZlXCIsIHtcblx0XHRcdFx0XHRcdHRvcDogMCxcblx0XHRcdFx0XHRcdGxlZnQ6IHJcblx0XHRcdFx0XHR9ICkubGVmdDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmaXJzdCA9ICggdHMgfHwgYnMgfHwgbHMgfHwgcnMgKTtcblxuXHRcdFx0aWYgKCBvLnNuYXBNb2RlICE9PSBcIm91dGVyXCIgKSB7XG5cdFx0XHRcdHRzID0gTWF0aC5hYnMoIHQgLSB5MSApIDw9IGQ7XG5cdFx0XHRcdGJzID0gTWF0aC5hYnMoIGIgLSB5MiApIDw9IGQ7XG5cdFx0XHRcdGxzID0gTWF0aC5hYnMoIGwgLSB4MSApIDw9IGQ7XG5cdFx0XHRcdHJzID0gTWF0aC5hYnMoIHIgLSB4MiApIDw9IGQ7XG5cdFx0XHRcdGlmICggdHMgKSB7XG5cdFx0XHRcdFx0dWkucG9zaXRpb24udG9wID0gaW5zdC5fY29udmVydFBvc2l0aW9uVG8oIFwicmVsYXRpdmVcIiwge1xuXHRcdFx0XHRcdFx0dG9wOiB0LFxuXHRcdFx0XHRcdFx0bGVmdDogMFxuXHRcdFx0XHRcdH0gKS50b3A7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBicyApIHtcblx0XHRcdFx0XHR1aS5wb3NpdGlvbi50b3AgPSBpbnN0Ll9jb252ZXJ0UG9zaXRpb25UbyggXCJyZWxhdGl2ZVwiLCB7XG5cdFx0XHRcdFx0XHR0b3A6IGIgLSBpbnN0LmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxcblx0XHRcdFx0XHRcdGxlZnQ6IDBcblx0XHRcdFx0XHR9ICkudG9wO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggbHMgKSB7XG5cdFx0XHRcdFx0dWkucG9zaXRpb24ubGVmdCA9IGluc3QuX2NvbnZlcnRQb3NpdGlvblRvKCBcInJlbGF0aXZlXCIsIHtcblx0XHRcdFx0XHRcdHRvcDogMCxcblx0XHRcdFx0XHRcdGxlZnQ6IGxcblx0XHRcdFx0XHR9ICkubGVmdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIHJzICkge1xuXHRcdFx0XHRcdHVpLnBvc2l0aW9uLmxlZnQgPSBpbnN0Ll9jb252ZXJ0UG9zaXRpb25UbyggXCJyZWxhdGl2ZVwiLCB7XG5cdFx0XHRcdFx0XHR0b3A6IDAsXG5cdFx0XHRcdFx0XHRsZWZ0OiByIC0gaW5zdC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aFxuXHRcdFx0XHRcdH0gKS5sZWZ0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggIWluc3Quc25hcEVsZW1lbnRzWyBpIF0uc25hcHBpbmcgJiYgKCB0cyB8fCBicyB8fCBscyB8fCBycyB8fCBmaXJzdCApICkge1xuXHRcdFx0XHQoIGluc3Qub3B0aW9ucy5zbmFwLnNuYXAgJiZcblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMuc25hcC5zbmFwLmNhbGwoXG5cdFx0XHRcdFx0XHRpbnN0LmVsZW1lbnQsXG5cdFx0XHRcdFx0XHRldmVudCxcblx0XHRcdFx0XHRcdCQuZXh0ZW5kKCBpbnN0Ll91aUhhc2goKSwge1xuXHRcdFx0XHRcdFx0XHRzbmFwSXRlbTogaW5zdC5zbmFwRWxlbWVudHNbIGkgXS5pdGVtXG5cdFx0XHRcdFx0XHR9ICkgKSApO1xuXHRcdFx0fVxuXHRcdFx0aW5zdC5zbmFwRWxlbWVudHNbIGkgXS5zbmFwcGluZyA9ICggdHMgfHwgYnMgfHwgbHMgfHwgcnMgfHwgZmlyc3QgKTtcblxuXHRcdH1cblxuXHR9XG59ICk7XG5cbiQudWkucGx1Z2luLmFkZCggXCJkcmFnZ2FibGVcIiwgXCJzdGFja1wiLCB7XG5cdHN0YXJ0OiBmdW5jdGlvbiggZXZlbnQsIHVpLCBpbnN0YW5jZSApIHtcblx0XHR2YXIgbWluLFxuXHRcdFx0byA9IGluc3RhbmNlLm9wdGlvbnMsXG5cdFx0XHRncm91cCA9ICQubWFrZUFycmF5KCAkKCBvLnN0YWNrICkgKS5zb3J0KCBmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdFx0cmV0dXJuICggcGFyc2VJbnQoICQoIGEgKS5jc3MoIFwiekluZGV4XCIgKSwgMTAgKSB8fCAwICkgLVxuXHRcdFx0XHRcdCggcGFyc2VJbnQoICQoIGIgKS5jc3MoIFwiekluZGV4XCIgKSwgMTAgKSB8fCAwICk7XG5cdFx0XHR9ICk7XG5cblx0XHRpZiAoICFncm91cC5sZW5ndGggKSB7IHJldHVybjsgfVxuXG5cdFx0bWluID0gcGFyc2VJbnQoICQoIGdyb3VwWyAwIF0gKS5jc3MoIFwiekluZGV4XCIgKSwgMTAgKSB8fCAwO1xuXHRcdCQoIGdyb3VwICkuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHQkKCB0aGlzICkuY3NzKCBcInpJbmRleFwiLCBtaW4gKyBpICk7XG5cdFx0fSApO1xuXHRcdHRoaXMuY3NzKCBcInpJbmRleFwiLCAoIG1pbiArIGdyb3VwLmxlbmd0aCApICk7XG5cdH1cbn0gKTtcblxuJC51aS5wbHVnaW4uYWRkKCBcImRyYWdnYWJsZVwiLCBcInpJbmRleFwiLCB7XG5cdHN0YXJ0OiBmdW5jdGlvbiggZXZlbnQsIHVpLCBpbnN0YW5jZSApIHtcblx0XHR2YXIgdCA9ICQoIHVpLmhlbHBlciApLFxuXHRcdFx0byA9IGluc3RhbmNlLm9wdGlvbnM7XG5cblx0XHRpZiAoIHQuY3NzKCBcInpJbmRleFwiICkgKSB7XG5cdFx0XHRvLl96SW5kZXggPSB0LmNzcyggXCJ6SW5kZXhcIiApO1xuXHRcdH1cblx0XHR0LmNzcyggXCJ6SW5kZXhcIiwgby56SW5kZXggKTtcblx0fSxcblx0c3RvcDogZnVuY3Rpb24oIGV2ZW50LCB1aSwgaW5zdGFuY2UgKSB7XG5cdFx0dmFyIG8gPSBpbnN0YW5jZS5vcHRpb25zO1xuXG5cdFx0aWYgKCBvLl96SW5kZXggKSB7XG5cdFx0XHQkKCB1aS5oZWxwZXIgKS5jc3MoIFwiekluZGV4XCIsIG8uX3pJbmRleCApO1xuXHRcdH1cblx0fVxufSApO1xuXG52YXIgd2lkZ2V0c0RyYWdnYWJsZSA9ICQudWkuZHJhZ2dhYmxlO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIFJlc2l6YWJsZSAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogUmVzaXphYmxlXG4vLz4+Z3JvdXA6IEludGVyYWN0aW9uc1xuLy8+PmRlc2NyaXB0aW9uOiBFbmFibGVzIHJlc2l6ZSBmdW5jdGlvbmFsaXR5IGZvciBhbnkgZWxlbWVudC5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9yZXNpemFibGUvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vcmVzaXphYmxlL1xuLy8+PmNzcy5zdHJ1Y3R1cmU6IC4uLy4uL3RoZW1lcy9iYXNlL2NvcmUuY3NzXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvcmVzaXphYmxlLmNzc1xuLy8+PmNzcy50aGVtZTogLi4vLi4vdGhlbWVzL2Jhc2UvdGhlbWUuY3NzXG5cblxuXG4kLndpZGdldCggXCJ1aS5yZXNpemFibGVcIiwgJC51aS5tb3VzZSwge1xuXHR2ZXJzaW9uOiBcIjEuMTIuMVwiLFxuXHR3aWRnZXRFdmVudFByZWZpeDogXCJyZXNpemVcIixcblx0b3B0aW9uczoge1xuXHRcdGFsc29SZXNpemU6IGZhbHNlLFxuXHRcdGFuaW1hdGU6IGZhbHNlLFxuXHRcdGFuaW1hdGVEdXJhdGlvbjogXCJzbG93XCIsXG5cdFx0YW5pbWF0ZUVhc2luZzogXCJzd2luZ1wiLFxuXHRcdGFzcGVjdFJhdGlvOiBmYWxzZSxcblx0XHRhdXRvSGlkZTogZmFsc2UsXG5cdFx0Y2xhc3Nlczoge1xuXHRcdFx0XCJ1aS1yZXNpemFibGUtc2VcIjogXCJ1aS1pY29uIHVpLWljb24tZ3JpcHNtYWxsLWRpYWdvbmFsLXNlXCJcblx0XHR9LFxuXHRcdGNvbnRhaW5tZW50OiBmYWxzZSxcblx0XHRnaG9zdDogZmFsc2UsXG5cdFx0Z3JpZDogZmFsc2UsXG5cdFx0aGFuZGxlczogXCJlLHMsc2VcIixcblx0XHRoZWxwZXI6IGZhbHNlLFxuXHRcdG1heEhlaWdodDogbnVsbCxcblx0XHRtYXhXaWR0aDogbnVsbCxcblx0XHRtaW5IZWlnaHQ6IDEwLFxuXHRcdG1pbldpZHRoOiAxMCxcblxuXHRcdC8vIFNlZSAjNzk2MFxuXHRcdHpJbmRleDogOTAsXG5cblx0XHQvLyBDYWxsYmFja3Ncblx0XHRyZXNpemU6IG51bGwsXG5cdFx0c3RhcnQ6IG51bGwsXG5cdFx0c3RvcDogbnVsbFxuXHR9LFxuXG5cdF9udW06IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gcGFyc2VGbG9hdCggdmFsdWUgKSB8fCAwO1xuXHR9LFxuXG5cdF9pc051bWJlcjogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiAhaXNOYU4oIHBhcnNlRmxvYXQoIHZhbHVlICkgKTtcblx0fSxcblxuXHRfaGFzU2Nyb2xsOiBmdW5jdGlvbiggZWwsIGEgKSB7XG5cblx0XHRpZiAoICQoIGVsICkuY3NzKCBcIm92ZXJmbG93XCIgKSA9PT0gXCJoaWRkZW5cIiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR2YXIgc2Nyb2xsID0gKCBhICYmIGEgPT09IFwibGVmdFwiICkgPyBcInNjcm9sbExlZnRcIiA6IFwic2Nyb2xsVG9wXCIsXG5cdFx0XHRoYXMgPSBmYWxzZTtcblxuXHRcdGlmICggZWxbIHNjcm9sbCBdID4gMCApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIFRPRE86IGRldGVybWluZSB3aGljaCBjYXNlcyBhY3R1YWxseSBjYXVzZSB0aGlzIHRvIGhhcHBlblxuXHRcdC8vIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSB0aGUgc2Nyb2xsIHNldCwgc2VlIGlmIGl0J3MgcG9zc2libGUgdG9cblx0XHQvLyBzZXQgdGhlIHNjcm9sbFxuXHRcdGVsWyBzY3JvbGwgXSA9IDE7XG5cdFx0aGFzID0gKCBlbFsgc2Nyb2xsIF0gPiAwICk7XG5cdFx0ZWxbIHNjcm9sbCBdID0gMDtcblx0XHRyZXR1cm4gaGFzO1xuXHR9LFxuXG5cdF9jcmVhdGU6IGZ1bmN0aW9uKCkge1xuXG5cdFx0dmFyIG1hcmdpbnMsXG5cdFx0XHRvID0gdGhpcy5vcHRpb25zLFxuXHRcdFx0dGhhdCA9IHRoaXM7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIFwidWktcmVzaXphYmxlXCIgKTtcblxuXHRcdCQuZXh0ZW5kKCB0aGlzLCB7XG5cdFx0XHRfYXNwZWN0UmF0aW86ICEhKCBvLmFzcGVjdFJhdGlvICksXG5cdFx0XHRhc3BlY3RSYXRpbzogby5hc3BlY3RSYXRpbyxcblx0XHRcdG9yaWdpbmFsRWxlbWVudDogdGhpcy5lbGVtZW50LFxuXHRcdFx0X3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHM6IFtdLFxuXHRcdFx0X2hlbHBlcjogby5oZWxwZXIgfHwgby5naG9zdCB8fCBvLmFuaW1hdGUgPyBvLmhlbHBlciB8fCBcInVpLXJlc2l6YWJsZS1oZWxwZXJcIiA6IG51bGxcblx0XHR9ICk7XG5cblx0XHQvLyBXcmFwIHRoZSBlbGVtZW50IGlmIGl0IGNhbm5vdCBob2xkIGNoaWxkIG5vZGVzXG5cdFx0aWYgKCB0aGlzLmVsZW1lbnRbIDAgXS5ub2RlTmFtZS5tYXRjaCggL14oY2FudmFzfHRleHRhcmVhfGlucHV0fHNlbGVjdHxidXR0b258aW1nKSQvaSApICkge1xuXG5cdFx0XHR0aGlzLmVsZW1lbnQud3JhcChcblx0XHRcdFx0JCggXCI8ZGl2IGNsYXNzPSd1aS13cmFwcGVyJyBzdHlsZT0nb3ZlcmZsb3c6IGhpZGRlbjsnPjwvZGl2PlwiICkuY3NzKCB7XG5cdFx0XHRcdFx0cG9zaXRpb246IHRoaXMuZWxlbWVudC5jc3MoIFwicG9zaXRpb25cIiApLFxuXHRcdFx0XHRcdHdpZHRoOiB0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLFxuXHRcdFx0XHRcdGhlaWdodDogdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCksXG5cdFx0XHRcdFx0dG9wOiB0aGlzLmVsZW1lbnQuY3NzKCBcInRvcFwiICksXG5cdFx0XHRcdFx0bGVmdDogdGhpcy5lbGVtZW50LmNzcyggXCJsZWZ0XCIgKVxuXHRcdFx0XHR9IClcblx0XHRcdCk7XG5cblx0XHRcdHRoaXMuZWxlbWVudCA9IHRoaXMuZWxlbWVudC5wYXJlbnQoKS5kYXRhKFxuXHRcdFx0XHRcInVpLXJlc2l6YWJsZVwiLCB0aGlzLmVsZW1lbnQucmVzaXphYmxlKCBcImluc3RhbmNlXCIgKVxuXHRcdFx0KTtcblxuXHRcdFx0dGhpcy5lbGVtZW50SXNXcmFwcGVyID0gdHJ1ZTtcblxuXHRcdFx0bWFyZ2lucyA9IHtcblx0XHRcdFx0bWFyZ2luVG9wOiB0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIFwibWFyZ2luVG9wXCIgKSxcblx0XHRcdFx0bWFyZ2luUmlnaHQ6IHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyggXCJtYXJnaW5SaWdodFwiICksXG5cdFx0XHRcdG1hcmdpbkJvdHRvbTogdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCBcIm1hcmdpbkJvdHRvbVwiICksXG5cdFx0XHRcdG1hcmdpbkxlZnQ6IHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyggXCJtYXJnaW5MZWZ0XCIgKVxuXHRcdFx0fTtcblxuXHRcdFx0dGhpcy5lbGVtZW50LmNzcyggbWFyZ2lucyApO1xuXHRcdFx0dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCBcIm1hcmdpblwiLCAwICk7XG5cblx0XHRcdC8vIHN1cHBvcnQ6IFNhZmFyaVxuXHRcdFx0Ly8gUHJldmVudCBTYWZhcmkgdGV4dGFyZWEgcmVzaXplXG5cdFx0XHR0aGlzLm9yaWdpbmFsUmVzaXplU3R5bGUgPSB0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIFwicmVzaXplXCIgKTtcblx0XHRcdHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyggXCJyZXNpemVcIiwgXCJub25lXCIgKTtcblxuXHRcdFx0dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5wdXNoKCB0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIHtcblx0XHRcdFx0cG9zaXRpb246IFwic3RhdGljXCIsXG5cdFx0XHRcdHpvb206IDEsXG5cdFx0XHRcdGRpc3BsYXk6IFwiYmxvY2tcIlxuXHRcdFx0fSApICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOVxuXHRcdFx0Ly8gYXZvaWQgSUUganVtcCAoaGFyZCBzZXQgdGhlIG1hcmdpbilcblx0XHRcdHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyggbWFyZ2lucyApO1xuXG5cdFx0XHR0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpO1xuXHRcdH1cblxuXHRcdHRoaXMuX3NldHVwSGFuZGxlcygpO1xuXG5cdFx0aWYgKCBvLmF1dG9IaWRlICkge1xuXHRcdFx0JCggdGhpcy5lbGVtZW50IClcblx0XHRcdFx0Lm9uKCBcIm1vdXNlZW50ZXJcIiwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCBvLmRpc2FibGVkICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGF0Ll9yZW1vdmVDbGFzcyggXCJ1aS1yZXNpemFibGUtYXV0b2hpZGVcIiApO1xuXHRcdFx0XHRcdHRoYXQuX2hhbmRsZXMuc2hvdygpO1xuXHRcdFx0XHR9IClcblx0XHRcdFx0Lm9uKCBcIm1vdXNlbGVhdmVcIiwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCBvLmRpc2FibGVkICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoICF0aGF0LnJlc2l6aW5nICkge1xuXHRcdFx0XHRcdFx0dGhhdC5fYWRkQ2xhc3MoIFwidWktcmVzaXphYmxlLWF1dG9oaWRlXCIgKTtcblx0XHRcdFx0XHRcdHRoYXQuX2hhbmRsZXMuaGlkZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHRoaXMuX21vdXNlSW5pdCgpO1xuXHR9LFxuXG5cdF9kZXN0cm95OiBmdW5jdGlvbigpIHtcblxuXHRcdHRoaXMuX21vdXNlRGVzdHJveSgpO1xuXG5cdFx0dmFyIHdyYXBwZXIsXG5cdFx0XHRfZGVzdHJveSA9IGZ1bmN0aW9uKCBleHAgKSB7XG5cdFx0XHRcdCQoIGV4cCApXG5cdFx0XHRcdFx0LnJlbW92ZURhdGEoIFwicmVzaXphYmxlXCIgKVxuXHRcdFx0XHRcdC5yZW1vdmVEYXRhKCBcInVpLXJlc2l6YWJsZVwiIClcblx0XHRcdFx0XHQub2ZmKCBcIi5yZXNpemFibGVcIiApXG5cdFx0XHRcdFx0LmZpbmQoIFwiLnVpLXJlc2l6YWJsZS1oYW5kbGVcIiApXG5cdFx0XHRcdFx0XHQucmVtb3ZlKCk7XG5cdFx0XHR9O1xuXG5cdFx0Ly8gVE9ETzogVW53cmFwIGF0IHNhbWUgRE9NIHBvc2l0aW9uXG5cdFx0aWYgKCB0aGlzLmVsZW1lbnRJc1dyYXBwZXIgKSB7XG5cdFx0XHRfZGVzdHJveSggdGhpcy5lbGVtZW50ICk7XG5cdFx0XHR3cmFwcGVyID0gdGhpcy5lbGVtZW50O1xuXHRcdFx0dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCB7XG5cdFx0XHRcdHBvc2l0aW9uOiB3cmFwcGVyLmNzcyggXCJwb3NpdGlvblwiICksXG5cdFx0XHRcdHdpZHRoOiB3cmFwcGVyLm91dGVyV2lkdGgoKSxcblx0XHRcdFx0aGVpZ2h0OiB3cmFwcGVyLm91dGVySGVpZ2h0KCksXG5cdFx0XHRcdHRvcDogd3JhcHBlci5jc3MoIFwidG9wXCIgKSxcblx0XHRcdFx0bGVmdDogd3JhcHBlci5jc3MoIFwibGVmdFwiIClcblx0XHRcdH0gKS5pbnNlcnRBZnRlciggd3JhcHBlciApO1xuXHRcdFx0d3JhcHBlci5yZW1vdmUoKTtcblx0XHR9XG5cblx0XHR0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIFwicmVzaXplXCIsIHRoaXMub3JpZ2luYWxSZXNpemVTdHlsZSApO1xuXHRcdF9kZXN0cm95KCB0aGlzLm9yaWdpbmFsRWxlbWVudCApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0X3NldE9wdGlvbjogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dGhpcy5fc3VwZXIoIGtleSwgdmFsdWUgKTtcblxuXHRcdHN3aXRjaCAoIGtleSApIHtcblx0XHRjYXNlIFwiaGFuZGxlc1wiOlxuXHRcdFx0dGhpcy5fcmVtb3ZlSGFuZGxlcygpO1xuXHRcdFx0dGhpcy5fc2V0dXBIYW5kbGVzKCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9LFxuXG5cdF9zZXR1cEhhbmRsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBvID0gdGhpcy5vcHRpb25zLCBoYW5kbGUsIGksIG4sIGhuYW1lLCBheGlzLCB0aGF0ID0gdGhpcztcblx0XHR0aGlzLmhhbmRsZXMgPSBvLmhhbmRsZXMgfHxcblx0XHRcdCggISQoIFwiLnVpLXJlc2l6YWJsZS1oYW5kbGVcIiwgdGhpcy5lbGVtZW50ICkubGVuZ3RoID9cblx0XHRcdFx0XCJlLHMsc2VcIiA6IHtcblx0XHRcdFx0XHRuOiBcIi51aS1yZXNpemFibGUtblwiLFxuXHRcdFx0XHRcdGU6IFwiLnVpLXJlc2l6YWJsZS1lXCIsXG5cdFx0XHRcdFx0czogXCIudWktcmVzaXphYmxlLXNcIixcblx0XHRcdFx0XHR3OiBcIi51aS1yZXNpemFibGUtd1wiLFxuXHRcdFx0XHRcdHNlOiBcIi51aS1yZXNpemFibGUtc2VcIixcblx0XHRcdFx0XHRzdzogXCIudWktcmVzaXphYmxlLXN3XCIsXG5cdFx0XHRcdFx0bmU6IFwiLnVpLXJlc2l6YWJsZS1uZVwiLFxuXHRcdFx0XHRcdG53OiBcIi51aS1yZXNpemFibGUtbndcIlxuXHRcdFx0XHR9ICk7XG5cblx0XHR0aGlzLl9oYW5kbGVzID0gJCgpO1xuXHRcdGlmICggdGhpcy5oYW5kbGVzLmNvbnN0cnVjdG9yID09PSBTdHJpbmcgKSB7XG5cblx0XHRcdGlmICggdGhpcy5oYW5kbGVzID09PSBcImFsbFwiICkge1xuXHRcdFx0XHR0aGlzLmhhbmRsZXMgPSBcIm4sZSxzLHcsc2Usc3csbmUsbndcIjtcblx0XHRcdH1cblxuXHRcdFx0biA9IHRoaXMuaGFuZGxlcy5zcGxpdCggXCIsXCIgKTtcblx0XHRcdHRoaXMuaGFuZGxlcyA9IHt9O1xuXG5cdFx0XHRmb3IgKCBpID0gMDsgaSA8IG4ubGVuZ3RoOyBpKysgKSB7XG5cblx0XHRcdFx0aGFuZGxlID0gJC50cmltKCBuWyBpIF0gKTtcblx0XHRcdFx0aG5hbWUgPSBcInVpLXJlc2l6YWJsZS1cIiArIGhhbmRsZTtcblx0XHRcdFx0YXhpcyA9ICQoIFwiPGRpdj5cIiApO1xuXHRcdFx0XHR0aGlzLl9hZGRDbGFzcyggYXhpcywgXCJ1aS1yZXNpemFibGUtaGFuZGxlIFwiICsgaG5hbWUgKTtcblxuXHRcdFx0XHRheGlzLmNzcyggeyB6SW5kZXg6IG8uekluZGV4IH0gKTtcblxuXHRcdFx0XHR0aGlzLmhhbmRsZXNbIGhhbmRsZSBdID0gXCIudWktcmVzaXphYmxlLVwiICsgaGFuZGxlO1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQuYXBwZW5kKCBheGlzICk7XG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHR0aGlzLl9yZW5kZXJBeGlzID0gZnVuY3Rpb24oIHRhcmdldCApIHtcblxuXHRcdFx0dmFyIGksIGF4aXMsIHBhZFBvcywgcGFkV3JhcHBlcjtcblxuXHRcdFx0dGFyZ2V0ID0gdGFyZ2V0IHx8IHRoaXMuZWxlbWVudDtcblxuXHRcdFx0Zm9yICggaSBpbiB0aGlzLmhhbmRsZXMgKSB7XG5cblx0XHRcdFx0aWYgKCB0aGlzLmhhbmRsZXNbIGkgXS5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nICkge1xuXHRcdFx0XHRcdHRoaXMuaGFuZGxlc1sgaSBdID0gdGhpcy5lbGVtZW50LmNoaWxkcmVuKCB0aGlzLmhhbmRsZXNbIGkgXSApLmZpcnN0KCkuc2hvdygpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCB0aGlzLmhhbmRsZXNbIGkgXS5qcXVlcnkgfHwgdGhpcy5oYW5kbGVzWyBpIF0ubm9kZVR5cGUgKSB7XG5cdFx0XHRcdFx0dGhpcy5oYW5kbGVzWyBpIF0gPSAkKCB0aGlzLmhhbmRsZXNbIGkgXSApO1xuXHRcdFx0XHRcdHRoaXMuX29uKCB0aGlzLmhhbmRsZXNbIGkgXSwgeyBcIm1vdXNlZG93blwiOiB0aGF0Ll9tb3VzZURvd24gfSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCB0aGlzLmVsZW1lbnRJc1dyYXBwZXIgJiZcblx0XHRcdFx0XHRcdHRoaXMub3JpZ2luYWxFbGVtZW50WyAwIF1cblx0XHRcdFx0XHRcdFx0Lm5vZGVOYW1lXG5cdFx0XHRcdFx0XHRcdC5tYXRjaCggL14odGV4dGFyZWF8aW5wdXR8c2VsZWN0fGJ1dHRvbikkL2kgKSApIHtcblx0XHRcdFx0XHRheGlzID0gJCggdGhpcy5oYW5kbGVzWyBpIF0sIHRoaXMuZWxlbWVudCApO1xuXG5cdFx0XHRcdFx0cGFkV3JhcHBlciA9IC9zd3xuZXxud3xzZXxufHMvLnRlc3QoIGkgKSA/XG5cdFx0XHRcdFx0XHRheGlzLm91dGVySGVpZ2h0KCkgOlxuXHRcdFx0XHRcdFx0YXhpcy5vdXRlcldpZHRoKCk7XG5cblx0XHRcdFx0XHRwYWRQb3MgPSBbIFwicGFkZGluZ1wiLFxuXHRcdFx0XHRcdFx0L25lfG53fG4vLnRlc3QoIGkgKSA/IFwiVG9wXCIgOlxuXHRcdFx0XHRcdFx0L3NlfHN3fHMvLnRlc3QoIGkgKSA/IFwiQm90dG9tXCIgOlxuXHRcdFx0XHRcdFx0L15lJC8udGVzdCggaSApID8gXCJSaWdodFwiIDogXCJMZWZ0XCIgXS5qb2luKCBcIlwiICk7XG5cblx0XHRcdFx0XHR0YXJnZXQuY3NzKCBwYWRQb3MsIHBhZFdyYXBwZXIgKTtcblxuXHRcdFx0XHRcdHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLl9oYW5kbGVzID0gdGhpcy5faGFuZGxlcy5hZGQoIHRoaXMuaGFuZGxlc1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdC8vIFRPRE86IG1ha2UgcmVuZGVyQXhpcyBhIHByb3RvdHlwZSBmdW5jdGlvblxuXHRcdHRoaXMuX3JlbmRlckF4aXMoIHRoaXMuZWxlbWVudCApO1xuXG5cdFx0dGhpcy5faGFuZGxlcyA9IHRoaXMuX2hhbmRsZXMuYWRkKCB0aGlzLmVsZW1lbnQuZmluZCggXCIudWktcmVzaXphYmxlLWhhbmRsZVwiICkgKTtcblx0XHR0aGlzLl9oYW5kbGVzLmRpc2FibGVTZWxlY3Rpb24oKTtcblxuXHRcdHRoaXMuX2hhbmRsZXMub24oIFwibW91c2VvdmVyXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhdGhhdC5yZXNpemluZyApIHtcblx0XHRcdFx0aWYgKCB0aGlzLmNsYXNzTmFtZSApIHtcblx0XHRcdFx0XHRheGlzID0gdGhpcy5jbGFzc05hbWUubWF0Y2goIC91aS1yZXNpemFibGUtKHNlfHN3fG5lfG53fG58ZXxzfHcpL2kgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGF0LmF4aXMgPSBheGlzICYmIGF4aXNbIDEgXSA/IGF4aXNbIDEgXSA6IFwic2VcIjtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHRpZiAoIG8uYXV0b0hpZGUgKSB7XG5cdFx0XHR0aGlzLl9oYW5kbGVzLmhpZGUoKTtcblx0XHRcdHRoaXMuX2FkZENsYXNzKCBcInVpLXJlc2l6YWJsZS1hdXRvaGlkZVwiICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9yZW1vdmVIYW5kbGVzOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLl9oYW5kbGVzLnJlbW92ZSgpO1xuXHR9LFxuXG5cdF9tb3VzZUNhcHR1cmU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgaSwgaGFuZGxlLFxuXHRcdFx0Y2FwdHVyZSA9IGZhbHNlO1xuXG5cdFx0Zm9yICggaSBpbiB0aGlzLmhhbmRsZXMgKSB7XG5cdFx0XHRoYW5kbGUgPSAkKCB0aGlzLmhhbmRsZXNbIGkgXSApWyAwIF07XG5cdFx0XHRpZiAoIGhhbmRsZSA9PT0gZXZlbnQudGFyZ2V0IHx8ICQuY29udGFpbnMoIGhhbmRsZSwgZXZlbnQudGFyZ2V0ICkgKSB7XG5cdFx0XHRcdGNhcHR1cmUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAhdGhpcy5vcHRpb25zLmRpc2FibGVkICYmIGNhcHR1cmU7XG5cdH0sXG5cblx0X21vdXNlU3RhcnQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdHZhciBjdXJsZWZ0LCBjdXJ0b3AsIGN1cnNvcixcblx0XHRcdG8gPSB0aGlzLm9wdGlvbnMsXG5cdFx0XHRlbCA9IHRoaXMuZWxlbWVudDtcblxuXHRcdHRoaXMucmVzaXppbmcgPSB0cnVlO1xuXG5cdFx0dGhpcy5fcmVuZGVyUHJveHkoKTtcblxuXHRcdGN1cmxlZnQgPSB0aGlzLl9udW0oIHRoaXMuaGVscGVyLmNzcyggXCJsZWZ0XCIgKSApO1xuXHRcdGN1cnRvcCA9IHRoaXMuX251bSggdGhpcy5oZWxwZXIuY3NzKCBcInRvcFwiICkgKTtcblxuXHRcdGlmICggby5jb250YWlubWVudCApIHtcblx0XHRcdGN1cmxlZnQgKz0gJCggby5jb250YWlubWVudCApLnNjcm9sbExlZnQoKSB8fCAwO1xuXHRcdFx0Y3VydG9wICs9ICQoIG8uY29udGFpbm1lbnQgKS5zY3JvbGxUb3AoKSB8fCAwO1xuXHRcdH1cblxuXHRcdHRoaXMub2Zmc2V0ID0gdGhpcy5oZWxwZXIub2Zmc2V0KCk7XG5cdFx0dGhpcy5wb3NpdGlvbiA9IHsgbGVmdDogY3VybGVmdCwgdG9wOiBjdXJ0b3AgfTtcblxuXHRcdHRoaXMuc2l6ZSA9IHRoaXMuX2hlbHBlciA/IHtcblx0XHRcdFx0d2lkdGg6IHRoaXMuaGVscGVyLndpZHRoKCksXG5cdFx0XHRcdGhlaWdodDogdGhpcy5oZWxwZXIuaGVpZ2h0KClcblx0XHRcdH0gOiB7XG5cdFx0XHRcdHdpZHRoOiBlbC53aWR0aCgpLFxuXHRcdFx0XHRoZWlnaHQ6IGVsLmhlaWdodCgpXG5cdFx0XHR9O1xuXG5cdFx0dGhpcy5vcmlnaW5hbFNpemUgPSB0aGlzLl9oZWxwZXIgPyB7XG5cdFx0XHRcdHdpZHRoOiBlbC5vdXRlcldpZHRoKCksXG5cdFx0XHRcdGhlaWdodDogZWwub3V0ZXJIZWlnaHQoKVxuXHRcdFx0fSA6IHtcblx0XHRcdFx0d2lkdGg6IGVsLndpZHRoKCksXG5cdFx0XHRcdGhlaWdodDogZWwuaGVpZ2h0KClcblx0XHRcdH07XG5cblx0XHR0aGlzLnNpemVEaWZmID0ge1xuXHRcdFx0d2lkdGg6IGVsLm91dGVyV2lkdGgoKSAtIGVsLndpZHRoKCksXG5cdFx0XHRoZWlnaHQ6IGVsLm91dGVySGVpZ2h0KCkgLSBlbC5oZWlnaHQoKVxuXHRcdH07XG5cblx0XHR0aGlzLm9yaWdpbmFsUG9zaXRpb24gPSB7IGxlZnQ6IGN1cmxlZnQsIHRvcDogY3VydG9wIH07XG5cdFx0dGhpcy5vcmlnaW5hbE1vdXNlUG9zaXRpb24gPSB7IGxlZnQ6IGV2ZW50LnBhZ2VYLCB0b3A6IGV2ZW50LnBhZ2VZIH07XG5cblx0XHR0aGlzLmFzcGVjdFJhdGlvID0gKCB0eXBlb2Ygby5hc3BlY3RSYXRpbyA9PT0gXCJudW1iZXJcIiApID9cblx0XHRcdG8uYXNwZWN0UmF0aW8gOlxuXHRcdFx0KCAoIHRoaXMub3JpZ2luYWxTaXplLndpZHRoIC8gdGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0ICkgfHwgMSApO1xuXG5cdFx0Y3Vyc29yID0gJCggXCIudWktcmVzaXphYmxlLVwiICsgdGhpcy5heGlzICkuY3NzKCBcImN1cnNvclwiICk7XG5cdFx0JCggXCJib2R5XCIgKS5jc3MoIFwiY3Vyc29yXCIsIGN1cnNvciA9PT0gXCJhdXRvXCIgPyB0aGlzLmF4aXMgKyBcIi1yZXNpemVcIiA6IGN1cnNvciApO1xuXG5cdFx0dGhpcy5fYWRkQ2xhc3MoIFwidWktcmVzaXphYmxlLXJlc2l6aW5nXCIgKTtcblx0XHR0aGlzLl9wcm9wYWdhdGUoIFwic3RhcnRcIiwgZXZlbnQgKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHRfbW91c2VEcmFnOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHR2YXIgZGF0YSwgcHJvcHMsXG5cdFx0XHRzbXAgPSB0aGlzLm9yaWdpbmFsTW91c2VQb3NpdGlvbixcblx0XHRcdGEgPSB0aGlzLmF4aXMsXG5cdFx0XHRkeCA9ICggZXZlbnQucGFnZVggLSBzbXAubGVmdCApIHx8IDAsXG5cdFx0XHRkeSA9ICggZXZlbnQucGFnZVkgLSBzbXAudG9wICkgfHwgMCxcblx0XHRcdHRyaWdnZXIgPSB0aGlzLl9jaGFuZ2VbIGEgXTtcblxuXHRcdHRoaXMuX3VwZGF0ZVByZXZQcm9wZXJ0aWVzKCk7XG5cblx0XHRpZiAoICF0cmlnZ2VyICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGRhdGEgPSB0cmlnZ2VyLmFwcGx5KCB0aGlzLCBbIGV2ZW50LCBkeCwgZHkgXSApO1xuXG5cdFx0dGhpcy5fdXBkYXRlVmlydHVhbEJvdW5kYXJpZXMoIGV2ZW50LnNoaWZ0S2V5ICk7XG5cdFx0aWYgKCB0aGlzLl9hc3BlY3RSYXRpbyB8fCBldmVudC5zaGlmdEtleSApIHtcblx0XHRcdGRhdGEgPSB0aGlzLl91cGRhdGVSYXRpbyggZGF0YSwgZXZlbnQgKTtcblx0XHR9XG5cblx0XHRkYXRhID0gdGhpcy5fcmVzcGVjdFNpemUoIGRhdGEsIGV2ZW50ICk7XG5cblx0XHR0aGlzLl91cGRhdGVDYWNoZSggZGF0YSApO1xuXG5cdFx0dGhpcy5fcHJvcGFnYXRlKCBcInJlc2l6ZVwiLCBldmVudCApO1xuXG5cdFx0cHJvcHMgPSB0aGlzLl9hcHBseUNoYW5nZXMoKTtcblxuXHRcdGlmICggIXRoaXMuX2hlbHBlciAmJiB0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhJC5pc0VtcHR5T2JqZWN0KCBwcm9wcyApICkge1xuXHRcdFx0dGhpcy5fdXBkYXRlUHJldlByb3BlcnRpZXMoKTtcblx0XHRcdHRoaXMuX3RyaWdnZXIoIFwicmVzaXplXCIsIGV2ZW50LCB0aGlzLnVpKCkgKTtcblx0XHRcdHRoaXMuX2FwcGx5Q2hhbmdlcygpO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHRfbW91c2VTdG9wOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHR0aGlzLnJlc2l6aW5nID0gZmFsc2U7XG5cdFx0dmFyIHByLCBpc3RhLCBzb2Zmc2V0aCwgc29mZnNldHcsIHMsIGxlZnQsIHRvcCxcblx0XHRcdG8gPSB0aGlzLm9wdGlvbnMsIHRoYXQgPSB0aGlzO1xuXG5cdFx0aWYgKCB0aGlzLl9oZWxwZXIgKSB7XG5cblx0XHRcdHByID0gdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cztcblx0XHRcdGlzdGEgPSBwci5sZW5ndGggJiYgKCAvdGV4dGFyZWEvaSApLnRlc3QoIHByWyAwIF0ubm9kZU5hbWUgKTtcblx0XHRcdHNvZmZzZXRoID0gaXN0YSAmJiB0aGlzLl9oYXNTY3JvbGwoIHByWyAwIF0sIFwibGVmdFwiICkgPyAwIDogdGhhdC5zaXplRGlmZi5oZWlnaHQ7XG5cdFx0XHRzb2Zmc2V0dyA9IGlzdGEgPyAwIDogdGhhdC5zaXplRGlmZi53aWR0aDtcblxuXHRcdFx0cyA9IHtcblx0XHRcdFx0d2lkdGg6ICggdGhhdC5oZWxwZXIud2lkdGgoKSAgLSBzb2Zmc2V0dyApLFxuXHRcdFx0XHRoZWlnaHQ6ICggdGhhdC5oZWxwZXIuaGVpZ2h0KCkgLSBzb2Zmc2V0aCApXG5cdFx0XHR9O1xuXHRcdFx0bGVmdCA9ICggcGFyc2VGbG9hdCggdGhhdC5lbGVtZW50LmNzcyggXCJsZWZ0XCIgKSApICtcblx0XHRcdFx0KCB0aGF0LnBvc2l0aW9uLmxlZnQgLSB0aGF0Lm9yaWdpbmFsUG9zaXRpb24ubGVmdCApICkgfHwgbnVsbDtcblx0XHRcdHRvcCA9ICggcGFyc2VGbG9hdCggdGhhdC5lbGVtZW50LmNzcyggXCJ0b3BcIiApICkgK1xuXHRcdFx0XHQoIHRoYXQucG9zaXRpb24udG9wIC0gdGhhdC5vcmlnaW5hbFBvc2l0aW9uLnRvcCApICkgfHwgbnVsbDtcblxuXHRcdFx0aWYgKCAhby5hbmltYXRlICkge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQuY3NzKCAkLmV4dGVuZCggcywgeyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9ICkgKTtcblx0XHRcdH1cblxuXHRcdFx0dGhhdC5oZWxwZXIuaGVpZ2h0KCB0aGF0LnNpemUuaGVpZ2h0ICk7XG5cdFx0XHR0aGF0LmhlbHBlci53aWR0aCggdGhhdC5zaXplLndpZHRoICk7XG5cblx0XHRcdGlmICggdGhpcy5faGVscGVyICYmICFvLmFuaW1hdGUgKSB7XG5cdFx0XHRcdHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0JCggXCJib2R5XCIgKS5jc3MoIFwiY3Vyc29yXCIsIFwiYXV0b1wiICk7XG5cblx0XHR0aGlzLl9yZW1vdmVDbGFzcyggXCJ1aS1yZXNpemFibGUtcmVzaXppbmdcIiApO1xuXG5cdFx0dGhpcy5fcHJvcGFnYXRlKCBcInN0b3BcIiwgZXZlbnQgKTtcblxuXHRcdGlmICggdGhpcy5faGVscGVyICkge1xuXHRcdFx0dGhpcy5oZWxwZXIucmVtb3ZlKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cdH0sXG5cblx0X3VwZGF0ZVByZXZQcm9wZXJ0aWVzOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnByZXZQb3NpdGlvbiA9IHtcblx0XHRcdHRvcDogdGhpcy5wb3NpdGlvbi50b3AsXG5cdFx0XHRsZWZ0OiB0aGlzLnBvc2l0aW9uLmxlZnRcblx0XHR9O1xuXHRcdHRoaXMucHJldlNpemUgPSB7XG5cdFx0XHR3aWR0aDogdGhpcy5zaXplLndpZHRoLFxuXHRcdFx0aGVpZ2h0OiB0aGlzLnNpemUuaGVpZ2h0XG5cdFx0fTtcblx0fSxcblxuXHRfYXBwbHlDaGFuZ2VzOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgcHJvcHMgPSB7fTtcblxuXHRcdGlmICggdGhpcy5wb3NpdGlvbi50b3AgIT09IHRoaXMucHJldlBvc2l0aW9uLnRvcCApIHtcblx0XHRcdHByb3BzLnRvcCA9IHRoaXMucG9zaXRpb24udG9wICsgXCJweFwiO1xuXHRcdH1cblx0XHRpZiAoIHRoaXMucG9zaXRpb24ubGVmdCAhPT0gdGhpcy5wcmV2UG9zaXRpb24ubGVmdCApIHtcblx0XHRcdHByb3BzLmxlZnQgPSB0aGlzLnBvc2l0aW9uLmxlZnQgKyBcInB4XCI7XG5cdFx0fVxuXHRcdGlmICggdGhpcy5zaXplLndpZHRoICE9PSB0aGlzLnByZXZTaXplLndpZHRoICkge1xuXHRcdFx0cHJvcHMud2lkdGggPSB0aGlzLnNpemUud2lkdGggKyBcInB4XCI7XG5cdFx0fVxuXHRcdGlmICggdGhpcy5zaXplLmhlaWdodCAhPT0gdGhpcy5wcmV2U2l6ZS5oZWlnaHQgKSB7XG5cdFx0XHRwcm9wcy5oZWlnaHQgPSB0aGlzLnNpemUuaGVpZ2h0ICsgXCJweFwiO1xuXHRcdH1cblxuXHRcdHRoaXMuaGVscGVyLmNzcyggcHJvcHMgKTtcblxuXHRcdHJldHVybiBwcm9wcztcblx0fSxcblxuXHRfdXBkYXRlVmlydHVhbEJvdW5kYXJpZXM6IGZ1bmN0aW9uKCBmb3JjZUFzcGVjdFJhdGlvICkge1xuXHRcdHZhciBwTWluV2lkdGgsIHBNYXhXaWR0aCwgcE1pbkhlaWdodCwgcE1heEhlaWdodCwgYixcblx0XHRcdG8gPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRiID0ge1xuXHRcdFx0bWluV2lkdGg6IHRoaXMuX2lzTnVtYmVyKCBvLm1pbldpZHRoICkgPyBvLm1pbldpZHRoIDogMCxcblx0XHRcdG1heFdpZHRoOiB0aGlzLl9pc051bWJlciggby5tYXhXaWR0aCApID8gby5tYXhXaWR0aCA6IEluZmluaXR5LFxuXHRcdFx0bWluSGVpZ2h0OiB0aGlzLl9pc051bWJlciggby5taW5IZWlnaHQgKSA/IG8ubWluSGVpZ2h0IDogMCxcblx0XHRcdG1heEhlaWdodDogdGhpcy5faXNOdW1iZXIoIG8ubWF4SGVpZ2h0ICkgPyBvLm1heEhlaWdodCA6IEluZmluaXR5XG5cdFx0fTtcblxuXHRcdGlmICggdGhpcy5fYXNwZWN0UmF0aW8gfHwgZm9yY2VBc3BlY3RSYXRpbyApIHtcblx0XHRcdHBNaW5XaWR0aCA9IGIubWluSGVpZ2h0ICogdGhpcy5hc3BlY3RSYXRpbztcblx0XHRcdHBNaW5IZWlnaHQgPSBiLm1pbldpZHRoIC8gdGhpcy5hc3BlY3RSYXRpbztcblx0XHRcdHBNYXhXaWR0aCA9IGIubWF4SGVpZ2h0ICogdGhpcy5hc3BlY3RSYXRpbztcblx0XHRcdHBNYXhIZWlnaHQgPSBiLm1heFdpZHRoIC8gdGhpcy5hc3BlY3RSYXRpbztcblxuXHRcdFx0aWYgKCBwTWluV2lkdGggPiBiLm1pbldpZHRoICkge1xuXHRcdFx0XHRiLm1pbldpZHRoID0gcE1pbldpZHRoO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBwTWluSGVpZ2h0ID4gYi5taW5IZWlnaHQgKSB7XG5cdFx0XHRcdGIubWluSGVpZ2h0ID0gcE1pbkhlaWdodDtcblx0XHRcdH1cblx0XHRcdGlmICggcE1heFdpZHRoIDwgYi5tYXhXaWR0aCApIHtcblx0XHRcdFx0Yi5tYXhXaWR0aCA9IHBNYXhXaWR0aDtcblx0XHRcdH1cblx0XHRcdGlmICggcE1heEhlaWdodCA8IGIubWF4SGVpZ2h0ICkge1xuXHRcdFx0XHRiLm1heEhlaWdodCA9IHBNYXhIZWlnaHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuX3ZCb3VuZGFyaWVzID0gYjtcblx0fSxcblxuXHRfdXBkYXRlQ2FjaGU6IGZ1bmN0aW9uKCBkYXRhICkge1xuXHRcdHRoaXMub2Zmc2V0ID0gdGhpcy5oZWxwZXIub2Zmc2V0KCk7XG5cdFx0aWYgKCB0aGlzLl9pc051bWJlciggZGF0YS5sZWZ0ICkgKSB7XG5cdFx0XHR0aGlzLnBvc2l0aW9uLmxlZnQgPSBkYXRhLmxlZnQ7XG5cdFx0fVxuXHRcdGlmICggdGhpcy5faXNOdW1iZXIoIGRhdGEudG9wICkgKSB7XG5cdFx0XHR0aGlzLnBvc2l0aW9uLnRvcCA9IGRhdGEudG9wO1xuXHRcdH1cblx0XHRpZiAoIHRoaXMuX2lzTnVtYmVyKCBkYXRhLmhlaWdodCApICkge1xuXHRcdFx0dGhpcy5zaXplLmhlaWdodCA9IGRhdGEuaGVpZ2h0O1xuXHRcdH1cblx0XHRpZiAoIHRoaXMuX2lzTnVtYmVyKCBkYXRhLndpZHRoICkgKSB7XG5cdFx0XHR0aGlzLnNpemUud2lkdGggPSBkYXRhLndpZHRoO1xuXHRcdH1cblx0fSxcblxuXHRfdXBkYXRlUmF0aW86IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0dmFyIGNwb3MgPSB0aGlzLnBvc2l0aW9uLFxuXHRcdFx0Y3NpemUgPSB0aGlzLnNpemUsXG5cdFx0XHRhID0gdGhpcy5heGlzO1xuXG5cdFx0aWYgKCB0aGlzLl9pc051bWJlciggZGF0YS5oZWlnaHQgKSApIHtcblx0XHRcdGRhdGEud2lkdGggPSAoIGRhdGEuaGVpZ2h0ICogdGhpcy5hc3BlY3RSYXRpbyApO1xuXHRcdH0gZWxzZSBpZiAoIHRoaXMuX2lzTnVtYmVyKCBkYXRhLndpZHRoICkgKSB7XG5cdFx0XHRkYXRhLmhlaWdodCA9ICggZGF0YS53aWR0aCAvIHRoaXMuYXNwZWN0UmF0aW8gKTtcblx0XHR9XG5cblx0XHRpZiAoIGEgPT09IFwic3dcIiApIHtcblx0XHRcdGRhdGEubGVmdCA9IGNwb3MubGVmdCArICggY3NpemUud2lkdGggLSBkYXRhLndpZHRoICk7XG5cdFx0XHRkYXRhLnRvcCA9IG51bGw7XG5cdFx0fVxuXHRcdGlmICggYSA9PT0gXCJud1wiICkge1xuXHRcdFx0ZGF0YS50b3AgPSBjcG9zLnRvcCArICggY3NpemUuaGVpZ2h0IC0gZGF0YS5oZWlnaHQgKTtcblx0XHRcdGRhdGEubGVmdCA9IGNwb3MubGVmdCArICggY3NpemUud2lkdGggLSBkYXRhLndpZHRoICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGE7XG5cdH0sXG5cblx0X3Jlc3BlY3RTaXplOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdHZhciBvID0gdGhpcy5fdkJvdW5kYXJpZXMsXG5cdFx0XHRhID0gdGhpcy5heGlzLFxuXHRcdFx0aXNtYXh3ID0gdGhpcy5faXNOdW1iZXIoIGRhdGEud2lkdGggKSAmJiBvLm1heFdpZHRoICYmICggby5tYXhXaWR0aCA8IGRhdGEud2lkdGggKSxcblx0XHRcdGlzbWF4aCA9IHRoaXMuX2lzTnVtYmVyKCBkYXRhLmhlaWdodCApICYmIG8ubWF4SGVpZ2h0ICYmICggby5tYXhIZWlnaHQgPCBkYXRhLmhlaWdodCApLFxuXHRcdFx0aXNtaW53ID0gdGhpcy5faXNOdW1iZXIoIGRhdGEud2lkdGggKSAmJiBvLm1pbldpZHRoICYmICggby5taW5XaWR0aCA+IGRhdGEud2lkdGggKSxcblx0XHRcdGlzbWluaCA9IHRoaXMuX2lzTnVtYmVyKCBkYXRhLmhlaWdodCApICYmIG8ubWluSGVpZ2h0ICYmICggby5taW5IZWlnaHQgPiBkYXRhLmhlaWdodCApLFxuXHRcdFx0ZHcgPSB0aGlzLm9yaWdpbmFsUG9zaXRpb24ubGVmdCArIHRoaXMub3JpZ2luYWxTaXplLndpZHRoLFxuXHRcdFx0ZGggPSB0aGlzLm9yaWdpbmFsUG9zaXRpb24udG9wICsgdGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0LFxuXHRcdFx0Y3cgPSAvc3d8bnd8dy8udGVzdCggYSApLCBjaCA9IC9ud3xuZXxuLy50ZXN0KCBhICk7XG5cdFx0aWYgKCBpc21pbncgKSB7XG5cdFx0XHRkYXRhLndpZHRoID0gby5taW5XaWR0aDtcblx0XHR9XG5cdFx0aWYgKCBpc21pbmggKSB7XG5cdFx0XHRkYXRhLmhlaWdodCA9IG8ubWluSGVpZ2h0O1xuXHRcdH1cblx0XHRpZiAoIGlzbWF4dyApIHtcblx0XHRcdGRhdGEud2lkdGggPSBvLm1heFdpZHRoO1xuXHRcdH1cblx0XHRpZiAoIGlzbWF4aCApIHtcblx0XHRcdGRhdGEuaGVpZ2h0ID0gby5tYXhIZWlnaHQ7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc21pbncgJiYgY3cgKSB7XG5cdFx0XHRkYXRhLmxlZnQgPSBkdyAtIG8ubWluV2lkdGg7XG5cdFx0fVxuXHRcdGlmICggaXNtYXh3ICYmIGN3ICkge1xuXHRcdFx0ZGF0YS5sZWZ0ID0gZHcgLSBvLm1heFdpZHRoO1xuXHRcdH1cblx0XHRpZiAoIGlzbWluaCAmJiBjaCApIHtcblx0XHRcdGRhdGEudG9wID0gZGggLSBvLm1pbkhlaWdodDtcblx0XHR9XG5cdFx0aWYgKCBpc21heGggJiYgY2ggKSB7XG5cdFx0XHRkYXRhLnRvcCA9IGRoIC0gby5tYXhIZWlnaHQ7XG5cdFx0fVxuXG5cdFx0Ly8gRml4aW5nIGp1bXAgZXJyb3Igb24gdG9wL2xlZnQgLSBidWcgIzIzMzBcblx0XHRpZiAoICFkYXRhLndpZHRoICYmICFkYXRhLmhlaWdodCAmJiAhZGF0YS5sZWZ0ICYmIGRhdGEudG9wICkge1xuXHRcdFx0ZGF0YS50b3AgPSBudWxsO1xuXHRcdH0gZWxzZSBpZiAoICFkYXRhLndpZHRoICYmICFkYXRhLmhlaWdodCAmJiAhZGF0YS50b3AgJiYgZGF0YS5sZWZ0ICkge1xuXHRcdFx0ZGF0YS5sZWZ0ID0gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YTtcblx0fSxcblxuXHRfZ2V0UGFkZGluZ1BsdXNCb3JkZXJEaW1lbnNpb25zOiBmdW5jdGlvbiggZWxlbWVudCApIHtcblx0XHR2YXIgaSA9IDAsXG5cdFx0XHR3aWR0aHMgPSBbXSxcblx0XHRcdGJvcmRlcnMgPSBbXG5cdFx0XHRcdGVsZW1lbnQuY3NzKCBcImJvcmRlclRvcFdpZHRoXCIgKSxcblx0XHRcdFx0ZWxlbWVudC5jc3MoIFwiYm9yZGVyUmlnaHRXaWR0aFwiICksXG5cdFx0XHRcdGVsZW1lbnQuY3NzKCBcImJvcmRlckJvdHRvbVdpZHRoXCIgKSxcblx0XHRcdFx0ZWxlbWVudC5jc3MoIFwiYm9yZGVyTGVmdFdpZHRoXCIgKVxuXHRcdFx0XSxcblx0XHRcdHBhZGRpbmdzID0gW1xuXHRcdFx0XHRlbGVtZW50LmNzcyggXCJwYWRkaW5nVG9wXCIgKSxcblx0XHRcdFx0ZWxlbWVudC5jc3MoIFwicGFkZGluZ1JpZ2h0XCIgKSxcblx0XHRcdFx0ZWxlbWVudC5jc3MoIFwicGFkZGluZ0JvdHRvbVwiICksXG5cdFx0XHRcdGVsZW1lbnQuY3NzKCBcInBhZGRpbmdMZWZ0XCIgKVxuXHRcdFx0XTtcblxuXHRcdGZvciAoIDsgaSA8IDQ7IGkrKyApIHtcblx0XHRcdHdpZHRoc1sgaSBdID0gKCBwYXJzZUZsb2F0KCBib3JkZXJzWyBpIF0gKSB8fCAwICk7XG5cdFx0XHR3aWR0aHNbIGkgXSArPSAoIHBhcnNlRmxvYXQoIHBhZGRpbmdzWyBpIF0gKSB8fCAwICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGhlaWdodDogd2lkdGhzWyAwIF0gKyB3aWR0aHNbIDIgXSxcblx0XHRcdHdpZHRoOiB3aWR0aHNbIDEgXSArIHdpZHRoc1sgMyBdXG5cdFx0fTtcblx0fSxcblxuXHRfcHJvcG9ydGlvbmFsbHlSZXNpemU6IGZ1bmN0aW9uKCkge1xuXG5cdFx0aWYgKCAhdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIHByZWwsXG5cdFx0XHRpID0gMCxcblx0XHRcdGVsZW1lbnQgPSB0aGlzLmhlbHBlciB8fCB0aGlzLmVsZW1lbnQ7XG5cblx0XHRmb3IgKCA7IGkgPCB0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxlbmd0aDsgaSsrICkge1xuXG5cdFx0XHRwcmVsID0gdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50c1sgaSBdO1xuXG5cdFx0XHQvLyBUT0RPOiBTZWVtcyBsaWtlIGEgYnVnIHRvIGNhY2hlIHRoaXMub3V0ZXJEaW1lbnNpb25zXG5cdFx0XHQvLyBjb25zaWRlcmluZyB0aGF0IHdlIGFyZSBpbiBhIGxvb3AuXG5cdFx0XHRpZiAoICF0aGlzLm91dGVyRGltZW5zaW9ucyApIHtcblx0XHRcdFx0dGhpcy5vdXRlckRpbWVuc2lvbnMgPSB0aGlzLl9nZXRQYWRkaW5nUGx1c0JvcmRlckRpbWVuc2lvbnMoIHByZWwgKTtcblx0XHRcdH1cblxuXHRcdFx0cHJlbC5jc3MoIHtcblx0XHRcdFx0aGVpZ2h0OiAoIGVsZW1lbnQuaGVpZ2h0KCkgLSB0aGlzLm91dGVyRGltZW5zaW9ucy5oZWlnaHQgKSB8fCAwLFxuXHRcdFx0XHR3aWR0aDogKCBlbGVtZW50LndpZHRoKCkgLSB0aGlzLm91dGVyRGltZW5zaW9ucy53aWR0aCApIHx8IDBcblx0XHRcdH0gKTtcblxuXHRcdH1cblxuXHR9LFxuXG5cdF9yZW5kZXJQcm94eTogZnVuY3Rpb24oKSB7XG5cblx0XHR2YXIgZWwgPSB0aGlzLmVsZW1lbnQsIG8gPSB0aGlzLm9wdGlvbnM7XG5cdFx0dGhpcy5lbGVtZW50T2Zmc2V0ID0gZWwub2Zmc2V0KCk7XG5cblx0XHRpZiAoIHRoaXMuX2hlbHBlciApIHtcblxuXHRcdFx0dGhpcy5oZWxwZXIgPSB0aGlzLmhlbHBlciB8fCAkKCBcIjxkaXYgc3R5bGU9J292ZXJmbG93OmhpZGRlbjsnPjwvZGl2PlwiICk7XG5cblx0XHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLmhlbHBlciwgdGhpcy5faGVscGVyICk7XG5cdFx0XHR0aGlzLmhlbHBlci5jc3MoIHtcblx0XHRcdFx0d2lkdGg6IHRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCksXG5cdFx0XHRcdGhlaWdodDogdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCksXG5cdFx0XHRcdHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG5cdFx0XHRcdGxlZnQ6IHRoaXMuZWxlbWVudE9mZnNldC5sZWZ0ICsgXCJweFwiLFxuXHRcdFx0XHR0b3A6IHRoaXMuZWxlbWVudE9mZnNldC50b3AgKyBcInB4XCIsXG5cdFx0XHRcdHpJbmRleDogKytvLnpJbmRleCAvL1RPRE86IERvbid0IG1vZGlmeSBvcHRpb25cblx0XHRcdH0gKTtcblxuXHRcdFx0dGhpcy5oZWxwZXJcblx0XHRcdFx0LmFwcGVuZFRvKCBcImJvZHlcIiApXG5cdFx0XHRcdC5kaXNhYmxlU2VsZWN0aW9uKCk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5oZWxwZXIgPSB0aGlzLmVsZW1lbnQ7XG5cdFx0fVxuXG5cdH0sXG5cblx0X2NoYW5nZToge1xuXHRcdGU6IGZ1bmN0aW9uKCBldmVudCwgZHggKSB7XG5cdFx0XHRyZXR1cm4geyB3aWR0aDogdGhpcy5vcmlnaW5hbFNpemUud2lkdGggKyBkeCB9O1xuXHRcdH0sXG5cdFx0dzogZnVuY3Rpb24oIGV2ZW50LCBkeCApIHtcblx0XHRcdHZhciBjcyA9IHRoaXMub3JpZ2luYWxTaXplLCBzcCA9IHRoaXMub3JpZ2luYWxQb3NpdGlvbjtcblx0XHRcdHJldHVybiB7IGxlZnQ6IHNwLmxlZnQgKyBkeCwgd2lkdGg6IGNzLndpZHRoIC0gZHggfTtcblx0XHR9LFxuXHRcdG46IGZ1bmN0aW9uKCBldmVudCwgZHgsIGR5ICkge1xuXHRcdFx0dmFyIGNzID0gdGhpcy5vcmlnaW5hbFNpemUsIHNwID0gdGhpcy5vcmlnaW5hbFBvc2l0aW9uO1xuXHRcdFx0cmV0dXJuIHsgdG9wOiBzcC50b3AgKyBkeSwgaGVpZ2h0OiBjcy5oZWlnaHQgLSBkeSB9O1xuXHRcdH0sXG5cdFx0czogZnVuY3Rpb24oIGV2ZW50LCBkeCwgZHkgKSB7XG5cdFx0XHRyZXR1cm4geyBoZWlnaHQ6IHRoaXMub3JpZ2luYWxTaXplLmhlaWdodCArIGR5IH07XG5cdFx0fSxcblx0XHRzZTogZnVuY3Rpb24oIGV2ZW50LCBkeCwgZHkgKSB7XG5cdFx0XHRyZXR1cm4gJC5leHRlbmQoIHRoaXMuX2NoYW5nZS5zLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSxcblx0XHRcdFx0dGhpcy5fY2hhbmdlLmUuYXBwbHkoIHRoaXMsIFsgZXZlbnQsIGR4LCBkeSBdICkgKTtcblx0XHR9LFxuXHRcdHN3OiBmdW5jdGlvbiggZXZlbnQsIGR4LCBkeSApIHtcblx0XHRcdHJldHVybiAkLmV4dGVuZCggdGhpcy5fY2hhbmdlLnMuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApLFxuXHRcdFx0XHR0aGlzLl9jaGFuZ2Uudy5hcHBseSggdGhpcywgWyBldmVudCwgZHgsIGR5IF0gKSApO1xuXHRcdH0sXG5cdFx0bmU6IGZ1bmN0aW9uKCBldmVudCwgZHgsIGR5ICkge1xuXHRcdFx0cmV0dXJuICQuZXh0ZW5kKCB0aGlzLl9jaGFuZ2Uubi5hcHBseSggdGhpcywgYXJndW1lbnRzICksXG5cdFx0XHRcdHRoaXMuX2NoYW5nZS5lLmFwcGx5KCB0aGlzLCBbIGV2ZW50LCBkeCwgZHkgXSApICk7XG5cdFx0fSxcblx0XHRudzogZnVuY3Rpb24oIGV2ZW50LCBkeCwgZHkgKSB7XG5cdFx0XHRyZXR1cm4gJC5leHRlbmQoIHRoaXMuX2NoYW5nZS5uLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSxcblx0XHRcdFx0dGhpcy5fY2hhbmdlLncuYXBwbHkoIHRoaXMsIFsgZXZlbnQsIGR4LCBkeSBdICkgKTtcblx0XHR9XG5cdH0sXG5cblx0X3Byb3BhZ2F0ZTogZnVuY3Rpb24oIG4sIGV2ZW50ICkge1xuXHRcdCQudWkucGx1Z2luLmNhbGwoIHRoaXMsIG4sIFsgZXZlbnQsIHRoaXMudWkoKSBdICk7XG5cdFx0KCBuICE9PSBcInJlc2l6ZVwiICYmIHRoaXMuX3RyaWdnZXIoIG4sIGV2ZW50LCB0aGlzLnVpKCkgKSApO1xuXHR9LFxuXG5cdHBsdWdpbnM6IHt9LFxuXG5cdHVpOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0b3JpZ2luYWxFbGVtZW50OiB0aGlzLm9yaWdpbmFsRWxlbWVudCxcblx0XHRcdGVsZW1lbnQ6IHRoaXMuZWxlbWVudCxcblx0XHRcdGhlbHBlcjogdGhpcy5oZWxwZXIsXG5cdFx0XHRwb3NpdGlvbjogdGhpcy5wb3NpdGlvbixcblx0XHRcdHNpemU6IHRoaXMuc2l6ZSxcblx0XHRcdG9yaWdpbmFsU2l6ZTogdGhpcy5vcmlnaW5hbFNpemUsXG5cdFx0XHRvcmlnaW5hbFBvc2l0aW9uOiB0aGlzLm9yaWdpbmFsUG9zaXRpb25cblx0XHR9O1xuXHR9XG5cbn0gKTtcblxuLypcbiAqIFJlc2l6YWJsZSBFeHRlbnNpb25zXG4gKi9cblxuJC51aS5wbHVnaW4uYWRkKCBcInJlc2l6YWJsZVwiLCBcImFuaW1hdGVcIiwge1xuXG5cdHN0b3A6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgdGhhdCA9ICQoIHRoaXMgKS5yZXNpemFibGUoIFwiaW5zdGFuY2VcIiApLFxuXHRcdFx0byA9IHRoYXQub3B0aW9ucyxcblx0XHRcdHByID0gdGhhdC5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cyxcblx0XHRcdGlzdGEgPSBwci5sZW5ndGggJiYgKCAvdGV4dGFyZWEvaSApLnRlc3QoIHByWyAwIF0ubm9kZU5hbWUgKSxcblx0XHRcdHNvZmZzZXRoID0gaXN0YSAmJiB0aGF0Ll9oYXNTY3JvbGwoIHByWyAwIF0sIFwibGVmdFwiICkgPyAwIDogdGhhdC5zaXplRGlmZi5oZWlnaHQsXG5cdFx0XHRzb2Zmc2V0dyA9IGlzdGEgPyAwIDogdGhhdC5zaXplRGlmZi53aWR0aCxcblx0XHRcdHN0eWxlID0ge1xuXHRcdFx0XHR3aWR0aDogKCB0aGF0LnNpemUud2lkdGggLSBzb2Zmc2V0dyApLFxuXHRcdFx0XHRoZWlnaHQ6ICggdGhhdC5zaXplLmhlaWdodCAtIHNvZmZzZXRoIClcblx0XHRcdH0sXG5cdFx0XHRsZWZ0ID0gKCBwYXJzZUZsb2F0KCB0aGF0LmVsZW1lbnQuY3NzKCBcImxlZnRcIiApICkgK1xuXHRcdFx0XHQoIHRoYXQucG9zaXRpb24ubGVmdCAtIHRoYXQub3JpZ2luYWxQb3NpdGlvbi5sZWZ0ICkgKSB8fCBudWxsLFxuXHRcdFx0dG9wID0gKCBwYXJzZUZsb2F0KCB0aGF0LmVsZW1lbnQuY3NzKCBcInRvcFwiICkgKSArXG5cdFx0XHRcdCggdGhhdC5wb3NpdGlvbi50b3AgLSB0aGF0Lm9yaWdpbmFsUG9zaXRpb24udG9wICkgKSB8fCBudWxsO1xuXG5cdFx0dGhhdC5lbGVtZW50LmFuaW1hdGUoXG5cdFx0XHQkLmV4dGVuZCggc3R5bGUsIHRvcCAmJiBsZWZ0ID8geyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9IDoge30gKSwge1xuXHRcdFx0XHRkdXJhdGlvbjogby5hbmltYXRlRHVyYXRpb24sXG5cdFx0XHRcdGVhc2luZzogby5hbmltYXRlRWFzaW5nLFxuXHRcdFx0XHRzdGVwOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHRcdFx0d2lkdGg6IHBhcnNlRmxvYXQoIHRoYXQuZWxlbWVudC5jc3MoIFwid2lkdGhcIiApICksXG5cdFx0XHRcdFx0XHRoZWlnaHQ6IHBhcnNlRmxvYXQoIHRoYXQuZWxlbWVudC5jc3MoIFwiaGVpZ2h0XCIgKSApLFxuXHRcdFx0XHRcdFx0dG9wOiBwYXJzZUZsb2F0KCB0aGF0LmVsZW1lbnQuY3NzKCBcInRvcFwiICkgKSxcblx0XHRcdFx0XHRcdGxlZnQ6IHBhcnNlRmxvYXQoIHRoYXQuZWxlbWVudC5jc3MoIFwibGVmdFwiICkgKVxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRpZiAoIHByICYmIHByLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdCQoIHByWyAwIF0gKS5jc3MoIHsgd2lkdGg6IGRhdGEud2lkdGgsIGhlaWdodDogZGF0YS5oZWlnaHQgfSApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByb3BhZ2F0aW5nIHJlc2l6ZSwgYW5kIHVwZGF0aW5nIHZhbHVlcyBmb3IgZWFjaCBhbmltYXRpb24gc3RlcFxuXHRcdFx0XHRcdHRoYXQuX3VwZGF0ZUNhY2hlKCBkYXRhICk7XG5cdFx0XHRcdFx0dGhhdC5fcHJvcGFnYXRlKCBcInJlc2l6ZVwiLCBldmVudCApO1xuXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cbn0gKTtcblxuJC51aS5wbHVnaW4uYWRkKCBcInJlc2l6YWJsZVwiLCBcImNvbnRhaW5tZW50XCIsIHtcblxuXHRzdGFydDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGVsZW1lbnQsIHAsIGNvLCBjaCwgY3csIHdpZHRoLCBoZWlnaHQsXG5cdFx0XHR0aGF0ID0gJCggdGhpcyApLnJlc2l6YWJsZSggXCJpbnN0YW5jZVwiICksXG5cdFx0XHRvID0gdGhhdC5vcHRpb25zLFxuXHRcdFx0ZWwgPSB0aGF0LmVsZW1lbnQsXG5cdFx0XHRvYyA9IG8uY29udGFpbm1lbnQsXG5cdFx0XHRjZSA9ICggb2MgaW5zdGFuY2VvZiAkICkgP1xuXHRcdFx0XHRvYy5nZXQoIDAgKSA6XG5cdFx0XHRcdCggL3BhcmVudC8udGVzdCggb2MgKSApID8gZWwucGFyZW50KCkuZ2V0KCAwICkgOiBvYztcblxuXHRcdGlmICggIWNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoYXQuY29udGFpbmVyRWxlbWVudCA9ICQoIGNlICk7XG5cblx0XHRpZiAoIC9kb2N1bWVudC8udGVzdCggb2MgKSB8fCBvYyA9PT0gZG9jdW1lbnQgKSB7XG5cdFx0XHR0aGF0LmNvbnRhaW5lck9mZnNldCA9IHtcblx0XHRcdFx0bGVmdDogMCxcblx0XHRcdFx0dG9wOiAwXG5cdFx0XHR9O1xuXHRcdFx0dGhhdC5jb250YWluZXJQb3NpdGlvbiA9IHtcblx0XHRcdFx0bGVmdDogMCxcblx0XHRcdFx0dG9wOiAwXG5cdFx0XHR9O1xuXG5cdFx0XHR0aGF0LnBhcmVudERhdGEgPSB7XG5cdFx0XHRcdGVsZW1lbnQ6ICQoIGRvY3VtZW50ICksXG5cdFx0XHRcdGxlZnQ6IDAsXG5cdFx0XHRcdHRvcDogMCxcblx0XHRcdFx0d2lkdGg6ICQoIGRvY3VtZW50ICkud2lkdGgoKSxcblx0XHRcdFx0aGVpZ2h0OiAkKCBkb2N1bWVudCApLmhlaWdodCgpIHx8IGRvY3VtZW50LmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHRcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW1lbnQgPSAkKCBjZSApO1xuXHRcdFx0cCA9IFtdO1xuXHRcdFx0JCggWyBcIlRvcFwiLCBcIlJpZ2h0XCIsIFwiTGVmdFwiLCBcIkJvdHRvbVwiIF0gKS5lYWNoKCBmdW5jdGlvbiggaSwgbmFtZSApIHtcblx0XHRcdFx0cFsgaSBdID0gdGhhdC5fbnVtKCBlbGVtZW50LmNzcyggXCJwYWRkaW5nXCIgKyBuYW1lICkgKTtcblx0XHRcdH0gKTtcblxuXHRcdFx0dGhhdC5jb250YWluZXJPZmZzZXQgPSBlbGVtZW50Lm9mZnNldCgpO1xuXHRcdFx0dGhhdC5jb250YWluZXJQb3NpdGlvbiA9IGVsZW1lbnQucG9zaXRpb24oKTtcblx0XHRcdHRoYXQuY29udGFpbmVyU2l6ZSA9IHtcblx0XHRcdFx0aGVpZ2h0OiAoIGVsZW1lbnQuaW5uZXJIZWlnaHQoKSAtIHBbIDMgXSApLFxuXHRcdFx0XHR3aWR0aDogKCBlbGVtZW50LmlubmVyV2lkdGgoKSAtIHBbIDEgXSApXG5cdFx0XHR9O1xuXG5cdFx0XHRjbyA9IHRoYXQuY29udGFpbmVyT2Zmc2V0O1xuXHRcdFx0Y2ggPSB0aGF0LmNvbnRhaW5lclNpemUuaGVpZ2h0O1xuXHRcdFx0Y3cgPSB0aGF0LmNvbnRhaW5lclNpemUud2lkdGg7XG5cdFx0XHR3aWR0aCA9ICggdGhhdC5faGFzU2Nyb2xsICggY2UsIFwibGVmdFwiICkgPyBjZS5zY3JvbGxXaWR0aCA6IGN3ICk7XG5cdFx0XHRoZWlnaHQgPSAoIHRoYXQuX2hhc1Njcm9sbCAoIGNlICkgPyBjZS5zY3JvbGxIZWlnaHQgOiBjaCApIDtcblxuXHRcdFx0dGhhdC5wYXJlbnREYXRhID0ge1xuXHRcdFx0XHRlbGVtZW50OiBjZSxcblx0XHRcdFx0bGVmdDogY28ubGVmdCxcblx0XHRcdFx0dG9wOiBjby50b3AsXG5cdFx0XHRcdHdpZHRoOiB3aWR0aCxcblx0XHRcdFx0aGVpZ2h0OiBoZWlnaHRcblx0XHRcdH07XG5cdFx0fVxuXHR9LFxuXG5cdHJlc2l6ZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciB3b3NldCwgaG9zZXQsIGlzUGFyZW50LCBpc09mZnNldFJlbGF0aXZlLFxuXHRcdFx0dGhhdCA9ICQoIHRoaXMgKS5yZXNpemFibGUoIFwiaW5zdGFuY2VcIiApLFxuXHRcdFx0byA9IHRoYXQub3B0aW9ucyxcblx0XHRcdGNvID0gdGhhdC5jb250YWluZXJPZmZzZXQsXG5cdFx0XHRjcCA9IHRoYXQucG9zaXRpb24sXG5cdFx0XHRwUmF0aW8gPSB0aGF0Ll9hc3BlY3RSYXRpbyB8fCBldmVudC5zaGlmdEtleSxcblx0XHRcdGNvcCA9IHtcblx0XHRcdFx0dG9wOiAwLFxuXHRcdFx0XHRsZWZ0OiAwXG5cdFx0XHR9LFxuXHRcdFx0Y2UgPSB0aGF0LmNvbnRhaW5lckVsZW1lbnQsXG5cdFx0XHRjb250aW51ZVJlc2l6ZSA9IHRydWU7XG5cblx0XHRpZiAoIGNlWyAwIF0gIT09IGRvY3VtZW50ICYmICggL3N0YXRpYy8gKS50ZXN0KCBjZS5jc3MoIFwicG9zaXRpb25cIiApICkgKSB7XG5cdFx0XHRjb3AgPSBjbztcblx0XHR9XG5cblx0XHRpZiAoIGNwLmxlZnQgPCAoIHRoYXQuX2hlbHBlciA/IGNvLmxlZnQgOiAwICkgKSB7XG5cdFx0XHR0aGF0LnNpemUud2lkdGggPSB0aGF0LnNpemUud2lkdGggK1xuXHRcdFx0XHQoIHRoYXQuX2hlbHBlciA/XG5cdFx0XHRcdFx0KCB0aGF0LnBvc2l0aW9uLmxlZnQgLSBjby5sZWZ0ICkgOlxuXHRcdFx0XHRcdCggdGhhdC5wb3NpdGlvbi5sZWZ0IC0gY29wLmxlZnQgKSApO1xuXG5cdFx0XHRpZiAoIHBSYXRpbyApIHtcblx0XHRcdFx0dGhhdC5zaXplLmhlaWdodCA9IHRoYXQuc2l6ZS53aWR0aCAvIHRoYXQuYXNwZWN0UmF0aW87XG5cdFx0XHRcdGNvbnRpbnVlUmVzaXplID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR0aGF0LnBvc2l0aW9uLmxlZnQgPSBvLmhlbHBlciA/IGNvLmxlZnQgOiAwO1xuXHRcdH1cblxuXHRcdGlmICggY3AudG9wIDwgKCB0aGF0Ll9oZWxwZXIgPyBjby50b3AgOiAwICkgKSB7XG5cdFx0XHR0aGF0LnNpemUuaGVpZ2h0ID0gdGhhdC5zaXplLmhlaWdodCArXG5cdFx0XHRcdCggdGhhdC5faGVscGVyID9cblx0XHRcdFx0XHQoIHRoYXQucG9zaXRpb24udG9wIC0gY28udG9wICkgOlxuXHRcdFx0XHRcdHRoYXQucG9zaXRpb24udG9wICk7XG5cblx0XHRcdGlmICggcFJhdGlvICkge1xuXHRcdFx0XHR0aGF0LnNpemUud2lkdGggPSB0aGF0LnNpemUuaGVpZ2h0ICogdGhhdC5hc3BlY3RSYXRpbztcblx0XHRcdFx0Y29udGludWVSZXNpemUgPSBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHRoYXQucG9zaXRpb24udG9wID0gdGhhdC5faGVscGVyID8gY28udG9wIDogMDtcblx0XHR9XG5cblx0XHRpc1BhcmVudCA9IHRoYXQuY29udGFpbmVyRWxlbWVudC5nZXQoIDAgKSA9PT0gdGhhdC5lbGVtZW50LnBhcmVudCgpLmdldCggMCApO1xuXHRcdGlzT2Zmc2V0UmVsYXRpdmUgPSAvcmVsYXRpdmV8YWJzb2x1dGUvLnRlc3QoIHRoYXQuY29udGFpbmVyRWxlbWVudC5jc3MoIFwicG9zaXRpb25cIiApICk7XG5cblx0XHRpZiAoIGlzUGFyZW50ICYmIGlzT2Zmc2V0UmVsYXRpdmUgKSB7XG5cdFx0XHR0aGF0Lm9mZnNldC5sZWZ0ID0gdGhhdC5wYXJlbnREYXRhLmxlZnQgKyB0aGF0LnBvc2l0aW9uLmxlZnQ7XG5cdFx0XHR0aGF0Lm9mZnNldC50b3AgPSB0aGF0LnBhcmVudERhdGEudG9wICsgdGhhdC5wb3NpdGlvbi50b3A7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoYXQub2Zmc2V0LmxlZnQgPSB0aGF0LmVsZW1lbnQub2Zmc2V0KCkubGVmdDtcblx0XHRcdHRoYXQub2Zmc2V0LnRvcCA9IHRoYXQuZWxlbWVudC5vZmZzZXQoKS50b3A7XG5cdFx0fVxuXG5cdFx0d29zZXQgPSBNYXRoLmFicyggdGhhdC5zaXplRGlmZi53aWR0aCArXG5cdFx0XHQoIHRoYXQuX2hlbHBlciA/XG5cdFx0XHRcdHRoYXQub2Zmc2V0LmxlZnQgLSBjb3AubGVmdCA6XG5cdFx0XHRcdCggdGhhdC5vZmZzZXQubGVmdCAtIGNvLmxlZnQgKSApICk7XG5cblx0XHRob3NldCA9IE1hdGguYWJzKCB0aGF0LnNpemVEaWZmLmhlaWdodCArXG5cdFx0XHQoIHRoYXQuX2hlbHBlciA/XG5cdFx0XHRcdHRoYXQub2Zmc2V0LnRvcCAtIGNvcC50b3AgOlxuXHRcdFx0XHQoIHRoYXQub2Zmc2V0LnRvcCAtIGNvLnRvcCApICkgKTtcblxuXHRcdGlmICggd29zZXQgKyB0aGF0LnNpemUud2lkdGggPj0gdGhhdC5wYXJlbnREYXRhLndpZHRoICkge1xuXHRcdFx0dGhhdC5zaXplLndpZHRoID0gdGhhdC5wYXJlbnREYXRhLndpZHRoIC0gd29zZXQ7XG5cdFx0XHRpZiAoIHBSYXRpbyApIHtcblx0XHRcdFx0dGhhdC5zaXplLmhlaWdodCA9IHRoYXQuc2l6ZS53aWR0aCAvIHRoYXQuYXNwZWN0UmF0aW87XG5cdFx0XHRcdGNvbnRpbnVlUmVzaXplID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBob3NldCArIHRoYXQuc2l6ZS5oZWlnaHQgPj0gdGhhdC5wYXJlbnREYXRhLmhlaWdodCApIHtcblx0XHRcdHRoYXQuc2l6ZS5oZWlnaHQgPSB0aGF0LnBhcmVudERhdGEuaGVpZ2h0IC0gaG9zZXQ7XG5cdFx0XHRpZiAoIHBSYXRpbyApIHtcblx0XHRcdFx0dGhhdC5zaXplLndpZHRoID0gdGhhdC5zaXplLmhlaWdodCAqIHRoYXQuYXNwZWN0UmF0aW87XG5cdFx0XHRcdGNvbnRpbnVlUmVzaXplID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCAhY29udGludWVSZXNpemUgKSB7XG5cdFx0XHR0aGF0LnBvc2l0aW9uLmxlZnQgPSB0aGF0LnByZXZQb3NpdGlvbi5sZWZ0O1xuXHRcdFx0dGhhdC5wb3NpdGlvbi50b3AgPSB0aGF0LnByZXZQb3NpdGlvbi50b3A7XG5cdFx0XHR0aGF0LnNpemUud2lkdGggPSB0aGF0LnByZXZTaXplLndpZHRoO1xuXHRcdFx0dGhhdC5zaXplLmhlaWdodCA9IHRoYXQucHJldlNpemUuaGVpZ2h0O1xuXHRcdH1cblx0fSxcblxuXHRzdG9wOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGhhdCA9ICQoIHRoaXMgKS5yZXNpemFibGUoIFwiaW5zdGFuY2VcIiApLFxuXHRcdFx0byA9IHRoYXQub3B0aW9ucyxcblx0XHRcdGNvID0gdGhhdC5jb250YWluZXJPZmZzZXQsXG5cdFx0XHRjb3AgPSB0aGF0LmNvbnRhaW5lclBvc2l0aW9uLFxuXHRcdFx0Y2UgPSB0aGF0LmNvbnRhaW5lckVsZW1lbnQsXG5cdFx0XHRoZWxwZXIgPSAkKCB0aGF0LmhlbHBlciApLFxuXHRcdFx0aG8gPSBoZWxwZXIub2Zmc2V0KCksXG5cdFx0XHR3ID0gaGVscGVyLm91dGVyV2lkdGgoKSAtIHRoYXQuc2l6ZURpZmYud2lkdGgsXG5cdFx0XHRoID0gaGVscGVyLm91dGVySGVpZ2h0KCkgLSB0aGF0LnNpemVEaWZmLmhlaWdodDtcblxuXHRcdGlmICggdGhhdC5faGVscGVyICYmICFvLmFuaW1hdGUgJiYgKCAvcmVsYXRpdmUvICkudGVzdCggY2UuY3NzKCBcInBvc2l0aW9uXCIgKSApICkge1xuXHRcdFx0JCggdGhpcyApLmNzcygge1xuXHRcdFx0XHRsZWZ0OiBoby5sZWZ0IC0gY29wLmxlZnQgLSBjby5sZWZ0LFxuXHRcdFx0XHR3aWR0aDogdyxcblx0XHRcdFx0aGVpZ2h0OiBoXG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGF0Ll9oZWxwZXIgJiYgIW8uYW5pbWF0ZSAmJiAoIC9zdGF0aWMvICkudGVzdCggY2UuY3NzKCBcInBvc2l0aW9uXCIgKSApICkge1xuXHRcdFx0JCggdGhpcyApLmNzcygge1xuXHRcdFx0XHRsZWZ0OiBoby5sZWZ0IC0gY29wLmxlZnQgLSBjby5sZWZ0LFxuXHRcdFx0XHR3aWR0aDogdyxcblx0XHRcdFx0aGVpZ2h0OiBoXG5cdFx0XHR9ICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cbiQudWkucGx1Z2luLmFkZCggXCJyZXNpemFibGVcIiwgXCJhbHNvUmVzaXplXCIsIHtcblxuXHRzdGFydDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRoYXQgPSAkKCB0aGlzICkucmVzaXphYmxlKCBcImluc3RhbmNlXCIgKSxcblx0XHRcdG8gPSB0aGF0Lm9wdGlvbnM7XG5cblx0XHQkKCBvLmFsc29SZXNpemUgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBlbCA9ICQoIHRoaXMgKTtcblx0XHRcdGVsLmRhdGEoIFwidWktcmVzaXphYmxlLWFsc29yZXNpemVcIiwge1xuXHRcdFx0XHR3aWR0aDogcGFyc2VGbG9hdCggZWwud2lkdGgoKSApLCBoZWlnaHQ6IHBhcnNlRmxvYXQoIGVsLmhlaWdodCgpICksXG5cdFx0XHRcdGxlZnQ6IHBhcnNlRmxvYXQoIGVsLmNzcyggXCJsZWZ0XCIgKSApLCB0b3A6IHBhcnNlRmxvYXQoIGVsLmNzcyggXCJ0b3BcIiApIClcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0cmVzaXplOiBmdW5jdGlvbiggZXZlbnQsIHVpICkge1xuXHRcdHZhciB0aGF0ID0gJCggdGhpcyApLnJlc2l6YWJsZSggXCJpbnN0YW5jZVwiICksXG5cdFx0XHRvID0gdGhhdC5vcHRpb25zLFxuXHRcdFx0b3MgPSB0aGF0Lm9yaWdpbmFsU2l6ZSxcblx0XHRcdG9wID0gdGhhdC5vcmlnaW5hbFBvc2l0aW9uLFxuXHRcdFx0ZGVsdGEgPSB7XG5cdFx0XHRcdGhlaWdodDogKCB0aGF0LnNpemUuaGVpZ2h0IC0gb3MuaGVpZ2h0ICkgfHwgMCxcblx0XHRcdFx0d2lkdGg6ICggdGhhdC5zaXplLndpZHRoIC0gb3Mud2lkdGggKSB8fCAwLFxuXHRcdFx0XHR0b3A6ICggdGhhdC5wb3NpdGlvbi50b3AgLSBvcC50b3AgKSB8fCAwLFxuXHRcdFx0XHRsZWZ0OiAoIHRoYXQucG9zaXRpb24ubGVmdCAtIG9wLmxlZnQgKSB8fCAwXG5cdFx0XHR9O1xuXG5cdFx0XHQkKCBvLmFsc29SZXNpemUgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGVsID0gJCggdGhpcyApLCBzdGFydCA9ICQoIHRoaXMgKS5kYXRhKCBcInVpLXJlc2l6YWJsZS1hbHNvcmVzaXplXCIgKSwgc3R5bGUgPSB7fSxcblx0XHRcdFx0XHRjc3MgPSBlbC5wYXJlbnRzKCB1aS5vcmlnaW5hbEVsZW1lbnRbIDAgXSApLmxlbmd0aCA/XG5cdFx0XHRcdFx0XHRcdFsgXCJ3aWR0aFwiLCBcImhlaWdodFwiIF0gOlxuXHRcdFx0XHRcdFx0XHRbIFwid2lkdGhcIiwgXCJoZWlnaHRcIiwgXCJ0b3BcIiwgXCJsZWZ0XCIgXTtcblxuXHRcdFx0XHQkLmVhY2goIGNzcywgZnVuY3Rpb24oIGksIHByb3AgKSB7XG5cdFx0XHRcdFx0dmFyIHN1bSA9ICggc3RhcnRbIHByb3AgXSB8fCAwICkgKyAoIGRlbHRhWyBwcm9wIF0gfHwgMCApO1xuXHRcdFx0XHRcdGlmICggc3VtICYmIHN1bSA+PSAwICkge1xuXHRcdFx0XHRcdFx0c3R5bGVbIHByb3AgXSA9IHN1bSB8fCBudWxsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdGVsLmNzcyggc3R5bGUgKTtcblx0XHRcdH0gKTtcblx0fSxcblxuXHRzdG9wOiBmdW5jdGlvbigpIHtcblx0XHQkKCB0aGlzICkucmVtb3ZlRGF0YSggXCJ1aS1yZXNpemFibGUtYWxzb3Jlc2l6ZVwiICk7XG5cdH1cbn0gKTtcblxuJC51aS5wbHVnaW4uYWRkKCBcInJlc2l6YWJsZVwiLCBcImdob3N0XCIsIHtcblxuXHRzdGFydDogZnVuY3Rpb24oKSB7XG5cblx0XHR2YXIgdGhhdCA9ICQoIHRoaXMgKS5yZXNpemFibGUoIFwiaW5zdGFuY2VcIiApLCBjcyA9IHRoYXQuc2l6ZTtcblxuXHRcdHRoYXQuZ2hvc3QgPSB0aGF0Lm9yaWdpbmFsRWxlbWVudC5jbG9uZSgpO1xuXHRcdHRoYXQuZ2hvc3QuY3NzKCB7XG5cdFx0XHRvcGFjaXR5OiAwLjI1LFxuXHRcdFx0ZGlzcGxheTogXCJibG9ja1wiLFxuXHRcdFx0cG9zaXRpb246IFwicmVsYXRpdmVcIixcblx0XHRcdGhlaWdodDogY3MuaGVpZ2h0LFxuXHRcdFx0d2lkdGg6IGNzLndpZHRoLFxuXHRcdFx0bWFyZ2luOiAwLFxuXHRcdFx0bGVmdDogMCxcblx0XHRcdHRvcDogMFxuXHRcdH0gKTtcblxuXHRcdHRoYXQuX2FkZENsYXNzKCB0aGF0Lmdob3N0LCBcInVpLXJlc2l6YWJsZS1naG9zdFwiICk7XG5cblx0XHQvLyBERVBSRUNBVEVEXG5cdFx0Ly8gVE9ETzogcmVtb3ZlIGFmdGVyIDEuMTJcblx0XHRpZiAoICQudWlCYWNrQ29tcGF0ICE9PSBmYWxzZSAmJiB0eXBlb2YgdGhhdC5vcHRpb25zLmdob3N0ID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyBHaG9zdCBvcHRpb25cblx0XHRcdHRoYXQuZ2hvc3QuYWRkQ2xhc3MoIHRoaXMub3B0aW9ucy5naG9zdCApO1xuXHRcdH1cblxuXHRcdHRoYXQuZ2hvc3QuYXBwZW5kVG8oIHRoYXQuaGVscGVyICk7XG5cblx0fSxcblxuXHRyZXNpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aGF0ID0gJCggdGhpcyApLnJlc2l6YWJsZSggXCJpbnN0YW5jZVwiICk7XG5cdFx0aWYgKCB0aGF0Lmdob3N0ICkge1xuXHRcdFx0dGhhdC5naG9zdC5jc3MoIHtcblx0XHRcdFx0cG9zaXRpb246IFwicmVsYXRpdmVcIixcblx0XHRcdFx0aGVpZ2h0OiB0aGF0LnNpemUuaGVpZ2h0LFxuXHRcdFx0XHR3aWR0aDogdGhhdC5zaXplLndpZHRoXG5cdFx0XHR9ICk7XG5cdFx0fVxuXHR9LFxuXG5cdHN0b3A6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aGF0ID0gJCggdGhpcyApLnJlc2l6YWJsZSggXCJpbnN0YW5jZVwiICk7XG5cdFx0aWYgKCB0aGF0Lmdob3N0ICYmIHRoYXQuaGVscGVyICkge1xuXHRcdFx0dGhhdC5oZWxwZXIuZ2V0KCAwICkucmVtb3ZlQ2hpbGQoIHRoYXQuZ2hvc3QuZ2V0KCAwICkgKTtcblx0XHR9XG5cdH1cblxufSApO1xuXG4kLnVpLnBsdWdpbi5hZGQoIFwicmVzaXphYmxlXCIsIFwiZ3JpZFwiLCB7XG5cblx0cmVzaXplOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgb3V0ZXJEaW1lbnNpb25zLFxuXHRcdFx0dGhhdCA9ICQoIHRoaXMgKS5yZXNpemFibGUoIFwiaW5zdGFuY2VcIiApLFxuXHRcdFx0byA9IHRoYXQub3B0aW9ucyxcblx0XHRcdGNzID0gdGhhdC5zaXplLFxuXHRcdFx0b3MgPSB0aGF0Lm9yaWdpbmFsU2l6ZSxcblx0XHRcdG9wID0gdGhhdC5vcmlnaW5hbFBvc2l0aW9uLFxuXHRcdFx0YSA9IHRoYXQuYXhpcyxcblx0XHRcdGdyaWQgPSB0eXBlb2Ygby5ncmlkID09PSBcIm51bWJlclwiID8gWyBvLmdyaWQsIG8uZ3JpZCBdIDogby5ncmlkLFxuXHRcdFx0Z3JpZFggPSAoIGdyaWRbIDAgXSB8fCAxICksXG5cdFx0XHRncmlkWSA9ICggZ3JpZFsgMSBdIHx8IDEgKSxcblx0XHRcdG94ID0gTWF0aC5yb3VuZCggKCBjcy53aWR0aCAtIG9zLndpZHRoICkgLyBncmlkWCApICogZ3JpZFgsXG5cdFx0XHRveSA9IE1hdGgucm91bmQoICggY3MuaGVpZ2h0IC0gb3MuaGVpZ2h0ICkgLyBncmlkWSApICogZ3JpZFksXG5cdFx0XHRuZXdXaWR0aCA9IG9zLndpZHRoICsgb3gsXG5cdFx0XHRuZXdIZWlnaHQgPSBvcy5oZWlnaHQgKyBveSxcblx0XHRcdGlzTWF4V2lkdGggPSBvLm1heFdpZHRoICYmICggby5tYXhXaWR0aCA8IG5ld1dpZHRoICksXG5cdFx0XHRpc01heEhlaWdodCA9IG8ubWF4SGVpZ2h0ICYmICggby5tYXhIZWlnaHQgPCBuZXdIZWlnaHQgKSxcblx0XHRcdGlzTWluV2lkdGggPSBvLm1pbldpZHRoICYmICggby5taW5XaWR0aCA+IG5ld1dpZHRoICksXG5cdFx0XHRpc01pbkhlaWdodCA9IG8ubWluSGVpZ2h0ICYmICggby5taW5IZWlnaHQgPiBuZXdIZWlnaHQgKTtcblxuXHRcdG8uZ3JpZCA9IGdyaWQ7XG5cblx0XHRpZiAoIGlzTWluV2lkdGggKSB7XG5cdFx0XHRuZXdXaWR0aCArPSBncmlkWDtcblx0XHR9XG5cdFx0aWYgKCBpc01pbkhlaWdodCApIHtcblx0XHRcdG5ld0hlaWdodCArPSBncmlkWTtcblx0XHR9XG5cdFx0aWYgKCBpc01heFdpZHRoICkge1xuXHRcdFx0bmV3V2lkdGggLT0gZ3JpZFg7XG5cdFx0fVxuXHRcdGlmICggaXNNYXhIZWlnaHQgKSB7XG5cdFx0XHRuZXdIZWlnaHQgLT0gZ3JpZFk7XG5cdFx0fVxuXG5cdFx0aWYgKCAvXihzZXxzfGUpJC8udGVzdCggYSApICkge1xuXHRcdFx0dGhhdC5zaXplLndpZHRoID0gbmV3V2lkdGg7XG5cdFx0XHR0aGF0LnNpemUuaGVpZ2h0ID0gbmV3SGVpZ2h0O1xuXHRcdH0gZWxzZSBpZiAoIC9eKG5lKSQvLnRlc3QoIGEgKSApIHtcblx0XHRcdHRoYXQuc2l6ZS53aWR0aCA9IG5ld1dpZHRoO1xuXHRcdFx0dGhhdC5zaXplLmhlaWdodCA9IG5ld0hlaWdodDtcblx0XHRcdHRoYXQucG9zaXRpb24udG9wID0gb3AudG9wIC0gb3k7XG5cdFx0fSBlbHNlIGlmICggL14oc3cpJC8udGVzdCggYSApICkge1xuXHRcdFx0dGhhdC5zaXplLndpZHRoID0gbmV3V2lkdGg7XG5cdFx0XHR0aGF0LnNpemUuaGVpZ2h0ID0gbmV3SGVpZ2h0O1xuXHRcdFx0dGhhdC5wb3NpdGlvbi5sZWZ0ID0gb3AubGVmdCAtIG94O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIG5ld0hlaWdodCAtIGdyaWRZIDw9IDAgfHwgbmV3V2lkdGggLSBncmlkWCA8PSAwICkge1xuXHRcdFx0XHRvdXRlckRpbWVuc2lvbnMgPSB0aGF0Ll9nZXRQYWRkaW5nUGx1c0JvcmRlckRpbWVuc2lvbnMoIHRoaXMgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBuZXdIZWlnaHQgLSBncmlkWSA+IDAgKSB7XG5cdFx0XHRcdHRoYXQuc2l6ZS5oZWlnaHQgPSBuZXdIZWlnaHQ7XG5cdFx0XHRcdHRoYXQucG9zaXRpb24udG9wID0gb3AudG9wIC0gb3k7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuZXdIZWlnaHQgPSBncmlkWSAtIG91dGVyRGltZW5zaW9ucy5oZWlnaHQ7XG5cdFx0XHRcdHRoYXQuc2l6ZS5oZWlnaHQgPSBuZXdIZWlnaHQ7XG5cdFx0XHRcdHRoYXQucG9zaXRpb24udG9wID0gb3AudG9wICsgb3MuaGVpZ2h0IC0gbmV3SGVpZ2h0O1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBuZXdXaWR0aCAtIGdyaWRYID4gMCApIHtcblx0XHRcdFx0dGhhdC5zaXplLndpZHRoID0gbmV3V2lkdGg7XG5cdFx0XHRcdHRoYXQucG9zaXRpb24ubGVmdCA9IG9wLmxlZnQgLSBveDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5ld1dpZHRoID0gZ3JpZFggLSBvdXRlckRpbWVuc2lvbnMud2lkdGg7XG5cdFx0XHRcdHRoYXQuc2l6ZS53aWR0aCA9IG5ld1dpZHRoO1xuXHRcdFx0XHR0aGF0LnBvc2l0aW9uLmxlZnQgPSBvcC5sZWZ0ICsgb3Mud2lkdGggLSBuZXdXaWR0aDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxufSApO1xuXG52YXIgd2lkZ2V0c1Jlc2l6YWJsZSA9ICQudWkucmVzaXphYmxlO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIERpYWxvZyAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogRGlhbG9nXG4vLz4+Z3JvdXA6IFdpZGdldHNcbi8vPj5kZXNjcmlwdGlvbjogRGlzcGxheXMgY3VzdG9taXphYmxlIGRpYWxvZyB3aW5kb3dzLlxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL2RpYWxvZy9cbi8vPj5kZW1vczogaHR0cDovL2pxdWVyeXVpLmNvbS9kaWFsb2cvXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvY29yZS5jc3Ncbi8vPj5jc3Muc3RydWN0dXJlOiAuLi8uLi90aGVtZXMvYmFzZS9kaWFsb2cuY3NzXG4vLz4+Y3NzLnRoZW1lOiAuLi8uLi90aGVtZXMvYmFzZS90aGVtZS5jc3NcblxuXG5cbiQud2lkZ2V0KCBcInVpLmRpYWxvZ1wiLCB7XG5cdHZlcnNpb246IFwiMS4xMi4xXCIsXG5cdG9wdGlvbnM6IHtcblx0XHRhcHBlbmRUbzogXCJib2R5XCIsXG5cdFx0YXV0b09wZW46IHRydWUsXG5cdFx0YnV0dG9uczogW10sXG5cdFx0Y2xhc3Nlczoge1xuXHRcdFx0XCJ1aS1kaWFsb2dcIjogXCJ1aS1jb3JuZXItYWxsXCIsXG5cdFx0XHRcInVpLWRpYWxvZy10aXRsZWJhclwiOiBcInVpLWNvcm5lci1hbGxcIlxuXHRcdH0sXG5cdFx0Y2xvc2VPbkVzY2FwZTogdHJ1ZSxcblx0XHRjbG9zZVRleHQ6IFwiQ2xvc2VcIixcblx0XHRkcmFnZ2FibGU6IHRydWUsXG5cdFx0aGlkZTogbnVsbCxcblx0XHRoZWlnaHQ6IFwiYXV0b1wiLFxuXHRcdG1heEhlaWdodDogbnVsbCxcblx0XHRtYXhXaWR0aDogbnVsbCxcblx0XHRtaW5IZWlnaHQ6IDE1MCxcblx0XHRtaW5XaWR0aDogMTUwLFxuXHRcdG1vZGFsOiBmYWxzZSxcblx0XHRwb3NpdGlvbjoge1xuXHRcdFx0bXk6IFwiY2VudGVyXCIsXG5cdFx0XHRhdDogXCJjZW50ZXJcIixcblx0XHRcdG9mOiB3aW5kb3csXG5cdFx0XHRjb2xsaXNpb246IFwiZml0XCIsXG5cblx0XHRcdC8vIEVuc3VyZSB0aGUgdGl0bGViYXIgaXMgYWx3YXlzIHZpc2libGVcblx0XHRcdHVzaW5nOiBmdW5jdGlvbiggcG9zICkge1xuXHRcdFx0XHR2YXIgdG9wT2Zmc2V0ID0gJCggdGhpcyApLmNzcyggcG9zICkub2Zmc2V0KCkudG9wO1xuXHRcdFx0XHRpZiAoIHRvcE9mZnNldCA8IDAgKSB7XG5cdFx0XHRcdFx0JCggdGhpcyApLmNzcyggXCJ0b3BcIiwgcG9zLnRvcCAtIHRvcE9mZnNldCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRyZXNpemFibGU6IHRydWUsXG5cdFx0c2hvdzogbnVsbCxcblx0XHR0aXRsZTogbnVsbCxcblx0XHR3aWR0aDogMzAwLFxuXG5cdFx0Ly8gQ2FsbGJhY2tzXG5cdFx0YmVmb3JlQ2xvc2U6IG51bGwsXG5cdFx0Y2xvc2U6IG51bGwsXG5cdFx0ZHJhZzogbnVsbCxcblx0XHRkcmFnU3RhcnQ6IG51bGwsXG5cdFx0ZHJhZ1N0b3A6IG51bGwsXG5cdFx0Zm9jdXM6IG51bGwsXG5cdFx0b3BlbjogbnVsbCxcblx0XHRyZXNpemU6IG51bGwsXG5cdFx0cmVzaXplU3RhcnQ6IG51bGwsXG5cdFx0cmVzaXplU3RvcDogbnVsbFxuXHR9LFxuXG5cdHNpemVSZWxhdGVkT3B0aW9uczoge1xuXHRcdGJ1dHRvbnM6IHRydWUsXG5cdFx0aGVpZ2h0OiB0cnVlLFxuXHRcdG1heEhlaWdodDogdHJ1ZSxcblx0XHRtYXhXaWR0aDogdHJ1ZSxcblx0XHRtaW5IZWlnaHQ6IHRydWUsXG5cdFx0bWluV2lkdGg6IHRydWUsXG5cdFx0d2lkdGg6IHRydWVcblx0fSxcblxuXHRyZXNpemFibGVSZWxhdGVkT3B0aW9uczoge1xuXHRcdG1heEhlaWdodDogdHJ1ZSxcblx0XHRtYXhXaWR0aDogdHJ1ZSxcblx0XHRtaW5IZWlnaHQ6IHRydWUsXG5cdFx0bWluV2lkdGg6IHRydWVcblx0fSxcblxuXHRfY3JlYXRlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLm9yaWdpbmFsQ3NzID0ge1xuXHRcdFx0ZGlzcGxheTogdGhpcy5lbGVtZW50WyAwIF0uc3R5bGUuZGlzcGxheSxcblx0XHRcdHdpZHRoOiB0aGlzLmVsZW1lbnRbIDAgXS5zdHlsZS53aWR0aCxcblx0XHRcdG1pbkhlaWdodDogdGhpcy5lbGVtZW50WyAwIF0uc3R5bGUubWluSGVpZ2h0LFxuXHRcdFx0bWF4SGVpZ2h0OiB0aGlzLmVsZW1lbnRbIDAgXS5zdHlsZS5tYXhIZWlnaHQsXG5cdFx0XHRoZWlnaHQ6IHRoaXMuZWxlbWVudFsgMCBdLnN0eWxlLmhlaWdodFxuXHRcdH07XG5cdFx0dGhpcy5vcmlnaW5hbFBvc2l0aW9uID0ge1xuXHRcdFx0cGFyZW50OiB0aGlzLmVsZW1lbnQucGFyZW50KCksXG5cdFx0XHRpbmRleDogdGhpcy5lbGVtZW50LnBhcmVudCgpLmNoaWxkcmVuKCkuaW5kZXgoIHRoaXMuZWxlbWVudCApXG5cdFx0fTtcblx0XHR0aGlzLm9yaWdpbmFsVGl0bGUgPSB0aGlzLmVsZW1lbnQuYXR0ciggXCJ0aXRsZVwiICk7XG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMudGl0bGUgPT0gbnVsbCAmJiB0aGlzLm9yaWdpbmFsVGl0bGUgIT0gbnVsbCApIHtcblx0XHRcdHRoaXMub3B0aW9ucy50aXRsZSA9IHRoaXMub3JpZ2luYWxUaXRsZTtcblx0XHR9XG5cblx0XHQvLyBEaWFsb2dzIGNhbid0IGJlIGRpc2FibGVkXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMuZGlzYWJsZWQgPSBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLl9jcmVhdGVXcmFwcGVyKCk7XG5cblx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdC5zaG93KClcblx0XHRcdC5yZW1vdmVBdHRyKCBcInRpdGxlXCIgKVxuXHRcdFx0LmFwcGVuZFRvKCB0aGlzLnVpRGlhbG9nICk7XG5cblx0XHR0aGlzLl9hZGRDbGFzcyggXCJ1aS1kaWFsb2ctY29udGVudFwiLCBcInVpLXdpZGdldC1jb250ZW50XCIgKTtcblxuXHRcdHRoaXMuX2NyZWF0ZVRpdGxlYmFyKCk7XG5cdFx0dGhpcy5fY3JlYXRlQnV0dG9uUGFuZSgpO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlICYmICQuZm4uZHJhZ2dhYmxlICkge1xuXHRcdFx0dGhpcy5fbWFrZURyYWdnYWJsZSgpO1xuXHRcdH1cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5yZXNpemFibGUgJiYgJC5mbi5yZXNpemFibGUgKSB7XG5cdFx0XHR0aGlzLl9tYWtlUmVzaXphYmxlKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5faXNPcGVuID0gZmFsc2U7XG5cblx0XHR0aGlzLl90cmFja0ZvY3VzKCk7XG5cdH0sXG5cblx0X2luaXQ6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggdGhpcy5vcHRpb25zLmF1dG9PcGVuICkge1xuXHRcdFx0dGhpcy5vcGVuKCk7XG5cdFx0fVxuXHR9LFxuXG5cdF9hcHBlbmRUbzogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLm9wdGlvbnMuYXBwZW5kVG87XG5cdFx0aWYgKCBlbGVtZW50ICYmICggZWxlbWVudC5qcXVlcnkgfHwgZWxlbWVudC5ub2RlVHlwZSApICkge1xuXHRcdFx0cmV0dXJuICQoIGVsZW1lbnQgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZG9jdW1lbnQuZmluZCggZWxlbWVudCB8fCBcImJvZHlcIiApLmVxKCAwICk7XG5cdH0sXG5cblx0X2Rlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXh0LFxuXHRcdFx0b3JpZ2luYWxQb3NpdGlvbiA9IHRoaXMub3JpZ2luYWxQb3NpdGlvbjtcblxuXHRcdHRoaXMuX3VudHJhY2tJbnN0YW5jZSgpO1xuXHRcdHRoaXMuX2Rlc3Ryb3lPdmVybGF5KCk7XG5cblx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdC5yZW1vdmVVbmlxdWVJZCgpXG5cdFx0XHQuY3NzKCB0aGlzLm9yaWdpbmFsQ3NzIClcblxuXHRcdFx0Ly8gV2l0aG91dCBkZXRhY2hpbmcgZmlyc3QsIHRoZSBmb2xsb3dpbmcgYmVjb21lcyByZWFsbHkgc2xvd1xuXHRcdFx0LmRldGFjaCgpO1xuXG5cdFx0dGhpcy51aURpYWxvZy5yZW1vdmUoKTtcblxuXHRcdGlmICggdGhpcy5vcmlnaW5hbFRpdGxlICkge1xuXHRcdFx0dGhpcy5lbGVtZW50LmF0dHIoIFwidGl0bGVcIiwgdGhpcy5vcmlnaW5hbFRpdGxlICk7XG5cdFx0fVxuXG5cdFx0bmV4dCA9IG9yaWdpbmFsUG9zaXRpb24ucGFyZW50LmNoaWxkcmVuKCkuZXEoIG9yaWdpbmFsUG9zaXRpb24uaW5kZXggKTtcblxuXHRcdC8vIERvbid0IHRyeSB0byBwbGFjZSB0aGUgZGlhbG9nIG5leHQgdG8gaXRzZWxmICgjODYxMylcblx0XHRpZiAoIG5leHQubGVuZ3RoICYmIG5leHRbIDAgXSAhPT0gdGhpcy5lbGVtZW50WyAwIF0gKSB7XG5cdFx0XHRuZXh0LmJlZm9yZSggdGhpcy5lbGVtZW50ICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9yaWdpbmFsUG9zaXRpb24ucGFyZW50LmFwcGVuZCggdGhpcy5lbGVtZW50ICk7XG5cdFx0fVxuXHR9LFxuXG5cdHdpZGdldDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMudWlEaWFsb2c7XG5cdH0sXG5cblx0ZGlzYWJsZTogJC5ub29wLFxuXHRlbmFibGU6ICQubm9vcCxcblxuXHRjbG9zZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblxuXHRcdGlmICggIXRoaXMuX2lzT3BlbiB8fCB0aGlzLl90cmlnZ2VyKCBcImJlZm9yZUNsb3NlXCIsIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX2lzT3BlbiA9IGZhbHNlO1xuXHRcdHRoaXMuX2ZvY3VzZWRFbGVtZW50ID0gbnVsbDtcblx0XHR0aGlzLl9kZXN0cm95T3ZlcmxheSgpO1xuXHRcdHRoaXMuX3VudHJhY2tJbnN0YW5jZSgpO1xuXG5cdFx0aWYgKCAhdGhpcy5vcGVuZXIuZmlsdGVyKCBcIjpmb2N1c2FibGVcIiApLnRyaWdnZXIoIFwiZm9jdXNcIiApLmxlbmd0aCApIHtcblxuXHRcdFx0Ly8gSGlkaW5nIGEgZm9jdXNlZCBlbGVtZW50IGRvZXNuJ3QgdHJpZ2dlciBibHVyIGluIFdlYktpdFxuXHRcdFx0Ly8gc28gaW4gY2FzZSB3ZSBoYXZlIG5vdGhpbmcgdG8gZm9jdXMgb24sIGV4cGxpY2l0bHkgYmx1ciB0aGUgYWN0aXZlIGVsZW1lbnRcblx0XHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzE4MlxuXHRcdFx0JC51aS5zYWZlQmx1ciggJC51aS5zYWZlQWN0aXZlRWxlbWVudCggdGhpcy5kb2N1bWVudFsgMCBdICkgKTtcblx0XHR9XG5cblx0XHR0aGlzLl9oaWRlKCB0aGlzLnVpRGlhbG9nLCB0aGlzLm9wdGlvbnMuaGlkZSwgZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGF0Ll90cmlnZ2VyKCBcImNsb3NlXCIsIGV2ZW50ICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdGlzT3BlbjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2lzT3Blbjtcblx0fSxcblxuXHRtb3ZlVG9Ub3A6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuX21vdmVUb1RvcCgpO1xuXHR9LFxuXG5cdF9tb3ZlVG9Ub3A6IGZ1bmN0aW9uKCBldmVudCwgc2lsZW50ICkge1xuXHRcdHZhciBtb3ZlZCA9IGZhbHNlLFxuXHRcdFx0ekluZGljZXMgPSB0aGlzLnVpRGlhbG9nLnNpYmxpbmdzKCBcIi51aS1mcm9udDp2aXNpYmxlXCIgKS5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gKyQoIHRoaXMgKS5jc3MoIFwiei1pbmRleFwiICk7XG5cdFx0XHR9ICkuZ2V0KCksXG5cdFx0XHR6SW5kZXhNYXggPSBNYXRoLm1heC5hcHBseSggbnVsbCwgekluZGljZXMgKTtcblxuXHRcdGlmICggekluZGV4TWF4ID49ICt0aGlzLnVpRGlhbG9nLmNzcyggXCJ6LWluZGV4XCIgKSApIHtcblx0XHRcdHRoaXMudWlEaWFsb2cuY3NzKCBcInotaW5kZXhcIiwgekluZGV4TWF4ICsgMSApO1xuXHRcdFx0bW92ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICggbW92ZWQgJiYgIXNpbGVudCApIHtcblx0XHRcdHRoaXMuX3RyaWdnZXIoIFwiZm9jdXNcIiwgZXZlbnQgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG1vdmVkO1xuXHR9LFxuXG5cdG9wZW46IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblx0XHRpZiAoIHRoaXMuX2lzT3BlbiApIHtcblx0XHRcdGlmICggdGhpcy5fbW92ZVRvVG9wKCkgKSB7XG5cdFx0XHRcdHRoaXMuX2ZvY3VzVGFiYmFibGUoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9pc09wZW4gPSB0cnVlO1xuXHRcdHRoaXMub3BlbmVyID0gJCggJC51aS5zYWZlQWN0aXZlRWxlbWVudCggdGhpcy5kb2N1bWVudFsgMCBdICkgKTtcblxuXHRcdHRoaXMuX3NpemUoKTtcblx0XHR0aGlzLl9wb3NpdGlvbigpO1xuXHRcdHRoaXMuX2NyZWF0ZU92ZXJsYXkoKTtcblx0XHR0aGlzLl9tb3ZlVG9Ub3AoIG51bGwsIHRydWUgKTtcblxuXHRcdC8vIEVuc3VyZSB0aGUgb3ZlcmxheSBpcyBtb3ZlZCB0byB0aGUgdG9wIHdpdGggdGhlIGRpYWxvZywgYnV0IG9ubHkgd2hlblxuXHRcdC8vIG9wZW5pbmcuIFRoZSBvdmVybGF5IHNob3VsZG4ndCBtb3ZlIGFmdGVyIHRoZSBkaWFsb2cgaXMgb3BlbiBzbyB0aGF0XG5cdFx0Ly8gbW9kZWxlc3MgZGlhbG9ncyBvcGVuZWQgYWZ0ZXIgdGhlIG1vZGFsIGRpYWxvZyBzdGFjayBwcm9wZXJseS5cblx0XHRpZiAoIHRoaXMub3ZlcmxheSApIHtcblx0XHRcdHRoaXMub3ZlcmxheS5jc3MoIFwiei1pbmRleFwiLCB0aGlzLnVpRGlhbG9nLmNzcyggXCJ6LWluZGV4XCIgKSAtIDEgKTtcblx0XHR9XG5cblx0XHR0aGlzLl9zaG93KCB0aGlzLnVpRGlhbG9nLCB0aGlzLm9wdGlvbnMuc2hvdywgZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGF0Ll9mb2N1c1RhYmJhYmxlKCk7XG5cdFx0XHR0aGF0Ll90cmlnZ2VyKCBcImZvY3VzXCIgKTtcblx0XHR9ICk7XG5cblx0XHQvLyBUcmFjayB0aGUgZGlhbG9nIGltbWVkaWF0ZWx5IHVwb24gb3BlbmVuaW5nIGluIGNhc2UgYSBmb2N1cyBldmVudFxuXHRcdC8vIHNvbWVob3cgb2NjdXJzIG91dHNpZGUgb2YgdGhlIGRpYWxvZyBiZWZvcmUgYW4gZWxlbWVudCBpbnNpZGUgdGhlXG5cdFx0Ly8gZGlhbG9nIGlzIGZvY3VzZWQgKCMxMDE1Milcblx0XHR0aGlzLl9tYWtlRm9jdXNUYXJnZXQoKTtcblxuXHRcdHRoaXMuX3RyaWdnZXIoIFwib3BlblwiICk7XG5cdH0sXG5cblx0X2ZvY3VzVGFiYmFibGU6IGZ1bmN0aW9uKCkge1xuXG5cdFx0Ly8gU2V0IGZvY3VzIHRvIHRoZSBmaXJzdCBtYXRjaDpcblx0XHQvLyAxLiBBbiBlbGVtZW50IHRoYXQgd2FzIGZvY3VzZWQgcHJldmlvdXNseVxuXHRcdC8vIDIuIEZpcnN0IGVsZW1lbnQgaW5zaWRlIHRoZSBkaWFsb2cgbWF0Y2hpbmcgW2F1dG9mb2N1c11cblx0XHQvLyAzLiBUYWJiYWJsZSBlbGVtZW50IGluc2lkZSB0aGUgY29udGVudCBlbGVtZW50XG5cdFx0Ly8gNC4gVGFiYmFibGUgZWxlbWVudCBpbnNpZGUgdGhlIGJ1dHRvbnBhbmVcblx0XHQvLyA1LiBUaGUgY2xvc2UgYnV0dG9uXG5cdFx0Ly8gNi4gVGhlIGRpYWxvZyBpdHNlbGZcblx0XHR2YXIgaGFzRm9jdXMgPSB0aGlzLl9mb2N1c2VkRWxlbWVudDtcblx0XHRpZiAoICFoYXNGb2N1cyApIHtcblx0XHRcdGhhc0ZvY3VzID0gdGhpcy5lbGVtZW50LmZpbmQoIFwiW2F1dG9mb2N1c11cIiApO1xuXHRcdH1cblx0XHRpZiAoICFoYXNGb2N1cy5sZW5ndGggKSB7XG5cdFx0XHRoYXNGb2N1cyA9IHRoaXMuZWxlbWVudC5maW5kKCBcIjp0YWJiYWJsZVwiICk7XG5cdFx0fVxuXHRcdGlmICggIWhhc0ZvY3VzLmxlbmd0aCApIHtcblx0XHRcdGhhc0ZvY3VzID0gdGhpcy51aURpYWxvZ0J1dHRvblBhbmUuZmluZCggXCI6dGFiYmFibGVcIiApO1xuXHRcdH1cblx0XHRpZiAoICFoYXNGb2N1cy5sZW5ndGggKSB7XG5cdFx0XHRoYXNGb2N1cyA9IHRoaXMudWlEaWFsb2dUaXRsZWJhckNsb3NlLmZpbHRlciggXCI6dGFiYmFibGVcIiApO1xuXHRcdH1cblx0XHRpZiAoICFoYXNGb2N1cy5sZW5ndGggKSB7XG5cdFx0XHRoYXNGb2N1cyA9IHRoaXMudWlEaWFsb2c7XG5cdFx0fVxuXHRcdGhhc0ZvY3VzLmVxKCAwICkudHJpZ2dlciggXCJmb2N1c1wiICk7XG5cdH0sXG5cblx0X2tlZXBGb2N1czogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGZ1bmN0aW9uIGNoZWNrRm9jdXMoKSB7XG5cdFx0XHR2YXIgYWN0aXZlRWxlbWVudCA9ICQudWkuc2FmZUFjdGl2ZUVsZW1lbnQoIHRoaXMuZG9jdW1lbnRbIDAgXSApLFxuXHRcdFx0XHRpc0FjdGl2ZSA9IHRoaXMudWlEaWFsb2dbIDAgXSA9PT0gYWN0aXZlRWxlbWVudCB8fFxuXHRcdFx0XHRcdCQuY29udGFpbnMoIHRoaXMudWlEaWFsb2dbIDAgXSwgYWN0aXZlRWxlbWVudCApO1xuXHRcdFx0aWYgKCAhaXNBY3RpdmUgKSB7XG5cdFx0XHRcdHRoaXMuX2ZvY3VzVGFiYmFibGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRjaGVja0ZvY3VzLmNhbGwoIHRoaXMgKTtcblxuXHRcdC8vIHN1cHBvcnQ6IElFXG5cdFx0Ly8gSUUgPD0gOCBkb2Vzbid0IHByZXZlbnQgbW92aW5nIGZvY3VzIGV2ZW4gd2l0aCBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cdFx0Ly8gc28gd2UgY2hlY2sgYWdhaW4gbGF0ZXJcblx0XHR0aGlzLl9kZWxheSggY2hlY2tGb2N1cyApO1xuXHR9LFxuXG5cdF9jcmVhdGVXcmFwcGVyOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnVpRGlhbG9nID0gJCggXCI8ZGl2PlwiIClcblx0XHRcdC5oaWRlKClcblx0XHRcdC5hdHRyKCB7XG5cblx0XHRcdFx0Ly8gU2V0dGluZyB0YWJJbmRleCBtYWtlcyB0aGUgZGl2IGZvY3VzYWJsZVxuXHRcdFx0XHR0YWJJbmRleDogLTEsXG5cdFx0XHRcdHJvbGU6IFwiZGlhbG9nXCJcblx0XHRcdH0gKVxuXHRcdFx0LmFwcGVuZFRvKCB0aGlzLl9hcHBlbmRUbygpICk7XG5cblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy51aURpYWxvZywgXCJ1aS1kaWFsb2dcIiwgXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktZnJvbnRcIiApO1xuXHRcdHRoaXMuX29uKCB0aGlzLnVpRGlhbG9nLCB7XG5cdFx0XHRrZXlkb3duOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdGlmICggdGhpcy5vcHRpb25zLmNsb3NlT25Fc2NhcGUgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICYmIGV2ZW50LmtleUNvZGUgJiZcblx0XHRcdFx0XHRcdGV2ZW50LmtleUNvZGUgPT09ICQudWkua2V5Q29kZS5FU0NBUEUgKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHR0aGlzLmNsb3NlKCBldmVudCApO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFByZXZlbnQgdGFiYmluZyBvdXQgb2YgZGlhbG9nc1xuXHRcdFx0XHRpZiAoIGV2ZW50LmtleUNvZGUgIT09ICQudWkua2V5Q29kZS5UQUIgfHwgZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciB0YWJiYWJsZXMgPSB0aGlzLnVpRGlhbG9nLmZpbmQoIFwiOnRhYmJhYmxlXCIgKSxcblx0XHRcdFx0XHRmaXJzdCA9IHRhYmJhYmxlcy5maWx0ZXIoIFwiOmZpcnN0XCIgKSxcblx0XHRcdFx0XHRsYXN0ID0gdGFiYmFibGVzLmZpbHRlciggXCI6bGFzdFwiICk7XG5cblx0XHRcdFx0aWYgKCAoIGV2ZW50LnRhcmdldCA9PT0gbGFzdFsgMCBdIHx8IGV2ZW50LnRhcmdldCA9PT0gdGhpcy51aURpYWxvZ1sgMCBdICkgJiZcblx0XHRcdFx0XHRcdCFldmVudC5zaGlmdEtleSApIHtcblx0XHRcdFx0XHR0aGlzLl9kZWxheSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRmaXJzdC50cmlnZ2VyKCBcImZvY3VzXCIgKTtcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fSBlbHNlIGlmICggKCBldmVudC50YXJnZXQgPT09IGZpcnN0WyAwIF0gfHxcblx0XHRcdFx0XHRcdGV2ZW50LnRhcmdldCA9PT0gdGhpcy51aURpYWxvZ1sgMCBdICkgJiYgZXZlbnQuc2hpZnRLZXkgKSB7XG5cdFx0XHRcdFx0dGhpcy5fZGVsYXkoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0bGFzdC50cmlnZ2VyKCBcImZvY3VzXCIgKTtcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG1vdXNlZG93bjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHRpZiAoIHRoaXMuX21vdmVUb1RvcCggZXZlbnQgKSApIHtcblx0XHRcdFx0XHR0aGlzLl9mb2N1c1RhYmJhYmxlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHQvLyBXZSBhc3N1bWUgdGhhdCBhbnkgZXhpc3RpbmcgYXJpYS1kZXNjcmliZWRieSBhdHRyaWJ1dGUgbWVhbnNcblx0XHQvLyB0aGF0IHRoZSBkaWFsb2cgY29udGVudCBpcyBtYXJrZWQgdXAgcHJvcGVybHlcblx0XHQvLyBvdGhlcndpc2Ugd2UgYnJ1dGUgZm9yY2UgdGhlIGNvbnRlbnQgYXMgdGhlIGRlc2NyaXB0aW9uXG5cdFx0aWYgKCAhdGhpcy5lbGVtZW50LmZpbmQoIFwiW2FyaWEtZGVzY3JpYmVkYnldXCIgKS5sZW5ndGggKSB7XG5cdFx0XHR0aGlzLnVpRGlhbG9nLmF0dHIoIHtcblx0XHRcdFx0XCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHRoaXMuZWxlbWVudC51bmlxdWVJZCgpLmF0dHIoIFwiaWRcIiApXG5cdFx0XHR9ICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9jcmVhdGVUaXRsZWJhcjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHVpRGlhbG9nVGl0bGU7XG5cblx0XHR0aGlzLnVpRGlhbG9nVGl0bGViYXIgPSAkKCBcIjxkaXY+XCIgKTtcblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy51aURpYWxvZ1RpdGxlYmFyLFxuXHRcdFx0XCJ1aS1kaWFsb2ctdGl0bGViYXJcIiwgXCJ1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeFwiICk7XG5cdFx0dGhpcy5fb24oIHRoaXMudWlEaWFsb2dUaXRsZWJhciwge1xuXHRcdFx0bW91c2Vkb3duOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgcHJldmVudCBjbGljayBvbiBjbG9zZSBidXR0b24gKCM4ODM4KVxuXHRcdFx0XHQvLyBGb2N1c2luZyBhIGRpYWxvZyB0aGF0IGlzIHBhcnRpYWxseSBzY3JvbGxlZCBvdXQgb2Ygdmlld1xuXHRcdFx0XHQvLyBjYXVzZXMgdGhlIGJyb3dzZXIgdG8gc2Nyb2xsIGl0IGludG8gdmlldywgcHJldmVudGluZyB0aGUgY2xpY2sgZXZlbnRcblx0XHRcdFx0aWYgKCAhJCggZXZlbnQudGFyZ2V0ICkuY2xvc2VzdCggXCIudWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlXCIgKSApIHtcblxuXHRcdFx0XHRcdC8vIERpYWxvZyBpc24ndCBnZXR0aW5nIGZvY3VzIHdoZW4gZHJhZ2dpbmcgKCM4MDYzKVxuXHRcdFx0XHRcdHRoaXMudWlEaWFsb2cudHJpZ2dlciggXCJmb2N1c1wiICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHQvLyBTdXBwb3J0OiBJRVxuXHRcdC8vIFVzZSB0eXBlPVwiYnV0dG9uXCIgdG8gcHJldmVudCBlbnRlciBrZXlwcmVzc2VzIGluIHRleHRib3hlcyBmcm9tIGNsb3NpbmcgdGhlXG5cdFx0Ly8gZGlhbG9nIGluIElFICgjOTMxMilcblx0XHR0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZSA9ICQoIFwiPGJ1dHRvbiB0eXBlPSdidXR0b24nPjwvYnV0dG9uPlwiIClcblx0XHRcdC5idXR0b24oIHtcblx0XHRcdFx0bGFiZWw6ICQoIFwiPGE+XCIgKS50ZXh0KCB0aGlzLm9wdGlvbnMuY2xvc2VUZXh0ICkuaHRtbCgpLFxuXHRcdFx0XHRpY29uOiBcInVpLWljb24tY2xvc2V0aGlja1wiLFxuXHRcdFx0XHRzaG93TGFiZWw6IGZhbHNlXG5cdFx0XHR9IClcblx0XHRcdC5hcHBlbmRUbyggdGhpcy51aURpYWxvZ1RpdGxlYmFyICk7XG5cblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2UsIFwidWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlXCIgKTtcblx0XHR0aGlzLl9vbiggdGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2UsIHtcblx0XHRcdGNsaWNrOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdHRoaXMuY2xvc2UoIGV2ZW50ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdFx0dWlEaWFsb2dUaXRsZSA9ICQoIFwiPHNwYW4+XCIgKS51bmlxdWVJZCgpLnByZXBlbmRUbyggdGhpcy51aURpYWxvZ1RpdGxlYmFyICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHVpRGlhbG9nVGl0bGUsIFwidWktZGlhbG9nLXRpdGxlXCIgKTtcblx0XHR0aGlzLl90aXRsZSggdWlEaWFsb2dUaXRsZSApO1xuXG5cdFx0dGhpcy51aURpYWxvZ1RpdGxlYmFyLnByZXBlbmRUbyggdGhpcy51aURpYWxvZyApO1xuXG5cdFx0dGhpcy51aURpYWxvZy5hdHRyKCB7XG5cdFx0XHRcImFyaWEtbGFiZWxsZWRieVwiOiB1aURpYWxvZ1RpdGxlLmF0dHIoIFwiaWRcIiApXG5cdFx0fSApO1xuXHR9LFxuXG5cdF90aXRsZTogZnVuY3Rpb24oIHRpdGxlICkge1xuXHRcdGlmICggdGhpcy5vcHRpb25zLnRpdGxlICkge1xuXHRcdFx0dGl0bGUudGV4dCggdGhpcy5vcHRpb25zLnRpdGxlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRpdGxlLmh0bWwoIFwiJiMxNjA7XCIgKTtcblx0XHR9XG5cdH0sXG5cblx0X2NyZWF0ZUJ1dHRvblBhbmU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMudWlEaWFsb2dCdXR0b25QYW5lID0gJCggXCI8ZGl2PlwiICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMudWlEaWFsb2dCdXR0b25QYW5lLCBcInVpLWRpYWxvZy1idXR0b25wYW5lXCIsXG5cdFx0XHRcInVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeFwiICk7XG5cblx0XHR0aGlzLnVpQnV0dG9uU2V0ID0gJCggXCI8ZGl2PlwiIClcblx0XHRcdC5hcHBlbmRUbyggdGhpcy51aURpYWxvZ0J1dHRvblBhbmUgKTtcblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy51aUJ1dHRvblNldCwgXCJ1aS1kaWFsb2ctYnV0dG9uc2V0XCIgKTtcblxuXHRcdHRoaXMuX2NyZWF0ZUJ1dHRvbnMoKTtcblx0fSxcblxuXHRfY3JlYXRlQnV0dG9uczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0YnV0dG9ucyA9IHRoaXMub3B0aW9ucy5idXR0b25zO1xuXG5cdFx0Ly8gSWYgd2UgYWxyZWFkeSBoYXZlIGEgYnV0dG9uIHBhbmUsIHJlbW92ZSBpdFxuXHRcdHRoaXMudWlEaWFsb2dCdXR0b25QYW5lLnJlbW92ZSgpO1xuXHRcdHRoaXMudWlCdXR0b25TZXQuZW1wdHkoKTtcblxuXHRcdGlmICggJC5pc0VtcHR5T2JqZWN0KCBidXR0b25zICkgfHwgKCBBcnJheS5pc0FycmF5KCBidXR0b25zICkgJiYgIWJ1dHRvbnMubGVuZ3RoICkgKSB7XG5cdFx0XHR0aGlzLl9yZW1vdmVDbGFzcyggdGhpcy51aURpYWxvZywgXCJ1aS1kaWFsb2ctYnV0dG9uc1wiICk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0JC5lYWNoKCBidXR0b25zLCBmdW5jdGlvbiggbmFtZSwgcHJvcHMgKSB7XG5cdFx0XHR2YXIgY2xpY2ssIGJ1dHRvbk9wdGlvbnM7XG5cdFx0XHRwcm9wcyA9ICQuaXNGdW5jdGlvbiggcHJvcHMgKSA/XG5cdFx0XHRcdHsgY2xpY2s6IHByb3BzLCB0ZXh0OiBuYW1lIH0gOlxuXHRcdFx0XHRwcm9wcztcblxuXHRcdFx0Ly8gRGVmYXVsdCB0byBhIG5vbi1zdWJtaXR0aW5nIGJ1dHRvblxuXHRcdFx0cHJvcHMgPSAkLmV4dGVuZCggeyB0eXBlOiBcImJ1dHRvblwiIH0sIHByb3BzICk7XG5cblx0XHRcdC8vIENoYW5nZSB0aGUgY29udGV4dCBmb3IgdGhlIGNsaWNrIGNhbGxiYWNrIHRvIGJlIHRoZSBtYWluIGVsZW1lbnRcblx0XHRcdGNsaWNrID0gcHJvcHMuY2xpY2s7XG5cdFx0XHRidXR0b25PcHRpb25zID0ge1xuXHRcdFx0XHRpY29uOiBwcm9wcy5pY29uLFxuXHRcdFx0XHRpY29uUG9zaXRpb246IHByb3BzLmljb25Qb3NpdGlvbixcblx0XHRcdFx0c2hvd0xhYmVsOiBwcm9wcy5zaG93TGFiZWwsXG5cblx0XHRcdFx0Ly8gRGVwcmVjYXRlZCBvcHRpb25zXG5cdFx0XHRcdGljb25zOiBwcm9wcy5pY29ucyxcblx0XHRcdFx0dGV4dDogcHJvcHMudGV4dFxuXHRcdFx0fTtcblxuXHRcdFx0ZGVsZXRlIHByb3BzLmNsaWNrO1xuXHRcdFx0ZGVsZXRlIHByb3BzLmljb247XG5cdFx0XHRkZWxldGUgcHJvcHMuaWNvblBvc2l0aW9uO1xuXHRcdFx0ZGVsZXRlIHByb3BzLnNob3dMYWJlbDtcblxuXHRcdFx0Ly8gRGVwcmVjYXRlZCBvcHRpb25zXG5cdFx0XHRkZWxldGUgcHJvcHMuaWNvbnM7XG5cdFx0XHRpZiAoIHR5cGVvZiBwcm9wcy50ZXh0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdFx0ZGVsZXRlIHByb3BzLnRleHQ7XG5cdFx0XHR9XG5cblx0XHRcdCQoIFwiPGJ1dHRvbj48L2J1dHRvbj5cIiwgcHJvcHMgKVxuXHRcdFx0XHQuYnV0dG9uKCBidXR0b25PcHRpb25zIClcblx0XHRcdFx0LmFwcGVuZFRvKCB0aGF0LnVpQnV0dG9uU2V0IClcblx0XHRcdFx0Lm9uKCBcImNsaWNrXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGNsaWNrLmFwcGx5KCB0aGF0LmVsZW1lbnRbIDAgXSwgYXJndW1lbnRzICk7XG5cdFx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMudWlEaWFsb2csIFwidWktZGlhbG9nLWJ1dHRvbnNcIiApO1xuXHRcdHRoaXMudWlEaWFsb2dCdXR0b25QYW5lLmFwcGVuZFRvKCB0aGlzLnVpRGlhbG9nICk7XG5cdH0sXG5cblx0X21ha2VEcmFnZ2FibGU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aGF0ID0gdGhpcyxcblx0XHRcdG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRmdW5jdGlvbiBmaWx0ZXJlZFVpKCB1aSApIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHBvc2l0aW9uOiB1aS5wb3NpdGlvbixcblx0XHRcdFx0b2Zmc2V0OiB1aS5vZmZzZXRcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dGhpcy51aURpYWxvZy5kcmFnZ2FibGUoIHtcblx0XHRcdGNhbmNlbDogXCIudWktZGlhbG9nLWNvbnRlbnQsIC51aS1kaWFsb2ctdGl0bGViYXItY2xvc2VcIixcblx0XHRcdGhhbmRsZTogXCIudWktZGlhbG9nLXRpdGxlYmFyXCIsXG5cdFx0XHRjb250YWlubWVudDogXCJkb2N1bWVudFwiLFxuXHRcdFx0c3RhcnQ6IGZ1bmN0aW9uKCBldmVudCwgdWkgKSB7XG5cdFx0XHRcdHRoYXQuX2FkZENsYXNzKCAkKCB0aGlzICksIFwidWktZGlhbG9nLWRyYWdnaW5nXCIgKTtcblx0XHRcdFx0dGhhdC5fYmxvY2tGcmFtZXMoKTtcblx0XHRcdFx0dGhhdC5fdHJpZ2dlciggXCJkcmFnU3RhcnRcIiwgZXZlbnQsIGZpbHRlcmVkVWkoIHVpICkgKTtcblx0XHRcdH0sXG5cdFx0XHRkcmFnOiBmdW5jdGlvbiggZXZlbnQsIHVpICkge1xuXHRcdFx0XHR0aGF0Ll90cmlnZ2VyKCBcImRyYWdcIiwgZXZlbnQsIGZpbHRlcmVkVWkoIHVpICkgKTtcblx0XHRcdH0sXG5cdFx0XHRzdG9wOiBmdW5jdGlvbiggZXZlbnQsIHVpICkge1xuXHRcdFx0XHR2YXIgbGVmdCA9IHVpLm9mZnNldC5sZWZ0IC0gdGhhdC5kb2N1bWVudC5zY3JvbGxMZWZ0KCksXG5cdFx0XHRcdFx0dG9wID0gdWkub2Zmc2V0LnRvcCAtIHRoYXQuZG9jdW1lbnQuc2Nyb2xsVG9wKCk7XG5cblx0XHRcdFx0b3B0aW9ucy5wb3NpdGlvbiA9IHtcblx0XHRcdFx0XHRteTogXCJsZWZ0IHRvcFwiLFxuXHRcdFx0XHRcdGF0OiBcImxlZnRcIiArICggbGVmdCA+PSAwID8gXCIrXCIgOiBcIlwiICkgKyBsZWZ0ICsgXCIgXCIgK1xuXHRcdFx0XHRcdFx0XCJ0b3BcIiArICggdG9wID49IDAgPyBcIitcIiA6IFwiXCIgKSArIHRvcCxcblx0XHRcdFx0XHRvZjogdGhhdC53aW5kb3dcblx0XHRcdFx0fTtcblx0XHRcdFx0dGhhdC5fcmVtb3ZlQ2xhc3MoICQoIHRoaXMgKSwgXCJ1aS1kaWFsb2ctZHJhZ2dpbmdcIiApO1xuXHRcdFx0XHR0aGF0Ll91bmJsb2NrRnJhbWVzKCk7XG5cdFx0XHRcdHRoYXQuX3RyaWdnZXIoIFwiZHJhZ1N0b3BcIiwgZXZlbnQsIGZpbHRlcmVkVWkoIHVpICkgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0X21ha2VSZXNpemFibGU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aGF0ID0gdGhpcyxcblx0XHRcdG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG5cdFx0XHRoYW5kbGVzID0gb3B0aW9ucy5yZXNpemFibGUsXG5cblx0XHRcdC8vIC51aS1yZXNpemFibGUgaGFzIHBvc2l0aW9uOiByZWxhdGl2ZSBkZWZpbmVkIGluIHRoZSBzdHlsZXNoZWV0XG5cdFx0XHQvLyBidXQgZGlhbG9ncyBoYXZlIHRvIHVzZSBhYnNvbHV0ZSBvciBmaXhlZCBwb3NpdGlvbmluZ1xuXHRcdFx0cG9zaXRpb24gPSB0aGlzLnVpRGlhbG9nLmNzcyggXCJwb3NpdGlvblwiICksXG5cdFx0XHRyZXNpemVIYW5kbGVzID0gdHlwZW9mIGhhbmRsZXMgPT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRoYW5kbGVzIDpcblx0XHRcdFx0XCJuLGUscyx3LHNlLHN3LG5lLG53XCI7XG5cblx0XHRmdW5jdGlvbiBmaWx0ZXJlZFVpKCB1aSApIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG9yaWdpbmFsUG9zaXRpb246IHVpLm9yaWdpbmFsUG9zaXRpb24sXG5cdFx0XHRcdG9yaWdpbmFsU2l6ZTogdWkub3JpZ2luYWxTaXplLFxuXHRcdFx0XHRwb3NpdGlvbjogdWkucG9zaXRpb24sXG5cdFx0XHRcdHNpemU6IHVpLnNpemVcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dGhpcy51aURpYWxvZy5yZXNpemFibGUoIHtcblx0XHRcdGNhbmNlbDogXCIudWktZGlhbG9nLWNvbnRlbnRcIixcblx0XHRcdGNvbnRhaW5tZW50OiBcImRvY3VtZW50XCIsXG5cdFx0XHRhbHNvUmVzaXplOiB0aGlzLmVsZW1lbnQsXG5cdFx0XHRtYXhXaWR0aDogb3B0aW9ucy5tYXhXaWR0aCxcblx0XHRcdG1heEhlaWdodDogb3B0aW9ucy5tYXhIZWlnaHQsXG5cdFx0XHRtaW5XaWR0aDogb3B0aW9ucy5taW5XaWR0aCxcblx0XHRcdG1pbkhlaWdodDogdGhpcy5fbWluSGVpZ2h0KCksXG5cdFx0XHRoYW5kbGVzOiByZXNpemVIYW5kbGVzLFxuXHRcdFx0c3RhcnQ6IGZ1bmN0aW9uKCBldmVudCwgdWkgKSB7XG5cdFx0XHRcdHRoYXQuX2FkZENsYXNzKCAkKCB0aGlzICksIFwidWktZGlhbG9nLXJlc2l6aW5nXCIgKTtcblx0XHRcdFx0dGhhdC5fYmxvY2tGcmFtZXMoKTtcblx0XHRcdFx0dGhhdC5fdHJpZ2dlciggXCJyZXNpemVTdGFydFwiLCBldmVudCwgZmlsdGVyZWRVaSggdWkgKSApO1xuXHRcdFx0fSxcblx0XHRcdHJlc2l6ZTogZnVuY3Rpb24oIGV2ZW50LCB1aSApIHtcblx0XHRcdFx0dGhhdC5fdHJpZ2dlciggXCJyZXNpemVcIiwgZXZlbnQsIGZpbHRlcmVkVWkoIHVpICkgKTtcblx0XHRcdH0sXG5cdFx0XHRzdG9wOiBmdW5jdGlvbiggZXZlbnQsIHVpICkge1xuXHRcdFx0XHR2YXIgb2Zmc2V0ID0gdGhhdC51aURpYWxvZy5vZmZzZXQoKSxcblx0XHRcdFx0XHRsZWZ0ID0gb2Zmc2V0LmxlZnQgLSB0aGF0LmRvY3VtZW50LnNjcm9sbExlZnQoKSxcblx0XHRcdFx0XHR0b3AgPSBvZmZzZXQudG9wIC0gdGhhdC5kb2N1bWVudC5zY3JvbGxUb3AoKTtcblxuXHRcdFx0XHRvcHRpb25zLmhlaWdodCA9IHRoYXQudWlEaWFsb2cuaGVpZ2h0KCk7XG5cdFx0XHRcdG9wdGlvbnMud2lkdGggPSB0aGF0LnVpRGlhbG9nLndpZHRoKCk7XG5cdFx0XHRcdG9wdGlvbnMucG9zaXRpb24gPSB7XG5cdFx0XHRcdFx0bXk6IFwibGVmdCB0b3BcIixcblx0XHRcdFx0XHRhdDogXCJsZWZ0XCIgKyAoIGxlZnQgPj0gMCA/IFwiK1wiIDogXCJcIiApICsgbGVmdCArIFwiIFwiICtcblx0XHRcdFx0XHRcdFwidG9wXCIgKyAoIHRvcCA+PSAwID8gXCIrXCIgOiBcIlwiICkgKyB0b3AsXG5cdFx0XHRcdFx0b2Y6IHRoYXQud2luZG93XG5cdFx0XHRcdH07XG5cdFx0XHRcdHRoYXQuX3JlbW92ZUNsYXNzKCAkKCB0aGlzICksIFwidWktZGlhbG9nLXJlc2l6aW5nXCIgKTtcblx0XHRcdFx0dGhhdC5fdW5ibG9ja0ZyYW1lcygpO1xuXHRcdFx0XHR0aGF0Ll90cmlnZ2VyKCBcInJlc2l6ZVN0b3BcIiwgZXZlbnQsIGZpbHRlcmVkVWkoIHVpICkgKTtcblx0XHRcdH1cblx0XHR9IClcblx0XHRcdC5jc3MoIFwicG9zaXRpb25cIiwgcG9zaXRpb24gKTtcblx0fSxcblxuXHRfdHJhY2tGb2N1czogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fb24oIHRoaXMud2lkZ2V0KCksIHtcblx0XHRcdGZvY3VzaW46IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dGhpcy5fbWFrZUZvY3VzVGFyZ2V0KCk7XG5cdFx0XHRcdHRoaXMuX2ZvY3VzZWRFbGVtZW50ID0gJCggZXZlbnQudGFyZ2V0ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdF9tYWtlRm9jdXNUYXJnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuX3VudHJhY2tJbnN0YW5jZSgpO1xuXHRcdHRoaXMuX3RyYWNraW5nSW5zdGFuY2VzKCkudW5zaGlmdCggdGhpcyApO1xuXHR9LFxuXG5cdF91bnRyYWNrSW5zdGFuY2U6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpbnN0YW5jZXMgPSB0aGlzLl90cmFja2luZ0luc3RhbmNlcygpLFxuXHRcdFx0ZXhpc3RzID0gJC5pbkFycmF5KCB0aGlzLCBpbnN0YW5jZXMgKTtcblx0XHRpZiAoIGV4aXN0cyAhPT0gLTEgKSB7XG5cdFx0XHRpbnN0YW5jZXMuc3BsaWNlKCBleGlzdHMsIDEgKTtcblx0XHR9XG5cdH0sXG5cblx0X3RyYWNraW5nSW5zdGFuY2VzOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW5zdGFuY2VzID0gdGhpcy5kb2N1bWVudC5kYXRhKCBcInVpLWRpYWxvZy1pbnN0YW5jZXNcIiApO1xuXHRcdGlmICggIWluc3RhbmNlcyApIHtcblx0XHRcdGluc3RhbmNlcyA9IFtdO1xuXHRcdFx0dGhpcy5kb2N1bWVudC5kYXRhKCBcInVpLWRpYWxvZy1pbnN0YW5jZXNcIiwgaW5zdGFuY2VzICk7XG5cdFx0fVxuXHRcdHJldHVybiBpbnN0YW5jZXM7XG5cdH0sXG5cblx0X21pbkhlaWdodDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRyZXR1cm4gb3B0aW9ucy5oZWlnaHQgPT09IFwiYXV0b1wiID9cblx0XHRcdG9wdGlvbnMubWluSGVpZ2h0IDpcblx0XHRcdE1hdGgubWluKCBvcHRpb25zLm1pbkhlaWdodCwgb3B0aW9ucy5oZWlnaHQgKTtcblx0fSxcblxuXHRfcG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXG5cdFx0Ly8gTmVlZCB0byBzaG93IHRoZSBkaWFsb2cgdG8gZ2V0IHRoZSBhY3R1YWwgb2Zmc2V0IGluIHRoZSBwb3NpdGlvbiBwbHVnaW5cblx0XHR2YXIgaXNWaXNpYmxlID0gdGhpcy51aURpYWxvZy5pcyggXCI6dmlzaWJsZVwiICk7XG5cdFx0aWYgKCAhaXNWaXNpYmxlICkge1xuXHRcdFx0dGhpcy51aURpYWxvZy5zaG93KCk7XG5cdFx0fVxuXHRcdHRoaXMudWlEaWFsb2cucG9zaXRpb24oIHRoaXMub3B0aW9ucy5wb3NpdGlvbiApO1xuXHRcdGlmICggIWlzVmlzaWJsZSApIHtcblx0XHRcdHRoaXMudWlEaWFsb2cuaGlkZSgpO1xuXHRcdH1cblx0fSxcblxuXHRfc2V0T3B0aW9uczogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0cmVzaXplID0gZmFsc2UsXG5cdFx0XHRyZXNpemFibGVPcHRpb25zID0ge307XG5cblx0XHQkLmVhY2goIG9wdGlvbnMsIGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdFx0dGhhdC5fc2V0T3B0aW9uKCBrZXksIHZhbHVlICk7XG5cblx0XHRcdGlmICgga2V5IGluIHRoYXQuc2l6ZVJlbGF0ZWRPcHRpb25zICkge1xuXHRcdFx0XHRyZXNpemUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBrZXkgaW4gdGhhdC5yZXNpemFibGVSZWxhdGVkT3B0aW9ucyApIHtcblx0XHRcdFx0cmVzaXphYmxlT3B0aW9uc1sga2V5IF0gPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHRpZiAoIHJlc2l6ZSApIHtcblx0XHRcdHRoaXMuX3NpemUoKTtcblx0XHRcdHRoaXMuX3Bvc2l0aW9uKCk7XG5cdFx0fVxuXHRcdGlmICggdGhpcy51aURpYWxvZy5pcyggXCI6ZGF0YSh1aS1yZXNpemFibGUpXCIgKSApIHtcblx0XHRcdHRoaXMudWlEaWFsb2cucmVzaXphYmxlKCBcIm9wdGlvblwiLCByZXNpemFibGVPcHRpb25zICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9zZXRPcHRpb246IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdHZhciBpc0RyYWdnYWJsZSwgaXNSZXNpemFibGUsXG5cdFx0XHR1aURpYWxvZyA9IHRoaXMudWlEaWFsb2c7XG5cblx0XHRpZiAoIGtleSA9PT0gXCJkaXNhYmxlZFwiICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX3N1cGVyKCBrZXksIHZhbHVlICk7XG5cblx0XHRpZiAoIGtleSA9PT0gXCJhcHBlbmRUb1wiICkge1xuXHRcdFx0dGhpcy51aURpYWxvZy5hcHBlbmRUbyggdGhpcy5fYXBwZW5kVG8oKSApO1xuXHRcdH1cblxuXHRcdGlmICgga2V5ID09PSBcImJ1dHRvbnNcIiApIHtcblx0XHRcdHRoaXMuX2NyZWF0ZUJ1dHRvbnMoKTtcblx0XHR9XG5cblx0XHRpZiAoIGtleSA9PT0gXCJjbG9zZVRleHRcIiApIHtcblx0XHRcdHRoaXMudWlEaWFsb2dUaXRsZWJhckNsb3NlLmJ1dHRvbigge1xuXG5cdFx0XHRcdC8vIEVuc3VyZSB0aGF0IHdlIGFsd2F5cyBwYXNzIGEgc3RyaW5nXG5cdFx0XHRcdGxhYmVsOiAkKCBcIjxhPlwiICkudGV4dCggXCJcIiArIHRoaXMub3B0aW9ucy5jbG9zZVRleHQgKS5odG1sKClcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRpZiAoIGtleSA9PT0gXCJkcmFnZ2FibGVcIiApIHtcblx0XHRcdGlzRHJhZ2dhYmxlID0gdWlEaWFsb2cuaXMoIFwiOmRhdGEodWktZHJhZ2dhYmxlKVwiICk7XG5cdFx0XHRpZiAoIGlzRHJhZ2dhYmxlICYmICF2YWx1ZSApIHtcblx0XHRcdFx0dWlEaWFsb2cuZHJhZ2dhYmxlKCBcImRlc3Ryb3lcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoICFpc0RyYWdnYWJsZSAmJiB2YWx1ZSApIHtcblx0XHRcdFx0dGhpcy5fbWFrZURyYWdnYWJsZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICgga2V5ID09PSBcInBvc2l0aW9uXCIgKSB7XG5cdFx0XHR0aGlzLl9wb3NpdGlvbigpO1xuXHRcdH1cblxuXHRcdGlmICgga2V5ID09PSBcInJlc2l6YWJsZVwiICkge1xuXG5cdFx0XHQvLyBjdXJyZW50bHkgcmVzaXphYmxlLCBiZWNvbWluZyBub24tcmVzaXphYmxlXG5cdFx0XHRpc1Jlc2l6YWJsZSA9IHVpRGlhbG9nLmlzKCBcIjpkYXRhKHVpLXJlc2l6YWJsZSlcIiApO1xuXHRcdFx0aWYgKCBpc1Jlc2l6YWJsZSAmJiAhdmFsdWUgKSB7XG5cdFx0XHRcdHVpRGlhbG9nLnJlc2l6YWJsZSggXCJkZXN0cm95XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ3VycmVudGx5IHJlc2l6YWJsZSwgY2hhbmdpbmcgaGFuZGxlc1xuXHRcdFx0aWYgKCBpc1Jlc2l6YWJsZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRcdHVpRGlhbG9nLnJlc2l6YWJsZSggXCJvcHRpb25cIiwgXCJoYW5kbGVzXCIsIHZhbHVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEN1cnJlbnRseSBub24tcmVzaXphYmxlLCBiZWNvbWluZyByZXNpemFibGVcblx0XHRcdGlmICggIWlzUmVzaXphYmxlICYmIHZhbHVlICE9PSBmYWxzZSApIHtcblx0XHRcdFx0dGhpcy5fbWFrZVJlc2l6YWJsZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICgga2V5ID09PSBcInRpdGxlXCIgKSB7XG5cdFx0XHR0aGlzLl90aXRsZSggdGhpcy51aURpYWxvZ1RpdGxlYmFyLmZpbmQoIFwiLnVpLWRpYWxvZy10aXRsZVwiICkgKTtcblx0XHR9XG5cdH0sXG5cblx0X3NpemU6IGZ1bmN0aW9uKCkge1xuXG5cdFx0Ly8gSWYgdGhlIHVzZXIgaGFzIHJlc2l6ZWQgdGhlIGRpYWxvZywgdGhlIC51aS1kaWFsb2cgYW5kIC51aS1kaWFsb2ctY29udGVudFxuXHRcdC8vIGRpdnMgd2lsbCBib3RoIGhhdmUgd2lkdGggYW5kIGhlaWdodCBzZXQsIHNvIHdlIG5lZWQgdG8gcmVzZXQgdGhlbVxuXHRcdHZhciBub25Db250ZW50SGVpZ2h0LCBtaW5Db250ZW50SGVpZ2h0LCBtYXhDb250ZW50SGVpZ2h0LFxuXHRcdFx0b3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdC8vIFJlc2V0IGNvbnRlbnQgc2l6aW5nXG5cdFx0dGhpcy5lbGVtZW50LnNob3coKS5jc3MoIHtcblx0XHRcdHdpZHRoOiBcImF1dG9cIixcblx0XHRcdG1pbkhlaWdodDogMCxcblx0XHRcdG1heEhlaWdodDogXCJub25lXCIsXG5cdFx0XHRoZWlnaHQ6IDBcblx0XHR9ICk7XG5cblx0XHRpZiAoIG9wdGlvbnMubWluV2lkdGggPiBvcHRpb25zLndpZHRoICkge1xuXHRcdFx0b3B0aW9ucy53aWR0aCA9IG9wdGlvbnMubWluV2lkdGg7XG5cdFx0fVxuXG5cdFx0Ly8gUmVzZXQgd3JhcHBlciBzaXppbmdcblx0XHQvLyBkZXRlcm1pbmUgdGhlIGhlaWdodCBvZiBhbGwgdGhlIG5vbi1jb250ZW50IGVsZW1lbnRzXG5cdFx0bm9uQ29udGVudEhlaWdodCA9IHRoaXMudWlEaWFsb2cuY3NzKCB7XG5cdFx0XHRoZWlnaHQ6IFwiYXV0b1wiLFxuXHRcdFx0d2lkdGg6IG9wdGlvbnMud2lkdGhcblx0XHR9IClcblx0XHRcdC5vdXRlckhlaWdodCgpO1xuXHRcdG1pbkNvbnRlbnRIZWlnaHQgPSBNYXRoLm1heCggMCwgb3B0aW9ucy5taW5IZWlnaHQgLSBub25Db250ZW50SGVpZ2h0ICk7XG5cdFx0bWF4Q29udGVudEhlaWdodCA9IHR5cGVvZiBvcHRpb25zLm1heEhlaWdodCA9PT0gXCJudW1iZXJcIiA/XG5cdFx0XHRNYXRoLm1heCggMCwgb3B0aW9ucy5tYXhIZWlnaHQgLSBub25Db250ZW50SGVpZ2h0ICkgOlxuXHRcdFx0XCJub25lXCI7XG5cblx0XHRpZiAoIG9wdGlvbnMuaGVpZ2h0ID09PSBcImF1dG9cIiApIHtcblx0XHRcdHRoaXMuZWxlbWVudC5jc3MoIHtcblx0XHRcdFx0bWluSGVpZ2h0OiBtaW5Db250ZW50SGVpZ2h0LFxuXHRcdFx0XHRtYXhIZWlnaHQ6IG1heENvbnRlbnRIZWlnaHQsXG5cdFx0XHRcdGhlaWdodDogXCJhdXRvXCJcblx0XHRcdH0gKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5lbGVtZW50LmhlaWdodCggTWF0aC5tYXgoIDAsIG9wdGlvbnMuaGVpZ2h0IC0gbm9uQ29udGVudEhlaWdodCApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLnVpRGlhbG9nLmlzKCBcIjpkYXRhKHVpLXJlc2l6YWJsZSlcIiApICkge1xuXHRcdFx0dGhpcy51aURpYWxvZy5yZXNpemFibGUoIFwib3B0aW9uXCIsIFwibWluSGVpZ2h0XCIsIHRoaXMuX21pbkhlaWdodCgpICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9ibG9ja0ZyYW1lczogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5pZnJhbWVCbG9ja3MgPSB0aGlzLmRvY3VtZW50LmZpbmQoIFwiaWZyYW1lXCIgKS5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGlmcmFtZSA9ICQoIHRoaXMgKTtcblxuXHRcdFx0cmV0dXJuICQoIFwiPGRpdj5cIiApXG5cdFx0XHRcdC5jc3MoIHtcblx0XHRcdFx0XHRwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuXHRcdFx0XHRcdHdpZHRoOiBpZnJhbWUub3V0ZXJXaWR0aCgpLFxuXHRcdFx0XHRcdGhlaWdodDogaWZyYW1lLm91dGVySGVpZ2h0KClcblx0XHRcdFx0fSApXG5cdFx0XHRcdC5hcHBlbmRUbyggaWZyYW1lLnBhcmVudCgpIClcblx0XHRcdFx0Lm9mZnNldCggaWZyYW1lLm9mZnNldCgpIClbIDAgXTtcblx0XHR9ICk7XG5cdH0sXG5cblx0X3VuYmxvY2tGcmFtZXM6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggdGhpcy5pZnJhbWVCbG9ja3MgKSB7XG5cdFx0XHR0aGlzLmlmcmFtZUJsb2Nrcy5yZW1vdmUoKTtcblx0XHRcdGRlbGV0ZSB0aGlzLmlmcmFtZUJsb2Nrcztcblx0XHR9XG5cdH0sXG5cblx0X2FsbG93SW50ZXJhY3Rpb246IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRpZiAoICQoIGV2ZW50LnRhcmdldCApLmNsb3Nlc3QoIFwiLnVpLWRpYWxvZ1wiICkubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gVE9ETzogUmVtb3ZlIGhhY2sgd2hlbiBkYXRlcGlja2VyIGltcGxlbWVudHNcblx0XHQvLyB0aGUgLnVpLWZyb250IGxvZ2ljICgjODk4OSlcblx0XHRyZXR1cm4gISEkKCBldmVudC50YXJnZXQgKS5jbG9zZXN0KCBcIi51aS1kYXRlcGlja2VyXCIgKS5sZW5ndGg7XG5cdH0sXG5cblx0X2NyZWF0ZU92ZXJsYXk6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggIXRoaXMub3B0aW9ucy5tb2RhbCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBXZSB1c2UgYSBkZWxheSBpbiBjYXNlIHRoZSBvdmVybGF5IGlzIGNyZWF0ZWQgZnJvbSBhblxuXHRcdC8vIGV2ZW50IHRoYXQgd2UncmUgZ29pbmcgdG8gYmUgY2FuY2VsbGluZyAoIzI4MDQpXG5cdFx0dmFyIGlzT3BlbmluZyA9IHRydWU7XG5cdFx0dGhpcy5fZGVsYXkoIGZ1bmN0aW9uKCkge1xuXHRcdFx0aXNPcGVuaW5nID0gZmFsc2U7XG5cdFx0fSApO1xuXG5cdFx0aWYgKCAhdGhpcy5kb2N1bWVudC5kYXRhKCBcInVpLWRpYWxvZy1vdmVybGF5c1wiICkgKSB7XG5cblx0XHRcdC8vIFByZXZlbnQgdXNlIG9mIGFuY2hvcnMgYW5kIGlucHV0c1xuXHRcdFx0Ly8gVXNpbmcgX29uKCkgZm9yIGFuIGV2ZW50IGhhbmRsZXIgc2hhcmVkIGFjcm9zcyBtYW55IGluc3RhbmNlcyBpc1xuXHRcdFx0Ly8gc2FmZSBiZWNhdXNlIHRoZSBkaWFsb2dzIHN0YWNrIGFuZCBtdXN0IGJlIGNsb3NlZCBpbiByZXZlcnNlIG9yZGVyXG5cdFx0XHR0aGlzLl9vbiggdGhpcy5kb2N1bWVudCwge1xuXHRcdFx0XHRmb2N1c2luOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdFx0aWYgKCBpc09wZW5pbmcgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCAhdGhpcy5fYWxsb3dJbnRlcmFjdGlvbiggZXZlbnQgKSApIHtcblx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHR0aGlzLl90cmFja2luZ0luc3RhbmNlcygpWyAwIF0uX2ZvY3VzVGFiYmFibGUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHR0aGlzLm92ZXJsYXkgPSAkKCBcIjxkaXY+XCIgKVxuXHRcdFx0LmFwcGVuZFRvKCB0aGlzLl9hcHBlbmRUbygpICk7XG5cblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5vdmVybGF5LCBudWxsLCBcInVpLXdpZGdldC1vdmVybGF5IHVpLWZyb250XCIgKTtcblx0XHR0aGlzLl9vbiggdGhpcy5vdmVybGF5LCB7XG5cdFx0XHRtb3VzZWRvd246IFwiX2tlZXBGb2N1c1wiXG5cdFx0fSApO1xuXHRcdHRoaXMuZG9jdW1lbnQuZGF0YSggXCJ1aS1kaWFsb2ctb3ZlcmxheXNcIixcblx0XHRcdCggdGhpcy5kb2N1bWVudC5kYXRhKCBcInVpLWRpYWxvZy1vdmVybGF5c1wiICkgfHwgMCApICsgMSApO1xuXHR9LFxuXG5cdF9kZXN0cm95T3ZlcmxheTogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhdGhpcy5vcHRpb25zLm1vZGFsICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5vdmVybGF5ICkge1xuXHRcdFx0dmFyIG92ZXJsYXlzID0gdGhpcy5kb2N1bWVudC5kYXRhKCBcInVpLWRpYWxvZy1vdmVybGF5c1wiICkgLSAxO1xuXG5cdFx0XHRpZiAoICFvdmVybGF5cyApIHtcblx0XHRcdFx0dGhpcy5fb2ZmKCB0aGlzLmRvY3VtZW50LCBcImZvY3VzaW5cIiApO1xuXHRcdFx0XHR0aGlzLmRvY3VtZW50LnJlbW92ZURhdGEoIFwidWktZGlhbG9nLW92ZXJsYXlzXCIgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZG9jdW1lbnQuZGF0YSggXCJ1aS1kaWFsb2ctb3ZlcmxheXNcIiwgb3ZlcmxheXMgKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5vdmVybGF5LnJlbW92ZSgpO1xuXHRcdFx0dGhpcy5vdmVybGF5ID0gbnVsbDtcblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gREVQUkVDQVRFRFxuLy8gVE9ETzogc3dpdGNoIHJldHVybiBiYWNrIHRvIHdpZGdldCBkZWNsYXJhdGlvbiBhdCB0b3Agb2YgZmlsZSB3aGVuIHRoaXMgaXMgcmVtb3ZlZFxuaWYgKCAkLnVpQmFja0NvbXBhdCAhPT0gZmFsc2UgKSB7XG5cblx0Ly8gQmFja2NvbXBhdCBmb3IgZGlhbG9nQ2xhc3Mgb3B0aW9uXG5cdCQud2lkZ2V0KCBcInVpLmRpYWxvZ1wiLCAkLnVpLmRpYWxvZywge1xuXHRcdG9wdGlvbnM6IHtcblx0XHRcdGRpYWxvZ0NsYXNzOiBcIlwiXG5cdFx0fSxcblx0XHRfY3JlYXRlV3JhcHBlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLl9zdXBlcigpO1xuXHRcdFx0dGhpcy51aURpYWxvZy5hZGRDbGFzcyggdGhpcy5vcHRpb25zLmRpYWxvZ0NsYXNzICk7XG5cdFx0fSxcblx0XHRfc2V0T3B0aW9uOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHRcdGlmICgga2V5ID09PSBcImRpYWxvZ0NsYXNzXCIgKSB7XG5cdFx0XHRcdHRoaXMudWlEaWFsb2dcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoIHRoaXMub3B0aW9ucy5kaWFsb2dDbGFzcyApXG5cdFx0XHRcdFx0LmFkZENsYXNzKCB2YWx1ZSApO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fc3VwZXJBcHBseSggYXJndW1lbnRzICk7XG5cdFx0fVxuXHR9ICk7XG59XG5cbnZhciB3aWRnZXRzRGlhbG9nID0gJC51aS5kaWFsb2c7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgRHJvcHBhYmxlIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiBEcm9wcGFibGVcbi8vPj5ncm91cDogSW50ZXJhY3Rpb25zXG4vLz4+ZGVzY3JpcHRpb246IEVuYWJsZXMgZHJvcCB0YXJnZXRzIGZvciBkcmFnZ2FibGUgZWxlbWVudHMuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vZHJvcHBhYmxlL1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL2Ryb3BwYWJsZS9cblxuXG5cbiQud2lkZ2V0KCBcInVpLmRyb3BwYWJsZVwiLCB7XG5cdHZlcnNpb246IFwiMS4xMi4xXCIsXG5cdHdpZGdldEV2ZW50UHJlZml4OiBcImRyb3BcIixcblx0b3B0aW9uczoge1xuXHRcdGFjY2VwdDogXCIqXCIsXG5cdFx0YWRkQ2xhc3NlczogdHJ1ZSxcblx0XHRncmVlZHk6IGZhbHNlLFxuXHRcdHNjb3BlOiBcImRlZmF1bHRcIixcblx0XHR0b2xlcmFuY2U6IFwiaW50ZXJzZWN0XCIsXG5cblx0XHQvLyBDYWxsYmFja3Ncblx0XHRhY3RpdmF0ZTogbnVsbCxcblx0XHRkZWFjdGl2YXRlOiBudWxsLFxuXHRcdGRyb3A6IG51bGwsXG5cdFx0b3V0OiBudWxsLFxuXHRcdG92ZXI6IG51bGxcblx0fSxcblx0X2NyZWF0ZTogZnVuY3Rpb24oKSB7XG5cblx0XHR2YXIgcHJvcG9ydGlvbnMsXG5cdFx0XHRvID0gdGhpcy5vcHRpb25zLFxuXHRcdFx0YWNjZXB0ID0gby5hY2NlcHQ7XG5cblx0XHR0aGlzLmlzb3ZlciA9IGZhbHNlO1xuXHRcdHRoaXMuaXNvdXQgPSB0cnVlO1xuXG5cdFx0dGhpcy5hY2NlcHQgPSAkLmlzRnVuY3Rpb24oIGFjY2VwdCApID8gYWNjZXB0IDogZnVuY3Rpb24oIGQgKSB7XG5cdFx0XHRyZXR1cm4gZC5pcyggYWNjZXB0ICk7XG5cdFx0fTtcblxuXHRcdHRoaXMucHJvcG9ydGlvbnMgPSBmdW5jdGlvbiggLyogdmFsdWVUb1dyaXRlICovICkge1xuXHRcdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuXG5cdFx0XHRcdC8vIFN0b3JlIHRoZSBkcm9wcGFibGUncyBwcm9wb3J0aW9uc1xuXHRcdFx0XHRwcm9wb3J0aW9ucyA9IGFyZ3VtZW50c1sgMCBdO1xuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBSZXRyaWV2ZSBvciBkZXJpdmUgdGhlIGRyb3BwYWJsZSdzIHByb3BvcnRpb25zXG5cdFx0XHRcdHJldHVybiBwcm9wb3J0aW9ucyA/XG5cdFx0XHRcdFx0cHJvcG9ydGlvbnMgOlxuXHRcdFx0XHRcdHByb3BvcnRpb25zID0ge1xuXHRcdFx0XHRcdFx0d2lkdGg6IHRoaXMuZWxlbWVudFsgMCBdLm9mZnNldFdpZHRoLFxuXHRcdFx0XHRcdFx0aGVpZ2h0OiB0aGlzLmVsZW1lbnRbIDAgXS5vZmZzZXRIZWlnaHRcblx0XHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGlzLl9hZGRUb01hbmFnZXIoIG8uc2NvcGUgKTtcblxuXHRcdG8uYWRkQ2xhc3NlcyAmJiB0aGlzLl9hZGRDbGFzcyggXCJ1aS1kcm9wcGFibGVcIiApO1xuXG5cdH0sXG5cblx0X2FkZFRvTWFuYWdlcjogZnVuY3Rpb24oIHNjb3BlICkge1xuXG5cdFx0Ly8gQWRkIHRoZSByZWZlcmVuY2UgYW5kIHBvc2l0aW9ucyB0byB0aGUgbWFuYWdlclxuXHRcdCQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbIHNjb3BlIF0gPSAkLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzWyBzY29wZSBdIHx8IFtdO1xuXHRcdCQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbIHNjb3BlIF0ucHVzaCggdGhpcyApO1xuXHR9LFxuXG5cdF9zcGxpY2U6IGZ1bmN0aW9uKCBkcm9wICkge1xuXHRcdHZhciBpID0gMDtcblx0XHRmb3IgKCA7IGkgPCBkcm9wLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0aWYgKCBkcm9wWyBpIF0gPT09IHRoaXMgKSB7XG5cdFx0XHRcdGRyb3Auc3BsaWNlKCBpLCAxICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdF9kZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZHJvcCA9ICQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbIHRoaXMub3B0aW9ucy5zY29wZSBdO1xuXG5cdFx0dGhpcy5fc3BsaWNlKCBkcm9wICk7XG5cdH0sXG5cblx0X3NldE9wdGlvbjogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cblx0XHRpZiAoIGtleSA9PT0gXCJhY2NlcHRcIiApIHtcblx0XHRcdHRoaXMuYWNjZXB0ID0gJC5pc0Z1bmN0aW9uKCB2YWx1ZSApID8gdmFsdWUgOiBmdW5jdGlvbiggZCApIHtcblx0XHRcdFx0cmV0dXJuIGQuaXMoIHZhbHVlICk7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSBpZiAoIGtleSA9PT0gXCJzY29wZVwiICkge1xuXHRcdFx0dmFyIGRyb3AgPSAkLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzWyB0aGlzLm9wdGlvbnMuc2NvcGUgXTtcblxuXHRcdFx0dGhpcy5fc3BsaWNlKCBkcm9wICk7XG5cdFx0XHR0aGlzLl9hZGRUb01hbmFnZXIoIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fc3VwZXIoIGtleSwgdmFsdWUgKTtcblx0fSxcblxuXHRfYWN0aXZhdGU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgZHJhZ2dhYmxlID0gJC51aS5kZG1hbmFnZXIuY3VycmVudDtcblxuXHRcdHRoaXMuX2FkZEFjdGl2ZUNsYXNzKCk7XG5cdFx0aWYgKCBkcmFnZ2FibGUgKSB7XG5cdFx0XHR0aGlzLl90cmlnZ2VyKCBcImFjdGl2YXRlXCIsIGV2ZW50LCB0aGlzLnVpKCBkcmFnZ2FibGUgKSApO1xuXHRcdH1cblx0fSxcblxuXHRfZGVhY3RpdmF0ZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBkcmFnZ2FibGUgPSAkLnVpLmRkbWFuYWdlci5jdXJyZW50O1xuXG5cdFx0dGhpcy5fcmVtb3ZlQWN0aXZlQ2xhc3MoKTtcblx0XHRpZiAoIGRyYWdnYWJsZSApIHtcblx0XHRcdHRoaXMuX3RyaWdnZXIoIFwiZGVhY3RpdmF0ZVwiLCBldmVudCwgdGhpcy51aSggZHJhZ2dhYmxlICkgKTtcblx0XHR9XG5cdH0sXG5cblx0X292ZXI6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdHZhciBkcmFnZ2FibGUgPSAkLnVpLmRkbWFuYWdlci5jdXJyZW50O1xuXG5cdFx0Ly8gQmFpbCBpZiBkcmFnZ2FibGUgYW5kIGRyb3BwYWJsZSBhcmUgc2FtZSBlbGVtZW50XG5cdFx0aWYgKCAhZHJhZ2dhYmxlIHx8ICggZHJhZ2dhYmxlLmN1cnJlbnRJdGVtIHx8XG5cdFx0XHRcdGRyYWdnYWJsZS5lbGVtZW50IClbIDAgXSA9PT0gdGhpcy5lbGVtZW50WyAwIF0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmFjY2VwdC5jYWxsKCB0aGlzLmVsZW1lbnRbIDAgXSwgKCBkcmFnZ2FibGUuY3VycmVudEl0ZW0gfHxcblx0XHRcdFx0ZHJhZ2dhYmxlLmVsZW1lbnQgKSApICkge1xuXHRcdFx0dGhpcy5fYWRkSG92ZXJDbGFzcygpO1xuXHRcdFx0dGhpcy5fdHJpZ2dlciggXCJvdmVyXCIsIGV2ZW50LCB0aGlzLnVpKCBkcmFnZ2FibGUgKSApO1xuXHRcdH1cblxuXHR9LFxuXG5cdF9vdXQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdHZhciBkcmFnZ2FibGUgPSAkLnVpLmRkbWFuYWdlci5jdXJyZW50O1xuXG5cdFx0Ly8gQmFpbCBpZiBkcmFnZ2FibGUgYW5kIGRyb3BwYWJsZSBhcmUgc2FtZSBlbGVtZW50XG5cdFx0aWYgKCAhZHJhZ2dhYmxlIHx8ICggZHJhZ2dhYmxlLmN1cnJlbnRJdGVtIHx8XG5cdFx0XHRcdGRyYWdnYWJsZS5lbGVtZW50IClbIDAgXSA9PT0gdGhpcy5lbGVtZW50WyAwIF0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmFjY2VwdC5jYWxsKCB0aGlzLmVsZW1lbnRbIDAgXSwgKCBkcmFnZ2FibGUuY3VycmVudEl0ZW0gfHxcblx0XHRcdFx0ZHJhZ2dhYmxlLmVsZW1lbnQgKSApICkge1xuXHRcdFx0dGhpcy5fcmVtb3ZlSG92ZXJDbGFzcygpO1xuXHRcdFx0dGhpcy5fdHJpZ2dlciggXCJvdXRcIiwgZXZlbnQsIHRoaXMudWkoIGRyYWdnYWJsZSApICk7XG5cdFx0fVxuXG5cdH0sXG5cblx0X2Ryb3A6IGZ1bmN0aW9uKCBldmVudCwgY3VzdG9tICkge1xuXG5cdFx0dmFyIGRyYWdnYWJsZSA9IGN1c3RvbSB8fCAkLnVpLmRkbWFuYWdlci5jdXJyZW50LFxuXHRcdFx0Y2hpbGRyZW5JbnRlcnNlY3Rpb24gPSBmYWxzZTtcblxuXHRcdC8vIEJhaWwgaWYgZHJhZ2dhYmxlIGFuZCBkcm9wcGFibGUgYXJlIHNhbWUgZWxlbWVudFxuXHRcdGlmICggIWRyYWdnYWJsZSB8fCAoIGRyYWdnYWJsZS5jdXJyZW50SXRlbSB8fFxuXHRcdFx0XHRkcmFnZ2FibGUuZWxlbWVudCApWyAwIF0gPT09IHRoaXMuZWxlbWVudFsgMCBdICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMuZWxlbWVudFxuXHRcdFx0LmZpbmQoIFwiOmRhdGEodWktZHJvcHBhYmxlKVwiIClcblx0XHRcdC5ub3QoIFwiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZ1wiIClcblx0XHRcdC5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGluc3QgPSAkKCB0aGlzICkuZHJvcHBhYmxlKCBcImluc3RhbmNlXCIgKTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGluc3Qub3B0aW9ucy5ncmVlZHkgJiZcblx0XHRcdFx0XHQhaW5zdC5vcHRpb25zLmRpc2FibGVkICYmXG5cdFx0XHRcdFx0aW5zdC5vcHRpb25zLnNjb3BlID09PSBkcmFnZ2FibGUub3B0aW9ucy5zY29wZSAmJlxuXHRcdFx0XHRcdGluc3QuYWNjZXB0LmNhbGwoXG5cdFx0XHRcdFx0XHRpbnN0LmVsZW1lbnRbIDAgXSwgKCBkcmFnZ2FibGUuY3VycmVudEl0ZW0gfHwgZHJhZ2dhYmxlLmVsZW1lbnQgKVxuXHRcdFx0XHRcdCkgJiZcblx0XHRcdFx0XHRpbnRlcnNlY3QoXG5cdFx0XHRcdFx0XHRkcmFnZ2FibGUsXG5cdFx0XHRcdFx0XHQkLmV4dGVuZCggaW5zdCwgeyBvZmZzZXQ6IGluc3QuZWxlbWVudC5vZmZzZXQoKSB9ICksXG5cdFx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMudG9sZXJhbmNlLCBldmVudFxuXHRcdFx0XHRcdClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Y2hpbGRyZW5JbnRlcnNlY3Rpb24gPSB0cnVlO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTsgfVxuXHRcdFx0fSApO1xuXHRcdGlmICggY2hpbGRyZW5JbnRlcnNlY3Rpb24gKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmFjY2VwdC5jYWxsKCB0aGlzLmVsZW1lbnRbIDAgXSxcblx0XHRcdFx0KCBkcmFnZ2FibGUuY3VycmVudEl0ZW0gfHwgZHJhZ2dhYmxlLmVsZW1lbnQgKSApICkge1xuXHRcdFx0dGhpcy5fcmVtb3ZlQWN0aXZlQ2xhc3MoKTtcblx0XHRcdHRoaXMuX3JlbW92ZUhvdmVyQ2xhc3MoKTtcblxuXHRcdFx0dGhpcy5fdHJpZ2dlciggXCJkcm9wXCIsIGV2ZW50LCB0aGlzLnVpKCBkcmFnZ2FibGUgKSApO1xuXHRcdFx0cmV0dXJuIHRoaXMuZWxlbWVudDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0fSxcblxuXHR1aTogZnVuY3Rpb24oIGMgKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGRyYWdnYWJsZTogKCBjLmN1cnJlbnRJdGVtIHx8IGMuZWxlbWVudCApLFxuXHRcdFx0aGVscGVyOiBjLmhlbHBlcixcblx0XHRcdHBvc2l0aW9uOiBjLnBvc2l0aW9uLFxuXHRcdFx0b2Zmc2V0OiBjLnBvc2l0aW9uQWJzXG5cdFx0fTtcblx0fSxcblxuXHQvLyBFeHRlbnNpb24gcG9pbnRzIGp1c3QgdG8gbWFrZSBiYWNrY29tcGF0IHNhbmUgYW5kIGF2b2lkIGR1cGxpY2F0aW5nIGxvZ2ljXG5cdC8vIFRPRE86IFJlbW92ZSBpbiAxLjEzIGFsb25nIHdpdGggY2FsbCB0byBpdCBiZWxvd1xuXHRfYWRkSG92ZXJDbGFzczogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIFwidWktZHJvcHBhYmxlLWhvdmVyXCIgKTtcblx0fSxcblxuXHRfcmVtb3ZlSG92ZXJDbGFzczogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIFwidWktZHJvcHBhYmxlLWhvdmVyXCIgKTtcblx0fSxcblxuXHRfYWRkQWN0aXZlQ2xhc3M6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuX2FkZENsYXNzKCBcInVpLWRyb3BwYWJsZS1hY3RpdmVcIiApO1xuXHR9LFxuXG5cdF9yZW1vdmVBY3RpdmVDbGFzczogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIFwidWktZHJvcHBhYmxlLWFjdGl2ZVwiICk7XG5cdH1cbn0gKTtcblxudmFyIGludGVyc2VjdCA9ICQudWkuaW50ZXJzZWN0ID0gKCBmdW5jdGlvbigpIHtcblx0ZnVuY3Rpb24gaXNPdmVyQXhpcyggeCwgcmVmZXJlbmNlLCBzaXplICkge1xuXHRcdHJldHVybiAoIHggPj0gcmVmZXJlbmNlICkgJiYgKCB4IDwgKCByZWZlcmVuY2UgKyBzaXplICkgKTtcblx0fVxuXG5cdHJldHVybiBmdW5jdGlvbiggZHJhZ2dhYmxlLCBkcm9wcGFibGUsIHRvbGVyYW5jZU1vZGUsIGV2ZW50ICkge1xuXG5cdFx0aWYgKCAhZHJvcHBhYmxlLm9mZnNldCApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR2YXIgeDEgPSAoIGRyYWdnYWJsZS5wb3NpdGlvbkFicyB8fFxuXHRcdFx0XHRkcmFnZ2FibGUucG9zaXRpb24uYWJzb2x1dGUgKS5sZWZ0ICsgZHJhZ2dhYmxlLm1hcmdpbnMubGVmdCxcblx0XHRcdHkxID0gKCBkcmFnZ2FibGUucG9zaXRpb25BYnMgfHxcblx0XHRcdFx0ZHJhZ2dhYmxlLnBvc2l0aW9uLmFic29sdXRlICkudG9wICsgZHJhZ2dhYmxlLm1hcmdpbnMudG9wLFxuXHRcdFx0eDIgPSB4MSArIGRyYWdnYWJsZS5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCxcblx0XHRcdHkyID0geTEgKyBkcmFnZ2FibGUuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LFxuXHRcdFx0bCA9IGRyb3BwYWJsZS5vZmZzZXQubGVmdCxcblx0XHRcdHQgPSBkcm9wcGFibGUub2Zmc2V0LnRvcCxcblx0XHRcdHIgPSBsICsgZHJvcHBhYmxlLnByb3BvcnRpb25zKCkud2lkdGgsXG5cdFx0XHRiID0gdCArIGRyb3BwYWJsZS5wcm9wb3J0aW9ucygpLmhlaWdodDtcblxuXHRcdHN3aXRjaCAoIHRvbGVyYW5jZU1vZGUgKSB7XG5cdFx0Y2FzZSBcImZpdFwiOlxuXHRcdFx0cmV0dXJuICggbCA8PSB4MSAmJiB4MiA8PSByICYmIHQgPD0geTEgJiYgeTIgPD0gYiApO1xuXHRcdGNhc2UgXCJpbnRlcnNlY3RcIjpcblx0XHRcdHJldHVybiAoIGwgPCB4MSArICggZHJhZ2dhYmxlLmhlbHBlclByb3BvcnRpb25zLndpZHRoIC8gMiApICYmIC8vIFJpZ2h0IEhhbGZcblx0XHRcdFx0eDIgLSAoIGRyYWdnYWJsZS5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCAvIDIgKSA8IHIgJiYgLy8gTGVmdCBIYWxmXG5cdFx0XHRcdHQgPCB5MSArICggZHJhZ2dhYmxlLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCAvIDIgKSAmJiAvLyBCb3R0b20gSGFsZlxuXHRcdFx0XHR5MiAtICggZHJhZ2dhYmxlLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCAvIDIgKSA8IGIgKTsgLy8gVG9wIEhhbGZcblx0XHRjYXNlIFwicG9pbnRlclwiOlxuXHRcdFx0cmV0dXJuIGlzT3ZlckF4aXMoIGV2ZW50LnBhZ2VZLCB0LCBkcm9wcGFibGUucHJvcG9ydGlvbnMoKS5oZWlnaHQgKSAmJlxuXHRcdFx0XHRpc092ZXJBeGlzKCBldmVudC5wYWdlWCwgbCwgZHJvcHBhYmxlLnByb3BvcnRpb25zKCkud2lkdGggKTtcblx0XHRjYXNlIFwidG91Y2hcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCggeTEgPj0gdCAmJiB5MSA8PSBiICkgfHwgLy8gVG9wIGVkZ2UgdG91Y2hpbmdcblx0XHRcdFx0KCB5MiA+PSB0ICYmIHkyIDw9IGIgKSB8fCAvLyBCb3R0b20gZWRnZSB0b3VjaGluZ1xuXHRcdFx0XHQoIHkxIDwgdCAmJiB5MiA+IGIgKSAvLyBTdXJyb3VuZGVkIHZlcnRpY2FsbHlcblx0XHRcdCkgJiYgKFxuXHRcdFx0XHQoIHgxID49IGwgJiYgeDEgPD0gciApIHx8IC8vIExlZnQgZWRnZSB0b3VjaGluZ1xuXHRcdFx0XHQoIHgyID49IGwgJiYgeDIgPD0gciApIHx8IC8vIFJpZ2h0IGVkZ2UgdG91Y2hpbmdcblx0XHRcdFx0KCB4MSA8IGwgJiYgeDIgPiByICkgLy8gU3Vycm91bmRlZCBob3Jpem9udGFsbHlcblx0XHRcdCk7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH07XG59ICkoKTtcblxuLypcblx0VGhpcyBtYW5hZ2VyIHRyYWNrcyBvZmZzZXRzIG9mIGRyYWdnYWJsZXMgYW5kIGRyb3BwYWJsZXNcbiovXG4kLnVpLmRkbWFuYWdlciA9IHtcblx0Y3VycmVudDogbnVsbCxcblx0ZHJvcHBhYmxlczogeyBcImRlZmF1bHRcIjogW10gfSxcblx0cHJlcGFyZU9mZnNldHM6IGZ1bmN0aW9uKCB0LCBldmVudCApIHtcblxuXHRcdHZhciBpLCBqLFxuXHRcdFx0bSA9ICQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbIHQub3B0aW9ucy5zY29wZSBdIHx8IFtdLFxuXHRcdFx0dHlwZSA9IGV2ZW50ID8gZXZlbnQudHlwZSA6IG51bGwsIC8vIHdvcmthcm91bmQgZm9yICMyMzE3XG5cdFx0XHRsaXN0ID0gKCB0LmN1cnJlbnRJdGVtIHx8IHQuZWxlbWVudCApLmZpbmQoIFwiOmRhdGEodWktZHJvcHBhYmxlKVwiICkuYWRkQmFjaygpO1xuXG5cdFx0ZHJvcHBhYmxlc0xvb3A6IGZvciAoIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkrKyApIHtcblxuXHRcdFx0Ly8gTm8gZGlzYWJsZWQgYW5kIG5vbi1hY2NlcHRlZFxuXHRcdFx0aWYgKCBtWyBpIF0ub3B0aW9ucy5kaXNhYmxlZCB8fCAoIHQgJiYgIW1bIGkgXS5hY2NlcHQuY2FsbCggbVsgaSBdLmVsZW1lbnRbIDAgXSxcblx0XHRcdFx0XHQoIHQuY3VycmVudEl0ZW0gfHwgdC5lbGVtZW50ICkgKSApICkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRmlsdGVyIG91dCBlbGVtZW50cyBpbiB0aGUgY3VycmVudCBkcmFnZ2VkIGl0ZW1cblx0XHRcdGZvciAoIGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKyApIHtcblx0XHRcdFx0aWYgKCBsaXN0WyBqIF0gPT09IG1bIGkgXS5lbGVtZW50WyAwIF0gKSB7XG5cdFx0XHRcdFx0bVsgaSBdLnByb3BvcnRpb25zKCkuaGVpZ2h0ID0gMDtcblx0XHRcdFx0XHRjb250aW51ZSBkcm9wcGFibGVzTG9vcDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRtWyBpIF0udmlzaWJsZSA9IG1bIGkgXS5lbGVtZW50LmNzcyggXCJkaXNwbGF5XCIgKSAhPT0gXCJub25lXCI7XG5cdFx0XHRpZiAoICFtWyBpIF0udmlzaWJsZSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFjdGl2YXRlIHRoZSBkcm9wcGFibGUgaWYgdXNlZCBkaXJlY3RseSBmcm9tIGRyYWdnYWJsZXNcblx0XHRcdGlmICggdHlwZSA9PT0gXCJtb3VzZWRvd25cIiApIHtcblx0XHRcdFx0bVsgaSBdLl9hY3RpdmF0ZS5jYWxsKCBtWyBpIF0sIGV2ZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdG1bIGkgXS5vZmZzZXQgPSBtWyBpIF0uZWxlbWVudC5vZmZzZXQoKTtcblx0XHRcdG1bIGkgXS5wcm9wb3J0aW9ucygge1xuXHRcdFx0XHR3aWR0aDogbVsgaSBdLmVsZW1lbnRbIDAgXS5vZmZzZXRXaWR0aCxcblx0XHRcdFx0aGVpZ2h0OiBtWyBpIF0uZWxlbWVudFsgMCBdLm9mZnNldEhlaWdodFxuXHRcdFx0fSApO1xuXG5cdFx0fVxuXG5cdH0sXG5cdGRyb3A6IGZ1bmN0aW9uKCBkcmFnZ2FibGUsIGV2ZW50ICkge1xuXG5cdFx0dmFyIGRyb3BwZWQgPSBmYWxzZTtcblxuXHRcdC8vIENyZWF0ZSBhIGNvcHkgb2YgdGhlIGRyb3BwYWJsZXMgaW4gY2FzZSB0aGUgbGlzdCBjaGFuZ2VzIGR1cmluZyB0aGUgZHJvcCAoIzkxMTYpXG5cdFx0JC5lYWNoKCAoICQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbIGRyYWdnYWJsZS5vcHRpb25zLnNjb3BlIF0gfHwgW10gKS5zbGljZSgpLCBmdW5jdGlvbigpIHtcblxuXHRcdFx0aWYgKCAhdGhpcy5vcHRpb25zICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoICF0aGlzLm9wdGlvbnMuZGlzYWJsZWQgJiYgdGhpcy52aXNpYmxlICYmXG5cdFx0XHRcdFx0aW50ZXJzZWN0KCBkcmFnZ2FibGUsIHRoaXMsIHRoaXMub3B0aW9ucy50b2xlcmFuY2UsIGV2ZW50ICkgKSB7XG5cdFx0XHRcdGRyb3BwZWQgPSB0aGlzLl9kcm9wLmNhbGwoIHRoaXMsIGV2ZW50ICkgfHwgZHJvcHBlZDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCAhdGhpcy5vcHRpb25zLmRpc2FibGVkICYmIHRoaXMudmlzaWJsZSAmJiB0aGlzLmFjY2VwdC5jYWxsKCB0aGlzLmVsZW1lbnRbIDAgXSxcblx0XHRcdFx0XHQoIGRyYWdnYWJsZS5jdXJyZW50SXRlbSB8fCBkcmFnZ2FibGUuZWxlbWVudCApICkgKSB7XG5cdFx0XHRcdHRoaXMuaXNvdXQgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLmlzb3ZlciA9IGZhbHNlO1xuXHRcdFx0XHR0aGlzLl9kZWFjdGl2YXRlLmNhbGwoIHRoaXMsIGV2ZW50ICk7XG5cdFx0XHR9XG5cblx0XHR9ICk7XG5cdFx0cmV0dXJuIGRyb3BwZWQ7XG5cblx0fSxcblx0ZHJhZ1N0YXJ0OiBmdW5jdGlvbiggZHJhZ2dhYmxlLCBldmVudCApIHtcblxuXHRcdC8vIExpc3RlbiBmb3Igc2Nyb2xsaW5nIHNvIHRoYXQgaWYgdGhlIGRyYWdnaW5nIGNhdXNlcyBzY3JvbGxpbmcgdGhlIHBvc2l0aW9uIG9mIHRoZVxuXHRcdC8vIGRyb3BwYWJsZXMgY2FuIGJlIHJlY2FsY3VsYXRlZCAoc2VlICM1MDAzKVxuXHRcdGRyYWdnYWJsZS5lbGVtZW50LnBhcmVudHNVbnRpbCggXCJib2R5XCIgKS5vbiggXCJzY3JvbGwuZHJvcHBhYmxlXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhZHJhZ2dhYmxlLm9wdGlvbnMucmVmcmVzaFBvc2l0aW9ucyApIHtcblx0XHRcdFx0JC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMoIGRyYWdnYWJsZSwgZXZlbnQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cdGRyYWc6IGZ1bmN0aW9uKCBkcmFnZ2FibGUsIGV2ZW50ICkge1xuXG5cdFx0Ly8gSWYgeW91IGhhdmUgYSBoaWdobHkgZHluYW1pYyBwYWdlLCB5b3UgbWlnaHQgdHJ5IHRoaXMgb3B0aW9uLiBJdCByZW5kZXJzIHBvc2l0aW9uc1xuXHRcdC8vIGV2ZXJ5IHRpbWUgeW91IG1vdmUgdGhlIG1vdXNlLlxuXHRcdGlmICggZHJhZ2dhYmxlLm9wdGlvbnMucmVmcmVzaFBvc2l0aW9ucyApIHtcblx0XHRcdCQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKCBkcmFnZ2FibGUsIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0Ly8gUnVuIHRocm91Z2ggYWxsIGRyb3BwYWJsZXMgYW5kIGNoZWNrIHRoZWlyIHBvc2l0aW9ucyBiYXNlZCBvbiBzcGVjaWZpYyB0b2xlcmFuY2Ugb3B0aW9uc1xuXHRcdCQuZWFjaCggJC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1sgZHJhZ2dhYmxlLm9wdGlvbnMuc2NvcGUgXSB8fCBbXSwgZnVuY3Rpb24oKSB7XG5cblx0XHRcdGlmICggdGhpcy5vcHRpb25zLmRpc2FibGVkIHx8IHRoaXMuZ3JlZWR5Q2hpbGQgfHwgIXRoaXMudmlzaWJsZSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgcGFyZW50SW5zdGFuY2UsIHNjb3BlLCBwYXJlbnQsXG5cdFx0XHRcdGludGVyc2VjdHMgPSBpbnRlcnNlY3QoIGRyYWdnYWJsZSwgdGhpcywgdGhpcy5vcHRpb25zLnRvbGVyYW5jZSwgZXZlbnQgKSxcblx0XHRcdFx0YyA9ICFpbnRlcnNlY3RzICYmIHRoaXMuaXNvdmVyID9cblx0XHRcdFx0XHRcImlzb3V0XCIgOlxuXHRcdFx0XHRcdCggaW50ZXJzZWN0cyAmJiAhdGhpcy5pc292ZXIgPyBcImlzb3ZlclwiIDogbnVsbCApO1xuXHRcdFx0aWYgKCAhYyApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHRoaXMub3B0aW9ucy5ncmVlZHkgKSB7XG5cblx0XHRcdFx0Ly8gZmluZCBkcm9wcGFibGUgcGFyZW50cyB3aXRoIHNhbWUgc2NvcGVcblx0XHRcdFx0c2NvcGUgPSB0aGlzLm9wdGlvbnMuc2NvcGU7XG5cdFx0XHRcdHBhcmVudCA9IHRoaXMuZWxlbWVudC5wYXJlbnRzKCBcIjpkYXRhKHVpLWRyb3BwYWJsZSlcIiApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuICQoIHRoaXMgKS5kcm9wcGFibGUoIFwiaW5zdGFuY2VcIiApLm9wdGlvbnMuc2NvcGUgPT09IHNjb3BlO1xuXHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0aWYgKCBwYXJlbnQubGVuZ3RoICkge1xuXHRcdFx0XHRcdHBhcmVudEluc3RhbmNlID0gJCggcGFyZW50WyAwIF0gKS5kcm9wcGFibGUoIFwiaW5zdGFuY2VcIiApO1xuXHRcdFx0XHRcdHBhcmVudEluc3RhbmNlLmdyZWVkeUNoaWxkID0gKCBjID09PSBcImlzb3ZlclwiICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gV2UganVzdCBtb3ZlZCBpbnRvIGEgZ3JlZWR5IGNoaWxkXG5cdFx0XHRpZiAoIHBhcmVudEluc3RhbmNlICYmIGMgPT09IFwiaXNvdmVyXCIgKSB7XG5cdFx0XHRcdHBhcmVudEluc3RhbmNlLmlzb3ZlciA9IGZhbHNlO1xuXHRcdFx0XHRwYXJlbnRJbnN0YW5jZS5pc291dCA9IHRydWU7XG5cdFx0XHRcdHBhcmVudEluc3RhbmNlLl9vdXQuY2FsbCggcGFyZW50SW5zdGFuY2UsIGV2ZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXNbIGMgXSA9IHRydWU7XG5cdFx0XHR0aGlzWyBjID09PSBcImlzb3V0XCIgPyBcImlzb3ZlclwiIDogXCJpc291dFwiIF0gPSBmYWxzZTtcblx0XHRcdHRoaXNbIGMgPT09IFwiaXNvdmVyXCIgPyBcIl9vdmVyXCIgOiBcIl9vdXRcIiBdLmNhbGwoIHRoaXMsIGV2ZW50ICk7XG5cblx0XHRcdC8vIFdlIGp1c3QgbW92ZWQgb3V0IG9mIGEgZ3JlZWR5IGNoaWxkXG5cdFx0XHRpZiAoIHBhcmVudEluc3RhbmNlICYmIGMgPT09IFwiaXNvdXRcIiApIHtcblx0XHRcdFx0cGFyZW50SW5zdGFuY2UuaXNvdXQgPSBmYWxzZTtcblx0XHRcdFx0cGFyZW50SW5zdGFuY2UuaXNvdmVyID0gdHJ1ZTtcblx0XHRcdFx0cGFyZW50SW5zdGFuY2UuX292ZXIuY2FsbCggcGFyZW50SW5zdGFuY2UsIGV2ZW50ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdH0sXG5cdGRyYWdTdG9wOiBmdW5jdGlvbiggZHJhZ2dhYmxlLCBldmVudCApIHtcblx0XHRkcmFnZ2FibGUuZWxlbWVudC5wYXJlbnRzVW50aWwoIFwiYm9keVwiICkub2ZmKCBcInNjcm9sbC5kcm9wcGFibGVcIiApO1xuXG5cdFx0Ly8gQ2FsbCBwcmVwYXJlT2Zmc2V0cyBvbmUgZmluYWwgdGltZSBzaW5jZSBJRSBkb2VzIG5vdCBmaXJlIHJldHVybiBzY3JvbGwgZXZlbnRzIHdoZW5cblx0XHQvLyBvdmVyZmxvdyB3YXMgY2F1c2VkIGJ5IGRyYWcgKHNlZSAjNTAwMylcblx0XHRpZiAoICFkcmFnZ2FibGUub3B0aW9ucy5yZWZyZXNoUG9zaXRpb25zICkge1xuXHRcdFx0JC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMoIGRyYWdnYWJsZSwgZXZlbnQgKTtcblx0XHR9XG5cdH1cbn07XG5cbi8vIERFUFJFQ0FURURcbi8vIFRPRE86IHN3aXRjaCByZXR1cm4gYmFjayB0byB3aWRnZXQgZGVjbGFyYXRpb24gYXQgdG9wIG9mIGZpbGUgd2hlbiB0aGlzIGlzIHJlbW92ZWRcbmlmICggJC51aUJhY2tDb21wYXQgIT09IGZhbHNlICkge1xuXG5cdC8vIEJhY2tjb21wYXQgZm9yIGFjdGl2ZUNsYXNzIGFuZCBob3ZlckNsYXNzIG9wdGlvbnNcblx0JC53aWRnZXQoIFwidWkuZHJvcHBhYmxlXCIsICQudWkuZHJvcHBhYmxlLCB7XG5cdFx0b3B0aW9uczoge1xuXHRcdFx0aG92ZXJDbGFzczogZmFsc2UsXG5cdFx0XHRhY3RpdmVDbGFzczogZmFsc2Vcblx0XHR9LFxuXHRcdF9hZGRBY3RpdmVDbGFzczogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLl9zdXBlcigpO1xuXHRcdFx0aWYgKCB0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MgKSB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5hZGRDbGFzcyggdGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzICk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRfcmVtb3ZlQWN0aXZlQ2xhc3M6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5fc3VwZXIoKTtcblx0XHRcdGlmICggdGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzICkge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoIHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyApO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0X2FkZEhvdmVyQ2xhc3M6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5fc3VwZXIoKTtcblx0XHRcdGlmICggdGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MgKSB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5hZGRDbGFzcyggdGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdF9yZW1vdmVIb3ZlckNsYXNzOiBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuX3N1cGVyKCk7XG5cdFx0XHRpZiAoIHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzICkge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoIHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbnZhciB3aWRnZXRzRHJvcHBhYmxlID0gJC51aS5kcm9wcGFibGU7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgUHJvZ3Jlc3NiYXIgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IFByb2dyZXNzYmFyXG4vLz4+Z3JvdXA6IFdpZGdldHNcbi8vIGpzY3M6ZGlzYWJsZSBtYXhpbXVtTGluZUxlbmd0aFxuLy8+PmRlc2NyaXB0aW9uOiBEaXNwbGF5cyBhIHN0YXR1cyBpbmRpY2F0b3IgZm9yIGxvYWRpbmcgc3RhdGUsIHN0YW5kYXJkIHBlcmNlbnRhZ2UsIGFuZCBvdGhlciBwcm9ncmVzcyBpbmRpY2F0b3JzLlxuLy8ganNjczplbmFibGUgbWF4aW11bUxpbmVMZW5ndGhcbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9wcm9ncmVzc2Jhci9cbi8vPj5kZW1vczogaHR0cDovL2pxdWVyeXVpLmNvbS9wcm9ncmVzc2Jhci9cbi8vPj5jc3Muc3RydWN0dXJlOiAuLi8uLi90aGVtZXMvYmFzZS9jb3JlLmNzc1xuLy8+PmNzcy5zdHJ1Y3R1cmU6IC4uLy4uL3RoZW1lcy9iYXNlL3Byb2dyZXNzYmFyLmNzc1xuLy8+PmNzcy50aGVtZTogLi4vLi4vdGhlbWVzL2Jhc2UvdGhlbWUuY3NzXG5cblxuXG52YXIgd2lkZ2V0c1Byb2dyZXNzYmFyID0gJC53aWRnZXQoIFwidWkucHJvZ3Jlc3NiYXJcIiwge1xuXHR2ZXJzaW9uOiBcIjEuMTIuMVwiLFxuXHRvcHRpb25zOiB7XG5cdFx0Y2xhc3Nlczoge1xuXHRcdFx0XCJ1aS1wcm9ncmVzc2JhclwiOiBcInVpLWNvcm5lci1hbGxcIixcblx0XHRcdFwidWktcHJvZ3Jlc3NiYXItdmFsdWVcIjogXCJ1aS1jb3JuZXItbGVmdFwiLFxuXHRcdFx0XCJ1aS1wcm9ncmVzc2Jhci1jb21wbGV0ZVwiOiBcInVpLWNvcm5lci1yaWdodFwiXG5cdFx0fSxcblx0XHRtYXg6IDEwMCxcblx0XHR2YWx1ZTogMCxcblxuXHRcdGNoYW5nZTogbnVsbCxcblx0XHRjb21wbGV0ZTogbnVsbFxuXHR9LFxuXG5cdG1pbjogMCxcblxuXHRfY3JlYXRlOiBmdW5jdGlvbigpIHtcblxuXHRcdC8vIENvbnN0cmFpbiBpbml0aWFsIHZhbHVlXG5cdFx0dGhpcy5vbGRWYWx1ZSA9IHRoaXMub3B0aW9ucy52YWx1ZSA9IHRoaXMuX2NvbnN0cmFpbmVkVmFsdWUoKTtcblxuXHRcdHRoaXMuZWxlbWVudC5hdHRyKCB7XG5cblx0XHRcdC8vIE9ubHkgc2V0IHN0YXRpYyB2YWx1ZXM7IGFyaWEtdmFsdWVub3cgYW5kIGFyaWEtdmFsdWVtYXggYXJlXG5cdFx0XHQvLyBzZXQgaW5zaWRlIF9yZWZyZXNoVmFsdWUoKVxuXHRcdFx0cm9sZTogXCJwcm9ncmVzc2JhclwiLFxuXHRcdFx0XCJhcmlhLXZhbHVlbWluXCI6IHRoaXMubWluXG5cdFx0fSApO1xuXHRcdHRoaXMuX2FkZENsYXNzKCBcInVpLXByb2dyZXNzYmFyXCIsIFwidWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50XCIgKTtcblxuXHRcdHRoaXMudmFsdWVEaXYgPSAkKCBcIjxkaXY+XCIgKS5hcHBlbmRUbyggdGhpcy5lbGVtZW50ICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMudmFsdWVEaXYsIFwidWktcHJvZ3Jlc3NiYXItdmFsdWVcIiwgXCJ1aS13aWRnZXQtaGVhZGVyXCIgKTtcblx0XHR0aGlzLl9yZWZyZXNoVmFsdWUoKTtcblx0fSxcblxuXHRfZGVzdHJveTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoIFwicm9sZSBhcmlhLXZhbHVlbWluIGFyaWEtdmFsdWVtYXggYXJpYS12YWx1ZW5vd1wiICk7XG5cblx0XHR0aGlzLnZhbHVlRGl2LnJlbW92ZSgpO1xuXHR9LFxuXG5cdHZhbHVlOiBmdW5jdGlvbiggbmV3VmFsdWUgKSB7XG5cdFx0aWYgKCBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZTtcblx0XHR9XG5cblx0XHR0aGlzLm9wdGlvbnMudmFsdWUgPSB0aGlzLl9jb25zdHJhaW5lZFZhbHVlKCBuZXdWYWx1ZSApO1xuXHRcdHRoaXMuX3JlZnJlc2hWYWx1ZSgpO1xuXHR9LFxuXG5cdF9jb25zdHJhaW5lZFZhbHVlOiBmdW5jdGlvbiggbmV3VmFsdWUgKSB7XG5cdFx0aWYgKCBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0bmV3VmFsdWUgPSB0aGlzLm9wdGlvbnMudmFsdWU7XG5cdFx0fVxuXG5cdFx0dGhpcy5pbmRldGVybWluYXRlID0gbmV3VmFsdWUgPT09IGZhbHNlO1xuXG5cdFx0Ly8gU2FuaXRpemUgdmFsdWVcblx0XHRpZiAoIHR5cGVvZiBuZXdWYWx1ZSAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdG5ld1ZhbHVlID0gMDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5pbmRldGVybWluYXRlID8gZmFsc2UgOlxuXHRcdFx0TWF0aC5taW4oIHRoaXMub3B0aW9ucy5tYXgsIE1hdGgubWF4KCB0aGlzLm1pbiwgbmV3VmFsdWUgKSApO1xuXHR9LFxuXG5cdF9zZXRPcHRpb25zOiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHRcdC8vIEVuc3VyZSBcInZhbHVlXCIgb3B0aW9uIGlzIHNldCBhZnRlciBvdGhlciB2YWx1ZXMgKGxpa2UgbWF4KVxuXHRcdHZhciB2YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG5cdFx0ZGVsZXRlIG9wdGlvbnMudmFsdWU7XG5cblx0XHR0aGlzLl9zdXBlciggb3B0aW9ucyApO1xuXG5cdFx0dGhpcy5vcHRpb25zLnZhbHVlID0gdGhpcy5fY29uc3RyYWluZWRWYWx1ZSggdmFsdWUgKTtcblx0XHR0aGlzLl9yZWZyZXNoVmFsdWUoKTtcblx0fSxcblxuXHRfc2V0T3B0aW9uOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHRpZiAoIGtleSA9PT0gXCJtYXhcIiApIHtcblxuXHRcdFx0Ly8gRG9uJ3QgYWxsb3cgYSBtYXggbGVzcyB0aGFuIG1pblxuXHRcdFx0dmFsdWUgPSBNYXRoLm1heCggdGhpcy5taW4sIHZhbHVlICk7XG5cdFx0fVxuXHRcdHRoaXMuX3N1cGVyKCBrZXksIHZhbHVlICk7XG5cdH0sXG5cblx0X3NldE9wdGlvbkRpc2FibGVkOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dGhpcy5fc3VwZXIoIHZhbHVlICk7XG5cblx0XHR0aGlzLmVsZW1lbnQuYXR0ciggXCJhcmlhLWRpc2FibGVkXCIsIHZhbHVlICk7XG5cdFx0dGhpcy5fdG9nZ2xlQ2xhc3MoIG51bGwsIFwidWktc3RhdGUtZGlzYWJsZWRcIiwgISF2YWx1ZSApO1xuXHR9LFxuXG5cdF9wZXJjZW50YWdlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5pbmRldGVybWluYXRlID9cblx0XHRcdDEwMCA6XG5cdFx0XHQxMDAgKiAoIHRoaXMub3B0aW9ucy52YWx1ZSAtIHRoaXMubWluICkgLyAoIHRoaXMub3B0aW9ucy5tYXggLSB0aGlzLm1pbiApO1xuXHR9LFxuXG5cdF9yZWZyZXNoVmFsdWU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB2YWx1ZSA9IHRoaXMub3B0aW9ucy52YWx1ZSxcblx0XHRcdHBlcmNlbnRhZ2UgPSB0aGlzLl9wZXJjZW50YWdlKCk7XG5cblx0XHR0aGlzLnZhbHVlRGl2XG5cdFx0XHQudG9nZ2xlKCB0aGlzLmluZGV0ZXJtaW5hdGUgfHwgdmFsdWUgPiB0aGlzLm1pbiApXG5cdFx0XHQud2lkdGgoIHBlcmNlbnRhZ2UudG9GaXhlZCggMCApICsgXCIlXCIgKTtcblxuXHRcdHRoaXNcblx0XHRcdC5fdG9nZ2xlQ2xhc3MoIHRoaXMudmFsdWVEaXYsIFwidWktcHJvZ3Jlc3NiYXItY29tcGxldGVcIiwgbnVsbCxcblx0XHRcdFx0dmFsdWUgPT09IHRoaXMub3B0aW9ucy5tYXggKVxuXHRcdFx0Ll90b2dnbGVDbGFzcyggXCJ1aS1wcm9ncmVzc2Jhci1pbmRldGVybWluYXRlXCIsIG51bGwsIHRoaXMuaW5kZXRlcm1pbmF0ZSApO1xuXG5cdFx0aWYgKCB0aGlzLmluZGV0ZXJtaW5hdGUgKSB7XG5cdFx0XHR0aGlzLmVsZW1lbnQucmVtb3ZlQXR0ciggXCJhcmlhLXZhbHVlbm93XCIgKTtcblx0XHRcdGlmICggIXRoaXMub3ZlcmxheURpdiApIHtcblx0XHRcdFx0dGhpcy5vdmVybGF5RGl2ID0gJCggXCI8ZGl2PlwiICkuYXBwZW5kVG8oIHRoaXMudmFsdWVEaXYgKTtcblx0XHRcdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMub3ZlcmxheURpdiwgXCJ1aS1wcm9ncmVzc2Jhci1vdmVybGF5XCIgKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5lbGVtZW50LmF0dHIoIHtcblx0XHRcdFx0XCJhcmlhLXZhbHVlbWF4XCI6IHRoaXMub3B0aW9ucy5tYXgsXG5cdFx0XHRcdFwiYXJpYS12YWx1ZW5vd1wiOiB2YWx1ZVxuXHRcdFx0fSApO1xuXHRcdFx0aWYgKCB0aGlzLm92ZXJsYXlEaXYgKSB7XG5cdFx0XHRcdHRoaXMub3ZlcmxheURpdi5yZW1vdmUoKTtcblx0XHRcdFx0dGhpcy5vdmVybGF5RGl2ID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHRoaXMub2xkVmFsdWUgIT09IHZhbHVlICkge1xuXHRcdFx0dGhpcy5vbGRWYWx1ZSA9IHZhbHVlO1xuXHRcdFx0dGhpcy5fdHJpZ2dlciggXCJjaGFuZ2VcIiApO1xuXHRcdH1cblx0XHRpZiAoIHZhbHVlID09PSB0aGlzLm9wdGlvbnMubWF4ICkge1xuXHRcdFx0dGhpcy5fdHJpZ2dlciggXCJjb21wbGV0ZVwiICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgU2VsZWN0YWJsZSAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogU2VsZWN0YWJsZVxuLy8+Pmdyb3VwOiBJbnRlcmFjdGlvbnNcbi8vPj5kZXNjcmlwdGlvbjogQWxsb3dzIGdyb3VwcyBvZiBlbGVtZW50cyB0byBiZSBzZWxlY3RlZCB3aXRoIHRoZSBtb3VzZS5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9zZWxlY3RhYmxlL1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL3NlbGVjdGFibGUvXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2Uvc2VsZWN0YWJsZS5jc3NcblxuXG5cbnZhciB3aWRnZXRzU2VsZWN0YWJsZSA9ICQud2lkZ2V0KCBcInVpLnNlbGVjdGFibGVcIiwgJC51aS5tb3VzZSwge1xuXHR2ZXJzaW9uOiBcIjEuMTIuMVwiLFxuXHRvcHRpb25zOiB7XG5cdFx0YXBwZW5kVG86IFwiYm9keVwiLFxuXHRcdGF1dG9SZWZyZXNoOiB0cnVlLFxuXHRcdGRpc3RhbmNlOiAwLFxuXHRcdGZpbHRlcjogXCIqXCIsXG5cdFx0dG9sZXJhbmNlOiBcInRvdWNoXCIsXG5cblx0XHQvLyBDYWxsYmFja3Ncblx0XHRzZWxlY3RlZDogbnVsbCxcblx0XHRzZWxlY3Rpbmc6IG51bGwsXG5cdFx0c3RhcnQ6IG51bGwsXG5cdFx0c3RvcDogbnVsbCxcblx0XHR1bnNlbGVjdGVkOiBudWxsLFxuXHRcdHVuc2VsZWN0aW5nOiBudWxsXG5cdH0sXG5cdF9jcmVhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblxuXHRcdHRoaXMuX2FkZENsYXNzKCBcInVpLXNlbGVjdGFibGVcIiApO1xuXG5cdFx0dGhpcy5kcmFnZ2VkID0gZmFsc2U7XG5cblx0XHQvLyBDYWNoZSBzZWxlY3RlZSBjaGlsZHJlbiBiYXNlZCBvbiBmaWx0ZXJcblx0XHR0aGlzLnJlZnJlc2ggPSBmdW5jdGlvbigpIHtcblx0XHRcdHRoYXQuZWxlbWVudFBvcyA9ICQoIHRoYXQuZWxlbWVudFsgMCBdICkub2Zmc2V0KCk7XG5cdFx0XHR0aGF0LnNlbGVjdGVlcyA9ICQoIHRoYXQub3B0aW9ucy5maWx0ZXIsIHRoYXQuZWxlbWVudFsgMCBdICk7XG5cdFx0XHR0aGF0Ll9hZGRDbGFzcyggdGhhdC5zZWxlY3RlZXMsIFwidWktc2VsZWN0ZWVcIiApO1xuXHRcdFx0dGhhdC5zZWxlY3RlZXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciAkdGhpcyA9ICQoIHRoaXMgKSxcblx0XHRcdFx0XHRzZWxlY3RlZU9mZnNldCA9ICR0aGlzLm9mZnNldCgpLFxuXHRcdFx0XHRcdHBvcyA9IHtcblx0XHRcdFx0XHRcdGxlZnQ6IHNlbGVjdGVlT2Zmc2V0LmxlZnQgLSB0aGF0LmVsZW1lbnRQb3MubGVmdCxcblx0XHRcdFx0XHRcdHRvcDogc2VsZWN0ZWVPZmZzZXQudG9wIC0gdGhhdC5lbGVtZW50UG9zLnRvcFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdCQuZGF0YSggdGhpcywgXCJzZWxlY3RhYmxlLWl0ZW1cIiwge1xuXHRcdFx0XHRcdGVsZW1lbnQ6IHRoaXMsXG5cdFx0XHRcdFx0JGVsZW1lbnQ6ICR0aGlzLFxuXHRcdFx0XHRcdGxlZnQ6IHBvcy5sZWZ0LFxuXHRcdFx0XHRcdHRvcDogcG9zLnRvcCxcblx0XHRcdFx0XHRyaWdodDogcG9zLmxlZnQgKyAkdGhpcy5vdXRlcldpZHRoKCksXG5cdFx0XHRcdFx0Ym90dG9tOiBwb3MudG9wICsgJHRoaXMub3V0ZXJIZWlnaHQoKSxcblx0XHRcdFx0XHRzdGFydHNlbGVjdGVkOiBmYWxzZSxcblx0XHRcdFx0XHRzZWxlY3RlZDogJHRoaXMuaGFzQ2xhc3MoIFwidWktc2VsZWN0ZWRcIiApLFxuXHRcdFx0XHRcdHNlbGVjdGluZzogJHRoaXMuaGFzQ2xhc3MoIFwidWktc2VsZWN0aW5nXCIgKSxcblx0XHRcdFx0XHR1bnNlbGVjdGluZzogJHRoaXMuaGFzQ2xhc3MoIFwidWktdW5zZWxlY3RpbmdcIiApXG5cdFx0XHRcdH0gKTtcblx0XHRcdH0gKTtcblx0XHR9O1xuXHRcdHRoaXMucmVmcmVzaCgpO1xuXG5cdFx0dGhpcy5fbW91c2VJbml0KCk7XG5cblx0XHR0aGlzLmhlbHBlciA9ICQoIFwiPGRpdj5cIiApO1xuXHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLmhlbHBlciwgXCJ1aS1zZWxlY3RhYmxlLWhlbHBlclwiICk7XG5cdH0sXG5cblx0X2Rlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuc2VsZWN0ZWVzLnJlbW92ZURhdGEoIFwic2VsZWN0YWJsZS1pdGVtXCIgKTtcblx0XHR0aGlzLl9tb3VzZURlc3Ryb3koKTtcblx0fSxcblxuXHRfbW91c2VTdGFydDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciB0aGF0ID0gdGhpcyxcblx0XHRcdG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHR0aGlzLm9wb3MgPSBbIGV2ZW50LnBhZ2VYLCBldmVudC5wYWdlWSBdO1xuXHRcdHRoaXMuZWxlbWVudFBvcyA9ICQoIHRoaXMuZWxlbWVudFsgMCBdICkub2Zmc2V0KCk7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kaXNhYmxlZCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnNlbGVjdGVlcyA9ICQoIG9wdGlvbnMuZmlsdGVyLCB0aGlzLmVsZW1lbnRbIDAgXSApO1xuXG5cdFx0dGhpcy5fdHJpZ2dlciggXCJzdGFydFwiLCBldmVudCApO1xuXG5cdFx0JCggb3B0aW9ucy5hcHBlbmRUbyApLmFwcGVuZCggdGhpcy5oZWxwZXIgKTtcblxuXHRcdC8vIHBvc2l0aW9uIGhlbHBlciAobGFzc28pXG5cdFx0dGhpcy5oZWxwZXIuY3NzKCB7XG5cdFx0XHRcImxlZnRcIjogZXZlbnQucGFnZVgsXG5cdFx0XHRcInRvcFwiOiBldmVudC5wYWdlWSxcblx0XHRcdFwid2lkdGhcIjogMCxcblx0XHRcdFwiaGVpZ2h0XCI6IDBcblx0XHR9ICk7XG5cblx0XHRpZiAoIG9wdGlvbnMuYXV0b1JlZnJlc2ggKSB7XG5cdFx0XHR0aGlzLnJlZnJlc2goKTtcblx0XHR9XG5cblx0XHR0aGlzLnNlbGVjdGVlcy5maWx0ZXIoIFwiLnVpLXNlbGVjdGVkXCIgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxlY3RlZSA9ICQuZGF0YSggdGhpcywgXCJzZWxlY3RhYmxlLWl0ZW1cIiApO1xuXHRcdFx0c2VsZWN0ZWUuc3RhcnRzZWxlY3RlZCA9IHRydWU7XG5cdFx0XHRpZiAoICFldmVudC5tZXRhS2V5ICYmICFldmVudC5jdHJsS2V5ICkge1xuXHRcdFx0XHR0aGF0Ll9yZW1vdmVDbGFzcyggc2VsZWN0ZWUuJGVsZW1lbnQsIFwidWktc2VsZWN0ZWRcIiApO1xuXHRcdFx0XHRzZWxlY3RlZS5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0XHR0aGF0Ll9hZGRDbGFzcyggc2VsZWN0ZWUuJGVsZW1lbnQsIFwidWktdW5zZWxlY3RpbmdcIiApO1xuXHRcdFx0XHRzZWxlY3RlZS51bnNlbGVjdGluZyA9IHRydWU7XG5cblx0XHRcdFx0Ly8gc2VsZWN0YWJsZSBVTlNFTEVDVElORyBjYWxsYmFja1xuXHRcdFx0XHR0aGF0Ll90cmlnZ2VyKCBcInVuc2VsZWN0aW5nXCIsIGV2ZW50LCB7XG5cdFx0XHRcdFx0dW5zZWxlY3Rpbmc6IHNlbGVjdGVlLmVsZW1lbnRcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdCQoIGV2ZW50LnRhcmdldCApLnBhcmVudHMoKS5hZGRCYWNrKCkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZG9TZWxlY3QsXG5cdFx0XHRcdHNlbGVjdGVlID0gJC5kYXRhKCB0aGlzLCBcInNlbGVjdGFibGUtaXRlbVwiICk7XG5cdFx0XHRpZiAoIHNlbGVjdGVlICkge1xuXHRcdFx0XHRkb1NlbGVjdCA9ICggIWV2ZW50Lm1ldGFLZXkgJiYgIWV2ZW50LmN0cmxLZXkgKSB8fFxuXHRcdFx0XHRcdCFzZWxlY3RlZS4kZWxlbWVudC5oYXNDbGFzcyggXCJ1aS1zZWxlY3RlZFwiICk7XG5cdFx0XHRcdHRoYXQuX3JlbW92ZUNsYXNzKCBzZWxlY3RlZS4kZWxlbWVudCwgZG9TZWxlY3QgPyBcInVpLXVuc2VsZWN0aW5nXCIgOiBcInVpLXNlbGVjdGVkXCIgKVxuXHRcdFx0XHRcdC5fYWRkQ2xhc3MoIHNlbGVjdGVlLiRlbGVtZW50LCBkb1NlbGVjdCA/IFwidWktc2VsZWN0aW5nXCIgOiBcInVpLXVuc2VsZWN0aW5nXCIgKTtcblx0XHRcdFx0c2VsZWN0ZWUudW5zZWxlY3RpbmcgPSAhZG9TZWxlY3Q7XG5cdFx0XHRcdHNlbGVjdGVlLnNlbGVjdGluZyA9IGRvU2VsZWN0O1xuXHRcdFx0XHRzZWxlY3RlZS5zZWxlY3RlZCA9IGRvU2VsZWN0O1xuXG5cdFx0XHRcdC8vIHNlbGVjdGFibGUgKFVOKVNFTEVDVElORyBjYWxsYmFja1xuXHRcdFx0XHRpZiAoIGRvU2VsZWN0ICkge1xuXHRcdFx0XHRcdHRoYXQuX3RyaWdnZXIoIFwic2VsZWN0aW5nXCIsIGV2ZW50LCB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpbmc6IHNlbGVjdGVlLmVsZW1lbnRcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhhdC5fdHJpZ2dlciggXCJ1bnNlbGVjdGluZ1wiLCBldmVudCwge1xuXHRcdFx0XHRcdFx0dW5zZWxlY3Rpbmc6IHNlbGVjdGVlLmVsZW1lbnRcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHR9LFxuXG5cdF9tb3VzZURyYWc6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdHRoaXMuZHJhZ2dlZCA9IHRydWU7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kaXNhYmxlZCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgdG1wLFxuXHRcdFx0dGhhdCA9IHRoaXMsXG5cdFx0XHRvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuXHRcdFx0eDEgPSB0aGlzLm9wb3NbIDAgXSxcblx0XHRcdHkxID0gdGhpcy5vcG9zWyAxIF0sXG5cdFx0XHR4MiA9IGV2ZW50LnBhZ2VYLFxuXHRcdFx0eTIgPSBldmVudC5wYWdlWTtcblxuXHRcdGlmICggeDEgPiB4MiApIHsgdG1wID0geDI7IHgyID0geDE7IHgxID0gdG1wOyB9XG5cdFx0aWYgKCB5MSA+IHkyICkgeyB0bXAgPSB5MjsgeTIgPSB5MTsgeTEgPSB0bXA7IH1cblx0XHR0aGlzLmhlbHBlci5jc3MoIHsgbGVmdDogeDEsIHRvcDogeTEsIHdpZHRoOiB4MiAtIHgxLCBoZWlnaHQ6IHkyIC0geTEgfSApO1xuXG5cdFx0dGhpcy5zZWxlY3RlZXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZWN0ZWUgPSAkLmRhdGEoIHRoaXMsIFwic2VsZWN0YWJsZS1pdGVtXCIgKSxcblx0XHRcdFx0aGl0ID0gZmFsc2UsXG5cdFx0XHRcdG9mZnNldCA9IHt9O1xuXG5cdFx0XHQvL3ByZXZlbnQgaGVscGVyIGZyb20gYmVpbmcgc2VsZWN0ZWQgaWYgYXBwZW5kVG86IHNlbGVjdGFibGVcblx0XHRcdGlmICggIXNlbGVjdGVlIHx8IHNlbGVjdGVlLmVsZW1lbnQgPT09IHRoYXQuZWxlbWVudFsgMCBdICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdG9mZnNldC5sZWZ0ICAgPSBzZWxlY3RlZS5sZWZ0ICAgKyB0aGF0LmVsZW1lbnRQb3MubGVmdDtcblx0XHRcdG9mZnNldC5yaWdodCAgPSBzZWxlY3RlZS5yaWdodCAgKyB0aGF0LmVsZW1lbnRQb3MubGVmdDtcblx0XHRcdG9mZnNldC50b3AgICAgPSBzZWxlY3RlZS50b3AgICAgKyB0aGF0LmVsZW1lbnRQb3MudG9wO1xuXHRcdFx0b2Zmc2V0LmJvdHRvbSA9IHNlbGVjdGVlLmJvdHRvbSArIHRoYXQuZWxlbWVudFBvcy50b3A7XG5cblx0XHRcdGlmICggb3B0aW9ucy50b2xlcmFuY2UgPT09IFwidG91Y2hcIiApIHtcblx0XHRcdFx0aGl0ID0gKCAhKCBvZmZzZXQubGVmdCA+IHgyIHx8IG9mZnNldC5yaWdodCA8IHgxIHx8IG9mZnNldC50b3AgPiB5MiB8fFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQuYm90dG9tIDwgeTEgKSApO1xuXHRcdFx0fSBlbHNlIGlmICggb3B0aW9ucy50b2xlcmFuY2UgPT09IFwiZml0XCIgKSB7XG5cdFx0XHRcdGhpdCA9ICggb2Zmc2V0LmxlZnQgPiB4MSAmJiBvZmZzZXQucmlnaHQgPCB4MiAmJiBvZmZzZXQudG9wID4geTEgJiZcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LmJvdHRvbSA8IHkyICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaGl0ICkge1xuXG5cdFx0XHRcdC8vIFNFTEVDVFxuXHRcdFx0XHRpZiAoIHNlbGVjdGVlLnNlbGVjdGVkICkge1xuXHRcdFx0XHRcdHRoYXQuX3JlbW92ZUNsYXNzKCBzZWxlY3RlZS4kZWxlbWVudCwgXCJ1aS1zZWxlY3RlZFwiICk7XG5cdFx0XHRcdFx0c2VsZWN0ZWUuc2VsZWN0ZWQgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIHNlbGVjdGVlLnVuc2VsZWN0aW5nICkge1xuXHRcdFx0XHRcdHRoYXQuX3JlbW92ZUNsYXNzKCBzZWxlY3RlZS4kZWxlbWVudCwgXCJ1aS11bnNlbGVjdGluZ1wiICk7XG5cdFx0XHRcdFx0c2VsZWN0ZWUudW5zZWxlY3RpbmcgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoICFzZWxlY3RlZS5zZWxlY3RpbmcgKSB7XG5cdFx0XHRcdFx0dGhhdC5fYWRkQ2xhc3MoIHNlbGVjdGVlLiRlbGVtZW50LCBcInVpLXNlbGVjdGluZ1wiICk7XG5cdFx0XHRcdFx0c2VsZWN0ZWUuc2VsZWN0aW5nID0gdHJ1ZTtcblxuXHRcdFx0XHRcdC8vIHNlbGVjdGFibGUgU0VMRUNUSU5HIGNhbGxiYWNrXG5cdFx0XHRcdFx0dGhhdC5fdHJpZ2dlciggXCJzZWxlY3RpbmdcIiwgZXZlbnQsIHtcblx0XHRcdFx0XHRcdHNlbGVjdGluZzogc2VsZWN0ZWUuZWxlbWVudFxuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBVTlNFTEVDVFxuXHRcdFx0XHRpZiAoIHNlbGVjdGVlLnNlbGVjdGluZyApIHtcblx0XHRcdFx0XHRpZiAoICggZXZlbnQubWV0YUtleSB8fCBldmVudC5jdHJsS2V5ICkgJiYgc2VsZWN0ZWUuc3RhcnRzZWxlY3RlZCApIHtcblx0XHRcdFx0XHRcdHRoYXQuX3JlbW92ZUNsYXNzKCBzZWxlY3RlZS4kZWxlbWVudCwgXCJ1aS1zZWxlY3RpbmdcIiApO1xuXHRcdFx0XHRcdFx0c2VsZWN0ZWUuc2VsZWN0aW5nID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR0aGF0Ll9hZGRDbGFzcyggc2VsZWN0ZWUuJGVsZW1lbnQsIFwidWktc2VsZWN0ZWRcIiApO1xuXHRcdFx0XHRcdFx0c2VsZWN0ZWUuc2VsZWN0ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGF0Ll9yZW1vdmVDbGFzcyggc2VsZWN0ZWUuJGVsZW1lbnQsIFwidWktc2VsZWN0aW5nXCIgKTtcblx0XHRcdFx0XHRcdHNlbGVjdGVlLnNlbGVjdGluZyA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0aWYgKCBzZWxlY3RlZS5zdGFydHNlbGVjdGVkICkge1xuXHRcdFx0XHRcdFx0XHR0aGF0Ll9hZGRDbGFzcyggc2VsZWN0ZWUuJGVsZW1lbnQsIFwidWktdW5zZWxlY3RpbmdcIiApO1xuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZS51bnNlbGVjdGluZyA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIHNlbGVjdGFibGUgVU5TRUxFQ1RJTkcgY2FsbGJhY2tcblx0XHRcdFx0XHRcdHRoYXQuX3RyaWdnZXIoIFwidW5zZWxlY3RpbmdcIiwgZXZlbnQsIHtcblx0XHRcdFx0XHRcdFx0dW5zZWxlY3Rpbmc6IHNlbGVjdGVlLmVsZW1lbnRcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBzZWxlY3RlZS5zZWxlY3RlZCApIHtcblx0XHRcdFx0XHRpZiAoICFldmVudC5tZXRhS2V5ICYmICFldmVudC5jdHJsS2V5ICYmICFzZWxlY3RlZS5zdGFydHNlbGVjdGVkICkge1xuXHRcdFx0XHRcdFx0dGhhdC5fcmVtb3ZlQ2xhc3MoIHNlbGVjdGVlLiRlbGVtZW50LCBcInVpLXNlbGVjdGVkXCIgKTtcblx0XHRcdFx0XHRcdHNlbGVjdGVlLnNlbGVjdGVkID0gZmFsc2U7XG5cblx0XHRcdFx0XHRcdHRoYXQuX2FkZENsYXNzKCBzZWxlY3RlZS4kZWxlbWVudCwgXCJ1aS11bnNlbGVjdGluZ1wiICk7XG5cdFx0XHRcdFx0XHRzZWxlY3RlZS51bnNlbGVjdGluZyA9IHRydWU7XG5cblx0XHRcdFx0XHRcdC8vIHNlbGVjdGFibGUgVU5TRUxFQ1RJTkcgY2FsbGJhY2tcblx0XHRcdFx0XHRcdHRoYXQuX3RyaWdnZXIoIFwidW5zZWxlY3RpbmdcIiwgZXZlbnQsIHtcblx0XHRcdFx0XHRcdFx0dW5zZWxlY3Rpbmc6IHNlbGVjdGVlLmVsZW1lbnRcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0X21vdXNlU3RvcDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblxuXHRcdHRoaXMuZHJhZ2dlZCA9IGZhbHNlO1xuXG5cdFx0JCggXCIudWktdW5zZWxlY3RpbmdcIiwgdGhpcy5lbGVtZW50WyAwIF0gKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxlY3RlZSA9ICQuZGF0YSggdGhpcywgXCJzZWxlY3RhYmxlLWl0ZW1cIiApO1xuXHRcdFx0dGhhdC5fcmVtb3ZlQ2xhc3MoIHNlbGVjdGVlLiRlbGVtZW50LCBcInVpLXVuc2VsZWN0aW5nXCIgKTtcblx0XHRcdHNlbGVjdGVlLnVuc2VsZWN0aW5nID0gZmFsc2U7XG5cdFx0XHRzZWxlY3RlZS5zdGFydHNlbGVjdGVkID0gZmFsc2U7XG5cdFx0XHR0aGF0Ll90cmlnZ2VyKCBcInVuc2VsZWN0ZWRcIiwgZXZlbnQsIHtcblx0XHRcdFx0dW5zZWxlY3RlZDogc2VsZWN0ZWUuZWxlbWVudFxuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0XHQkKCBcIi51aS1zZWxlY3RpbmdcIiwgdGhpcy5lbGVtZW50WyAwIF0gKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxlY3RlZSA9ICQuZGF0YSggdGhpcywgXCJzZWxlY3RhYmxlLWl0ZW1cIiApO1xuXHRcdFx0dGhhdC5fcmVtb3ZlQ2xhc3MoIHNlbGVjdGVlLiRlbGVtZW50LCBcInVpLXNlbGVjdGluZ1wiIClcblx0XHRcdFx0Ll9hZGRDbGFzcyggc2VsZWN0ZWUuJGVsZW1lbnQsIFwidWktc2VsZWN0ZWRcIiApO1xuXHRcdFx0c2VsZWN0ZWUuc2VsZWN0aW5nID0gZmFsc2U7XG5cdFx0XHRzZWxlY3RlZS5zZWxlY3RlZCA9IHRydWU7XG5cdFx0XHRzZWxlY3RlZS5zdGFydHNlbGVjdGVkID0gdHJ1ZTtcblx0XHRcdHRoYXQuX3RyaWdnZXIoIFwic2VsZWN0ZWRcIiwgZXZlbnQsIHtcblx0XHRcdFx0c2VsZWN0ZWQ6IHNlbGVjdGVlLmVsZW1lbnRcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdFx0dGhpcy5fdHJpZ2dlciggXCJzdG9wXCIsIGV2ZW50ICk7XG5cblx0XHR0aGlzLmhlbHBlci5yZW1vdmUoKTtcblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59ICk7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgU2VsZWN0bWVudSAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogU2VsZWN0bWVudVxuLy8+Pmdyb3VwOiBXaWRnZXRzXG4vLyBqc2NzOmRpc2FibGUgbWF4aW11bUxpbmVMZW5ndGhcbi8vPj5kZXNjcmlwdGlvbjogRHVwbGljYXRlcyBhbmQgZXh0ZW5kcyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhIG5hdGl2ZSBIVE1MIHNlbGVjdCBlbGVtZW50LCBhbGxvd2luZyBpdCB0byBiZSBjdXN0b21pemFibGUgaW4gYmVoYXZpb3IgYW5kIGFwcGVhcmFuY2UgZmFyIGJleW9uZCB0aGUgbGltaXRhdGlvbnMgb2YgYSBuYXRpdmUgc2VsZWN0LlxuLy8ganNjczplbmFibGUgbWF4aW11bUxpbmVMZW5ndGhcbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9zZWxlY3RtZW51L1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL3NlbGVjdG1lbnUvXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvY29yZS5jc3Ncbi8vPj5jc3Muc3RydWN0dXJlOiAuLi8uLi90aGVtZXMvYmFzZS9zZWxlY3RtZW51LmNzcywgLi4vLi4vdGhlbWVzL2Jhc2UvYnV0dG9uLmNzc1xuLy8+PmNzcy50aGVtZTogLi4vLi4vdGhlbWVzL2Jhc2UvdGhlbWUuY3NzXG5cblxuXG52YXIgd2lkZ2V0c1NlbGVjdG1lbnUgPSAkLndpZGdldCggXCJ1aS5zZWxlY3RtZW51XCIsIFsgJC51aS5mb3JtUmVzZXRNaXhpbiwge1xuXHR2ZXJzaW9uOiBcIjEuMTIuMVwiLFxuXHRkZWZhdWx0RWxlbWVudDogXCI8c2VsZWN0PlwiLFxuXHRvcHRpb25zOiB7XG5cdFx0YXBwZW5kVG86IG51bGwsXG5cdFx0Y2xhc3Nlczoge1xuXHRcdFx0XCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1vcGVuXCI6IFwidWktY29ybmVyLXRvcFwiLFxuXHRcdFx0XCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1jbG9zZWRcIjogXCJ1aS1jb3JuZXItYWxsXCJcblx0XHR9LFxuXHRcdGRpc2FibGVkOiBudWxsLFxuXHRcdGljb25zOiB7XG5cdFx0XHRidXR0b246IFwidWktaWNvbi10cmlhbmdsZS0xLXNcIlxuXHRcdH0sXG5cdFx0cG9zaXRpb246IHtcblx0XHRcdG15OiBcImxlZnQgdG9wXCIsXG5cdFx0XHRhdDogXCJsZWZ0IGJvdHRvbVwiLFxuXHRcdFx0Y29sbGlzaW9uOiBcIm5vbmVcIlxuXHRcdH0sXG5cdFx0d2lkdGg6IGZhbHNlLFxuXG5cdFx0Ly8gQ2FsbGJhY2tzXG5cdFx0Y2hhbmdlOiBudWxsLFxuXHRcdGNsb3NlOiBudWxsLFxuXHRcdGZvY3VzOiBudWxsLFxuXHRcdG9wZW46IG51bGwsXG5cdFx0c2VsZWN0OiBudWxsXG5cdH0sXG5cblx0X2NyZWF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNlbGVjdG1lbnVJZCA9IHRoaXMuZWxlbWVudC51bmlxdWVJZCgpLmF0dHIoIFwiaWRcIiApO1xuXHRcdHRoaXMuaWRzID0ge1xuXHRcdFx0ZWxlbWVudDogc2VsZWN0bWVudUlkLFxuXHRcdFx0YnV0dG9uOiBzZWxlY3RtZW51SWQgKyBcIi1idXR0b25cIixcblx0XHRcdG1lbnU6IHNlbGVjdG1lbnVJZCArIFwiLW1lbnVcIlxuXHRcdH07XG5cblx0XHR0aGlzLl9kcmF3QnV0dG9uKCk7XG5cdFx0dGhpcy5fZHJhd01lbnUoKTtcblx0XHR0aGlzLl9iaW5kRm9ybVJlc2V0SGFuZGxlcigpO1xuXG5cdFx0dGhpcy5fcmVuZGVyZWQgPSBmYWxzZTtcblx0XHR0aGlzLm1lbnVJdGVtcyA9ICQoKTtcblx0fSxcblxuXHRfZHJhd0J1dHRvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGljb24sXG5cdFx0XHR0aGF0ID0gdGhpcyxcblx0XHRcdGl0ZW0gPSB0aGlzLl9wYXJzZU9wdGlvbihcblx0XHRcdFx0dGhpcy5lbGVtZW50LmZpbmQoIFwib3B0aW9uOnNlbGVjdGVkXCIgKSxcblx0XHRcdFx0dGhpcy5lbGVtZW50WyAwIF0uc2VsZWN0ZWRJbmRleFxuXHRcdFx0KTtcblxuXHRcdC8vIEFzc29jaWF0ZSBleGlzdGluZyBsYWJlbCB3aXRoIHRoZSBuZXcgYnV0dG9uXG5cdFx0dGhpcy5sYWJlbHMgPSB0aGlzLmVsZW1lbnQubGFiZWxzKCkuYXR0ciggXCJmb3JcIiwgdGhpcy5pZHMuYnV0dG9uICk7XG5cdFx0dGhpcy5fb24oIHRoaXMubGFiZWxzLCB7XG5cdFx0XHRjbGljazogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHR0aGlzLmJ1dHRvbi5mb2N1cygpO1xuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdC8vIEhpZGUgb3JpZ2luYWwgc2VsZWN0IGVsZW1lbnRcblx0XHR0aGlzLmVsZW1lbnQuaGlkZSgpO1xuXG5cdFx0Ly8gQ3JlYXRlIGJ1dHRvblxuXHRcdHRoaXMuYnV0dG9uID0gJCggXCI8c3Bhbj5cIiwge1xuXHRcdFx0dGFiaW5kZXg6IHRoaXMub3B0aW9ucy5kaXNhYmxlZCA/IC0xIDogMCxcblx0XHRcdGlkOiB0aGlzLmlkcy5idXR0b24sXG5cdFx0XHRyb2xlOiBcImNvbWJvYm94XCIsXG5cdFx0XHRcImFyaWEtZXhwYW5kZWRcIjogXCJmYWxzZVwiLFxuXHRcdFx0XCJhcmlhLWF1dG9jb21wbGV0ZVwiOiBcImxpc3RcIixcblx0XHRcdFwiYXJpYS1vd25zXCI6IHRoaXMuaWRzLm1lbnUsXG5cdFx0XHRcImFyaWEtaGFzcG9wdXBcIjogXCJ0cnVlXCIsXG5cdFx0XHR0aXRsZTogdGhpcy5lbGVtZW50LmF0dHIoIFwidGl0bGVcIiApXG5cdFx0fSApXG5cdFx0XHQuaW5zZXJ0QWZ0ZXIoIHRoaXMuZWxlbWVudCApO1xuXG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMuYnV0dG9uLCBcInVpLXNlbGVjdG1lbnUtYnV0dG9uIHVpLXNlbGVjdG1lbnUtYnV0dG9uLWNsb3NlZFwiLFxuXHRcdFx0XCJ1aS1idXR0b24gdWktd2lkZ2V0XCIgKTtcblxuXHRcdGljb24gPSAkKCBcIjxzcGFuPlwiICkuYXBwZW5kVG8oIHRoaXMuYnV0dG9uICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIGljb24sIFwidWktc2VsZWN0bWVudS1pY29uXCIsIFwidWktaWNvbiBcIiArIHRoaXMub3B0aW9ucy5pY29ucy5idXR0b24gKTtcblx0XHR0aGlzLmJ1dHRvbkl0ZW0gPSB0aGlzLl9yZW5kZXJCdXR0b25JdGVtKCBpdGVtIClcblx0XHRcdC5hcHBlbmRUbyggdGhpcy5idXR0b24gKTtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLndpZHRoICE9PSBmYWxzZSApIHtcblx0XHRcdHRoaXMuX3Jlc2l6ZUJ1dHRvbigpO1xuXHRcdH1cblxuXHRcdHRoaXMuX29uKCB0aGlzLmJ1dHRvbiwgdGhpcy5fYnV0dG9uRXZlbnRzICk7XG5cdFx0dGhpcy5idXR0b24ub25lKCBcImZvY3VzaW5cIiwgZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIERlbGF5IHJlbmRlcmluZyB0aGUgbWVudSBpdGVtcyB1bnRpbCB0aGUgYnV0dG9uIHJlY2VpdmVzIGZvY3VzLlxuXHRcdFx0Ly8gVGhlIG1lbnUgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIHJlbmRlcmVkIHZpYSBhIHByb2dyYW1tYXRpYyBvcGVuLlxuXHRcdFx0aWYgKCAhdGhhdC5fcmVuZGVyZWQgKSB7XG5cdFx0XHRcdHRoYXQuX3JlZnJlc2hNZW51KCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdF9kcmF3TWVudTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzO1xuXG5cdFx0Ly8gQ3JlYXRlIG1lbnVcblx0XHR0aGlzLm1lbnUgPSAkKCBcIjx1bD5cIiwge1xuXHRcdFx0XCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcblx0XHRcdFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRoaXMuaWRzLmJ1dHRvbixcblx0XHRcdGlkOiB0aGlzLmlkcy5tZW51XG5cdFx0fSApO1xuXG5cdFx0Ly8gV3JhcCBtZW51XG5cdFx0dGhpcy5tZW51V3JhcCA9ICQoIFwiPGRpdj5cIiApLmFwcGVuZCggdGhpcy5tZW51ICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMubWVudVdyYXAsIFwidWktc2VsZWN0bWVudS1tZW51XCIsIFwidWktZnJvbnRcIiApO1xuXHRcdHRoaXMubWVudVdyYXAuYXBwZW5kVG8oIHRoaXMuX2FwcGVuZFRvKCkgKTtcblxuXHRcdC8vIEluaXRpYWxpemUgbWVudSB3aWRnZXRcblx0XHR0aGlzLm1lbnVJbnN0YW5jZSA9IHRoaXMubWVudVxuXHRcdFx0Lm1lbnUoIHtcblx0XHRcdFx0Y2xhc3Nlczoge1xuXHRcdFx0XHRcdFwidWktbWVudVwiOiBcInVpLWNvcm5lci1ib3R0b21cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRyb2xlOiBcImxpc3Rib3hcIixcblx0XHRcdFx0c2VsZWN0OiBmdW5jdGlvbiggZXZlbnQsIHVpICkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdFx0XHQvLyBJZiB0aGUgaXRlbSB3YXMgc2VsZWN0ZWQgdmlhIGEgY2xpY2ssIHRoZSB0ZXh0IHNlbGVjdGlvblxuXHRcdFx0XHRcdC8vIHdpbGwgYmUgZGVzdHJveWVkIGluIElFXG5cdFx0XHRcdFx0dGhhdC5fc2V0U2VsZWN0aW9uKCk7XG5cblx0XHRcdFx0XHR0aGF0Ll9zZWxlY3QoIHVpLml0ZW0uZGF0YSggXCJ1aS1zZWxlY3RtZW51LWl0ZW1cIiApLCBldmVudCApO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRmb2N1czogZnVuY3Rpb24oIGV2ZW50LCB1aSApIHtcblx0XHRcdFx0XHR2YXIgaXRlbSA9IHVpLml0ZW0uZGF0YSggXCJ1aS1zZWxlY3RtZW51LWl0ZW1cIiApO1xuXG5cdFx0XHRcdFx0Ly8gUHJldmVudCBpbml0YWwgZm9jdXMgZnJvbSBmaXJpbmcgYW5kIGNoZWNrIGlmIGl0cyBhIG5ld2x5IGZvY3VzZWQgaXRlbVxuXHRcdFx0XHRcdGlmICggdGhhdC5mb2N1c0luZGV4ICE9IG51bGwgJiYgaXRlbS5pbmRleCAhPT0gdGhhdC5mb2N1c0luZGV4ICkge1xuXHRcdFx0XHRcdFx0dGhhdC5fdHJpZ2dlciggXCJmb2N1c1wiLCBldmVudCwgeyBpdGVtOiBpdGVtIH0gKTtcblx0XHRcdFx0XHRcdGlmICggIXRoYXQuaXNPcGVuICkge1xuXHRcdFx0XHRcdFx0XHR0aGF0Ll9zZWxlY3QoIGl0ZW0sIGV2ZW50ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoYXQuZm9jdXNJbmRleCA9IGl0ZW0uaW5kZXg7XG5cblx0XHRcdFx0XHR0aGF0LmJ1dHRvbi5hdHRyKCBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLFxuXHRcdFx0XHRcdFx0dGhhdC5tZW51SXRlbXMuZXEoIGl0ZW0uaW5kZXggKS5hdHRyKCBcImlkXCIgKSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IClcblx0XHRcdC5tZW51KCBcImluc3RhbmNlXCIgKTtcblxuXHRcdC8vIERvbid0IGNsb3NlIHRoZSBtZW51IG9uIG1vdXNlbGVhdmVcblx0XHR0aGlzLm1lbnVJbnN0YW5jZS5fb2ZmKCB0aGlzLm1lbnUsIFwibW91c2VsZWF2ZVwiICk7XG5cblx0XHQvLyBDYW5jZWwgdGhlIG1lbnUncyBjb2xsYXBzZUFsbCBvbiBkb2N1bWVudCBjbGlja1xuXHRcdHRoaXMubWVudUluc3RhbmNlLl9jbG9zZU9uRG9jdW1lbnRDbGljayA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0XHQvLyBTZWxlY3RzIG9mdGVuIGNvbnRhaW4gZW1wdHkgaXRlbXMsIGJ1dCBuZXZlciBjb250YWluIGRpdmlkZXJzXG5cdFx0dGhpcy5tZW51SW5zdGFuY2UuX2lzRGl2aWRlciA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cdH0sXG5cblx0cmVmcmVzaDogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fcmVmcmVzaE1lbnUoKTtcblx0XHR0aGlzLmJ1dHRvbkl0ZW0ucmVwbGFjZVdpdGgoXG5cdFx0XHR0aGlzLmJ1dHRvbkl0ZW0gPSB0aGlzLl9yZW5kZXJCdXR0b25JdGVtKFxuXG5cdFx0XHRcdC8vIEZhbGwgYmFjayB0byBhbiBlbXB0eSBvYmplY3QgaW4gY2FzZSB0aGVyZSBhcmUgbm8gb3B0aW9uc1xuXHRcdFx0XHR0aGlzLl9nZXRTZWxlY3RlZEl0ZW0oKS5kYXRhKCBcInVpLXNlbGVjdG1lbnUtaXRlbVwiICkgfHwge31cblx0XHRcdClcblx0XHQpO1xuXHRcdGlmICggdGhpcy5vcHRpb25zLndpZHRoID09PSBudWxsICkge1xuXHRcdFx0dGhpcy5fcmVzaXplQnV0dG9uKCk7XG5cdFx0fVxuXHR9LFxuXG5cdF9yZWZyZXNoTWVudTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGl0ZW0sXG5cdFx0XHRvcHRpb25zID0gdGhpcy5lbGVtZW50LmZpbmQoIFwib3B0aW9uXCIgKTtcblxuXHRcdHRoaXMubWVudS5lbXB0eSgpO1xuXG5cdFx0dGhpcy5fcGFyc2VPcHRpb25zKCBvcHRpb25zICk7XG5cdFx0dGhpcy5fcmVuZGVyTWVudSggdGhpcy5tZW51LCB0aGlzLml0ZW1zICk7XG5cblx0XHR0aGlzLm1lbnVJbnN0YW5jZS5yZWZyZXNoKCk7XG5cdFx0dGhpcy5tZW51SXRlbXMgPSB0aGlzLm1lbnUuZmluZCggXCJsaVwiIClcblx0XHRcdC5ub3QoIFwiLnVpLXNlbGVjdG1lbnUtb3B0Z3JvdXBcIiApXG5cdFx0XHRcdC5maW5kKCBcIi51aS1tZW51LWl0ZW0td3JhcHBlclwiICk7XG5cblx0XHR0aGlzLl9yZW5kZXJlZCA9IHRydWU7XG5cblx0XHRpZiAoICFvcHRpb25zLmxlbmd0aCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpdGVtID0gdGhpcy5fZ2V0U2VsZWN0ZWRJdGVtKCk7XG5cblx0XHQvLyBVcGRhdGUgdGhlIG1lbnUgdG8gaGF2ZSB0aGUgY29ycmVjdCBpdGVtIGZvY3VzZWRcblx0XHR0aGlzLm1lbnVJbnN0YW5jZS5mb2N1cyggbnVsbCwgaXRlbSApO1xuXHRcdHRoaXMuX3NldEFyaWEoIGl0ZW0uZGF0YSggXCJ1aS1zZWxlY3RtZW51LWl0ZW1cIiApICk7XG5cblx0XHQvLyBTZXQgZGlzYWJsZWQgc3RhdGVcblx0XHR0aGlzLl9zZXRPcHRpb24oIFwiZGlzYWJsZWRcIiwgdGhpcy5lbGVtZW50LnByb3AoIFwiZGlzYWJsZWRcIiApICk7XG5cdH0sXG5cblx0b3BlbjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGlmICggdGhpcy5vcHRpb25zLmRpc2FibGVkICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhlIG1lbnUgaXMgYmVpbmcgb3BlbmVkLCByZW5kZXIgdGhlIGl0ZW1zXG5cdFx0aWYgKCAhdGhpcy5fcmVuZGVyZWQgKSB7XG5cdFx0XHR0aGlzLl9yZWZyZXNoTWVudSgpO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIE1lbnUgY2xlYXJzIGZvY3VzIG9uIGNsb3NlLCByZXNldCBmb2N1cyB0byBzZWxlY3RlZCBpdGVtXG5cdFx0XHR0aGlzLl9yZW1vdmVDbGFzcyggdGhpcy5tZW51LmZpbmQoIFwiLnVpLXN0YXRlLWFjdGl2ZVwiICksIG51bGwsIFwidWktc3RhdGUtYWN0aXZlXCIgKTtcblx0XHRcdHRoaXMubWVudUluc3RhbmNlLmZvY3VzKCBudWxsLCB0aGlzLl9nZXRTZWxlY3RlZEl0ZW0oKSApO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZXJlIGFyZSBubyBvcHRpb25zLCBkb24ndCBvcGVuIHRoZSBtZW51XG5cdFx0aWYgKCAhdGhpcy5tZW51SXRlbXMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuaXNPcGVuID0gdHJ1ZTtcblx0XHR0aGlzLl90b2dnbGVBdHRyKCk7XG5cdFx0dGhpcy5fcmVzaXplTWVudSgpO1xuXHRcdHRoaXMuX3Bvc2l0aW9uKCk7XG5cblx0XHR0aGlzLl9vbiggdGhpcy5kb2N1bWVudCwgdGhpcy5fZG9jdW1lbnRDbGljayApO1xuXG5cdFx0dGhpcy5fdHJpZ2dlciggXCJvcGVuXCIsIGV2ZW50ICk7XG5cdH0sXG5cblx0X3Bvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLm1lbnVXcmFwLnBvc2l0aW9uKCAkLmV4dGVuZCggeyBvZjogdGhpcy5idXR0b24gfSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uICkgKTtcblx0fSxcblxuXHRjbG9zZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGlmICggIXRoaXMuaXNPcGVuICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuaXNPcGVuID0gZmFsc2U7XG5cdFx0dGhpcy5fdG9nZ2xlQXR0cigpO1xuXG5cdFx0dGhpcy5yYW5nZSA9IG51bGw7XG5cdFx0dGhpcy5fb2ZmKCB0aGlzLmRvY3VtZW50ICk7XG5cblx0XHR0aGlzLl90cmlnZ2VyKCBcImNsb3NlXCIsIGV2ZW50ICk7XG5cdH0sXG5cblx0d2lkZ2V0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5idXR0b247XG5cdH0sXG5cblx0bWVudVdpZGdldDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWVudTtcblx0fSxcblxuXHRfcmVuZGVyQnV0dG9uSXRlbTogZnVuY3Rpb24oIGl0ZW0gKSB7XG5cdFx0dmFyIGJ1dHRvbkl0ZW0gPSAkKCBcIjxzcGFuPlwiICk7XG5cblx0XHR0aGlzLl9zZXRUZXh0KCBidXR0b25JdGVtLCBpdGVtLmxhYmVsICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIGJ1dHRvbkl0ZW0sIFwidWktc2VsZWN0bWVudS10ZXh0XCIgKTtcblxuXHRcdHJldHVybiBidXR0b25JdGVtO1xuXHR9LFxuXG5cdF9yZW5kZXJNZW51OiBmdW5jdGlvbiggdWwsIGl0ZW1zICkge1xuXHRcdHZhciB0aGF0ID0gdGhpcyxcblx0XHRcdGN1cnJlbnRPcHRncm91cCA9IFwiXCI7XG5cblx0XHQkLmVhY2goIGl0ZW1zLCBmdW5jdGlvbiggaW5kZXgsIGl0ZW0gKSB7XG5cdFx0XHR2YXIgbGk7XG5cblx0XHRcdGlmICggaXRlbS5vcHRncm91cCAhPT0gY3VycmVudE9wdGdyb3VwICkge1xuXHRcdFx0XHRsaSA9ICQoIFwiPGxpPlwiLCB7XG5cdFx0XHRcdFx0dGV4dDogaXRlbS5vcHRncm91cFxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHRoYXQuX2FkZENsYXNzKCBsaSwgXCJ1aS1zZWxlY3RtZW51LW9wdGdyb3VwXCIsIFwidWktbWVudS1kaXZpZGVyXCIgK1xuXHRcdFx0XHRcdCggaXRlbS5lbGVtZW50LnBhcmVudCggXCJvcHRncm91cFwiICkucHJvcCggXCJkaXNhYmxlZFwiICkgP1xuXHRcdFx0XHRcdFx0XCIgdWktc3RhdGUtZGlzYWJsZWRcIiA6XG5cdFx0XHRcdFx0XHRcIlwiICkgKTtcblxuXHRcdFx0XHRsaS5hcHBlbmRUbyggdWwgKTtcblxuXHRcdFx0XHRjdXJyZW50T3B0Z3JvdXAgPSBpdGVtLm9wdGdyb3VwO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGF0Ll9yZW5kZXJJdGVtRGF0YSggdWwsIGl0ZW0gKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0X3JlbmRlckl0ZW1EYXRhOiBmdW5jdGlvbiggdWwsIGl0ZW0gKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3JlbmRlckl0ZW0oIHVsLCBpdGVtICkuZGF0YSggXCJ1aS1zZWxlY3RtZW51LWl0ZW1cIiwgaXRlbSApO1xuXHR9LFxuXG5cdF9yZW5kZXJJdGVtOiBmdW5jdGlvbiggdWwsIGl0ZW0gKSB7XG5cdFx0dmFyIGxpID0gJCggXCI8bGk+XCIgKSxcblx0XHRcdHdyYXBwZXIgPSAkKCBcIjxkaXY+XCIsIHtcblx0XHRcdFx0dGl0bGU6IGl0ZW0uZWxlbWVudC5hdHRyKCBcInRpdGxlXCIgKVxuXHRcdFx0fSApO1xuXG5cdFx0aWYgKCBpdGVtLmRpc2FibGVkICkge1xuXHRcdFx0dGhpcy5fYWRkQ2xhc3MoIGxpLCBudWxsLCBcInVpLXN0YXRlLWRpc2FibGVkXCIgKTtcblx0XHR9XG5cdFx0dGhpcy5fc2V0VGV4dCggd3JhcHBlciwgaXRlbS5sYWJlbCApO1xuXG5cdFx0cmV0dXJuIGxpLmFwcGVuZCggd3JhcHBlciApLmFwcGVuZFRvKCB1bCApO1xuXHR9LFxuXG5cdF9zZXRUZXh0OiBmdW5jdGlvbiggZWxlbWVudCwgdmFsdWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSApIHtcblx0XHRcdGVsZW1lbnQudGV4dCggdmFsdWUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZWxlbWVudC5odG1sKCBcIiYjMTYwO1wiICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9tb3ZlOiBmdW5jdGlvbiggZGlyZWN0aW9uLCBldmVudCApIHtcblx0XHR2YXIgaXRlbSwgbmV4dCxcblx0XHRcdGZpbHRlciA9IFwiLnVpLW1lbnUtaXRlbVwiO1xuXG5cdFx0aWYgKCB0aGlzLmlzT3BlbiApIHtcblx0XHRcdGl0ZW0gPSB0aGlzLm1lbnVJdGVtcy5lcSggdGhpcy5mb2N1c0luZGV4ICkucGFyZW50KCBcImxpXCIgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aXRlbSA9IHRoaXMubWVudUl0ZW1zLmVxKCB0aGlzLmVsZW1lbnRbIDAgXS5zZWxlY3RlZEluZGV4ICkucGFyZW50KCBcImxpXCIgKTtcblx0XHRcdGZpbHRlciArPSBcIjpub3QoLnVpLXN0YXRlLWRpc2FibGVkKVwiO1xuXHRcdH1cblxuXHRcdGlmICggZGlyZWN0aW9uID09PSBcImZpcnN0XCIgfHwgZGlyZWN0aW9uID09PSBcImxhc3RcIiApIHtcblx0XHRcdG5leHQgPSBpdGVtWyBkaXJlY3Rpb24gPT09IFwiZmlyc3RcIiA/IFwicHJldkFsbFwiIDogXCJuZXh0QWxsXCIgXSggZmlsdGVyICkuZXEoIC0xICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5leHQgPSBpdGVtWyBkaXJlY3Rpb24gKyBcIkFsbFwiIF0oIGZpbHRlciApLmVxKCAwICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBuZXh0Lmxlbmd0aCApIHtcblx0XHRcdHRoaXMubWVudUluc3RhbmNlLmZvY3VzKCBldmVudCwgbmV4dCApO1xuXHRcdH1cblx0fSxcblxuXHRfZ2V0U2VsZWN0ZWRJdGVtOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tZW51SXRlbXMuZXEoIHRoaXMuZWxlbWVudFsgMCBdLnNlbGVjdGVkSW5kZXggKS5wYXJlbnQoIFwibGlcIiApO1xuXHR9LFxuXG5cdF90b2dnbGU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR0aGlzWyB0aGlzLmlzT3BlbiA/IFwiY2xvc2VcIiA6IFwib3BlblwiIF0oIGV2ZW50ICk7XG5cdH0sXG5cblx0X3NldFNlbGVjdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNlbGVjdGlvbjtcblxuXHRcdGlmICggIXRoaXMucmFuZ2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB3aW5kb3cuZ2V0U2VsZWN0aW9uICkge1xuXHRcdFx0c2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXHRcdFx0c2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuXHRcdFx0c2VsZWN0aW9uLmFkZFJhbmdlKCB0aGlzLnJhbmdlICk7XG5cblx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5yYW5nZS5zZWxlY3QoKTtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBJRVxuXHRcdC8vIFNldHRpbmcgdGhlIHRleHQgc2VsZWN0aW9uIGtpbGxzIHRoZSBidXR0b24gZm9jdXMgaW4gSUUsIGJ1dFxuXHRcdC8vIHJlc3RvcmluZyB0aGUgZm9jdXMgZG9lc24ndCBraWxsIHRoZSBzZWxlY3Rpb24uXG5cdFx0dGhpcy5idXR0b24uZm9jdXMoKTtcblx0fSxcblxuXHRfZG9jdW1lbnRDbGljazoge1xuXHRcdG1vdXNlZG93bjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0aWYgKCAhdGhpcy5pc09wZW4gKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCAhJCggZXZlbnQudGFyZ2V0ICkuY2xvc2VzdCggXCIudWktc2VsZWN0bWVudS1tZW51LCAjXCIgK1xuXHRcdFx0XHRcdCQudWkuZXNjYXBlU2VsZWN0b3IoIHRoaXMuaWRzLmJ1dHRvbiApICkubGVuZ3RoICkge1xuXHRcdFx0XHR0aGlzLmNsb3NlKCBldmVudCApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRfYnV0dG9uRXZlbnRzOiB7XG5cblx0XHQvLyBQcmV2ZW50IHRleHQgc2VsZWN0aW9uIGZyb20gYmVpbmcgcmVzZXQgd2hlbiBpbnRlcmFjdGluZyB3aXRoIHRoZSBzZWxlY3RtZW51ICgjMTAxNDQpXG5cdFx0bW91c2Vkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxlY3Rpb247XG5cblx0XHRcdGlmICggd2luZG93LmdldFNlbGVjdGlvbiApIHtcblx0XHRcdFx0c2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXHRcdFx0XHRpZiAoIHNlbGVjdGlvbi5yYW5nZUNvdW50ICkge1xuXHRcdFx0XHRcdHRoaXMucmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCggMCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5yYW5nZSA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjbGljazogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dGhpcy5fc2V0U2VsZWN0aW9uKCk7XG5cdFx0XHR0aGlzLl90b2dnbGUoIGV2ZW50ICk7XG5cdFx0fSxcblxuXHRcdGtleWRvd246IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG5cdFx0XHRzd2l0Y2ggKCBldmVudC5rZXlDb2RlICkge1xuXHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuVEFCOlxuXHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuRVNDQVBFOlxuXHRcdFx0XHR0aGlzLmNsb3NlKCBldmVudCApO1xuXHRcdFx0XHRwcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJC51aS5rZXlDb2RlLkVOVEVSOlxuXHRcdFx0XHRpZiAoIHRoaXMuaXNPcGVuICkge1xuXHRcdFx0XHRcdHRoaXMuX3NlbGVjdEZvY3VzZWRJdGVtKCBldmVudCApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuVVA6XG5cdFx0XHRcdGlmICggZXZlbnQuYWx0S2V5ICkge1xuXHRcdFx0XHRcdHRoaXMuX3RvZ2dsZSggZXZlbnQgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl9tb3ZlKCBcInByZXZcIiwgZXZlbnQgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJC51aS5rZXlDb2RlLkRPV046XG5cdFx0XHRcdGlmICggZXZlbnQuYWx0S2V5ICkge1xuXHRcdFx0XHRcdHRoaXMuX3RvZ2dsZSggZXZlbnQgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl9tb3ZlKCBcIm5leHRcIiwgZXZlbnQgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJC51aS5rZXlDb2RlLlNQQUNFOlxuXHRcdFx0XHRpZiAoIHRoaXMuaXNPcGVuICkge1xuXHRcdFx0XHRcdHRoaXMuX3NlbGVjdEZvY3VzZWRJdGVtKCBldmVudCApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuX3RvZ2dsZSggZXZlbnQgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJC51aS5rZXlDb2RlLkxFRlQ6XG5cdFx0XHRcdHRoaXMuX21vdmUoIFwicHJldlwiLCBldmVudCApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJC51aS5rZXlDb2RlLlJJR0hUOlxuXHRcdFx0XHR0aGlzLl9tb3ZlKCBcIm5leHRcIiwgZXZlbnQgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICQudWkua2V5Q29kZS5IT01FOlxuXHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuUEFHRV9VUDpcblx0XHRcdFx0dGhpcy5fbW92ZSggXCJmaXJzdFwiLCBldmVudCApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJC51aS5rZXlDb2RlLkVORDpcblx0XHRcdGNhc2UgJC51aS5rZXlDb2RlLlBBR0VfRE9XTjpcblx0XHRcdFx0dGhpcy5fbW92ZSggXCJsYXN0XCIsIGV2ZW50ICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhpcy5tZW51LnRyaWdnZXIoIGV2ZW50ICk7XG5cdFx0XHRcdHByZXZlbnREZWZhdWx0ID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggcHJldmVudERlZmF1bHQgKSB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdF9zZWxlY3RGb2N1c2VkSXRlbTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBpdGVtID0gdGhpcy5tZW51SXRlbXMuZXEoIHRoaXMuZm9jdXNJbmRleCApLnBhcmVudCggXCJsaVwiICk7XG5cdFx0aWYgKCAhaXRlbS5oYXNDbGFzcyggXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiICkgKSB7XG5cdFx0XHR0aGlzLl9zZWxlY3QoIGl0ZW0uZGF0YSggXCJ1aS1zZWxlY3RtZW51LWl0ZW1cIiApLCBldmVudCApO1xuXHRcdH1cblx0fSxcblxuXHRfc2VsZWN0OiBmdW5jdGlvbiggaXRlbSwgZXZlbnQgKSB7XG5cdFx0dmFyIG9sZEluZGV4ID0gdGhpcy5lbGVtZW50WyAwIF0uc2VsZWN0ZWRJbmRleDtcblxuXHRcdC8vIENoYW5nZSBuYXRpdmUgc2VsZWN0IGVsZW1lbnRcblx0XHR0aGlzLmVsZW1lbnRbIDAgXS5zZWxlY3RlZEluZGV4ID0gaXRlbS5pbmRleDtcblx0XHR0aGlzLmJ1dHRvbkl0ZW0ucmVwbGFjZVdpdGgoIHRoaXMuYnV0dG9uSXRlbSA9IHRoaXMuX3JlbmRlckJ1dHRvbkl0ZW0oIGl0ZW0gKSApO1xuXHRcdHRoaXMuX3NldEFyaWEoIGl0ZW0gKTtcblx0XHR0aGlzLl90cmlnZ2VyKCBcInNlbGVjdFwiLCBldmVudCwgeyBpdGVtOiBpdGVtIH0gKTtcblxuXHRcdGlmICggaXRlbS5pbmRleCAhPT0gb2xkSW5kZXggKSB7XG5cdFx0XHR0aGlzLl90cmlnZ2VyKCBcImNoYW5nZVwiLCBldmVudCwgeyBpdGVtOiBpdGVtIH0gKTtcblx0XHR9XG5cblx0XHR0aGlzLmNsb3NlKCBldmVudCApO1xuXHR9LFxuXG5cdF9zZXRBcmlhOiBmdW5jdGlvbiggaXRlbSApIHtcblx0XHR2YXIgaWQgPSB0aGlzLm1lbnVJdGVtcy5lcSggaXRlbS5pbmRleCApLmF0dHIoIFwiaWRcIiApO1xuXG5cdFx0dGhpcy5idXR0b24uYXR0cigge1xuXHRcdFx0XCJhcmlhLWxhYmVsbGVkYnlcIjogaWQsXG5cdFx0XHRcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOiBpZFxuXHRcdH0gKTtcblx0XHR0aGlzLm1lbnUuYXR0ciggXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIiwgaWQgKTtcblx0fSxcblxuXHRfc2V0T3B0aW9uOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHRpZiAoIGtleSA9PT0gXCJpY29uc1wiICkge1xuXHRcdFx0dmFyIGljb24gPSB0aGlzLmJ1dHRvbi5maW5kKCBcInNwYW4udWktaWNvblwiICk7XG5cdFx0XHR0aGlzLl9yZW1vdmVDbGFzcyggaWNvbiwgbnVsbCwgdGhpcy5vcHRpb25zLmljb25zLmJ1dHRvbiApXG5cdFx0XHRcdC5fYWRkQ2xhc3MoIGljb24sIG51bGwsIHZhbHVlLmJ1dHRvbiApO1xuXHRcdH1cblxuXHRcdHRoaXMuX3N1cGVyKCBrZXksIHZhbHVlICk7XG5cblx0XHRpZiAoIGtleSA9PT0gXCJhcHBlbmRUb1wiICkge1xuXHRcdFx0dGhpcy5tZW51V3JhcC5hcHBlbmRUbyggdGhpcy5fYXBwZW5kVG8oKSApO1xuXHRcdH1cblxuXHRcdGlmICgga2V5ID09PSBcIndpZHRoXCIgKSB7XG5cdFx0XHR0aGlzLl9yZXNpemVCdXR0b24oKTtcblx0XHR9XG5cdH0sXG5cblx0X3NldE9wdGlvbkRpc2FibGVkOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dGhpcy5fc3VwZXIoIHZhbHVlICk7XG5cblx0XHR0aGlzLm1lbnVJbnN0YW5jZS5vcHRpb24oIFwiZGlzYWJsZWRcIiwgdmFsdWUgKTtcblx0XHR0aGlzLmJ1dHRvbi5hdHRyKCBcImFyaWEtZGlzYWJsZWRcIiwgdmFsdWUgKTtcblx0XHR0aGlzLl90b2dnbGVDbGFzcyggdGhpcy5idXR0b24sIG51bGwsIFwidWktc3RhdGUtZGlzYWJsZWRcIiwgdmFsdWUgKTtcblxuXHRcdHRoaXMuZWxlbWVudC5wcm9wKCBcImRpc2FibGVkXCIsIHZhbHVlICk7XG5cdFx0aWYgKCB2YWx1ZSApIHtcblx0XHRcdHRoaXMuYnV0dG9uLmF0dHIoIFwidGFiaW5kZXhcIiwgLTEgKTtcblx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5idXR0b24uYXR0ciggXCJ0YWJpbmRleFwiLCAwICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9hcHBlbmRUbzogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLm9wdGlvbnMuYXBwZW5kVG87XG5cblx0XHRpZiAoIGVsZW1lbnQgKSB7XG5cdFx0XHRlbGVtZW50ID0gZWxlbWVudC5qcXVlcnkgfHwgZWxlbWVudC5ub2RlVHlwZSA/XG5cdFx0XHRcdCQoIGVsZW1lbnQgKSA6XG5cdFx0XHRcdHRoaXMuZG9jdW1lbnQuZmluZCggZWxlbWVudCApLmVxKCAwICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhZWxlbWVudCB8fCAhZWxlbWVudFsgMCBdICkge1xuXHRcdFx0ZWxlbWVudCA9IHRoaXMuZWxlbWVudC5jbG9zZXN0KCBcIi51aS1mcm9udCwgZGlhbG9nXCIgKTtcblx0XHR9XG5cblx0XHRpZiAoICFlbGVtZW50Lmxlbmd0aCApIHtcblx0XHRcdGVsZW1lbnQgPSB0aGlzLmRvY3VtZW50WyAwIF0uYm9keTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fSxcblxuXHRfdG9nZ2xlQXR0cjogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5idXR0b24uYXR0ciggXCJhcmlhLWV4cGFuZGVkXCIsIHRoaXMuaXNPcGVuICk7XG5cblx0XHQvLyBXZSBjYW4ndCB1c2UgdHdvIF90b2dnbGVDbGFzcygpIGNhbGxzIGhlcmUsIGJlY2F1c2Ugd2UgbmVlZCB0byBtYWtlIHN1cmVcblx0XHQvLyB3ZSBhbHdheXMgcmVtb3ZlIGNsYXNzZXMgZmlyc3QgYW5kIGFkZCB0aGVtIHNlY29uZCwgb3RoZXJ3aXNlIGlmIGJvdGggY2xhc3NlcyBoYXZlIHRoZVxuXHRcdC8vIHNhbWUgdGhlbWUgY2xhc3MsIGl0IHdpbGwgYmUgcmVtb3ZlZCBhZnRlciB3ZSBhZGQgaXQuXG5cdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIHRoaXMuYnV0dG9uLCBcInVpLXNlbGVjdG1lbnUtYnV0dG9uLVwiICtcblx0XHRcdCggdGhpcy5pc09wZW4gPyBcImNsb3NlZFwiIDogXCJvcGVuXCIgKSApXG5cdFx0XHQuX2FkZENsYXNzKCB0aGlzLmJ1dHRvbiwgXCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1cIiArXG5cdFx0XHRcdCggdGhpcy5pc09wZW4gPyBcIm9wZW5cIiA6IFwiY2xvc2VkXCIgKSApXG5cdFx0XHQuX3RvZ2dsZUNsYXNzKCB0aGlzLm1lbnVXcmFwLCBcInVpLXNlbGVjdG1lbnUtb3BlblwiLCBudWxsLCB0aGlzLmlzT3BlbiApO1xuXG5cdFx0dGhpcy5tZW51LmF0dHIoIFwiYXJpYS1oaWRkZW5cIiwgIXRoaXMuaXNPcGVuICk7XG5cdH0sXG5cblx0X3Jlc2l6ZUJ1dHRvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHdpZHRoID0gdGhpcy5vcHRpb25zLndpZHRoO1xuXG5cdFx0Ly8gRm9yIGB3aWR0aDogZmFsc2VgLCBqdXN0IHJlbW92ZSBpbmxpbmUgc3R5bGUgYW5kIHN0b3Bcblx0XHRpZiAoIHdpZHRoID09PSBmYWxzZSApIHtcblx0XHRcdHRoaXMuYnV0dG9uLmNzcyggXCJ3aWR0aFwiLCBcIlwiICk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIGB3aWR0aDogbnVsbGAsIG1hdGNoIHRoZSB3aWR0aCBvZiB0aGUgb3JpZ2luYWwgZWxlbWVudFxuXHRcdGlmICggd2lkdGggPT09IG51bGwgKSB7XG5cdFx0XHR3aWR0aCA9IHRoaXMuZWxlbWVudC5zaG93KCkub3V0ZXJXaWR0aCgpO1xuXHRcdFx0dGhpcy5lbGVtZW50LmhpZGUoKTtcblx0XHR9XG5cblx0XHR0aGlzLmJ1dHRvbi5vdXRlcldpZHRoKCB3aWR0aCApO1xuXHR9LFxuXG5cdF9yZXNpemVNZW51OiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLm1lbnUub3V0ZXJXaWR0aCggTWF0aC5tYXgoXG5cdFx0XHR0aGlzLmJ1dHRvbi5vdXRlcldpZHRoKCksXG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFMTBcblx0XHRcdC8vIElFMTAgd3JhcHMgbG9uZyB0ZXh0IChwb3NzaWJseSBhIHJvdW5kaW5nIGJ1Zylcblx0XHRcdC8vIHNvIHdlIGFkZCAxcHggdG8gYXZvaWQgdGhlIHdyYXBwaW5nXG5cdFx0XHR0aGlzLm1lbnUud2lkdGgoIFwiXCIgKS5vdXRlcldpZHRoKCkgKyAxXG5cdFx0KSApO1xuXHR9LFxuXG5cdF9nZXRDcmVhdGVPcHRpb25zOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMuX3N1cGVyKCk7XG5cblx0XHRvcHRpb25zLmRpc2FibGVkID0gdGhpcy5lbGVtZW50LnByb3AoIFwiZGlzYWJsZWRcIiApO1xuXG5cdFx0cmV0dXJuIG9wdGlvbnM7XG5cdH0sXG5cblx0X3BhcnNlT3B0aW9uczogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0ZGF0YSA9IFtdO1xuXHRcdG9wdGlvbnMuZWFjaCggZnVuY3Rpb24oIGluZGV4LCBpdGVtICkge1xuXHRcdFx0ZGF0YS5wdXNoKCB0aGF0Ll9wYXJzZU9wdGlvbiggJCggaXRlbSApLCBpbmRleCApICk7XG5cdFx0fSApO1xuXHRcdHRoaXMuaXRlbXMgPSBkYXRhO1xuXHR9LFxuXG5cdF9wYXJzZU9wdGlvbjogZnVuY3Rpb24oIG9wdGlvbiwgaW5kZXggKSB7XG5cdFx0dmFyIG9wdGdyb3VwID0gb3B0aW9uLnBhcmVudCggXCJvcHRncm91cFwiICk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0ZWxlbWVudDogb3B0aW9uLFxuXHRcdFx0aW5kZXg6IGluZGV4LFxuXHRcdFx0dmFsdWU6IG9wdGlvbi52YWwoKSxcblx0XHRcdGxhYmVsOiBvcHRpb24udGV4dCgpLFxuXHRcdFx0b3B0Z3JvdXA6IG9wdGdyb3VwLmF0dHIoIFwibGFiZWxcIiApIHx8IFwiXCIsXG5cdFx0XHRkaXNhYmxlZDogb3B0Z3JvdXAucHJvcCggXCJkaXNhYmxlZFwiICkgfHwgb3B0aW9uLnByb3AoIFwiZGlzYWJsZWRcIiApXG5cdFx0fTtcblx0fSxcblxuXHRfZGVzdHJveTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fdW5iaW5kRm9ybVJlc2V0SGFuZGxlcigpO1xuXHRcdHRoaXMubWVudVdyYXAucmVtb3ZlKCk7XG5cdFx0dGhpcy5idXR0b24ucmVtb3ZlKCk7XG5cdFx0dGhpcy5lbGVtZW50LnNob3coKTtcblx0XHR0aGlzLmVsZW1lbnQucmVtb3ZlVW5pcXVlSWQoKTtcblx0XHR0aGlzLmxhYmVscy5hdHRyKCBcImZvclwiLCB0aGlzLmlkcy5lbGVtZW50ICk7XG5cdH1cbn0gXSApO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIFNsaWRlciAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogU2xpZGVyXG4vLz4+Z3JvdXA6IFdpZGdldHNcbi8vPj5kZXNjcmlwdGlvbjogRGlzcGxheXMgYSBmbGV4aWJsZSBzbGlkZXIgd2l0aCByYW5nZXMgYW5kIGFjY2Vzc2liaWxpdHkgdmlhIGtleWJvYXJkLlxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL3NsaWRlci9cbi8vPj5kZW1vczogaHR0cDovL2pxdWVyeXVpLmNvbS9zbGlkZXIvXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvY29yZS5jc3Ncbi8vPj5jc3Muc3RydWN0dXJlOiAuLi8uLi90aGVtZXMvYmFzZS9zbGlkZXIuY3NzXG4vLz4+Y3NzLnRoZW1lOiAuLi8uLi90aGVtZXMvYmFzZS90aGVtZS5jc3NcblxuXG5cbnZhciB3aWRnZXRzU2xpZGVyID0gJC53aWRnZXQoIFwidWkuc2xpZGVyXCIsICQudWkubW91c2UsIHtcblx0dmVyc2lvbjogXCIxLjEyLjFcIixcblx0d2lkZ2V0RXZlbnRQcmVmaXg6IFwic2xpZGVcIixcblxuXHRvcHRpb25zOiB7XG5cdFx0YW5pbWF0ZTogZmFsc2UsXG5cdFx0Y2xhc3Nlczoge1xuXHRcdFx0XCJ1aS1zbGlkZXJcIjogXCJ1aS1jb3JuZXItYWxsXCIsXG5cdFx0XHRcInVpLXNsaWRlci1oYW5kbGVcIjogXCJ1aS1jb3JuZXItYWxsXCIsXG5cblx0XHRcdC8vIE5vdGU6IHVpLXdpZGdldC1oZWFkZXIgaXNuJ3QgdGhlIG1vc3QgZml0dGluZ2x5IHNlbWFudGljIGZyYW1ld29yayBjbGFzcyBmb3IgdGhpc1xuXHRcdFx0Ly8gZWxlbWVudCwgYnV0IHdvcmtlZCBiZXN0IHZpc3VhbGx5IHdpdGggYSB2YXJpZXR5IG9mIHRoZW1lc1xuXHRcdFx0XCJ1aS1zbGlkZXItcmFuZ2VcIjogXCJ1aS1jb3JuZXItYWxsIHVpLXdpZGdldC1oZWFkZXJcIlxuXHRcdH0sXG5cdFx0ZGlzdGFuY2U6IDAsXG5cdFx0bWF4OiAxMDAsXG5cdFx0bWluOiAwLFxuXHRcdG9yaWVudGF0aW9uOiBcImhvcml6b250YWxcIixcblx0XHRyYW5nZTogZmFsc2UsXG5cdFx0c3RlcDogMSxcblx0XHR2YWx1ZTogMCxcblx0XHR2YWx1ZXM6IG51bGwsXG5cblx0XHQvLyBDYWxsYmFja3Ncblx0XHRjaGFuZ2U6IG51bGwsXG5cdFx0c2xpZGU6IG51bGwsXG5cdFx0c3RhcnQ6IG51bGwsXG5cdFx0c3RvcDogbnVsbFxuXHR9LFxuXG5cdC8vIE51bWJlciBvZiBwYWdlcyBpbiBhIHNsaWRlclxuXHQvLyAoaG93IG1hbnkgdGltZXMgY2FuIHlvdSBwYWdlIHVwL2Rvd24gdG8gZ28gdGhyb3VnaCB0aGUgd2hvbGUgcmFuZ2UpXG5cdG51bVBhZ2VzOiA1LFxuXG5cdF9jcmVhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuX2tleVNsaWRpbmcgPSBmYWxzZTtcblx0XHR0aGlzLl9tb3VzZVNsaWRpbmcgPSBmYWxzZTtcblx0XHR0aGlzLl9hbmltYXRlT2ZmID0gdHJ1ZTtcblx0XHR0aGlzLl9oYW5kbGVJbmRleCA9IG51bGw7XG5cdFx0dGhpcy5fZGV0ZWN0T3JpZW50YXRpb24oKTtcblx0XHR0aGlzLl9tb3VzZUluaXQoKTtcblx0XHR0aGlzLl9jYWxjdWxhdGVOZXdNYXgoKTtcblxuXHRcdHRoaXMuX2FkZENsYXNzKCBcInVpLXNsaWRlciB1aS1zbGlkZXItXCIgKyB0aGlzLm9yaWVudGF0aW9uLFxuXHRcdFx0XCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnRcIiApO1xuXG5cdFx0dGhpcy5fcmVmcmVzaCgpO1xuXG5cdFx0dGhpcy5fYW5pbWF0ZU9mZiA9IGZhbHNlO1xuXHR9LFxuXG5cdF9yZWZyZXNoOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLl9jcmVhdGVSYW5nZSgpO1xuXHRcdHRoaXMuX2NyZWF0ZUhhbmRsZXMoKTtcblx0XHR0aGlzLl9zZXR1cEV2ZW50cygpO1xuXHRcdHRoaXMuX3JlZnJlc2hWYWx1ZSgpO1xuXHR9LFxuXG5cdF9jcmVhdGVIYW5kbGVzOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaSwgaGFuZGxlQ291bnQsXG5cdFx0XHRvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuXHRcdFx0ZXhpc3RpbmdIYW5kbGVzID0gdGhpcy5lbGVtZW50LmZpbmQoIFwiLnVpLXNsaWRlci1oYW5kbGVcIiApLFxuXHRcdFx0aGFuZGxlID0gXCI8c3BhbiB0YWJpbmRleD0nMCc+PC9zcGFuPlwiLFxuXHRcdFx0aGFuZGxlcyA9IFtdO1xuXG5cdFx0aGFuZGxlQ291bnQgPSAoIG9wdGlvbnMudmFsdWVzICYmIG9wdGlvbnMudmFsdWVzLmxlbmd0aCApIHx8IDE7XG5cblx0XHRpZiAoIGV4aXN0aW5nSGFuZGxlcy5sZW5ndGggPiBoYW5kbGVDb3VudCApIHtcblx0XHRcdGV4aXN0aW5nSGFuZGxlcy5zbGljZSggaGFuZGxlQ291bnQgKS5yZW1vdmUoKTtcblx0XHRcdGV4aXN0aW5nSGFuZGxlcyA9IGV4aXN0aW5nSGFuZGxlcy5zbGljZSggMCwgaGFuZGxlQ291bnQgKTtcblx0XHR9XG5cblx0XHRmb3IgKCBpID0gZXhpc3RpbmdIYW5kbGVzLmxlbmd0aDsgaSA8IGhhbmRsZUNvdW50OyBpKysgKSB7XG5cdFx0XHRoYW5kbGVzLnB1c2goIGhhbmRsZSApO1xuXHRcdH1cblxuXHRcdHRoaXMuaGFuZGxlcyA9IGV4aXN0aW5nSGFuZGxlcy5hZGQoICQoIGhhbmRsZXMuam9pbiggXCJcIiApICkuYXBwZW5kVG8oIHRoaXMuZWxlbWVudCApICk7XG5cblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5oYW5kbGVzLCBcInVpLXNsaWRlci1oYW5kbGVcIiwgXCJ1aS1zdGF0ZS1kZWZhdWx0XCIgKTtcblxuXHRcdHRoaXMuaGFuZGxlID0gdGhpcy5oYW5kbGVzLmVxKCAwICk7XG5cblx0XHR0aGlzLmhhbmRsZXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHQkKCB0aGlzIClcblx0XHRcdFx0LmRhdGEoIFwidWktc2xpZGVyLWhhbmRsZS1pbmRleFwiLCBpIClcblx0XHRcdFx0LmF0dHIoIFwidGFiSW5kZXhcIiwgMCApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRfY3JlYXRlUmFuZ2U6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG5cdFx0aWYgKCBvcHRpb25zLnJhbmdlICkge1xuXHRcdFx0aWYgKCBvcHRpb25zLnJhbmdlID09PSB0cnVlICkge1xuXHRcdFx0XHRpZiAoICFvcHRpb25zLnZhbHVlcyApIHtcblx0XHRcdFx0XHRvcHRpb25zLnZhbHVlcyA9IFsgdGhpcy5fdmFsdWVNaW4oKSwgdGhpcy5fdmFsdWVNaW4oKSBdO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCBvcHRpb25zLnZhbHVlcy5sZW5ndGggJiYgb3B0aW9ucy52YWx1ZXMubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0XHRcdG9wdGlvbnMudmFsdWVzID0gWyBvcHRpb25zLnZhbHVlc1sgMCBdLCBvcHRpb25zLnZhbHVlc1sgMCBdIF07XG5cdFx0XHRcdH0gZWxzZSBpZiAoIEFycmF5LmlzQXJyYXkoIG9wdGlvbnMudmFsdWVzICkgKSB7XG5cdFx0XHRcdFx0b3B0aW9ucy52YWx1ZXMgPSBvcHRpb25zLnZhbHVlcy5zbGljZSggMCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggIXRoaXMucmFuZ2UgfHwgIXRoaXMucmFuZ2UubGVuZ3RoICkge1xuXHRcdFx0XHR0aGlzLnJhbmdlID0gJCggXCI8ZGl2PlwiIClcblx0XHRcdFx0XHQuYXBwZW5kVG8oIHRoaXMuZWxlbWVudCApO1xuXG5cdFx0XHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLnJhbmdlLCBcInVpLXNsaWRlci1yYW5nZVwiICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLl9yZW1vdmVDbGFzcyggdGhpcy5yYW5nZSwgXCJ1aS1zbGlkZXItcmFuZ2UtbWluIHVpLXNsaWRlci1yYW5nZS1tYXhcIiApO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSByYW5nZSBzd2l0Y2hpbmcgZnJvbSB0cnVlIHRvIG1pbi9tYXhcblx0XHRcdFx0dGhpcy5yYW5nZS5jc3MoIHtcblx0XHRcdFx0XHRcImxlZnRcIjogXCJcIixcblx0XHRcdFx0XHRcImJvdHRvbVwiOiBcIlwiXG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHRcdGlmICggb3B0aW9ucy5yYW5nZSA9PT0gXCJtaW5cIiB8fCBvcHRpb25zLnJhbmdlID09PSBcIm1heFwiICkge1xuXHRcdFx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5yYW5nZSwgXCJ1aS1zbGlkZXItcmFuZ2UtXCIgKyBvcHRpb25zLnJhbmdlICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggdGhpcy5yYW5nZSApIHtcblx0XHRcdFx0dGhpcy5yYW5nZS5yZW1vdmUoKTtcblx0XHRcdH1cblx0XHRcdHRoaXMucmFuZ2UgPSBudWxsO1xuXHRcdH1cblx0fSxcblxuXHRfc2V0dXBFdmVudHM6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuX29mZiggdGhpcy5oYW5kbGVzICk7XG5cdFx0dGhpcy5fb24oIHRoaXMuaGFuZGxlcywgdGhpcy5faGFuZGxlRXZlbnRzICk7XG5cdFx0dGhpcy5faG92ZXJhYmxlKCB0aGlzLmhhbmRsZXMgKTtcblx0XHR0aGlzLl9mb2N1c2FibGUoIHRoaXMuaGFuZGxlcyApO1xuXHR9LFxuXG5cdF9kZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmhhbmRsZXMucmVtb3ZlKCk7XG5cdFx0aWYgKCB0aGlzLnJhbmdlICkge1xuXHRcdFx0dGhpcy5yYW5nZS5yZW1vdmUoKTtcblx0XHR9XG5cblx0XHR0aGlzLl9tb3VzZURlc3Ryb3koKTtcblx0fSxcblxuXHRfbW91c2VDYXB0dXJlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIHBvc2l0aW9uLCBub3JtVmFsdWUsIGRpc3RhbmNlLCBjbG9zZXN0SGFuZGxlLCBpbmRleCwgYWxsb3dlZCwgb2Zmc2V0LCBtb3VzZU92ZXJIYW5kbGUsXG5cdFx0XHR0aGF0ID0gdGhpcyxcblx0XHRcdG8gPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRpZiAoIG8uZGlzYWJsZWQgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5lbGVtZW50U2l6ZSA9IHtcblx0XHRcdHdpZHRoOiB0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLFxuXHRcdFx0aGVpZ2h0OiB0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKVxuXHRcdH07XG5cdFx0dGhpcy5lbGVtZW50T2Zmc2V0ID0gdGhpcy5lbGVtZW50Lm9mZnNldCgpO1xuXG5cdFx0cG9zaXRpb24gPSB7IHg6IGV2ZW50LnBhZ2VYLCB5OiBldmVudC5wYWdlWSB9O1xuXHRcdG5vcm1WYWx1ZSA9IHRoaXMuX25vcm1WYWx1ZUZyb21Nb3VzZSggcG9zaXRpb24gKTtcblx0XHRkaXN0YW5jZSA9IHRoaXMuX3ZhbHVlTWF4KCkgLSB0aGlzLl92YWx1ZU1pbigpICsgMTtcblx0XHR0aGlzLmhhbmRsZXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHR2YXIgdGhpc0Rpc3RhbmNlID0gTWF0aC5hYnMoIG5vcm1WYWx1ZSAtIHRoYXQudmFsdWVzKCBpICkgKTtcblx0XHRcdGlmICggKCBkaXN0YW5jZSA+IHRoaXNEaXN0YW5jZSApIHx8XG5cdFx0XHRcdCggZGlzdGFuY2UgPT09IHRoaXNEaXN0YW5jZSAmJlxuXHRcdFx0XHRcdCggaSA9PT0gdGhhdC5fbGFzdENoYW5nZWRWYWx1ZSB8fCB0aGF0LnZhbHVlcyggaSApID09PSBvLm1pbiApICkgKSB7XG5cdFx0XHRcdGRpc3RhbmNlID0gdGhpc0Rpc3RhbmNlO1xuXHRcdFx0XHRjbG9zZXN0SGFuZGxlID0gJCggdGhpcyApO1xuXHRcdFx0XHRpbmRleCA9IGk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdFx0YWxsb3dlZCA9IHRoaXMuX3N0YXJ0KCBldmVudCwgaW5kZXggKTtcblx0XHRpZiAoIGFsbG93ZWQgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR0aGlzLl9tb3VzZVNsaWRpbmcgPSB0cnVlO1xuXG5cdFx0dGhpcy5faGFuZGxlSW5kZXggPSBpbmRleDtcblxuXHRcdHRoaXMuX2FkZENsYXNzKCBjbG9zZXN0SGFuZGxlLCBudWxsLCBcInVpLXN0YXRlLWFjdGl2ZVwiICk7XG5cdFx0Y2xvc2VzdEhhbmRsZS50cmlnZ2VyKCBcImZvY3VzXCIgKTtcblxuXHRcdG9mZnNldCA9IGNsb3Nlc3RIYW5kbGUub2Zmc2V0KCk7XG5cdFx0bW91c2VPdmVySGFuZGxlID0gISQoIGV2ZW50LnRhcmdldCApLnBhcmVudHMoKS5hZGRCYWNrKCkuaXMoIFwiLnVpLXNsaWRlci1oYW5kbGVcIiApO1xuXHRcdHRoaXMuX2NsaWNrT2Zmc2V0ID0gbW91c2VPdmVySGFuZGxlID8geyBsZWZ0OiAwLCB0b3A6IDAgfSA6IHtcblx0XHRcdGxlZnQ6IGV2ZW50LnBhZ2VYIC0gb2Zmc2V0LmxlZnQgLSAoIGNsb3Nlc3RIYW5kbGUud2lkdGgoKSAvIDIgKSxcblx0XHRcdHRvcDogZXZlbnQucGFnZVkgLSBvZmZzZXQudG9wIC1cblx0XHRcdFx0KCBjbG9zZXN0SGFuZGxlLmhlaWdodCgpIC8gMiApIC1cblx0XHRcdFx0KCBwYXJzZUludCggY2xvc2VzdEhhbmRsZS5jc3MoIFwiYm9yZGVyVG9wV2lkdGhcIiApLCAxMCApIHx8IDAgKSAtXG5cdFx0XHRcdCggcGFyc2VJbnQoIGNsb3Nlc3RIYW5kbGUuY3NzKCBcImJvcmRlckJvdHRvbVdpZHRoXCIgKSwgMTAgKSB8fCAwICkgK1xuXHRcdFx0XHQoIHBhcnNlSW50KCBjbG9zZXN0SGFuZGxlLmNzcyggXCJtYXJnaW5Ub3BcIiApLCAxMCApIHx8IDAgKVxuXHRcdH07XG5cblx0XHRpZiAoICF0aGlzLmhhbmRsZXMuaGFzQ2xhc3MoIFwidWktc3RhdGUtaG92ZXJcIiApICkge1xuXHRcdFx0dGhpcy5fc2xpZGUoIGV2ZW50LCBpbmRleCwgbm9ybVZhbHVlICk7XG5cdFx0fVxuXHRcdHRoaXMuX2FuaW1hdGVPZmYgPSB0cnVlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdF9tb3VzZVN0YXJ0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHRfbW91c2VEcmFnOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIHBvc2l0aW9uID0geyB4OiBldmVudC5wYWdlWCwgeTogZXZlbnQucGFnZVkgfSxcblx0XHRcdG5vcm1WYWx1ZSA9IHRoaXMuX25vcm1WYWx1ZUZyb21Nb3VzZSggcG9zaXRpb24gKTtcblxuXHRcdHRoaXMuX3NsaWRlKCBldmVudCwgdGhpcy5faGFuZGxlSW5kZXgsIG5vcm1WYWx1ZSApO1xuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdF9tb3VzZVN0b3A6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR0aGlzLl9yZW1vdmVDbGFzcyggdGhpcy5oYW5kbGVzLCBudWxsLCBcInVpLXN0YXRlLWFjdGl2ZVwiICk7XG5cdFx0dGhpcy5fbW91c2VTbGlkaW5nID0gZmFsc2U7XG5cblx0XHR0aGlzLl9zdG9wKCBldmVudCwgdGhpcy5faGFuZGxlSW5kZXggKTtcblx0XHR0aGlzLl9jaGFuZ2UoIGV2ZW50LCB0aGlzLl9oYW5kbGVJbmRleCApO1xuXG5cdFx0dGhpcy5faGFuZGxlSW5kZXggPSBudWxsO1xuXHRcdHRoaXMuX2NsaWNrT2Zmc2V0ID0gbnVsbDtcblx0XHR0aGlzLl9hbmltYXRlT2ZmID0gZmFsc2U7XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0X2RldGVjdE9yaWVudGF0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLm9yaWVudGF0aW9uID0gKCB0aGlzLm9wdGlvbnMub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIiApID8gXCJ2ZXJ0aWNhbFwiIDogXCJob3Jpem9udGFsXCI7XG5cdH0sXG5cblx0X25vcm1WYWx1ZUZyb21Nb3VzZTogZnVuY3Rpb24oIHBvc2l0aW9uICkge1xuXHRcdHZhciBwaXhlbFRvdGFsLFxuXHRcdFx0cGl4ZWxNb3VzZSxcblx0XHRcdHBlcmNlbnRNb3VzZSxcblx0XHRcdHZhbHVlVG90YWwsXG5cdFx0XHR2YWx1ZU1vdXNlO1xuXG5cdFx0aWYgKCB0aGlzLm9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIiApIHtcblx0XHRcdHBpeGVsVG90YWwgPSB0aGlzLmVsZW1lbnRTaXplLndpZHRoO1xuXHRcdFx0cGl4ZWxNb3VzZSA9IHBvc2l0aW9uLnggLSB0aGlzLmVsZW1lbnRPZmZzZXQubGVmdCAtXG5cdFx0XHRcdCggdGhpcy5fY2xpY2tPZmZzZXQgPyB0aGlzLl9jbGlja09mZnNldC5sZWZ0IDogMCApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwaXhlbFRvdGFsID0gdGhpcy5lbGVtZW50U2l6ZS5oZWlnaHQ7XG5cdFx0XHRwaXhlbE1vdXNlID0gcG9zaXRpb24ueSAtIHRoaXMuZWxlbWVudE9mZnNldC50b3AgLVxuXHRcdFx0XHQoIHRoaXMuX2NsaWNrT2Zmc2V0ID8gdGhpcy5fY2xpY2tPZmZzZXQudG9wIDogMCApO1xuXHRcdH1cblxuXHRcdHBlcmNlbnRNb3VzZSA9ICggcGl4ZWxNb3VzZSAvIHBpeGVsVG90YWwgKTtcblx0XHRpZiAoIHBlcmNlbnRNb3VzZSA+IDEgKSB7XG5cdFx0XHRwZXJjZW50TW91c2UgPSAxO1xuXHRcdH1cblx0XHRpZiAoIHBlcmNlbnRNb3VzZSA8IDAgKSB7XG5cdFx0XHRwZXJjZW50TW91c2UgPSAwO1xuXHRcdH1cblx0XHRpZiAoIHRoaXMub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIiApIHtcblx0XHRcdHBlcmNlbnRNb3VzZSA9IDEgLSBwZXJjZW50TW91c2U7XG5cdFx0fVxuXG5cdFx0dmFsdWVUb3RhbCA9IHRoaXMuX3ZhbHVlTWF4KCkgLSB0aGlzLl92YWx1ZU1pbigpO1xuXHRcdHZhbHVlTW91c2UgPSB0aGlzLl92YWx1ZU1pbigpICsgcGVyY2VudE1vdXNlICogdmFsdWVUb3RhbDtcblxuXHRcdHJldHVybiB0aGlzLl90cmltQWxpZ25WYWx1ZSggdmFsdWVNb3VzZSApO1xuXHR9LFxuXG5cdF91aUhhc2g6IGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUsIHZhbHVlcyApIHtcblx0XHR2YXIgdWlIYXNoID0ge1xuXHRcdFx0aGFuZGxlOiB0aGlzLmhhbmRsZXNbIGluZGV4IF0sXG5cdFx0XHRoYW5kbGVJbmRleDogaW5kZXgsXG5cdFx0XHR2YWx1ZTogdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogdGhpcy52YWx1ZSgpXG5cdFx0fTtcblxuXHRcdGlmICggdGhpcy5faGFzTXVsdGlwbGVWYWx1ZXMoKSApIHtcblx0XHRcdHVpSGFzaC52YWx1ZSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHRoaXMudmFsdWVzKCBpbmRleCApO1xuXHRcdFx0dWlIYXNoLnZhbHVlcyA9IHZhbHVlcyB8fCB0aGlzLnZhbHVlcygpO1xuXHRcdH1cblxuXHRcdHJldHVybiB1aUhhc2g7XG5cdH0sXG5cblx0X2hhc011bHRpcGxlVmFsdWVzOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlcyAmJiB0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aDtcblx0fSxcblxuXHRfc3RhcnQ6IGZ1bmN0aW9uKCBldmVudCwgaW5kZXggKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3RyaWdnZXIoIFwic3RhcnRcIiwgZXZlbnQsIHRoaXMuX3VpSGFzaCggaW5kZXggKSApO1xuXHR9LFxuXG5cdF9zbGlkZTogZnVuY3Rpb24oIGV2ZW50LCBpbmRleCwgbmV3VmFsICkge1xuXHRcdHZhciBhbGxvd2VkLCBvdGhlclZhbCxcblx0XHRcdGN1cnJlbnRWYWx1ZSA9IHRoaXMudmFsdWUoKSxcblx0XHRcdG5ld1ZhbHVlcyA9IHRoaXMudmFsdWVzKCk7XG5cblx0XHRpZiAoIHRoaXMuX2hhc011bHRpcGxlVmFsdWVzKCkgKSB7XG5cdFx0XHRvdGhlclZhbCA9IHRoaXMudmFsdWVzKCBpbmRleCA/IDAgOiAxICk7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSB0aGlzLnZhbHVlcyggaW5kZXggKTtcblxuXHRcdFx0aWYgKCB0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCA9PT0gMiAmJiB0aGlzLm9wdGlvbnMucmFuZ2UgPT09IHRydWUgKSB7XG5cdFx0XHRcdG5ld1ZhbCA9ICBpbmRleCA9PT0gMCA/IE1hdGgubWluKCBvdGhlclZhbCwgbmV3VmFsICkgOiBNYXRoLm1heCggb3RoZXJWYWwsIG5ld1ZhbCApO1xuXHRcdFx0fVxuXG5cdFx0XHRuZXdWYWx1ZXNbIGluZGV4IF0gPSBuZXdWYWw7XG5cdFx0fVxuXG5cdFx0aWYgKCBuZXdWYWwgPT09IGN1cnJlbnRWYWx1ZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRhbGxvd2VkID0gdGhpcy5fdHJpZ2dlciggXCJzbGlkZVwiLCBldmVudCwgdGhpcy5fdWlIYXNoKCBpbmRleCwgbmV3VmFsLCBuZXdWYWx1ZXMgKSApO1xuXG5cdFx0Ly8gQSBzbGlkZSBjYW4gYmUgY2FuY2VsZWQgYnkgcmV0dXJuaW5nIGZhbHNlIGZyb20gdGhlIHNsaWRlIGNhbGxiYWNrXG5cdFx0aWYgKCBhbGxvd2VkID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuX2hhc011bHRpcGxlVmFsdWVzKCkgKSB7XG5cdFx0XHR0aGlzLnZhbHVlcyggaW5kZXgsIG5ld1ZhbCApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnZhbHVlKCBuZXdWYWwgKTtcblx0XHR9XG5cdH0sXG5cblx0X3N0b3A6IGZ1bmN0aW9uKCBldmVudCwgaW5kZXggKSB7XG5cdFx0dGhpcy5fdHJpZ2dlciggXCJzdG9wXCIsIGV2ZW50LCB0aGlzLl91aUhhc2goIGluZGV4ICkgKTtcblx0fSxcblxuXHRfY2hhbmdlOiBmdW5jdGlvbiggZXZlbnQsIGluZGV4ICkge1xuXHRcdGlmICggIXRoaXMuX2tleVNsaWRpbmcgJiYgIXRoaXMuX21vdXNlU2xpZGluZyApIHtcblxuXHRcdFx0Ly9zdG9yZSB0aGUgbGFzdCBjaGFuZ2VkIHZhbHVlIGluZGV4IGZvciByZWZlcmVuY2Ugd2hlbiBoYW5kbGVzIG92ZXJsYXBcblx0XHRcdHRoaXMuX2xhc3RDaGFuZ2VkVmFsdWUgPSBpbmRleDtcblx0XHRcdHRoaXMuX3RyaWdnZXIoIFwiY2hhbmdlXCIsIGV2ZW50LCB0aGlzLl91aUhhc2goIGluZGV4ICkgKTtcblx0XHR9XG5cdH0sXG5cblx0dmFsdWU6IGZ1bmN0aW9uKCBuZXdWYWx1ZSApIHtcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMudmFsdWUgPSB0aGlzLl90cmltQWxpZ25WYWx1ZSggbmV3VmFsdWUgKTtcblx0XHRcdHRoaXMuX3JlZnJlc2hWYWx1ZSgpO1xuXHRcdFx0dGhpcy5fY2hhbmdlKCBudWxsLCAwICk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX3ZhbHVlKCk7XG5cdH0sXG5cblx0dmFsdWVzOiBmdW5jdGlvbiggaW5kZXgsIG5ld1ZhbHVlICkge1xuXHRcdHZhciB2YWxzLFxuXHRcdFx0bmV3VmFsdWVzLFxuXHRcdFx0aTtcblxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCA+IDEgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMudmFsdWVzWyBpbmRleCBdID0gdGhpcy5fdHJpbUFsaWduVmFsdWUoIG5ld1ZhbHVlICk7XG5cdFx0XHR0aGlzLl9yZWZyZXNoVmFsdWUoKTtcblx0XHRcdHRoaXMuX2NoYW5nZSggbnVsbCwgaW5kZXggKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIGFyZ3VtZW50c1sgMCBdICkgKSB7XG5cdFx0XHRcdHZhbHMgPSB0aGlzLm9wdGlvbnMudmFsdWVzO1xuXHRcdFx0XHRuZXdWYWx1ZXMgPSBhcmd1bWVudHNbIDAgXTtcblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgaSArPSAxICkge1xuXHRcdFx0XHRcdHZhbHNbIGkgXSA9IHRoaXMuX3RyaW1BbGlnblZhbHVlKCBuZXdWYWx1ZXNbIGkgXSApO1xuXHRcdFx0XHRcdHRoaXMuX2NoYW5nZSggbnVsbCwgaSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX3JlZnJlc2hWYWx1ZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCB0aGlzLl9oYXNNdWx0aXBsZVZhbHVlcygpICkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLl92YWx1ZXMoIGluZGV4ICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMudmFsdWUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fdmFsdWVzKCk7XG5cdFx0fVxuXHR9LFxuXG5cdF9zZXRPcHRpb246IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdHZhciBpLFxuXHRcdFx0dmFsc0xlbmd0aCA9IDA7XG5cblx0XHRpZiAoIGtleSA9PT0gXCJyYW5nZVwiICYmIHRoaXMub3B0aW9ucy5yYW5nZSA9PT0gdHJ1ZSApIHtcblx0XHRcdGlmICggdmFsdWUgPT09IFwibWluXCIgKSB7XG5cdFx0XHRcdHRoaXMub3B0aW9ucy52YWx1ZSA9IHRoaXMuX3ZhbHVlcyggMCApO1xuXHRcdFx0XHR0aGlzLm9wdGlvbnMudmFsdWVzID0gbnVsbDtcblx0XHRcdH0gZWxzZSBpZiAoIHZhbHVlID09PSBcIm1heFwiICkge1xuXHRcdFx0XHR0aGlzLm9wdGlvbnMudmFsdWUgPSB0aGlzLl92YWx1ZXMoIHRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoIC0gMSApO1xuXHRcdFx0XHR0aGlzLm9wdGlvbnMudmFsdWVzID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHRoaXMub3B0aW9ucy52YWx1ZXMgKSApIHtcblx0XHRcdHZhbHNMZW5ndGggPSB0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aDtcblx0XHR9XG5cblx0XHR0aGlzLl9zdXBlcigga2V5LCB2YWx1ZSApO1xuXG5cdFx0c3dpdGNoICgga2V5ICkge1xuXHRcdFx0Y2FzZSBcIm9yaWVudGF0aW9uXCI6XG5cdFx0XHRcdHRoaXMuX2RldGVjdE9yaWVudGF0aW9uKCk7XG5cdFx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCBcInVpLXNsaWRlci1ob3Jpem9udGFsIHVpLXNsaWRlci12ZXJ0aWNhbFwiIClcblx0XHRcdFx0XHQuX2FkZENsYXNzKCBcInVpLXNsaWRlci1cIiArIHRoaXMub3JpZW50YXRpb24gKTtcblx0XHRcdFx0dGhpcy5fcmVmcmVzaFZhbHVlKCk7XG5cdFx0XHRcdGlmICggdGhpcy5vcHRpb25zLnJhbmdlICkge1xuXHRcdFx0XHRcdHRoaXMuX3JlZnJlc2hSYW5nZSggdmFsdWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlc2V0IHBvc2l0aW9uaW5nIGZyb20gcHJldmlvdXMgb3JpZW50YXRpb25cblx0XHRcdFx0dGhpcy5oYW5kbGVzLmNzcyggdmFsdWUgPT09IFwiaG9yaXpvbnRhbFwiID8gXCJib3R0b21cIiA6IFwibGVmdFwiLCBcIlwiICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInZhbHVlXCI6XG5cdFx0XHRcdHRoaXMuX2FuaW1hdGVPZmYgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLl9yZWZyZXNoVmFsdWUoKTtcblx0XHRcdFx0dGhpcy5fY2hhbmdlKCBudWxsLCAwICk7XG5cdFx0XHRcdHRoaXMuX2FuaW1hdGVPZmYgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwidmFsdWVzXCI6XG5cdFx0XHRcdHRoaXMuX2FuaW1hdGVPZmYgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLl9yZWZyZXNoVmFsdWUoKTtcblxuXHRcdFx0XHQvLyBTdGFydCBmcm9tIHRoZSBsYXN0IGhhbmRsZSB0byBwcmV2ZW50IHVucmVhY2hhYmxlIGhhbmRsZXMgKCM5MDQ2KVxuXHRcdFx0XHRmb3IgKCBpID0gdmFsc0xlbmd0aCAtIDE7IGkgPj0gMDsgaS0tICkge1xuXHRcdFx0XHRcdHRoaXMuX2NoYW5nZSggbnVsbCwgaSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX2FuaW1hdGVPZmYgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwic3RlcFwiOlxuXHRcdFx0Y2FzZSBcIm1pblwiOlxuXHRcdFx0Y2FzZSBcIm1heFwiOlxuXHRcdFx0XHR0aGlzLl9hbmltYXRlT2ZmID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5fY2FsY3VsYXRlTmV3TWF4KCk7XG5cdFx0XHRcdHRoaXMuX3JlZnJlc2hWYWx1ZSgpO1xuXHRcdFx0XHR0aGlzLl9hbmltYXRlT2ZmID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInJhbmdlXCI6XG5cdFx0XHRcdHRoaXMuX2FuaW1hdGVPZmYgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLl9yZWZyZXNoKCk7XG5cdFx0XHRcdHRoaXMuX2FuaW1hdGVPZmYgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9LFxuXG5cdF9zZXRPcHRpb25EaXNhYmxlZDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHRoaXMuX3N1cGVyKCB2YWx1ZSApO1xuXG5cdFx0dGhpcy5fdG9nZ2xlQ2xhc3MoIG51bGwsIFwidWktc3RhdGUtZGlzYWJsZWRcIiwgISF2YWx1ZSApO1xuXHR9LFxuXG5cdC8vaW50ZXJuYWwgdmFsdWUgZ2V0dGVyXG5cdC8vIF92YWx1ZSgpIHJldHVybnMgdmFsdWUgdHJpbW1lZCBieSBtaW4gYW5kIG1heCwgYWxpZ25lZCBieSBzdGVwXG5cdF92YWx1ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHZhbCA9IHRoaXMub3B0aW9ucy52YWx1ZTtcblx0XHR2YWwgPSB0aGlzLl90cmltQWxpZ25WYWx1ZSggdmFsICk7XG5cblx0XHRyZXR1cm4gdmFsO1xuXHR9LFxuXG5cdC8vaW50ZXJuYWwgdmFsdWVzIGdldHRlclxuXHQvLyBfdmFsdWVzKCkgcmV0dXJucyBhcnJheSBvZiB2YWx1ZXMgdHJpbW1lZCBieSBtaW4gYW5kIG1heCwgYWxpZ25lZCBieSBzdGVwXG5cdC8vIF92YWx1ZXMoIGluZGV4ICkgcmV0dXJucyBzaW5nbGUgdmFsdWUgdHJpbW1lZCBieSBtaW4gYW5kIG1heCwgYWxpZ25lZCBieSBzdGVwXG5cdF92YWx1ZXM6IGZ1bmN0aW9uKCBpbmRleCApIHtcblx0XHR2YXIgdmFsLFxuXHRcdFx0dmFscyxcblx0XHRcdGk7XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHR2YWwgPSB0aGlzLm9wdGlvbnMudmFsdWVzWyBpbmRleCBdO1xuXHRcdFx0dmFsID0gdGhpcy5fdHJpbUFsaWduVmFsdWUoIHZhbCApO1xuXG5cdFx0XHRyZXR1cm4gdmFsO1xuXHRcdH0gZWxzZSBpZiAoIHRoaXMuX2hhc011bHRpcGxlVmFsdWVzKCkgKSB7XG5cblx0XHRcdC8vIC5zbGljZSgpIGNyZWF0ZXMgYSBjb3B5IG9mIHRoZSBhcnJheVxuXHRcdFx0Ly8gdGhpcyBjb3B5IGdldHMgdHJpbW1lZCBieSBtaW4gYW5kIG1heCBhbmQgdGhlbiByZXR1cm5lZFxuXHRcdFx0dmFscyA9IHRoaXMub3B0aW9ucy52YWx1ZXMuc2xpY2UoKTtcblx0XHRcdGZvciAoIGkgPSAwOyBpIDwgdmFscy5sZW5ndGg7IGkgKz0gMSApIHtcblx0XHRcdFx0dmFsc1sgaSBdID0gdGhpcy5fdHJpbUFsaWduVmFsdWUoIHZhbHNbIGkgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFscztcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0fSxcblxuXHQvLyBSZXR1cm5zIHRoZSBzdGVwLWFsaWduZWQgdmFsdWUgdGhhdCB2YWwgaXMgY2xvc2VzdCB0bywgYmV0d2VlbiAoaW5jbHVzaXZlKSBtaW4gYW5kIG1heFxuXHRfdHJpbUFsaWduVmFsdWU6IGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0aWYgKCB2YWwgPD0gdGhpcy5fdmFsdWVNaW4oKSApIHtcblx0XHRcdHJldHVybiB0aGlzLl92YWx1ZU1pbigpO1xuXHRcdH1cblx0XHRpZiAoIHZhbCA+PSB0aGlzLl92YWx1ZU1heCgpICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX3ZhbHVlTWF4KCk7XG5cdFx0fVxuXHRcdHZhciBzdGVwID0gKCB0aGlzLm9wdGlvbnMuc3RlcCA+IDAgKSA/IHRoaXMub3B0aW9ucy5zdGVwIDogMSxcblx0XHRcdHZhbE1vZFN0ZXAgPSAoIHZhbCAtIHRoaXMuX3ZhbHVlTWluKCkgKSAlIHN0ZXAsXG5cdFx0XHRhbGlnblZhbHVlID0gdmFsIC0gdmFsTW9kU3RlcDtcblxuXHRcdGlmICggTWF0aC5hYnMoIHZhbE1vZFN0ZXAgKSAqIDIgPj0gc3RlcCApIHtcblx0XHRcdGFsaWduVmFsdWUgKz0gKCB2YWxNb2RTdGVwID4gMCApID8gc3RlcCA6ICggLXN0ZXAgKTtcblx0XHR9XG5cblx0XHQvLyBTaW5jZSBKYXZhU2NyaXB0IGhhcyBwcm9ibGVtcyB3aXRoIGxhcmdlIGZsb2F0cywgcm91bmRcblx0XHQvLyB0aGUgZmluYWwgdmFsdWUgdG8gNSBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgKHNlZSAjNDEyNClcblx0XHRyZXR1cm4gcGFyc2VGbG9hdCggYWxpZ25WYWx1ZS50b0ZpeGVkKCA1ICkgKTtcblx0fSxcblxuXHRfY2FsY3VsYXRlTmV3TWF4OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWF4ID0gdGhpcy5vcHRpb25zLm1heCxcblx0XHRcdG1pbiA9IHRoaXMuX3ZhbHVlTWluKCksXG5cdFx0XHRzdGVwID0gdGhpcy5vcHRpb25zLnN0ZXAsXG5cdFx0XHRhYm92ZU1pbiA9IE1hdGgucm91bmQoICggbWF4IC0gbWluICkgLyBzdGVwICkgKiBzdGVwO1xuXHRcdG1heCA9IGFib3ZlTWluICsgbWluO1xuXHRcdGlmICggbWF4ID4gdGhpcy5vcHRpb25zLm1heCApIHtcblxuXHRcdFx0Ly9JZiBtYXggaXMgbm90IGRpdmlzaWJsZSBieSBzdGVwLCByb3VuZGluZyBvZmYgbWF5IGluY3JlYXNlIGl0cyB2YWx1ZVxuXHRcdFx0bWF4IC09IHN0ZXA7XG5cdFx0fVxuXHRcdHRoaXMubWF4ID0gcGFyc2VGbG9hdCggbWF4LnRvRml4ZWQoIHRoaXMuX3ByZWNpc2lvbigpICkgKTtcblx0fSxcblxuXHRfcHJlY2lzaW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgcHJlY2lzaW9uID0gdGhpcy5fcHJlY2lzaW9uT2YoIHRoaXMub3B0aW9ucy5zdGVwICk7XG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMubWluICE9PSBudWxsICkge1xuXHRcdFx0cHJlY2lzaW9uID0gTWF0aC5tYXgoIHByZWNpc2lvbiwgdGhpcy5fcHJlY2lzaW9uT2YoIHRoaXMub3B0aW9ucy5taW4gKSApO1xuXHRcdH1cblx0XHRyZXR1cm4gcHJlY2lzaW9uO1xuXHR9LFxuXG5cdF9wcmVjaXNpb25PZjogZnVuY3Rpb24oIG51bSApIHtcblx0XHR2YXIgc3RyID0gbnVtLnRvU3RyaW5nKCksXG5cdFx0XHRkZWNpbWFsID0gc3RyLmluZGV4T2YoIFwiLlwiICk7XG5cdFx0cmV0dXJuIGRlY2ltYWwgPT09IC0xID8gMCA6IHN0ci5sZW5ndGggLSBkZWNpbWFsIC0gMTtcblx0fSxcblxuXHRfdmFsdWVNaW46IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm9wdGlvbnMubWluO1xuXHR9LFxuXG5cdF92YWx1ZU1heDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWF4O1xuXHR9LFxuXG5cdF9yZWZyZXNoUmFuZ2U6IGZ1bmN0aW9uKCBvcmllbnRhdGlvbiApIHtcblx0XHRpZiAoIG9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIgKSB7XG5cdFx0XHR0aGlzLnJhbmdlLmNzcyggeyBcIndpZHRoXCI6IFwiXCIsIFwibGVmdFwiOiBcIlwiIH0gKTtcblx0XHR9XG5cdFx0aWYgKCBvcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIgKSB7XG5cdFx0XHR0aGlzLnJhbmdlLmNzcyggeyBcImhlaWdodFwiOiBcIlwiLCBcImJvdHRvbVwiOiBcIlwiIH0gKTtcblx0XHR9XG5cdH0sXG5cblx0X3JlZnJlc2hWYWx1ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGxhc3RWYWxQZXJjZW50LCB2YWxQZXJjZW50LCB2YWx1ZSwgdmFsdWVNaW4sIHZhbHVlTWF4LFxuXHRcdFx0b1JhbmdlID0gdGhpcy5vcHRpb25zLnJhbmdlLFxuXHRcdFx0byA9IHRoaXMub3B0aW9ucyxcblx0XHRcdHRoYXQgPSB0aGlzLFxuXHRcdFx0YW5pbWF0ZSA9ICggIXRoaXMuX2FuaW1hdGVPZmYgKSA/IG8uYW5pbWF0ZSA6IGZhbHNlLFxuXHRcdFx0X3NldCA9IHt9O1xuXG5cdFx0aWYgKCB0aGlzLl9oYXNNdWx0aXBsZVZhbHVlcygpICkge1xuXHRcdFx0dGhpcy5oYW5kbGVzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHR2YWxQZXJjZW50ID0gKCB0aGF0LnZhbHVlcyggaSApIC0gdGhhdC5fdmFsdWVNaW4oKSApIC8gKCB0aGF0Ll92YWx1ZU1heCgpIC1cblx0XHRcdFx0XHR0aGF0Ll92YWx1ZU1pbigpICkgKiAxMDA7XG5cdFx0XHRcdF9zZXRbIHRoYXQub3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiID8gXCJsZWZ0XCIgOiBcImJvdHRvbVwiIF0gPSB2YWxQZXJjZW50ICsgXCIlXCI7XG5cdFx0XHRcdCQoIHRoaXMgKS5zdG9wKCAxLCAxIClbIGFuaW1hdGUgPyBcImFuaW1hdGVcIiA6IFwiY3NzXCIgXSggX3NldCwgby5hbmltYXRlICk7XG5cdFx0XHRcdGlmICggdGhhdC5vcHRpb25zLnJhbmdlID09PSB0cnVlICkge1xuXHRcdFx0XHRcdGlmICggdGhhdC5vcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGkgPT09IDAgKSB7XG5cdFx0XHRcdFx0XHRcdHRoYXQucmFuZ2Uuc3RvcCggMSwgMSApWyBhbmltYXRlID8gXCJhbmltYXRlXCIgOiBcImNzc1wiIF0oIHtcblx0XHRcdFx0XHRcdFx0XHRsZWZ0OiB2YWxQZXJjZW50ICsgXCIlXCJcblx0XHRcdFx0XHRcdFx0fSwgby5hbmltYXRlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIGkgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHRcdHRoYXQucmFuZ2VbIGFuaW1hdGUgPyBcImFuaW1hdGVcIiA6IFwiY3NzXCIgXSgge1xuXHRcdFx0XHRcdFx0XHRcdHdpZHRoOiAoIHZhbFBlcmNlbnQgLSBsYXN0VmFsUGVyY2VudCApICsgXCIlXCJcblx0XHRcdFx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdFx0XHRcdHF1ZXVlOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogby5hbmltYXRlXG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKCBpID09PSAwICkge1xuXHRcdFx0XHRcdFx0XHR0aGF0LnJhbmdlLnN0b3AoIDEsIDEgKVsgYW5pbWF0ZSA/IFwiYW5pbWF0ZVwiIDogXCJjc3NcIiBdKCB7XG5cdFx0XHRcdFx0XHRcdFx0Ym90dG9tOiAoIHZhbFBlcmNlbnQgKSArIFwiJVwiXG5cdFx0XHRcdFx0XHRcdH0sIG8uYW5pbWF0ZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKCBpID09PSAxICkge1xuXHRcdFx0XHRcdFx0XHR0aGF0LnJhbmdlWyBhbmltYXRlID8gXCJhbmltYXRlXCIgOiBcImNzc1wiIF0oIHtcblx0XHRcdFx0XHRcdFx0XHRoZWlnaHQ6ICggdmFsUGVyY2VudCAtIGxhc3RWYWxQZXJjZW50ICkgKyBcIiVcIlxuXHRcdFx0XHRcdFx0XHR9LCB7XG5cdFx0XHRcdFx0XHRcdFx0cXVldWU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiBvLmFuaW1hdGVcblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRsYXN0VmFsUGVyY2VudCA9IHZhbFBlcmNlbnQ7XG5cdFx0XHR9ICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhbHVlID0gdGhpcy52YWx1ZSgpO1xuXHRcdFx0dmFsdWVNaW4gPSB0aGlzLl92YWx1ZU1pbigpO1xuXHRcdFx0dmFsdWVNYXggPSB0aGlzLl92YWx1ZU1heCgpO1xuXHRcdFx0dmFsUGVyY2VudCA9ICggdmFsdWVNYXggIT09IHZhbHVlTWluICkgP1xuXHRcdFx0XHRcdCggdmFsdWUgLSB2YWx1ZU1pbiApIC8gKCB2YWx1ZU1heCAtIHZhbHVlTWluICkgKiAxMDAgOlxuXHRcdFx0XHRcdDA7XG5cdFx0XHRfc2V0WyB0aGlzLm9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIiA/IFwibGVmdFwiIDogXCJib3R0b21cIiBdID0gdmFsUGVyY2VudCArIFwiJVwiO1xuXHRcdFx0dGhpcy5oYW5kbGUuc3RvcCggMSwgMSApWyBhbmltYXRlID8gXCJhbmltYXRlXCIgOiBcImNzc1wiIF0oIF9zZXQsIG8uYW5pbWF0ZSApO1xuXG5cdFx0XHRpZiAoIG9SYW5nZSA9PT0gXCJtaW5cIiAmJiB0aGlzLm9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIiApIHtcblx0XHRcdFx0dGhpcy5yYW5nZS5zdG9wKCAxLCAxIClbIGFuaW1hdGUgPyBcImFuaW1hdGVcIiA6IFwiY3NzXCIgXSgge1xuXHRcdFx0XHRcdHdpZHRoOiB2YWxQZXJjZW50ICsgXCIlXCJcblx0XHRcdFx0fSwgby5hbmltYXRlICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG9SYW5nZSA9PT0gXCJtYXhcIiAmJiB0aGlzLm9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIiApIHtcblx0XHRcdFx0dGhpcy5yYW5nZS5zdG9wKCAxLCAxIClbIGFuaW1hdGUgPyBcImFuaW1hdGVcIiA6IFwiY3NzXCIgXSgge1xuXHRcdFx0XHRcdHdpZHRoOiAoIDEwMCAtIHZhbFBlcmNlbnQgKSArIFwiJVwiXG5cdFx0XHRcdH0sIG8uYW5pbWF0ZSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBvUmFuZ2UgPT09IFwibWluXCIgJiYgdGhpcy5vcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiICkge1xuXHRcdFx0XHR0aGlzLnJhbmdlLnN0b3AoIDEsIDEgKVsgYW5pbWF0ZSA/IFwiYW5pbWF0ZVwiIDogXCJjc3NcIiBdKCB7XG5cdFx0XHRcdFx0aGVpZ2h0OiB2YWxQZXJjZW50ICsgXCIlXCJcblx0XHRcdFx0fSwgby5hbmltYXRlICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG9SYW5nZSA9PT0gXCJtYXhcIiAmJiB0aGlzLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIgKSB7XG5cdFx0XHRcdHRoaXMucmFuZ2Uuc3RvcCggMSwgMSApWyBhbmltYXRlID8gXCJhbmltYXRlXCIgOiBcImNzc1wiIF0oIHtcblx0XHRcdFx0XHRoZWlnaHQ6ICggMTAwIC0gdmFsUGVyY2VudCApICsgXCIlXCJcblx0XHRcdFx0fSwgby5hbmltYXRlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdF9oYW5kbGVFdmVudHM6IHtcblx0XHRrZXlkb3duOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgYWxsb3dlZCwgY3VyVmFsLCBuZXdWYWwsIHN0ZXAsXG5cdFx0XHRcdGluZGV4ID0gJCggZXZlbnQudGFyZ2V0ICkuZGF0YSggXCJ1aS1zbGlkZXItaGFuZGxlLWluZGV4XCIgKTtcblxuXHRcdFx0c3dpdGNoICggZXZlbnQua2V5Q29kZSApIHtcblx0XHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuSE9NRTpcblx0XHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuRU5EOlxuXHRcdFx0XHRjYXNlICQudWkua2V5Q29kZS5QQUdFX1VQOlxuXHRcdFx0XHRjYXNlICQudWkua2V5Q29kZS5QQUdFX0RPV046XG5cdFx0XHRcdGNhc2UgJC51aS5rZXlDb2RlLlVQOlxuXHRcdFx0XHRjYXNlICQudWkua2V5Q29kZS5SSUdIVDpcblx0XHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuRE9XTjpcblx0XHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuTEVGVDpcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdGlmICggIXRoaXMuX2tleVNsaWRpbmcgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9rZXlTbGlkaW5nID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRoaXMuX2FkZENsYXNzKCAkKCBldmVudC50YXJnZXQgKSwgbnVsbCwgXCJ1aS1zdGF0ZS1hY3RpdmVcIiApO1xuXHRcdFx0XHRcdFx0YWxsb3dlZCA9IHRoaXMuX3N0YXJ0KCBldmVudCwgaW5kZXggKTtcblx0XHRcdFx0XHRcdGlmICggYWxsb3dlZCA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdHN0ZXAgPSB0aGlzLm9wdGlvbnMuc3RlcDtcblx0XHRcdGlmICggdGhpcy5faGFzTXVsdGlwbGVWYWx1ZXMoKSApIHtcblx0XHRcdFx0Y3VyVmFsID0gbmV3VmFsID0gdGhpcy52YWx1ZXMoIGluZGV4ICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjdXJWYWwgPSBuZXdWYWwgPSB0aGlzLnZhbHVlKCk7XG5cdFx0XHR9XG5cblx0XHRcdHN3aXRjaCAoIGV2ZW50LmtleUNvZGUgKSB7XG5cdFx0XHRcdGNhc2UgJC51aS5rZXlDb2RlLkhPTUU6XG5cdFx0XHRcdFx0bmV3VmFsID0gdGhpcy5fdmFsdWVNaW4oKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuRU5EOlxuXHRcdFx0XHRcdG5ld1ZhbCA9IHRoaXMuX3ZhbHVlTWF4KCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJC51aS5rZXlDb2RlLlBBR0VfVVA6XG5cdFx0XHRcdFx0bmV3VmFsID0gdGhpcy5fdHJpbUFsaWduVmFsdWUoXG5cdFx0XHRcdFx0XHRjdXJWYWwgKyAoICggdGhpcy5fdmFsdWVNYXgoKSAtIHRoaXMuX3ZhbHVlTWluKCkgKSAvIHRoaXMubnVtUGFnZXMgKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJC51aS5rZXlDb2RlLlBBR0VfRE9XTjpcblx0XHRcdFx0XHRuZXdWYWwgPSB0aGlzLl90cmltQWxpZ25WYWx1ZShcblx0XHRcdFx0XHRcdGN1clZhbCAtICggKCB0aGlzLl92YWx1ZU1heCgpIC0gdGhpcy5fdmFsdWVNaW4oKSApIC8gdGhpcy5udW1QYWdlcyApICk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJC51aS5rZXlDb2RlLlVQOlxuXHRcdFx0XHRjYXNlICQudWkua2V5Q29kZS5SSUdIVDpcblx0XHRcdFx0XHRpZiAoIGN1clZhbCA9PT0gdGhpcy5fdmFsdWVNYXgoKSApIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bmV3VmFsID0gdGhpcy5fdHJpbUFsaWduVmFsdWUoIGN1clZhbCArIHN0ZXAgKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuRE9XTjpcblx0XHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuTEVGVDpcblx0XHRcdFx0XHRpZiAoIGN1clZhbCA9PT0gdGhpcy5fdmFsdWVNaW4oKSApIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bmV3VmFsID0gdGhpcy5fdHJpbUFsaWduVmFsdWUoIGN1clZhbCAtIHN0ZXAgKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fc2xpZGUoIGV2ZW50LCBpbmRleCwgbmV3VmFsICk7XG5cdFx0fSxcblx0XHRrZXl1cDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIGluZGV4ID0gJCggZXZlbnQudGFyZ2V0ICkuZGF0YSggXCJ1aS1zbGlkZXItaGFuZGxlLWluZGV4XCIgKTtcblxuXHRcdFx0aWYgKCB0aGlzLl9rZXlTbGlkaW5nICkge1xuXHRcdFx0XHR0aGlzLl9rZXlTbGlkaW5nID0gZmFsc2U7XG5cdFx0XHRcdHRoaXMuX3N0b3AoIGV2ZW50LCBpbmRleCApO1xuXHRcdFx0XHR0aGlzLl9jaGFuZ2UoIGV2ZW50LCBpbmRleCApO1xuXHRcdFx0XHR0aGlzLl9yZW1vdmVDbGFzcyggJCggZXZlbnQudGFyZ2V0ICksIG51bGwsIFwidWktc3RhdGUtYWN0aXZlXCIgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBTb3J0YWJsZSAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogU29ydGFibGVcbi8vPj5ncm91cDogSW50ZXJhY3Rpb25zXG4vLz4+ZGVzY3JpcHRpb246IEVuYWJsZXMgaXRlbXMgaW4gYSBsaXN0IHRvIGJlIHNvcnRlZCB1c2luZyB0aGUgbW91c2UuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vc29ydGFibGUvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vc29ydGFibGUvXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2Uvc29ydGFibGUuY3NzXG5cblxuXG52YXIgd2lkZ2V0c1NvcnRhYmxlID0gJC53aWRnZXQoIFwidWkuc29ydGFibGVcIiwgJC51aS5tb3VzZSwge1xuXHR2ZXJzaW9uOiBcIjEuMTIuMVwiLFxuXHR3aWRnZXRFdmVudFByZWZpeDogXCJzb3J0XCIsXG5cdHJlYWR5OiBmYWxzZSxcblx0b3B0aW9uczoge1xuXHRcdGFwcGVuZFRvOiBcInBhcmVudFwiLFxuXHRcdGF4aXM6IGZhbHNlLFxuXHRcdGNvbm5lY3RXaXRoOiBmYWxzZSxcblx0XHRjb250YWlubWVudDogZmFsc2UsXG5cdFx0Y3Vyc29yOiBcImF1dG9cIixcblx0XHRjdXJzb3JBdDogZmFsc2UsXG5cdFx0ZHJvcE9uRW1wdHk6IHRydWUsXG5cdFx0Zm9yY2VQbGFjZWhvbGRlclNpemU6IGZhbHNlLFxuXHRcdGZvcmNlSGVscGVyU2l6ZTogZmFsc2UsXG5cdFx0Z3JpZDogZmFsc2UsXG5cdFx0aGFuZGxlOiBmYWxzZSxcblx0XHRoZWxwZXI6IFwib3JpZ2luYWxcIixcblx0XHRpdGVtczogXCI+ICpcIixcblx0XHRvcGFjaXR5OiBmYWxzZSxcblx0XHRwbGFjZWhvbGRlcjogZmFsc2UsXG5cdFx0cmV2ZXJ0OiBmYWxzZSxcblx0XHRzY3JvbGw6IHRydWUsXG5cdFx0c2Nyb2xsU2Vuc2l0aXZpdHk6IDIwLFxuXHRcdHNjcm9sbFNwZWVkOiAyMCxcblx0XHRzY29wZTogXCJkZWZhdWx0XCIsXG5cdFx0dG9sZXJhbmNlOiBcImludGVyc2VjdFwiLFxuXHRcdHpJbmRleDogMTAwMCxcblxuXHRcdC8vIENhbGxiYWNrc1xuXHRcdGFjdGl2YXRlOiBudWxsLFxuXHRcdGJlZm9yZVN0b3A6IG51bGwsXG5cdFx0Y2hhbmdlOiBudWxsLFxuXHRcdGRlYWN0aXZhdGU6IG51bGwsXG5cdFx0b3V0OiBudWxsLFxuXHRcdG92ZXI6IG51bGwsXG5cdFx0cmVjZWl2ZTogbnVsbCxcblx0XHRyZW1vdmU6IG51bGwsXG5cdFx0c29ydDogbnVsbCxcblx0XHRzdGFydDogbnVsbCxcblx0XHRzdG9wOiBudWxsLFxuXHRcdHVwZGF0ZTogbnVsbFxuXHR9LFxuXG5cdF9pc092ZXJBeGlzOiBmdW5jdGlvbiggeCwgcmVmZXJlbmNlLCBzaXplICkge1xuXHRcdHJldHVybiAoIHggPj0gcmVmZXJlbmNlICkgJiYgKCB4IDwgKCByZWZlcmVuY2UgKyBzaXplICkgKTtcblx0fSxcblxuXHRfaXNGbG9hdGluZzogZnVuY3Rpb24oIGl0ZW0gKSB7XG5cdFx0cmV0dXJuICggL2xlZnR8cmlnaHQvICkudGVzdCggaXRlbS5jc3MoIFwiZmxvYXRcIiApICkgfHxcblx0XHRcdCggL2lubGluZXx0YWJsZS1jZWxsLyApLnRlc3QoIGl0ZW0uY3NzKCBcImRpc3BsYXlcIiApICk7XG5cdH0sXG5cblx0X2NyZWF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5jb250YWluZXJDYWNoZSA9IHt9O1xuXHRcdHRoaXMuX2FkZENsYXNzKCBcInVpLXNvcnRhYmxlXCIgKTtcblxuXHRcdC8vR2V0IHRoZSBpdGVtc1xuXHRcdHRoaXMucmVmcmVzaCgpO1xuXG5cdFx0Ly9MZXQncyBkZXRlcm1pbmUgdGhlIHBhcmVudCdzIG9mZnNldFxuXHRcdHRoaXMub2Zmc2V0ID0gdGhpcy5lbGVtZW50Lm9mZnNldCgpO1xuXG5cdFx0Ly9Jbml0aWFsaXplIG1vdXNlIGV2ZW50cyBmb3IgaW50ZXJhY3Rpb25cblx0XHR0aGlzLl9tb3VzZUluaXQoKTtcblxuXHRcdHRoaXMuX3NldEhhbmRsZUNsYXNzTmFtZSgpO1xuXG5cdFx0Ly9XZSdyZSByZWFkeSB0byBnb1xuXHRcdHRoaXMucmVhZHkgPSB0cnVlO1xuXG5cdH0sXG5cblx0X3NldE9wdGlvbjogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dGhpcy5fc3VwZXIoIGtleSwgdmFsdWUgKTtcblxuXHRcdGlmICgga2V5ID09PSBcImhhbmRsZVwiICkge1xuXHRcdFx0dGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCk7XG5cdFx0fVxuXHR9LFxuXG5cdF9zZXRIYW5kbGVDbGFzc05hbWU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblx0XHR0aGlzLl9yZW1vdmVDbGFzcyggdGhpcy5lbGVtZW50LmZpbmQoIFwiLnVpLXNvcnRhYmxlLWhhbmRsZVwiICksIFwidWktc29ydGFibGUtaGFuZGxlXCIgKTtcblx0XHQkLmVhY2goIHRoaXMuaXRlbXMsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhhdC5fYWRkQ2xhc3MoXG5cdFx0XHRcdHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oYW5kbGUgP1xuXHRcdFx0XHRcdHRoaXMuaXRlbS5maW5kKCB0aGlzLmluc3RhbmNlLm9wdGlvbnMuaGFuZGxlICkgOlxuXHRcdFx0XHRcdHRoaXMuaXRlbSxcblx0XHRcdFx0XCJ1aS1zb3J0YWJsZS1oYW5kbGVcIlxuXHRcdFx0KTtcblx0XHR9ICk7XG5cdH0sXG5cblx0X2Rlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuX21vdXNlRGVzdHJveSgpO1xuXG5cdFx0Zm9yICggdmFyIGkgPSB0aGlzLml0ZW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tICkge1xuXHRcdFx0dGhpcy5pdGVtc1sgaSBdLml0ZW0ucmVtb3ZlRGF0YSggdGhpcy53aWRnZXROYW1lICsgXCItaXRlbVwiICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0X21vdXNlQ2FwdHVyZTogZnVuY3Rpb24oIGV2ZW50LCBvdmVycmlkZUhhbmRsZSApIHtcblx0XHR2YXIgY3VycmVudEl0ZW0gPSBudWxsLFxuXHRcdFx0dmFsaWRIYW5kbGUgPSBmYWxzZSxcblx0XHRcdHRoYXQgPSB0aGlzO1xuXG5cdFx0aWYgKCB0aGlzLnJldmVydGluZyApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kaXNhYmxlZCB8fCB0aGlzLm9wdGlvbnMudHlwZSA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvL1dlIGhhdmUgdG8gcmVmcmVzaCB0aGUgaXRlbXMgZGF0YSBvbmNlIGZpcnN0XG5cdFx0dGhpcy5fcmVmcmVzaEl0ZW1zKCBldmVudCApO1xuXG5cdFx0Ly9GaW5kIG91dCBpZiB0aGUgY2xpY2tlZCBub2RlIChvciBvbmUgb2YgaXRzIHBhcmVudHMpIGlzIGEgYWN0dWFsIGl0ZW0gaW4gdGhpcy5pdGVtc1xuXHRcdCQoIGV2ZW50LnRhcmdldCApLnBhcmVudHMoKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggJC5kYXRhKCB0aGlzLCB0aGF0LndpZGdldE5hbWUgKyBcIi1pdGVtXCIgKSA9PT0gdGhhdCApIHtcblx0XHRcdFx0Y3VycmVudEl0ZW0gPSAkKCB0aGlzICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0aWYgKCAkLmRhdGEoIGV2ZW50LnRhcmdldCwgdGhhdC53aWRnZXROYW1lICsgXCItaXRlbVwiICkgPT09IHRoYXQgKSB7XG5cdFx0XHRjdXJyZW50SXRlbSA9ICQoIGV2ZW50LnRhcmdldCApO1xuXHRcdH1cblxuXHRcdGlmICggIWN1cnJlbnRJdGVtICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5oYW5kbGUgJiYgIW92ZXJyaWRlSGFuZGxlICkge1xuXHRcdFx0JCggdGhpcy5vcHRpb25zLmhhbmRsZSwgY3VycmVudEl0ZW0gKS5maW5kKCBcIipcIiApLmFkZEJhY2soKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCB0aGlzID09PSBldmVudC50YXJnZXQgKSB7XG5cdFx0XHRcdFx0dmFsaWRIYW5kbGUgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0XHRpZiAoICF2YWxpZEhhbmRsZSApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuY3VycmVudEl0ZW0gPSBjdXJyZW50SXRlbTtcblx0XHR0aGlzLl9yZW1vdmVDdXJyZW50c0Zyb21JdGVtcygpO1xuXHRcdHJldHVybiB0cnVlO1xuXG5cdH0sXG5cblx0X21vdXNlU3RhcnQ6IGZ1bmN0aW9uKCBldmVudCwgb3ZlcnJpZGVIYW5kbGUsIG5vQWN0aXZhdGlvbiApIHtcblxuXHRcdHZhciBpLCBib2R5LFxuXHRcdFx0byA9IHRoaXMub3B0aW9ucztcblxuXHRcdHRoaXMuY3VycmVudENvbnRhaW5lciA9IHRoaXM7XG5cblx0XHQvL1dlIG9ubHkgbmVlZCB0byBjYWxsIHJlZnJlc2hQb3NpdGlvbnMsIGJlY2F1c2UgdGhlIHJlZnJlc2hJdGVtcyBjYWxsIGhhcyBiZWVuIG1vdmVkIHRvXG5cdFx0Ly8gbW91c2VDYXB0dXJlXG5cdFx0dGhpcy5yZWZyZXNoUG9zaXRpb25zKCk7XG5cblx0XHQvL0NyZWF0ZSBhbmQgYXBwZW5kIHRoZSB2aXNpYmxlIGhlbHBlclxuXHRcdHRoaXMuaGVscGVyID0gdGhpcy5fY3JlYXRlSGVscGVyKCBldmVudCApO1xuXG5cdFx0Ly9DYWNoZSB0aGUgaGVscGVyIHNpemVcblx0XHR0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCk7XG5cblx0XHQvKlxuXHRcdCAqIC0gUG9zaXRpb24gZ2VuZXJhdGlvbiAtXG5cdFx0ICogVGhpcyBibG9jayBnZW5lcmF0ZXMgZXZlcnl0aGluZyBwb3NpdGlvbiByZWxhdGVkIC0gaXQncyB0aGUgY29yZSBvZiBkcmFnZ2FibGVzLlxuXHRcdCAqL1xuXG5cdFx0Ly9DYWNoZSB0aGUgbWFyZ2lucyBvZiB0aGUgb3JpZ2luYWwgZWxlbWVudFxuXHRcdHRoaXMuX2NhY2hlTWFyZ2lucygpO1xuXG5cdFx0Ly9HZXQgdGhlIG5leHQgc2Nyb2xsaW5nIHBhcmVudFxuXHRcdHRoaXMuc2Nyb2xsUGFyZW50ID0gdGhpcy5oZWxwZXIuc2Nyb2xsUGFyZW50KCk7XG5cblx0XHQvL1RoZSBlbGVtZW50J3MgYWJzb2x1dGUgcG9zaXRpb24gb24gdGhlIHBhZ2UgbWludXMgbWFyZ2luc1xuXHRcdHRoaXMub2Zmc2V0ID0gdGhpcy5jdXJyZW50SXRlbS5vZmZzZXQoKTtcblx0XHR0aGlzLm9mZnNldCA9IHtcblx0XHRcdHRvcDogdGhpcy5vZmZzZXQudG9wIC0gdGhpcy5tYXJnaW5zLnRvcCxcblx0XHRcdGxlZnQ6IHRoaXMub2Zmc2V0LmxlZnQgLSB0aGlzLm1hcmdpbnMubGVmdFxuXHRcdH07XG5cblx0XHQkLmV4dGVuZCggdGhpcy5vZmZzZXQsIHtcblx0XHRcdGNsaWNrOiB7IC8vV2hlcmUgdGhlIGNsaWNrIGhhcHBlbmVkLCByZWxhdGl2ZSB0byB0aGUgZWxlbWVudFxuXHRcdFx0XHRsZWZ0OiBldmVudC5wYWdlWCAtIHRoaXMub2Zmc2V0LmxlZnQsXG5cdFx0XHRcdHRvcDogZXZlbnQucGFnZVkgLSB0aGlzLm9mZnNldC50b3Bcblx0XHRcdH0sXG5cdFx0XHRwYXJlbnQ6IHRoaXMuX2dldFBhcmVudE9mZnNldCgpLFxuXG5cdFx0XHQvLyBUaGlzIGlzIGEgcmVsYXRpdmUgdG8gYWJzb2x1dGUgcG9zaXRpb24gbWludXMgdGhlIGFjdHVhbCBwb3NpdGlvbiBjYWxjdWxhdGlvbiAtXG5cdFx0XHQvLyBvbmx5IHVzZWQgZm9yIHJlbGF0aXZlIHBvc2l0aW9uZWQgaGVscGVyXG5cdFx0XHRyZWxhdGl2ZTogdGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKVxuXHRcdH0gKTtcblxuXHRcdC8vIE9ubHkgYWZ0ZXIgd2UgZ290IHRoZSBvZmZzZXQsIHdlIGNhbiBjaGFuZ2UgdGhlIGhlbHBlcidzIHBvc2l0aW9uIHRvIGFic29sdXRlXG5cdFx0Ly8gVE9ETzogU3RpbGwgbmVlZCB0byBmaWd1cmUgb3V0IGEgd2F5IHRvIG1ha2UgcmVsYXRpdmUgc29ydGluZyBwb3NzaWJsZVxuXHRcdHRoaXMuaGVscGVyLmNzcyggXCJwb3NpdGlvblwiLCBcImFic29sdXRlXCIgKTtcblx0XHR0aGlzLmNzc1Bvc2l0aW9uID0gdGhpcy5oZWxwZXIuY3NzKCBcInBvc2l0aW9uXCIgKTtcblxuXHRcdC8vR2VuZXJhdGUgdGhlIG9yaWdpbmFsIHBvc2l0aW9uXG5cdFx0dGhpcy5vcmlnaW5hbFBvc2l0aW9uID0gdGhpcy5fZ2VuZXJhdGVQb3NpdGlvbiggZXZlbnQgKTtcblx0XHR0aGlzLm9yaWdpbmFsUGFnZVggPSBldmVudC5wYWdlWDtcblx0XHR0aGlzLm9yaWdpbmFsUGFnZVkgPSBldmVudC5wYWdlWTtcblxuXHRcdC8vQWRqdXN0IHRoZSBtb3VzZSBvZmZzZXQgcmVsYXRpdmUgdG8gdGhlIGhlbHBlciBpZiBcImN1cnNvckF0XCIgaXMgc3VwcGxpZWRcblx0XHQoIG8uY3Vyc29yQXQgJiYgdGhpcy5fYWRqdXN0T2Zmc2V0RnJvbUhlbHBlciggby5jdXJzb3JBdCApICk7XG5cblx0XHQvL0NhY2hlIHRoZSBmb3JtZXIgRE9NIHBvc2l0aW9uXG5cdFx0dGhpcy5kb21Qb3NpdGlvbiA9IHtcblx0XHRcdHByZXY6IHRoaXMuY3VycmVudEl0ZW0ucHJldigpWyAwIF0sXG5cdFx0XHRwYXJlbnQ6IHRoaXMuY3VycmVudEl0ZW0ucGFyZW50KClbIDAgXVxuXHRcdH07XG5cblx0XHQvLyBJZiB0aGUgaGVscGVyIGlzIG5vdCB0aGUgb3JpZ2luYWwsIGhpZGUgdGhlIG9yaWdpbmFsIHNvIGl0J3Mgbm90IHBsYXlpbmcgYW55IHJvbGUgZHVyaW5nXG5cdFx0Ly8gdGhlIGRyYWcsIHdvbid0IGNhdXNlIGFueXRoaW5nIGJhZCB0aGlzIHdheVxuXHRcdGlmICggdGhpcy5oZWxwZXJbIDAgXSAhPT0gdGhpcy5jdXJyZW50SXRlbVsgMCBdICkge1xuXHRcdFx0dGhpcy5jdXJyZW50SXRlbS5oaWRlKCk7XG5cdFx0fVxuXG5cdFx0Ly9DcmVhdGUgdGhlIHBsYWNlaG9sZGVyXG5cdFx0dGhpcy5fY3JlYXRlUGxhY2Vob2xkZXIoKTtcblxuXHRcdC8vU2V0IGEgY29udGFpbm1lbnQgaWYgZ2l2ZW4gaW4gdGhlIG9wdGlvbnNcblx0XHRpZiAoIG8uY29udGFpbm1lbnQgKSB7XG5cdFx0XHR0aGlzLl9zZXRDb250YWlubWVudCgpO1xuXHRcdH1cblxuXHRcdGlmICggby5jdXJzb3IgJiYgby5jdXJzb3IgIT09IFwiYXV0b1wiICkgeyAvLyBjdXJzb3Igb3B0aW9uXG5cdFx0XHRib2R5ID0gdGhpcy5kb2N1bWVudC5maW5kKCBcImJvZHlcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRVxuXHRcdFx0dGhpcy5zdG9yZWRDdXJzb3IgPSBib2R5LmNzcyggXCJjdXJzb3JcIiApO1xuXHRcdFx0Ym9keS5jc3MoIFwiY3Vyc29yXCIsIG8uY3Vyc29yICk7XG5cblx0XHRcdHRoaXMuc3RvcmVkU3R5bGVzaGVldCA9XG5cdFx0XHRcdCQoIFwiPHN0eWxlPip7IGN1cnNvcjogXCIgKyBvLmN1cnNvciArIFwiICFpbXBvcnRhbnQ7IH08L3N0eWxlPlwiICkuYXBwZW5kVG8oIGJvZHkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG8ub3BhY2l0eSApIHsgLy8gb3BhY2l0eSBvcHRpb25cblx0XHRcdGlmICggdGhpcy5oZWxwZXIuY3NzKCBcIm9wYWNpdHlcIiApICkge1xuXHRcdFx0XHR0aGlzLl9zdG9yZWRPcGFjaXR5ID0gdGhpcy5oZWxwZXIuY3NzKCBcIm9wYWNpdHlcIiApO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5oZWxwZXIuY3NzKCBcIm9wYWNpdHlcIiwgby5vcGFjaXR5ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvLnpJbmRleCApIHsgLy8gekluZGV4IG9wdGlvblxuXHRcdFx0aWYgKCB0aGlzLmhlbHBlci5jc3MoIFwiekluZGV4XCIgKSApIHtcblx0XHRcdFx0dGhpcy5fc3RvcmVkWkluZGV4ID0gdGhpcy5oZWxwZXIuY3NzKCBcInpJbmRleFwiICk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmhlbHBlci5jc3MoIFwiekluZGV4XCIsIG8uekluZGV4ICk7XG5cdFx0fVxuXG5cdFx0Ly9QcmVwYXJlIHNjcm9sbGluZ1xuXHRcdGlmICggdGhpcy5zY3JvbGxQYXJlbnRbIDAgXSAhPT0gdGhpcy5kb2N1bWVudFsgMCBdICYmXG5cdFx0XHRcdHRoaXMuc2Nyb2xsUGFyZW50WyAwIF0udGFnTmFtZSAhPT0gXCJIVE1MXCIgKSB7XG5cdFx0XHR0aGlzLm92ZXJmbG93T2Zmc2V0ID0gdGhpcy5zY3JvbGxQYXJlbnQub2Zmc2V0KCk7XG5cdFx0fVxuXG5cdFx0Ly9DYWxsIGNhbGxiYWNrc1xuXHRcdHRoaXMuX3RyaWdnZXIoIFwic3RhcnRcIiwgZXZlbnQsIHRoaXMuX3VpSGFzaCgpICk7XG5cblx0XHQvL1JlY2FjaGUgdGhlIGhlbHBlciBzaXplXG5cdFx0aWYgKCAhdGhpcy5fcHJlc2VydmVIZWxwZXJQcm9wb3J0aW9ucyApIHtcblx0XHRcdHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKTtcblx0XHR9XG5cblx0XHQvL1Bvc3QgXCJhY3RpdmF0ZVwiIGV2ZW50cyB0byBwb3NzaWJsZSBjb250YWluZXJzXG5cdFx0aWYgKCAhbm9BY3RpdmF0aW9uICkge1xuXHRcdFx0Zm9yICggaSA9IHRoaXMuY29udGFpbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSApIHtcblx0XHRcdFx0dGhpcy5jb250YWluZXJzWyBpIF0uX3RyaWdnZXIoIFwiYWN0aXZhdGVcIiwgZXZlbnQsIHRoaXMuX3VpSGFzaCggdGhpcyApICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly9QcmVwYXJlIHBvc3NpYmxlIGRyb3BwYWJsZXNcblx0XHRpZiAoICQudWkuZGRtYW5hZ2VyICkge1xuXHRcdFx0JC51aS5kZG1hbmFnZXIuY3VycmVudCA9IHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKCAkLnVpLmRkbWFuYWdlciAmJiAhby5kcm9wQmVoYXZpb3VyICkge1xuXHRcdFx0JC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMoIHRoaXMsIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5kcmFnZ2luZyA9IHRydWU7XG5cblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5oZWxwZXIsIFwidWktc29ydGFibGUtaGVscGVyXCIgKTtcblxuXHRcdC8vIEV4ZWN1dGUgdGhlIGRyYWcgb25jZSAtIHRoaXMgY2F1c2VzIHRoZSBoZWxwZXIgbm90IHRvIGJlIHZpc2libGViZWZvcmUgZ2V0dGluZyBpdHNcblx0XHQvLyBjb3JyZWN0IHBvc2l0aW9uXG5cdFx0dGhpcy5fbW91c2VEcmFnKCBldmVudCApO1xuXHRcdHJldHVybiB0cnVlO1xuXG5cdH0sXG5cblx0X21vdXNlRHJhZzogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBpLCBpdGVtLCBpdGVtRWxlbWVudCwgaW50ZXJzZWN0aW9uLFxuXHRcdFx0byA9IHRoaXMub3B0aW9ucyxcblx0XHRcdHNjcm9sbGVkID0gZmFsc2U7XG5cblx0XHQvL0NvbXB1dGUgdGhlIGhlbHBlcnMgcG9zaXRpb25cblx0XHR0aGlzLnBvc2l0aW9uID0gdGhpcy5fZ2VuZXJhdGVQb3NpdGlvbiggZXZlbnQgKTtcblx0XHR0aGlzLnBvc2l0aW9uQWJzID0gdGhpcy5fY29udmVydFBvc2l0aW9uVG8oIFwiYWJzb2x1dGVcIiApO1xuXG5cdFx0aWYgKCAhdGhpcy5sYXN0UG9zaXRpb25BYnMgKSB7XG5cdFx0XHR0aGlzLmxhc3RQb3NpdGlvbkFicyA9IHRoaXMucG9zaXRpb25BYnM7XG5cdFx0fVxuXG5cdFx0Ly9EbyBzY3JvbGxpbmdcblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zY3JvbGwgKSB7XG5cdFx0XHRpZiAoIHRoaXMuc2Nyb2xsUGFyZW50WyAwIF0gIT09IHRoaXMuZG9jdW1lbnRbIDAgXSAmJlxuXHRcdFx0XHRcdHRoaXMuc2Nyb2xsUGFyZW50WyAwIF0udGFnTmFtZSAhPT0gXCJIVE1MXCIgKSB7XG5cblx0XHRcdFx0aWYgKCAoIHRoaXMub3ZlcmZsb3dPZmZzZXQudG9wICsgdGhpcy5zY3JvbGxQYXJlbnRbIDAgXS5vZmZzZXRIZWlnaHQgKSAtXG5cdFx0XHRcdFx0XHRldmVudC5wYWdlWSA8IG8uc2Nyb2xsU2Vuc2l0aXZpdHkgKSB7XG5cdFx0XHRcdFx0dGhpcy5zY3JvbGxQYXJlbnRbIDAgXS5zY3JvbGxUb3AgPVxuXHRcdFx0XHRcdFx0c2Nyb2xsZWQgPSB0aGlzLnNjcm9sbFBhcmVudFsgMCBdLnNjcm9sbFRvcCArIG8uc2Nyb2xsU3BlZWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIGV2ZW50LnBhZ2VZIC0gdGhpcy5vdmVyZmxvd09mZnNldC50b3AgPCBvLnNjcm9sbFNlbnNpdGl2aXR5ICkge1xuXHRcdFx0XHRcdHRoaXMuc2Nyb2xsUGFyZW50WyAwIF0uc2Nyb2xsVG9wID1cblx0XHRcdFx0XHRcdHNjcm9sbGVkID0gdGhpcy5zY3JvbGxQYXJlbnRbIDAgXS5zY3JvbGxUb3AgLSBvLnNjcm9sbFNwZWVkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCAoIHRoaXMub3ZlcmZsb3dPZmZzZXQubGVmdCArIHRoaXMuc2Nyb2xsUGFyZW50WyAwIF0ub2Zmc2V0V2lkdGggKSAtXG5cdFx0XHRcdFx0XHRldmVudC5wYWdlWCA8IG8uc2Nyb2xsU2Vuc2l0aXZpdHkgKSB7XG5cdFx0XHRcdFx0dGhpcy5zY3JvbGxQYXJlbnRbIDAgXS5zY3JvbGxMZWZ0ID0gc2Nyb2xsZWQgPVxuXHRcdFx0XHRcdFx0dGhpcy5zY3JvbGxQYXJlbnRbIDAgXS5zY3JvbGxMZWZ0ICsgby5zY3JvbGxTcGVlZDtcblx0XHRcdFx0fSBlbHNlIGlmICggZXZlbnQucGFnZVggLSB0aGlzLm92ZXJmbG93T2Zmc2V0LmxlZnQgPCBvLnNjcm9sbFNlbnNpdGl2aXR5ICkge1xuXHRcdFx0XHRcdHRoaXMuc2Nyb2xsUGFyZW50WyAwIF0uc2Nyb2xsTGVmdCA9IHNjcm9sbGVkID1cblx0XHRcdFx0XHRcdHRoaXMuc2Nyb2xsUGFyZW50WyAwIF0uc2Nyb2xsTGVmdCAtIG8uc2Nyb2xsU3BlZWQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRpZiAoIGV2ZW50LnBhZ2VZIC0gdGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoKSA8IG8uc2Nyb2xsU2Vuc2l0aXZpdHkgKSB7XG5cdFx0XHRcdFx0c2Nyb2xsZWQgPSB0aGlzLmRvY3VtZW50LnNjcm9sbFRvcCggdGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoKSAtIG8uc2Nyb2xsU3BlZWQgKTtcblx0XHRcdFx0fSBlbHNlIGlmICggdGhpcy53aW5kb3cuaGVpZ2h0KCkgLSAoIGV2ZW50LnBhZ2VZIC0gdGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoKSApIDxcblx0XHRcdFx0XHRcdG8uc2Nyb2xsU2Vuc2l0aXZpdHkgKSB7XG5cdFx0XHRcdFx0c2Nyb2xsZWQgPSB0aGlzLmRvY3VtZW50LnNjcm9sbFRvcCggdGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoKSArIG8uc2Nyb2xsU3BlZWQgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggZXZlbnQucGFnZVggLSB0aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoKSA8IG8uc2Nyb2xsU2Vuc2l0aXZpdHkgKSB7XG5cdFx0XHRcdFx0c2Nyb2xsZWQgPSB0aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoXG5cdFx0XHRcdFx0XHR0aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoKSAtIG8uc2Nyb2xsU3BlZWRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCB0aGlzLndpbmRvdy53aWR0aCgpIC0gKCBldmVudC5wYWdlWCAtIHRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpICkgPFxuXHRcdFx0XHRcdFx0by5zY3JvbGxTZW5zaXRpdml0eSApIHtcblx0XHRcdFx0XHRzY3JvbGxlZCA9IHRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdChcblx0XHRcdFx0XHRcdHRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpICsgby5zY3JvbGxTcGVlZFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHNjcm9sbGVkICE9PSBmYWxzZSAmJiAkLnVpLmRkbWFuYWdlciAmJiAhby5kcm9wQmVoYXZpb3VyICkge1xuXHRcdFx0XHQkLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyggdGhpcywgZXZlbnQgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvL1JlZ2VuZXJhdGUgdGhlIGFic29sdXRlIHBvc2l0aW9uIHVzZWQgZm9yIHBvc2l0aW9uIGNoZWNrc1xuXHRcdHRoaXMucG9zaXRpb25BYnMgPSB0aGlzLl9jb252ZXJ0UG9zaXRpb25UbyggXCJhYnNvbHV0ZVwiICk7XG5cblx0XHQvL1NldCB0aGUgaGVscGVyIHBvc2l0aW9uXG5cdFx0aWYgKCAhdGhpcy5vcHRpb25zLmF4aXMgfHwgdGhpcy5vcHRpb25zLmF4aXMgIT09IFwieVwiICkge1xuXHRcdFx0dGhpcy5oZWxwZXJbIDAgXS5zdHlsZS5sZWZ0ID0gdGhpcy5wb3NpdGlvbi5sZWZ0ICsgXCJweFwiO1xuXHRcdH1cblx0XHRpZiAoICF0aGlzLm9wdGlvbnMuYXhpcyB8fCB0aGlzLm9wdGlvbnMuYXhpcyAhPT0gXCJ4XCIgKSB7XG5cdFx0XHR0aGlzLmhlbHBlclsgMCBdLnN0eWxlLnRvcCA9IHRoaXMucG9zaXRpb24udG9wICsgXCJweFwiO1xuXHRcdH1cblxuXHRcdC8vUmVhcnJhbmdlXG5cdFx0Zm9yICggaSA9IHRoaXMuaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0gKSB7XG5cblx0XHRcdC8vQ2FjaGUgdmFyaWFibGVzIGFuZCBpbnRlcnNlY3Rpb24sIGNvbnRpbnVlIGlmIG5vIGludGVyc2VjdGlvblxuXHRcdFx0aXRlbSA9IHRoaXMuaXRlbXNbIGkgXTtcblx0XHRcdGl0ZW1FbGVtZW50ID0gaXRlbS5pdGVtWyAwIF07XG5cdFx0XHRpbnRlcnNlY3Rpb24gPSB0aGlzLl9pbnRlcnNlY3RzV2l0aFBvaW50ZXIoIGl0ZW0gKTtcblx0XHRcdGlmICggIWludGVyc2VjdGlvbiApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgcHV0IHRoZSBwbGFjZWhvbGRlciBpbnNpZGUgdGhlIGN1cnJlbnQgQ29udGFpbmVyLCBza2lwIGFsbFxuXHRcdFx0Ly8gaXRlbXMgZnJvbSBvdGhlciBjb250YWluZXJzLiBUaGlzIHdvcmtzIGJlY2F1c2Ugd2hlbiBtb3Zpbmdcblx0XHRcdC8vIGFuIGl0ZW0gZnJvbSBvbmUgY29udGFpbmVyIHRvIGFub3RoZXIgdGhlXG5cdFx0XHQvLyBjdXJyZW50Q29udGFpbmVyIGlzIHN3aXRjaGVkIGJlZm9yZSB0aGUgcGxhY2Vob2xkZXIgaXMgbW92ZWQuXG5cdFx0XHQvL1xuXHRcdFx0Ly8gV2l0aG91dCB0aGlzLCBtb3ZpbmcgaXRlbXMgaW4gXCJzdWItc29ydGFibGVzXCIgY2FuIGNhdXNlXG5cdFx0XHQvLyB0aGUgcGxhY2Vob2xkZXIgdG8gaml0dGVyIGJldHdlZW4gdGhlIG91dGVyIGFuZCBpbm5lciBjb250YWluZXIuXG5cdFx0XHRpZiAoIGl0ZW0uaW5zdGFuY2UgIT09IHRoaXMuY3VycmVudENvbnRhaW5lciApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENhbm5vdCBpbnRlcnNlY3Qgd2l0aCBpdHNlbGZcblx0XHRcdC8vIG5vIHVzZWxlc3MgYWN0aW9ucyB0aGF0IGhhdmUgYmVlbiBkb25lIGJlZm9yZVxuXHRcdFx0Ly8gbm8gYWN0aW9uIGlmIHRoZSBpdGVtIG1vdmVkIGlzIHRoZSBwYXJlbnQgb2YgdGhlIGl0ZW0gY2hlY2tlZFxuXHRcdFx0aWYgKCBpdGVtRWxlbWVudCAhPT0gdGhpcy5jdXJyZW50SXRlbVsgMCBdICYmXG5cdFx0XHRcdHRoaXMucGxhY2Vob2xkZXJbIGludGVyc2VjdGlvbiA9PT0gMSA/IFwibmV4dFwiIDogXCJwcmV2XCIgXSgpWyAwIF0gIT09IGl0ZW1FbGVtZW50ICYmXG5cdFx0XHRcdCEkLmNvbnRhaW5zKCB0aGlzLnBsYWNlaG9sZGVyWyAwIF0sIGl0ZW1FbGVtZW50ICkgJiZcblx0XHRcdFx0KCB0aGlzLm9wdGlvbnMudHlwZSA9PT0gXCJzZW1pLWR5bmFtaWNcIiA/XG5cdFx0XHRcdFx0ISQuY29udGFpbnMoIHRoaXMuZWxlbWVudFsgMCBdLCBpdGVtRWxlbWVudCApIDpcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXG5cdFx0XHRcdHRoaXMuZGlyZWN0aW9uID0gaW50ZXJzZWN0aW9uID09PSAxID8gXCJkb3duXCIgOiBcInVwXCI7XG5cblx0XHRcdFx0aWYgKCB0aGlzLm9wdGlvbnMudG9sZXJhbmNlID09PSBcInBvaW50ZXJcIiB8fCB0aGlzLl9pbnRlcnNlY3RzV2l0aFNpZGVzKCBpdGVtICkgKSB7XG5cdFx0XHRcdFx0dGhpcy5fcmVhcnJhbmdlKCBldmVudCwgaXRlbSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5fdHJpZ2dlciggXCJjaGFuZ2VcIiwgZXZlbnQsIHRoaXMuX3VpSGFzaCgpICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vUG9zdCBldmVudHMgdG8gY29udGFpbmVyc1xuXHRcdHRoaXMuX2NvbnRhY3RDb250YWluZXJzKCBldmVudCApO1xuXG5cdFx0Ly9JbnRlcmNvbm5lY3Qgd2l0aCBkcm9wcGFibGVzXG5cdFx0aWYgKCAkLnVpLmRkbWFuYWdlciApIHtcblx0XHRcdCQudWkuZGRtYW5hZ2VyLmRyYWcoIHRoaXMsIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0Ly9DYWxsIGNhbGxiYWNrc1xuXHRcdHRoaXMuX3RyaWdnZXIoIFwic29ydFwiLCBldmVudCwgdGhpcy5fdWlIYXNoKCkgKTtcblxuXHRcdHRoaXMubGFzdFBvc2l0aW9uQWJzID0gdGhpcy5wb3NpdGlvbkFicztcblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0fSxcblxuXHRfbW91c2VTdG9wOiBmdW5jdGlvbiggZXZlbnQsIG5vUHJvcGFnYXRpb24gKSB7XG5cblx0XHRpZiAoICFldmVudCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvL0lmIHdlIGFyZSB1c2luZyBkcm9wcGFibGVzLCBpbmZvcm0gdGhlIG1hbmFnZXIgYWJvdXQgdGhlIGRyb3Bcblx0XHRpZiAoICQudWkuZGRtYW5hZ2VyICYmICF0aGlzLm9wdGlvbnMuZHJvcEJlaGF2aW91ciApIHtcblx0XHRcdCQudWkuZGRtYW5hZ2VyLmRyb3AoIHRoaXMsIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMucmV2ZXJ0ICkge1xuXHRcdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0XHRjdXIgPSB0aGlzLnBsYWNlaG9sZGVyLm9mZnNldCgpLFxuXHRcdFx0XHRheGlzID0gdGhpcy5vcHRpb25zLmF4aXMsXG5cdFx0XHRcdGFuaW1hdGlvbiA9IHt9O1xuXG5cdFx0XHRpZiAoICFheGlzIHx8IGF4aXMgPT09IFwieFwiICkge1xuXHRcdFx0XHRhbmltYXRpb24ubGVmdCA9IGN1ci5sZWZ0IC0gdGhpcy5vZmZzZXQucGFyZW50LmxlZnQgLSB0aGlzLm1hcmdpbnMubGVmdCArXG5cdFx0XHRcdFx0KCB0aGlzLm9mZnNldFBhcmVudFsgMCBdID09PSB0aGlzLmRvY3VtZW50WyAwIF0uYm9keSA/XG5cdFx0XHRcdFx0XHQwIDpcblx0XHRcdFx0XHRcdHRoaXMub2Zmc2V0UGFyZW50WyAwIF0uc2Nyb2xsTGVmdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICFheGlzIHx8IGF4aXMgPT09IFwieVwiICkge1xuXHRcdFx0XHRhbmltYXRpb24udG9wID0gY3VyLnRvcCAtIHRoaXMub2Zmc2V0LnBhcmVudC50b3AgLSB0aGlzLm1hcmdpbnMudG9wICtcblx0XHRcdFx0XHQoIHRoaXMub2Zmc2V0UGFyZW50WyAwIF0gPT09IHRoaXMuZG9jdW1lbnRbIDAgXS5ib2R5ID9cblx0XHRcdFx0XHRcdDAgOlxuXHRcdFx0XHRcdFx0dGhpcy5vZmZzZXRQYXJlbnRbIDAgXS5zY3JvbGxUb3Bcblx0XHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5yZXZlcnRpbmcgPSB0cnVlO1xuXHRcdFx0JCggdGhpcy5oZWxwZXIgKS5hbmltYXRlKFxuXHRcdFx0XHRhbmltYXRpb24sXG5cdFx0XHRcdHBhcnNlSW50KCB0aGlzLm9wdGlvbnMucmV2ZXJ0LCAxMCApIHx8IDUwMCxcblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dGhhdC5fY2xlYXIoIGV2ZW50ICk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2NsZWFyKCBldmVudCwgbm9Qcm9wYWdhdGlvbiApO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblxuXHR9LFxuXG5cdGNhbmNlbDogZnVuY3Rpb24oKSB7XG5cblx0XHRpZiAoIHRoaXMuZHJhZ2dpbmcgKSB7XG5cblx0XHRcdHRoaXMuX21vdXNlVXAoIG5ldyAkLkV2ZW50KCBcIm1vdXNldXBcIiwgeyB0YXJnZXQ6IG51bGwgfSApICk7XG5cblx0XHRcdGlmICggdGhpcy5vcHRpb25zLmhlbHBlciA9PT0gXCJvcmlnaW5hbFwiICkge1xuXHRcdFx0XHR0aGlzLmN1cnJlbnRJdGVtLmNzcyggdGhpcy5fc3RvcmVkQ1NTICk7XG5cdFx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCB0aGlzLmN1cnJlbnRJdGVtLCBcInVpLXNvcnRhYmxlLWhlbHBlclwiICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmN1cnJlbnRJdGVtLnNob3coKTtcblx0XHRcdH1cblxuXHRcdFx0Ly9Qb3N0IGRlYWN0aXZhdGluZyBldmVudHMgdG8gY29udGFpbmVyc1xuXHRcdFx0Zm9yICggdmFyIGkgPSB0aGlzLmNvbnRhaW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0gKSB7XG5cdFx0XHRcdHRoaXMuY29udGFpbmVyc1sgaSBdLl90cmlnZ2VyKCBcImRlYWN0aXZhdGVcIiwgbnVsbCwgdGhpcy5fdWlIYXNoKCB0aGlzICkgKTtcblx0XHRcdFx0aWYgKCB0aGlzLmNvbnRhaW5lcnNbIGkgXS5jb250YWluZXJDYWNoZS5vdmVyICkge1xuXHRcdFx0XHRcdHRoaXMuY29udGFpbmVyc1sgaSBdLl90cmlnZ2VyKCBcIm91dFwiLCBudWxsLCB0aGlzLl91aUhhc2goIHRoaXMgKSApO1xuXHRcdFx0XHRcdHRoaXMuY29udGFpbmVyc1sgaSBdLmNvbnRhaW5lckNhY2hlLm92ZXIgPSAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIHRoaXMucGxhY2Vob2xkZXIgKSB7XG5cblx0XHRcdC8vJCh0aGlzLnBsYWNlaG9sZGVyWzBdKS5yZW1vdmUoKTsgd291bGQgaGF2ZSBiZWVuIHRoZSBqUXVlcnkgd2F5IC0gdW5mb3J0dW5hdGVseSxcblx0XHRcdC8vIGl0IHVuYmluZHMgQUxMIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCBub2RlIVxuXHRcdFx0aWYgKCB0aGlzLnBsYWNlaG9sZGVyWyAwIF0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wbGFjZWhvbGRlclsgMCBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRoaXMucGxhY2Vob2xkZXJbIDAgXSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCB0aGlzLm9wdGlvbnMuaGVscGVyICE9PSBcIm9yaWdpbmFsXCIgJiYgdGhpcy5oZWxwZXIgJiZcblx0XHRcdFx0XHR0aGlzLmhlbHBlclsgMCBdLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMuaGVscGVyLnJlbW92ZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHQkLmV4dGVuZCggdGhpcywge1xuXHRcdFx0XHRoZWxwZXI6IG51bGwsXG5cdFx0XHRcdGRyYWdnaW5nOiBmYWxzZSxcblx0XHRcdFx0cmV2ZXJ0aW5nOiBmYWxzZSxcblx0XHRcdFx0X25vRmluYWxTb3J0OiBudWxsXG5cdFx0XHR9ICk7XG5cblx0XHRcdGlmICggdGhpcy5kb21Qb3NpdGlvbi5wcmV2ICkge1xuXHRcdFx0XHQkKCB0aGlzLmRvbVBvc2l0aW9uLnByZXYgKS5hZnRlciggdGhpcy5jdXJyZW50SXRlbSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JCggdGhpcy5kb21Qb3NpdGlvbi5wYXJlbnQgKS5wcmVwZW5kKCB0aGlzLmN1cnJlbnRJdGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRzZXJpYWxpemU6IGZ1bmN0aW9uKCBvICkge1xuXG5cdFx0dmFyIGl0ZW1zID0gdGhpcy5fZ2V0SXRlbXNBc2pRdWVyeSggbyAmJiBvLmNvbm5lY3RlZCApLFxuXHRcdFx0c3RyID0gW107XG5cdFx0byA9IG8gfHwge307XG5cblx0XHQkKCBpdGVtcyApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHJlcyA9ICggJCggby5pdGVtIHx8IHRoaXMgKS5hdHRyKCBvLmF0dHJpYnV0ZSB8fCBcImlkXCIgKSB8fCBcIlwiIClcblx0XHRcdFx0Lm1hdGNoKCBvLmV4cHJlc3Npb24gfHwgKCAvKC4rKVtcXC09X10oLispLyApICk7XG5cdFx0XHRpZiAoIHJlcyApIHtcblx0XHRcdFx0c3RyLnB1c2goXG5cdFx0XHRcdFx0KCBvLmtleSB8fCByZXNbIDEgXSArIFwiW11cIiApICtcblx0XHRcdFx0XHRcIj1cIiArICggby5rZXkgJiYgby5leHByZXNzaW9uID8gcmVzWyAxIF0gOiByZXNbIDIgXSApICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdFx0aWYgKCAhc3RyLmxlbmd0aCAmJiBvLmtleSApIHtcblx0XHRcdHN0ci5wdXNoKCBvLmtleSArIFwiPVwiICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHN0ci5qb2luKCBcIiZcIiApO1xuXG5cdH0sXG5cblx0dG9BcnJheTogZnVuY3Rpb24oIG8gKSB7XG5cblx0XHR2YXIgaXRlbXMgPSB0aGlzLl9nZXRJdGVtc0FzalF1ZXJ5KCBvICYmIG8uY29ubmVjdGVkICksXG5cdFx0XHRyZXQgPSBbXTtcblxuXHRcdG8gPSBvIHx8IHt9O1xuXG5cdFx0aXRlbXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXQucHVzaCggJCggby5pdGVtIHx8IHRoaXMgKS5hdHRyKCBvLmF0dHJpYnV0ZSB8fCBcImlkXCIgKSB8fCBcIlwiICk7XG5cdFx0fSApO1xuXHRcdHJldHVybiByZXQ7XG5cblx0fSxcblxuXHQvKiBCZSBjYXJlZnVsIHdpdGggdGhlIGZvbGxvd2luZyBjb3JlIGZ1bmN0aW9ucyAqL1xuXHRfaW50ZXJzZWN0c1dpdGg6IGZ1bmN0aW9uKCBpdGVtICkge1xuXG5cdFx0dmFyIHgxID0gdGhpcy5wb3NpdGlvbkFicy5sZWZ0LFxuXHRcdFx0eDIgPSB4MSArIHRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgsXG5cdFx0XHR5MSA9IHRoaXMucG9zaXRpb25BYnMudG9wLFxuXHRcdFx0eTIgPSB5MSArIHRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LFxuXHRcdFx0bCA9IGl0ZW0ubGVmdCxcblx0XHRcdHIgPSBsICsgaXRlbS53aWR0aCxcblx0XHRcdHQgPSBpdGVtLnRvcCxcblx0XHRcdGIgPSB0ICsgaXRlbS5oZWlnaHQsXG5cdFx0XHRkeUNsaWNrID0gdGhpcy5vZmZzZXQuY2xpY2sudG9wLFxuXHRcdFx0ZHhDbGljayA9IHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQsXG5cdFx0XHRpc092ZXJFbGVtZW50SGVpZ2h0ID0gKCB0aGlzLm9wdGlvbnMuYXhpcyA9PT0gXCJ4XCIgKSB8fCAoICggeTEgKyBkeUNsaWNrICkgPiB0ICYmXG5cdFx0XHRcdCggeTEgKyBkeUNsaWNrICkgPCBiICksXG5cdFx0XHRpc092ZXJFbGVtZW50V2lkdGggPSAoIHRoaXMub3B0aW9ucy5heGlzID09PSBcInlcIiApIHx8ICggKCB4MSArIGR4Q2xpY2sgKSA+IGwgJiZcblx0XHRcdFx0KCB4MSArIGR4Q2xpY2sgKSA8IHIgKSxcblx0XHRcdGlzT3ZlckVsZW1lbnQgPSBpc092ZXJFbGVtZW50SGVpZ2h0ICYmIGlzT3ZlckVsZW1lbnRXaWR0aDtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLnRvbGVyYW5jZSA9PT0gXCJwb2ludGVyXCIgfHxcblx0XHRcdHRoaXMub3B0aW9ucy5mb3JjZVBvaW50ZXJGb3JDb250YWluZXJzIHx8XG5cdFx0XHQoIHRoaXMub3B0aW9ucy50b2xlcmFuY2UgIT09IFwicG9pbnRlclwiICYmXG5cdFx0XHRcdHRoaXMuaGVscGVyUHJvcG9ydGlvbnNbIHRoaXMuZmxvYXRpbmcgPyBcIndpZHRoXCIgOiBcImhlaWdodFwiIF0gPlxuXHRcdFx0XHRpdGVtWyB0aGlzLmZsb2F0aW5nID8gXCJ3aWR0aFwiIDogXCJoZWlnaHRcIiBdIClcblx0XHQpIHtcblx0XHRcdHJldHVybiBpc092ZXJFbGVtZW50O1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHJldHVybiAoIGwgPCB4MSArICggdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCAvIDIgKSAmJiAvLyBSaWdodCBIYWxmXG5cdFx0XHRcdHgyIC0gKCB0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoIC8gMiApIDwgciAmJiAvLyBMZWZ0IEhhbGZcblx0XHRcdFx0dCA8IHkxICsgKCB0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCAvIDIgKSAmJiAvLyBCb3R0b20gSGFsZlxuXHRcdFx0XHR5MiAtICggdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQgLyAyICkgPCBiICk7IC8vIFRvcCBIYWxmXG5cblx0XHR9XG5cdH0sXG5cblx0X2ludGVyc2VjdHNXaXRoUG9pbnRlcjogZnVuY3Rpb24oIGl0ZW0gKSB7XG5cdFx0dmFyIHZlcnRpY2FsRGlyZWN0aW9uLCBob3Jpem9udGFsRGlyZWN0aW9uLFxuXHRcdFx0aXNPdmVyRWxlbWVudEhlaWdodCA9ICggdGhpcy5vcHRpb25zLmF4aXMgPT09IFwieFwiICkgfHxcblx0XHRcdFx0dGhpcy5faXNPdmVyQXhpcyhcblx0XHRcdFx0XHR0aGlzLnBvc2l0aW9uQWJzLnRvcCArIHRoaXMub2Zmc2V0LmNsaWNrLnRvcCwgaXRlbS50b3AsIGl0ZW0uaGVpZ2h0ICksXG5cdFx0XHRpc092ZXJFbGVtZW50V2lkdGggPSAoIHRoaXMub3B0aW9ucy5heGlzID09PSBcInlcIiApIHx8XG5cdFx0XHRcdHRoaXMuX2lzT3ZlckF4aXMoXG5cdFx0XHRcdFx0dGhpcy5wb3NpdGlvbkFicy5sZWZ0ICsgdGhpcy5vZmZzZXQuY2xpY2subGVmdCwgaXRlbS5sZWZ0LCBpdGVtLndpZHRoICksXG5cdFx0XHRpc092ZXJFbGVtZW50ID0gaXNPdmVyRWxlbWVudEhlaWdodCAmJiBpc092ZXJFbGVtZW50V2lkdGg7XG5cblx0XHRpZiAoICFpc092ZXJFbGVtZW50ICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHZlcnRpY2FsRGlyZWN0aW9uID0gdGhpcy5fZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uKCk7XG5cdFx0aG9yaXpvbnRhbERpcmVjdGlvbiA9IHRoaXMuX2dldERyYWdIb3Jpem9udGFsRGlyZWN0aW9uKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5mbG9hdGluZyA/XG5cdFx0XHQoICggaG9yaXpvbnRhbERpcmVjdGlvbiA9PT0gXCJyaWdodFwiIHx8IHZlcnRpY2FsRGlyZWN0aW9uID09PSBcImRvd25cIiApID8gMiA6IDEgKVxuXHRcdFx0OiAoIHZlcnRpY2FsRGlyZWN0aW9uICYmICggdmVydGljYWxEaXJlY3Rpb24gPT09IFwiZG93blwiID8gMiA6IDEgKSApO1xuXG5cdH0sXG5cblx0X2ludGVyc2VjdHNXaXRoU2lkZXM6IGZ1bmN0aW9uKCBpdGVtICkge1xuXG5cdFx0dmFyIGlzT3ZlckJvdHRvbUhhbGYgPSB0aGlzLl9pc092ZXJBeGlzKCB0aGlzLnBvc2l0aW9uQWJzLnRvcCArXG5cdFx0XHRcdHRoaXMub2Zmc2V0LmNsaWNrLnRvcCwgaXRlbS50b3AgKyAoIGl0ZW0uaGVpZ2h0IC8gMiApLCBpdGVtLmhlaWdodCApLFxuXHRcdFx0aXNPdmVyUmlnaHRIYWxmID0gdGhpcy5faXNPdmVyQXhpcyggdGhpcy5wb3NpdGlvbkFicy5sZWZ0ICtcblx0XHRcdFx0dGhpcy5vZmZzZXQuY2xpY2subGVmdCwgaXRlbS5sZWZ0ICsgKCBpdGVtLndpZHRoIC8gMiApLCBpdGVtLndpZHRoICksXG5cdFx0XHR2ZXJ0aWNhbERpcmVjdGlvbiA9IHRoaXMuX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbigpLFxuXHRcdFx0aG9yaXpvbnRhbERpcmVjdGlvbiA9IHRoaXMuX2dldERyYWdIb3Jpem9udGFsRGlyZWN0aW9uKCk7XG5cblx0XHRpZiAoIHRoaXMuZmxvYXRpbmcgJiYgaG9yaXpvbnRhbERpcmVjdGlvbiApIHtcblx0XHRcdHJldHVybiAoICggaG9yaXpvbnRhbERpcmVjdGlvbiA9PT0gXCJyaWdodFwiICYmIGlzT3ZlclJpZ2h0SGFsZiApIHx8XG5cdFx0XHRcdCggaG9yaXpvbnRhbERpcmVjdGlvbiA9PT0gXCJsZWZ0XCIgJiYgIWlzT3ZlclJpZ2h0SGFsZiApICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB2ZXJ0aWNhbERpcmVjdGlvbiAmJiAoICggdmVydGljYWxEaXJlY3Rpb24gPT09IFwiZG93blwiICYmIGlzT3ZlckJvdHRvbUhhbGYgKSB8fFxuXHRcdFx0XHQoIHZlcnRpY2FsRGlyZWN0aW9uID09PSBcInVwXCIgJiYgIWlzT3ZlckJvdHRvbUhhbGYgKSApO1xuXHRcdH1cblxuXHR9LFxuXG5cdF9nZXREcmFnVmVydGljYWxEaXJlY3Rpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBkZWx0YSA9IHRoaXMucG9zaXRpb25BYnMudG9wIC0gdGhpcy5sYXN0UG9zaXRpb25BYnMudG9wO1xuXHRcdHJldHVybiBkZWx0YSAhPT0gMCAmJiAoIGRlbHRhID4gMCA/IFwiZG93blwiIDogXCJ1cFwiICk7XG5cdH0sXG5cblx0X2dldERyYWdIb3Jpem9udGFsRGlyZWN0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZGVsdGEgPSB0aGlzLnBvc2l0aW9uQWJzLmxlZnQgLSB0aGlzLmxhc3RQb3NpdGlvbkFicy5sZWZ0O1xuXHRcdHJldHVybiBkZWx0YSAhPT0gMCAmJiAoIGRlbHRhID4gMCA/IFwicmlnaHRcIiA6IFwibGVmdFwiICk7XG5cdH0sXG5cblx0cmVmcmVzaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHRoaXMuX3JlZnJlc2hJdGVtcyggZXZlbnQgKTtcblx0XHR0aGlzLl9zZXRIYW5kbGVDbGFzc05hbWUoKTtcblx0XHR0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRfY29ubmVjdFdpdGg6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXHRcdHJldHVybiBvcHRpb25zLmNvbm5lY3RXaXRoLmNvbnN0cnVjdG9yID09PSBTdHJpbmcgP1xuXHRcdFx0WyBvcHRpb25zLmNvbm5lY3RXaXRoIF0gOlxuXHRcdFx0b3B0aW9ucy5jb25uZWN0V2l0aDtcblx0fSxcblxuXHRfZ2V0SXRlbXNBc2pRdWVyeTogZnVuY3Rpb24oIGNvbm5lY3RlZCApIHtcblxuXHRcdHZhciBpLCBqLCBjdXIsIGluc3QsXG5cdFx0XHRpdGVtcyA9IFtdLFxuXHRcdFx0cXVlcmllcyA9IFtdLFxuXHRcdFx0Y29ubmVjdFdpdGggPSB0aGlzLl9jb25uZWN0V2l0aCgpO1xuXG5cdFx0aWYgKCBjb25uZWN0V2l0aCAmJiBjb25uZWN0ZWQgKSB7XG5cdFx0XHRmb3IgKCBpID0gY29ubmVjdFdpdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0gKSB7XG5cdFx0XHRcdGN1ciA9ICQoIGNvbm5lY3RXaXRoWyBpIF0sIHRoaXMuZG9jdW1lbnRbIDAgXSApO1xuXHRcdFx0XHRmb3IgKCBqID0gY3VyLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tICkge1xuXHRcdFx0XHRcdGluc3QgPSAkLmRhdGEoIGN1clsgaiBdLCB0aGlzLndpZGdldEZ1bGxOYW1lICk7XG5cdFx0XHRcdFx0aWYgKCBpbnN0ICYmIGluc3QgIT09IHRoaXMgJiYgIWluc3Qub3B0aW9ucy5kaXNhYmxlZCApIHtcblx0XHRcdFx0XHRcdHF1ZXJpZXMucHVzaCggWyAkLmlzRnVuY3Rpb24oIGluc3Qub3B0aW9ucy5pdGVtcyApID9cblx0XHRcdFx0XHRcdFx0aW5zdC5vcHRpb25zLml0ZW1zLmNhbGwoIGluc3QuZWxlbWVudCApIDpcblx0XHRcdFx0XHRcdFx0JCggaW5zdC5vcHRpb25zLml0ZW1zLCBpbnN0LmVsZW1lbnQgKVxuXHRcdFx0XHRcdFx0XHRcdC5ub3QoIFwiLnVpLXNvcnRhYmxlLWhlbHBlclwiIClcblx0XHRcdFx0XHRcdFx0XHQubm90KCBcIi51aS1zb3J0YWJsZS1wbGFjZWhvbGRlclwiICksIGluc3QgXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHF1ZXJpZXMucHVzaCggWyAkLmlzRnVuY3Rpb24oIHRoaXMub3B0aW9ucy5pdGVtcyApID9cblx0XHRcdHRoaXMub3B0aW9ucy5pdGVtc1xuXHRcdFx0XHQuY2FsbCggdGhpcy5lbGVtZW50LCBudWxsLCB7IG9wdGlvbnM6IHRoaXMub3B0aW9ucywgaXRlbTogdGhpcy5jdXJyZW50SXRlbSB9ICkgOlxuXHRcdFx0JCggdGhpcy5vcHRpb25zLml0ZW1zLCB0aGlzLmVsZW1lbnQgKVxuXHRcdFx0XHQubm90KCBcIi51aS1zb3J0YWJsZS1oZWxwZXJcIiApXG5cdFx0XHRcdC5ub3QoIFwiLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyXCIgKSwgdGhpcyBdICk7XG5cblx0XHRmdW5jdGlvbiBhZGRJdGVtcygpIHtcblx0XHRcdGl0ZW1zLnB1c2goIHRoaXMgKTtcblx0XHR9XG5cdFx0Zm9yICggaSA9IHF1ZXJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0gKSB7XG5cdFx0XHRxdWVyaWVzWyBpIF1bIDAgXS5lYWNoKCBhZGRJdGVtcyApO1xuXHRcdH1cblxuXHRcdHJldHVybiAkKCBpdGVtcyApO1xuXG5cdH0sXG5cblx0X3JlbW92ZUN1cnJlbnRzRnJvbUl0ZW1zOiBmdW5jdGlvbigpIHtcblxuXHRcdHZhciBsaXN0ID0gdGhpcy5jdXJyZW50SXRlbS5maW5kKCBcIjpkYXRhKFwiICsgdGhpcy53aWRnZXROYW1lICsgXCItaXRlbSlcIiApO1xuXG5cdFx0dGhpcy5pdGVtcyA9ICQuZ3JlcCggdGhpcy5pdGVtcywgZnVuY3Rpb24oIGl0ZW0gKSB7XG5cdFx0XHRmb3IgKCB2YXIgaiA9IDA7IGogPCBsaXN0Lmxlbmd0aDsgaisrICkge1xuXHRcdFx0XHRpZiAoIGxpc3RbIGogXSA9PT0gaXRlbS5pdGVtWyAwIF0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9ICk7XG5cblx0fSxcblxuXHRfcmVmcmVzaEl0ZW1zOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHR0aGlzLml0ZW1zID0gW107XG5cdFx0dGhpcy5jb250YWluZXJzID0gWyB0aGlzIF07XG5cblx0XHR2YXIgaSwgaiwgY3VyLCBpbnN0LCB0YXJnZXREYXRhLCBfcXVlcmllcywgaXRlbSwgcXVlcmllc0xlbmd0aCxcblx0XHRcdGl0ZW1zID0gdGhpcy5pdGVtcyxcblx0XHRcdHF1ZXJpZXMgPSBbIFsgJC5pc0Z1bmN0aW9uKCB0aGlzLm9wdGlvbnMuaXRlbXMgKSA/XG5cdFx0XHRcdHRoaXMub3B0aW9ucy5pdGVtcy5jYWxsKCB0aGlzLmVsZW1lbnRbIDAgXSwgZXZlbnQsIHsgaXRlbTogdGhpcy5jdXJyZW50SXRlbSB9ICkgOlxuXHRcdFx0XHQkKCB0aGlzLm9wdGlvbnMuaXRlbXMsIHRoaXMuZWxlbWVudCApLCB0aGlzIF0gXSxcblx0XHRcdGNvbm5lY3RXaXRoID0gdGhpcy5fY29ubmVjdFdpdGgoKTtcblxuXHRcdC8vU2hvdWxkbid0IGJlIHJ1biB0aGUgZmlyc3QgdGltZSB0aHJvdWdoIGR1ZSB0byBtYXNzaXZlIHNsb3ctZG93blxuXHRcdGlmICggY29ubmVjdFdpdGggJiYgdGhpcy5yZWFkeSApIHtcblx0XHRcdGZvciAoIGkgPSBjb25uZWN0V2l0aC5sZW5ndGggLSAxOyBpID49IDA7IGktLSApIHtcblx0XHRcdFx0Y3VyID0gJCggY29ubmVjdFdpdGhbIGkgXSwgdGhpcy5kb2N1bWVudFsgMCBdICk7XG5cdFx0XHRcdGZvciAoIGogPSBjdXIubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0gKSB7XG5cdFx0XHRcdFx0aW5zdCA9ICQuZGF0YSggY3VyWyBqIF0sIHRoaXMud2lkZ2V0RnVsbE5hbWUgKTtcblx0XHRcdFx0XHRpZiAoIGluc3QgJiYgaW5zdCAhPT0gdGhpcyAmJiAhaW5zdC5vcHRpb25zLmRpc2FibGVkICkge1xuXHRcdFx0XHRcdFx0cXVlcmllcy5wdXNoKCBbICQuaXNGdW5jdGlvbiggaW5zdC5vcHRpb25zLml0ZW1zICkgP1xuXHRcdFx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMuaXRlbXNcblx0XHRcdFx0XHRcdFx0XHQuY2FsbCggaW5zdC5lbGVtZW50WyAwIF0sIGV2ZW50LCB7IGl0ZW06IHRoaXMuY3VycmVudEl0ZW0gfSApIDpcblx0XHRcdFx0XHRcdFx0JCggaW5zdC5vcHRpb25zLml0ZW1zLCBpbnN0LmVsZW1lbnQgKSwgaW5zdCBdICk7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbnRhaW5lcnMucHVzaCggaW5zdCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoIGkgPSBxdWVyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tICkge1xuXHRcdFx0dGFyZ2V0RGF0YSA9IHF1ZXJpZXNbIGkgXVsgMSBdO1xuXHRcdFx0X3F1ZXJpZXMgPSBxdWVyaWVzWyBpIF1bIDAgXTtcblxuXHRcdFx0Zm9yICggaiA9IDAsIHF1ZXJpZXNMZW5ndGggPSBfcXVlcmllcy5sZW5ndGg7IGogPCBxdWVyaWVzTGVuZ3RoOyBqKysgKSB7XG5cdFx0XHRcdGl0ZW0gPSAkKCBfcXVlcmllc1sgaiBdICk7XG5cblx0XHRcdFx0Ly8gRGF0YSBmb3IgdGFyZ2V0IGNoZWNraW5nIChtb3VzZSBtYW5hZ2VyKVxuXHRcdFx0XHRpdGVtLmRhdGEoIHRoaXMud2lkZ2V0TmFtZSArIFwiLWl0ZW1cIiwgdGFyZ2V0RGF0YSApO1xuXG5cdFx0XHRcdGl0ZW1zLnB1c2goIHtcblx0XHRcdFx0XHRpdGVtOiBpdGVtLFxuXHRcdFx0XHRcdGluc3RhbmNlOiB0YXJnZXREYXRhLFxuXHRcdFx0XHRcdHdpZHRoOiAwLCBoZWlnaHQ6IDAsXG5cdFx0XHRcdFx0bGVmdDogMCwgdG9wOiAwXG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0fSxcblxuXHRyZWZyZXNoUG9zaXRpb25zOiBmdW5jdGlvbiggZmFzdCApIHtcblxuXHRcdC8vIERldGVybWluZSB3aGV0aGVyIGl0ZW1zIGFyZSBiZWluZyBkaXNwbGF5ZWQgaG9yaXpvbnRhbGx5XG5cdFx0dGhpcy5mbG9hdGluZyA9IHRoaXMuaXRlbXMubGVuZ3RoID9cblx0XHRcdHRoaXMub3B0aW9ucy5heGlzID09PSBcInhcIiB8fCB0aGlzLl9pc0Zsb2F0aW5nKCB0aGlzLml0ZW1zWyAwIF0uaXRlbSApIDpcblx0XHRcdGZhbHNlO1xuXG5cdFx0Ly9UaGlzIGhhcyB0byBiZSByZWRvbmUgYmVjYXVzZSBkdWUgdG8gdGhlIGl0ZW0gYmVpbmcgbW92ZWQgb3V0L2ludG8gdGhlIG9mZnNldFBhcmVudCxcblx0XHQvLyB0aGUgb2Zmc2V0UGFyZW50J3MgcG9zaXRpb24gd2lsbCBjaGFuZ2Vcblx0XHRpZiAoIHRoaXMub2Zmc2V0UGFyZW50ICYmIHRoaXMuaGVscGVyICkge1xuXHRcdFx0dGhpcy5vZmZzZXQucGFyZW50ID0gdGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCk7XG5cdFx0fVxuXG5cdFx0dmFyIGksIGl0ZW0sIHQsIHA7XG5cblx0XHRmb3IgKCBpID0gdGhpcy5pdGVtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSApIHtcblx0XHRcdGl0ZW0gPSB0aGlzLml0ZW1zWyBpIF07XG5cblx0XHRcdC8vV2UgaWdub3JlIGNhbGN1bGF0aW5nIHBvc2l0aW9ucyBvZiBhbGwgY29ubmVjdGVkIGNvbnRhaW5lcnMgd2hlbiB3ZSdyZSBub3Qgb3ZlciB0aGVtXG5cdFx0XHRpZiAoIGl0ZW0uaW5zdGFuY2UgIT09IHRoaXMuY3VycmVudENvbnRhaW5lciAmJiB0aGlzLmN1cnJlbnRDb250YWluZXIgJiZcblx0XHRcdFx0XHRpdGVtLml0ZW1bIDAgXSAhPT0gdGhpcy5jdXJyZW50SXRlbVsgMCBdICkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0dCA9IHRoaXMub3B0aW9ucy50b2xlcmFuY2VFbGVtZW50ID9cblx0XHRcdFx0JCggdGhpcy5vcHRpb25zLnRvbGVyYW5jZUVsZW1lbnQsIGl0ZW0uaXRlbSApIDpcblx0XHRcdFx0aXRlbS5pdGVtO1xuXG5cdFx0XHRpZiAoICFmYXN0ICkge1xuXHRcdFx0XHRpdGVtLndpZHRoID0gdC5vdXRlcldpZHRoKCk7XG5cdFx0XHRcdGl0ZW0uaGVpZ2h0ID0gdC5vdXRlckhlaWdodCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRwID0gdC5vZmZzZXQoKTtcblx0XHRcdGl0ZW0ubGVmdCA9IHAubGVmdDtcblx0XHRcdGl0ZW0udG9wID0gcC50b3A7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuY3VzdG9tICYmIHRoaXMub3B0aW9ucy5jdXN0b20ucmVmcmVzaENvbnRhaW5lcnMgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMuY3VzdG9tLnJlZnJlc2hDb250YWluZXJzLmNhbGwoIHRoaXMgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSA9IHRoaXMuY29udGFpbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSApIHtcblx0XHRcdFx0cCA9IHRoaXMuY29udGFpbmVyc1sgaSBdLmVsZW1lbnQub2Zmc2V0KCk7XG5cdFx0XHRcdHRoaXMuY29udGFpbmVyc1sgaSBdLmNvbnRhaW5lckNhY2hlLmxlZnQgPSBwLmxlZnQ7XG5cdFx0XHRcdHRoaXMuY29udGFpbmVyc1sgaSBdLmNvbnRhaW5lckNhY2hlLnRvcCA9IHAudG9wO1xuXHRcdFx0XHR0aGlzLmNvbnRhaW5lcnNbIGkgXS5jb250YWluZXJDYWNoZS53aWR0aCA9XG5cdFx0XHRcdFx0dGhpcy5jb250YWluZXJzWyBpIF0uZWxlbWVudC5vdXRlcldpZHRoKCk7XG5cdFx0XHRcdHRoaXMuY29udGFpbmVyc1sgaSBdLmNvbnRhaW5lckNhY2hlLmhlaWdodCA9XG5cdFx0XHRcdFx0dGhpcy5jb250YWluZXJzWyBpIF0uZWxlbWVudC5vdXRlckhlaWdodCgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdF9jcmVhdGVQbGFjZWhvbGRlcjogZnVuY3Rpb24oIHRoYXQgKSB7XG5cdFx0dGhhdCA9IHRoYXQgfHwgdGhpcztcblx0XHR2YXIgY2xhc3NOYW1lLFxuXHRcdFx0byA9IHRoYXQub3B0aW9ucztcblxuXHRcdGlmICggIW8ucGxhY2Vob2xkZXIgfHwgby5wbGFjZWhvbGRlci5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nICkge1xuXHRcdFx0Y2xhc3NOYW1lID0gby5wbGFjZWhvbGRlcjtcblx0XHRcdG8ucGxhY2Vob2xkZXIgPSB7XG5cdFx0XHRcdGVsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0dmFyIG5vZGVOYW1lID0gdGhhdC5jdXJyZW50SXRlbVsgMCBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksXG5cdFx0XHRcdFx0XHRlbGVtZW50ID0gJCggXCI8XCIgKyBub2RlTmFtZSArIFwiPlwiLCB0aGF0LmRvY3VtZW50WyAwIF0gKTtcblxuXHRcdFx0XHRcdFx0dGhhdC5fYWRkQ2xhc3MoIGVsZW1lbnQsIFwidWktc29ydGFibGUtcGxhY2Vob2xkZXJcIixcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWUgfHwgdGhhdC5jdXJyZW50SXRlbVsgMCBdLmNsYXNzTmFtZSApXG5cdFx0XHRcdFx0XHRcdC5fcmVtb3ZlQ2xhc3MoIGVsZW1lbnQsIFwidWktc29ydGFibGUtaGVscGVyXCIgKTtcblxuXHRcdFx0XHRcdGlmICggbm9kZU5hbWUgPT09IFwidGJvZHlcIiApIHtcblx0XHRcdFx0XHRcdHRoYXQuX2NyZWF0ZVRyUGxhY2Vob2xkZXIoXG5cdFx0XHRcdFx0XHRcdHRoYXQuY3VycmVudEl0ZW0uZmluZCggXCJ0clwiICkuZXEoIDAgKSxcblx0XHRcdFx0XHRcdFx0JCggXCI8dHI+XCIsIHRoYXQuZG9jdW1lbnRbIDAgXSApLmFwcGVuZFRvKCBlbGVtZW50IClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggbm9kZU5hbWUgPT09IFwidHJcIiApIHtcblx0XHRcdFx0XHRcdHRoYXQuX2NyZWF0ZVRyUGxhY2Vob2xkZXIoIHRoYXQuY3VycmVudEl0ZW0sIGVsZW1lbnQgKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gXCJpbWdcIiApIHtcblx0XHRcdFx0XHRcdGVsZW1lbnQuYXR0ciggXCJzcmNcIiwgdGhhdC5jdXJyZW50SXRlbS5hdHRyKCBcInNyY1wiICkgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoICFjbGFzc05hbWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50LmNzcyggXCJ2aXNpYmlsaXR5XCIsIFwiaGlkZGVuXCIgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHRcdFx0fSxcblx0XHRcdFx0dXBkYXRlOiBmdW5jdGlvbiggY29udGFpbmVyLCBwICkge1xuXG5cdFx0XHRcdFx0Ly8gMS4gSWYgYSBjbGFzc05hbWUgaXMgc2V0IGFzICdwbGFjZWhvbGRlciBvcHRpb24sIHdlIGRvbid0IGZvcmNlIHNpemVzIC1cblx0XHRcdFx0XHQvLyB0aGUgY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIHRoYXRcblx0XHRcdFx0XHQvLyAyLiBUaGUgb3B0aW9uICdmb3JjZVBsYWNlaG9sZGVyU2l6ZSBjYW4gYmUgZW5hYmxlZCB0byBmb3JjZSBpdCBldmVuIGlmIGFcblx0XHRcdFx0XHQvLyBjbGFzcyBuYW1lIGlzIHNwZWNpZmllZFxuXHRcdFx0XHRcdGlmICggY2xhc3NOYW1lICYmICFvLmZvcmNlUGxhY2Vob2xkZXJTaXplICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vSWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGEgYWN0dWFsIGhlaWdodCBieSBpdHNlbGYgKHdpdGhvdXQgc3R5bGVzIGNvbWluZ1xuXHRcdFx0XHRcdC8vIGZyb20gYSBzdHlsZXNoZWV0KSwgaXQgcmVjZWl2ZXMgdGhlIGlubGluZSBoZWlnaHQgZnJvbSB0aGUgZHJhZ2dlZCBpdGVtXG5cdFx0XHRcdFx0aWYgKCAhcC5oZWlnaHQoKSApIHtcblx0XHRcdFx0XHRcdHAuaGVpZ2h0KFxuXHRcdFx0XHRcdFx0XHR0aGF0LmN1cnJlbnRJdGVtLmlubmVySGVpZ2h0KCkgLVxuXHRcdFx0XHRcdFx0XHRwYXJzZUludCggdGhhdC5jdXJyZW50SXRlbS5jc3MoIFwicGFkZGluZ1RvcFwiICkgfHwgMCwgMTAgKSAtXG5cdFx0XHRcdFx0XHRcdHBhcnNlSW50KCB0aGF0LmN1cnJlbnRJdGVtLmNzcyggXCJwYWRkaW5nQm90dG9tXCIgKSB8fCAwLCAxMCApICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggIXAud2lkdGgoKSApIHtcblx0XHRcdFx0XHRcdHAud2lkdGgoXG5cdFx0XHRcdFx0XHRcdHRoYXQuY3VycmVudEl0ZW0uaW5uZXJXaWR0aCgpIC1cblx0XHRcdFx0XHRcdFx0cGFyc2VJbnQoIHRoYXQuY3VycmVudEl0ZW0uY3NzKCBcInBhZGRpbmdMZWZ0XCIgKSB8fCAwLCAxMCApIC1cblx0XHRcdFx0XHRcdFx0cGFyc2VJbnQoIHRoYXQuY3VycmVudEl0ZW0uY3NzKCBcInBhZGRpbmdSaWdodFwiICkgfHwgMCwgMTAgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvL0NyZWF0ZSB0aGUgcGxhY2Vob2xkZXJcblx0XHR0aGF0LnBsYWNlaG9sZGVyID0gJCggby5wbGFjZWhvbGRlci5lbGVtZW50LmNhbGwoIHRoYXQuZWxlbWVudCwgdGhhdC5jdXJyZW50SXRlbSApICk7XG5cblx0XHQvL0FwcGVuZCBpdCBhZnRlciB0aGUgYWN0dWFsIGN1cnJlbnQgaXRlbVxuXHRcdHRoYXQuY3VycmVudEl0ZW0uYWZ0ZXIoIHRoYXQucGxhY2Vob2xkZXIgKTtcblxuXHRcdC8vVXBkYXRlIHRoZSBzaXplIG9mIHRoZSBwbGFjZWhvbGRlciAoVE9ETzogTG9naWMgdG8gZnV6enksIHNlZSBsaW5lIDMxNi8zMTcpXG5cdFx0by5wbGFjZWhvbGRlci51cGRhdGUoIHRoYXQsIHRoYXQucGxhY2Vob2xkZXIgKTtcblxuXHR9LFxuXG5cdF9jcmVhdGVUclBsYWNlaG9sZGVyOiBmdW5jdGlvbiggc291cmNlVHIsIHRhcmdldFRyICkge1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblxuXHRcdHNvdXJjZVRyLmNoaWxkcmVuKCkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHQkKCBcIjx0ZD4mIzE2MDs8L3RkPlwiLCB0aGF0LmRvY3VtZW50WyAwIF0gKVxuXHRcdFx0XHQuYXR0ciggXCJjb2xzcGFuXCIsICQoIHRoaXMgKS5hdHRyKCBcImNvbHNwYW5cIiApIHx8IDEgKVxuXHRcdFx0XHQuYXBwZW5kVG8oIHRhcmdldFRyICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdF9jb250YWN0Q29udGFpbmVyczogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBpLCBqLCBkaXN0LCBpdGVtV2l0aExlYXN0RGlzdGFuY2UsIHBvc1Byb3BlcnR5LCBzaXplUHJvcGVydHksIGN1ciwgbmVhckJvdHRvbSxcblx0XHRcdGZsb2F0aW5nLCBheGlzLFxuXHRcdFx0aW5uZXJtb3N0Q29udGFpbmVyID0gbnVsbCxcblx0XHRcdGlubmVybW9zdEluZGV4ID0gbnVsbDtcblxuXHRcdC8vIEdldCBpbm5lcm1vc3QgY29udGFpbmVyIHRoYXQgaW50ZXJzZWN0cyB3aXRoIGl0ZW1cblx0XHRmb3IgKCBpID0gdGhpcy5jb250YWluZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tICkge1xuXG5cdFx0XHQvLyBOZXZlciBjb25zaWRlciBhIGNvbnRhaW5lciB0aGF0J3MgbG9jYXRlZCB3aXRoaW4gdGhlIGl0ZW0gaXRzZWxmXG5cdFx0XHRpZiAoICQuY29udGFpbnMoIHRoaXMuY3VycmVudEl0ZW1bIDAgXSwgdGhpcy5jb250YWluZXJzWyBpIF0uZWxlbWVudFsgMCBdICkgKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHRoaXMuX2ludGVyc2VjdHNXaXRoKCB0aGlzLmNvbnRhaW5lcnNbIGkgXS5jb250YWluZXJDYWNoZSApICkge1xuXG5cdFx0XHRcdC8vIElmIHdlJ3ZlIGFscmVhZHkgZm91bmQgYSBjb250YWluZXIgYW5kIGl0J3MgbW9yZSBcImlubmVyXCIgdGhhbiB0aGlzLCB0aGVuIGNvbnRpbnVlXG5cdFx0XHRcdGlmICggaW5uZXJtb3N0Q29udGFpbmVyICYmXG5cdFx0XHRcdFx0XHQkLmNvbnRhaW5zKFxuXHRcdFx0XHRcdFx0XHR0aGlzLmNvbnRhaW5lcnNbIGkgXS5lbGVtZW50WyAwIF0sXG5cdFx0XHRcdFx0XHRcdGlubmVybW9zdENvbnRhaW5lci5lbGVtZW50WyAwIF0gKSApIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlubmVybW9zdENvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyc1sgaSBdO1xuXHRcdFx0XHRpbm5lcm1vc3RJbmRleCA9IGk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gY29udGFpbmVyIGRvZXNuJ3QgaW50ZXJzZWN0LiB0cmlnZ2VyIFwib3V0XCIgZXZlbnQgaWYgbmVjZXNzYXJ5XG5cdFx0XHRcdGlmICggdGhpcy5jb250YWluZXJzWyBpIF0uY29udGFpbmVyQ2FjaGUub3ZlciApIHtcblx0XHRcdFx0XHR0aGlzLmNvbnRhaW5lcnNbIGkgXS5fdHJpZ2dlciggXCJvdXRcIiwgZXZlbnQsIHRoaXMuX3VpSGFzaCggdGhpcyApICk7XG5cdFx0XHRcdFx0dGhpcy5jb250YWluZXJzWyBpIF0uY29udGFpbmVyQ2FjaGUub3ZlciA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIElmIG5vIGludGVyc2VjdGluZyBjb250YWluZXJzIGZvdW5kLCByZXR1cm5cblx0XHRpZiAoICFpbm5lcm1vc3RDb250YWluZXIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gTW92ZSB0aGUgaXRlbSBpbnRvIHRoZSBjb250YWluZXIgaWYgaXQncyBub3QgdGhlcmUgYWxyZWFkeVxuXHRcdGlmICggdGhpcy5jb250YWluZXJzLmxlbmd0aCA9PT0gMSApIHtcblx0XHRcdGlmICggIXRoaXMuY29udGFpbmVyc1sgaW5uZXJtb3N0SW5kZXggXS5jb250YWluZXJDYWNoZS5vdmVyICkge1xuXHRcdFx0XHR0aGlzLmNvbnRhaW5lcnNbIGlubmVybW9zdEluZGV4IF0uX3RyaWdnZXIoIFwib3ZlclwiLCBldmVudCwgdGhpcy5fdWlIYXNoKCB0aGlzICkgKTtcblx0XHRcdFx0dGhpcy5jb250YWluZXJzWyBpbm5lcm1vc3RJbmRleCBdLmNvbnRhaW5lckNhY2hlLm92ZXIgPSAxO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIFdoZW4gZW50ZXJpbmcgYSBuZXcgY29udGFpbmVyLCB3ZSB3aWxsIGZpbmQgdGhlIGl0ZW0gd2l0aCB0aGUgbGVhc3QgZGlzdGFuY2UgYW5kXG5cdFx0XHQvLyBhcHBlbmQgb3VyIGl0ZW0gbmVhciBpdFxuXHRcdFx0ZGlzdCA9IDEwMDAwO1xuXHRcdFx0aXRlbVdpdGhMZWFzdERpc3RhbmNlID0gbnVsbDtcblx0XHRcdGZsb2F0aW5nID0gaW5uZXJtb3N0Q29udGFpbmVyLmZsb2F0aW5nIHx8IHRoaXMuX2lzRmxvYXRpbmcoIHRoaXMuY3VycmVudEl0ZW0gKTtcblx0XHRcdHBvc1Byb3BlcnR5ID0gZmxvYXRpbmcgPyBcImxlZnRcIiA6IFwidG9wXCI7XG5cdFx0XHRzaXplUHJvcGVydHkgPSBmbG9hdGluZyA/IFwid2lkdGhcIiA6IFwiaGVpZ2h0XCI7XG5cdFx0XHRheGlzID0gZmxvYXRpbmcgPyBcInBhZ2VYXCIgOiBcInBhZ2VZXCI7XG5cblx0XHRcdGZvciAoIGogPSB0aGlzLml0ZW1zLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tICkge1xuXHRcdFx0XHRpZiAoICEkLmNvbnRhaW5zKFxuXHRcdFx0XHRcdFx0dGhpcy5jb250YWluZXJzWyBpbm5lcm1vc3RJbmRleCBdLmVsZW1lbnRbIDAgXSwgdGhpcy5pdGVtc1sgaiBdLml0ZW1bIDAgXSApXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggdGhpcy5pdGVtc1sgaiBdLml0ZW1bIDAgXSA9PT0gdGhpcy5jdXJyZW50SXRlbVsgMCBdICkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y3VyID0gdGhpcy5pdGVtc1sgaiBdLml0ZW0ub2Zmc2V0KClbIHBvc1Byb3BlcnR5IF07XG5cdFx0XHRcdG5lYXJCb3R0b20gPSBmYWxzZTtcblx0XHRcdFx0aWYgKCBldmVudFsgYXhpcyBdIC0gY3VyID4gdGhpcy5pdGVtc1sgaiBdWyBzaXplUHJvcGVydHkgXSAvIDIgKSB7XG5cdFx0XHRcdFx0bmVhckJvdHRvbSA9IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIE1hdGguYWJzKCBldmVudFsgYXhpcyBdIC0gY3VyICkgPCBkaXN0ICkge1xuXHRcdFx0XHRcdGRpc3QgPSBNYXRoLmFicyggZXZlbnRbIGF4aXMgXSAtIGN1ciApO1xuXHRcdFx0XHRcdGl0ZW1XaXRoTGVhc3REaXN0YW5jZSA9IHRoaXMuaXRlbXNbIGogXTtcblx0XHRcdFx0XHR0aGlzLmRpcmVjdGlvbiA9IG5lYXJCb3R0b20gPyBcInVwXCIgOiBcImRvd25cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvL0NoZWNrIGlmIGRyb3BPbkVtcHR5IGlzIGVuYWJsZWRcblx0XHRcdGlmICggIWl0ZW1XaXRoTGVhc3REaXN0YW5jZSAmJiAhdGhpcy5vcHRpb25zLmRyb3BPbkVtcHR5ICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdGhpcy5jdXJyZW50Q29udGFpbmVyID09PSB0aGlzLmNvbnRhaW5lcnNbIGlubmVybW9zdEluZGV4IF0gKSB7XG5cdFx0XHRcdGlmICggIXRoaXMuY3VycmVudENvbnRhaW5lci5jb250YWluZXJDYWNoZS5vdmVyICkge1xuXHRcdFx0XHRcdHRoaXMuY29udGFpbmVyc1sgaW5uZXJtb3N0SW5kZXggXS5fdHJpZ2dlciggXCJvdmVyXCIsIGV2ZW50LCB0aGlzLl91aUhhc2goKSApO1xuXHRcdFx0XHRcdHRoaXMuY3VycmVudENvbnRhaW5lci5jb250YWluZXJDYWNoZS5vdmVyID0gMTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGl0ZW1XaXRoTGVhc3REaXN0YW5jZSA/XG5cdFx0XHRcdHRoaXMuX3JlYXJyYW5nZSggZXZlbnQsIGl0ZW1XaXRoTGVhc3REaXN0YW5jZSwgbnVsbCwgdHJ1ZSApIDpcblx0XHRcdFx0dGhpcy5fcmVhcnJhbmdlKCBldmVudCwgbnVsbCwgdGhpcy5jb250YWluZXJzWyBpbm5lcm1vc3RJbmRleCBdLmVsZW1lbnQsIHRydWUgKTtcblx0XHRcdHRoaXMuX3RyaWdnZXIoIFwiY2hhbmdlXCIsIGV2ZW50LCB0aGlzLl91aUhhc2goKSApO1xuXHRcdFx0dGhpcy5jb250YWluZXJzWyBpbm5lcm1vc3RJbmRleCBdLl90cmlnZ2VyKCBcImNoYW5nZVwiLCBldmVudCwgdGhpcy5fdWlIYXNoKCB0aGlzICkgKTtcblx0XHRcdHRoaXMuY3VycmVudENvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyc1sgaW5uZXJtb3N0SW5kZXggXTtcblxuXHRcdFx0Ly9VcGRhdGUgdGhlIHBsYWNlaG9sZGVyXG5cdFx0XHR0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXIudXBkYXRlKCB0aGlzLmN1cnJlbnRDb250YWluZXIsIHRoaXMucGxhY2Vob2xkZXIgKTtcblxuXHRcdFx0dGhpcy5jb250YWluZXJzWyBpbm5lcm1vc3RJbmRleCBdLl90cmlnZ2VyKCBcIm92ZXJcIiwgZXZlbnQsIHRoaXMuX3VpSGFzaCggdGhpcyApICk7XG5cdFx0XHR0aGlzLmNvbnRhaW5lcnNbIGlubmVybW9zdEluZGV4IF0uY29udGFpbmVyQ2FjaGUub3ZlciA9IDE7XG5cdFx0fVxuXG5cdH0sXG5cblx0X2NyZWF0ZUhlbHBlcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0dmFyIG8gPSB0aGlzLm9wdGlvbnMsXG5cdFx0XHRoZWxwZXIgPSAkLmlzRnVuY3Rpb24oIG8uaGVscGVyICkgP1xuXHRcdFx0XHQkKCBvLmhlbHBlci5hcHBseSggdGhpcy5lbGVtZW50WyAwIF0sIFsgZXZlbnQsIHRoaXMuY3VycmVudEl0ZW0gXSApICkgOlxuXHRcdFx0XHQoIG8uaGVscGVyID09PSBcImNsb25lXCIgPyB0aGlzLmN1cnJlbnRJdGVtLmNsb25lKCkgOiB0aGlzLmN1cnJlbnRJdGVtICk7XG5cblx0XHQvL0FkZCB0aGUgaGVscGVyIHRvIHRoZSBET00gaWYgdGhhdCBkaWRuJ3QgaGFwcGVuIGFscmVhZHlcblx0XHRpZiAoICFoZWxwZXIucGFyZW50cyggXCJib2R5XCIgKS5sZW5ndGggKSB7XG5cdFx0XHQkKCBvLmFwcGVuZFRvICE9PSBcInBhcmVudFwiID9cblx0XHRcdFx0by5hcHBlbmRUbyA6XG5cdFx0XHRcdHRoaXMuY3VycmVudEl0ZW1bIDAgXS5wYXJlbnROb2RlIClbIDAgXS5hcHBlbmRDaGlsZCggaGVscGVyWyAwIF0gKTtcblx0XHR9XG5cblx0XHRpZiAoIGhlbHBlclsgMCBdID09PSB0aGlzLmN1cnJlbnRJdGVtWyAwIF0gKSB7XG5cdFx0XHR0aGlzLl9zdG9yZWRDU1MgPSB7XG5cdFx0XHRcdHdpZHRoOiB0aGlzLmN1cnJlbnRJdGVtWyAwIF0uc3R5bGUud2lkdGgsXG5cdFx0XHRcdGhlaWdodDogdGhpcy5jdXJyZW50SXRlbVsgMCBdLnN0eWxlLmhlaWdodCxcblx0XHRcdFx0cG9zaXRpb246IHRoaXMuY3VycmVudEl0ZW0uY3NzKCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdFx0dG9wOiB0aGlzLmN1cnJlbnRJdGVtLmNzcyggXCJ0b3BcIiApLFxuXHRcdFx0XHRsZWZ0OiB0aGlzLmN1cnJlbnRJdGVtLmNzcyggXCJsZWZ0XCIgKVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAoICFoZWxwZXJbIDAgXS5zdHlsZS53aWR0aCB8fCBvLmZvcmNlSGVscGVyU2l6ZSApIHtcblx0XHRcdGhlbHBlci53aWR0aCggdGhpcy5jdXJyZW50SXRlbS53aWR0aCgpICk7XG5cdFx0fVxuXHRcdGlmICggIWhlbHBlclsgMCBdLnN0eWxlLmhlaWdodCB8fCBvLmZvcmNlSGVscGVyU2l6ZSApIHtcblx0XHRcdGhlbHBlci5oZWlnaHQoIHRoaXMuY3VycmVudEl0ZW0uaGVpZ2h0KCkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaGVscGVyO1xuXG5cdH0sXG5cblx0X2FkanVzdE9mZnNldEZyb21IZWxwZXI6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0aWYgKCB0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0b2JqID0gb2JqLnNwbGl0KCBcIiBcIiApO1xuXHRcdH1cblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIG9iaiApICkge1xuXHRcdFx0b2JqID0geyBsZWZ0OiArb2JqWyAwIF0sIHRvcDogK29ialsgMSBdIHx8IDAgfTtcblx0XHR9XG5cdFx0aWYgKCBcImxlZnRcIiBpbiBvYmogKSB7XG5cdFx0XHR0aGlzLm9mZnNldC5jbGljay5sZWZ0ID0gb2JqLmxlZnQgKyB0aGlzLm1hcmdpbnMubGVmdDtcblx0XHR9XG5cdFx0aWYgKCBcInJpZ2h0XCIgaW4gb2JqICkge1xuXHRcdFx0dGhpcy5vZmZzZXQuY2xpY2subGVmdCA9IHRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLSBvYmoucmlnaHQgKyB0aGlzLm1hcmdpbnMubGVmdDtcblx0XHR9XG5cdFx0aWYgKCBcInRvcFwiIGluIG9iaiApIHtcblx0XHRcdHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA9IG9iai50b3AgKyB0aGlzLm1hcmdpbnMudG9wO1xuXHRcdH1cblx0XHRpZiAoIFwiYm90dG9tXCIgaW4gb2JqICkge1xuXHRcdFx0dGhpcy5vZmZzZXQuY2xpY2sudG9wID0gdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQgLSBvYmouYm90dG9tICsgdGhpcy5tYXJnaW5zLnRvcDtcblx0XHR9XG5cdH0sXG5cblx0X2dldFBhcmVudE9mZnNldDogZnVuY3Rpb24oKSB7XG5cblx0XHQvL0dldCB0aGUgb2Zmc2V0UGFyZW50IGFuZCBjYWNoZSBpdHMgcG9zaXRpb25cblx0XHR0aGlzLm9mZnNldFBhcmVudCA9IHRoaXMuaGVscGVyLm9mZnNldFBhcmVudCgpO1xuXHRcdHZhciBwbyA9IHRoaXMub2Zmc2V0UGFyZW50Lm9mZnNldCgpO1xuXG5cdFx0Ly8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB3aGVyZSB3ZSBuZWVkIHRvIG1vZGlmeSBhIG9mZnNldCBjYWxjdWxhdGVkIG9uIHN0YXJ0LCBzaW5jZSB0aGVcblx0XHQvLyBmb2xsb3dpbmcgaGFwcGVuZWQ6XG5cdFx0Ly8gMS4gVGhlIHBvc2l0aW9uIG9mIHRoZSBoZWxwZXIgaXMgYWJzb2x1dGUsIHNvIGl0J3MgcG9zaXRpb24gaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGVcblx0XHQvLyBuZXh0IHBvc2l0aW9uZWQgcGFyZW50XG5cdFx0Ly8gMi4gVGhlIGFjdHVhbCBvZmZzZXQgcGFyZW50IGlzIGEgY2hpbGQgb2YgdGhlIHNjcm9sbCBwYXJlbnQsIGFuZCB0aGUgc2Nyb2xsIHBhcmVudCBpc24ndFxuXHRcdC8vIHRoZSBkb2N1bWVudCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgc2Nyb2xsIGlzIGluY2x1ZGVkIGluIHRoZSBpbml0aWFsIGNhbGN1bGF0aW9uIG9mIHRoZVxuXHRcdC8vIG9mZnNldCBvZiB0aGUgcGFyZW50LCBhbmQgbmV2ZXIgcmVjYWxjdWxhdGVkIHVwb24gZHJhZ1xuXHRcdGlmICggdGhpcy5jc3NQb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiICYmIHRoaXMuc2Nyb2xsUGFyZW50WyAwIF0gIT09IHRoaXMuZG9jdW1lbnRbIDAgXSAmJlxuXHRcdFx0XHQkLmNvbnRhaW5zKCB0aGlzLnNjcm9sbFBhcmVudFsgMCBdLCB0aGlzLm9mZnNldFBhcmVudFsgMCBdICkgKSB7XG5cdFx0XHRwby5sZWZ0ICs9IHRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTtcblx0XHRcdHBvLnRvcCArPSB0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKTtcblx0XHR9XG5cblx0XHQvLyBUaGlzIG5lZWRzIHRvIGJlIGFjdHVhbGx5IGRvbmUgZm9yIGFsbCBicm93c2Vycywgc2luY2UgcGFnZVgvcGFnZVkgaW5jbHVkZXMgdGhpc1xuXHRcdC8vIGluZm9ybWF0aW9uIHdpdGggYW4gdWdseSBJRSBmaXhcblx0XHRpZiAoIHRoaXMub2Zmc2V0UGFyZW50WyAwIF0gPT09IHRoaXMuZG9jdW1lbnRbIDAgXS5ib2R5IHx8XG5cdFx0XHRcdCggdGhpcy5vZmZzZXRQYXJlbnRbIDAgXS50YWdOYW1lICYmXG5cdFx0XHRcdHRoaXMub2Zmc2V0UGFyZW50WyAwIF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImh0bWxcIiAmJiAkLnVpLmllICkgKSB7XG5cdFx0XHRwbyA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogcG8udG9wICsgKCBwYXJzZUludCggdGhpcy5vZmZzZXRQYXJlbnQuY3NzKCBcImJvcmRlclRvcFdpZHRoXCIgKSwgMTAgKSB8fCAwICksXG5cdFx0XHRsZWZ0OiBwby5sZWZ0ICsgKCBwYXJzZUludCggdGhpcy5vZmZzZXRQYXJlbnQuY3NzKCBcImJvcmRlckxlZnRXaWR0aFwiICksIDEwICkgfHwgMCApXG5cdFx0fTtcblxuXHR9LFxuXG5cdF9nZXRSZWxhdGl2ZU9mZnNldDogZnVuY3Rpb24oKSB7XG5cblx0XHRpZiAoIHRoaXMuY3NzUG9zaXRpb24gPT09IFwicmVsYXRpdmVcIiApIHtcblx0XHRcdHZhciBwID0gdGhpcy5jdXJyZW50SXRlbS5wb3NpdGlvbigpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dG9wOiBwLnRvcCAtICggcGFyc2VJbnQoIHRoaXMuaGVscGVyLmNzcyggXCJ0b3BcIiApLCAxMCApIHx8IDAgKSArXG5cdFx0XHRcdFx0dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCksXG5cdFx0XHRcdGxlZnQ6IHAubGVmdCAtICggcGFyc2VJbnQoIHRoaXMuaGVscGVyLmNzcyggXCJsZWZ0XCIgKSwgMTAgKSB8fCAwICkgK1xuXHRcdFx0XHRcdHRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cdFx0fVxuXG5cdH0sXG5cblx0X2NhY2hlTWFyZ2luczogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5tYXJnaW5zID0ge1xuXHRcdFx0bGVmdDogKCBwYXJzZUludCggdGhpcy5jdXJyZW50SXRlbS5jc3MoIFwibWFyZ2luTGVmdFwiICksIDEwICkgfHwgMCApLFxuXHRcdFx0dG9wOiAoIHBhcnNlSW50KCB0aGlzLmN1cnJlbnRJdGVtLmNzcyggXCJtYXJnaW5Ub3BcIiApLCAxMCApIHx8IDAgKVxuXHRcdH07XG5cdH0sXG5cblx0X2NhY2hlSGVscGVyUHJvcG9ydGlvbnM6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuaGVscGVyUHJvcG9ydGlvbnMgPSB7XG5cdFx0XHR3aWR0aDogdGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLFxuXHRcdFx0aGVpZ2h0OiB0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpXG5cdFx0fTtcblx0fSxcblxuXHRfc2V0Q29udGFpbm1lbnQ6IGZ1bmN0aW9uKCkge1xuXG5cdFx0dmFyIGNlLCBjbywgb3Zlcixcblx0XHRcdG8gPSB0aGlzLm9wdGlvbnM7XG5cdFx0aWYgKCBvLmNvbnRhaW5tZW50ID09PSBcInBhcmVudFwiICkge1xuXHRcdFx0by5jb250YWlubWVudCA9IHRoaXMuaGVscGVyWyAwIF0ucGFyZW50Tm9kZTtcblx0XHR9XG5cdFx0aWYgKCBvLmNvbnRhaW5tZW50ID09PSBcImRvY3VtZW50XCIgfHwgby5jb250YWlubWVudCA9PT0gXCJ3aW5kb3dcIiApIHtcblx0XHRcdHRoaXMuY29udGFpbm1lbnQgPSBbXG5cdFx0XHRcdDAgLSB0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0IC0gdGhpcy5vZmZzZXQucGFyZW50LmxlZnQsXG5cdFx0XHRcdDAgLSB0aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AgLSB0aGlzLm9mZnNldC5wYXJlbnQudG9wLFxuXHRcdFx0XHRvLmNvbnRhaW5tZW50ID09PSBcImRvY3VtZW50XCIgP1xuXHRcdFx0XHRcdHRoaXMuZG9jdW1lbnQud2lkdGgoKSA6XG5cdFx0XHRcdFx0dGhpcy53aW5kb3cud2lkdGgoKSAtIHRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLSB0aGlzLm1hcmdpbnMubGVmdCxcblx0XHRcdFx0KCBvLmNvbnRhaW5tZW50ID09PSBcImRvY3VtZW50XCIgP1xuXHRcdFx0XHRcdCggdGhpcy5kb2N1bWVudC5oZWlnaHQoKSB8fCBkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0ICkgOlxuXHRcdFx0XHRcdHRoaXMud2luZG93LmhlaWdodCgpIHx8IHRoaXMuZG9jdW1lbnRbIDAgXS5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0XG5cdFx0XHRcdCkgLSB0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCAtIHRoaXMubWFyZ2lucy50b3Bcblx0XHRcdF07XG5cdFx0fVxuXG5cdFx0aWYgKCAhKCAvXihkb2N1bWVudHx3aW5kb3d8cGFyZW50KSQvICkudGVzdCggby5jb250YWlubWVudCApICkge1xuXHRcdFx0Y2UgPSAkKCBvLmNvbnRhaW5tZW50IClbIDAgXTtcblx0XHRcdGNvID0gJCggby5jb250YWlubWVudCApLm9mZnNldCgpO1xuXHRcdFx0b3ZlciA9ICggJCggY2UgKS5jc3MoIFwib3ZlcmZsb3dcIiApICE9PSBcImhpZGRlblwiICk7XG5cblx0XHRcdHRoaXMuY29udGFpbm1lbnQgPSBbXG5cdFx0XHRcdGNvLmxlZnQgKyAoIHBhcnNlSW50KCAkKCBjZSApLmNzcyggXCJib3JkZXJMZWZ0V2lkdGhcIiApLCAxMCApIHx8IDAgKSArXG5cdFx0XHRcdFx0KCBwYXJzZUludCggJCggY2UgKS5jc3MoIFwicGFkZGluZ0xlZnRcIiApLCAxMCApIHx8IDAgKSAtIHRoaXMubWFyZ2lucy5sZWZ0LFxuXHRcdFx0XHRjby50b3AgKyAoIHBhcnNlSW50KCAkKCBjZSApLmNzcyggXCJib3JkZXJUb3BXaWR0aFwiICksIDEwICkgfHwgMCApICtcblx0XHRcdFx0XHQoIHBhcnNlSW50KCAkKCBjZSApLmNzcyggXCJwYWRkaW5nVG9wXCIgKSwgMTAgKSB8fCAwICkgLSB0aGlzLm1hcmdpbnMudG9wLFxuXHRcdFx0XHRjby5sZWZ0ICsgKCBvdmVyID8gTWF0aC5tYXgoIGNlLnNjcm9sbFdpZHRoLCBjZS5vZmZzZXRXaWR0aCApIDogY2Uub2Zmc2V0V2lkdGggKSAtXG5cdFx0XHRcdFx0KCBwYXJzZUludCggJCggY2UgKS5jc3MoIFwiYm9yZGVyTGVmdFdpZHRoXCIgKSwgMTAgKSB8fCAwICkgLVxuXHRcdFx0XHRcdCggcGFyc2VJbnQoICQoIGNlICkuY3NzKCBcInBhZGRpbmdSaWdodFwiICksIDEwICkgfHwgMCApIC1cblx0XHRcdFx0XHR0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoIC0gdGhpcy5tYXJnaW5zLmxlZnQsXG5cdFx0XHRcdGNvLnRvcCArICggb3ZlciA/IE1hdGgubWF4KCBjZS5zY3JvbGxIZWlnaHQsIGNlLm9mZnNldEhlaWdodCApIDogY2Uub2Zmc2V0SGVpZ2h0ICkgLVxuXHRcdFx0XHRcdCggcGFyc2VJbnQoICQoIGNlICkuY3NzKCBcImJvcmRlclRvcFdpZHRoXCIgKSwgMTAgKSB8fCAwICkgLVxuXHRcdFx0XHRcdCggcGFyc2VJbnQoICQoIGNlICkuY3NzKCBcInBhZGRpbmdCb3R0b21cIiApLCAxMCApIHx8IDAgKSAtXG5cdFx0XHRcdFx0dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQgLSB0aGlzLm1hcmdpbnMudG9wXG5cdFx0XHRdO1xuXHRcdH1cblxuXHR9LFxuXG5cdF9jb252ZXJ0UG9zaXRpb25UbzogZnVuY3Rpb24oIGQsIHBvcyApIHtcblxuXHRcdGlmICggIXBvcyApIHtcblx0XHRcdHBvcyA9IHRoaXMucG9zaXRpb247XG5cdFx0fVxuXHRcdHZhciBtb2QgPSBkID09PSBcImFic29sdXRlXCIgPyAxIDogLTEsXG5cdFx0XHRzY3JvbGwgPSB0aGlzLmNzc1Bvc2l0aW9uID09PSBcImFic29sdXRlXCIgJiZcblx0XHRcdFx0ISggdGhpcy5zY3JvbGxQYXJlbnRbIDAgXSAhPT0gdGhpcy5kb2N1bWVudFsgMCBdICYmXG5cdFx0XHRcdCQuY29udGFpbnMoIHRoaXMuc2Nyb2xsUGFyZW50WyAwIF0sIHRoaXMub2Zmc2V0UGFyZW50WyAwIF0gKSApID9cblx0XHRcdFx0XHR0aGlzLm9mZnNldFBhcmVudCA6XG5cdFx0XHRcdFx0dGhpcy5zY3JvbGxQYXJlbnQsXG5cdFx0XHRzY3JvbGxJc1Jvb3ROb2RlID0gKCAvKGh0bWx8Ym9keSkvaSApLnRlc3QoIHNjcm9sbFsgMCBdLnRhZ05hbWUgKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IChcblxuXHRcdFx0XHQvLyBUaGUgYWJzb2x1dGUgbW91c2UgcG9zaXRpb25cblx0XHRcdFx0cG9zLnRvcFx0K1xuXG5cdFx0XHRcdC8vIE9ubHkgZm9yIHJlbGF0aXZlIHBvc2l0aW9uZWQgbm9kZXM6IFJlbGF0aXZlIG9mZnNldCBmcm9tIGVsZW1lbnQgdG8gb2Zmc2V0IHBhcmVudFxuXHRcdFx0XHR0aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AgKiBtb2QgK1xuXG5cdFx0XHRcdC8vIFRoZSBvZmZzZXRQYXJlbnQncyBvZmZzZXQgd2l0aG91dCBib3JkZXJzIChvZmZzZXQgKyBib3JkZXIpXG5cdFx0XHRcdHRoaXMub2Zmc2V0LnBhcmVudC50b3AgKiBtb2QgLVxuXHRcdFx0XHQoICggdGhpcy5jc3NQb3NpdGlvbiA9PT0gXCJmaXhlZFwiID9cblx0XHRcdFx0XHQtdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCkgOlxuXHRcdFx0XHRcdCggc2Nyb2xsSXNSb290Tm9kZSA/IDAgOiBzY3JvbGwuc2Nyb2xsVG9wKCkgKSApICogbW9kIClcblx0XHRcdCksXG5cdFx0XHRsZWZ0OiAoXG5cblx0XHRcdFx0Ly8gVGhlIGFic29sdXRlIG1vdXNlIHBvc2l0aW9uXG5cdFx0XHRcdHBvcy5sZWZ0ICtcblxuXHRcdFx0XHQvLyBPbmx5IGZvciByZWxhdGl2ZSBwb3NpdGlvbmVkIG5vZGVzOiBSZWxhdGl2ZSBvZmZzZXQgZnJvbSBlbGVtZW50IHRvIG9mZnNldCBwYXJlbnRcblx0XHRcdFx0dGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdCAqIG1vZCArXG5cblx0XHRcdFx0Ly8gVGhlIG9mZnNldFBhcmVudCdzIG9mZnNldCB3aXRob3V0IGJvcmRlcnMgKG9mZnNldCArIGJvcmRlcilcblx0XHRcdFx0dGhpcy5vZmZzZXQucGFyZW50LmxlZnQgKiBtb2RcdC1cblx0XHRcdFx0KCAoIHRoaXMuY3NzUG9zaXRpb24gPT09IFwiZml4ZWRcIiA/XG5cdFx0XHRcdFx0LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKSA6IHNjcm9sbElzUm9vdE5vZGUgPyAwIDpcblx0XHRcdFx0XHRzY3JvbGwuc2Nyb2xsTGVmdCgpICkgKiBtb2QgKVxuXHRcdFx0KVxuXHRcdH07XG5cblx0fSxcblxuXHRfZ2VuZXJhdGVQb3NpdGlvbjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0dmFyIHRvcCwgbGVmdCxcblx0XHRcdG8gPSB0aGlzLm9wdGlvbnMsXG5cdFx0XHRwYWdlWCA9IGV2ZW50LnBhZ2VYLFxuXHRcdFx0cGFnZVkgPSBldmVudC5wYWdlWSxcblx0XHRcdHNjcm9sbCA9IHRoaXMuY3NzUG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiAmJlxuXHRcdFx0XHQhKCB0aGlzLnNjcm9sbFBhcmVudFsgMCBdICE9PSB0aGlzLmRvY3VtZW50WyAwIF0gJiZcblx0XHRcdFx0JC5jb250YWlucyggdGhpcy5zY3JvbGxQYXJlbnRbIDAgXSwgdGhpcy5vZmZzZXRQYXJlbnRbIDAgXSApICkgP1xuXHRcdFx0XHRcdHRoaXMub2Zmc2V0UGFyZW50IDpcblx0XHRcdFx0XHR0aGlzLnNjcm9sbFBhcmVudCxcblx0XHRcdFx0c2Nyb2xsSXNSb290Tm9kZSA9ICggLyhodG1sfGJvZHkpL2kgKS50ZXN0KCBzY3JvbGxbIDAgXS50YWdOYW1lICk7XG5cblx0XHQvLyBUaGlzIGlzIGFub3RoZXIgdmVyeSB3ZWlyZCBzcGVjaWFsIGNhc2UgdGhhdCBvbmx5IGhhcHBlbnMgZm9yIHJlbGF0aXZlIGVsZW1lbnRzOlxuXHRcdC8vIDEuIElmIHRoZSBjc3MgcG9zaXRpb24gaXMgcmVsYXRpdmVcblx0XHQvLyAyLiBhbmQgdGhlIHNjcm9sbCBwYXJlbnQgaXMgdGhlIGRvY3VtZW50IG9yIHNpbWlsYXIgdG8gdGhlIG9mZnNldCBwYXJlbnRcblx0XHQvLyB3ZSBoYXZlIHRvIHJlZnJlc2ggdGhlIHJlbGF0aXZlIG9mZnNldCBkdXJpbmcgdGhlIHNjcm9sbCBzbyB0aGVyZSBhcmUgbm8ganVtcHNcblx0XHRpZiAoIHRoaXMuY3NzUG9zaXRpb24gPT09IFwicmVsYXRpdmVcIiAmJiAhKCB0aGlzLnNjcm9sbFBhcmVudFsgMCBdICE9PSB0aGlzLmRvY3VtZW50WyAwIF0gJiZcblx0XHRcdFx0dGhpcy5zY3JvbGxQYXJlbnRbIDAgXSAhPT0gdGhpcy5vZmZzZXRQYXJlbnRbIDAgXSApICkge1xuXHRcdFx0dGhpcy5vZmZzZXQucmVsYXRpdmUgPSB0aGlzLl9nZXRSZWxhdGl2ZU9mZnNldCgpO1xuXHRcdH1cblxuXHRcdC8qXG5cdFx0ICogLSBQb3NpdGlvbiBjb25zdHJhaW5pbmcgLVxuXHRcdCAqIENvbnN0cmFpbiB0aGUgcG9zaXRpb24gdG8gYSBtaXggb2YgZ3JpZCwgY29udGFpbm1lbnQuXG5cdFx0ICovXG5cblx0XHRpZiAoIHRoaXMub3JpZ2luYWxQb3NpdGlvbiApIHsgLy9JZiB3ZSBhcmUgbm90IGRyYWdnaW5nIHlldCwgd2Ugd29uJ3QgY2hlY2sgZm9yIG9wdGlvbnNcblxuXHRcdFx0aWYgKCB0aGlzLmNvbnRhaW5tZW50ICkge1xuXHRcdFx0XHRpZiAoIGV2ZW50LnBhZ2VYIC0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCA8IHRoaXMuY29udGFpbm1lbnRbIDAgXSApIHtcblx0XHRcdFx0XHRwYWdlWCA9IHRoaXMuY29udGFpbm1lbnRbIDAgXSArIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBldmVudC5wYWdlWSAtIHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA8IHRoaXMuY29udGFpbm1lbnRbIDEgXSApIHtcblx0XHRcdFx0XHRwYWdlWSA9IHRoaXMuY29udGFpbm1lbnRbIDEgXSArIHRoaXMub2Zmc2V0LmNsaWNrLnRvcDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIGV2ZW50LnBhZ2VYIC0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCA+IHRoaXMuY29udGFpbm1lbnRbIDIgXSApIHtcblx0XHRcdFx0XHRwYWdlWCA9IHRoaXMuY29udGFpbm1lbnRbIDIgXSArIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBldmVudC5wYWdlWSAtIHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA+IHRoaXMuY29udGFpbm1lbnRbIDMgXSApIHtcblx0XHRcdFx0XHRwYWdlWSA9IHRoaXMuY29udGFpbm1lbnRbIDMgXSArIHRoaXMub2Zmc2V0LmNsaWNrLnRvcDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIG8uZ3JpZCApIHtcblx0XHRcdFx0dG9wID0gdGhpcy5vcmlnaW5hbFBhZ2VZICsgTWF0aC5yb3VuZCggKCBwYWdlWSAtIHRoaXMub3JpZ2luYWxQYWdlWSApIC9cblx0XHRcdFx0XHRvLmdyaWRbIDEgXSApICogby5ncmlkWyAxIF07XG5cdFx0XHRcdHBhZ2VZID0gdGhpcy5jb250YWlubWVudCA/XG5cdFx0XHRcdFx0KCAoIHRvcCAtIHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA+PSB0aGlzLmNvbnRhaW5tZW50WyAxIF0gJiZcblx0XHRcdFx0XHRcdHRvcCAtIHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA8PSB0aGlzLmNvbnRhaW5tZW50WyAzIF0gKSA/XG5cdFx0XHRcdFx0XHRcdHRvcCA6XG5cdFx0XHRcdFx0XHRcdCggKCB0b3AgLSB0aGlzLm9mZnNldC5jbGljay50b3AgPj0gdGhpcy5jb250YWlubWVudFsgMSBdICkgP1xuXHRcdFx0XHRcdFx0XHRcdHRvcCAtIG8uZ3JpZFsgMSBdIDogdG9wICsgby5ncmlkWyAxIF0gKSApIDpcblx0XHRcdFx0XHRcdFx0XHR0b3A7XG5cblx0XHRcdFx0bGVmdCA9IHRoaXMub3JpZ2luYWxQYWdlWCArIE1hdGgucm91bmQoICggcGFnZVggLSB0aGlzLm9yaWdpbmFsUGFnZVggKSAvXG5cdFx0XHRcdFx0by5ncmlkWyAwIF0gKSAqIG8uZ3JpZFsgMCBdO1xuXHRcdFx0XHRwYWdlWCA9IHRoaXMuY29udGFpbm1lbnQgP1xuXHRcdFx0XHRcdCggKCBsZWZ0IC0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCA+PSB0aGlzLmNvbnRhaW5tZW50WyAwIF0gJiZcblx0XHRcdFx0XHRcdGxlZnQgLSB0aGlzLm9mZnNldC5jbGljay5sZWZ0IDw9IHRoaXMuY29udGFpbm1lbnRbIDIgXSApID9cblx0XHRcdFx0XHRcdFx0bGVmdCA6XG5cdFx0XHRcdFx0XHRcdCggKCBsZWZ0IC0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCA+PSB0aGlzLmNvbnRhaW5tZW50WyAwIF0gKSA/XG5cdFx0XHRcdFx0XHRcdFx0bGVmdCAtIG8uZ3JpZFsgMCBdIDogbGVmdCArIG8uZ3JpZFsgMCBdICkgKSA6XG5cdFx0XHRcdFx0XHRcdFx0bGVmdDtcblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IChcblxuXHRcdFx0XHQvLyBUaGUgYWJzb2x1dGUgbW91c2UgcG9zaXRpb25cblx0XHRcdFx0cGFnZVkgLVxuXG5cdFx0XHRcdC8vIENsaWNrIG9mZnNldCAocmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQpXG5cdFx0XHRcdHRoaXMub2Zmc2V0LmNsaWNrLnRvcCAtXG5cblx0XHRcdFx0Ly8gT25seSBmb3IgcmVsYXRpdmUgcG9zaXRpb25lZCBub2RlczogUmVsYXRpdmUgb2Zmc2V0IGZyb20gZWxlbWVudCB0byBvZmZzZXQgcGFyZW50XG5cdFx0XHRcdHRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcCAtXG5cblx0XHRcdFx0Ly8gVGhlIG9mZnNldFBhcmVudCdzIG9mZnNldCB3aXRob3V0IGJvcmRlcnMgKG9mZnNldCArIGJvcmRlcilcblx0XHRcdFx0dGhpcy5vZmZzZXQucGFyZW50LnRvcCArXG5cdFx0XHRcdCggKCB0aGlzLmNzc1Bvc2l0aW9uID09PSBcImZpeGVkXCIgP1xuXHRcdFx0XHRcdC10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSA6XG5cdFx0XHRcdFx0KCBzY3JvbGxJc1Jvb3ROb2RlID8gMCA6IHNjcm9sbC5zY3JvbGxUb3AoKSApICkgKVxuXHRcdFx0KSxcblx0XHRcdGxlZnQ6IChcblxuXHRcdFx0XHQvLyBUaGUgYWJzb2x1dGUgbW91c2UgcG9zaXRpb25cblx0XHRcdFx0cGFnZVggLVxuXG5cdFx0XHRcdC8vIENsaWNrIG9mZnNldCAocmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQpXG5cdFx0XHRcdHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQgLVxuXG5cdFx0XHRcdC8vIE9ubHkgZm9yIHJlbGF0aXZlIHBvc2l0aW9uZWQgbm9kZXM6IFJlbGF0aXZlIG9mZnNldCBmcm9tIGVsZW1lbnQgdG8gb2Zmc2V0IHBhcmVudFxuXHRcdFx0XHR0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0IC1cblxuXHRcdFx0XHQvLyBUaGUgb2Zmc2V0UGFyZW50J3Mgb2Zmc2V0IHdpdGhvdXQgYm9yZGVycyAob2Zmc2V0ICsgYm9yZGVyKVxuXHRcdFx0XHR0aGlzLm9mZnNldC5wYXJlbnQubGVmdCArXG5cdFx0XHRcdCggKCB0aGlzLmNzc1Bvc2l0aW9uID09PSBcImZpeGVkXCIgP1xuXHRcdFx0XHRcdC10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCkgOlxuXHRcdFx0XHRcdHNjcm9sbElzUm9vdE5vZGUgPyAwIDogc2Nyb2xsLnNjcm9sbExlZnQoKSApIClcblx0XHRcdClcblx0XHR9O1xuXG5cdH0sXG5cblx0X3JlYXJyYW5nZTogZnVuY3Rpb24oIGV2ZW50LCBpLCBhLCBoYXJkUmVmcmVzaCApIHtcblxuXHRcdGEgPyBhWyAwIF0uYXBwZW5kQ2hpbGQoIHRoaXMucGxhY2Vob2xkZXJbIDAgXSApIDpcblx0XHRcdGkuaXRlbVsgMCBdLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCB0aGlzLnBsYWNlaG9sZGVyWyAwIF0sXG5cdFx0XHRcdCggdGhpcy5kaXJlY3Rpb24gPT09IFwiZG93blwiID8gaS5pdGVtWyAwIF0gOiBpLml0ZW1bIDAgXS5uZXh0U2libGluZyApICk7XG5cblx0XHQvL1ZhcmlvdXMgdGhpbmdzIGRvbmUgaGVyZSB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZTpcblx0XHQvLyAxLiB3ZSBjcmVhdGUgYSBzZXRUaW1lb3V0LCB0aGF0IGNhbGxzIHJlZnJlc2hQb3NpdGlvbnNcblx0XHQvLyAyLiBvbiB0aGUgaW5zdGFuY2UsIHdlIGhhdmUgYSBjb3VudGVyIHZhcmlhYmxlLCB0aGF0IGdldCdzIGhpZ2hlciBhZnRlciBldmVyeSBhcHBlbmRcblx0XHQvLyAzLiBvbiB0aGUgbG9jYWwgc2NvcGUsIHdlIGNvcHkgdGhlIGNvdW50ZXIgdmFyaWFibGUsIGFuZCBjaGVjayBpbiB0aGUgdGltZW91dCxcblx0XHQvLyBpZiBpdCdzIHN0aWxsIHRoZSBzYW1lXG5cdFx0Ly8gNC4gdGhpcyBsZXRzIG9ubHkgdGhlIGxhc3QgYWRkaXRpb24gdG8gdGhlIHRpbWVvdXQgc3RhY2sgdGhyb3VnaFxuXHRcdHRoaXMuY291bnRlciA9IHRoaXMuY291bnRlciA/ICsrdGhpcy5jb3VudGVyIDogMTtcblx0XHR2YXIgY291bnRlciA9IHRoaXMuY291bnRlcjtcblxuXHRcdHRoaXMuX2RlbGF5KCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggY291bnRlciA9PT0gdGhpcy5jb3VudGVyICkge1xuXG5cdFx0XHRcdC8vUHJlY29tcHV0ZSBhZnRlciBlYWNoIERPTSBpbnNlcnRpb24sIE5PVCBvbiBtb3VzZW1vdmVcblx0XHRcdFx0dGhpcy5yZWZyZXNoUG9zaXRpb25zKCAhaGFyZFJlZnJlc2ggKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0fSxcblxuXHRfY2xlYXI6IGZ1bmN0aW9uKCBldmVudCwgbm9Qcm9wYWdhdGlvbiApIHtcblxuXHRcdHRoaXMucmV2ZXJ0aW5nID0gZmFsc2U7XG5cblx0XHQvLyBXZSBkZWxheSBhbGwgZXZlbnRzIHRoYXQgaGF2ZSB0byBiZSB0cmlnZ2VyZWQgdG8gYWZ0ZXIgdGhlIHBvaW50IHdoZXJlIHRoZSBwbGFjZWhvbGRlclxuXHRcdC8vIGhhcyBiZWVuIHJlbW92ZWQgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBub3JtYWxpemVkIGFnYWluXG5cdFx0dmFyIGksXG5cdFx0XHRkZWxheWVkVHJpZ2dlcnMgPSBbXTtcblxuXHRcdC8vIFdlIGZpcnN0IGhhdmUgdG8gdXBkYXRlIHRoZSBkb20gcG9zaXRpb24gb2YgdGhlIGFjdHVhbCBjdXJyZW50SXRlbVxuXHRcdC8vIE5vdGU6IGRvbid0IGRvIGl0IGlmIHRoZSBjdXJyZW50IGl0ZW0gaXMgYWxyZWFkeSByZW1vdmVkIChieSBhIHVzZXIpLCBvciBpdCBnZXRzXG5cdFx0Ly8gcmVhcHBlbmRlZCAoc2VlICM0MDg4KVxuXHRcdGlmICggIXRoaXMuX25vRmluYWxTb3J0ICYmIHRoaXMuY3VycmVudEl0ZW0ucGFyZW50KCkubGVuZ3RoICkge1xuXHRcdFx0dGhpcy5wbGFjZWhvbGRlci5iZWZvcmUoIHRoaXMuY3VycmVudEl0ZW0gKTtcblx0XHR9XG5cdFx0dGhpcy5fbm9GaW5hbFNvcnQgPSBudWxsO1xuXG5cdFx0aWYgKCB0aGlzLmhlbHBlclsgMCBdID09PSB0aGlzLmN1cnJlbnRJdGVtWyAwIF0gKSB7XG5cdFx0XHRmb3IgKCBpIGluIHRoaXMuX3N0b3JlZENTUyApIHtcblx0XHRcdFx0aWYgKCB0aGlzLl9zdG9yZWRDU1NbIGkgXSA9PT0gXCJhdXRvXCIgfHwgdGhpcy5fc3RvcmVkQ1NTWyBpIF0gPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRcdFx0dGhpcy5fc3RvcmVkQ1NTWyBpIF0gPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmN1cnJlbnRJdGVtLmNzcyggdGhpcy5fc3RvcmVkQ1NTICk7XG5cdFx0XHR0aGlzLl9yZW1vdmVDbGFzcyggdGhpcy5jdXJyZW50SXRlbSwgXCJ1aS1zb3J0YWJsZS1oZWxwZXJcIiApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmN1cnJlbnRJdGVtLnNob3coKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuZnJvbU91dHNpZGUgJiYgIW5vUHJvcGFnYXRpb24gKSB7XG5cdFx0XHRkZWxheWVkVHJpZ2dlcnMucHVzaCggZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHR0aGlzLl90cmlnZ2VyKCBcInJlY2VpdmVcIiwgZXZlbnQsIHRoaXMuX3VpSGFzaCggdGhpcy5mcm9tT3V0c2lkZSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXHRcdGlmICggKCB0aGlzLmZyb21PdXRzaWRlIHx8XG5cdFx0XHRcdHRoaXMuZG9tUG9zaXRpb24ucHJldiAhPT1cblx0XHRcdFx0dGhpcy5jdXJyZW50SXRlbS5wcmV2KCkubm90KCBcIi51aS1zb3J0YWJsZS1oZWxwZXJcIiApWyAwIF0gfHxcblx0XHRcdFx0dGhpcy5kb21Qb3NpdGlvbi5wYXJlbnQgIT09IHRoaXMuY3VycmVudEl0ZW0ucGFyZW50KClbIDAgXSApICYmICFub1Byb3BhZ2F0aW9uICkge1xuXG5cdFx0XHQvLyBUcmlnZ2VyIHVwZGF0ZSBjYWxsYmFjayBpZiB0aGUgRE9NIHBvc2l0aW9uIGhhcyBjaGFuZ2VkXG5cdFx0XHRkZWxheWVkVHJpZ2dlcnMucHVzaCggZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHR0aGlzLl90cmlnZ2VyKCBcInVwZGF0ZVwiLCBldmVudCwgdGhpcy5fdWlIYXNoKCkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgaXRlbXMgQ29udGFpbmVyIGhhcyBDaGFuZ2VkIGFuZCB0cmlnZ2VyIGFwcHJvcHJpYXRlXG5cdFx0Ly8gZXZlbnRzLlxuXHRcdGlmICggdGhpcyAhPT0gdGhpcy5jdXJyZW50Q29udGFpbmVyICkge1xuXHRcdFx0aWYgKCAhbm9Qcm9wYWdhdGlvbiApIHtcblx0XHRcdFx0ZGVsYXllZFRyaWdnZXJzLnB1c2goIGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0XHR0aGlzLl90cmlnZ2VyKCBcInJlbW92ZVwiLCBldmVudCwgdGhpcy5fdWlIYXNoKCkgKTtcblx0XHRcdFx0fSApO1xuXHRcdFx0XHRkZWxheWVkVHJpZ2dlcnMucHVzaCggKCBmdW5jdGlvbiggYyApIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHRcdFx0Yy5fdHJpZ2dlciggXCJyZWNlaXZlXCIsIGV2ZW50LCB0aGlzLl91aUhhc2goIHRoaXMgKSApO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gKS5jYWxsKCB0aGlzLCB0aGlzLmN1cnJlbnRDb250YWluZXIgKSApO1xuXHRcdFx0XHRkZWxheWVkVHJpZ2dlcnMucHVzaCggKCBmdW5jdGlvbiggYyApIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHRcdFx0Yy5fdHJpZ2dlciggXCJ1cGRhdGVcIiwgZXZlbnQsIHRoaXMuX3VpSGFzaCggdGhpcyApICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSApLmNhbGwoIHRoaXMsIHRoaXMuY3VycmVudENvbnRhaW5lciApICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly9Qb3N0IGV2ZW50cyB0byBjb250YWluZXJzXG5cdFx0ZnVuY3Rpb24gZGVsYXlFdmVudCggdHlwZSwgaW5zdGFuY2UsIGNvbnRhaW5lciApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdGNvbnRhaW5lci5fdHJpZ2dlciggdHlwZSwgZXZlbnQsIGluc3RhbmNlLl91aUhhc2goIGluc3RhbmNlICkgKTtcblx0XHRcdH07XG5cdFx0fVxuXHRcdGZvciAoIGkgPSB0aGlzLmNvbnRhaW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0gKSB7XG5cdFx0XHRpZiAoICFub1Byb3BhZ2F0aW9uICkge1xuXHRcdFx0XHRkZWxheWVkVHJpZ2dlcnMucHVzaCggZGVsYXlFdmVudCggXCJkZWFjdGl2YXRlXCIsIHRoaXMsIHRoaXMuY29udGFpbmVyc1sgaSBdICkgKTtcblx0XHRcdH1cblx0XHRcdGlmICggdGhpcy5jb250YWluZXJzWyBpIF0uY29udGFpbmVyQ2FjaGUub3ZlciApIHtcblx0XHRcdFx0ZGVsYXllZFRyaWdnZXJzLnB1c2goIGRlbGF5RXZlbnQoIFwib3V0XCIsIHRoaXMsIHRoaXMuY29udGFpbmVyc1sgaSBdICkgKTtcblx0XHRcdFx0dGhpcy5jb250YWluZXJzWyBpIF0uY29udGFpbmVyQ2FjaGUub3ZlciA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly9EbyB3aGF0IHdhcyBvcmlnaW5hbGx5IGluIHBsdWdpbnNcblx0XHRpZiAoIHRoaXMuc3RvcmVkQ3Vyc29yICkge1xuXHRcdFx0dGhpcy5kb2N1bWVudC5maW5kKCBcImJvZHlcIiApLmNzcyggXCJjdXJzb3JcIiwgdGhpcy5zdG9yZWRDdXJzb3IgKTtcblx0XHRcdHRoaXMuc3RvcmVkU3R5bGVzaGVldC5yZW1vdmUoKTtcblx0XHR9XG5cdFx0aWYgKCB0aGlzLl9zdG9yZWRPcGFjaXR5ICkge1xuXHRcdFx0dGhpcy5oZWxwZXIuY3NzKCBcIm9wYWNpdHlcIiwgdGhpcy5fc3RvcmVkT3BhY2l0eSApO1xuXHRcdH1cblx0XHRpZiAoIHRoaXMuX3N0b3JlZFpJbmRleCApIHtcblx0XHRcdHRoaXMuaGVscGVyLmNzcyggXCJ6SW5kZXhcIiwgdGhpcy5fc3RvcmVkWkluZGV4ID09PSBcImF1dG9cIiA/IFwiXCIgOiB0aGlzLl9zdG9yZWRaSW5kZXggKTtcblx0XHR9XG5cblx0XHR0aGlzLmRyYWdnaW5nID0gZmFsc2U7XG5cblx0XHRpZiAoICFub1Byb3BhZ2F0aW9uICkge1xuXHRcdFx0dGhpcy5fdHJpZ2dlciggXCJiZWZvcmVTdG9wXCIsIGV2ZW50LCB0aGlzLl91aUhhc2goKSApO1xuXHRcdH1cblxuXHRcdC8vJCh0aGlzLnBsYWNlaG9sZGVyWzBdKS5yZW1vdmUoKTsgd291bGQgaGF2ZSBiZWVuIHRoZSBqUXVlcnkgd2F5IC0gdW5mb3J0dW5hdGVseSxcblx0XHQvLyBpdCB1bmJpbmRzIEFMTCBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgbm9kZSFcblx0XHR0aGlzLnBsYWNlaG9sZGVyWyAwIF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGhpcy5wbGFjZWhvbGRlclsgMCBdICk7XG5cblx0XHRpZiAoICF0aGlzLmNhbmNlbEhlbHBlclJlbW92YWwgKSB7XG5cdFx0XHRpZiAoIHRoaXMuaGVscGVyWyAwIF0gIT09IHRoaXMuY3VycmVudEl0ZW1bIDAgXSApIHtcblx0XHRcdFx0dGhpcy5oZWxwZXIucmVtb3ZlKCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmhlbHBlciA9IG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKCAhbm9Qcm9wYWdhdGlvbiApIHtcblx0XHRcdGZvciAoIGkgPSAwOyBpIDwgZGVsYXllZFRyaWdnZXJzLmxlbmd0aDsgaSsrICkge1xuXG5cdFx0XHRcdC8vIFRyaWdnZXIgYWxsIGRlbGF5ZWQgZXZlbnRzXG5cdFx0XHRcdGRlbGF5ZWRUcmlnZ2Vyc1sgaSBdLmNhbGwoIHRoaXMsIGV2ZW50ICk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl90cmlnZ2VyKCBcInN0b3BcIiwgZXZlbnQsIHRoaXMuX3VpSGFzaCgpICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5mcm9tT3V0c2lkZSA9IGZhbHNlO1xuXHRcdHJldHVybiAhdGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsO1xuXG5cdH0sXG5cblx0X3RyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggJC5XaWRnZXQucHJvdG90eXBlLl90cmlnZ2VyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHR0aGlzLmNhbmNlbCgpO1xuXHRcdH1cblx0fSxcblxuXHRfdWlIYXNoOiBmdW5jdGlvbiggX2luc3QgKSB7XG5cdFx0dmFyIGluc3QgPSBfaW5zdCB8fCB0aGlzO1xuXHRcdHJldHVybiB7XG5cdFx0XHRoZWxwZXI6IGluc3QuaGVscGVyLFxuXHRcdFx0cGxhY2Vob2xkZXI6IGluc3QucGxhY2Vob2xkZXIgfHwgJCggW10gKSxcblx0XHRcdHBvc2l0aW9uOiBpbnN0LnBvc2l0aW9uLFxuXHRcdFx0b3JpZ2luYWxQb3NpdGlvbjogaW5zdC5vcmlnaW5hbFBvc2l0aW9uLFxuXHRcdFx0b2Zmc2V0OiBpbnN0LnBvc2l0aW9uQWJzLFxuXHRcdFx0aXRlbTogaW5zdC5jdXJyZW50SXRlbSxcblx0XHRcdHNlbmRlcjogX2luc3QgPyBfaW5zdC5lbGVtZW50IDogbnVsbFxuXHRcdH07XG5cdH1cblxufSApO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIFNwaW5uZXIgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IFNwaW5uZXJcbi8vPj5ncm91cDogV2lkZ2V0c1xuLy8+PmRlc2NyaXB0aW9uOiBEaXNwbGF5cyBidXR0b25zIHRvIGVhc2lseSBpbnB1dCBudW1iZXJzIHZpYSB0aGUga2V5Ym9hcmQgb3IgbW91c2UuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vc3Bpbm5lci9cbi8vPj5kZW1vczogaHR0cDovL2pxdWVyeXVpLmNvbS9zcGlubmVyL1xuLy8+PmNzcy5zdHJ1Y3R1cmU6IC4uLy4uL3RoZW1lcy9iYXNlL2NvcmUuY3NzXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2Uvc3Bpbm5lci5jc3Ncbi8vPj5jc3MudGhlbWU6IC4uLy4uL3RoZW1lcy9iYXNlL3RoZW1lLmNzc1xuXG5cblxuZnVuY3Rpb24gc3Bpbm5lck1vZGlmZXIoIGZuICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHByZXZpb3VzID0gdGhpcy5lbGVtZW50LnZhbCgpO1xuXHRcdGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR0aGlzLl9yZWZyZXNoKCk7XG5cdFx0aWYgKCBwcmV2aW91cyAhPT0gdGhpcy5lbGVtZW50LnZhbCgpICkge1xuXHRcdFx0dGhpcy5fdHJpZ2dlciggXCJjaGFuZ2VcIiApO1xuXHRcdH1cblx0fTtcbn1cblxuJC53aWRnZXQoIFwidWkuc3Bpbm5lclwiLCB7XG5cdHZlcnNpb246IFwiMS4xMi4xXCIsXG5cdGRlZmF1bHRFbGVtZW50OiBcIjxpbnB1dD5cIixcblx0d2lkZ2V0RXZlbnRQcmVmaXg6IFwic3BpblwiLFxuXHRvcHRpb25zOiB7XG5cdFx0Y2xhc3Nlczoge1xuXHRcdFx0XCJ1aS1zcGlubmVyXCI6IFwidWktY29ybmVyLWFsbFwiLFxuXHRcdFx0XCJ1aS1zcGlubmVyLWRvd25cIjogXCJ1aS1jb3JuZXItYnJcIixcblx0XHRcdFwidWktc3Bpbm5lci11cFwiOiBcInVpLWNvcm5lci10clwiXG5cdFx0fSxcblx0XHRjdWx0dXJlOiBudWxsLFxuXHRcdGljb25zOiB7XG5cdFx0XHRkb3duOiBcInVpLWljb24tdHJpYW5nbGUtMS1zXCIsXG5cdFx0XHR1cDogXCJ1aS1pY29uLXRyaWFuZ2xlLTEtblwiXG5cdFx0fSxcblx0XHRpbmNyZW1lbnRhbDogdHJ1ZSxcblx0XHRtYXg6IG51bGwsXG5cdFx0bWluOiBudWxsLFxuXHRcdG51bWJlckZvcm1hdDogbnVsbCxcblx0XHRwYWdlOiAxMCxcblx0XHRzdGVwOiAxLFxuXG5cdFx0Y2hhbmdlOiBudWxsLFxuXHRcdHNwaW46IG51bGwsXG5cdFx0c3RhcnQ6IG51bGwsXG5cdFx0c3RvcDogbnVsbFxuXHR9LFxuXG5cdF9jcmVhdGU6IGZ1bmN0aW9uKCkge1xuXG5cdFx0Ly8gaGFuZGxlIHN0cmluZyB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHBhcnNlZFxuXHRcdHRoaXMuX3NldE9wdGlvbiggXCJtYXhcIiwgdGhpcy5vcHRpb25zLm1heCApO1xuXHRcdHRoaXMuX3NldE9wdGlvbiggXCJtaW5cIiwgdGhpcy5vcHRpb25zLm1pbiApO1xuXHRcdHRoaXMuX3NldE9wdGlvbiggXCJzdGVwXCIsIHRoaXMub3B0aW9ucy5zdGVwICk7XG5cblx0XHQvLyBPbmx5IGZvcm1hdCBpZiB0aGVyZSBpcyBhIHZhbHVlLCBwcmV2ZW50cyB0aGUgZmllbGQgZnJvbSBiZWluZyBtYXJrZWRcblx0XHQvLyBhcyBpbnZhbGlkIGluIEZpcmVmb3gsIHNlZSAjOTU3My5cblx0XHRpZiAoIHRoaXMudmFsdWUoKSAhPT0gXCJcIiApIHtcblxuXHRcdFx0Ly8gRm9ybWF0IHRoZSB2YWx1ZSwgYnV0IGRvbid0IGNvbnN0cmFpbi5cblx0XHRcdHRoaXMuX3ZhbHVlKCB0aGlzLmVsZW1lbnQudmFsKCksIHRydWUgKTtcblx0XHR9XG5cblx0XHR0aGlzLl9kcmF3KCk7XG5cdFx0dGhpcy5fb24oIHRoaXMuX2V2ZW50cyApO1xuXHRcdHRoaXMuX3JlZnJlc2goKTtcblxuXHRcdC8vIFR1cm5pbmcgb2ZmIGF1dG9jb21wbGV0ZSBwcmV2ZW50cyB0aGUgYnJvd3NlciBmcm9tIHJlbWVtYmVyaW5nIHRoZVxuXHRcdC8vIHZhbHVlIHdoZW4gbmF2aWdhdGluZyB0aHJvdWdoIGhpc3RvcnksIHNvIHdlIHJlLWVuYWJsZSBhdXRvY29tcGxldGVcblx0XHQvLyBpZiB0aGUgcGFnZSBpcyB1bmxvYWRlZCBiZWZvcmUgdGhlIHdpZGdldCBpcyBkZXN0cm95ZWQuICM3NzkwXG5cdFx0dGhpcy5fb24oIHRoaXMud2luZG93LCB7XG5cdFx0XHRiZWZvcmV1bmxvYWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQucmVtb3ZlQXR0ciggXCJhdXRvY29tcGxldGVcIiApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRfZ2V0Q3JlYXRlT3B0aW9uczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLl9zdXBlcigpO1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50O1xuXG5cdFx0JC5lYWNoKCBbIFwibWluXCIsIFwibWF4XCIsIFwic3RlcFwiIF0sIGZ1bmN0aW9uKCBpLCBvcHRpb24gKSB7XG5cdFx0XHR2YXIgdmFsdWUgPSBlbGVtZW50LmF0dHIoIG9wdGlvbiApO1xuXHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICYmIHZhbHVlLmxlbmd0aCApIHtcblx0XHRcdFx0b3B0aW9uc1sgb3B0aW9uIF0gPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHRyZXR1cm4gb3B0aW9ucztcblx0fSxcblxuXHRfZXZlbnRzOiB7XG5cdFx0a2V5ZG93bjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0aWYgKCB0aGlzLl9zdGFydCggZXZlbnQgKSAmJiB0aGlzLl9rZXlkb3duKCBldmVudCApICkge1xuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0a2V5dXA6IFwiX3N0b3BcIixcblx0XHRmb2N1czogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLnByZXZpb3VzID0gdGhpcy5lbGVtZW50LnZhbCgpO1xuXHRcdH0sXG5cdFx0Ymx1cjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0aWYgKCB0aGlzLmNhbmNlbEJsdXIgKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmNhbmNlbEJsdXI7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fc3RvcCgpO1xuXHRcdFx0dGhpcy5fcmVmcmVzaCgpO1xuXHRcdFx0aWYgKCB0aGlzLnByZXZpb3VzICE9PSB0aGlzLmVsZW1lbnQudmFsKCkgKSB7XG5cdFx0XHRcdHRoaXMuX3RyaWdnZXIoIFwiY2hhbmdlXCIsIGV2ZW50ICk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRtb3VzZXdoZWVsOiBmdW5jdGlvbiggZXZlbnQsIGRlbHRhICkge1xuXHRcdFx0aWYgKCAhZGVsdGEgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmICggIXRoaXMuc3Bpbm5pbmcgJiYgIXRoaXMuX3N0YXJ0KCBldmVudCApICkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX3NwaW4oICggZGVsdGEgPiAwID8gMSA6IC0xICkgKiB0aGlzLm9wdGlvbnMuc3RlcCwgZXZlbnQgKTtcblx0XHRcdGNsZWFyVGltZW91dCggdGhpcy5tb3VzZXdoZWVsVGltZXIgKTtcblx0XHRcdHRoaXMubW91c2V3aGVlbFRpbWVyID0gdGhpcy5fZGVsYXkoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIHRoaXMuc3Bpbm5pbmcgKSB7XG5cdFx0XHRcdFx0dGhpcy5fc3RvcCggZXZlbnQgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgMTAwICk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH0sXG5cdFx0XCJtb3VzZWRvd24gLnVpLXNwaW5uZXItYnV0dG9uXCI6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciBwcmV2aW91cztcblxuXHRcdFx0Ly8gV2UgbmV2ZXIgd2FudCB0aGUgYnV0dG9ucyB0byBoYXZlIGZvY3VzOyB3aGVuZXZlciB0aGUgdXNlciBpc1xuXHRcdFx0Ly8gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3Bpbm5lciwgdGhlIGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgaW5wdXQuXG5cdFx0XHQvLyBJZiB0aGUgaW5wdXQgaXMgZm9jdXNlZCB0aGVuIHRoaXMucHJldmlvdXMgaXMgcHJvcGVybHkgc2V0IGZyb21cblx0XHRcdC8vIHdoZW4gdGhlIGlucHV0IGZpcnN0IHJlY2VpdmVkIGZvY3VzLiBJZiB0aGUgaW5wdXQgaXMgbm90IGZvY3VzZWRcblx0XHRcdC8vIHRoZW4gd2UgbmVlZCB0byBzZXQgdGhpcy5wcmV2aW91cyBiYXNlZCBvbiB0aGUgdmFsdWUgYmVmb3JlIHNwaW5uaW5nLlxuXHRcdFx0cHJldmlvdXMgPSB0aGlzLmVsZW1lbnRbIDAgXSA9PT0gJC51aS5zYWZlQWN0aXZlRWxlbWVudCggdGhpcy5kb2N1bWVudFsgMCBdICkgP1xuXHRcdFx0XHR0aGlzLnByZXZpb3VzIDogdGhpcy5lbGVtZW50LnZhbCgpO1xuXHRcdFx0ZnVuY3Rpb24gY2hlY2tGb2N1cygpIHtcblx0XHRcdFx0dmFyIGlzQWN0aXZlID0gdGhpcy5lbGVtZW50WyAwIF0gPT09ICQudWkuc2FmZUFjdGl2ZUVsZW1lbnQoIHRoaXMuZG9jdW1lbnRbIDAgXSApO1xuXHRcdFx0XHRpZiAoICFpc0FjdGl2ZSApIHtcblx0XHRcdFx0XHR0aGlzLmVsZW1lbnQudHJpZ2dlciggXCJmb2N1c1wiICk7XG5cdFx0XHRcdFx0dGhpcy5wcmV2aW91cyA9IHByZXZpb3VzO1xuXG5cdFx0XHRcdFx0Ly8gc3VwcG9ydDogSUVcblx0XHRcdFx0XHQvLyBJRSBzZXRzIGZvY3VzIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGlmIGZvY3VzXG5cdFx0XHRcdFx0Ly8gbW92ZWQgb2ZmIG9mIHRoZSBpbnB1dCBiZWNhdXNlIHRoZSB1c2VyIGNsaWNrZWQgb24gdGhlIGJ1dHRvbi5cblx0XHRcdFx0XHR0aGlzLl9kZWxheSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnByZXZpb3VzID0gcHJldmlvdXM7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEVuc3VyZSBmb2N1cyBpcyBvbiAob3Igc3RheXMgb24pIHRoZSB0ZXh0IGZpZWxkXG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0Y2hlY2tGb2N1cy5jYWxsKCB0aGlzICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFXG5cdFx0XHQvLyBJRSBkb2Vzbid0IHByZXZlbnQgbW92aW5nIGZvY3VzIGV2ZW4gd2l0aCBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cdFx0XHQvLyBzbyB3ZSBzZXQgYSBmbGFnIHRvIGtub3cgd2hlbiB3ZSBzaG91bGQgaWdub3JlIHRoZSBibHVyIGV2ZW50XG5cdFx0XHQvLyBhbmQgY2hlY2sgKGFnYWluKSBpZiBmb2N1cyBtb3ZlZCBvZmYgb2YgdGhlIGlucHV0LlxuXHRcdFx0dGhpcy5jYW5jZWxCbHVyID0gdHJ1ZTtcblx0XHRcdHRoaXMuX2RlbGF5KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXMuY2FuY2VsQmx1cjtcblx0XHRcdFx0Y2hlY2tGb2N1cy5jYWxsKCB0aGlzICk7XG5cdFx0XHR9ICk7XG5cblx0XHRcdGlmICggdGhpcy5fc3RhcnQoIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX3JlcGVhdCggbnVsbCwgJCggZXZlbnQuY3VycmVudFRhcmdldCApXG5cdFx0XHRcdC5oYXNDbGFzcyggXCJ1aS1zcGlubmVyLXVwXCIgKSA/IDEgOiAtMSwgZXZlbnQgKTtcblx0XHR9LFxuXHRcdFwibW91c2V1cCAudWktc3Bpbm5lci1idXR0b25cIjogXCJfc3RvcFwiLFxuXHRcdFwibW91c2VlbnRlciAudWktc3Bpbm5lci1idXR0b25cIjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHQvLyBidXR0b24gd2lsbCBhZGQgdWktc3RhdGUtYWN0aXZlIGlmIG1vdXNlIHdhcyBkb3duIHdoaWxlIG1vdXNlbGVhdmUgYW5kIGtlcHQgZG93blxuXHRcdFx0aWYgKCAhJCggZXZlbnQuY3VycmVudFRhcmdldCApLmhhc0NsYXNzKCBcInVpLXN0YXRlLWFjdGl2ZVwiICkgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB0aGlzLl9zdGFydCggZXZlbnQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3JlcGVhdCggbnVsbCwgJCggZXZlbnQuY3VycmVudFRhcmdldCApXG5cdFx0XHRcdC5oYXNDbGFzcyggXCJ1aS1zcGlubmVyLXVwXCIgKSA/IDEgOiAtMSwgZXZlbnQgKTtcblx0XHR9LFxuXG5cdFx0Ly8gVE9ETzogZG8gd2UgcmVhbGx5IHdhbnQgdG8gY29uc2lkZXIgdGhpcyBhIHN0b3A/XG5cdFx0Ly8gc2hvdWxkbid0IHdlIGp1c3Qgc3RvcCB0aGUgcmVwZWF0ZXIgYW5kIHdhaXQgdW50aWwgbW91c2V1cCBiZWZvcmVcblx0XHQvLyB3ZSB0cmlnZ2VyIHRoZSBzdG9wIGV2ZW50P1xuXHRcdFwibW91c2VsZWF2ZSAudWktc3Bpbm5lci1idXR0b25cIjogXCJfc3RvcFwiXG5cdH0sXG5cblx0Ly8gU3VwcG9ydCBtb2JpbGUgZW5oYW5jZWQgb3B0aW9uIGFuZCBtYWtlIGJhY2tjb21wYXQgbW9yZSBzYW5lXG5cdF9lbmhhbmNlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnVpU3Bpbm5lciA9IHRoaXMuZWxlbWVudFxuXHRcdFx0LmF0dHIoIFwiYXV0b2NvbXBsZXRlXCIsIFwib2ZmXCIgKVxuXHRcdFx0LndyYXAoIFwiPHNwYW4+XCIgKVxuXHRcdFx0LnBhcmVudCgpXG5cblx0XHRcdFx0Ly8gQWRkIGJ1dHRvbnNcblx0XHRcdFx0LmFwcGVuZChcblx0XHRcdFx0XHRcIjxhPjwvYT48YT48L2E+XCJcblx0XHRcdFx0KTtcblx0fSxcblxuXHRfZHJhdzogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fZW5oYW5jZSgpO1xuXG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMudWlTcGlubmVyLCBcInVpLXNwaW5uZXJcIiwgXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnRcIiApO1xuXHRcdHRoaXMuX2FkZENsYXNzKCBcInVpLXNwaW5uZXItaW5wdXRcIiApO1xuXG5cdFx0dGhpcy5lbGVtZW50LmF0dHIoIFwicm9sZVwiLCBcInNwaW5idXR0b25cIiApO1xuXG5cdFx0Ly8gQnV0dG9uIGJpbmRpbmdzXG5cdFx0dGhpcy5idXR0b25zID0gdGhpcy51aVNwaW5uZXIuY2hpbGRyZW4oIFwiYVwiIClcblx0XHRcdC5hdHRyKCBcInRhYkluZGV4XCIsIC0xIClcblx0XHRcdC5hdHRyKCBcImFyaWEtaGlkZGVuXCIsIHRydWUgKVxuXHRcdFx0LmJ1dHRvbigge1xuXHRcdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdFx0XCJ1aS1idXR0b25cIjogXCJcIlxuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cblx0XHQvLyBUT0RPOiBSaWdodCBub3cgYnV0dG9uIGRvZXMgbm90IHN1cHBvcnQgY2xhc3NlcyB0aGlzIGlzIGFscmVhZHkgdXBkYXRlZCBpbiBidXR0b24gUFJcblx0XHR0aGlzLl9yZW1vdmVDbGFzcyggdGhpcy5idXR0b25zLCBcInVpLWNvcm5lci1hbGxcIiApO1xuXG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMuYnV0dG9ucy5maXJzdCgpLCBcInVpLXNwaW5uZXItYnV0dG9uIHVpLXNwaW5uZXItdXBcIiApO1xuXHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLmJ1dHRvbnMubGFzdCgpLCBcInVpLXNwaW5uZXItYnV0dG9uIHVpLXNwaW5uZXItZG93blwiICk7XG5cdFx0dGhpcy5idXR0b25zLmZpcnN0KCkuYnV0dG9uKCB7XG5cdFx0XHRcImljb25cIjogdGhpcy5vcHRpb25zLmljb25zLnVwLFxuXHRcdFx0XCJzaG93TGFiZWxcIjogZmFsc2Vcblx0XHR9ICk7XG5cdFx0dGhpcy5idXR0b25zLmxhc3QoKS5idXR0b24oIHtcblx0XHRcdFwiaWNvblwiOiB0aGlzLm9wdGlvbnMuaWNvbnMuZG93bixcblx0XHRcdFwic2hvd0xhYmVsXCI6IGZhbHNlXG5cdFx0fSApO1xuXG5cdFx0Ly8gSUUgNiBkb2Vzbid0IHVuZGVyc3RhbmQgaGVpZ2h0OiA1MCUgZm9yIHRoZSBidXR0b25zXG5cdFx0Ly8gdW5sZXNzIHRoZSB3cmFwcGVyIGhhcyBhbiBleHBsaWNpdCBoZWlnaHRcblx0XHRpZiAoIHRoaXMuYnV0dG9ucy5oZWlnaHQoKSA+IE1hdGguY2VpbCggdGhpcy51aVNwaW5uZXIuaGVpZ2h0KCkgKiAwLjUgKSAmJlxuXHRcdFx0XHR0aGlzLnVpU3Bpbm5lci5oZWlnaHQoKSA+IDAgKSB7XG5cdFx0XHR0aGlzLnVpU3Bpbm5lci5oZWlnaHQoIHRoaXMudWlTcGlubmVyLmhlaWdodCgpICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9rZXlkb3duOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG5cdFx0XHRrZXlDb2RlID0gJC51aS5rZXlDb2RlO1xuXG5cdFx0c3dpdGNoICggZXZlbnQua2V5Q29kZSApIHtcblx0XHRjYXNlIGtleUNvZGUuVVA6XG5cdFx0XHR0aGlzLl9yZXBlYXQoIG51bGwsIDEsIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRjYXNlIGtleUNvZGUuRE9XTjpcblx0XHRcdHRoaXMuX3JlcGVhdCggbnVsbCwgLTEsIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRjYXNlIGtleUNvZGUuUEFHRV9VUDpcblx0XHRcdHRoaXMuX3JlcGVhdCggbnVsbCwgb3B0aW9ucy5wYWdlLCBldmVudCApO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0Y2FzZSBrZXlDb2RlLlBBR0VfRE9XTjpcblx0XHRcdHRoaXMuX3JlcGVhdCggbnVsbCwgLW9wdGlvbnMucGFnZSwgZXZlbnQgKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHRfc3RhcnQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRpZiAoICF0aGlzLnNwaW5uaW5nICYmIHRoaXMuX3RyaWdnZXIoIFwic3RhcnRcIiwgZXZlbnQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKCAhdGhpcy5jb3VudGVyICkge1xuXHRcdFx0dGhpcy5jb3VudGVyID0gMTtcblx0XHR9XG5cdFx0dGhpcy5zcGlubmluZyA9IHRydWU7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0X3JlcGVhdDogZnVuY3Rpb24oIGksIHN0ZXBzLCBldmVudCApIHtcblx0XHRpID0gaSB8fCA1MDA7XG5cblx0XHRjbGVhclRpbWVvdXQoIHRoaXMudGltZXIgKTtcblx0XHR0aGlzLnRpbWVyID0gdGhpcy5fZGVsYXkoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5fcmVwZWF0KCA0MCwgc3RlcHMsIGV2ZW50ICk7XG5cdFx0fSwgaSApO1xuXG5cdFx0dGhpcy5fc3Bpbiggc3RlcHMgKiB0aGlzLm9wdGlvbnMuc3RlcCwgZXZlbnQgKTtcblx0fSxcblxuXHRfc3BpbjogZnVuY3Rpb24oIHN0ZXAsIGV2ZW50ICkge1xuXHRcdHZhciB2YWx1ZSA9IHRoaXMudmFsdWUoKSB8fCAwO1xuXG5cdFx0aWYgKCAhdGhpcy5jb3VudGVyICkge1xuXHRcdFx0dGhpcy5jb3VudGVyID0gMTtcblx0XHR9XG5cblx0XHR2YWx1ZSA9IHRoaXMuX2FkanVzdFZhbHVlKCB2YWx1ZSArIHN0ZXAgKiB0aGlzLl9pbmNyZW1lbnQoIHRoaXMuY291bnRlciApICk7XG5cblx0XHRpZiAoICF0aGlzLnNwaW5uaW5nIHx8IHRoaXMuX3RyaWdnZXIoIFwic3BpblwiLCBldmVudCwgeyB2YWx1ZTogdmFsdWUgfSApICE9PSBmYWxzZSApIHtcblx0XHRcdHRoaXMuX3ZhbHVlKCB2YWx1ZSApO1xuXHRcdFx0dGhpcy5jb3VudGVyKys7XG5cdFx0fVxuXHR9LFxuXG5cdF9pbmNyZW1lbnQ6IGZ1bmN0aW9uKCBpICkge1xuXHRcdHZhciBpbmNyZW1lbnRhbCA9IHRoaXMub3B0aW9ucy5pbmNyZW1lbnRhbDtcblxuXHRcdGlmICggaW5jcmVtZW50YWwgKSB7XG5cdFx0XHRyZXR1cm4gJC5pc0Z1bmN0aW9uKCBpbmNyZW1lbnRhbCApID9cblx0XHRcdFx0aW5jcmVtZW50YWwoIGkgKSA6XG5cdFx0XHRcdE1hdGguZmxvb3IoIGkgKiBpICogaSAvIDUwMDAwIC0gaSAqIGkgLyA1MDAgKyAxNyAqIGkgLyAyMDAgKyAxICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDE7XG5cdH0sXG5cblx0X3ByZWNpc2lvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHByZWNpc2lvbiA9IHRoaXMuX3ByZWNpc2lvbk9mKCB0aGlzLm9wdGlvbnMuc3RlcCApO1xuXHRcdGlmICggdGhpcy5vcHRpb25zLm1pbiAhPT0gbnVsbCApIHtcblx0XHRcdHByZWNpc2lvbiA9IE1hdGgubWF4KCBwcmVjaXNpb24sIHRoaXMuX3ByZWNpc2lvbk9mKCB0aGlzLm9wdGlvbnMubWluICkgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHByZWNpc2lvbjtcblx0fSxcblxuXHRfcHJlY2lzaW9uT2Y6IGZ1bmN0aW9uKCBudW0gKSB7XG5cdFx0dmFyIHN0ciA9IG51bS50b1N0cmluZygpLFxuXHRcdFx0ZGVjaW1hbCA9IHN0ci5pbmRleE9mKCBcIi5cIiApO1xuXHRcdHJldHVybiBkZWNpbWFsID09PSAtMSA/IDAgOiBzdHIubGVuZ3RoIC0gZGVjaW1hbCAtIDE7XG5cdH0sXG5cblx0X2FkanVzdFZhbHVlOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGJhc2UsIGFib3ZlTWluLFxuXHRcdFx0b3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdC8vIE1ha2Ugc3VyZSB3ZSdyZSBhdCBhIHZhbGlkIHN0ZXBcblx0XHQvLyAtIGZpbmQgb3V0IHdoZXJlIHdlIGFyZSByZWxhdGl2ZSB0byB0aGUgYmFzZSAobWluIG9yIDApXG5cdFx0YmFzZSA9IG9wdGlvbnMubWluICE9PSBudWxsID8gb3B0aW9ucy5taW4gOiAwO1xuXHRcdGFib3ZlTWluID0gdmFsdWUgLSBiYXNlO1xuXG5cdFx0Ly8gLSByb3VuZCB0byB0aGUgbmVhcmVzdCBzdGVwXG5cdFx0YWJvdmVNaW4gPSBNYXRoLnJvdW5kKCBhYm92ZU1pbiAvIG9wdGlvbnMuc3RlcCApICogb3B0aW9ucy5zdGVwO1xuXG5cdFx0Ly8gLSByb3VuZGluZyBpcyBiYXNlZCBvbiAwLCBzbyBhZGp1c3QgYmFjayB0byBvdXIgYmFzZVxuXHRcdHZhbHVlID0gYmFzZSArIGFib3ZlTWluO1xuXG5cdFx0Ly8gRml4IHByZWNpc2lvbiBmcm9tIGJhZCBKUyBmbG9hdGluZyBwb2ludCBtYXRoXG5cdFx0dmFsdWUgPSBwYXJzZUZsb2F0KCB2YWx1ZS50b0ZpeGVkKCB0aGlzLl9wcmVjaXNpb24oKSApICk7XG5cblx0XHQvLyBDbGFtcCB0aGUgdmFsdWVcblx0XHRpZiAoIG9wdGlvbnMubWF4ICE9PSBudWxsICYmIHZhbHVlID4gb3B0aW9ucy5tYXggKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucy5tYXg7XG5cdFx0fVxuXHRcdGlmICggb3B0aW9ucy5taW4gIT09IG51bGwgJiYgdmFsdWUgPCBvcHRpb25zLm1pbiApIHtcblx0XHRcdHJldHVybiBvcHRpb25zLm1pbjtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0sXG5cblx0X3N0b3A6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRpZiAoICF0aGlzLnNwaW5uaW5nICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNsZWFyVGltZW91dCggdGhpcy50aW1lciApO1xuXHRcdGNsZWFyVGltZW91dCggdGhpcy5tb3VzZXdoZWVsVGltZXIgKTtcblx0XHR0aGlzLmNvdW50ZXIgPSAwO1xuXHRcdHRoaXMuc3Bpbm5pbmcgPSBmYWxzZTtcblx0XHR0aGlzLl90cmlnZ2VyKCBcInN0b3BcIiwgZXZlbnQgKTtcblx0fSxcblxuXHRfc2V0T3B0aW9uOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHR2YXIgcHJldlZhbHVlLCBmaXJzdCwgbGFzdDtcblxuXHRcdGlmICgga2V5ID09PSBcImN1bHR1cmVcIiB8fCBrZXkgPT09IFwibnVtYmVyRm9ybWF0XCIgKSB7XG5cdFx0XHRwcmV2VmFsdWUgPSB0aGlzLl9wYXJzZSggdGhpcy5lbGVtZW50LnZhbCgpICk7XG5cdFx0XHR0aGlzLm9wdGlvbnNbIGtleSBdID0gdmFsdWU7XG5cdFx0XHR0aGlzLmVsZW1lbnQudmFsKCB0aGlzLl9mb3JtYXQoIHByZXZWYWx1ZSApICk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgPT09IFwibWF4XCIgfHwga2V5ID09PSBcIm1pblwiIHx8IGtleSA9PT0gXCJzdGVwXCIgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0dmFsdWUgPSB0aGlzLl9wYXJzZSggdmFsdWUgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCBrZXkgPT09IFwiaWNvbnNcIiApIHtcblx0XHRcdGZpcnN0ID0gdGhpcy5idXR0b25zLmZpcnN0KCkuZmluZCggXCIudWktaWNvblwiICk7XG5cdFx0XHR0aGlzLl9yZW1vdmVDbGFzcyggZmlyc3QsIG51bGwsIHRoaXMub3B0aW9ucy5pY29ucy51cCApO1xuXHRcdFx0dGhpcy5fYWRkQ2xhc3MoIGZpcnN0LCBudWxsLCB2YWx1ZS51cCApO1xuXHRcdFx0bGFzdCA9IHRoaXMuYnV0dG9ucy5sYXN0KCkuZmluZCggXCIudWktaWNvblwiICk7XG5cdFx0XHR0aGlzLl9yZW1vdmVDbGFzcyggbGFzdCwgbnVsbCwgdGhpcy5vcHRpb25zLmljb25zLmRvd24gKTtcblx0XHRcdHRoaXMuX2FkZENsYXNzKCBsYXN0LCBudWxsLCB2YWx1ZS5kb3duICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fc3VwZXIoIGtleSwgdmFsdWUgKTtcblx0fSxcblxuXHRfc2V0T3B0aW9uRGlzYWJsZWQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR0aGlzLl9zdXBlciggdmFsdWUgKTtcblxuXHRcdHRoaXMuX3RvZ2dsZUNsYXNzKCB0aGlzLnVpU3Bpbm5lciwgbnVsbCwgXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCAhIXZhbHVlICk7XG5cdFx0dGhpcy5lbGVtZW50LnByb3AoIFwiZGlzYWJsZWRcIiwgISF2YWx1ZSApO1xuXHRcdHRoaXMuYnV0dG9ucy5idXR0b24oIHZhbHVlID8gXCJkaXNhYmxlXCIgOiBcImVuYWJsZVwiICk7XG5cdH0sXG5cblx0X3NldE9wdGlvbnM6IHNwaW5uZXJNb2RpZmVyKCBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHR0aGlzLl9zdXBlciggb3B0aW9ucyApO1xuXHR9ICksXG5cblx0X3BhcnNlOiBmdW5jdGlvbiggdmFsICkge1xuXHRcdGlmICggdHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiAmJiB2YWwgIT09IFwiXCIgKSB7XG5cdFx0XHR2YWwgPSB3aW5kb3cuR2xvYmFsaXplICYmIHRoaXMub3B0aW9ucy5udW1iZXJGb3JtYXQgP1xuXHRcdFx0XHRHbG9iYWxpemUucGFyc2VGbG9hdCggdmFsLCAxMCwgdGhpcy5vcHRpb25zLmN1bHR1cmUgKSA6ICt2YWw7XG5cdFx0fVxuXHRcdHJldHVybiB2YWwgPT09IFwiXCIgfHwgaXNOYU4oIHZhbCApID8gbnVsbCA6IHZhbDtcblx0fSxcblxuXHRfZm9ybWF0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gXCJcIiApIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0XHRyZXR1cm4gd2luZG93Lkdsb2JhbGl6ZSAmJiB0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0ID9cblx0XHRcdEdsb2JhbGl6ZS5mb3JtYXQoIHZhbHVlLCB0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0LCB0aGlzLm9wdGlvbnMuY3VsdHVyZSApIDpcblx0XHRcdHZhbHVlO1xuXHR9LFxuXG5cdF9yZWZyZXNoOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmVsZW1lbnQuYXR0cigge1xuXHRcdFx0XCJhcmlhLXZhbHVlbWluXCI6IHRoaXMub3B0aW9ucy5taW4sXG5cdFx0XHRcImFyaWEtdmFsdWVtYXhcIjogdGhpcy5vcHRpb25zLm1heCxcblxuXHRcdFx0Ly8gVE9ETzogd2hhdCBzaG91bGQgd2UgZG8gd2l0aCB2YWx1ZXMgdGhhdCBjYW4ndCBiZSBwYXJzZWQ/XG5cdFx0XHRcImFyaWEtdmFsdWVub3dcIjogdGhpcy5fcGFyc2UoIHRoaXMuZWxlbWVudC52YWwoKSApXG5cdFx0fSApO1xuXHR9LFxuXG5cdGlzVmFsaWQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB2YWx1ZSA9IHRoaXMudmFsdWUoKTtcblxuXHRcdC8vIE51bGwgaXMgaW52YWxpZFxuXHRcdGlmICggdmFsdWUgPT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdmFsdWUgZ2V0cyBhZGp1c3RlZCwgaXQncyBpbnZhbGlkXG5cdFx0cmV0dXJuIHZhbHVlID09PSB0aGlzLl9hZGp1c3RWYWx1ZSggdmFsdWUgKTtcblx0fSxcblxuXHQvLyBVcGRhdGUgdGhlIHZhbHVlIHdpdGhvdXQgdHJpZ2dlcmluZyBjaGFuZ2Vcblx0X3ZhbHVlOiBmdW5jdGlvbiggdmFsdWUsIGFsbG93QW55ICkge1xuXHRcdHZhciBwYXJzZWQ7XG5cdFx0aWYgKCB2YWx1ZSAhPT0gXCJcIiApIHtcblx0XHRcdHBhcnNlZCA9IHRoaXMuX3BhcnNlKCB2YWx1ZSApO1xuXHRcdFx0aWYgKCBwYXJzZWQgIT09IG51bGwgKSB7XG5cdFx0XHRcdGlmICggIWFsbG93QW55ICkge1xuXHRcdFx0XHRcdHBhcnNlZCA9IHRoaXMuX2FkanVzdFZhbHVlKCBwYXJzZWQgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YWx1ZSA9IHRoaXMuX2Zvcm1hdCggcGFyc2VkICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuZWxlbWVudC52YWwoIHZhbHVlICk7XG5cdFx0dGhpcy5fcmVmcmVzaCgpO1xuXHR9LFxuXG5cdF9kZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdC5wcm9wKCBcImRpc2FibGVkXCIsIGZhbHNlIClcblx0XHRcdC5yZW1vdmVBdHRyKCBcImF1dG9jb21wbGV0ZSByb2xlIGFyaWEtdmFsdWVtaW4gYXJpYS12YWx1ZW1heCBhcmlhLXZhbHVlbm93XCIgKTtcblxuXHRcdHRoaXMudWlTcGlubmVyLnJlcGxhY2VXaXRoKCB0aGlzLmVsZW1lbnQgKTtcblx0fSxcblxuXHRzdGVwVXA6IHNwaW5uZXJNb2RpZmVyKCBmdW5jdGlvbiggc3RlcHMgKSB7XG5cdFx0dGhpcy5fc3RlcFVwKCBzdGVwcyApO1xuXHR9ICksXG5cdF9zdGVwVXA6IGZ1bmN0aW9uKCBzdGVwcyApIHtcblx0XHRpZiAoIHRoaXMuX3N0YXJ0KCkgKSB7XG5cdFx0XHR0aGlzLl9zcGluKCAoIHN0ZXBzIHx8IDEgKSAqIHRoaXMub3B0aW9ucy5zdGVwICk7XG5cdFx0XHR0aGlzLl9zdG9wKCk7XG5cdFx0fVxuXHR9LFxuXG5cdHN0ZXBEb3duOiBzcGlubmVyTW9kaWZlciggZnVuY3Rpb24oIHN0ZXBzICkge1xuXHRcdHRoaXMuX3N0ZXBEb3duKCBzdGVwcyApO1xuXHR9ICksXG5cdF9zdGVwRG93bjogZnVuY3Rpb24oIHN0ZXBzICkge1xuXHRcdGlmICggdGhpcy5fc3RhcnQoKSApIHtcblx0XHRcdHRoaXMuX3NwaW4oICggc3RlcHMgfHwgMSApICogLXRoaXMub3B0aW9ucy5zdGVwICk7XG5cdFx0XHR0aGlzLl9zdG9wKCk7XG5cdFx0fVxuXHR9LFxuXG5cdHBhZ2VVcDogc3Bpbm5lck1vZGlmZXIoIGZ1bmN0aW9uKCBwYWdlcyApIHtcblx0XHR0aGlzLl9zdGVwVXAoICggcGFnZXMgfHwgMSApICogdGhpcy5vcHRpb25zLnBhZ2UgKTtcblx0fSApLFxuXG5cdHBhZ2VEb3duOiBzcGlubmVyTW9kaWZlciggZnVuY3Rpb24oIHBhZ2VzICkge1xuXHRcdHRoaXMuX3N0ZXBEb3duKCAoIHBhZ2VzIHx8IDEgKSAqIHRoaXMub3B0aW9ucy5wYWdlICk7XG5cdH0gKSxcblxuXHR2YWx1ZTogZnVuY3Rpb24oIG5ld1ZhbCApIHtcblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX3BhcnNlKCB0aGlzLmVsZW1lbnQudmFsKCkgKTtcblx0XHR9XG5cdFx0c3Bpbm5lck1vZGlmZXIoIHRoaXMuX3ZhbHVlICkuY2FsbCggdGhpcywgbmV3VmFsICk7XG5cdH0sXG5cblx0d2lkZ2V0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy51aVNwaW5uZXI7XG5cdH1cbn0gKTtcblxuLy8gREVQUkVDQVRFRFxuLy8gVE9ETzogc3dpdGNoIHJldHVybiBiYWNrIHRvIHdpZGdldCBkZWNsYXJhdGlvbiBhdCB0b3Agb2YgZmlsZSB3aGVuIHRoaXMgaXMgcmVtb3ZlZFxuaWYgKCAkLnVpQmFja0NvbXBhdCAhPT0gZmFsc2UgKSB7XG5cblx0Ly8gQmFja2NvbXBhdCBmb3Igc3Bpbm5lciBodG1sIGV4dGVuc2lvbiBwb2ludHNcblx0JC53aWRnZXQoIFwidWkuc3Bpbm5lclwiLCAkLnVpLnNwaW5uZXIsIHtcblx0XHRfZW5oYW5jZTogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLnVpU3Bpbm5lciA9IHRoaXMuZWxlbWVudFxuXHRcdFx0XHQuYXR0ciggXCJhdXRvY29tcGxldGVcIiwgXCJvZmZcIiApXG5cdFx0XHRcdC53cmFwKCB0aGlzLl91aVNwaW5uZXJIdG1sKCkgKVxuXHRcdFx0XHQucGFyZW50KClcblxuXHRcdFx0XHRcdC8vIEFkZCBidXR0b25zXG5cdFx0XHRcdFx0LmFwcGVuZCggdGhpcy5fYnV0dG9uSHRtbCgpICk7XG5cdFx0fSxcblx0XHRfdWlTcGlubmVySHRtbDogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gXCI8c3Bhbj5cIjtcblx0XHR9LFxuXG5cdFx0X2J1dHRvbkh0bWw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIFwiPGE+PC9hPjxhPjwvYT5cIjtcblx0XHR9XG5cdH0gKTtcbn1cblxudmFyIHdpZGdldHNTcGlubmVyID0gJC51aS5zcGlubmVyO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIFRhYnMgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IFRhYnNcbi8vPj5ncm91cDogV2lkZ2V0c1xuLy8+PmRlc2NyaXB0aW9uOiBUcmFuc2Zvcm1zIGEgc2V0IG9mIGNvbnRhaW5lciBlbGVtZW50cyBpbnRvIGEgdGFiIHN0cnVjdHVyZS5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS90YWJzL1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL3RhYnMvXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvY29yZS5jc3Ncbi8vPj5jc3Muc3RydWN0dXJlOiAuLi8uLi90aGVtZXMvYmFzZS90YWJzLmNzc1xuLy8+PmNzcy50aGVtZTogLi4vLi4vdGhlbWVzL2Jhc2UvdGhlbWUuY3NzXG5cblxuXG4kLndpZGdldCggXCJ1aS50YWJzXCIsIHtcblx0dmVyc2lvbjogXCIxLjEyLjFcIixcblx0ZGVsYXk6IDMwMCxcblx0b3B0aW9uczoge1xuXHRcdGFjdGl2ZTogbnVsbCxcblx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcInVpLXRhYnNcIjogXCJ1aS1jb3JuZXItYWxsXCIsXG5cdFx0XHRcInVpLXRhYnMtbmF2XCI6IFwidWktY29ybmVyLWFsbFwiLFxuXHRcdFx0XCJ1aS10YWJzLXBhbmVsXCI6IFwidWktY29ybmVyLWJvdHRvbVwiLFxuXHRcdFx0XCJ1aS10YWJzLXRhYlwiOiBcInVpLWNvcm5lci10b3BcIlxuXHRcdH0sXG5cdFx0Y29sbGFwc2libGU6IGZhbHNlLFxuXHRcdGV2ZW50OiBcImNsaWNrXCIsXG5cdFx0aGVpZ2h0U3R5bGU6IFwiY29udGVudFwiLFxuXHRcdGhpZGU6IG51bGwsXG5cdFx0c2hvdzogbnVsbCxcblxuXHRcdC8vIENhbGxiYWNrc1xuXHRcdGFjdGl2YXRlOiBudWxsLFxuXHRcdGJlZm9yZUFjdGl2YXRlOiBudWxsLFxuXHRcdGJlZm9yZUxvYWQ6IG51bGwsXG5cdFx0bG9hZDogbnVsbFxuXHR9LFxuXG5cdF9pc0xvY2FsOiAoIGZ1bmN0aW9uKCkge1xuXHRcdHZhciByaGFzaCA9IC8jLiokLztcblxuXHRcdHJldHVybiBmdW5jdGlvbiggYW5jaG9yICkge1xuXHRcdFx0dmFyIGFuY2hvclVybCwgbG9jYXRpb25Vcmw7XG5cblx0XHRcdGFuY2hvclVybCA9IGFuY2hvci5ocmVmLnJlcGxhY2UoIHJoYXNoLCBcIlwiICk7XG5cdFx0XHRsb2NhdGlvblVybCA9IGxvY2F0aW9uLmhyZWYucmVwbGFjZSggcmhhc2gsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRGVjb2RpbmcgbWF5IHRocm93IGFuIGVycm9yIGlmIHRoZSBVUkwgaXNuJ3QgVVRGLTggKCM5NTE4KVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YW5jaG9yVXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KCBhbmNob3JVcmwgKTtcblx0XHRcdH0gY2F0Y2ggKCBlcnJvciApIHt9XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsb2NhdGlvblVybCA9IGRlY29kZVVSSUNvbXBvbmVudCggbG9jYXRpb25VcmwgKTtcblx0XHRcdH0gY2F0Y2ggKCBlcnJvciApIHt9XG5cblx0XHRcdHJldHVybiBhbmNob3IuaGFzaC5sZW5ndGggPiAxICYmIGFuY2hvclVybCA9PT0gbG9jYXRpb25Vcmw7XG5cdFx0fTtcblx0fSApKCksXG5cblx0X2NyZWF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0b3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdHRoaXMucnVubmluZyA9IGZhbHNlO1xuXG5cdFx0dGhpcy5fYWRkQ2xhc3MoIFwidWktdGFic1wiLCBcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudFwiICk7XG5cdFx0dGhpcy5fdG9nZ2xlQ2xhc3MoIFwidWktdGFicy1jb2xsYXBzaWJsZVwiLCBudWxsLCBvcHRpb25zLmNvbGxhcHNpYmxlICk7XG5cblx0XHR0aGlzLl9wcm9jZXNzVGFicygpO1xuXHRcdG9wdGlvbnMuYWN0aXZlID0gdGhpcy5faW5pdGlhbEFjdGl2ZSgpO1xuXG5cdFx0Ly8gVGFrZSBkaXNhYmxpbmcgdGFicyB2aWEgY2xhc3MgYXR0cmlidXRlIGZyb20gSFRNTFxuXHRcdC8vIGludG8gYWNjb3VudCBhbmQgdXBkYXRlIG9wdGlvbiBwcm9wZXJseS5cblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIG9wdGlvbnMuZGlzYWJsZWQgKSApIHtcblx0XHRcdG9wdGlvbnMuZGlzYWJsZWQgPSAkLnVuaXF1ZSggb3B0aW9ucy5kaXNhYmxlZC5jb25jYXQoXG5cdFx0XHRcdCQubWFwKCB0aGlzLnRhYnMuZmlsdGVyKCBcIi51aS1zdGF0ZS1kaXNhYmxlZFwiICksIGZ1bmN0aW9uKCBsaSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhhdC50YWJzLmluZGV4KCBsaSApO1xuXHRcdFx0XHR9IClcblx0XHRcdCkgKS5zb3J0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2hlY2sgZm9yIGxlbmd0aCBhdm9pZHMgZXJyb3Igd2hlbiBpbml0aWFsaXppbmcgZW1wdHkgbGlzdFxuXHRcdGlmICggdGhpcy5vcHRpb25zLmFjdGl2ZSAhPT0gZmFsc2UgJiYgdGhpcy5hbmNob3JzLmxlbmd0aCApIHtcblx0XHRcdHRoaXMuYWN0aXZlID0gdGhpcy5fZmluZEFjdGl2ZSggb3B0aW9ucy5hY3RpdmUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hY3RpdmUgPSAkKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fcmVmcmVzaCgpO1xuXG5cdFx0aWYgKCB0aGlzLmFjdGl2ZS5sZW5ndGggKSB7XG5cdFx0XHR0aGlzLmxvYWQoIG9wdGlvbnMuYWN0aXZlICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9pbml0aWFsQWN0aXZlOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgYWN0aXZlID0gdGhpcy5vcHRpb25zLmFjdGl2ZSxcblx0XHRcdGNvbGxhcHNpYmxlID0gdGhpcy5vcHRpb25zLmNvbGxhcHNpYmxlLFxuXHRcdFx0bG9jYXRpb25IYXNoID0gbG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoIDEgKTtcblxuXHRcdGlmICggYWN0aXZlID09PSBudWxsICkge1xuXG5cdFx0XHQvLyBjaGVjayB0aGUgZnJhZ21lbnQgaWRlbnRpZmllciBpbiB0aGUgVVJMXG5cdFx0XHRpZiAoIGxvY2F0aW9uSGFzaCApIHtcblx0XHRcdFx0dGhpcy50YWJzLmVhY2goIGZ1bmN0aW9uKCBpLCB0YWIgKSB7XG5cdFx0XHRcdFx0aWYgKCAkKCB0YWIgKS5hdHRyKCBcImFyaWEtY29udHJvbHNcIiApID09PSBsb2NhdGlvbkhhc2ggKSB7XG5cdFx0XHRcdFx0XHRhY3RpdmUgPSBpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDaGVjayBmb3IgYSB0YWIgbWFya2VkIGFjdGl2ZSB2aWEgYSBjbGFzc1xuXHRcdFx0aWYgKCBhY3RpdmUgPT09IG51bGwgKSB7XG5cdFx0XHRcdGFjdGl2ZSA9IHRoaXMudGFicy5pbmRleCggdGhpcy50YWJzLmZpbHRlciggXCIudWktdGFicy1hY3RpdmVcIiApICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE5vIGFjdGl2ZSB0YWIsIHNldCB0byBmYWxzZVxuXHRcdFx0aWYgKCBhY3RpdmUgPT09IG51bGwgfHwgYWN0aXZlID09PSAtMSApIHtcblx0XHRcdFx0YWN0aXZlID0gdGhpcy50YWJzLmxlbmd0aCA/IDAgOiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgbnVtYmVyczogbmVnYXRpdmUsIG91dCBvZiByYW5nZVxuXHRcdGlmICggYWN0aXZlICE9PSBmYWxzZSApIHtcblx0XHRcdGFjdGl2ZSA9IHRoaXMudGFicy5pbmRleCggdGhpcy50YWJzLmVxKCBhY3RpdmUgKSApO1xuXHRcdFx0aWYgKCBhY3RpdmUgPT09IC0xICkge1xuXHRcdFx0XHRhY3RpdmUgPSBjb2xsYXBzaWJsZSA/IGZhbHNlIDogMDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBEb24ndCBhbGxvdyBjb2xsYXBzaWJsZTogZmFsc2UgYW5kIGFjdGl2ZTogZmFsc2Vcblx0XHRpZiAoICFjb2xsYXBzaWJsZSAmJiBhY3RpdmUgPT09IGZhbHNlICYmIHRoaXMuYW5jaG9ycy5sZW5ndGggKSB7XG5cdFx0XHRhY3RpdmUgPSAwO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY3RpdmU7XG5cdH0sXG5cblx0X2dldENyZWF0ZUV2ZW50RGF0YTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRhYjogdGhpcy5hY3RpdmUsXG5cdFx0XHRwYW5lbDogIXRoaXMuYWN0aXZlLmxlbmd0aCA/ICQoKSA6IHRoaXMuX2dldFBhbmVsRm9yVGFiKCB0aGlzLmFjdGl2ZSApXG5cdFx0fTtcblx0fSxcblxuXHRfdGFiS2V5ZG93bjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBmb2N1c2VkVGFiID0gJCggJC51aS5zYWZlQWN0aXZlRWxlbWVudCggdGhpcy5kb2N1bWVudFsgMCBdICkgKS5jbG9zZXN0KCBcImxpXCIgKSxcblx0XHRcdHNlbGVjdGVkSW5kZXggPSB0aGlzLnRhYnMuaW5kZXgoIGZvY3VzZWRUYWIgKSxcblx0XHRcdGdvaW5nRm9yd2FyZCA9IHRydWU7XG5cblx0XHRpZiAoIHRoaXMuX2hhbmRsZVBhZ2VOYXYoIGV2ZW50ICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0c3dpdGNoICggZXZlbnQua2V5Q29kZSApIHtcblx0XHRjYXNlICQudWkua2V5Q29kZS5SSUdIVDpcblx0XHRjYXNlICQudWkua2V5Q29kZS5ET1dOOlxuXHRcdFx0c2VsZWN0ZWRJbmRleCsrO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAkLnVpLmtleUNvZGUuVVA6XG5cdFx0Y2FzZSAkLnVpLmtleUNvZGUuTEVGVDpcblx0XHRcdGdvaW5nRm9yd2FyZCA9IGZhbHNlO1xuXHRcdFx0c2VsZWN0ZWRJbmRleC0tO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAkLnVpLmtleUNvZGUuRU5EOlxuXHRcdFx0c2VsZWN0ZWRJbmRleCA9IHRoaXMuYW5jaG9ycy5sZW5ndGggLSAxO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAkLnVpLmtleUNvZGUuSE9NRTpcblx0XHRcdHNlbGVjdGVkSW5kZXggPSAwO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAkLnVpLmtleUNvZGUuU1BBQ0U6XG5cblx0XHRcdC8vIEFjdGl2YXRlIG9ubHksIG5vIGNvbGxhcHNpbmdcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRjbGVhclRpbWVvdXQoIHRoaXMuYWN0aXZhdGluZyApO1xuXHRcdFx0dGhpcy5fYWN0aXZhdGUoIHNlbGVjdGVkSW5kZXggKTtcblx0XHRcdHJldHVybjtcblx0XHRjYXNlICQudWkua2V5Q29kZS5FTlRFUjpcblxuXHRcdFx0Ly8gVG9nZ2xlIChjYW5jZWwgZGVsYXllZCBhY3RpdmF0aW9uLCBhbGxvdyBjb2xsYXBzaW5nKVxuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGNsZWFyVGltZW91dCggdGhpcy5hY3RpdmF0aW5nICk7XG5cblx0XHRcdC8vIERldGVybWluZSBpZiB3ZSBzaG91bGQgY29sbGFwc2Ugb3IgYWN0aXZhdGVcblx0XHRcdHRoaXMuX2FjdGl2YXRlKCBzZWxlY3RlZEluZGV4ID09PSB0aGlzLm9wdGlvbnMuYWN0aXZlID8gZmFsc2UgOiBzZWxlY3RlZEluZGV4ICk7XG5cdFx0XHRyZXR1cm47XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGb2N1cyB0aGUgYXBwcm9wcmlhdGUgdGFiLCBiYXNlZCBvbiB3aGljaCBrZXkgd2FzIHByZXNzZWRcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGNsZWFyVGltZW91dCggdGhpcy5hY3RpdmF0aW5nICk7XG5cdFx0c2VsZWN0ZWRJbmRleCA9IHRoaXMuX2ZvY3VzTmV4dFRhYiggc2VsZWN0ZWRJbmRleCwgZ29pbmdGb3J3YXJkICk7XG5cblx0XHQvLyBOYXZpZ2F0aW5nIHdpdGggY29udHJvbC9jb21tYW5kIGtleSB3aWxsIHByZXZlbnQgYXV0b21hdGljIGFjdGl2YXRpb25cblx0XHRpZiAoICFldmVudC5jdHJsS2V5ICYmICFldmVudC5tZXRhS2V5ICkge1xuXG5cdFx0XHQvLyBVcGRhdGUgYXJpYS1zZWxlY3RlZCBpbW1lZGlhdGVseSBzbyB0aGF0IEFUIHRoaW5rIHRoZSB0YWIgaXMgYWxyZWFkeSBzZWxlY3RlZC5cblx0XHRcdC8vIE90aGVyd2lzZSBBVCBtYXkgY29uZnVzZSB0aGUgdXNlciBieSBzdGF0aW5nIHRoYXQgdGhleSBuZWVkIHRvIGFjdGl2YXRlIHRoZSB0YWIsXG5cdFx0XHQvLyBidXQgdGhlIHRhYiB3aWxsIGFscmVhZHkgYmUgYWN0aXZhdGVkIGJ5IHRoZSB0aW1lIHRoZSBhbm5vdW5jZW1lbnQgZmluaXNoZXMuXG5cdFx0XHRmb2N1c2VkVGFiLmF0dHIoIFwiYXJpYS1zZWxlY3RlZFwiLCBcImZhbHNlXCIgKTtcblx0XHRcdHRoaXMudGFicy5lcSggc2VsZWN0ZWRJbmRleCApLmF0dHIoIFwiYXJpYS1zZWxlY3RlZFwiLCBcInRydWVcIiApO1xuXG5cdFx0XHR0aGlzLmFjdGl2YXRpbmcgPSB0aGlzLl9kZWxheSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHRoaXMub3B0aW9uKCBcImFjdGl2ZVwiLCBzZWxlY3RlZEluZGV4ICk7XG5cdFx0XHR9LCB0aGlzLmRlbGF5ICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9wYW5lbEtleWRvd246IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRpZiAoIHRoaXMuX2hhbmRsZVBhZ2VOYXYoIGV2ZW50ICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ3RybCt1cCBtb3ZlcyBmb2N1cyB0byB0aGUgY3VycmVudCB0YWJcblx0XHRpZiAoIGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQua2V5Q29kZSA9PT0gJC51aS5rZXlDb2RlLlVQICkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMuYWN0aXZlLnRyaWdnZXIoIFwiZm9jdXNcIiApO1xuXHRcdH1cblx0fSxcblxuXHQvLyBBbHQrcGFnZSB1cC9kb3duIG1vdmVzIGZvY3VzIHRvIHRoZSBwcmV2aW91cy9uZXh0IHRhYiAoYW5kIGFjdGl2YXRlcylcblx0X2hhbmRsZVBhZ2VOYXY6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRpZiAoIGV2ZW50LmFsdEtleSAmJiBldmVudC5rZXlDb2RlID09PSAkLnVpLmtleUNvZGUuUEFHRV9VUCApIHtcblx0XHRcdHRoaXMuX2FjdGl2YXRlKCB0aGlzLl9mb2N1c05leHRUYWIoIHRoaXMub3B0aW9ucy5hY3RpdmUgLSAxLCBmYWxzZSApICk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKCBldmVudC5hbHRLZXkgJiYgZXZlbnQua2V5Q29kZSA9PT0gJC51aS5rZXlDb2RlLlBBR0VfRE9XTiApIHtcblx0XHRcdHRoaXMuX2FjdGl2YXRlKCB0aGlzLl9mb2N1c05leHRUYWIoIHRoaXMub3B0aW9ucy5hY3RpdmUgKyAxLCB0cnVlICkgKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fSxcblxuXHRfZmluZE5leHRUYWI6IGZ1bmN0aW9uKCBpbmRleCwgZ29pbmdGb3J3YXJkICkge1xuXHRcdHZhciBsYXN0VGFiSW5kZXggPSB0aGlzLnRhYnMubGVuZ3RoIC0gMTtcblxuXHRcdGZ1bmN0aW9uIGNvbnN0cmFpbigpIHtcblx0XHRcdGlmICggaW5kZXggPiBsYXN0VGFiSW5kZXggKSB7XG5cdFx0XHRcdGluZGV4ID0gMDtcblx0XHRcdH1cblx0XHRcdGlmICggaW5kZXggPCAwICkge1xuXHRcdFx0XHRpbmRleCA9IGxhc3RUYWJJbmRleDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBpbmRleDtcblx0XHR9XG5cblx0XHR3aGlsZSAoICQuaW5BcnJheSggY29uc3RyYWluKCksIHRoaXMub3B0aW9ucy5kaXNhYmxlZCApICE9PSAtMSApIHtcblx0XHRcdGluZGV4ID0gZ29pbmdGb3J3YXJkID8gaW5kZXggKyAxIDogaW5kZXggLSAxO1xuXHRcdH1cblxuXHRcdHJldHVybiBpbmRleDtcblx0fSxcblxuXHRfZm9jdXNOZXh0VGFiOiBmdW5jdGlvbiggaW5kZXgsIGdvaW5nRm9yd2FyZCApIHtcblx0XHRpbmRleCA9IHRoaXMuX2ZpbmROZXh0VGFiKCBpbmRleCwgZ29pbmdGb3J3YXJkICk7XG5cdFx0dGhpcy50YWJzLmVxKCBpbmRleCApLnRyaWdnZXIoIFwiZm9jdXNcIiApO1xuXHRcdHJldHVybiBpbmRleDtcblx0fSxcblxuXHRfc2V0T3B0aW9uOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHRpZiAoIGtleSA9PT0gXCJhY3RpdmVcIiApIHtcblxuXHRcdFx0Ly8gX2FjdGl2YXRlKCkgd2lsbCBoYW5kbGUgaW52YWxpZCB2YWx1ZXMgYW5kIHVwZGF0ZSB0aGlzLm9wdGlvbnNcblx0XHRcdHRoaXMuX2FjdGl2YXRlKCB2YWx1ZSApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX3N1cGVyKCBrZXksIHZhbHVlICk7XG5cblx0XHRpZiAoIGtleSA9PT0gXCJjb2xsYXBzaWJsZVwiICkge1xuXHRcdFx0dGhpcy5fdG9nZ2xlQ2xhc3MoIFwidWktdGFicy1jb2xsYXBzaWJsZVwiLCBudWxsLCB2YWx1ZSApO1xuXG5cdFx0XHQvLyBTZXR0aW5nIGNvbGxhcHNpYmxlOiBmYWxzZSB3aGlsZSBjb2xsYXBzZWQ7IG9wZW4gZmlyc3QgcGFuZWxcblx0XHRcdGlmICggIXZhbHVlICYmIHRoaXMub3B0aW9ucy5hY3RpdmUgPT09IGZhbHNlICkge1xuXHRcdFx0XHR0aGlzLl9hY3RpdmF0ZSggMCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICgga2V5ID09PSBcImV2ZW50XCIgKSB7XG5cdFx0XHR0aGlzLl9zZXR1cEV2ZW50cyggdmFsdWUgKTtcblx0XHR9XG5cblx0XHRpZiAoIGtleSA9PT0gXCJoZWlnaHRTdHlsZVwiICkge1xuXHRcdFx0dGhpcy5fc2V0dXBIZWlnaHRTdHlsZSggdmFsdWUgKTtcblx0XHR9XG5cdH0sXG5cblx0X3Nhbml0aXplU2VsZWN0b3I6IGZ1bmN0aW9uKCBoYXNoICkge1xuXHRcdHJldHVybiBoYXNoID8gaGFzaC5yZXBsYWNlKCAvWyFcIiQlJicoKSorLC5cXC86Ozw9Pj9AXFxbXFxdXFxeYHt8fX5dL2csIFwiXFxcXCQmXCIgKSA6IFwiXCI7XG5cdH0sXG5cblx0cmVmcmVzaDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG5cdFx0XHRsaXMgPSB0aGlzLnRhYmxpc3QuY2hpbGRyZW4oIFwiOmhhcyhhW2hyZWZdKVwiICk7XG5cblx0XHQvLyBHZXQgZGlzYWJsZWQgdGFicyBmcm9tIGNsYXNzIGF0dHJpYnV0ZSBmcm9tIEhUTUxcblx0XHQvLyB0aGlzIHdpbGwgZ2V0IGNvbnZlcnRlZCB0byBhIGJvb2xlYW4gaWYgbmVlZGVkIGluIF9yZWZyZXNoKClcblx0XHRvcHRpb25zLmRpc2FibGVkID0gJC5tYXAoIGxpcy5maWx0ZXIoIFwiLnVpLXN0YXRlLWRpc2FibGVkXCIgKSwgZnVuY3Rpb24oIHRhYiApIHtcblx0XHRcdHJldHVybiBsaXMuaW5kZXgoIHRhYiApO1xuXHRcdH0gKTtcblxuXHRcdHRoaXMuX3Byb2Nlc3NUYWJzKCk7XG5cblx0XHQvLyBXYXMgY29sbGFwc2VkIG9yIG5vIHRhYnNcblx0XHRpZiAoIG9wdGlvbnMuYWN0aXZlID09PSBmYWxzZSB8fCAhdGhpcy5hbmNob3JzLmxlbmd0aCApIHtcblx0XHRcdG9wdGlvbnMuYWN0aXZlID0gZmFsc2U7XG5cdFx0XHR0aGlzLmFjdGl2ZSA9ICQoKTtcblxuXHRcdC8vIHdhcyBhY3RpdmUsIGJ1dCBhY3RpdmUgdGFiIGlzIGdvbmVcblx0XHR9IGVsc2UgaWYgKCB0aGlzLmFjdGl2ZS5sZW5ndGggJiYgISQuY29udGFpbnMoIHRoaXMudGFibGlzdFsgMCBdLCB0aGlzLmFjdGl2ZVsgMCBdICkgKSB7XG5cblx0XHRcdC8vIGFsbCByZW1haW5pbmcgdGFicyBhcmUgZGlzYWJsZWRcblx0XHRcdGlmICggdGhpcy50YWJzLmxlbmd0aCA9PT0gb3B0aW9ucy5kaXNhYmxlZC5sZW5ndGggKSB7XG5cdFx0XHRcdG9wdGlvbnMuYWN0aXZlID0gZmFsc2U7XG5cdFx0XHRcdHRoaXMuYWN0aXZlID0gJCgpO1xuXG5cdFx0XHQvLyBhY3RpdmF0ZSBwcmV2aW91cyB0YWJcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuX2FjdGl2YXRlKCB0aGlzLl9maW5kTmV4dFRhYiggTWF0aC5tYXgoIDAsIG9wdGlvbnMuYWN0aXZlIC0gMSApLCBmYWxzZSApICk7XG5cdFx0XHR9XG5cblx0XHQvLyB3YXMgYWN0aXZlLCBhY3RpdmUgdGFiIHN0aWxsIGV4aXN0c1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIG1ha2Ugc3VyZSBhY3RpdmUgaW5kZXggaXMgY29ycmVjdFxuXHRcdFx0b3B0aW9ucy5hY3RpdmUgPSB0aGlzLnRhYnMuaW5kZXgoIHRoaXMuYWN0aXZlICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fcmVmcmVzaCgpO1xuXHR9LFxuXG5cdF9yZWZyZXNoOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLl9zZXRPcHRpb25EaXNhYmxlZCggdGhpcy5vcHRpb25zLmRpc2FibGVkICk7XG5cdFx0dGhpcy5fc2V0dXBFdmVudHMoIHRoaXMub3B0aW9ucy5ldmVudCApO1xuXHRcdHRoaXMuX3NldHVwSGVpZ2h0U3R5bGUoIHRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSApO1xuXG5cdFx0dGhpcy50YWJzLm5vdCggdGhpcy5hY3RpdmUgKS5hdHRyKCB7XG5cdFx0XHRcImFyaWEtc2VsZWN0ZWRcIjogXCJmYWxzZVwiLFxuXHRcdFx0XCJhcmlhLWV4cGFuZGVkXCI6IFwiZmFsc2VcIixcblx0XHRcdHRhYkluZGV4OiAtMVxuXHRcdH0gKTtcblx0XHR0aGlzLnBhbmVscy5ub3QoIHRoaXMuX2dldFBhbmVsRm9yVGFiKCB0aGlzLmFjdGl2ZSApIClcblx0XHRcdC5oaWRlKClcblx0XHRcdC5hdHRyKCB7XG5cdFx0XHRcdFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCJcblx0XHRcdH0gKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSBvbmUgdGFiIGlzIGluIHRoZSB0YWIgb3JkZXJcblx0XHRpZiAoICF0aGlzLmFjdGl2ZS5sZW5ndGggKSB7XG5cdFx0XHR0aGlzLnRhYnMuZXEoIDAgKS5hdHRyKCBcInRhYkluZGV4XCIsIDAgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hY3RpdmVcblx0XHRcdFx0LmF0dHIoIHtcblx0XHRcdFx0XHRcImFyaWEtc2VsZWN0ZWRcIjogXCJ0cnVlXCIsXG5cdFx0XHRcdFx0XCJhcmlhLWV4cGFuZGVkXCI6IFwidHJ1ZVwiLFxuXHRcdFx0XHRcdHRhYkluZGV4OiAwXG5cdFx0XHRcdH0gKTtcblx0XHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLmFjdGl2ZSwgXCJ1aS10YWJzLWFjdGl2ZVwiLCBcInVpLXN0YXRlLWFjdGl2ZVwiICk7XG5cdFx0XHR0aGlzLl9nZXRQYW5lbEZvclRhYiggdGhpcy5hY3RpdmUgKVxuXHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdC5hdHRyKCB7XG5cdFx0XHRcdFx0XCJhcmlhLWhpZGRlblwiOiBcImZhbHNlXCJcblx0XHRcdFx0fSApO1xuXHRcdH1cblx0fSxcblxuXHRfcHJvY2Vzc1RhYnM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aGF0ID0gdGhpcyxcblx0XHRcdHByZXZUYWJzID0gdGhpcy50YWJzLFxuXHRcdFx0cHJldkFuY2hvcnMgPSB0aGlzLmFuY2hvcnMsXG5cdFx0XHRwcmV2UGFuZWxzID0gdGhpcy5wYW5lbHM7XG5cblx0XHR0aGlzLnRhYmxpc3QgPSB0aGlzLl9nZXRMaXN0KCkuYXR0ciggXCJyb2xlXCIsIFwidGFibGlzdFwiICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMudGFibGlzdCwgXCJ1aS10YWJzLW5hdlwiLFxuXHRcdFx0XCJ1aS1oZWxwZXItcmVzZXQgdWktaGVscGVyLWNsZWFyZml4IHVpLXdpZGdldC1oZWFkZXJcIiApO1xuXG5cdFx0Ly8gUHJldmVudCB1c2VycyBmcm9tIGZvY3VzaW5nIGRpc2FibGVkIHRhYnMgdmlhIGNsaWNrXG5cdFx0dGhpcy50YWJsaXN0XG5cdFx0XHQub24oIFwibW91c2Vkb3duXCIgKyB0aGlzLmV2ZW50TmFtZXNwYWNlLCBcIj4gbGlcIiwgZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHRpZiAoICQoIHRoaXMgKS5pcyggXCIudWktc3RhdGUtZGlzYWJsZWRcIiApICkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8OVxuXHRcdFx0Ly8gUHJldmVudGluZyB0aGUgZGVmYXVsdCBhY3Rpb24gaW4gbW91c2Vkb3duIGRvZXNuJ3QgcHJldmVudCBJRVxuXHRcdFx0Ly8gZnJvbSBmb2N1c2luZyB0aGUgZWxlbWVudCwgc28gaWYgdGhlIGFuY2hvciBnZXRzIGZvY3VzZWQsIGJsdXIuXG5cdFx0XHQvLyBXZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGZvY3VzaW5nIHRoZSBwcmV2aW91c2x5IGZvY3VzZWRcblx0XHRcdC8vIGVsZW1lbnQgc2luY2UgY2xpY2tpbmcgb24gYSBub24tZm9jdXNhYmxlIGVsZW1lbnQgc2hvdWxkIGZvY3VzXG5cdFx0XHQvLyB0aGUgYm9keSBhbnl3YXkuXG5cdFx0XHQub24oIFwiZm9jdXNcIiArIHRoaXMuZXZlbnROYW1lc3BhY2UsIFwiLnVpLXRhYnMtYW5jaG9yXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICQoIHRoaXMgKS5jbG9zZXN0KCBcImxpXCIgKS5pcyggXCIudWktc3RhdGUtZGlzYWJsZWRcIiApICkge1xuXHRcdFx0XHRcdHRoaXMuYmx1cigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cblx0XHR0aGlzLnRhYnMgPSB0aGlzLnRhYmxpc3QuZmluZCggXCI+IGxpOmhhcyhhW2hyZWZdKVwiIClcblx0XHRcdC5hdHRyKCB7XG5cdFx0XHRcdHJvbGU6IFwidGFiXCIsXG5cdFx0XHRcdHRhYkluZGV4OiAtMVxuXHRcdFx0fSApO1xuXHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLnRhYnMsIFwidWktdGFicy10YWJcIiwgXCJ1aS1zdGF0ZS1kZWZhdWx0XCIgKTtcblxuXHRcdHRoaXMuYW5jaG9ycyA9IHRoaXMudGFicy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuICQoIFwiYVwiLCB0aGlzIClbIDAgXTtcblx0XHR9IClcblx0XHRcdC5hdHRyKCB7XG5cdFx0XHRcdHJvbGU6IFwicHJlc2VudGF0aW9uXCIsXG5cdFx0XHRcdHRhYkluZGV4OiAtMVxuXHRcdFx0fSApO1xuXHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLmFuY2hvcnMsIFwidWktdGFicy1hbmNob3JcIiApO1xuXG5cdFx0dGhpcy5wYW5lbHMgPSAkKCk7XG5cblx0XHR0aGlzLmFuY2hvcnMuZWFjaCggZnVuY3Rpb24oIGksIGFuY2hvciApIHtcblx0XHRcdHZhciBzZWxlY3RvciwgcGFuZWwsIHBhbmVsSWQsXG5cdFx0XHRcdGFuY2hvcklkID0gJCggYW5jaG9yICkudW5pcXVlSWQoKS5hdHRyKCBcImlkXCIgKSxcblx0XHRcdFx0dGFiID0gJCggYW5jaG9yICkuY2xvc2VzdCggXCJsaVwiICksXG5cdFx0XHRcdG9yaWdpbmFsQXJpYUNvbnRyb2xzID0gdGFiLmF0dHIoIFwiYXJpYS1jb250cm9sc1wiICk7XG5cblx0XHRcdC8vIElubGluZSB0YWJcblx0XHRcdGlmICggdGhhdC5faXNMb2NhbCggYW5jaG9yICkgKSB7XG5cdFx0XHRcdHNlbGVjdG9yID0gYW5jaG9yLmhhc2g7XG5cdFx0XHRcdHBhbmVsSWQgPSBzZWxlY3Rvci5zdWJzdHJpbmcoIDEgKTtcblx0XHRcdFx0cGFuZWwgPSB0aGF0LmVsZW1lbnQuZmluZCggdGhhdC5fc2FuaXRpemVTZWxlY3Rvciggc2VsZWN0b3IgKSApO1xuXG5cdFx0XHQvLyByZW1vdGUgdGFiXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIElmIHRoZSB0YWIgZG9lc24ndCBhbHJlYWR5IGhhdmUgYXJpYS1jb250cm9scyxcblx0XHRcdFx0Ly8gZ2VuZXJhdGUgYW4gaWQgYnkgdXNpbmcgYSB0aHJvdy1hd2F5IGVsZW1lbnRcblx0XHRcdFx0cGFuZWxJZCA9IHRhYi5hdHRyKCBcImFyaWEtY29udHJvbHNcIiApIHx8ICQoIHt9ICkudW5pcXVlSWQoKVsgMCBdLmlkO1xuXHRcdFx0XHRzZWxlY3RvciA9IFwiI1wiICsgcGFuZWxJZDtcblx0XHRcdFx0cGFuZWwgPSB0aGF0LmVsZW1lbnQuZmluZCggc2VsZWN0b3IgKTtcblx0XHRcdFx0aWYgKCAhcGFuZWwubGVuZ3RoICkge1xuXHRcdFx0XHRcdHBhbmVsID0gdGhhdC5fY3JlYXRlUGFuZWwoIHBhbmVsSWQgKTtcblx0XHRcdFx0XHRwYW5lbC5pbnNlcnRBZnRlciggdGhhdC5wYW5lbHNbIGkgLSAxIF0gfHwgdGhhdC50YWJsaXN0ICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cGFuZWwuYXR0ciggXCJhcmlhLWxpdmVcIiwgXCJwb2xpdGVcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHBhbmVsLmxlbmd0aCApIHtcblx0XHRcdFx0dGhhdC5wYW5lbHMgPSB0aGF0LnBhbmVscy5hZGQoIHBhbmVsICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG9yaWdpbmFsQXJpYUNvbnRyb2xzICkge1xuXHRcdFx0XHR0YWIuZGF0YSggXCJ1aS10YWJzLWFyaWEtY29udHJvbHNcIiwgb3JpZ2luYWxBcmlhQ29udHJvbHMgKTtcblx0XHRcdH1cblx0XHRcdHRhYi5hdHRyKCB7XG5cdFx0XHRcdFwiYXJpYS1jb250cm9sc1wiOiBwYW5lbElkLFxuXHRcdFx0XHRcImFyaWEtbGFiZWxsZWRieVwiOiBhbmNob3JJZFxuXHRcdFx0fSApO1xuXHRcdFx0cGFuZWwuYXR0ciggXCJhcmlhLWxhYmVsbGVkYnlcIiwgYW5jaG9ySWQgKTtcblx0XHR9ICk7XG5cblx0XHR0aGlzLnBhbmVscy5hdHRyKCBcInJvbGVcIiwgXCJ0YWJwYW5lbFwiICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMucGFuZWxzLCBcInVpLXRhYnMtcGFuZWxcIiwgXCJ1aS13aWRnZXQtY29udGVudFwiICk7XG5cblx0XHQvLyBBdm9pZCBtZW1vcnkgbGVha3MgKCMxMDA1Nilcblx0XHRpZiAoIHByZXZUYWJzICkge1xuXHRcdFx0dGhpcy5fb2ZmKCBwcmV2VGFicy5ub3QoIHRoaXMudGFicyApICk7XG5cdFx0XHR0aGlzLl9vZmYoIHByZXZBbmNob3JzLm5vdCggdGhpcy5hbmNob3JzICkgKTtcblx0XHRcdHRoaXMuX29mZiggcHJldlBhbmVscy5ub3QoIHRoaXMucGFuZWxzICkgKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gQWxsb3cgb3ZlcnJpZGluZyBob3cgdG8gZmluZCB0aGUgbGlzdCBmb3IgcmFyZSB1c2FnZSBzY2VuYXJpb3MgKCM3NzE1KVxuXHRfZ2V0TGlzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMudGFibGlzdCB8fCB0aGlzLmVsZW1lbnQuZmluZCggXCJvbCwgdWxcIiApLmVxKCAwICk7XG5cdH0sXG5cblx0X2NyZWF0ZVBhbmVsOiBmdW5jdGlvbiggaWQgKSB7XG5cdFx0cmV0dXJuICQoIFwiPGRpdj5cIiApXG5cdFx0XHQuYXR0ciggXCJpZFwiLCBpZCApXG5cdFx0XHQuZGF0YSggXCJ1aS10YWJzLWRlc3Ryb3lcIiwgdHJ1ZSApO1xuXHR9LFxuXG5cdF9zZXRPcHRpb25EaXNhYmxlZDogZnVuY3Rpb24oIGRpc2FibGVkICkge1xuXHRcdHZhciBjdXJyZW50SXRlbSwgbGksIGk7XG5cblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIGRpc2FibGVkICkgKSB7XG5cdFx0XHRpZiAoICFkaXNhYmxlZC5sZW5ndGggKSB7XG5cdFx0XHRcdGRpc2FibGVkID0gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKCBkaXNhYmxlZC5sZW5ndGggPT09IHRoaXMuYW5jaG9ycy5sZW5ndGggKSB7XG5cdFx0XHRcdGRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBEaXNhYmxlIHRhYnNcblx0XHRmb3IgKCBpID0gMDsgKCBsaSA9IHRoaXMudGFic1sgaSBdICk7IGkrKyApIHtcblx0XHRcdGN1cnJlbnRJdGVtID0gJCggbGkgKTtcblx0XHRcdGlmICggZGlzYWJsZWQgPT09IHRydWUgfHwgJC5pbkFycmF5KCBpLCBkaXNhYmxlZCApICE9PSAtMSApIHtcblx0XHRcdFx0Y3VycmVudEl0ZW0uYXR0ciggXCJhcmlhLWRpc2FibGVkXCIsIFwidHJ1ZVwiICk7XG5cdFx0XHRcdHRoaXMuX2FkZENsYXNzKCBjdXJyZW50SXRlbSwgbnVsbCwgXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjdXJyZW50SXRlbS5yZW1vdmVBdHRyKCBcImFyaWEtZGlzYWJsZWRcIiApO1xuXHRcdFx0XHR0aGlzLl9yZW1vdmVDbGFzcyggY3VycmVudEl0ZW0sIG51bGwsIFwidWktc3RhdGUtZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMub3B0aW9ucy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuXG5cdFx0dGhpcy5fdG9nZ2xlQ2xhc3MoIHRoaXMud2lkZ2V0KCksIHRoaXMud2lkZ2V0RnVsbE5hbWUgKyBcIi1kaXNhYmxlZFwiLCBudWxsLFxuXHRcdFx0ZGlzYWJsZWQgPT09IHRydWUgKTtcblx0fSxcblxuXHRfc2V0dXBFdmVudHM6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgZXZlbnRzID0ge307XG5cdFx0aWYgKCBldmVudCApIHtcblx0XHRcdCQuZWFjaCggZXZlbnQuc3BsaXQoIFwiIFwiICksIGZ1bmN0aW9uKCBpbmRleCwgZXZlbnROYW1lICkge1xuXHRcdFx0XHRldmVudHNbIGV2ZW50TmFtZSBdID0gXCJfZXZlbnRIYW5kbGVyXCI7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fb2ZmKCB0aGlzLmFuY2hvcnMuYWRkKCB0aGlzLnRhYnMgKS5hZGQoIHRoaXMucGFuZWxzICkgKTtcblxuXHRcdC8vIEFsd2F5cyBwcmV2ZW50IHRoZSBkZWZhdWx0IGFjdGlvbiwgZXZlbiB3aGVuIGRpc2FibGVkXG5cdFx0dGhpcy5fb24oIHRydWUsIHRoaXMuYW5jaG9ycywge1xuXHRcdFx0Y2xpY2s6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0dGhpcy5fb24oIHRoaXMuYW5jaG9ycywgZXZlbnRzICk7XG5cdFx0dGhpcy5fb24oIHRoaXMudGFicywgeyBrZXlkb3duOiBcIl90YWJLZXlkb3duXCIgfSApO1xuXHRcdHRoaXMuX29uKCB0aGlzLnBhbmVscywgeyBrZXlkb3duOiBcIl9wYW5lbEtleWRvd25cIiB9ICk7XG5cblx0XHR0aGlzLl9mb2N1c2FibGUoIHRoaXMudGFicyApO1xuXHRcdHRoaXMuX2hvdmVyYWJsZSggdGhpcy50YWJzICk7XG5cdH0sXG5cblx0X3NldHVwSGVpZ2h0U3R5bGU6IGZ1bmN0aW9uKCBoZWlnaHRTdHlsZSApIHtcblx0XHR2YXIgbWF4SGVpZ2h0LFxuXHRcdFx0cGFyZW50ID0gdGhpcy5lbGVtZW50LnBhcmVudCgpO1xuXG5cdFx0aWYgKCBoZWlnaHRTdHlsZSA9PT0gXCJmaWxsXCIgKSB7XG5cdFx0XHRtYXhIZWlnaHQgPSBwYXJlbnQuaGVpZ2h0KCk7XG5cdFx0XHRtYXhIZWlnaHQgLT0gdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCkgLSB0aGlzLmVsZW1lbnQuaGVpZ2h0KCk7XG5cblx0XHRcdHRoaXMuZWxlbWVudC5zaWJsaW5ncyggXCI6dmlzaWJsZVwiICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gJCggdGhpcyApLFxuXHRcdFx0XHRcdHBvc2l0aW9uID0gZWxlbS5jc3MoIFwicG9zaXRpb25cIiApO1xuXG5cdFx0XHRcdGlmICggcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJmaXhlZFwiICkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRtYXhIZWlnaHQgLT0gZWxlbS5vdXRlckhlaWdodCggdHJ1ZSApO1xuXHRcdFx0fSApO1xuXG5cdFx0XHR0aGlzLmVsZW1lbnQuY2hpbGRyZW4oKS5ub3QoIHRoaXMucGFuZWxzICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdG1heEhlaWdodCAtPSAkKCB0aGlzICkub3V0ZXJIZWlnaHQoIHRydWUgKTtcblx0XHRcdH0gKTtcblxuXHRcdFx0dGhpcy5wYW5lbHMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdCQoIHRoaXMgKS5oZWlnaHQoIE1hdGgubWF4KCAwLCBtYXhIZWlnaHQgLVxuXHRcdFx0XHRcdCQoIHRoaXMgKS5pbm5lckhlaWdodCgpICsgJCggdGhpcyApLmhlaWdodCgpICkgKTtcblx0XHRcdH0gKVxuXHRcdFx0XHQuY3NzKCBcIm92ZXJmbG93XCIsIFwiYXV0b1wiICk7XG5cdFx0fSBlbHNlIGlmICggaGVpZ2h0U3R5bGUgPT09IFwiYXV0b1wiICkge1xuXHRcdFx0bWF4SGVpZ2h0ID0gMDtcblx0XHRcdHRoaXMucGFuZWxzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRtYXhIZWlnaHQgPSBNYXRoLm1heCggbWF4SGVpZ2h0LCAkKCB0aGlzICkuaGVpZ2h0KCBcIlwiICkuaGVpZ2h0KCkgKTtcblx0XHRcdH0gKS5oZWlnaHQoIG1heEhlaWdodCApO1xuXHRcdH1cblx0fSxcblxuXHRfZXZlbnRIYW5kbGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG5cdFx0XHRhY3RpdmUgPSB0aGlzLmFjdGl2ZSxcblx0XHRcdGFuY2hvciA9ICQoIGV2ZW50LmN1cnJlbnRUYXJnZXQgKSxcblx0XHRcdHRhYiA9IGFuY2hvci5jbG9zZXN0KCBcImxpXCIgKSxcblx0XHRcdGNsaWNrZWRJc0FjdGl2ZSA9IHRhYlsgMCBdID09PSBhY3RpdmVbIDAgXSxcblx0XHRcdGNvbGxhcHNpbmcgPSBjbGlja2VkSXNBY3RpdmUgJiYgb3B0aW9ucy5jb2xsYXBzaWJsZSxcblx0XHRcdHRvU2hvdyA9IGNvbGxhcHNpbmcgPyAkKCkgOiB0aGlzLl9nZXRQYW5lbEZvclRhYiggdGFiICksXG5cdFx0XHR0b0hpZGUgPSAhYWN0aXZlLmxlbmd0aCA/ICQoKSA6IHRoaXMuX2dldFBhbmVsRm9yVGFiKCBhY3RpdmUgKSxcblx0XHRcdGV2ZW50RGF0YSA9IHtcblx0XHRcdFx0b2xkVGFiOiBhY3RpdmUsXG5cdFx0XHRcdG9sZFBhbmVsOiB0b0hpZGUsXG5cdFx0XHRcdG5ld1RhYjogY29sbGFwc2luZyA/ICQoKSA6IHRhYixcblx0XHRcdFx0bmV3UGFuZWw6IHRvU2hvd1xuXHRcdFx0fTtcblxuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRpZiAoIHRhYi5oYXNDbGFzcyggXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiICkgfHxcblxuXHRcdFx0XHQvLyB0YWIgaXMgYWxyZWFkeSBsb2FkaW5nXG5cdFx0XHRcdHRhYi5oYXNDbGFzcyggXCJ1aS10YWJzLWxvYWRpbmdcIiApIHx8XG5cblx0XHRcdFx0Ly8gY2FuJ3Qgc3dpdGNoIGR1cm5pbmcgYW4gYW5pbWF0aW9uXG5cdFx0XHRcdHRoaXMucnVubmluZyB8fFxuXG5cdFx0XHRcdC8vIGNsaWNrIG9uIGFjdGl2ZSBoZWFkZXIsIGJ1dCBub3QgY29sbGFwc2libGVcblx0XHRcdFx0KCBjbGlja2VkSXNBY3RpdmUgJiYgIW9wdGlvbnMuY29sbGFwc2libGUgKSB8fFxuXG5cdFx0XHRcdC8vIGFsbG93IGNhbmNlbGluZyBhY3RpdmF0aW9uXG5cdFx0XHRcdCggdGhpcy5fdHJpZ2dlciggXCJiZWZvcmVBY3RpdmF0ZVwiLCBldmVudCwgZXZlbnREYXRhICkgPT09IGZhbHNlICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0b3B0aW9ucy5hY3RpdmUgPSBjb2xsYXBzaW5nID8gZmFsc2UgOiB0aGlzLnRhYnMuaW5kZXgoIHRhYiApO1xuXG5cdFx0dGhpcy5hY3RpdmUgPSBjbGlja2VkSXNBY3RpdmUgPyAkKCkgOiB0YWI7XG5cdFx0aWYgKCB0aGlzLnhociApIHtcblx0XHRcdHRoaXMueGhyLmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhdG9IaWRlLmxlbmd0aCAmJiAhdG9TaG93Lmxlbmd0aCApIHtcblx0XHRcdCQuZXJyb3IoIFwialF1ZXJ5IFVJIFRhYnM6IE1pc21hdGNoaW5nIGZyYWdtZW50IGlkZW50aWZpZXIuXCIgKTtcblx0XHR9XG5cblx0XHRpZiAoIHRvU2hvdy5sZW5ndGggKSB7XG5cdFx0XHR0aGlzLmxvYWQoIHRoaXMudGFicy5pbmRleCggdGFiICksIGV2ZW50ICk7XG5cdFx0fVxuXHRcdHRoaXMuX3RvZ2dsZSggZXZlbnQsIGV2ZW50RGF0YSApO1xuXHR9LFxuXG5cdC8vIEhhbmRsZXMgc2hvdy9oaWRlIGZvciBzZWxlY3RpbmcgdGFic1xuXHRfdG9nZ2xlOiBmdW5jdGlvbiggZXZlbnQsIGV2ZW50RGF0YSApIHtcblx0XHR2YXIgdGhhdCA9IHRoaXMsXG5cdFx0XHR0b1Nob3cgPSBldmVudERhdGEubmV3UGFuZWwsXG5cdFx0XHR0b0hpZGUgPSBldmVudERhdGEub2xkUGFuZWw7XG5cblx0XHR0aGlzLnJ1bm5pbmcgPSB0cnVlO1xuXG5cdFx0ZnVuY3Rpb24gY29tcGxldGUoKSB7XG5cdFx0XHR0aGF0LnJ1bm5pbmcgPSBmYWxzZTtcblx0XHRcdHRoYXQuX3RyaWdnZXIoIFwiYWN0aXZhdGVcIiwgZXZlbnQsIGV2ZW50RGF0YSApO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHNob3coKSB7XG5cdFx0XHR0aGF0Ll9hZGRDbGFzcyggZXZlbnREYXRhLm5ld1RhYi5jbG9zZXN0KCBcImxpXCIgKSwgXCJ1aS10YWJzLWFjdGl2ZVwiLCBcInVpLXN0YXRlLWFjdGl2ZVwiICk7XG5cblx0XHRcdGlmICggdG9TaG93Lmxlbmd0aCAmJiB0aGF0Lm9wdGlvbnMuc2hvdyApIHtcblx0XHRcdFx0dGhhdC5fc2hvdyggdG9TaG93LCB0aGF0Lm9wdGlvbnMuc2hvdywgY29tcGxldGUgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRvU2hvdy5zaG93KCk7XG5cdFx0XHRcdGNvbXBsZXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU3RhcnQgb3V0IGJ5IGhpZGluZywgdGhlbiBzaG93aW5nLCB0aGVuIGNvbXBsZXRpbmdcblx0XHRpZiAoIHRvSGlkZS5sZW5ndGggJiYgdGhpcy5vcHRpb25zLmhpZGUgKSB7XG5cdFx0XHR0aGlzLl9oaWRlKCB0b0hpZGUsIHRoaXMub3B0aW9ucy5oaWRlLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dGhhdC5fcmVtb3ZlQ2xhc3MoIGV2ZW50RGF0YS5vbGRUYWIuY2xvc2VzdCggXCJsaVwiICksXG5cdFx0XHRcdFx0XCJ1aS10YWJzLWFjdGl2ZVwiLCBcInVpLXN0YXRlLWFjdGl2ZVwiICk7XG5cdFx0XHRcdHNob3coKTtcblx0XHRcdH0gKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIGV2ZW50RGF0YS5vbGRUYWIuY2xvc2VzdCggXCJsaVwiICksXG5cdFx0XHRcdFwidWktdGFicy1hY3RpdmVcIiwgXCJ1aS1zdGF0ZS1hY3RpdmVcIiApO1xuXHRcdFx0dG9IaWRlLmhpZGUoKTtcblx0XHRcdHNob3coKTtcblx0XHR9XG5cblx0XHR0b0hpZGUuYXR0ciggXCJhcmlhLWhpZGRlblwiLCBcInRydWVcIiApO1xuXHRcdGV2ZW50RGF0YS5vbGRUYWIuYXR0cigge1xuXHRcdFx0XCJhcmlhLXNlbGVjdGVkXCI6IFwiZmFsc2VcIixcblx0XHRcdFwiYXJpYS1leHBhbmRlZFwiOiBcImZhbHNlXCJcblx0XHR9ICk7XG5cblx0XHQvLyBJZiB3ZSdyZSBzd2l0Y2hpbmcgdGFicywgcmVtb3ZlIHRoZSBvbGQgdGFiIGZyb20gdGhlIHRhYiBvcmRlci5cblx0XHQvLyBJZiB3ZSdyZSBvcGVuaW5nIGZyb20gY29sbGFwc2VkIHN0YXRlLCByZW1vdmUgdGhlIHByZXZpb3VzIHRhYiBmcm9tIHRoZSB0YWIgb3JkZXIuXG5cdFx0Ly8gSWYgd2UncmUgY29sbGFwc2luZywgdGhlbiBrZWVwIHRoZSBjb2xsYXBzaW5nIHRhYiBpbiB0aGUgdGFiIG9yZGVyLlxuXHRcdGlmICggdG9TaG93Lmxlbmd0aCAmJiB0b0hpZGUubGVuZ3RoICkge1xuXHRcdFx0ZXZlbnREYXRhLm9sZFRhYi5hdHRyKCBcInRhYkluZGV4XCIsIC0xICk7XG5cdFx0fSBlbHNlIGlmICggdG9TaG93Lmxlbmd0aCApIHtcblx0XHRcdHRoaXMudGFicy5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gJCggdGhpcyApLmF0dHIoIFwidGFiSW5kZXhcIiApID09PSAwO1xuXHRcdFx0fSApXG5cdFx0XHRcdC5hdHRyKCBcInRhYkluZGV4XCIsIC0xICk7XG5cdFx0fVxuXG5cdFx0dG9TaG93LmF0dHIoIFwiYXJpYS1oaWRkZW5cIiwgXCJmYWxzZVwiICk7XG5cdFx0ZXZlbnREYXRhLm5ld1RhYi5hdHRyKCB7XG5cdFx0XHRcImFyaWEtc2VsZWN0ZWRcIjogXCJ0cnVlXCIsXG5cdFx0XHRcImFyaWEtZXhwYW5kZWRcIjogXCJ0cnVlXCIsXG5cdFx0XHR0YWJJbmRleDogMFxuXHRcdH0gKTtcblx0fSxcblxuXHRfYWN0aXZhdGU6IGZ1bmN0aW9uKCBpbmRleCApIHtcblx0XHR2YXIgYW5jaG9yLFxuXHRcdFx0YWN0aXZlID0gdGhpcy5fZmluZEFjdGl2ZSggaW5kZXggKTtcblxuXHRcdC8vIFRyeWluZyB0byBhY3RpdmF0ZSB0aGUgYWxyZWFkeSBhY3RpdmUgcGFuZWxcblx0XHRpZiAoIGFjdGl2ZVsgMCBdID09PSB0aGlzLmFjdGl2ZVsgMCBdICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFRyeWluZyB0byBjb2xsYXBzZSwgc2ltdWxhdGUgYSBjbGljayBvbiB0aGUgY3VycmVudCBhY3RpdmUgaGVhZGVyXG5cdFx0aWYgKCAhYWN0aXZlLmxlbmd0aCApIHtcblx0XHRcdGFjdGl2ZSA9IHRoaXMuYWN0aXZlO1xuXHRcdH1cblxuXHRcdGFuY2hvciA9IGFjdGl2ZS5maW5kKCBcIi51aS10YWJzLWFuY2hvclwiIClbIDAgXTtcblx0XHR0aGlzLl9ldmVudEhhbmRsZXIoIHtcblx0XHRcdHRhcmdldDogYW5jaG9yLFxuXHRcdFx0Y3VycmVudFRhcmdldDogYW5jaG9yLFxuXHRcdFx0cHJldmVudERlZmF1bHQ6ICQubm9vcFxuXHRcdH0gKTtcblx0fSxcblxuXHRfZmluZEFjdGl2ZTogZnVuY3Rpb24oIGluZGV4ICkge1xuXHRcdHJldHVybiBpbmRleCA9PT0gZmFsc2UgPyAkKCkgOiB0aGlzLnRhYnMuZXEoIGluZGV4ICk7XG5cdH0sXG5cblx0X2dldEluZGV4OiBmdW5jdGlvbiggaW5kZXggKSB7XG5cblx0XHQvLyBtZXRhLWZ1bmN0aW9uIHRvIGdpdmUgdXNlcnMgb3B0aW9uIHRvIHByb3ZpZGUgYSBocmVmIHN0cmluZyBpbnN0ZWFkIG9mIGEgbnVtZXJpY2FsIGluZGV4LlxuXHRcdGlmICggdHlwZW9mIGluZGV4ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0aW5kZXggPSB0aGlzLmFuY2hvcnMuaW5kZXgoIHRoaXMuYW5jaG9ycy5maWx0ZXIoIFwiW2hyZWYkPSdcIiArXG5cdFx0XHRcdCQudWkuZXNjYXBlU2VsZWN0b3IoIGluZGV4ICkgKyBcIiddXCIgKSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBpbmRleDtcblx0fSxcblxuXHRfZGVzdHJveTogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCB0aGlzLnhociApIHtcblx0XHRcdHRoaXMueGhyLmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0dGhpcy50YWJsaXN0XG5cdFx0XHQucmVtb3ZlQXR0ciggXCJyb2xlXCIgKVxuXHRcdFx0Lm9mZiggdGhpcy5ldmVudE5hbWVzcGFjZSApO1xuXG5cdFx0dGhpcy5hbmNob3JzXG5cdFx0XHQucmVtb3ZlQXR0ciggXCJyb2xlIHRhYkluZGV4XCIgKVxuXHRcdFx0LnJlbW92ZVVuaXF1ZUlkKCk7XG5cblx0XHR0aGlzLnRhYnMuYWRkKCB0aGlzLnBhbmVscyApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAkLmRhdGEoIHRoaXMsIFwidWktdGFicy1kZXN0cm95XCIgKSApIHtcblx0XHRcdFx0JCggdGhpcyApLnJlbW92ZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JCggdGhpcyApLnJlbW92ZUF0dHIoIFwicm9sZSB0YWJJbmRleCBcIiArXG5cdFx0XHRcdFx0XCJhcmlhLWxpdmUgYXJpYS1idXN5IGFyaWEtc2VsZWN0ZWQgYXJpYS1sYWJlbGxlZGJ5IGFyaWEtaGlkZGVuIGFyaWEtZXhwYW5kZWRcIiApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdHRoaXMudGFicy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBsaSA9ICQoIHRoaXMgKSxcblx0XHRcdFx0cHJldiA9IGxpLmRhdGEoIFwidWktdGFicy1hcmlhLWNvbnRyb2xzXCIgKTtcblx0XHRcdGlmICggcHJldiApIHtcblx0XHRcdFx0bGlcblx0XHRcdFx0XHQuYXR0ciggXCJhcmlhLWNvbnRyb2xzXCIsIHByZXYgKVxuXHRcdFx0XHRcdC5yZW1vdmVEYXRhKCBcInVpLXRhYnMtYXJpYS1jb250cm9sc1wiICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRsaS5yZW1vdmVBdHRyKCBcImFyaWEtY29udHJvbHNcIiApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdHRoaXMucGFuZWxzLnNob3coKTtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmhlaWdodFN0eWxlICE9PSBcImNvbnRlbnRcIiApIHtcblx0XHRcdHRoaXMucGFuZWxzLmNzcyggXCJoZWlnaHRcIiwgXCJcIiApO1xuXHRcdH1cblx0fSxcblxuXHRlbmFibGU6IGZ1bmN0aW9uKCBpbmRleCApIHtcblx0XHR2YXIgZGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuZGlzYWJsZWQ7XG5cdFx0aWYgKCBkaXNhYmxlZCA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBpbmRleCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0ZGlzYWJsZWQgPSBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aW5kZXggPSB0aGlzLl9nZXRJbmRleCggaW5kZXggKTtcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggZGlzYWJsZWQgKSApIHtcblx0XHRcdFx0ZGlzYWJsZWQgPSAkLm1hcCggZGlzYWJsZWQsIGZ1bmN0aW9uKCBudW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bSAhPT0gaW5kZXggPyBudW0gOiBudWxsO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkaXNhYmxlZCA9ICQubWFwKCB0aGlzLnRhYnMsIGZ1bmN0aW9uKCBsaSwgbnVtICkge1xuXHRcdFx0XHRcdHJldHVybiBudW0gIT09IGluZGV4ID8gbnVtIDogbnVsbDtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLl9zZXRPcHRpb25EaXNhYmxlZCggZGlzYWJsZWQgKTtcblx0fSxcblxuXHRkaXNhYmxlOiBmdW5jdGlvbiggaW5kZXggKSB7XG5cdFx0dmFyIGRpc2FibGVkID0gdGhpcy5vcHRpb25zLmRpc2FibGVkO1xuXHRcdGlmICggZGlzYWJsZWQgPT09IHRydWUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBpbmRleCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0ZGlzYWJsZWQgPSB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbmRleCA9IHRoaXMuX2dldEluZGV4KCBpbmRleCApO1xuXHRcdFx0aWYgKCAkLmluQXJyYXkoIGluZGV4LCBkaXNhYmxlZCApICE9PSAtMSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBkaXNhYmxlZCApICkge1xuXHRcdFx0XHRkaXNhYmxlZCA9ICQubWVyZ2UoIFsgaW5kZXggXSwgZGlzYWJsZWQgKS5zb3J0KCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkaXNhYmxlZCA9IFsgaW5kZXggXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5fc2V0T3B0aW9uRGlzYWJsZWQoIGRpc2FibGVkICk7XG5cdH0sXG5cblx0bG9hZDogZnVuY3Rpb24oIGluZGV4LCBldmVudCApIHtcblx0XHRpbmRleCA9IHRoaXMuX2dldEluZGV4KCBpbmRleCApO1xuXHRcdHZhciB0aGF0ID0gdGhpcyxcblx0XHRcdHRhYiA9IHRoaXMudGFicy5lcSggaW5kZXggKSxcblx0XHRcdGFuY2hvciA9IHRhYi5maW5kKCBcIi51aS10YWJzLWFuY2hvclwiICksXG5cdFx0XHRwYW5lbCA9IHRoaXMuX2dldFBhbmVsRm9yVGFiKCB0YWIgKSxcblx0XHRcdGV2ZW50RGF0YSA9IHtcblx0XHRcdFx0dGFiOiB0YWIsXG5cdFx0XHRcdHBhbmVsOiBwYW5lbFxuXHRcdFx0fSxcblx0XHRcdGNvbXBsZXRlID0gZnVuY3Rpb24oIGpxWEhSLCBzdGF0dXMgKSB7XG5cdFx0XHRcdGlmICggc3RhdHVzID09PSBcImFib3J0XCIgKSB7XG5cdFx0XHRcdFx0dGhhdC5wYW5lbHMuc3RvcCggZmFsc2UsIHRydWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoYXQuX3JlbW92ZUNsYXNzKCB0YWIsIFwidWktdGFicy1sb2FkaW5nXCIgKTtcblx0XHRcdFx0cGFuZWwucmVtb3ZlQXR0ciggXCJhcmlhLWJ1c3lcIiApO1xuXG5cdFx0XHRcdGlmICgganFYSFIgPT09IHRoYXQueGhyICkge1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGF0Lnhocjtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdC8vIE5vdCByZW1vdGVcblx0XHRpZiAoIHRoaXMuX2lzTG9jYWwoIGFuY2hvclsgMCBdICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy54aHIgPSAkLmFqYXgoIHRoaXMuX2FqYXhTZXR0aW5ncyggYW5jaG9yLCBldmVudCwgZXZlbnREYXRhICkgKTtcblxuXHRcdC8vIFN1cHBvcnQ6IGpRdWVyeSA8MS44XG5cdFx0Ly8galF1ZXJ5IDwxLjggcmV0dXJucyBmYWxzZSBpZiB0aGUgcmVxdWVzdCBpcyBjYW5jZWxlZCBpbiBiZWZvcmVTZW5kLFxuXHRcdC8vIGJ1dCBhcyBvZiAxLjgsICQuYWpheCgpIGFsd2F5cyByZXR1cm5zIGEganFYSFIgb2JqZWN0LlxuXHRcdGlmICggdGhpcy54aHIgJiYgdGhpcy54aHIuc3RhdHVzVGV4dCAhPT0gXCJjYW5jZWxlZFwiICkge1xuXHRcdFx0dGhpcy5fYWRkQ2xhc3MoIHRhYiwgXCJ1aS10YWJzLWxvYWRpbmdcIiApO1xuXHRcdFx0cGFuZWwuYXR0ciggXCJhcmlhLWJ1c3lcIiwgXCJ0cnVlXCIgKTtcblxuXHRcdFx0dGhpcy54aHJcblx0XHRcdFx0LmRvbmUoIGZ1bmN0aW9uKCByZXNwb25zZSwgc3RhdHVzLCBqcVhIUiApIHtcblxuXHRcdFx0XHRcdC8vIHN1cHBvcnQ6IGpRdWVyeSA8MS44XG5cdFx0XHRcdFx0Ly8gaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTE3Nzhcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHBhbmVsLmh0bWwoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0XHR0aGF0Ll90cmlnZ2VyKCBcImxvYWRcIiwgZXZlbnQsIGV2ZW50RGF0YSApO1xuXG5cdFx0XHRcdFx0XHRjb21wbGV0ZSgganFYSFIsIHN0YXR1cyApO1xuXHRcdFx0XHRcdH0sIDEgKTtcblx0XHRcdFx0fSApXG5cdFx0XHRcdC5mYWlsKCBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHtcblxuXHRcdFx0XHRcdC8vIHN1cHBvcnQ6IGpRdWVyeSA8MS44XG5cdFx0XHRcdFx0Ly8gaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTE3Nzhcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGNvbXBsZXRlKCBqcVhIUiwgc3RhdHVzICk7XG5cdFx0XHRcdFx0fSwgMSApO1xuXHRcdFx0XHR9ICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9hamF4U2V0dGluZ3M6IGZ1bmN0aW9uKCBhbmNob3IsIGV2ZW50LCBldmVudERhdGEgKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzO1xuXHRcdHJldHVybiB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDwxMSBvbmx5XG5cdFx0XHQvLyBTdHJpcCBhbnkgaGFzaCB0aGF0IGV4aXN0cyB0byBwcmV2ZW50IGVycm9ycyB3aXRoIHRoZSBBamF4IHJlcXVlc3Rcblx0XHRcdHVybDogYW5jaG9yLmF0dHIoIFwiaHJlZlwiICkucmVwbGFjZSggLyMuKiQvLCBcIlwiICksXG5cdFx0XHRiZWZvcmVTZW5kOiBmdW5jdGlvbigganFYSFIsIHNldHRpbmdzICkge1xuXHRcdFx0XHRyZXR1cm4gdGhhdC5fdHJpZ2dlciggXCJiZWZvcmVMb2FkXCIsIGV2ZW50LFxuXHRcdFx0XHRcdCQuZXh0ZW5kKCB7IGpxWEhSOiBqcVhIUiwgYWpheFNldHRpbmdzOiBzZXR0aW5ncyB9LCBldmVudERhdGEgKSApO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0sXG5cblx0X2dldFBhbmVsRm9yVGFiOiBmdW5jdGlvbiggdGFiICkge1xuXHRcdHZhciBpZCA9ICQoIHRhYiApLmF0dHIoIFwiYXJpYS1jb250cm9sc1wiICk7XG5cdFx0cmV0dXJuIHRoaXMuZWxlbWVudC5maW5kKCB0aGlzLl9zYW5pdGl6ZVNlbGVjdG9yKCBcIiNcIiArIGlkICkgKTtcblx0fVxufSApO1xuXG4vLyBERVBSRUNBVEVEXG4vLyBUT0RPOiBTd2l0Y2ggcmV0dXJuIGJhY2sgdG8gd2lkZ2V0IGRlY2xhcmF0aW9uIGF0IHRvcCBvZiBmaWxlIHdoZW4gdGhpcyBpcyByZW1vdmVkXG5pZiAoICQudWlCYWNrQ29tcGF0ICE9PSBmYWxzZSApIHtcblxuXHQvLyBCYWNrY29tcGF0IGZvciB1aS10YWIgY2xhc3MgKG5vdyB1aS10YWJzLXRhYilcblx0JC53aWRnZXQoIFwidWkudGFic1wiLCAkLnVpLnRhYnMsIHtcblx0XHRfcHJvY2Vzc1RhYnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5fc3VwZXJBcHBseSggYXJndW1lbnRzICk7XG5cdFx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy50YWJzLCBcInVpLXRhYlwiICk7XG5cdFx0fVxuXHR9ICk7XG59XG5cbnZhciB3aWRnZXRzVGFicyA9ICQudWkudGFicztcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBUb29sdGlwIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiBUb29sdGlwXG4vLz4+Z3JvdXA6IFdpZGdldHNcbi8vPj5kZXNjcmlwdGlvbjogU2hvd3MgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgYW55IGVsZW1lbnQgb24gaG92ZXIgb3IgZm9jdXMuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vdG9vbHRpcC9cbi8vPj5kZW1vczogaHR0cDovL2pxdWVyeXVpLmNvbS90b29sdGlwL1xuLy8+PmNzcy5zdHJ1Y3R1cmU6IC4uLy4uL3RoZW1lcy9iYXNlL2NvcmUuY3NzXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvdG9vbHRpcC5jc3Ncbi8vPj5jc3MudGhlbWU6IC4uLy4uL3RoZW1lcy9iYXNlL3RoZW1lLmNzc1xuXG5cblxuJC53aWRnZXQoIFwidWkudG9vbHRpcFwiLCB7XG5cdHZlcnNpb246IFwiMS4xMi4xXCIsXG5cdG9wdGlvbnM6IHtcblx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcInVpLXRvb2x0aXBcIjogXCJ1aS1jb3JuZXItYWxsIHVpLXdpZGdldC1zaGFkb3dcIlxuXHRcdH0sXG5cdFx0Y29udGVudDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIHN1cHBvcnQ6IElFPDksIE9wZXJhIGluIGpRdWVyeSA8MS43XG5cdFx0XHQvLyAudGV4dCgpIGNhbid0IGFjY2VwdCB1bmRlZmluZWQsIHNvIGNvZXJjZSB0byBhIHN0cmluZ1xuXHRcdFx0dmFyIHRpdGxlID0gJCggdGhpcyApLmF0dHIoIFwidGl0bGVcIiApIHx8IFwiXCI7XG5cblx0XHRcdC8vIEVzY2FwZSB0aXRsZSwgc2luY2Ugd2UncmUgZ29pbmcgZnJvbSBhbiBhdHRyaWJ1dGUgdG8gcmF3IEhUTUxcblx0XHRcdHJldHVybiAkKCBcIjxhPlwiICkudGV4dCggdGl0bGUgKS5odG1sKCk7XG5cdFx0fSxcblx0XHRoaWRlOiB0cnVlLFxuXG5cdFx0Ly8gRGlzYWJsZWQgZWxlbWVudHMgaGF2ZSBpbmNvbnNpc3RlbnQgYmVoYXZpb3IgYWNyb3NzIGJyb3dzZXJzICgjODY2MSlcblx0XHRpdGVtczogXCJbdGl0bGVdOm5vdChbZGlzYWJsZWRdKVwiLFxuXHRcdHBvc2l0aW9uOiB7XG5cdFx0XHRteTogXCJsZWZ0IHRvcCsxNVwiLFxuXHRcdFx0YXQ6IFwibGVmdCBib3R0b21cIixcblx0XHRcdGNvbGxpc2lvbjogXCJmbGlwZml0IGZsaXBcIlxuXHRcdH0sXG5cdFx0c2hvdzogdHJ1ZSxcblx0XHR0cmFjazogZmFsc2UsXG5cblx0XHQvLyBDYWxsYmFja3Ncblx0XHRjbG9zZTogbnVsbCxcblx0XHRvcGVuOiBudWxsXG5cdH0sXG5cblx0X2FkZERlc2NyaWJlZEJ5OiBmdW5jdGlvbiggZWxlbSwgaWQgKSB7XG5cdFx0dmFyIGRlc2NyaWJlZGJ5ID0gKCBlbGVtLmF0dHIoIFwiYXJpYS1kZXNjcmliZWRieVwiICkgfHwgXCJcIiApLnNwbGl0KCAvXFxzKy8gKTtcblx0XHRkZXNjcmliZWRieS5wdXNoKCBpZCApO1xuXHRcdGVsZW1cblx0XHRcdC5kYXRhKCBcInVpLXRvb2x0aXAtaWRcIiwgaWQgKVxuXHRcdFx0LmF0dHIoIFwiYXJpYS1kZXNjcmliZWRieVwiLCAkLnRyaW0oIGRlc2NyaWJlZGJ5LmpvaW4oIFwiIFwiICkgKSApO1xuXHR9LFxuXG5cdF9yZW1vdmVEZXNjcmliZWRCeTogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIGlkID0gZWxlbS5kYXRhKCBcInVpLXRvb2x0aXAtaWRcIiApLFxuXHRcdFx0ZGVzY3JpYmVkYnkgPSAoIGVsZW0uYXR0ciggXCJhcmlhLWRlc2NyaWJlZGJ5XCIgKSB8fCBcIlwiICkuc3BsaXQoIC9cXHMrLyApLFxuXHRcdFx0aW5kZXggPSAkLmluQXJyYXkoIGlkLCBkZXNjcmliZWRieSApO1xuXG5cdFx0aWYgKCBpbmRleCAhPT0gLTEgKSB7XG5cdFx0XHRkZXNjcmliZWRieS5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0fVxuXG5cdFx0ZWxlbS5yZW1vdmVEYXRhKCBcInVpLXRvb2x0aXAtaWRcIiApO1xuXHRcdGRlc2NyaWJlZGJ5ID0gJC50cmltKCBkZXNjcmliZWRieS5qb2luKCBcIiBcIiApICk7XG5cdFx0aWYgKCBkZXNjcmliZWRieSApIHtcblx0XHRcdGVsZW0uYXR0ciggXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIGRlc2NyaWJlZGJ5ICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW0ucmVtb3ZlQXR0ciggXCJhcmlhLWRlc2NyaWJlZGJ5XCIgKTtcblx0XHR9XG5cdH0sXG5cblx0X2NyZWF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fb24oIHtcblx0XHRcdG1vdXNlb3ZlcjogXCJvcGVuXCIsXG5cdFx0XHRmb2N1c2luOiBcIm9wZW5cIlxuXHRcdH0gKTtcblxuXHRcdC8vIElEcyBvZiBnZW5lcmF0ZWQgdG9vbHRpcHMsIG5lZWRlZCBmb3IgZGVzdHJveVxuXHRcdHRoaXMudG9vbHRpcHMgPSB7fTtcblxuXHRcdC8vIElEcyBvZiBwYXJlbnQgdG9vbHRpcHMgd2hlcmUgd2UgcmVtb3ZlZCB0aGUgdGl0bGUgYXR0cmlidXRlXG5cdFx0dGhpcy5wYXJlbnRzID0ge307XG5cblx0XHQvLyBBcHBlbmQgdGhlIGFyaWEtbGl2ZSByZWdpb24gc28gdG9vbHRpcHMgYW5ub3VuY2UgY29ycmVjdGx5XG5cdFx0dGhpcy5saXZlUmVnaW9uID0gJCggXCI8ZGl2PlwiIClcblx0XHRcdC5hdHRyKCB7XG5cdFx0XHRcdHJvbGU6IFwibG9nXCIsXG5cdFx0XHRcdFwiYXJpYS1saXZlXCI6IFwiYXNzZXJ0aXZlXCIsXG5cdFx0XHRcdFwiYXJpYS1yZWxldmFudFwiOiBcImFkZGl0aW9uc1wiXG5cdFx0XHR9IClcblx0XHRcdC5hcHBlbmRUbyggdGhpcy5kb2N1bWVudFsgMCBdLmJvZHkgKTtcblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5saXZlUmVnaW9uLCBudWxsLCBcInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZVwiICk7XG5cblx0XHR0aGlzLmRpc2FibGVkVGl0bGVzID0gJCggW10gKTtcblx0fSxcblxuXHRfc2V0T3B0aW9uOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cblx0XHR0aGlzLl9zdXBlcigga2V5LCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBrZXkgPT09IFwiY29udGVudFwiICkge1xuXHRcdFx0JC5lYWNoKCB0aGlzLnRvb2x0aXBzLCBmdW5jdGlvbiggaWQsIHRvb2x0aXBEYXRhICkge1xuXHRcdFx0XHR0aGF0Ll91cGRhdGVDb250ZW50KCB0b29sdGlwRGF0YS5lbGVtZW50ICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9zZXRPcHRpb25EaXNhYmxlZDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHRoaXNbIHZhbHVlID8gXCJfZGlzYWJsZVwiIDogXCJfZW5hYmxlXCIgXSgpO1xuXHR9LFxuXG5cdF9kaXNhYmxlOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cblx0XHQvLyBDbG9zZSBvcGVuIHRvb2x0aXBzXG5cdFx0JC5lYWNoKCB0aGlzLnRvb2x0aXBzLCBmdW5jdGlvbiggaWQsIHRvb2x0aXBEYXRhICkge1xuXHRcdFx0dmFyIGV2ZW50ID0gJC5FdmVudCggXCJibHVyXCIgKTtcblx0XHRcdGV2ZW50LnRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgPSB0b29sdGlwRGF0YS5lbGVtZW50WyAwIF07XG5cdFx0XHR0aGF0LmNsb3NlKCBldmVudCwgdHJ1ZSApO1xuXHRcdH0gKTtcblxuXHRcdC8vIFJlbW92ZSB0aXRsZSBhdHRyaWJ1dGVzIHRvIHByZXZlbnQgbmF0aXZlIHRvb2x0aXBzXG5cdFx0dGhpcy5kaXNhYmxlZFRpdGxlcyA9IHRoaXMuZGlzYWJsZWRUaXRsZXMuYWRkKFxuXHRcdFx0dGhpcy5lbGVtZW50LmZpbmQoIHRoaXMub3B0aW9ucy5pdGVtcyApLmFkZEJhY2soKVxuXHRcdFx0XHQuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHR2YXIgZWxlbWVudCA9ICQoIHRoaXMgKTtcblx0XHRcdFx0XHRpZiAoIGVsZW1lbnQuaXMoIFwiW3RpdGxlXVwiICkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbWVudFxuXHRcdFx0XHRcdFx0XHQuZGF0YSggXCJ1aS10b29sdGlwLXRpdGxlXCIsIGVsZW1lbnQuYXR0ciggXCJ0aXRsZVwiICkgKVxuXHRcdFx0XHRcdFx0XHQucmVtb3ZlQXR0ciggXCJ0aXRsZVwiICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IClcblx0XHQpO1xuXHR9LFxuXG5cdF9lbmFibGU6IGZ1bmN0aW9uKCkge1xuXG5cdFx0Ly8gcmVzdG9yZSB0aXRsZSBhdHRyaWJ1dGVzXG5cdFx0dGhpcy5kaXNhYmxlZFRpdGxlcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBlbGVtZW50ID0gJCggdGhpcyApO1xuXHRcdFx0aWYgKCBlbGVtZW50LmRhdGEoIFwidWktdG9vbHRpcC10aXRsZVwiICkgKSB7XG5cdFx0XHRcdGVsZW1lbnQuYXR0ciggXCJ0aXRsZVwiLCBlbGVtZW50LmRhdGEoIFwidWktdG9vbHRpcC10aXRsZVwiICkgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0dGhpcy5kaXNhYmxlZFRpdGxlcyA9ICQoIFtdICk7XG5cdH0sXG5cblx0b3BlbjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciB0aGF0ID0gdGhpcyxcblx0XHRcdHRhcmdldCA9ICQoIGV2ZW50ID8gZXZlbnQudGFyZ2V0IDogdGhpcy5lbGVtZW50IClcblxuXHRcdFx0XHQvLyB3ZSBuZWVkIGNsb3Nlc3QgaGVyZSBkdWUgdG8gbW91c2VvdmVyIGJ1YmJsaW5nLFxuXHRcdFx0XHQvLyBidXQgYWx3YXlzIHBvaW50aW5nIGF0IHRoZSBzYW1lIGV2ZW50IHRhcmdldFxuXHRcdFx0XHQuY2xvc2VzdCggdGhpcy5vcHRpb25zLml0ZW1zICk7XG5cblx0XHQvLyBObyBlbGVtZW50IHRvIHNob3cgYSB0b29sdGlwIGZvciBvciB0aGUgdG9vbHRpcCBpcyBhbHJlYWR5IG9wZW5cblx0XHRpZiAoICF0YXJnZXQubGVuZ3RoIHx8IHRhcmdldC5kYXRhKCBcInVpLXRvb2x0aXAtaWRcIiApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdGFyZ2V0LmF0dHIoIFwidGl0bGVcIiApICkge1xuXHRcdFx0dGFyZ2V0LmRhdGEoIFwidWktdG9vbHRpcC10aXRsZVwiLCB0YXJnZXQuYXR0ciggXCJ0aXRsZVwiICkgKTtcblx0XHR9XG5cblx0XHR0YXJnZXQuZGF0YSggXCJ1aS10b29sdGlwLW9wZW5cIiwgdHJ1ZSApO1xuXG5cdFx0Ly8gS2lsbCBwYXJlbnQgdG9vbHRpcHMsIGN1c3RvbSBvciBuYXRpdmUsIGZvciBob3ZlclxuXHRcdGlmICggZXZlbnQgJiYgZXZlbnQudHlwZSA9PT0gXCJtb3VzZW92ZXJcIiApIHtcblx0XHRcdHRhcmdldC5wYXJlbnRzKCkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBwYXJlbnQgPSAkKCB0aGlzICksXG5cdFx0XHRcdFx0Ymx1ckV2ZW50O1xuXHRcdFx0XHRpZiAoIHBhcmVudC5kYXRhKCBcInVpLXRvb2x0aXAtb3BlblwiICkgKSB7XG5cdFx0XHRcdFx0Ymx1ckV2ZW50ID0gJC5FdmVudCggXCJibHVyXCIgKTtcblx0XHRcdFx0XHRibHVyRXZlbnQudGFyZ2V0ID0gYmx1ckV2ZW50LmN1cnJlbnRUYXJnZXQgPSB0aGlzO1xuXHRcdFx0XHRcdHRoYXQuY2xvc2UoIGJsdXJFdmVudCwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggcGFyZW50LmF0dHIoIFwidGl0bGVcIiApICkge1xuXHRcdFx0XHRcdHBhcmVudC51bmlxdWVJZCgpO1xuXHRcdFx0XHRcdHRoYXQucGFyZW50c1sgdGhpcy5pZCBdID0ge1xuXHRcdFx0XHRcdFx0ZWxlbWVudDogdGhpcyxcblx0XHRcdFx0XHRcdHRpdGxlOiBwYXJlbnQuYXR0ciggXCJ0aXRsZVwiIClcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdHBhcmVudC5hdHRyKCBcInRpdGxlXCIsIFwiXCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHRoaXMuX3JlZ2lzdGVyQ2xvc2VIYW5kbGVycyggZXZlbnQsIHRhcmdldCApO1xuXHRcdHRoaXMuX3VwZGF0ZUNvbnRlbnQoIHRhcmdldCwgZXZlbnQgKTtcblx0fSxcblxuXHRfdXBkYXRlQ29udGVudDogZnVuY3Rpb24oIHRhcmdldCwgZXZlbnQgKSB7XG5cdFx0dmFyIGNvbnRlbnQsXG5cdFx0XHRjb250ZW50T3B0aW9uID0gdGhpcy5vcHRpb25zLmNvbnRlbnQsXG5cdFx0XHR0aGF0ID0gdGhpcyxcblx0XHRcdGV2ZW50VHlwZSA9IGV2ZW50ID8gZXZlbnQudHlwZSA6IG51bGw7XG5cblx0XHRpZiAoIHR5cGVvZiBjb250ZW50T3B0aW9uID09PSBcInN0cmluZ1wiIHx8IGNvbnRlbnRPcHRpb24ubm9kZVR5cGUgfHxcblx0XHRcdFx0Y29udGVudE9wdGlvbi5qcXVlcnkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fb3BlbiggZXZlbnQsIHRhcmdldCwgY29udGVudE9wdGlvbiApO1xuXHRcdH1cblxuXHRcdGNvbnRlbnQgPSBjb250ZW50T3B0aW9uLmNhbGwoIHRhcmdldFsgMCBdLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cblx0XHRcdC8vIElFIG1heSBpbnN0YW50bHkgc2VydmUgYSBjYWNoZWQgcmVzcG9uc2UgZm9yIGFqYXggcmVxdWVzdHNcblx0XHRcdC8vIGRlbGF5IHRoaXMgY2FsbCB0byBfb3BlbiBzbyB0aGUgb3RoZXIgY2FsbCB0byBfb3BlbiBydW5zIGZpcnN0XG5cdFx0XHR0aGF0Ll9kZWxheSggZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gSWdub3JlIGFzeW5jIHJlc3BvbnNlIGlmIHRvb2x0aXAgd2FzIGNsb3NlZCBhbHJlYWR5XG5cdFx0XHRcdGlmICggIXRhcmdldC5kYXRhKCBcInVpLXRvb2x0aXAtb3BlblwiICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSlF1ZXJ5IGNyZWF0ZXMgYSBzcGVjaWFsIGV2ZW50IGZvciBmb2N1c2luIHdoZW4gaXQgZG9lc24ndFxuXHRcdFx0XHQvLyBleGlzdCBuYXRpdmVseS4gVG8gaW1wcm92ZSBwZXJmb3JtYW5jZSwgdGhlIG5hdGl2ZSBldmVudFxuXHRcdFx0XHQvLyBvYmplY3QgaXMgcmV1c2VkIGFuZCB0aGUgdHlwZSBpcyBjaGFuZ2VkLiBUaGVyZWZvcmUsIHdlIGNhbid0XG5cdFx0XHRcdC8vIHJlbHkgb24gdGhlIHR5cGUgYmVpbmcgY29ycmVjdCBhZnRlciB0aGUgZXZlbnQgZmluaXNoZWRcblx0XHRcdFx0Ly8gYnViYmxpbmcsIHNvIHdlIHNldCBpdCBiYWNrIHRvIHRoZSBwcmV2aW91cyB2YWx1ZS4gKCM4NzQwKVxuXHRcdFx0XHRpZiAoIGV2ZW50ICkge1xuXHRcdFx0XHRcdGV2ZW50LnR5cGUgPSBldmVudFR5cGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5fb3BlbiggZXZlbnQsIHRhcmdldCwgcmVzcG9uc2UgKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdFx0aWYgKCBjb250ZW50ICkge1xuXHRcdFx0dGhpcy5fb3BlbiggZXZlbnQsIHRhcmdldCwgY29udGVudCApO1xuXHRcdH1cblx0fSxcblxuXHRfb3BlbjogZnVuY3Rpb24oIGV2ZW50LCB0YXJnZXQsIGNvbnRlbnQgKSB7XG5cdFx0dmFyIHRvb2x0aXBEYXRhLCB0b29sdGlwLCBkZWxheWVkU2hvdywgYTExeUNvbnRlbnQsXG5cdFx0XHRwb3NpdGlvbk9wdGlvbiA9ICQuZXh0ZW5kKCB7fSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uICk7XG5cblx0XHRpZiAoICFjb250ZW50ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENvbnRlbnQgY2FuIGJlIHVwZGF0ZWQgbXVsdGlwbGUgdGltZXMuIElmIHRoZSB0b29sdGlwIGFscmVhZHlcblx0XHQvLyBleGlzdHMsIHRoZW4ganVzdCB1cGRhdGUgdGhlIGNvbnRlbnQgYW5kIGJhaWwuXG5cdFx0dG9vbHRpcERhdGEgPSB0aGlzLl9maW5kKCB0YXJnZXQgKTtcblx0XHRpZiAoIHRvb2x0aXBEYXRhICkge1xuXHRcdFx0dG9vbHRpcERhdGEudG9vbHRpcC5maW5kKCBcIi51aS10b29sdGlwLWNvbnRlbnRcIiApLmh0bWwoIGNvbnRlbnQgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBoYXZlIGEgdGl0bGUsIGNsZWFyIGl0IHRvIHByZXZlbnQgdGhlIG5hdGl2ZSB0b29sdGlwXG5cdFx0Ly8gd2UgaGF2ZSB0byBjaGVjayBmaXJzdCB0byBhdm9pZCBkZWZpbmluZyBhIHRpdGxlIGlmIG5vbmUgZXhpc3RzXG5cdFx0Ly8gKHdlIGRvbid0IHdhbnQgdG8gY2F1c2UgYW4gZWxlbWVudCB0byBzdGFydCBtYXRjaGluZyBbdGl0bGVdKVxuXHRcdC8vXG5cdFx0Ly8gV2UgdXNlIHJlbW92ZUF0dHIgb25seSBmb3Iga2V5IGV2ZW50cywgdG8gYWxsb3cgSUUgdG8gZXhwb3J0IHRoZSBjb3JyZWN0XG5cdFx0Ly8gYWNjZXNzaWJsZSBhdHRyaWJ1dGVzLiBGb3IgbW91c2UgZXZlbnRzLCBzZXQgdG8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkXG5cdFx0Ly8gbmF0aXZlIHRvb2x0aXAgc2hvd2luZyB1cCAoaGFwcGVucyBvbmx5IHdoZW4gcmVtb3ZpbmcgaW5zaWRlIG1vdXNlb3ZlcikuXG5cdFx0aWYgKCB0YXJnZXQuaXMoIFwiW3RpdGxlXVwiICkgKSB7XG5cdFx0XHRpZiAoIGV2ZW50ICYmIGV2ZW50LnR5cGUgPT09IFwibW91c2VvdmVyXCIgKSB7XG5cdFx0XHRcdHRhcmdldC5hdHRyKCBcInRpdGxlXCIsIFwiXCIgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRhcmdldC5yZW1vdmVBdHRyKCBcInRpdGxlXCIgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0b29sdGlwRGF0YSA9IHRoaXMuX3Rvb2x0aXAoIHRhcmdldCApO1xuXHRcdHRvb2x0aXAgPSB0b29sdGlwRGF0YS50b29sdGlwO1xuXHRcdHRoaXMuX2FkZERlc2NyaWJlZEJ5KCB0YXJnZXQsIHRvb2x0aXAuYXR0ciggXCJpZFwiICkgKTtcblx0XHR0b29sdGlwLmZpbmQoIFwiLnVpLXRvb2x0aXAtY29udGVudFwiICkuaHRtbCggY29udGVudCApO1xuXG5cdFx0Ly8gU3VwcG9ydDogVm9pY2VvdmVyIG9uIE9TIFgsIEpBV1Mgb24gSUUgPD0gOVxuXHRcdC8vIEpBV1MgYW5ub3VuY2VzIGRlbGV0aW9ucyBldmVuIHdoZW4gYXJpYS1yZWxldmFudD1cImFkZGl0aW9uc1wiXG5cdFx0Ly8gVm9pY2VvdmVyIHdpbGwgc29tZXRpbWVzIHJlLXJlYWQgdGhlIGVudGlyZSBsb2cgcmVnaW9uJ3MgY29udGVudHMgZnJvbSB0aGUgYmVnaW5uaW5nXG5cdFx0dGhpcy5saXZlUmVnaW9uLmNoaWxkcmVuKCkuaGlkZSgpO1xuXHRcdGExMXlDb250ZW50ID0gJCggXCI8ZGl2PlwiICkuaHRtbCggdG9vbHRpcC5maW5kKCBcIi51aS10b29sdGlwLWNvbnRlbnRcIiApLmh0bWwoKSApO1xuXHRcdGExMXlDb250ZW50LnJlbW92ZUF0dHIoIFwibmFtZVwiICkuZmluZCggXCJbbmFtZV1cIiApLnJlbW92ZUF0dHIoIFwibmFtZVwiICk7XG5cdFx0YTExeUNvbnRlbnQucmVtb3ZlQXR0ciggXCJpZFwiICkuZmluZCggXCJbaWRdXCIgKS5yZW1vdmVBdHRyKCBcImlkXCIgKTtcblx0XHRhMTF5Q29udGVudC5hcHBlbmRUbyggdGhpcy5saXZlUmVnaW9uICk7XG5cblx0XHRmdW5jdGlvbiBwb3NpdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRwb3NpdGlvbk9wdGlvbi5vZiA9IGV2ZW50O1xuXHRcdFx0aWYgKCB0b29sdGlwLmlzKCBcIjpoaWRkZW5cIiApICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0b29sdGlwLnBvc2l0aW9uKCBwb3NpdGlvbk9wdGlvbiApO1xuXHRcdH1cblx0XHRpZiAoIHRoaXMub3B0aW9ucy50cmFjayAmJiBldmVudCAmJiAvXm1vdXNlLy50ZXN0KCBldmVudC50eXBlICkgKSB7XG5cdFx0XHR0aGlzLl9vbiggdGhpcy5kb2N1bWVudCwge1xuXHRcdFx0XHRtb3VzZW1vdmU6IHBvc2l0aW9uXG5cdFx0XHR9ICk7XG5cblx0XHRcdC8vIHRyaWdnZXIgb25jZSB0byBvdmVycmlkZSBlbGVtZW50LXJlbGF0aXZlIHBvc2l0aW9uaW5nXG5cdFx0XHRwb3NpdGlvbiggZXZlbnQgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dG9vbHRpcC5wb3NpdGlvbiggJC5leHRlbmQoIHtcblx0XHRcdFx0b2Y6IHRhcmdldFxuXHRcdFx0fSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uICkgKTtcblx0XHR9XG5cblx0XHR0b29sdGlwLmhpZGUoKTtcblxuXHRcdHRoaXMuX3Nob3coIHRvb2x0aXAsIHRoaXMub3B0aW9ucy5zaG93ICk7XG5cblx0XHQvLyBIYW5kbGUgdHJhY2tpbmcgdG9vbHRpcHMgdGhhdCBhcmUgc2hvd24gd2l0aCBhIGRlbGF5ICgjODY0NCkuIEFzIHNvb25cblx0XHQvLyBhcyB0aGUgdG9vbHRpcCBpcyB2aXNpYmxlLCBwb3NpdGlvbiB0aGUgdG9vbHRpcCB1c2luZyB0aGUgbW9zdCByZWNlbnRcblx0XHQvLyBldmVudC5cblx0XHQvLyBBZGRzIHRoZSBjaGVjayB0byBhZGQgdGhlIHRpbWVycyBvbmx5IHdoZW4gYm90aCBkZWxheSBhbmQgdHJhY2sgb3B0aW9ucyBhcmUgc2V0ICgjMTQ2ODIpXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMudHJhY2sgJiYgdGhpcy5vcHRpb25zLnNob3cgJiYgdGhpcy5vcHRpb25zLnNob3cuZGVsYXkgKSB7XG5cdFx0XHRkZWxheWVkU2hvdyA9IHRoaXMuZGVsYXllZFNob3cgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggdG9vbHRpcC5pcyggXCI6dmlzaWJsZVwiICkgKSB7XG5cdFx0XHRcdFx0cG9zaXRpb24oIHBvc2l0aW9uT3B0aW9uLm9mICk7XG5cdFx0XHRcdFx0Y2xlYXJJbnRlcnZhbCggZGVsYXllZFNob3cgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgJC5meC5pbnRlcnZhbCApO1xuXHRcdH1cblxuXHRcdHRoaXMuX3RyaWdnZXIoIFwib3BlblwiLCBldmVudCwgeyB0b29sdGlwOiB0b29sdGlwIH0gKTtcblx0fSxcblxuXHRfcmVnaXN0ZXJDbG9zZUhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIHRhcmdldCApIHtcblx0XHR2YXIgZXZlbnRzID0ge1xuXHRcdFx0a2V5dXA6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0aWYgKCBldmVudC5rZXlDb2RlID09PSAkLnVpLmtleUNvZGUuRVNDQVBFICkge1xuXHRcdFx0XHRcdHZhciBmYWtlRXZlbnQgPSAkLkV2ZW50KCBldmVudCApO1xuXHRcdFx0XHRcdGZha2VFdmVudC5jdXJyZW50VGFyZ2V0ID0gdGFyZ2V0WyAwIF07XG5cdFx0XHRcdFx0dGhpcy5jbG9zZSggZmFrZUV2ZW50LCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Ly8gT25seSBiaW5kIHJlbW92ZSBoYW5kbGVyIGZvciBkZWxlZ2F0ZWQgdGFyZ2V0cy4gTm9uLWRlbGVnYXRlZFxuXHRcdC8vIHRvb2x0aXBzIHdpbGwgaGFuZGxlIHRoaXMgaW4gZGVzdHJveS5cblx0XHRpZiAoIHRhcmdldFsgMCBdICE9PSB0aGlzLmVsZW1lbnRbIDAgXSApIHtcblx0XHRcdGV2ZW50cy5yZW1vdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0dGhpcy5fcmVtb3ZlVG9vbHRpcCggdGhpcy5fZmluZCggdGFyZ2V0ICkudG9vbHRpcCApO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAoICFldmVudCB8fCBldmVudC50eXBlID09PSBcIm1vdXNlb3ZlclwiICkge1xuXHRcdFx0ZXZlbnRzLm1vdXNlbGVhdmUgPSBcImNsb3NlXCI7XG5cdFx0fVxuXHRcdGlmICggIWV2ZW50IHx8IGV2ZW50LnR5cGUgPT09IFwiZm9jdXNpblwiICkge1xuXHRcdFx0ZXZlbnRzLmZvY3Vzb3V0ID0gXCJjbG9zZVwiO1xuXHRcdH1cblx0XHR0aGlzLl9vbiggdHJ1ZSwgdGFyZ2V0LCBldmVudHMgKTtcblx0fSxcblxuXHRjbG9zZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciB0b29sdGlwLFxuXHRcdFx0dGhhdCA9IHRoaXMsXG5cdFx0XHR0YXJnZXQgPSAkKCBldmVudCA/IGV2ZW50LmN1cnJlbnRUYXJnZXQgOiB0aGlzLmVsZW1lbnQgKSxcblx0XHRcdHRvb2x0aXBEYXRhID0gdGhpcy5fZmluZCggdGFyZ2V0ICk7XG5cblx0XHQvLyBUaGUgdG9vbHRpcCBtYXkgYWxyZWFkeSBiZSBjbG9zZWRcblx0XHRpZiAoICF0b29sdGlwRGF0YSApIHtcblxuXHRcdFx0Ly8gV2Ugc2V0IHVpLXRvb2x0aXAtb3BlbiBpbW1lZGlhdGVseSB1cG9uIG9wZW4gKGluIG9wZW4oKSksIGJ1dCBvbmx5IHNldCB0aGVcblx0XHRcdC8vIGFkZGl0aW9uYWwgZGF0YSBvbmNlIHRoZXJlJ3MgYWN0dWFsbHkgY29udGVudCB0byBzaG93IChpbiBfb3BlbigpKS4gU28gZXZlbiBpZiB0aGVcblx0XHRcdC8vIHRvb2x0aXAgZG9lc24ndCBoYXZlIGZ1bGwgZGF0YSwgd2UgYWx3YXlzIHJlbW92ZSB1aS10b29sdGlwLW9wZW4gaW4gY2FzZSB3ZSdyZSBpblxuXHRcdFx0Ly8gdGhlIHBlcmlvZCBiZXR3ZWVuIG9wZW4oKSBhbmQgX29wZW4oKS5cblx0XHRcdHRhcmdldC5yZW1vdmVEYXRhKCBcInVpLXRvb2x0aXAtb3BlblwiICk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dG9vbHRpcCA9IHRvb2x0aXBEYXRhLnRvb2x0aXA7XG5cblx0XHQvLyBEaXNhYmxpbmcgY2xvc2VzIHRoZSB0b29sdGlwLCBzbyB3ZSBuZWVkIHRvIHRyYWNrIHdoZW4gd2UncmUgY2xvc2luZ1xuXHRcdC8vIHRvIGF2b2lkIGFuIGluZmluaXRlIGxvb3AgaW4gY2FzZSB0aGUgdG9vbHRpcCBiZWNvbWVzIGRpc2FibGVkIG9uIGNsb3NlXG5cdFx0aWYgKCB0b29sdGlwRGF0YS5jbG9zaW5nICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENsZWFyIHRoZSBpbnRlcnZhbCBmb3IgZGVsYXllZCB0cmFja2luZyB0b29sdGlwc1xuXHRcdGNsZWFySW50ZXJ2YWwoIHRoaXMuZGVsYXllZFNob3cgKTtcblxuXHRcdC8vIE9ubHkgc2V0IHRpdGxlIGlmIHdlIGhhZCBvbmUgYmVmb3JlIChzZWUgY29tbWVudCBpbiBfb3BlbigpKVxuXHRcdC8vIElmIHRoZSB0aXRsZSBhdHRyaWJ1dGUgaGFzIGNoYW5nZWQgc2luY2Ugb3BlbigpLCBkb24ndCByZXN0b3JlXG5cdFx0aWYgKCB0YXJnZXQuZGF0YSggXCJ1aS10b29sdGlwLXRpdGxlXCIgKSAmJiAhdGFyZ2V0LmF0dHIoIFwidGl0bGVcIiApICkge1xuXHRcdFx0dGFyZ2V0LmF0dHIoIFwidGl0bGVcIiwgdGFyZ2V0LmRhdGEoIFwidWktdG9vbHRpcC10aXRsZVwiICkgKTtcblx0XHR9XG5cblx0XHR0aGlzLl9yZW1vdmVEZXNjcmliZWRCeSggdGFyZ2V0ICk7XG5cblx0XHR0b29sdGlwRGF0YS5oaWRpbmcgPSB0cnVlO1xuXHRcdHRvb2x0aXAuc3RvcCggdHJ1ZSApO1xuXHRcdHRoaXMuX2hpZGUoIHRvb2x0aXAsIHRoaXMub3B0aW9ucy5oaWRlLCBmdW5jdGlvbigpIHtcblx0XHRcdHRoYXQuX3JlbW92ZVRvb2x0aXAoICQoIHRoaXMgKSApO1xuXHRcdH0gKTtcblxuXHRcdHRhcmdldC5yZW1vdmVEYXRhKCBcInVpLXRvb2x0aXAtb3BlblwiICk7XG5cdFx0dGhpcy5fb2ZmKCB0YXJnZXQsIFwibW91c2VsZWF2ZSBmb2N1c291dCBrZXl1cFwiICk7XG5cblx0XHQvLyBSZW1vdmUgJ3JlbW92ZScgYmluZGluZyBvbmx5IG9uIGRlbGVnYXRlZCB0YXJnZXRzXG5cdFx0aWYgKCB0YXJnZXRbIDAgXSAhPT0gdGhpcy5lbGVtZW50WyAwIF0gKSB7XG5cdFx0XHR0aGlzLl9vZmYoIHRhcmdldCwgXCJyZW1vdmVcIiApO1xuXHRcdH1cblx0XHR0aGlzLl9vZmYoIHRoaXMuZG9jdW1lbnQsIFwibW91c2Vtb3ZlXCIgKTtcblxuXHRcdGlmICggZXZlbnQgJiYgZXZlbnQudHlwZSA9PT0gXCJtb3VzZWxlYXZlXCIgKSB7XG5cdFx0XHQkLmVhY2goIHRoaXMucGFyZW50cywgZnVuY3Rpb24oIGlkLCBwYXJlbnQgKSB7XG5cdFx0XHRcdCQoIHBhcmVudC5lbGVtZW50ICkuYXR0ciggXCJ0aXRsZVwiLCBwYXJlbnQudGl0bGUgKTtcblx0XHRcdFx0ZGVsZXRlIHRoYXQucGFyZW50c1sgaWQgXTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHR0b29sdGlwRGF0YS5jbG9zaW5nID0gdHJ1ZTtcblx0XHR0aGlzLl90cmlnZ2VyKCBcImNsb3NlXCIsIGV2ZW50LCB7IHRvb2x0aXA6IHRvb2x0aXAgfSApO1xuXHRcdGlmICggIXRvb2x0aXBEYXRhLmhpZGluZyApIHtcblx0XHRcdHRvb2x0aXBEYXRhLmNsb3NpbmcgPSBmYWxzZTtcblx0XHR9XG5cdH0sXG5cblx0X3Rvb2x0aXA6IGZ1bmN0aW9uKCBlbGVtZW50ICkge1xuXHRcdHZhciB0b29sdGlwID0gJCggXCI8ZGl2PlwiICkuYXR0ciggXCJyb2xlXCIsIFwidG9vbHRpcFwiICksXG5cdFx0XHRjb250ZW50ID0gJCggXCI8ZGl2PlwiICkuYXBwZW5kVG8oIHRvb2x0aXAgKSxcblx0XHRcdGlkID0gdG9vbHRpcC51bmlxdWVJZCgpLmF0dHIoIFwiaWRcIiApO1xuXG5cdFx0dGhpcy5fYWRkQ2xhc3MoIGNvbnRlbnQsIFwidWktdG9vbHRpcC1jb250ZW50XCIgKTtcblx0XHR0aGlzLl9hZGRDbGFzcyggdG9vbHRpcCwgXCJ1aS10b29sdGlwXCIsIFwidWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50XCIgKTtcblxuXHRcdHRvb2x0aXAuYXBwZW5kVG8oIHRoaXMuX2FwcGVuZFRvKCBlbGVtZW50ICkgKTtcblxuXHRcdHJldHVybiB0aGlzLnRvb2x0aXBzWyBpZCBdID0ge1xuXHRcdFx0ZWxlbWVudDogZWxlbWVudCxcblx0XHRcdHRvb2x0aXA6IHRvb2x0aXBcblx0XHR9O1xuXHR9LFxuXG5cdF9maW5kOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdHZhciBpZCA9IHRhcmdldC5kYXRhKCBcInVpLXRvb2x0aXAtaWRcIiApO1xuXHRcdHJldHVybiBpZCA/IHRoaXMudG9vbHRpcHNbIGlkIF0gOiBudWxsO1xuXHR9LFxuXG5cdF9yZW1vdmVUb29sdGlwOiBmdW5jdGlvbiggdG9vbHRpcCApIHtcblx0XHR0b29sdGlwLnJlbW92ZSgpO1xuXHRcdGRlbGV0ZSB0aGlzLnRvb2x0aXBzWyB0b29sdGlwLmF0dHIoIFwiaWRcIiApIF07XG5cdH0sXG5cblx0X2FwcGVuZFRvOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdHZhciBlbGVtZW50ID0gdGFyZ2V0LmNsb3Nlc3QoIFwiLnVpLWZyb250LCBkaWFsb2dcIiApO1xuXG5cdFx0aWYgKCAhZWxlbWVudC5sZW5ndGggKSB7XG5cdFx0XHRlbGVtZW50ID0gdGhpcy5kb2N1bWVudFsgMCBdLmJvZHk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH0sXG5cblx0X2Rlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblxuXHRcdC8vIENsb3NlIG9wZW4gdG9vbHRpcHNcblx0XHQkLmVhY2goIHRoaXMudG9vbHRpcHMsIGZ1bmN0aW9uKCBpZCwgdG9vbHRpcERhdGEgKSB7XG5cblx0XHRcdC8vIERlbGVnYXRlIHRvIGNsb3NlIG1ldGhvZCB0byBoYW5kbGUgY29tbW9uIGNsZWFudXBcblx0XHRcdHZhciBldmVudCA9ICQuRXZlbnQoIFwiYmx1clwiICksXG5cdFx0XHRcdGVsZW1lbnQgPSB0b29sdGlwRGF0YS5lbGVtZW50O1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCA9IGVsZW1lbnRbIDAgXTtcblx0XHRcdHRoYXQuY2xvc2UoIGV2ZW50LCB0cnVlICk7XG5cblx0XHRcdC8vIFJlbW92ZSBpbW1lZGlhdGVseTsgZGVzdHJveWluZyBhbiBvcGVuIHRvb2x0aXAgZG9lc24ndCB1c2UgdGhlXG5cdFx0XHQvLyBoaWRlIGFuaW1hdGlvblxuXHRcdFx0JCggXCIjXCIgKyBpZCApLnJlbW92ZSgpO1xuXG5cdFx0XHQvLyBSZXN0b3JlIHRoZSB0aXRsZVxuXHRcdFx0aWYgKCBlbGVtZW50LmRhdGEoIFwidWktdG9vbHRpcC10aXRsZVwiICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlIHRpdGxlIGF0dHJpYnV0ZSBoYXMgY2hhbmdlZCBzaW5jZSBvcGVuKCksIGRvbid0IHJlc3RvcmVcblx0XHRcdFx0aWYgKCAhZWxlbWVudC5hdHRyKCBcInRpdGxlXCIgKSApIHtcblx0XHRcdFx0XHRlbGVtZW50LmF0dHIoIFwidGl0bGVcIiwgZWxlbWVudC5kYXRhKCBcInVpLXRvb2x0aXAtdGl0bGVcIiApICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxlbWVudC5yZW1vdmVEYXRhKCBcInVpLXRvb2x0aXAtdGl0bGVcIiApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHR0aGlzLmxpdmVSZWdpb24ucmVtb3ZlKCk7XG5cdH1cbn0gKTtcblxuLy8gREVQUkVDQVRFRFxuLy8gVE9ETzogU3dpdGNoIHJldHVybiBiYWNrIHRvIHdpZGdldCBkZWNsYXJhdGlvbiBhdCB0b3Agb2YgZmlsZSB3aGVuIHRoaXMgaXMgcmVtb3ZlZFxuaWYgKCAkLnVpQmFja0NvbXBhdCAhPT0gZmFsc2UgKSB7XG5cblx0Ly8gQmFja2NvbXBhdCBmb3IgdG9vbHRpcENsYXNzIG9wdGlvblxuXHQkLndpZGdldCggXCJ1aS50b29sdGlwXCIsICQudWkudG9vbHRpcCwge1xuXHRcdG9wdGlvbnM6IHtcblx0XHRcdHRvb2x0aXBDbGFzczogbnVsbFxuXHRcdH0sXG5cdFx0X3Rvb2x0aXA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRvb2x0aXBEYXRhID0gdGhpcy5fc3VwZXJBcHBseSggYXJndW1lbnRzICk7XG5cdFx0XHRpZiAoIHRoaXMub3B0aW9ucy50b29sdGlwQ2xhc3MgKSB7XG5cdFx0XHRcdHRvb2x0aXBEYXRhLnRvb2x0aXAuYWRkQ2xhc3MoIHRoaXMub3B0aW9ucy50b29sdGlwQ2xhc3MgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0b29sdGlwRGF0YTtcblx0XHR9XG5cdH0gKTtcbn1cblxudmFyIHdpZGdldHNUb29sdGlwID0gJC51aS50b29sdGlwO1xuXG5cblxuXG59KSk7XG4iLCIvLyAgICAgVW5kZXJzY29yZS5qcyAxLjguM1xuLy8gICAgIGh0dHA6Ly91bmRlcnNjb3JlanMub3JnXG4vLyAgICAgKGMpIDIwMDktMjAxNSBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuLy8gICAgIFVuZGVyc2NvcmUgbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5cbihmdW5jdGlvbigpIHtcblxuICAvLyBCYXNlbGluZSBzZXR1cFxuICAvLyAtLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIGluIHRoZSBicm93c2VyLCBvciBgZXhwb3J0c2Agb24gdGhlIHNlcnZlci5cbiAgdmFyIHJvb3QgPSB0aGlzO1xuXG4gIC8vIFNhdmUgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBgX2AgdmFyaWFibGUuXG4gIHZhciBwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll87XG5cbiAgLy8gU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZSwgRnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4gIC8vIENyZWF0ZSBxdWljayByZWZlcmVuY2UgdmFyaWFibGVzIGZvciBzcGVlZCBhY2Nlc3MgdG8gY29yZSBwcm90b3R5cGVzLlxuICB2YXJcbiAgICBwdXNoICAgICAgICAgICAgID0gQXJyYXlQcm90by5wdXNoLFxuICAgIHNsaWNlICAgICAgICAgICAgPSBBcnJheVByb3RvLnNsaWNlLFxuICAgIHRvU3RyaW5nICAgICAgICAgPSBPYmpQcm90by50b1N0cmluZyxcbiAgICBoYXNPd25Qcm9wZXJ0eSAgID0gT2JqUHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbiAgLy8gQWxsICoqRUNNQVNjcmlwdCA1KiogbmF0aXZlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyB0aGF0IHdlIGhvcGUgdG8gdXNlXG4gIC8vIGFyZSBkZWNsYXJlZCBoZXJlLlxuICB2YXJcbiAgICBuYXRpdmVJc0FycmF5ICAgICAgPSBBcnJheS5pc0FycmF5LFxuICAgIG5hdGl2ZUtleXMgICAgICAgICA9IE9iamVjdC5rZXlzLFxuICAgIG5hdGl2ZUJpbmQgICAgICAgICA9IEZ1bmNQcm90by5iaW5kLFxuICAgIG5hdGl2ZUNyZWF0ZSAgICAgICA9IE9iamVjdC5jcmVhdGU7XG5cbiAgLy8gTmFrZWQgZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBzdXJyb2dhdGUtcHJvdG90eXBlLXN3YXBwaW5nLlxuICB2YXIgQ3RvciA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGUgYSBzYWZlIHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yIHVzZSBiZWxvdy5cbiAgdmFyIF8gPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgXykgcmV0dXJuIG9iajtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXykpIHJldHVybiBuZXcgXyhvYmopO1xuICAgIHRoaXMuX3dyYXBwZWQgPSBvYmo7XG4gIH07XG5cbiAgLy8gRXhwb3J0IHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgKipOb2RlLmpzKiosIHdpdGhcbiAgLy8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZm9yIHRoZSBvbGQgYHJlcXVpcmUoKWAgQVBJLiBJZiB3ZSdyZSBpblxuICAvLyB0aGUgYnJvd3NlciwgYWRkIGBfYCBhcyBhIGdsb2JhbCBvYmplY3QuXG4gIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IF87XG4gICAgfVxuICAgIGV4cG9ydHMuXyA9IF87XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5fID0gXztcbiAgfVxuXG4gIC8vIEN1cnJlbnQgdmVyc2lvbi5cbiAgXy5WRVJTSU9OID0gJzEuOC4zJztcblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZWZmaWNpZW50IChmb3IgY3VycmVudCBlbmdpbmVzKSB2ZXJzaW9uXG4gIC8vIG9mIHRoZSBwYXNzZWQtaW4gY2FsbGJhY2ssIHRvIGJlIHJlcGVhdGVkbHkgYXBwbGllZCBpbiBvdGhlciBVbmRlcnNjb3JlXG4gIC8vIGZ1bmN0aW9ucy5cbiAgdmFyIG9wdGltaXplQ2IgPSBmdW5jdGlvbihmdW5jLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHJldHVybiBmdW5jO1xuICAgIHN3aXRjaCAoYXJnQ291bnQgPT0gbnVsbCA/IDMgOiBhcmdDb3VudCkge1xuICAgICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG90aGVyKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIG90aGVyKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9uKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCBhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBBIG1vc3RseS1pbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBjYWxsYmFja3MgdGhhdCBjYW4gYmUgYXBwbGllZFxuICAvLyB0byBlYWNoIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCByZXR1cm5pbmcgdGhlIGRlc2lyZWQgcmVzdWx0IOKAlCBlaXRoZXJcbiAgLy8gaWRlbnRpdHksIGFuIGFyYml0cmFyeSBjYWxsYmFjaywgYSBwcm9wZXJ0eSBtYXRjaGVyLCBvciBhIHByb3BlcnR5IGFjY2Vzc29yLlxuICB2YXIgY2IgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIF8uaWRlbnRpdHk7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybiBvcHRpbWl6ZUNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7XG4gICAgaWYgKF8uaXNPYmplY3QodmFsdWUpKSByZXR1cm4gXy5tYXRjaGVyKHZhbHVlKTtcbiAgICByZXR1cm4gXy5wcm9wZXJ0eSh2YWx1ZSk7XG4gIH07XG4gIF8uaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBjYih2YWx1ZSwgY29udGV4dCwgSW5maW5pdHkpO1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhc3NpZ25lciBmdW5jdGlvbnMuXG4gIHZhciBjcmVhdGVBc3NpZ25lciA9IGZ1bmN0aW9uKGtleXNGdW5jLCB1bmRlZmluZWRPbmx5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoIDwgMiB8fCBvYmogPT0gbnVsbCkgcmV0dXJuIG9iajtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF0sXG4gICAgICAgICAgICBrZXlzID0ga2V5c0Z1bmMoc291cmNlKSxcbiAgICAgICAgICAgIGwgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoIXVuZGVmaW5lZE9ubHkgfHwgb2JqW2tleV0gPT09IHZvaWQgMCkgb2JqW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIGFub3RoZXIuXG4gIHZhciBiYXNlQ3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KHByb3RvdHlwZSkpIHJldHVybiB7fTtcbiAgICBpZiAobmF0aXZlQ3JlYXRlKSByZXR1cm4gbmF0aXZlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICAgIEN0b3IucHJvdG90eXBlID0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBwcm9wZXJ0eSA9IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtrZXldO1xuICAgIH07XG4gIH07XG5cbiAgLy8gSGVscGVyIGZvciBjb2xsZWN0aW9uIG1ldGhvZHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBjb2xsZWN0aW9uXG4gIC8vIHNob3VsZCBiZSBpdGVyYXRlZCBhcyBhbiBhcnJheSBvciBhcyBhbiBvYmplY3RcbiAgLy8gUmVsYXRlZDogaHR0cDovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtdG9sZW5ndGhcbiAgLy8gQXZvaWRzIGEgdmVyeSBuYXN0eSBpT1MgOCBKSVQgYnVnIG9uIEFSTS02NC4gIzIwOTRcbiAgdmFyIE1BWF9BUlJBWV9JTkRFWCA9IE1hdGgucG93KDIsIDUzKSAtIDE7XG4gIHZhciBnZXRMZW5ndGggPSBwcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gIHZhciBpc0FycmF5TGlrZSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGNvbGxlY3Rpb24pO1xuICAgIHJldHVybiB0eXBlb2YgbGVuZ3RoID09ICdudW1iZXInICYmIGxlbmd0aCA+PSAwICYmIGxlbmd0aCA8PSBNQVhfQVJSQVlfSU5ERVg7XG4gIH07XG5cbiAgLy8gQ29sbGVjdGlvbiBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBUaGUgY29ybmVyc3RvbmUsIGFuIGBlYWNoYCBpbXBsZW1lbnRhdGlvbiwgYWthIGBmb3JFYWNoYC5cbiAgLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbFxuICAvLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNlLlxuICBfLmVhY2ggPSBfLmZvckVhY2ggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgaSwgbGVuZ3RoO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW2ldLCBpLCBvYmopO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpba2V5c1tpXV0sIGtleXNbaV0sIG9iaik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQuXG4gIF8ubWFwID0gXy5jb2xsZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgcmVzdWx0c1tpbmRleF0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIHJlZHVjaW5nIGZ1bmN0aW9uIGl0ZXJhdGluZyBsZWZ0IG9yIHJpZ2h0LlxuICBmdW5jdGlvbiBjcmVhdGVSZWR1Y2UoZGlyKSB7XG4gICAgLy8gT3B0aW1pemVkIGl0ZXJhdG9yIGZ1bmN0aW9uIGFzIHVzaW5nIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAvLyBpbiB0aGUgbWFpbiBmdW5jdGlvbiB3aWxsIGRlb3B0aW1pemUgdGhlLCBzZWUgIzE5OTEuXG4gICAgZnVuY3Rpb24gaXRlcmF0b3Iob2JqLCBpdGVyYXRlZSwgbWVtbywga2V5cywgaW5kZXgsIGxlbmd0aCkge1xuICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgICBtZW1vID0gaXRlcmF0ZWUobWVtbywgb2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGNvbnRleHQpIHtcbiAgICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgNCk7XG4gICAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICAgIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBpbml0aWFsIHZhbHVlIGlmIG5vbmUgaXMgcHJvdmlkZWQuXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgbWVtbyA9IG9ialtrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGRpcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVyYXRvcihvYmosIGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBpbmRleCwgbGVuZ3RoKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gKipSZWR1Y2UqKiBidWlsZHMgdXAgYSBzaW5nbGUgcmVzdWx0IGZyb20gYSBsaXN0IG9mIHZhbHVlcywgYWthIGBpbmplY3RgLFxuICAvLyBvciBgZm9sZGxgLlxuICBfLnJlZHVjZSA9IF8uZm9sZGwgPSBfLmluamVjdCA9IGNyZWF0ZVJlZHVjZSgxKTtcblxuICAvLyBUaGUgcmlnaHQtYXNzb2NpYXRpdmUgdmVyc2lvbiBvZiByZWR1Y2UsIGFsc28ga25vd24gYXMgYGZvbGRyYC5cbiAgXy5yZWR1Y2VSaWdodCA9IF8uZm9sZHIgPSBjcmVhdGVSZWR1Y2UoLTEpO1xuXG4gIC8vIFJldHVybiB0aGUgZmlyc3QgdmFsdWUgd2hpY2ggcGFzc2VzIGEgdHJ1dGggdGVzdC4gQWxpYXNlZCBhcyBgZGV0ZWN0YC5cbiAgXy5maW5kID0gXy5kZXRlY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBrZXk7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHtcbiAgICAgIGtleSA9IF8uZmluZEluZGV4KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAga2V5ID0gXy5maW5kS2V5KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKGtleSAhPT0gdm9pZCAwICYmIGtleSAhPT0gLTEpIHJldHVybiBvYmpba2V5XTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0aGF0IHBhc3MgYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBzZWxlY3RgLlxuICBfLmZpbHRlciA9IF8uc2VsZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgbGlzdCkpIHJlc3VsdHMucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgZm9yIHdoaWNoIGEgdHJ1dGggdGVzdCBmYWlscy5cbiAgXy5yZWplY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8ubmVnYXRlKGNiKHByZWRpY2F0ZSkpLCBjb250ZXh0KTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgd2hldGhlciBhbGwgb2YgdGhlIGVsZW1lbnRzIG1hdGNoIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgYWxsYC5cbiAgXy5ldmVyeSA9IF8uYWxsID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAoIXByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRoZSBvYmplY3QgbWF0Y2hlcyBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFueWAuXG4gIF8uc29tZSA9IF8uYW55ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAocHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgaWYgdGhlIGFycmF5IG9yIG9iamVjdCBjb250YWlucyBhIGdpdmVuIGl0ZW0gKHVzaW5nIGA9PT1gKS5cbiAgLy8gQWxpYXNlZCBhcyBgaW5jbHVkZXNgIGFuZCBgaW5jbHVkZWAuXG4gIF8uY29udGFpbnMgPSBfLmluY2x1ZGVzID0gXy5pbmNsdWRlID0gZnVuY3Rpb24ob2JqLCBpdGVtLCBmcm9tSW5kZXgsIGd1YXJkKSB7XG4gICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSBfLnZhbHVlcyhvYmopO1xuICAgIGlmICh0eXBlb2YgZnJvbUluZGV4ICE9ICdudW1iZXInIHx8IGd1YXJkKSBmcm9tSW5kZXggPSAwO1xuICAgIHJldHVybiBfLmluZGV4T2Yob2JqLCBpdGVtLCBmcm9tSW5kZXgpID49IDA7XG4gIH07XG5cbiAgLy8gSW52b2tlIGEgbWV0aG9kICh3aXRoIGFyZ3VtZW50cykgb24gZXZlcnkgaXRlbSBpbiBhIGNvbGxlY3Rpb24uXG4gIF8uaW52b2tlID0gZnVuY3Rpb24ob2JqLCBtZXRob2QpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICB2YXIgaXNGdW5jID0gXy5pc0Z1bmN0aW9uKG1ldGhvZCk7XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBmdW5jID0gaXNGdW5jID8gbWV0aG9kIDogdmFsdWVbbWV0aG9kXTtcbiAgICAgIHJldHVybiBmdW5jID09IG51bGwgPyBmdW5jIDogZnVuYy5hcHBseSh2YWx1ZSwgYXJncyk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgbWFwYDogZmV0Y2hpbmcgYSBwcm9wZXJ0eS5cbiAgXy5wbHVjayA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgXy5wcm9wZXJ0eShrZXkpKTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBmaWx0ZXJgOiBzZWxlY3Rpbmcgb25seSBvYmplY3RzXG4gIC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ud2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKG9iaiwgXy5tYXRjaGVyKGF0dHJzKSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmluZGA6IGdldHRpbmcgdGhlIGZpcnN0IG9iamVjdFxuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLmZpbmRXaGVyZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4gXy5maW5kKG9iaiwgXy5tYXRjaGVyKGF0dHJzKSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBtYXhpbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLlxuICBfLm1heCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0gLUluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSAtSW5maW5pdHksXG4gICAgICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCAmJiBvYmogIT0gbnVsbCkge1xuICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVzKG9iaik7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAodmFsdWUgPiByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdCk7XG4gICAgICAgIGlmIChjb21wdXRlZCA+IGxhc3RDb21wdXRlZCB8fCBjb21wdXRlZCA9PT0gLUluZmluaXR5ICYmIHJlc3VsdCA9PT0gLUluZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5taW4gPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IEluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSBJbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBudWxsICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSA8IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkIDwgbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSBJbmZpbml0eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFNodWZmbGUgYSBjb2xsZWN0aW9uLCB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhlXG4gIC8vIFtGaXNoZXItWWF0ZXMgc2h1ZmZsZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXLigJNZYXRlc19zaHVmZmxlKS5cbiAgXy5zaHVmZmxlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHNldCA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBzZXQubGVuZ3RoO1xuICAgIHZhciBzaHVmZmxlZCA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwLCByYW5kOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmFuZCA9IF8ucmFuZG9tKDAsIGluZGV4KTtcbiAgICAgIGlmIChyYW5kICE9PSBpbmRleCkgc2h1ZmZsZWRbaW5kZXhdID0gc2h1ZmZsZWRbcmFuZF07XG4gICAgICBzaHVmZmxlZFtyYW5kXSA9IHNldFtpbmRleF07XG4gICAgfVxuICAgIHJldHVybiBzaHVmZmxlZDtcbiAgfTtcblxuICAvLyBTYW1wbGUgKipuKiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbi5cbiAgLy8gSWYgKipuKiogaXMgbm90IHNwZWNpZmllZCwgcmV0dXJucyBhIHNpbmdsZSByYW5kb20gZWxlbWVudC5cbiAgLy8gVGhlIGludGVybmFsIGBndWFyZGAgYXJndW1lbnQgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgbWFwYC5cbiAgXy5zYW1wbGUgPSBmdW5jdGlvbihvYmosIG4sIGd1YXJkKSB7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkge1xuICAgICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSBfLnZhbHVlcyhvYmopO1xuICAgICAgcmV0dXJuIG9ialtfLnJhbmRvbShvYmoubGVuZ3RoIC0gMSldO1xuICAgIH1cbiAgICByZXR1cm4gXy5zaHVmZmxlKG9iaikuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbikpO1xuICB9O1xuXG4gIC8vIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRlZS5cbiAgXy5zb3J0QnkgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgcmV0dXJuIF8ucGx1Y2soXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBjcml0ZXJpYTogaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KVxuICAgICAgfTtcbiAgICB9KS5zb3J0KGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWE7XG4gICAgICB2YXIgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgaWYgKGEgPiBiIHx8IGEgPT09IHZvaWQgMCkgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhIDwgYiB8fCBiID09PSB2b2lkIDApIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZWZ0LmluZGV4IC0gcmlnaHQuaW5kZXg7XG4gICAgfSksICd2YWx1ZScpO1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHVzZWQgZm9yIGFnZ3JlZ2F0ZSBcImdyb3VwIGJ5XCIgb3BlcmF0aW9ucy5cbiAgdmFyIGdyb3VwID0gZnVuY3Rpb24oYmVoYXZpb3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGtleSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICAgICAgYmVoYXZpb3IocmVzdWx0LCB2YWx1ZSwga2V5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGVcbiAgLy8gdG8gZ3JvdXAgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjcml0ZXJpb24uXG4gIF8uZ3JvdXBCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChfLmhhcyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldLnB1c2godmFsdWUpOyBlbHNlIHJlc3VsdFtrZXldID0gW3ZhbHVlXTtcbiAgfSk7XG5cbiAgLy8gSW5kZXhlcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLCBzaW1pbGFyIHRvIGBncm91cEJ5YCwgYnV0IGZvclxuICAvLyB3aGVuIHlvdSBrbm93IHRoYXQgeW91ciBpbmRleCB2YWx1ZXMgd2lsbCBiZSB1bmlxdWUuXG4gIF8uaW5kZXhCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gIH0pO1xuXG4gIC8vIENvdW50cyBpbnN0YW5jZXMgb2YgYW4gb2JqZWN0IHRoYXQgZ3JvdXAgYnkgYSBjZXJ0YWluIGNyaXRlcmlvbi4gUGFzc1xuICAvLyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlIHRvIGNvdW50IGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAgLy8gY3JpdGVyaW9uLlxuICBfLmNvdW50QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICBpZiAoXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XSsrOyBlbHNlIHJlc3VsdFtrZXldID0gMTtcbiAgfSk7XG5cbiAgLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWwsIGxpdmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVyYWJsZS5cbiAgXy50b0FycmF5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFvYmopIHJldHVybiBbXTtcbiAgICBpZiAoXy5pc0FycmF5KG9iaikpIHJldHVybiBzbGljZS5jYWxsKG9iaik7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBfLm1hcChvYmosIF8uaWRlbnRpdHkpO1xuICAgIHJldHVybiBfLnZhbHVlcyhvYmopO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIG9iamVjdC5cbiAgXy5zaXplID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4gaXNBcnJheUxpa2Uob2JqKSA/IG9iai5sZW5ndGggOiBfLmtleXMob2JqKS5sZW5ndGg7XG4gIH07XG5cbiAgLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5czogb25lIHdob3NlIGVsZW1lbnRzIGFsbCBzYXRpc2Z5IHRoZSBnaXZlblxuICAvLyBwcmVkaWNhdGUsIGFuZCBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIGRvIG5vdCBzYXRpc2Z5IHRoZSBwcmVkaWNhdGUuXG4gIF8ucGFydGl0aW9uID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBwYXNzID0gW10sIGZhaWwgPSBbXTtcbiAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmopIHtcbiAgICAgIChwcmVkaWNhdGUodmFsdWUsIGtleSwgb2JqKSA/IHBhc3MgOiBmYWlsKS5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW3Bhc3MsIGZhaWxdO1xuICB9O1xuXG4gIC8vIEFycmF5IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS1cblxuICAvLyBHZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGZpcnN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgaGVhZGAgYW5kIGB0YWtlYC4gVGhlICoqZ3VhcmQqKiBjaGVja1xuICAvLyBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXG4gIF8uZmlyc3QgPSBfLmhlYWQgPSBfLnRha2UgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbMF07XG4gICAgcmV0dXJuIF8uaW5pdGlhbChhcnJheSwgYXJyYXkubGVuZ3RoIC0gbik7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgbGFzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEVzcGVjaWFsbHkgdXNlZnVsIG9uXG4gIC8vIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIGFsbCB0aGUgdmFsdWVzIGluXG4gIC8vIHRoZSBhcnJheSwgZXhjbHVkaW5nIHRoZSBsYXN0IE4uXG4gIF8uaW5pdGlhbCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCAwLCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSAobiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pKSk7XG4gIH07XG5cbiAgLy8gR2V0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGxhc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuICBfLmxhc3QgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIF8ucmVzdChhcnJheSwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gbikpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgdGFpbGAgYW5kIGBkcm9wYC5cbiAgLy8gRXNwZWNpYWxseSB1c2VmdWwgb24gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgYW4gKipuKiogd2lsbCByZXR1cm5cbiAgLy8gdGhlIHJlc3QgTiB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuICBfLnJlc3QgPSBfLnRhaWwgPSBfLmRyb3AgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgbiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pO1xuICB9O1xuXG4gIC8vIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS5cbiAgXy5jb21wYWN0ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXksIF8uaWRlbnRpdHkpO1xuICB9O1xuXG4gIC8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5jdGlvbi5cbiAgdmFyIGZsYXR0ZW4gPSBmdW5jdGlvbihpbnB1dCwgc2hhbGxvdywgc3RyaWN0LCBzdGFydEluZGV4KSB7XG4gICAgdmFyIG91dHB1dCA9IFtdLCBpZHggPSAwO1xuICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4IHx8IDAsIGxlbmd0aCA9IGdldExlbmd0aChpbnB1dCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmIChfLmlzQXJyYXkodmFsdWUpIHx8IF8uaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgICAgICAvL2ZsYXR0ZW4gY3VycmVudCBsZXZlbCBvZiBhcnJheSBvciBhcmd1bWVudHMgb2JqZWN0XG4gICAgICAgIGlmICghc2hhbGxvdykgdmFsdWUgPSBmbGF0dGVuKHZhbHVlLCBzaGFsbG93LCBzdHJpY3QpO1xuICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgb3V0cHV0Lmxlbmd0aCArPSBsZW47XG4gICAgICAgIHdoaWxlIChqIDwgbGVuKSB7XG4gICAgICAgICAgb3V0cHV0W2lkeCsrXSA9IHZhbHVlW2orK107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCkge1xuICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgLy8gRmxhdHRlbiBvdXQgYW4gYXJyYXksIGVpdGhlciByZWN1cnNpdmVseSAoYnkgZGVmYXVsdCksIG9yIGp1c3Qgb25lIGxldmVsLlxuICBfLmZsYXR0ZW4gPSBmdW5jdGlvbihhcnJheSwgc2hhbGxvdykge1xuICAgIHJldHVybiBmbGF0dGVuKGFycmF5LCBzaGFsbG93LCBmYWxzZSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgdmVyc2lvbiBvZiB0aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQgdmFsdWUocykuXG4gIF8ud2l0aG91dCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShhcnJheSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeVxuICAvLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uXG4gIC8vIEFsaWFzZWQgYXMgYHVuaXF1ZWAuXG4gIF8udW5pcSA9IF8udW5pcXVlID0gZnVuY3Rpb24oYXJyYXksIGlzU29ydGVkLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGlmICghXy5pc0Jvb2xlYW4oaXNTb3J0ZWQpKSB7XG4gICAgICBjb250ZXh0ID0gaXRlcmF0ZWU7XG4gICAgICBpdGVyYXRlZSA9IGlzU29ydGVkO1xuICAgICAgaXNTb3J0ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGl0ZXJhdGVlICE9IG51bGwpIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgc2VlbiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldLFxuICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSwgaSwgYXJyYXkpIDogdmFsdWU7XG4gICAgICBpZiAoaXNTb3J0ZWQpIHtcbiAgICAgICAgaWYgKCFpIHx8IHNlZW4gIT09IGNvbXB1dGVkKSByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAgICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKHNlZW4sIGNvbXB1dGVkKSkge1xuICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFfLmNvbnRhaW5zKHJlc3VsdCwgdmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIHVuaW9uOiBlYWNoIGRpc3RpbmN0IGVsZW1lbnQgZnJvbSBhbGwgb2ZcbiAgLy8gdGhlIHBhc3NlZC1pbiBhcnJheXMuXG4gIF8udW5pb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXy51bmlxKGZsYXR0ZW4oYXJndW1lbnRzLCB0cnVlLCB0cnVlKSk7XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZVxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLmludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGFycmF5W2ldO1xuICAgICAgaWYgKF8uY29udGFpbnMocmVzdWx0LCBpdGVtKSkgY29udGludWU7XG4gICAgICBmb3IgKHZhciBqID0gMTsgaiA8IGFyZ3NMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoIV8uY29udGFpbnMoYXJndW1lbnRzW2pdLCBpdGVtKSkgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoaiA9PT0gYXJnc0xlbmd0aCkgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gVGFrZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9uZSBhcnJheSBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgYXJyYXlzLlxuICAvLyBPbmx5IHRoZSBlbGVtZW50cyBwcmVzZW50IGluIGp1c3QgdGhlIGZpcnN0IGFycmF5IHdpbGwgcmVtYWluLlxuICBfLmRpZmZlcmVuY2UgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciByZXN0ID0gZmxhdHRlbihhcmd1bWVudHMsIHRydWUsIHRydWUsIDEpO1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpe1xuICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKHJlc3QsIHZhbHVlKTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBaaXAgdG9nZXRoZXIgbXVsdGlwbGUgbGlzdHMgaW50byBhIHNpbmdsZSBhcnJheSAtLSBlbGVtZW50cyB0aGF0IHNoYXJlXG4gIC8vIGFuIGluZGV4IGdvIHRvZ2V0aGVyLlxuICBfLnppcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfLnVuemlwKGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgLy8gQ29tcGxlbWVudCBvZiBfLnppcC4gVW56aXAgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgYW5kIGdyb3Vwc1xuICAvLyBlYWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hhcmVkIGluZGljZXNcbiAgXy51bnppcCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ICYmIF8ubWF4KGFycmF5LCBnZXRMZW5ndGgpLmxlbmd0aCB8fCAwO1xuICAgIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmVzdWx0W2luZGV4XSA9IF8ucGx1Y2soYXJyYXksIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDb252ZXJ0cyBsaXN0cyBpbnRvIG9iamVjdHMuIFBhc3MgZWl0aGVyIGEgc2luZ2xlIGFycmF5IG9mIGBba2V5LCB2YWx1ZV1gXG4gIC8vIHBhaXJzLCBvciB0d28gcGFyYWxsZWwgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCAtLSBvbmUgb2Yga2V5cywgYW5kIG9uZSBvZlxuICAvLyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gIF8ub2JqZWN0ID0gZnVuY3Rpb24obGlzdCwgdmFsdWVzKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgobGlzdCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICByZXN1bHRbbGlzdFtpXV0gPSB2YWx1ZXNbaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRbbGlzdFtpXVswXV0gPSBsaXN0W2ldWzFdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRvciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGZpbmRJbmRleCBhbmQgZmluZExhc3RJbmRleCBmdW5jdGlvbnNcbiAgZnVuY3Rpb24gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoZGlyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIHZhciBpbmRleCA9IGRpciA+IDAgPyAwIDogbGVuZ3RoIC0gMTtcbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0XG4gIF8uZmluZEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoMSk7XG4gIF8uZmluZExhc3RJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKC0xKTtcblxuICAvLyBVc2UgYSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRvIGZpZ3VyZSBvdXQgdGhlIHNtYWxsZXN0IGluZGV4IGF0IHdoaWNoXG4gIC8vIGFuIG9iamVjdCBzaG91bGQgYmUgaW5zZXJ0ZWQgc28gYXMgdG8gbWFpbnRhaW4gb3JkZXIuIFVzZXMgYmluYXJ5IHNlYXJjaC5cbiAgXy5zb3J0ZWRJbmRleCA9IGZ1bmN0aW9uKGFycmF5LCBvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgdmFyIHZhbHVlID0gaXRlcmF0ZWUob2JqKTtcbiAgICB2YXIgbG93ID0gMCwgaGlnaCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgIHZhciBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xuICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W21pZF0pIDwgdmFsdWUpIGxvdyA9IG1pZCArIDE7IGVsc2UgaGlnaCA9IG1pZDtcbiAgICB9XG4gICAgcmV0dXJuIGxvdztcbiAgfTtcblxuICAvLyBHZW5lcmF0b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBpbmRleE9mIGFuZCBsYXN0SW5kZXhPZiBmdW5jdGlvbnNcbiAgZnVuY3Rpb24gY3JlYXRlSW5kZXhGaW5kZXIoZGlyLCBwcmVkaWNhdGVGaW5kLCBzb3J0ZWRJbmRleCkge1xuICAgIHJldHVybiBmdW5jdGlvbihhcnJheSwgaXRlbSwgaWR4KSB7XG4gICAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgICBpZiAodHlwZW9mIGlkeCA9PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoZGlyID4gMCkge1xuICAgICAgICAgICAgaSA9IGlkeCA+PSAwID8gaWR4IDogTWF0aC5tYXgoaWR4ICsgbGVuZ3RoLCBpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxlbmd0aCA9IGlkeCA+PSAwID8gTWF0aC5taW4oaWR4ICsgMSwgbGVuZ3RoKSA6IGlkeCArIGxlbmd0aCArIDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc29ydGVkSW5kZXggJiYgaWR4ICYmIGxlbmd0aCkge1xuICAgICAgICBpZHggPSBzb3J0ZWRJbmRleChhcnJheSwgaXRlbSk7XG4gICAgICAgIHJldHVybiBhcnJheVtpZHhdID09PSBpdGVtID8gaWR4IDogLTE7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbSAhPT0gaXRlbSkge1xuICAgICAgICBpZHggPSBwcmVkaWNhdGVGaW5kKHNsaWNlLmNhbGwoYXJyYXksIGksIGxlbmd0aCksIF8uaXNOYU4pO1xuICAgICAgICByZXR1cm4gaWR4ID49IDAgPyBpZHggKyBpIDogLTE7XG4gICAgICB9XG4gICAgICBmb3IgKGlkeCA9IGRpciA+IDAgPyBpIDogbGVuZ3RoIC0gMTsgaWR4ID49IDAgJiYgaWR4IDwgbGVuZ3RoOyBpZHggKz0gZGlyKSB7XG4gICAgICAgIGlmIChhcnJheVtpZHhdID09PSBpdGVtKSByZXR1cm4gaWR4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGFuIGl0ZW0gaW4gYW4gYXJyYXksXG4gIC8vIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuXG4gIC8vIElmIHRoZSBhcnJheSBpcyBsYXJnZSBhbmQgYWxyZWFkeSBpbiBzb3J0IG9yZGVyLCBwYXNzIGB0cnVlYFxuICAvLyBmb3IgKippc1NvcnRlZCoqIHRvIHVzZSBiaW5hcnkgc2VhcmNoLlxuICBfLmluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigxLCBfLmZpbmRJbmRleCwgXy5zb3J0ZWRJbmRleCk7XG4gIF8ubGFzdEluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigtMSwgXy5maW5kTGFzdEluZGV4KTtcblxuICAvLyBHZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJpdGhtZXRpYyBwcm9ncmVzc2lvbi4gQSBwb3J0IG9mXG4gIC8vIHRoZSBuYXRpdmUgUHl0aG9uIGByYW5nZSgpYCBmdW5jdGlvbi4gU2VlXG4gIC8vIFt0aGUgUHl0aG9uIGRvY3VtZW50YXRpb25dKGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSkuXG4gIF8ucmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIGlmIChzdG9wID09IG51bGwpIHtcbiAgICAgIHN0b3AgPSBzdGFydCB8fCAwO1xuICAgICAgc3RhcnQgPSAwO1xuICAgIH1cbiAgICBzdGVwID0gc3RlcCB8fCAxO1xuXG4gICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApLCAwKTtcbiAgICB2YXIgcmFuZ2UgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbGVuZ3RoOyBpZHgrKywgc3RhcnQgKz0gc3RlcCkge1xuICAgICAgcmFuZ2VbaWR4XSA9IHN0YXJ0O1xuICAgIH1cblxuICAgIHJldHVybiByYW5nZTtcbiAgfTtcblxuICAvLyBGdW5jdGlvbiAoYWhlbSkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIERldGVybWluZXMgd2hldGhlciB0byBleGVjdXRlIGEgZnVuY3Rpb24gYXMgYSBjb25zdHJ1Y3RvclxuICAvLyBvciBhIG5vcm1hbCBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHNcbiAgdmFyIGV4ZWN1dGVCb3VuZCA9IGZ1bmN0aW9uKHNvdXJjZUZ1bmMsIGJvdW5kRnVuYywgY29udGV4dCwgY2FsbGluZ0NvbnRleHQsIGFyZ3MpIHtcbiAgICBpZiAoIShjYWxsaW5nQ29udGV4dCBpbnN0YW5jZW9mIGJvdW5kRnVuYykpIHJldHVybiBzb3VyY2VGdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIHZhciBzZWxmID0gYmFzZUNyZWF0ZShzb3VyY2VGdW5jLnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IHNvdXJjZUZ1bmMuYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICByZXR1cm4gc2VsZjtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbiAgLy8gb3B0aW9uYWxseSkuIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBGdW5jdGlvbi5iaW5kYCBpZlxuICAvLyBhdmFpbGFibGUuXG4gIF8uYmluZCA9IGZ1bmN0aW9uKGZ1bmMsIGNvbnRleHQpIHtcbiAgICBpZiAobmF0aXZlQmluZCAmJiBmdW5jLmJpbmQgPT09IG5hdGl2ZUJpbmQpIHJldHVybiBuYXRpdmVCaW5kLmFwcGx5KGZ1bmMsIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gICAgaWYgKCFfLmlzRnVuY3Rpb24oZnVuYykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JpbmQgbXVzdCBiZSBjYWxsZWQgb24gYSBmdW5jdGlvbicpO1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgY29udGV4dCwgdGhpcywgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG4gICAgfTtcbiAgICByZXR1cm4gYm91bmQ7XG4gIH07XG5cbiAgLy8gUGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0c1xuICAvLyBhcmd1bWVudHMgcHJlLWZpbGxlZCwgd2l0aG91dCBjaGFuZ2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4gXyBhY3RzXG4gIC8vIGFzIGEgcGxhY2Vob2xkZXIsIGFsbG93aW5nIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgdG8gYmUgcHJlLWZpbGxlZC5cbiAgXy5wYXJ0aWFsID0gZnVuY3Rpb24oZnVuYykge1xuICAgIHZhciBib3VuZEFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgdmFyIGJvdW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcG9zaXRpb24gPSAwLCBsZW5ndGggPSBib3VuZEFyZ3MubGVuZ3RoO1xuICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW5ndGgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBhcmdzW2ldID0gYm91bmRBcmdzW2ldID09PSBfID8gYXJndW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlvbisrXSk7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCB0aGlzLCB0aGlzLCBhcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfTtcblxuICAvLyBCaW5kIGEgbnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmplY3QuIFJlbWFpbmluZyBhcmd1bWVudHNcbiAgLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUgYm91bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXG4gIC8vIGRlZmluZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC5cbiAgXy5iaW5kQWxsID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGksIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsIGtleTtcbiAgICBpZiAobGVuZ3RoIDw9IDEpIHRocm93IG5ldyBFcnJvcignYmluZEFsbCBtdXN0IGJlIHBhc3NlZCBmdW5jdGlvbiBuYW1lcycpO1xuICAgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gYXJndW1lbnRzW2ldO1xuICAgICAgb2JqW2tleV0gPSBfLmJpbmQob2JqW2tleV0sIG9iaik7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gTWVtb2l6ZSBhbiBleHBlbnNpdmUgZnVuY3Rpb24gYnkgc3RvcmluZyBpdHMgcmVzdWx0cy5cbiAgXy5tZW1vaXplID0gZnVuY3Rpb24oZnVuYywgaGFzaGVyKSB7XG4gICAgdmFyIG1lbW9pemUgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHZhciBjYWNoZSA9IG1lbW9pemUuY2FjaGU7XG4gICAgICB2YXIgYWRkcmVzcyA9ICcnICsgKGhhc2hlciA/IGhhc2hlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDoga2V5KTtcbiAgICAgIGlmICghXy5oYXMoY2FjaGUsIGFkZHJlc3MpKSBjYWNoZVthZGRyZXNzXSA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiBjYWNoZVthZGRyZXNzXTtcbiAgICB9O1xuICAgIG1lbW9pemUuY2FjaGUgPSB7fTtcbiAgICByZXR1cm4gbWVtb2l6ZTtcbiAgfTtcblxuICAvLyBEZWxheXMgYSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbGxzXG4gIC8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGllZC5cbiAgXy5kZWxheSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSwgd2FpdCk7XG4gIH07XG5cbiAgLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIF8uZGVmZXIgPSBfLnBhcnRpYWwoXy5kZWxheSwgXywgMSk7XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4gIC8vIGR1cmluZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1blxuICAvLyBhcyBtdWNoIGFzIGl0IGNhbiwgd2l0aG91dCBldmVyIGdvaW5nIG1vcmUgdGhhbiBvbmNlIHBlciBgd2FpdGAgZHVyYXRpb247XG4gIC8vIGJ1dCBpZiB5b3UnZCBsaWtlIHRvIGRpc2FibGUgdGhlIGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNzXG4gIC8vIGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLlxuICBfLnRocm90dGxlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0LCBhcmdzLCByZXN1bHQ7XG4gICAgdmFyIHRpbWVvdXQgPSBudWxsO1xuICAgIHZhciBwcmV2aW91cyA9IDA7XG4gICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBwcmV2aW91cyA9IG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UgPyAwIDogXy5ub3coKTtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG5vdyA9IF8ubm93KCk7XG4gICAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlvdXMpO1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIGFzIGxvbmcgYXMgaXQgY29udGludWVzIHRvIGJlIGludm9rZWQsIHdpbGwgbm90XG4gIC8vIGJlIHRyaWdnZXJlZC4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGl0IHN0b3BzIGJlaW5nIGNhbGxlZCBmb3JcbiAgLy8gTiBtaWxsaXNlY29uZHMuIElmIGBpbW1lZGlhdGVgIGlzIHBhc3NlZCwgdHJpZ2dlciB0aGUgZnVuY3Rpb24gb24gdGhlXG4gIC8vIGxlYWRpbmcgZWRnZSwgaW5zdGVhZCBvZiB0aGUgdHJhaWxpbmcuXG4gIF8uZGVib3VuY2UgPSBmdW5jdGlvbihmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgICB2YXIgdGltZW91dCwgYXJncywgY29udGV4dCwgdGltZXN0YW1wLCByZXN1bHQ7XG5cbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBsYXN0ID0gXy5ub3coKSAtIHRpbWVzdGFtcDtcblxuICAgICAgaWYgKGxhc3QgPCB3YWl0ICYmIGxhc3QgPj0gMCkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCAtIGxhc3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIGlmICghaW1tZWRpYXRlKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICB0aW1lc3RhbXAgPSBfLm5vdygpO1xuICAgICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG4gICAgICBpZiAoIXRpbWVvdXQpIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgIGlmIChjYWxsTm93KSB7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGZ1bmN0aW9uIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgc2Vjb25kLFxuICAvLyBhbGxvd2luZyB5b3UgdG8gYWRqdXN0IGFyZ3VtZW50cywgcnVuIGNvZGUgYmVmb3JlIGFuZCBhZnRlciwgYW5kXG4gIC8vIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uXG4gIF8ud3JhcCA9IGZ1bmN0aW9uKGZ1bmMsIHdyYXBwZXIpIHtcbiAgICByZXR1cm4gXy5wYXJ0aWFsKHdyYXBwZXIsIGZ1bmMpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBuZWdhdGVkIHZlcnNpb24gb2YgdGhlIHBhc3NlZC1pbiBwcmVkaWNhdGUuXG4gIF8ubmVnYXRlID0gZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBhIGxpc3Qgb2YgZnVuY3Rpb25zLCBlYWNoXG4gIC8vIGNvbnN1bWluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0IGZvbGxvd3MuXG4gIF8uY29tcG9zZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIHZhciBzdGFydCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSA9IHN0YXJ0O1xuICAgICAgdmFyIHJlc3VsdCA9IGFyZ3Nbc3RhcnRdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB3aGlsZSAoaS0tKSByZXN1bHQgPSBhcmdzW2ldLmNhbGwodGhpcywgcmVzdWx0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgb24gYW5kIGFmdGVyIHRoZSBOdGggY2FsbC5cbiAgXy5hZnRlciA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMgPCAxKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgdXAgdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSB0aGUgTnRoIGNhbGwuXG4gIF8uYmVmb3JlID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICB2YXIgbWVtbztcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA+IDApIHtcbiAgICAgICAgbWVtbyA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aW1lcyA8PSAxKSBmdW5jID0gbnVsbDtcbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhdCBtb3N0IG9uZSB0aW1lLCBubyBtYXR0ZXIgaG93XG4gIC8vIG9mdGVuIHlvdSBjYWxsIGl0LiBVc2VmdWwgZm9yIGxhenkgaW5pdGlhbGl6YXRpb24uXG4gIF8ub25jZSA9IF8ucGFydGlhbChfLmJlZm9yZSwgMik7XG5cbiAgLy8gT2JqZWN0IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gS2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndCBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC5cbiAgdmFyIGhhc0VudW1CdWcgPSAhe3RvU3RyaW5nOiBudWxsfS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKTtcbiAgdmFyIG5vbkVudW1lcmFibGVQcm9wcyA9IFsndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3RvU3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydHlJc0VudW1lcmFibGUnLCAnaGFzT3duUHJvcGVydHknLCAndG9Mb2NhbGVTdHJpbmcnXTtcblxuICBmdW5jdGlvbiBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cykge1xuICAgIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBvYmouY29uc3RydWN0b3I7XG4gICAgdmFyIHByb3RvID0gKF8uaXNGdW5jdGlvbihjb25zdHJ1Y3RvcikgJiYgY29uc3RydWN0b3IucHJvdG90eXBlKSB8fCBPYmpQcm90bztcblxuICAgIC8vIENvbnN0cnVjdG9yIGlzIGEgc3BlY2lhbCBjYXNlLlxuICAgIHZhciBwcm9wID0gJ2NvbnN0cnVjdG9yJztcbiAgICBpZiAoXy5oYXMob2JqLCBwcm9wKSAmJiAhXy5jb250YWlucyhrZXlzLCBwcm9wKSkga2V5cy5wdXNoKHByb3ApO1xuXG4gICAgd2hpbGUgKG5vbkVudW1JZHgtLSkge1xuICAgICAgcHJvcCA9IG5vbkVudW1lcmFibGVQcm9wc1tub25FbnVtSWR4XTtcbiAgICAgIGlmIChwcm9wIGluIG9iaiAmJiBvYmpbcHJvcF0gIT09IHByb3RvW3Byb3BdICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSB7XG4gICAgICAgIGtleXMucHVzaChwcm9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBPYmplY3Qua2V5c2BcbiAgXy5rZXlzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgICBpZiAobmF0aXZlS2V5cykgcmV0dXJuIG5hdGl2ZUtleXMob2JqKTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChfLmhhcyhvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICAgIC8vIEFoZW0sIElFIDwgOS5cbiAgICBpZiAoaGFzRW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpO1xuICAgIHJldHVybiBrZXlzO1xuICB9O1xuXG4gIC8vIFJldHJpZXZlIGFsbCB0aGUgcHJvcGVydHkgbmFtZXMgb2YgYW4gb2JqZWN0LlxuICBfLmFsbEtleXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLlxuICBfLnZhbHVlcyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciB2YWx1ZXMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlc1tpXSA9IG9ialtrZXlzW2ldXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQgb2YgdGhlIG9iamVjdFxuICAvLyBJbiBjb250cmFzdCB0byBfLm1hcCBpdCByZXR1cm5zIGFuIG9iamVjdFxuICBfLm1hcE9iamVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICBfLmtleXMob2JqKSxcbiAgICAgICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHRzID0ge30sXG4gICAgICAgICAgY3VycmVudEtleTtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY3VycmVudEtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgICByZXN1bHRzW2N1cnJlbnRLZXldID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuXG4gIF8ucGFpcnMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgcGFpcnMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhaXJzW2ldID0gW2tleXNbaV0sIG9ialtrZXlzW2ldXV07XG4gICAgfVxuICAgIHJldHVybiBwYWlycztcbiAgfTtcblxuICAvLyBJbnZlcnQgdGhlIGtleXMgYW5kIHZhbHVlcyBvZiBhbiBvYmplY3QuIFRoZSB2YWx1ZXMgbXVzdCBiZSBzZXJpYWxpemFibGUuXG4gIF8uaW52ZXJ0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtvYmpba2V5c1tpXV1dID0ga2V5c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiB0aGUgZnVuY3Rpb24gbmFtZXMgYXZhaWxhYmxlIG9uIHRoZSBvYmplY3QuXG4gIC8vIEFsaWFzZWQgYXMgYG1ldGhvZHNgXG4gIF8uZnVuY3Rpb25zID0gXy5tZXRob2RzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihvYmpba2V5XSkpIG5hbWVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWVzLnNvcnQoKTtcbiAgfTtcblxuICAvLyBFeHRlbmQgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIHByb3BlcnRpZXMgaW4gcGFzc2VkLWluIG9iamVjdChzKS5cbiAgXy5leHRlbmQgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMpO1xuXG4gIC8vIEFzc2lnbnMgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIG93biBwcm9wZXJ0aWVzIGluIHRoZSBwYXNzZWQtaW4gb2JqZWN0KHMpXG4gIC8vIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduKVxuICBfLmV4dGVuZE93biA9IF8uYXNzaWduID0gY3JlYXRlQXNzaWduZXIoXy5rZXlzKTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBrZXkgb24gYW4gb2JqZWN0IHRoYXQgcGFzc2VzIGEgcHJlZGljYXRlIHRlc3RcbiAgXy5maW5kS2V5ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaiksIGtleTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmIChwcmVkaWNhdGUob2JqW2tleV0sIGtleSwgb2JqKSkgcmV0dXJuIGtleTtcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgd2hpdGVsaXN0ZWQgcHJvcGVydGllcy5cbiAgXy5waWNrID0gZnVuY3Rpb24ob2JqZWN0LCBvaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0ge30sIG9iaiA9IG9iamVjdCwgaXRlcmF0ZWUsIGtleXM7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0O1xuICAgIGlmIChfLmlzRnVuY3Rpb24ob2l0ZXJhdGVlKSkge1xuICAgICAga2V5cyA9IF8uYWxsS2V5cyhvYmopO1xuICAgICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKG9pdGVyYXRlZSwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBmbGF0dGVuKGFyZ3VtZW50cywgZmFsc2UsIGZhbHNlLCAxKTtcbiAgICAgIGl0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqKSB7IHJldHVybiBrZXkgaW4gb2JqOyB9O1xuICAgICAgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgaWYgKGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iaikpIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBibGFja2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLm9taXQgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICAgIGl0ZXJhdGVlID0gXy5uZWdhdGUoaXRlcmF0ZWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IF8ubWFwKGZsYXR0ZW4oYXJndW1lbnRzLCBmYWxzZSwgZmFsc2UsIDEpLCBTdHJpbmcpO1xuICAgICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICAgIHJldHVybiAhXy5jb250YWlucyhrZXlzLCBrZXkpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIF8ucGljayhvYmosIGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgfTtcblxuICAvLyBGaWxsIGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICBfLmRlZmF1bHRzID0gY3JlYXRlQXNzaWduZXIoXy5hbGxLZXlzLCB0cnVlKTtcblxuICAvLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuXG4gIC8vIElmIGFkZGl0aW9uYWwgcHJvcGVydGllcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4gIC8vIGNyZWF0ZWQgb2JqZWN0LlxuICBfLmNyZWF0ZSA9IGZ1bmN0aW9uKHByb3RvdHlwZSwgcHJvcHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgIGlmIChwcm9wcykgXy5leHRlbmRPd24ocmVzdWx0LCBwcm9wcyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBvYmplY3QuXG4gIF8uY2xvbmUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gXy5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF8uZXh0ZW5kKHt9LCBvYmopO1xuICB9O1xuXG4gIC8vIEludm9rZXMgaW50ZXJjZXB0b3Igd2l0aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai5cbiAgLy8gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4sIGluXG4gIC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICBfLnRhcCA9IGZ1bmN0aW9uKG9iaiwgaW50ZXJjZXB0b3IpIHtcbiAgICBpbnRlcmNlcHRvcihvYmopO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2YgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uaXNNYXRjaCA9IGZ1bmN0aW9uKG9iamVjdCwgYXR0cnMpIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhhdHRycyksIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7XG4gICAgdmFyIG9iaiA9IE9iamVjdChvYmplY3QpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKGF0dHJzW2tleV0gIT09IG9ialtrZXldIHx8ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cblxuICAvLyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgYGlzRXF1YWxgLlxuICB2YXIgZXEgPSBmdW5jdGlvbihhLCBiLCBhU3RhY2ssIGJTdGFjaykge1xuICAgIC8vIElkZW50aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRoZXkgYXJlbid0IGlkZW50aWNhbC5cbiAgICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9wb3NhbF0oaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTplZ2FsKS5cbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xuICAgIC8vIEEgc3RyaWN0IGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYG51bGwgPT0gdW5kZWZpbmVkYC5cbiAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGEgPT09IGI7XG4gICAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBfKSBhID0gYS5fd3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93cmFwcGVkO1xuICAgIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAvLyBTdHJpbmdzLCBudW1iZXJzLCByZWd1bGFyIGV4cHJlc3Npb25zLCBkYXRlcywgYW5kIGJvb2xlYW5zIGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG4gICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgICAgY2FzZSAnW29iamVjdCBTdHJpbmddJzpcbiAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgICByZXR1cm4gJycgKyBhID09PSAnJyArIGI7XG4gICAgICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgICAvLyBPYmplY3QoTmFOKSBpcyBlcXVpdmFsZW50IHRvIE5hTlxuICAgICAgICBpZiAoK2EgIT09ICthKSByZXR1cm4gK2IgIT09ICtiO1xuICAgICAgICAvLyBBbiBgZWdhbGAgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQgZm9yIG90aGVyIG51bWVyaWMgdmFsdWVzLlxuICAgICAgICByZXR1cm4gK2EgPT09IDAgPyAxIC8gK2EgPT09IDEgLyBiIDogK2EgPT09ICtiO1xuICAgICAgY2FzZSAnW29iamVjdCBEYXRlXSc6XG4gICAgICBjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcbiAgICAgICAgLy8gQ29lcmNlIGRhdGVzIGFuZCBib29sZWFucyB0byBudW1lcmljIHByaW1pdGl2ZSB2YWx1ZXMuIERhdGVzIGFyZSBjb21wYXJlZCBieSB0aGVpclxuICAgICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zXG4gICAgICAgIC8vIG9mIGBOYU5gIGFyZSBub3QgZXF1aXZhbGVudC5cbiAgICAgICAgcmV0dXJuICthID09PSArYjtcbiAgICB9XG5cbiAgICB2YXIgYXJlQXJyYXlzID0gY2xhc3NOYW1lID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIGlmICghYXJlQXJyYXlzKSB7XG4gICAgICBpZiAodHlwZW9mIGEgIT0gJ29iamVjdCcgfHwgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gT2JqZWN0cyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVpdmFsZW50LCBidXQgYE9iamVjdGBzIG9yIGBBcnJheWBzXG4gICAgICAvLyBmcm9tIGRpZmZlcmVudCBmcmFtZXMgYXJlLlxuICAgICAgdmFyIGFDdG9yID0gYS5jb25zdHJ1Y3RvciwgYkN0b3IgPSBiLmNvbnN0cnVjdG9yO1xuICAgICAgaWYgKGFDdG9yICE9PSBiQ3RvciAmJiAhKF8uaXNGdW5jdGlvbihhQ3RvcikgJiYgYUN0b3IgaW5zdGFuY2VvZiBhQ3RvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uaXNGdW5jdGlvbihiQ3RvcikgJiYgYkN0b3IgaW5zdGFuY2VvZiBiQ3RvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCdjb25zdHJ1Y3RvcicgaW4gYSAmJiAnY29uc3RydWN0b3InIGluIGIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQXNzdW1lIGVxdWFsaXR5IGZvciBjeWNsaWMgc3RydWN0dXJlcy4gVGhlIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5nIGN5Y2xpY1xuICAgIC8vIHN0cnVjdHVyZXMgaXMgYWRhcHRlZCBmcm9tIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMsIGFic3RyYWN0IG9wZXJhdGlvbiBgSk9gLlxuXG4gICAgLy8gSW5pdGlhbGl6aW5nIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIC8vIEl0J3MgZG9uZSBoZXJlIHNpbmNlIHdlIG9ubHkgbmVlZCB0aGVtIGZvciBvYmplY3RzIGFuZCBhcnJheXMgY29tcGFyaXNvbi5cbiAgICBhU3RhY2sgPSBhU3RhY2sgfHwgW107XG4gICAgYlN0YWNrID0gYlN0YWNrIHx8IFtdO1xuICAgIHZhciBsZW5ndGggPSBhU3RhY2subGVuZ3RoO1xuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgLy8gTGluZWFyIHNlYXJjaC4gUGVyZm9ybWFuY2UgaXMgaW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mXG4gICAgICAvLyB1bmlxdWUgbmVzdGVkIHN0cnVjdHVyZXMuXG4gICAgICBpZiAoYVN0YWNrW2xlbmd0aF0gPT09IGEpIHJldHVybiBiU3RhY2tbbGVuZ3RoXSA9PT0gYjtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhlIGZpcnN0IG9iamVjdCB0byB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnB1c2goYSk7XG4gICAgYlN0YWNrLnB1c2goYik7XG5cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgYW5kIGFycmF5cy5cbiAgICBpZiAoYXJlQXJyYXlzKSB7XG4gICAgICAvLyBDb21wYXJlIGFycmF5IGxlbmd0aHMgdG8gZGV0ZXJtaW5lIGlmIGEgZGVlcCBjb21wYXJpc29uIGlzIG5lY2Vzc2FyeS5cbiAgICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIC8vIERlZXAgY29tcGFyZSB0aGUgY29udGVudHMsIGlnbm9yaW5nIG5vbi1udW1lcmljIHByb3BlcnRpZXMuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgaWYgKCFlcShhW2xlbmd0aF0sIGJbbGVuZ3RoXSwgYVN0YWNrLCBiU3RhY2spKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZXAgY29tcGFyZSBvYmplY3RzLlxuICAgICAgdmFyIGtleXMgPSBfLmtleXMoYSksIGtleTtcbiAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgICAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMgYmVmb3JlIGNvbXBhcmluZyBkZWVwIGVxdWFsaXR5LlxuICAgICAgaWYgKF8ua2V5cyhiKS5sZW5ndGggIT09IGxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIC8vIERlZXAgY29tcGFyZSBlYWNoIG1lbWJlclxuICAgICAgICBrZXkgPSBrZXlzW2xlbmd0aF07XG4gICAgICAgIGlmICghKF8uaGFzKGIsIGtleSkgJiYgZXEoYVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrKSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBvYmplY3QgZnJvbSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnBvcCgpO1xuICAgIGJTdGFjay5wb3AoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBQZXJmb3JtIGEgZGVlcCBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHR3byBvYmplY3RzIGFyZSBlcXVhbC5cbiAgXy5pc0VxdWFsID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBlcShhLCBiKTtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIGFycmF5LCBzdHJpbmcsIG9yIG9iamVjdCBlbXB0eT9cbiAgLy8gQW4gXCJlbXB0eVwiIG9iamVjdCBoYXMgbm8gZW51bWVyYWJsZSBvd24tcHJvcGVydGllcy5cbiAgXy5pc0VtcHR5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSAmJiAoXy5pc0FycmF5KG9iaikgfHwgXy5pc1N0cmluZyhvYmopIHx8IF8uaXNBcmd1bWVudHMob2JqKSkpIHJldHVybiBvYmoubGVuZ3RoID09PSAwO1xuICAgIHJldHVybiBfLmtleXMob2JqKS5sZW5ndGggPT09IDA7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIERPTSBlbGVtZW50P1xuICBfLmlzRWxlbWVudCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiAhIShvYmogJiYgb2JqLm5vZGVUeXBlID09PSAxKTtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGFuIGFycmF5P1xuICAvLyBEZWxlZ2F0ZXMgdG8gRUNNQTUncyBuYXRpdmUgQXJyYXkuaXNBcnJheVxuICBfLmlzQXJyYXkgPSBuYXRpdmVJc0FycmF5IHx8IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBvYmplY3Q/XG4gIF8uaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7XG4gICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHNvbWUgaXNUeXBlIG1ldGhvZHM6IGlzQXJndW1lbnRzLCBpc0Z1bmN0aW9uLCBpc1N0cmluZywgaXNOdW1iZXIsIGlzRGF0ZSwgaXNSZWdFeHAsIGlzRXJyb3IuXG4gIF8uZWFjaChbJ0FyZ3VtZW50cycsICdGdW5jdGlvbicsICdTdHJpbmcnLCAnTnVtYmVyJywgJ0RhdGUnLCAnUmVnRXhwJywgJ0Vycm9yJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBfWydpcycgKyBuYW1lXSA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRGVmaW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJRSA8IDkpLCB3aGVyZVxuICAvLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgXCJBcmd1bWVudHNcIiB0eXBlLlxuICBpZiAoIV8uaXNBcmd1bWVudHMoYXJndW1lbnRzKSkge1xuICAgIF8uaXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmhhcyhvYmosICdjYWxsZWUnKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gT3B0aW1pemUgYGlzRnVuY3Rpb25gIGlmIGFwcHJvcHJpYXRlLiBXb3JrIGFyb3VuZCBzb21lIHR5cGVvZiBidWdzIGluIG9sZCB2OCxcbiAgLy8gSUUgMTEgKCMxNjIxKSwgYW5kIGluIFNhZmFyaSA4ICgjMTkyOSkuXG4gIGlmICh0eXBlb2YgLy4vICE9ICdmdW5jdGlvbicgJiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0Jykge1xuICAgIF8uaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiBvYmplY3QgYSBmaW5pdGUgbnVtYmVyP1xuICBfLmlzRmluaXRlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIGlzRmluaXRlKG9iaikgJiYgIWlzTmFOKHBhcnNlRmxvYXQob2JqKSk7XG4gIH07XG5cbiAgLy8gSXMgdGhlIGdpdmVuIHZhbHVlIGBOYU5gPyAoTmFOIGlzIHRoZSBvbmx5IG51bWJlciB3aGljaCBkb2VzIG5vdCBlcXVhbCBpdHNlbGYpLlxuICBfLmlzTmFOID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIF8uaXNOdW1iZXIob2JqKSAmJiBvYmogIT09ICtvYmo7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG4gIF8uaXNCb29sZWFuID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgZXF1YWwgdG8gbnVsbD9cbiAgXy5pc051bGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSBudWxsO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkP1xuICBfLmlzVW5kZWZpbmVkID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdm9pZCAwO1xuICB9O1xuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHlcbiAgLy8gb24gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS5cbiAgXy5oYXMgPSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbiAgfTtcblxuICAvLyBVdGlsaXR5IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFJ1biBVbmRlcnNjb3JlLmpzIGluICpub0NvbmZsaWN0KiBtb2RlLCByZXR1cm5pbmcgdGhlIGBfYCB2YXJpYWJsZSB0byBpdHNcbiAgLy8gcHJldmlvdXMgb3duZXIuIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm5vQ29uZmxpY3QgPSBmdW5jdGlvbigpIHtcbiAgICByb290Ll8gPSBwcmV2aW91c1VuZGVyc2NvcmU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gS2VlcCB0aGUgaWRlbnRpdHkgZnVuY3Rpb24gYXJvdW5kIGZvciBkZWZhdWx0IGl0ZXJhdGVlcy5cbiAgXy5pZGVudGl0eSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIC8vIFByZWRpY2F0ZS1nZW5lcmF0aW5nIGZ1bmN0aW9ucy4gT2Z0ZW4gdXNlZnVsIG91dHNpZGUgb2YgVW5kZXJzY29yZS5cbiAgXy5jb25zdGFudCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gIH07XG5cbiAgXy5ub29wID0gZnVuY3Rpb24oKXt9O1xuXG4gIF8ucHJvcGVydHkgPSBwcm9wZXJ0eTtcblxuICAvLyBHZW5lcmF0ZXMgYSBmdW5jdGlvbiBmb3IgYSBnaXZlbiBvYmplY3QgdGhhdCByZXR1cm5zIGEgZ2l2ZW4gcHJvcGVydHkuXG4gIF8ucHJvcGVydHlPZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT0gbnVsbCA/IGZ1bmN0aW9uKCl7fSA6IGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIG9ialtrZXldO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIHByZWRpY2F0ZSBmb3IgY2hlY2tpbmcgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mXG4gIC8vIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLm1hdGNoZXIgPSBfLm1hdGNoZXMgPSBmdW5jdGlvbihhdHRycykge1xuICAgIGF0dHJzID0gXy5leHRlbmRPd24oe30sIGF0dHJzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gXy5pc01hdGNoKG9iaiwgYXR0cnMpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUnVuIGEgZnVuY3Rpb24gKipuKiogdGltZXMuXG4gIF8udGltZXMgPSBmdW5jdGlvbihuLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciBhY2N1bSA9IEFycmF5KE1hdGgubWF4KDAsIG4pKTtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSBhY2N1bVtpXSA9IGl0ZXJhdGVlKGkpO1xuICAgIHJldHVybiBhY2N1bTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIG1pbiBhbmQgbWF4IChpbmNsdXNpdmUpLlxuICBfLnJhbmRvbSA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG4gICAgaWYgKG1heCA9PSBudWxsKSB7XG4gICAgICBtYXggPSBtaW47XG4gICAgICBtaW4gPSAwO1xuICAgIH1cbiAgICByZXR1cm4gbWluICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKTtcbiAgfTtcblxuICAvLyBBIChwb3NzaWJseSBmYXN0ZXIpIHdheSB0byBnZXQgdGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGFuIGludGVnZXIuXG4gIF8ubm93ID0gRGF0ZS5ub3cgfHwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICB9O1xuXG4gICAvLyBMaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5nLlxuICB2YXIgZXNjYXBlTWFwID0ge1xuICAgICcmJzogJyZhbXA7JyxcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidcIjogJyYjeDI3OycsXG4gICAgJ2AnOiAnJiN4NjA7J1xuICB9O1xuICB2YXIgdW5lc2NhcGVNYXAgPSBfLmludmVydChlc2NhcGVNYXApO1xuXG4gIC8vIEZ1bmN0aW9ucyBmb3IgZXNjYXBpbmcgYW5kIHVuZXNjYXBpbmcgc3RyaW5ncyB0by9mcm9tIEhUTUwgaW50ZXJwb2xhdGlvbi5cbiAgdmFyIGNyZWF0ZUVzY2FwZXIgPSBmdW5jdGlvbihtYXApIHtcbiAgICB2YXIgZXNjYXBlciA9IGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWFwW21hdGNoXTtcbiAgICB9O1xuICAgIC8vIFJlZ2V4ZXMgZm9yIGlkZW50aWZ5aW5nIGEga2V5IHRoYXQgbmVlZHMgdG8gYmUgZXNjYXBlZFxuICAgIHZhciBzb3VyY2UgPSAnKD86JyArIF8ua2V5cyhtYXApLmpvaW4oJ3wnKSArICcpJztcbiAgICB2YXIgdGVzdFJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UpO1xuICAgIHZhciByZXBsYWNlUmVnZXhwID0gUmVnRXhwKHNvdXJjZSwgJ2cnKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSBzdHJpbmcgPT0gbnVsbCA/ICcnIDogJycgKyBzdHJpbmc7XG4gICAgICByZXR1cm4gdGVzdFJlZ2V4cC50ZXN0KHN0cmluZykgPyBzdHJpbmcucmVwbGFjZShyZXBsYWNlUmVnZXhwLCBlc2NhcGVyKSA6IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBfLmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIoZXNjYXBlTWFwKTtcbiAgXy51bmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIodW5lc2NhcGVNYXApO1xuXG4gIC8vIElmIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgYHByb3BlcnR5YCBpcyBhIGZ1bmN0aW9uIHRoZW4gaW52b2tlIGl0IHdpdGggdGhlXG4gIC8vIGBvYmplY3RgIGFzIGNvbnRleHQ7IG90aGVyd2lzZSwgcmV0dXJuIGl0LlxuICBfLnJlc3VsdCA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHksIGZhbGxiYWNrKSB7XG4gICAgdmFyIHZhbHVlID0gb2JqZWN0ID09IG51bGwgPyB2b2lkIDAgOiBvYmplY3RbcHJvcGVydHldO1xuICAgIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICB2YWx1ZSA9IGZhbGxiYWNrO1xuICAgIH1cbiAgICByZXR1cm4gXy5pc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlLmNhbGwob2JqZWN0KSA6IHZhbHVlO1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4gIC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuXG4gIHZhciBpZENvdW50ZXIgPSAwO1xuICBfLnVuaXF1ZUlkID0gZnVuY3Rpb24ocHJlZml4KSB7XG4gICAgdmFyIGlkID0gKytpZENvdW50ZXIgKyAnJztcbiAgICByZXR1cm4gcHJlZml4ID8gcHJlZml4ICsgaWQgOiBpZDtcbiAgfTtcblxuICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGVcbiAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG4gICAgZXZhbHVhdGUgICAgOiAvPCUoW1xcc1xcU10rPyklPi9nLFxuICAgIGludGVycG9sYXRlIDogLzwlPShbXFxzXFxTXSs/KSU+L2csXG4gICAgZXNjYXBlICAgICAgOiAvPCUtKFtcXHNcXFNdKz8pJT4vZ1xuICB9O1xuXG4gIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW5cbiAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpc1xuICAvLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC5cbiAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87XG5cbiAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGFcbiAgLy8gc3RyaW5nIGxpdGVyYWwuXG4gIHZhciBlc2NhcGVzID0ge1xuICAgIFwiJ1wiOiAgICAgIFwiJ1wiLFxuICAgICdcXFxcJzogICAgICdcXFxcJyxcbiAgICAnXFxyJzogICAgICdyJyxcbiAgICAnXFxuJzogICAgICduJyxcbiAgICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICAgJ1xcdTIwMjknOiAndTIwMjknXG4gIH07XG5cbiAgdmFyIGVzY2FwZXIgPSAvXFxcXHwnfFxccnxcXG58XFx1MjAyOHxcXHUyMDI5L2c7XG5cbiAgdmFyIGVzY2FwZUNoYXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiAnXFxcXCcgKyBlc2NhcGVzW21hdGNoXTtcbiAgfTtcblxuICAvLyBKYXZhU2NyaXB0IG1pY3JvLXRlbXBsYXRpbmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9uLlxuICAvLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdoaXRlc3BhY2UsXG4gIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGludGVycG9sYXRlZCBjb2RlLlxuICAvLyBOQjogYG9sZFNldHRpbmdzYCBvbmx5IGV4aXN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gIF8udGVtcGxhdGUgPSBmdW5jdGlvbih0ZXh0LCBzZXR0aW5ncywgb2xkU2V0dGluZ3MpIHtcbiAgICBpZiAoIXNldHRpbmdzICYmIG9sZFNldHRpbmdzKSBzZXR0aW5ncyA9IG9sZFNldHRpbmdzO1xuICAgIHNldHRpbmdzID0gXy5kZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7XG5cbiAgICAvLyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi5cbiAgICB2YXIgbWF0Y2hlciA9IFJlZ0V4cChbXG4gICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlXG4gICAgXS5qb2luKCd8JykgKyAnfCQnLCAnZycpO1xuXG4gICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS5cbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBzb3VyY2UgPSBcIl9fcCs9J1wiO1xuICAgIHRleHQucmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkge1xuICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShlc2NhcGVyLCBlc2NhcGVDaGFyKTtcbiAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChldmFsdWF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGUgKyBcIlxcbl9fcCs9J1wiO1xuICAgICAgfVxuXG4gICAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZlc3QuXG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSk7XG4gICAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcblxuICAgIHNvdXJjZSA9IFwidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICAgIFwicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4gICAgICBzb3VyY2UgKyAncmV0dXJuIF9fcDtcXG4nO1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciByZW5kZXIgPSBuZXcgRnVuY3Rpb24oc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicsICdfJywgc291cmNlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pO1xuICAgIH07XG5cbiAgICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3IgcHJlY29tcGlsYXRpb24uXG4gICAgdmFyIGFyZ3VtZW50ID0gc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaic7XG4gICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyBhcmd1bWVudCArICcpe1xcbicgKyBzb3VyY2UgKyAnfSc7XG5cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH07XG5cbiAgLy8gQWRkIGEgXCJjaGFpblwiIGZ1bmN0aW9uLiBTdGFydCBjaGFpbmluZyBhIHdyYXBwZWQgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8uY2hhaW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBfKG9iaik7XG4gICAgaW5zdGFuY2UuX2NoYWluID0gdHJ1ZTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG5cbiAgLy8gT09QXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuICAvLyBJZiBVbmRlcnNjb3JlIGlzIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBpdCByZXR1cm5zIGEgd3JhcHBlZCBvYmplY3QgdGhhdFxuICAvLyBjYW4gYmUgdXNlZCBPTy1zdHlsZS4gVGhpcyB3cmFwcGVyIGhvbGRzIGFsdGVyZWQgdmVyc2lvbnMgb2YgYWxsIHRoZVxuICAvLyB1bmRlcnNjb3JlIGZ1bmN0aW9ucy4gV3JhcHBlZCBvYmplY3RzIG1heSBiZSBjaGFpbmVkLlxuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjb250aW51ZSBjaGFpbmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy5cbiAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uKGluc3RhbmNlLCBvYmopIHtcbiAgICByZXR1cm4gaW5zdGFuY2UuX2NoYWluID8gXyhvYmopLmNoYWluKCkgOiBvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm1peGluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXy5lYWNoKF8uZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTtcbiAgICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAgICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiByZXN1bHQodGhpcywgZnVuYy5hcHBseShfLCBhcmdzKSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIEFkZCBhbGwgb2YgdGhlIFVuZGVyc2NvcmUgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyIG9iamVjdC5cbiAgXy5taXhpbihfKTtcblxuICAvLyBBZGQgYWxsIG11dGF0b3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuICBfLmVhY2goWydwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDtcbiAgICAgIG1ldGhvZC5hcHBseShvYmosIGFyZ3VtZW50cyk7XG4gICAgICBpZiAoKG5hbWUgPT09ICdzaGlmdCcgfHwgbmFtZSA9PT0gJ3NwbGljZScpICYmIG9iai5sZW5ndGggPT09IDApIGRlbGV0ZSBvYmpbMF07XG4gICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIG9iaik7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gQWRkIGFsbCBhY2Nlc3NvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBtZXRob2QuYXBwbHkodGhpcy5fd3JhcHBlZCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRXh0cmFjdHMgdGhlIHJlc3VsdCBmcm9tIGEgd3JhcHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuXG4gIF8ucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gUHJvdmlkZSB1bndyYXBwaW5nIHByb3h5IGZvciBzb21lIG1ldGhvZHMgdXNlZCBpbiBlbmdpbmUgb3BlcmF0aW9uc1xuICAvLyBzdWNoIGFzIGFyaXRobWV0aWMgYW5kIEpTT04gc3RyaW5naWZpY2F0aW9uLlxuICBfLnByb3RvdHlwZS52YWx1ZU9mID0gXy5wcm90b3R5cGUudG9KU09OID0gXy5wcm90b3R5cGUudmFsdWU7XG5cbiAgXy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJycgKyB0aGlzLl93cmFwcGVkO1xuICB9O1xuXG4gIC8vIEFNRCByZWdpc3RyYXRpb24gaGFwcGVucyBhdCB0aGUgZW5kIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQU1EIGxvYWRlcnNcbiAgLy8gdGhhdCBtYXkgbm90IGVuZm9yY2UgbmV4dC10dXJuIHNlbWFudGljcyBvbiBtb2R1bGVzLiBFdmVuIHRob3VnaCBnZW5lcmFsXG4gIC8vIHByYWN0aWNlIGZvciBBTUQgcmVnaXN0cmF0aW9uIGlzIHRvIGJlIGFub255bW91cywgdW5kZXJzY29yZSByZWdpc3RlcnNcbiAgLy8gYXMgYSBuYW1lZCBtb2R1bGUgYmVjYXVzZSwgbGlrZSBqUXVlcnksIGl0IGlzIGEgYmFzZSBsaWJyYXJ5IHRoYXQgaXNcbiAgLy8gcG9wdWxhciBlbm91Z2ggdG8gYmUgYnVuZGxlZCBpbiBhIHRoaXJkIHBhcnR5IGxpYiwgYnV0IG5vdCBiZSBwYXJ0IG9mXG4gIC8vIGFuIEFNRCBsb2FkIHJlcXVlc3QuIFRob3NlIGNhc2VzIGNvdWxkIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gYW5cbiAgLy8gYW5vbnltb3VzIGRlZmluZSgpIGlzIGNhbGxlZCBvdXRzaWRlIG9mIGEgbG9hZGVyIHJlcXVlc3QuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoJ3VuZGVyc2NvcmUnLCBbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXztcbiAgICB9KTtcbiAgfVxufS5jYWxsKHRoaXMpKTtcbiIsIi8vICAgICBCYWNrYm9uZS5qcyAxLjEuMFxuXG4vLyAgICAgKGMpIDIwMTAtMjAxMSBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgSW5jLlxuLy8gICAgIChjKSAyMDExLTIwMTMgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbi8vICAgICBCYWNrYm9uZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbi8vICAgICBGb3IgYWxsIGRldGFpbHMgYW5kIGRvY3VtZW50YXRpb246XG4vLyAgICAgaHR0cDovL2JhY2tib25lanMub3JnXG5cbihmdW5jdGlvbigpe1xuXG4gIC8vIEluaXRpYWwgU2V0dXBcbiAgLy8gLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFNhdmUgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QgKGB3aW5kb3dgIGluIHRoZSBicm93c2VyLCBgZXhwb3J0c2BcbiAgLy8gb24gdGhlIHNlcnZlcikuXG4gIHZhciByb290ID0gdGhpcztcblxuICAvLyBTYXZlIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgYEJhY2tib25lYCB2YXJpYWJsZSwgc28gdGhhdCBpdCBjYW4gYmVcbiAgLy8gcmVzdG9yZWQgbGF0ZXIgb24sIGlmIGBub0NvbmZsaWN0YCBpcyB1c2VkLlxuICB2YXIgcHJldmlvdXNCYWNrYm9uZSA9IHJvb3QuQmFja2JvbmU7XG5cbiAgLy8gQ3JlYXRlIGxvY2FsIHJlZmVyZW5jZXMgdG8gYXJyYXkgbWV0aG9kcyB3ZSdsbCB3YW50IHRvIHVzZSBsYXRlci5cbiAgdmFyIGFycmF5ID0gW107XG4gIHZhciBwdXNoID0gYXJyYXkucHVzaDtcbiAgdmFyIHNsaWNlID0gYXJyYXkuc2xpY2U7XG4gIHZhciBzcGxpY2UgPSBhcnJheS5zcGxpY2U7XG5cbiAgLy8gVGhlIHRvcC1sZXZlbCBuYW1lc3BhY2UuIEFsbCBwdWJsaWMgQmFja2JvbmUgY2xhc3NlcyBhbmQgbW9kdWxlcyB3aWxsXG4gIC8vIGJlIGF0dGFjaGVkIHRvIHRoaXMuIEV4cG9ydGVkIGZvciBib3RoIHRoZSBicm93c2VyIGFuZCB0aGUgc2VydmVyLlxuICB2YXIgQmFja2JvbmU7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBCYWNrYm9uZSA9IGV4cG9ydHM7XG4gIH0gZWxzZSB7XG4gICAgQmFja2JvbmUgPSByb290LkJhY2tib25lID0ge307XG4gIH1cblxuICAvLyBDdXJyZW50IHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuIEtlZXAgaW4gc3luYyB3aXRoIGBwYWNrYWdlLmpzb25gLlxuICBCYWNrYm9uZS5WRVJTSU9OID0gJzEuMS4wJztcblxuICAvLyBSZXF1aXJlIFVuZGVyc2NvcmUsIGlmIHdlJ3JlIG9uIHRoZSBzZXJ2ZXIsIGFuZCBpdCdzIG5vdCBhbHJlYWR5IHByZXNlbnQuXG4gIHZhciBfID0gcm9vdC5fO1xuICBpZiAoIV8gJiYgKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJykpIF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG5cbiAgLy8gRm9yIEJhY2tib25lJ3MgcHVycG9zZXMsIGpRdWVyeSwgWmVwdG8sIEVuZGVyLCBvciBNeSBMaWJyYXJ5IChraWRkaW5nKSBvd25zXG4gIC8vIHRoZSBgJGAgdmFyaWFibGUuXG4gIEJhY2tib25lLiQgPSByb290LmpRdWVyeSB8fCByb290LlplcHRvIHx8IHJvb3QuZW5kZXIgfHwgcm9vdC4kO1xuXG4gIC8vIFJ1bnMgQmFja2JvbmUuanMgaW4gKm5vQ29uZmxpY3QqIG1vZGUsIHJldHVybmluZyB0aGUgYEJhY2tib25lYCB2YXJpYWJsZVxuICAvLyB0byBpdHMgcHJldmlvdXMgb3duZXIuIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhpcyBCYWNrYm9uZSBvYmplY3QuXG4gIEJhY2tib25lLm5vQ29uZmxpY3QgPSBmdW5jdGlvbigpIHtcbiAgICByb290LkJhY2tib25lID0gcHJldmlvdXNCYWNrYm9uZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBUdXJuIG9uIGBlbXVsYXRlSFRUUGAgdG8gc3VwcG9ydCBsZWdhY3kgSFRUUCBzZXJ2ZXJzLiBTZXR0aW5nIHRoaXMgb3B0aW9uXG4gIC8vIHdpbGwgZmFrZSBgXCJQQVRDSFwiYCwgYFwiUFVUXCJgIGFuZCBgXCJERUxFVEVcImAgcmVxdWVzdHMgdmlhIHRoZSBgX21ldGhvZGAgcGFyYW1ldGVyIGFuZFxuICAvLyBzZXQgYSBgWC1IdHRwLU1ldGhvZC1PdmVycmlkZWAgaGVhZGVyLlxuICBCYWNrYm9uZS5lbXVsYXRlSFRUUCA9IGZhbHNlO1xuXG4gIC8vIFR1cm4gb24gYGVtdWxhdGVKU09OYCB0byBzdXBwb3J0IGxlZ2FjeSBzZXJ2ZXJzIHRoYXQgY2FuJ3QgZGVhbCB3aXRoIGRpcmVjdFxuICAvLyBgYXBwbGljYXRpb24vanNvbmAgcmVxdWVzdHMgLi4uIHdpbGwgZW5jb2RlIHRoZSBib2R5IGFzXG4gIC8vIGBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRgIGluc3RlYWQgYW5kIHdpbGwgc2VuZCB0aGUgbW9kZWwgaW4gYVxuICAvLyBmb3JtIHBhcmFtIG5hbWVkIGBtb2RlbGAuXG4gIEJhY2tib25lLmVtdWxhdGVKU09OID0gZmFsc2U7XG5cbiAgLy8gQmFja2JvbmUuRXZlbnRzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEEgbW9kdWxlIHRoYXQgY2FuIGJlIG1peGVkIGluIHRvICphbnkgb2JqZWN0KiBpbiBvcmRlciB0byBwcm92aWRlIGl0IHdpdGhcbiAgLy8gY3VzdG9tIGV2ZW50cy4gWW91IG1heSBiaW5kIHdpdGggYG9uYCBvciByZW1vdmUgd2l0aCBgb2ZmYCBjYWxsYmFja1xuICAvLyBmdW5jdGlvbnMgdG8gYW4gZXZlbnQ7IGB0cmlnZ2VyYC1pbmcgYW4gZXZlbnQgZmlyZXMgYWxsIGNhbGxiYWNrcyBpblxuICAvLyBzdWNjZXNzaW9uLlxuICAvL1xuICAvLyAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAvLyAgICAgXy5leHRlbmQob2JqZWN0LCBCYWNrYm9uZS5FdmVudHMpO1xuICAvLyAgICAgb2JqZWN0Lm9uKCdleHBhbmQnLCBmdW5jdGlvbigpeyBhbGVydCgnZXhwYW5kZWQnKTsgfSk7XG4gIC8vICAgICBvYmplY3QudHJpZ2dlcignZXhwYW5kJyk7XG4gIC8vXG4gIHZhciBFdmVudHMgPSBCYWNrYm9uZS5FdmVudHMgPSB7XG5cbiAgICAvLyBCaW5kIGFuIGV2ZW50IHRvIGEgYGNhbGxiYWNrYCBmdW5jdGlvbi4gUGFzc2luZyBgXCJhbGxcImAgd2lsbCBiaW5kXG4gICAgLy8gdGhlIGNhbGxiYWNrIHRvIGFsbCBldmVudHMgZmlyZWQuXG4gICAgb246IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gICAgICBpZiAoIWV2ZW50c0FwaSh0aGlzLCAnb24nLCBuYW1lLCBbY2FsbGJhY2ssIGNvbnRleHRdKSB8fCAhY2FsbGJhY2spIHJldHVybiB0aGlzO1xuICAgICAgdGhpcy5fZXZlbnRzIHx8ICh0aGlzLl9ldmVudHMgPSB7fSk7XG4gICAgICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzW25hbWVdIHx8ICh0aGlzLl9ldmVudHNbbmFtZV0gPSBbXSk7XG4gICAgICBldmVudHMucHVzaCh7Y2FsbGJhY2s6IGNhbGxiYWNrLCBjb250ZXh0OiBjb250ZXh0LCBjdHg6IGNvbnRleHQgfHwgdGhpc30pO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8vIEJpbmQgYW4gZXZlbnQgdG8gb25seSBiZSB0cmlnZ2VyZWQgYSBzaW5nbGUgdGltZS4gQWZ0ZXIgdGhlIGZpcnN0IHRpbWVcbiAgICAvLyB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZCwgaXQgd2lsbCBiZSByZW1vdmVkLlxuICAgIG9uY2U6IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gICAgICBpZiAoIWV2ZW50c0FwaSh0aGlzLCAnb25jZScsIG5hbWUsIFtjYWxsYmFjaywgY29udGV4dF0pIHx8ICFjYWxsYmFjaykgcmV0dXJuIHRoaXM7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB2YXIgb25jZSA9IF8ub25jZShmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5vZmYobmFtZSwgb25jZSk7XG4gICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9KTtcbiAgICAgIG9uY2UuX2NhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICByZXR1cm4gdGhpcy5vbihuYW1lLCBvbmNlLCBjb250ZXh0KTtcbiAgICB9LFxuXG4gICAgLy8gUmVtb3ZlIG9uZSBvciBtYW55IGNhbGxiYWNrcy4gSWYgYGNvbnRleHRgIGlzIG51bGwsIHJlbW92ZXMgYWxsXG4gICAgLy8gY2FsbGJhY2tzIHdpdGggdGhhdCBmdW5jdGlvbi4gSWYgYGNhbGxiYWNrYCBpcyBudWxsLCByZW1vdmVzIGFsbFxuICAgIC8vIGNhbGxiYWNrcyBmb3IgdGhlIGV2ZW50LiBJZiBgbmFtZWAgaXMgbnVsbCwgcmVtb3ZlcyBhbGwgYm91bmRcbiAgICAvLyBjYWxsYmFja3MgZm9yIGFsbCBldmVudHMuXG4gICAgb2ZmOiBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaywgY29udGV4dCkge1xuICAgICAgdmFyIHJldGFpbiwgZXYsIGV2ZW50cywgbmFtZXMsIGksIGwsIGosIGs7XG4gICAgICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhZXZlbnRzQXBpKHRoaXMsICdvZmYnLCBuYW1lLCBbY2FsbGJhY2ssIGNvbnRleHRdKSkgcmV0dXJuIHRoaXM7XG4gICAgICBpZiAoIW5hbWUgJiYgIWNhbGxiYWNrICYmICFjb250ZXh0KSB7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIG5hbWVzID0gbmFtZSA/IFtuYW1lXSA6IF8ua2V5cyh0aGlzLl9ldmVudHMpO1xuICAgICAgZm9yIChpID0gMCwgbCA9IG5hbWVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBuYW1lID0gbmFtZXNbaV07XG4gICAgICAgIGlmIChldmVudHMgPSB0aGlzLl9ldmVudHNbbmFtZV0pIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHNbbmFtZV0gPSByZXRhaW4gPSBbXTtcbiAgICAgICAgICBpZiAoY2FsbGJhY2sgfHwgY29udGV4dCkge1xuICAgICAgICAgICAgZm9yIChqID0gMCwgayA9IGV2ZW50cy5sZW5ndGg7IGogPCBrOyBqKyspIHtcbiAgICAgICAgICAgICAgZXYgPSBldmVudHNbal07XG4gICAgICAgICAgICAgIGlmICgoY2FsbGJhY2sgJiYgY2FsbGJhY2sgIT09IGV2LmNhbGxiYWNrICYmIGNhbGxiYWNrICE9PSBldi5jYWxsYmFjay5fY2FsbGJhY2spIHx8XG4gICAgICAgICAgICAgICAgICAoY29udGV4dCAmJiBjb250ZXh0ICE9PSBldi5jb250ZXh0KSkge1xuICAgICAgICAgICAgICAgIHJldGFpbi5wdXNoKGV2KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXJldGFpbi5sZW5ndGgpIGRlbGV0ZSB0aGlzLl9ldmVudHNbbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8vIFRyaWdnZXIgb25lIG9yIG1hbnkgZXZlbnRzLCBmaXJpbmcgYWxsIGJvdW5kIGNhbGxiYWNrcy4gQ2FsbGJhY2tzIGFyZVxuICAgIC8vIHBhc3NlZCB0aGUgc2FtZSBhcmd1bWVudHMgYXMgYHRyaWdnZXJgIGlzLCBhcGFydCBmcm9tIHRoZSBldmVudCBuYW1lXG4gICAgLy8gKHVubGVzcyB5b3UncmUgbGlzdGVuaW5nIG9uIGBcImFsbFwiYCwgd2hpY2ggd2lsbCBjYXVzZSB5b3VyIGNhbGxiYWNrIHRvXG4gICAgLy8gcmVjZWl2ZSB0aGUgdHJ1ZSBuYW1lIG9mIHRoZSBldmVudCBhcyB0aGUgZmlyc3QgYXJndW1lbnQpLlxuICAgIHRyaWdnZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcbiAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgaWYgKCFldmVudHNBcGkodGhpcywgJ3RyaWdnZXInLCBuYW1lLCBhcmdzKSkgcmV0dXJuIHRoaXM7XG4gICAgICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzW25hbWVdO1xuICAgICAgdmFyIGFsbEV2ZW50cyA9IHRoaXMuX2V2ZW50cy5hbGw7XG4gICAgICBpZiAoZXZlbnRzKSB0cmlnZ2VyRXZlbnRzKGV2ZW50cywgYXJncyk7XG4gICAgICBpZiAoYWxsRXZlbnRzKSB0cmlnZ2VyRXZlbnRzKGFsbEV2ZW50cywgYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBUZWxsIHRoaXMgb2JqZWN0IHRvIHN0b3AgbGlzdGVuaW5nIHRvIGVpdGhlciBzcGVjaWZpYyBldmVudHMgLi4uIG9yXG4gICAgLy8gdG8gZXZlcnkgb2JqZWN0IGl0J3MgY3VycmVudGx5IGxpc3RlbmluZyB0by5cbiAgICBzdG9wTGlzdGVuaW5nOiBmdW5jdGlvbihvYmosIG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgbGlzdGVuaW5nVG8gPSB0aGlzLl9saXN0ZW5pbmdUbztcbiAgICAgIGlmICghbGlzdGVuaW5nVG8pIHJldHVybiB0aGlzO1xuICAgICAgdmFyIHJlbW92ZSA9ICFuYW1lICYmICFjYWxsYmFjaztcbiAgICAgIGlmICghY2FsbGJhY2sgJiYgdHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSBjYWxsYmFjayA9IHRoaXM7XG4gICAgICBpZiAob2JqKSAobGlzdGVuaW5nVG8gPSB7fSlbb2JqLl9saXN0ZW5JZF0gPSBvYmo7XG4gICAgICBmb3IgKHZhciBpZCBpbiBsaXN0ZW5pbmdUbykge1xuICAgICAgICBvYmogPSBsaXN0ZW5pbmdUb1tpZF07XG4gICAgICAgIG9iai5vZmYobmFtZSwgY2FsbGJhY2ssIHRoaXMpO1xuICAgICAgICBpZiAocmVtb3ZlIHx8IF8uaXNFbXB0eShvYmouX2V2ZW50cykpIGRlbGV0ZSB0aGlzLl9saXN0ZW5pbmdUb1tpZF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgfTtcblxuICAvLyBSZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0byBzcGxpdCBldmVudCBzdHJpbmdzLlxuICB2YXIgZXZlbnRTcGxpdHRlciA9IC9cXHMrLztcblxuICAvLyBJbXBsZW1lbnQgZmFuY3kgZmVhdHVyZXMgb2YgdGhlIEV2ZW50cyBBUEkgc3VjaCBhcyBtdWx0aXBsZSBldmVudFxuICAvLyBuYW1lcyBgXCJjaGFuZ2UgYmx1clwiYCBhbmQgalF1ZXJ5LXN0eWxlIGV2ZW50IG1hcHMgYHtjaGFuZ2U6IGFjdGlvbn1gXG4gIC8vIGluIHRlcm1zIG9mIHRoZSBleGlzdGluZyBBUEkuXG4gIHZhciBldmVudHNBcGkgPSBmdW5jdGlvbihvYmosIGFjdGlvbiwgbmFtZSwgcmVzdCkge1xuICAgIGlmICghbmFtZSkgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBIYW5kbGUgZXZlbnQgbWFwcy5cbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gbmFtZSkge1xuICAgICAgICBvYmpbYWN0aW9uXS5hcHBseShvYmosIFtrZXksIG5hbWVba2V5XV0uY29uY2F0KHJlc3QpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgc3BhY2Ugc2VwYXJhdGVkIGV2ZW50IG5hbWVzLlxuICAgIGlmIChldmVudFNwbGl0dGVyLnRlc3QobmFtZSkpIHtcbiAgICAgIHZhciBuYW1lcyA9IG5hbWUuc3BsaXQoZXZlbnRTcGxpdHRlcik7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG5hbWVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBvYmpbYWN0aW9uXS5hcHBseShvYmosIFtuYW1lc1tpXV0uY29uY2F0KHJlc3QpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBBIGRpZmZpY3VsdC10by1iZWxpZXZlLCBidXQgb3B0aW1pemVkIGludGVybmFsIGRpc3BhdGNoIGZ1bmN0aW9uIGZvclxuICAvLyB0cmlnZ2VyaW5nIGV2ZW50cy4gVHJpZXMgdG8ga2VlcCB0aGUgdXN1YWwgY2FzZXMgc3BlZWR5IChtb3N0IGludGVybmFsXG4gIC8vIEJhY2tib25lIGV2ZW50cyBoYXZlIDMgYXJndW1lbnRzKS5cbiAgdmFyIHRyaWdnZXJFdmVudHMgPSBmdW5jdGlvbihldmVudHMsIGFyZ3MpIHtcbiAgICB2YXIgZXYsIGkgPSAtMSwgbCA9IGV2ZW50cy5sZW5ndGgsIGExID0gYXJnc1swXSwgYTIgPSBhcmdzWzFdLCBhMyA9IGFyZ3NbMl07XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOiB3aGlsZSAoKytpIDwgbCkgKGV2ID0gZXZlbnRzW2ldKS5jYWxsYmFjay5jYWxsKGV2LmN0eCk7IHJldHVybjtcbiAgICAgIGNhc2UgMTogd2hpbGUgKCsraSA8IGwpIChldiA9IGV2ZW50c1tpXSkuY2FsbGJhY2suY2FsbChldi5jdHgsIGExKTsgcmV0dXJuO1xuICAgICAgY2FzZSAyOiB3aGlsZSAoKytpIDwgbCkgKGV2ID0gZXZlbnRzW2ldKS5jYWxsYmFjay5jYWxsKGV2LmN0eCwgYTEsIGEyKTsgcmV0dXJuO1xuICAgICAgY2FzZSAzOiB3aGlsZSAoKytpIDwgbCkgKGV2ID0gZXZlbnRzW2ldKS5jYWxsYmFjay5jYWxsKGV2LmN0eCwgYTEsIGEyLCBhMyk7IHJldHVybjtcbiAgICAgIGRlZmF1bHQ6IHdoaWxlICgrK2kgPCBsKSAoZXYgPSBldmVudHNbaV0pLmNhbGxiYWNrLmFwcGx5KGV2LmN0eCwgYXJncyk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBsaXN0ZW5NZXRob2RzID0ge2xpc3RlblRvOiAnb24nLCBsaXN0ZW5Ub09uY2U6ICdvbmNlJ307XG5cbiAgLy8gSW52ZXJzaW9uLW9mLWNvbnRyb2wgdmVyc2lvbnMgb2YgYG9uYCBhbmQgYG9uY2VgLiBUZWxsICp0aGlzKiBvYmplY3QgdG9cbiAgLy8gbGlzdGVuIHRvIGFuIGV2ZW50IGluIGFub3RoZXIgb2JqZWN0IC4uLiBrZWVwaW5nIHRyYWNrIG9mIHdoYXQgaXQnc1xuICAvLyBsaXN0ZW5pbmcgdG8uXG4gIF8uZWFjaChsaXN0ZW5NZXRob2RzLCBmdW5jdGlvbihpbXBsZW1lbnRhdGlvbiwgbWV0aG9kKSB7XG4gICAgRXZlbnRzW21ldGhvZF0gPSBmdW5jdGlvbihvYmosIG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgbGlzdGVuaW5nVG8gPSB0aGlzLl9saXN0ZW5pbmdUbyB8fCAodGhpcy5fbGlzdGVuaW5nVG8gPSB7fSk7XG4gICAgICB2YXIgaWQgPSBvYmouX2xpc3RlbklkIHx8IChvYmouX2xpc3RlbklkID0gXy51bmlxdWVJZCgnbCcpKTtcbiAgICAgIGxpc3RlbmluZ1RvW2lkXSA9IG9iajtcbiAgICAgIGlmICghY2FsbGJhY2sgJiYgdHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSBjYWxsYmFjayA9IHRoaXM7XG4gICAgICBvYmpbaW1wbGVtZW50YXRpb25dKG5hbWUsIGNhbGxiYWNrLCB0aGlzKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIEFsaWFzZXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICBFdmVudHMuYmluZCAgID0gRXZlbnRzLm9uO1xuICBFdmVudHMudW5iaW5kID0gRXZlbnRzLm9mZjtcblxuICAvLyBBbGxvdyB0aGUgYEJhY2tib25lYCBvYmplY3QgdG8gc2VydmUgYXMgYSBnbG9iYWwgZXZlbnQgYnVzLCBmb3IgZm9sa3Mgd2hvXG4gIC8vIHdhbnQgZ2xvYmFsIFwicHVic3ViXCIgaW4gYSBjb252ZW5pZW50IHBsYWNlLlxuICBfLmV4dGVuZChCYWNrYm9uZSwgRXZlbnRzKTtcblxuICAvLyBCYWNrYm9uZS5Nb2RlbFxuICAvLyAtLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEJhY2tib25lICoqTW9kZWxzKiogYXJlIHRoZSBiYXNpYyBkYXRhIG9iamVjdCBpbiB0aGUgZnJhbWV3b3JrIC0tXG4gIC8vIGZyZXF1ZW50bHkgcmVwcmVzZW50aW5nIGEgcm93IGluIGEgdGFibGUgaW4gYSBkYXRhYmFzZSBvbiB5b3VyIHNlcnZlci5cbiAgLy8gQSBkaXNjcmV0ZSBjaHVuayBvZiBkYXRhIGFuZCBhIGJ1bmNoIG9mIHVzZWZ1bCwgcmVsYXRlZCBtZXRob2RzIGZvclxuICAvLyBwZXJmb3JtaW5nIGNvbXB1dGF0aW9ucyBhbmQgdHJhbnNmb3JtYXRpb25zIG9uIHRoYXQgZGF0YS5cblxuICAvLyBDcmVhdGUgYSBuZXcgbW9kZWwgd2l0aCB0aGUgc3BlY2lmaWVkIGF0dHJpYnV0ZXMuIEEgY2xpZW50IGlkIChgY2lkYClcbiAgLy8gaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYW5kIGFzc2lnbmVkIGZvciB5b3UuXG4gIHZhciBNb2RlbCA9IEJhY2tib25lLk1vZGVsID0gZnVuY3Rpb24oYXR0cmlidXRlcywgb3B0aW9ucykge1xuICAgIHZhciBhdHRycyA9IGF0dHJpYnV0ZXMgfHwge307XG4gICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcbiAgICB0aGlzLmNpZCA9IF8udW5pcXVlSWQoJ2MnKTtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSB7fTtcbiAgICBpZiAob3B0aW9ucy5jb2xsZWN0aW9uKSB0aGlzLmNvbGxlY3Rpb24gPSBvcHRpb25zLmNvbGxlY3Rpb247XG4gICAgaWYgKG9wdGlvbnMucGFyc2UpIGF0dHJzID0gdGhpcy5wYXJzZShhdHRycywgb3B0aW9ucykgfHwge307XG4gICAgYXR0cnMgPSBfLmRlZmF1bHRzKHt9LCBhdHRycywgXy5yZXN1bHQodGhpcywgJ2RlZmF1bHRzJykpO1xuICAgIHRoaXMuc2V0KGF0dHJzLCBvcHRpb25zKTtcbiAgICB0aGlzLmNoYW5nZWQgPSB7fTtcbiAgICB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcblxuICAvLyBBdHRhY2ggYWxsIGluaGVyaXRhYmxlIG1ldGhvZHMgdG8gdGhlIE1vZGVsIHByb3RvdHlwZS5cbiAgXy5leHRlbmQoTW9kZWwucHJvdG90eXBlLCBFdmVudHMsIHtcblxuICAgIC8vIEEgaGFzaCBvZiBhdHRyaWJ1dGVzIHdob3NlIGN1cnJlbnQgYW5kIHByZXZpb3VzIHZhbHVlIGRpZmZlci5cbiAgICBjaGFuZ2VkOiBudWxsLFxuXG4gICAgLy8gVGhlIHZhbHVlIHJldHVybmVkIGR1cmluZyB0aGUgbGFzdCBmYWlsZWQgdmFsaWRhdGlvbi5cbiAgICB2YWxpZGF0aW9uRXJyb3I6IG51bGwsXG5cbiAgICAvLyBUaGUgZGVmYXVsdCBuYW1lIGZvciB0aGUgSlNPTiBgaWRgIGF0dHJpYnV0ZSBpcyBgXCJpZFwiYC4gTW9uZ29EQiBhbmRcbiAgICAvLyBDb3VjaERCIHVzZXJzIG1heSB3YW50IHRvIHNldCB0aGlzIHRvIGBcIl9pZFwiYC5cbiAgICBpZEF0dHJpYnV0ZTogJ2lkJyxcblxuICAgIC8vIEluaXRpYWxpemUgaXMgYW4gZW1wdHkgZnVuY3Rpb24gYnkgZGVmYXVsdC4gT3ZlcnJpZGUgaXQgd2l0aCB5b3VyIG93blxuICAgIC8vIGluaXRpYWxpemF0aW9uIGxvZ2ljLlxuICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCl7fSxcblxuICAgIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG1vZGVsJ3MgYGF0dHJpYnV0ZXNgIG9iamVjdC5cbiAgICB0b0pTT046IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBfLmNsb25lKHRoaXMuYXR0cmlidXRlcyk7XG4gICAgfSxcblxuICAgIC8vIFByb3h5IGBCYWNrYm9uZS5zeW5jYCBieSBkZWZhdWx0IC0tIGJ1dCBvdmVycmlkZSB0aGlzIGlmIHlvdSBuZWVkXG4gICAgLy8gY3VzdG9tIHN5bmNpbmcgc2VtYW50aWNzIGZvciAqdGhpcyogcGFydGljdWxhciBtb2RlbC5cbiAgICBzeW5jOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBCYWNrYm9uZS5zeW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfSxcblxuICAgIC8vIEdldCB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlLlxuICAgIGdldDogZnVuY3Rpb24oYXR0cikge1xuICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlc1thdHRyXTtcbiAgICB9LFxuXG4gICAgLy8gR2V0IHRoZSBIVE1MLWVzY2FwZWQgdmFsdWUgb2YgYW4gYXR0cmlidXRlLlxuICAgIGVzY2FwZTogZnVuY3Rpb24oYXR0cikge1xuICAgICAgcmV0dXJuIF8uZXNjYXBlKHRoaXMuZ2V0KGF0dHIpKTtcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGF0dHJpYnV0ZSBjb250YWlucyBhIHZhbHVlIHRoYXQgaXMgbm90IG51bGxcbiAgICAvLyBvciB1bmRlZmluZWQuXG4gICAgaGFzOiBmdW5jdGlvbihhdHRyKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXQoYXR0cikgIT0gbnVsbDtcbiAgICB9LFxuXG4gICAgLy8gU2V0IGEgaGFzaCBvZiBtb2RlbCBhdHRyaWJ1dGVzIG9uIHRoZSBvYmplY3QsIGZpcmluZyBgXCJjaGFuZ2VcImAuIFRoaXMgaXNcbiAgICAvLyB0aGUgY29yZSBwcmltaXRpdmUgb3BlcmF0aW9uIG9mIGEgbW9kZWwsIHVwZGF0aW5nIHRoZSBkYXRhIGFuZCBub3RpZnlpbmdcbiAgICAvLyBhbnlvbmUgd2hvIG5lZWRzIHRvIGtub3cgYWJvdXQgdGhlIGNoYW5nZSBpbiBzdGF0ZS4gVGhlIGhlYXJ0IG9mIHRoZSBiZWFzdC5cbiAgICBzZXQ6IGZ1bmN0aW9uKGtleSwgdmFsLCBvcHRpb25zKSB7XG4gICAgICB2YXIgYXR0ciwgYXR0cnMsIHVuc2V0LCBjaGFuZ2VzLCBzaWxlbnQsIGNoYW5naW5nLCBwcmV2LCBjdXJyZW50O1xuICAgICAgaWYgKGtleSA9PSBudWxsKSByZXR1cm4gdGhpcztcblxuICAgICAgLy8gSGFuZGxlIGJvdGggYFwia2V5XCIsIHZhbHVlYCBhbmQgYHtrZXk6IHZhbHVlfWAgLXN0eWxlIGFyZ3VtZW50cy5cbiAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBhdHRycyA9IGtleTtcbiAgICAgICAgb3B0aW9ucyA9IHZhbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIChhdHRycyA9IHt9KVtrZXldID0gdmFsO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pO1xuXG4gICAgICAvLyBSdW4gdmFsaWRhdGlvbi5cbiAgICAgIGlmICghdGhpcy5fdmFsaWRhdGUoYXR0cnMsIG9wdGlvbnMpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIEV4dHJhY3QgYXR0cmlidXRlcyBhbmQgb3B0aW9ucy5cbiAgICAgIHVuc2V0ICAgICAgICAgICA9IG9wdGlvbnMudW5zZXQ7XG4gICAgICBzaWxlbnQgICAgICAgICAgPSBvcHRpb25zLnNpbGVudDtcbiAgICAgIGNoYW5nZXMgICAgICAgICA9IFtdO1xuICAgICAgY2hhbmdpbmcgICAgICAgID0gdGhpcy5fY2hhbmdpbmc7XG4gICAgICB0aGlzLl9jaGFuZ2luZyAgPSB0cnVlO1xuXG4gICAgICBpZiAoIWNoYW5naW5nKSB7XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyA9IF8uY2xvbmUodGhpcy5hdHRyaWJ1dGVzKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0ge307XG4gICAgICB9XG4gICAgICBjdXJyZW50ID0gdGhpcy5hdHRyaWJ1dGVzLCBwcmV2ID0gdGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVzO1xuXG4gICAgICAvLyBDaGVjayBmb3IgY2hhbmdlcyBvZiBgaWRgLlxuICAgICAgaWYgKHRoaXMuaWRBdHRyaWJ1dGUgaW4gYXR0cnMpIHRoaXMuaWQgPSBhdHRyc1t0aGlzLmlkQXR0cmlidXRlXTtcblxuICAgICAgLy8gRm9yIGVhY2ggYHNldGAgYXR0cmlidXRlLCB1cGRhdGUgb3IgZGVsZXRlIHRoZSBjdXJyZW50IHZhbHVlLlxuICAgICAgZm9yIChhdHRyIGluIGF0dHJzKSB7XG4gICAgICAgIHZhbCA9IGF0dHJzW2F0dHJdO1xuICAgICAgICBpZiAoIV8uaXNFcXVhbChjdXJyZW50W2F0dHJdLCB2YWwpKSBjaGFuZ2VzLnB1c2goYXR0cik7XG4gICAgICAgIGlmICghXy5pc0VxdWFsKHByZXZbYXR0cl0sIHZhbCkpIHtcbiAgICAgICAgICB0aGlzLmNoYW5nZWRbYXR0cl0gPSB2YWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuY2hhbmdlZFthdHRyXTtcbiAgICAgICAgfVxuICAgICAgICB1bnNldCA/IGRlbGV0ZSBjdXJyZW50W2F0dHJdIDogY3VycmVudFthdHRyXSA9IHZhbDtcbiAgICAgIH1cblxuICAgICAgLy8gVHJpZ2dlciBhbGwgcmVsZXZhbnQgYXR0cmlidXRlIGNoYW5nZXMuXG4gICAgICBpZiAoIXNpbGVudCkge1xuICAgICAgICBpZiAoY2hhbmdlcy5sZW5ndGgpIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNoYW5nZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2U6JyArIGNoYW5nZXNbaV0sIHRoaXMsIGN1cnJlbnRbY2hhbmdlc1tpXV0sIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFlvdSBtaWdodCBiZSB3b25kZXJpbmcgd2h5IHRoZXJlJ3MgYSBgd2hpbGVgIGxvb3AgaGVyZS4gQ2hhbmdlcyBjYW5cbiAgICAgIC8vIGJlIHJlY3Vyc2l2ZWx5IG5lc3RlZCB3aXRoaW4gYFwiY2hhbmdlXCJgIGV2ZW50cy5cbiAgICAgIGlmIChjaGFuZ2luZykgcmV0dXJuIHRoaXM7XG4gICAgICBpZiAoIXNpbGVudCkge1xuICAgICAgICB3aGlsZSAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2NoYW5nZScsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLl9wZW5kaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFuZ2luZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8vIFJlbW92ZSBhbiBhdHRyaWJ1dGUgZnJvbSB0aGUgbW9kZWwsIGZpcmluZyBgXCJjaGFuZ2VcImAuIGB1bnNldGAgaXMgYSBub29wXG4gICAgLy8gaWYgdGhlIGF0dHJpYnV0ZSBkb2Vzbid0IGV4aXN0LlxuICAgIHVuc2V0OiBmdW5jdGlvbihhdHRyLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXQoYXR0ciwgdm9pZCAwLCBfLmV4dGVuZCh7fSwgb3B0aW9ucywge3Vuc2V0OiB0cnVlfSkpO1xuICAgIH0sXG5cbiAgICAvLyBDbGVhciBhbGwgYXR0cmlidXRlcyBvbiB0aGUgbW9kZWwsIGZpcmluZyBgXCJjaGFuZ2VcImAuXG4gICAgY2xlYXI6IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHZhciBhdHRycyA9IHt9O1xuICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuYXR0cmlidXRlcykgYXR0cnNba2V5XSA9IHZvaWQgMDtcbiAgICAgIHJldHVybiB0aGlzLnNldChhdHRycywgXy5leHRlbmQoe30sIG9wdGlvbnMsIHt1bnNldDogdHJ1ZX0pKTtcbiAgICB9LFxuXG4gICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBtb2RlbCBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBgXCJjaGFuZ2VcImAgZXZlbnQuXG4gICAgLy8gSWYgeW91IHNwZWNpZnkgYW4gYXR0cmlidXRlIG5hbWUsIGRldGVybWluZSBpZiB0aGF0IGF0dHJpYnV0ZSBoYXMgY2hhbmdlZC5cbiAgICBoYXNDaGFuZ2VkOiBmdW5jdGlvbihhdHRyKSB7XG4gICAgICBpZiAoYXR0ciA9PSBudWxsKSByZXR1cm4gIV8uaXNFbXB0eSh0aGlzLmNoYW5nZWQpO1xuICAgICAgcmV0dXJuIF8uaGFzKHRoaXMuY2hhbmdlZCwgYXR0cik7XG4gICAgfSxcblxuICAgIC8vIFJldHVybiBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIGNoYW5nZWQsIG9yXG4gICAgLy8gZmFsc2UgaWYgdGhlcmUgYXJlIG5vIGNoYW5nZWQgYXR0cmlidXRlcy4gVXNlZnVsIGZvciBkZXRlcm1pbmluZyB3aGF0XG4gICAgLy8gcGFydHMgb2YgYSB2aWV3IG5lZWQgdG8gYmUgdXBkYXRlZCBhbmQvb3Igd2hhdCBhdHRyaWJ1dGVzIG5lZWQgdG8gYmVcbiAgICAvLyBwZXJzaXN0ZWQgdG8gdGhlIHNlcnZlci4gVW5zZXQgYXR0cmlidXRlcyB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuXG4gICAgLy8gWW91IGNhbiBhbHNvIHBhc3MgYW4gYXR0cmlidXRlcyBvYmplY3QgdG8gZGlmZiBhZ2FpbnN0IHRoZSBtb2RlbCxcbiAgICAvLyBkZXRlcm1pbmluZyBpZiB0aGVyZSAqd291bGQgYmUqIGEgY2hhbmdlLlxuICAgIGNoYW5nZWRBdHRyaWJ1dGVzOiBmdW5jdGlvbihkaWZmKSB7XG4gICAgICBpZiAoIWRpZmYpIHJldHVybiB0aGlzLmhhc0NoYW5nZWQoKSA/IF8uY2xvbmUodGhpcy5jaGFuZ2VkKSA6IGZhbHNlO1xuICAgICAgdmFyIHZhbCwgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgdmFyIG9sZCA9IHRoaXMuX2NoYW5naW5nID8gdGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVzIDogdGhpcy5hdHRyaWJ1dGVzO1xuICAgICAgZm9yICh2YXIgYXR0ciBpbiBkaWZmKSB7XG4gICAgICAgIGlmIChfLmlzRXF1YWwob2xkW2F0dHJdLCAodmFsID0gZGlmZlthdHRyXSkpKSBjb250aW51ZTtcbiAgICAgICAgKGNoYW5nZWQgfHwgKGNoYW5nZWQgPSB7fSkpW2F0dHJdID0gdmFsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNoYW5nZWQ7XG4gICAgfSxcblxuICAgIC8vIEdldCB0aGUgcHJldmlvdXMgdmFsdWUgb2YgYW4gYXR0cmlidXRlLCByZWNvcmRlZCBhdCB0aGUgdGltZSB0aGUgbGFzdFxuICAgIC8vIGBcImNoYW5nZVwiYCBldmVudCB3YXMgZmlyZWQuXG4gICAgcHJldmlvdXM6IGZ1bmN0aW9uKGF0dHIpIHtcbiAgICAgIGlmIChhdHRyID09IG51bGwgfHwgIXRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcykgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gdGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVzW2F0dHJdO1xuICAgIH0sXG5cbiAgICAvLyBHZXQgYWxsIG9mIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBtb2RlbCBhdCB0aGUgdGltZSBvZiB0aGUgcHJldmlvdXNcbiAgICAvLyBgXCJjaGFuZ2VcImAgZXZlbnQuXG4gICAgcHJldmlvdXNBdHRyaWJ1dGVzOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBfLmNsb25lKHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyk7XG4gICAgfSxcblxuICAgIC8vIEZldGNoIHRoZSBtb2RlbCBmcm9tIHRoZSBzZXJ2ZXIuIElmIHRoZSBzZXJ2ZXIncyByZXByZXNlbnRhdGlvbiBvZiB0aGVcbiAgICAvLyBtb2RlbCBkaWZmZXJzIGZyb20gaXRzIGN1cnJlbnQgYXR0cmlidXRlcywgdGhleSB3aWxsIGJlIG92ZXJyaWRkZW4sXG4gICAgLy8gdHJpZ2dlcmluZyBhIGBcImNoYW5nZVwiYCBldmVudC5cbiAgICBmZXRjaDogZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgPyBfLmNsb25lKG9wdGlvbnMpIDoge307XG4gICAgICBpZiAob3B0aW9ucy5wYXJzZSA9PT0gdm9pZCAwKSBvcHRpb25zLnBhcnNlID0gdHJ1ZTtcbiAgICAgIHZhciBtb2RlbCA9IHRoaXM7XG4gICAgICB2YXIgc3VjY2VzcyA9IG9wdGlvbnMuc3VjY2VzcztcbiAgICAgIG9wdGlvbnMuc3VjY2VzcyA9IGZ1bmN0aW9uKHJlc3ApIHtcbiAgICAgICAgaWYgKCFtb2RlbC5zZXQobW9kZWwucGFyc2UocmVzcCwgb3B0aW9ucyksIG9wdGlvbnMpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChzdWNjZXNzKSBzdWNjZXNzKG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgICAgbW9kZWwudHJpZ2dlcignc3luYycsIG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgIH07XG4gICAgICB3cmFwRXJyb3IodGhpcywgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gdGhpcy5zeW5jKCdyZWFkJywgdGhpcywgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIC8vIFNldCBhIGhhc2ggb2YgbW9kZWwgYXR0cmlidXRlcywgYW5kIHN5bmMgdGhlIG1vZGVsIHRvIHRoZSBzZXJ2ZXIuXG4gICAgLy8gSWYgdGhlIHNlcnZlciByZXR1cm5zIGFuIGF0dHJpYnV0ZXMgaGFzaCB0aGF0IGRpZmZlcnMsIHRoZSBtb2RlbCdzXG4gICAgLy8gc3RhdGUgd2lsbCBiZSBgc2V0YCBhZ2Fpbi5cbiAgICBzYXZlOiBmdW5jdGlvbihrZXksIHZhbCwgb3B0aW9ucykge1xuICAgICAgdmFyIGF0dHJzLCBtZXRob2QsIHhociwgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcblxuICAgICAgLy8gSGFuZGxlIGJvdGggYFwia2V5XCIsIHZhbHVlYCBhbmQgYHtrZXk6IHZhbHVlfWAgLXN0eWxlIGFyZ3VtZW50cy5cbiAgICAgIGlmIChrZXkgPT0gbnVsbCB8fCB0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBhdHRycyA9IGtleTtcbiAgICAgICAgb3B0aW9ucyA9IHZhbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIChhdHRycyA9IHt9KVtrZXldID0gdmFsO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25zID0gXy5leHRlbmQoe3ZhbGlkYXRlOiB0cnVlfSwgb3B0aW9ucyk7XG5cbiAgICAgIC8vIElmIHdlJ3JlIG5vdCB3YWl0aW5nIGFuZCBhdHRyaWJ1dGVzIGV4aXN0LCBzYXZlIGFjdHMgYXNcbiAgICAgIC8vIGBzZXQoYXR0cikuc2F2ZShudWxsLCBvcHRzKWAgd2l0aCB2YWxpZGF0aW9uLiBPdGhlcndpc2UsIGNoZWNrIGlmXG4gICAgICAvLyB0aGUgbW9kZWwgd2lsbCBiZSB2YWxpZCB3aGVuIHRoZSBhdHRyaWJ1dGVzLCBpZiBhbnksIGFyZSBzZXQuXG4gICAgICBpZiAoYXR0cnMgJiYgIW9wdGlvbnMud2FpdCkge1xuICAgICAgICBpZiAoIXRoaXMuc2V0KGF0dHJzLCBvcHRpb25zKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLl92YWxpZGF0ZShhdHRycywgb3B0aW9ucykpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHRlbXBvcmFyeSBhdHRyaWJ1dGVzIGlmIGB7d2FpdDogdHJ1ZX1gLlxuICAgICAgaWYgKGF0dHJzICYmIG9wdGlvbnMud2FpdCkge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBfLmV4dGVuZCh7fSwgYXR0cmlidXRlcywgYXR0cnMpO1xuICAgICAgfVxuXG4gICAgICAvLyBBZnRlciBhIHN1Y2Nlc3NmdWwgc2VydmVyLXNpZGUgc2F2ZSwgdGhlIGNsaWVudCBpcyAob3B0aW9uYWxseSlcbiAgICAgIC8vIHVwZGF0ZWQgd2l0aCB0aGUgc2VydmVyLXNpZGUgc3RhdGUuXG4gICAgICBpZiAob3B0aW9ucy5wYXJzZSA9PT0gdm9pZCAwKSBvcHRpb25zLnBhcnNlID0gdHJ1ZTtcbiAgICAgIHZhciBtb2RlbCA9IHRoaXM7XG4gICAgICB2YXIgc3VjY2VzcyA9IG9wdGlvbnMuc3VjY2VzcztcbiAgICAgIG9wdGlvbnMuc3VjY2VzcyA9IGZ1bmN0aW9uKHJlc3ApIHtcbiAgICAgICAgLy8gRW5zdXJlIGF0dHJpYnV0ZXMgYXJlIHJlc3RvcmVkIGR1cmluZyBzeW5jaHJvbm91cyBzYXZlcy5cbiAgICAgICAgbW9kZWwuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7XG4gICAgICAgIHZhciBzZXJ2ZXJBdHRycyA9IG1vZGVsLnBhcnNlKHJlc3AsIG9wdGlvbnMpO1xuICAgICAgICBpZiAob3B0aW9ucy53YWl0KSBzZXJ2ZXJBdHRycyA9IF8uZXh0ZW5kKGF0dHJzIHx8IHt9LCBzZXJ2ZXJBdHRycyk7XG4gICAgICAgIGlmIChfLmlzT2JqZWN0KHNlcnZlckF0dHJzKSAmJiAhbW9kZWwuc2V0KHNlcnZlckF0dHJzLCBvcHRpb25zKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3VjY2Vzcykgc3VjY2Vzcyhtb2RlbCwgcmVzcCwgb3B0aW9ucyk7XG4gICAgICAgIG1vZGVsLnRyaWdnZXIoJ3N5bmMnLCBtb2RlbCwgcmVzcCwgb3B0aW9ucyk7XG4gICAgICB9O1xuICAgICAgd3JhcEVycm9yKHRoaXMsIG9wdGlvbnMpO1xuXG4gICAgICBtZXRob2QgPSB0aGlzLmlzTmV3KCkgPyAnY3JlYXRlJyA6IChvcHRpb25zLnBhdGNoID8gJ3BhdGNoJyA6ICd1cGRhdGUnKTtcbiAgICAgIGlmIChtZXRob2QgPT09ICdwYXRjaCcpIG9wdGlvbnMuYXR0cnMgPSBhdHRycztcbiAgICAgIHhociA9IHRoaXMuc3luYyhtZXRob2QsIHRoaXMsIG9wdGlvbnMpO1xuXG4gICAgICAvLyBSZXN0b3JlIGF0dHJpYnV0ZXMuXG4gICAgICBpZiAoYXR0cnMgJiYgb3B0aW9ucy53YWl0KSB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzO1xuXG4gICAgICByZXR1cm4geGhyO1xuICAgIH0sXG5cbiAgICAvLyBEZXN0cm95IHRoaXMgbW9kZWwgb24gdGhlIHNlcnZlciBpZiBpdCB3YXMgYWxyZWFkeSBwZXJzaXN0ZWQuXG4gICAgLy8gT3B0aW1pc3RpY2FsbHkgcmVtb3ZlcyB0aGUgbW9kZWwgZnJvbSBpdHMgY29sbGVjdGlvbiwgaWYgaXQgaGFzIG9uZS5cbiAgICAvLyBJZiBgd2FpdDogdHJ1ZWAgaXMgcGFzc2VkLCB3YWl0cyBmb3IgdGhlIHNlcnZlciB0byByZXNwb25kIGJlZm9yZSByZW1vdmFsLlxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zID8gXy5jbG9uZShvcHRpb25zKSA6IHt9O1xuICAgICAgdmFyIG1vZGVsID0gdGhpcztcbiAgICAgIHZhciBzdWNjZXNzID0gb3B0aW9ucy5zdWNjZXNzO1xuXG4gICAgICB2YXIgZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBtb2RlbC50cmlnZ2VyKCdkZXN0cm95JywgbW9kZWwsIG1vZGVsLmNvbGxlY3Rpb24sIG9wdGlvbnMpO1xuICAgICAgfTtcblxuICAgICAgb3B0aW9ucy5zdWNjZXNzID0gZnVuY3Rpb24ocmVzcCkge1xuICAgICAgICBpZiAob3B0aW9ucy53YWl0IHx8IG1vZGVsLmlzTmV3KCkpIGRlc3Ryb3koKTtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHN1Y2Nlc3MobW9kZWwsIHJlc3AsIG9wdGlvbnMpO1xuICAgICAgICBpZiAoIW1vZGVsLmlzTmV3KCkpIG1vZGVsLnRyaWdnZXIoJ3N5bmMnLCBtb2RlbCwgcmVzcCwgb3B0aW9ucyk7XG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5pc05ldygpKSB7XG4gICAgICAgIG9wdGlvbnMuc3VjY2VzcygpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB3cmFwRXJyb3IodGhpcywgb3B0aW9ucyk7XG5cbiAgICAgIHZhciB4aHIgPSB0aGlzLnN5bmMoJ2RlbGV0ZScsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgaWYgKCFvcHRpb25zLndhaXQpIGRlc3Ryb3koKTtcbiAgICAgIHJldHVybiB4aHI7XG4gICAgfSxcblxuICAgIC8vIERlZmF1bHQgVVJMIGZvciB0aGUgbW9kZWwncyByZXByZXNlbnRhdGlvbiBvbiB0aGUgc2VydmVyIC0tIGlmIHlvdSdyZVxuICAgIC8vIHVzaW5nIEJhY2tib25lJ3MgcmVzdGZ1bCBtZXRob2RzLCBvdmVycmlkZSB0aGlzIHRvIGNoYW5nZSB0aGUgZW5kcG9pbnRcbiAgICAvLyB0aGF0IHdpbGwgYmUgY2FsbGVkLlxuICAgIHVybDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYmFzZSA9IF8ucmVzdWx0KHRoaXMsICd1cmxSb290JykgfHwgXy5yZXN1bHQodGhpcy5jb2xsZWN0aW9uLCAndXJsJykgfHwgdXJsRXJyb3IoKTtcbiAgICAgIGlmICh0aGlzLmlzTmV3KCkpIHJldHVybiBiYXNlO1xuICAgICAgcmV0dXJuIGJhc2UgKyAoYmFzZS5jaGFyQXQoYmFzZS5sZW5ndGggLSAxKSA9PT0gJy8nID8gJycgOiAnLycpICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuaWQpO1xuICAgIH0sXG5cbiAgICAvLyAqKnBhcnNlKiogY29udmVydHMgYSByZXNwb25zZSBpbnRvIHRoZSBoYXNoIG9mIGF0dHJpYnV0ZXMgdG8gYmUgYHNldGAgb25cbiAgICAvLyB0aGUgbW9kZWwuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGp1c3QgdG8gcGFzcyB0aGUgcmVzcG9uc2UgYWxvbmcuXG4gICAgcGFyc2U6IGZ1bmN0aW9uKHJlc3AsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiByZXNwO1xuICAgIH0sXG5cbiAgICAvLyBDcmVhdGUgYSBuZXcgbW9kZWwgd2l0aCBpZGVudGljYWwgYXR0cmlidXRlcyB0byB0aGlzIG9uZS5cbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5hdHRyaWJ1dGVzKTtcbiAgICB9LFxuXG4gICAgLy8gQSBtb2RlbCBpcyBuZXcgaWYgaXQgaGFzIG5ldmVyIGJlZW4gc2F2ZWQgdG8gdGhlIHNlcnZlciwgYW5kIGxhY2tzIGFuIGlkLlxuICAgIGlzTmV3OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmlkID09IG51bGw7XG4gICAgfSxcblxuICAgIC8vIENoZWNrIGlmIHRoZSBtb2RlbCBpcyBjdXJyZW50bHkgaW4gYSB2YWxpZCBzdGF0ZS5cbiAgICBpc1ZhbGlkOiBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGUoe30sIF8uZXh0ZW5kKG9wdGlvbnMgfHwge30sIHsgdmFsaWRhdGU6IHRydWUgfSkpO1xuICAgIH0sXG5cbiAgICAvLyBSdW4gdmFsaWRhdGlvbiBhZ2FpbnN0IHRoZSBuZXh0IGNvbXBsZXRlIHNldCBvZiBtb2RlbCBhdHRyaWJ1dGVzLFxuICAgIC8vIHJldHVybmluZyBgdHJ1ZWAgaWYgYWxsIGlzIHdlbGwuIE90aGVyd2lzZSwgZmlyZSBhbiBgXCJpbnZhbGlkXCJgIGV2ZW50LlxuICAgIF92YWxpZGF0ZTogZnVuY3Rpb24oYXR0cnMsIG9wdGlvbnMpIHtcbiAgICAgIGlmICghb3B0aW9ucy52YWxpZGF0ZSB8fCAhdGhpcy52YWxpZGF0ZSkgcmV0dXJuIHRydWU7XG4gICAgICBhdHRycyA9IF8uZXh0ZW5kKHt9LCB0aGlzLmF0dHJpYnV0ZXMsIGF0dHJzKTtcbiAgICAgIHZhciBlcnJvciA9IHRoaXMudmFsaWRhdGlvbkVycm9yID0gdGhpcy52YWxpZGF0ZShhdHRycywgb3B0aW9ucykgfHwgbnVsbDtcbiAgICAgIGlmICghZXJyb3IpIHJldHVybiB0cnVlO1xuICAgICAgdGhpcy50cmlnZ2VyKCdpbnZhbGlkJywgdGhpcywgZXJyb3IsIF8uZXh0ZW5kKG9wdGlvbnMsIHt2YWxpZGF0aW9uRXJyb3I6IGVycm9yfSkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICB9KTtcblxuICAvLyBVbmRlcnNjb3JlIG1ldGhvZHMgdGhhdCB3ZSB3YW50IHRvIGltcGxlbWVudCBvbiB0aGUgTW9kZWwuXG4gIHZhciBtb2RlbE1ldGhvZHMgPSBbJ2tleXMnLCAndmFsdWVzJywgJ3BhaXJzJywgJ2ludmVydCcsICdwaWNrJywgJ29taXQnXTtcblxuICAvLyBNaXggaW4gZWFjaCBVbmRlcnNjb3JlIG1ldGhvZCBhcyBhIHByb3h5IHRvIGBNb2RlbCNhdHRyaWJ1dGVzYC5cbiAgXy5lYWNoKG1vZGVsTWV0aG9kcywgZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgTW9kZWwucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgYXJncy51bnNoaWZ0KHRoaXMuYXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gX1ttZXRob2RdLmFwcGx5KF8sIGFyZ3MpO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIEJhY2tib25lLkNvbGxlY3Rpb25cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIElmIG1vZGVscyB0ZW5kIHRvIHJlcHJlc2VudCBhIHNpbmdsZSByb3cgb2YgZGF0YSwgYSBCYWNrYm9uZSBDb2xsZWN0aW9uIGlzXG4gIC8vIG1vcmUgYW5hbGFnb3VzIHRvIGEgdGFibGUgZnVsbCBvZiBkYXRhIC4uLiBvciBhIHNtYWxsIHNsaWNlIG9yIHBhZ2Ugb2YgdGhhdFxuICAvLyB0YWJsZSwgb3IgYSBjb2xsZWN0aW9uIG9mIHJvd3MgdGhhdCBiZWxvbmcgdG9nZXRoZXIgZm9yIGEgcGFydGljdWxhciByZWFzb25cbiAgLy8gLS0gYWxsIG9mIHRoZSBtZXNzYWdlcyBpbiB0aGlzIHBhcnRpY3VsYXIgZm9sZGVyLCBhbGwgb2YgdGhlIGRvY3VtZW50c1xuICAvLyBiZWxvbmdpbmcgdG8gdGhpcyBwYXJ0aWN1bGFyIGF1dGhvciwgYW5kIHNvIG9uLiBDb2xsZWN0aW9ucyBtYWludGFpblxuICAvLyBpbmRleGVzIG9mIHRoZWlyIG1vZGVscywgYm90aCBpbiBvcmRlciwgYW5kIGZvciBsb29rdXAgYnkgYGlkYC5cblxuICAvLyBDcmVhdGUgYSBuZXcgKipDb2xsZWN0aW9uKiosIHBlcmhhcHMgdG8gY29udGFpbiBhIHNwZWNpZmljIHR5cGUgb2YgYG1vZGVsYC5cbiAgLy8gSWYgYSBgY29tcGFyYXRvcmAgaXMgc3BlY2lmaWVkLCB0aGUgQ29sbGVjdGlvbiB3aWxsIG1haW50YWluXG4gIC8vIGl0cyBtb2RlbHMgaW4gc29ydCBvcmRlciwgYXMgdGhleSdyZSBhZGRlZCBhbmQgcmVtb3ZlZC5cbiAgdmFyIENvbGxlY3Rpb24gPSBCYWNrYm9uZS5Db2xsZWN0aW9uID0gZnVuY3Rpb24obW9kZWxzLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcbiAgICBpZiAob3B0aW9ucy5tb2RlbCkgdGhpcy5tb2RlbCA9IG9wdGlvbnMubW9kZWw7XG4gICAgaWYgKG9wdGlvbnMuY29tcGFyYXRvciAhPT0gdm9pZCAwKSB0aGlzLmNvbXBhcmF0b3IgPSBvcHRpb25zLmNvbXBhcmF0b3I7XG4gICAgdGhpcy5fcmVzZXQoKTtcbiAgICB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAobW9kZWxzKSB0aGlzLnJlc2V0KG1vZGVscywgXy5leHRlbmQoe3NpbGVudDogdHJ1ZX0sIG9wdGlvbnMpKTtcbiAgfTtcblxuICAvLyBEZWZhdWx0IG9wdGlvbnMgZm9yIGBDb2xsZWN0aW9uI3NldGAuXG4gIHZhciBzZXRPcHRpb25zID0ge2FkZDogdHJ1ZSwgcmVtb3ZlOiB0cnVlLCBtZXJnZTogdHJ1ZX07XG4gIHZhciBhZGRPcHRpb25zID0ge2FkZDogdHJ1ZSwgcmVtb3ZlOiBmYWxzZX07XG5cbiAgLy8gRGVmaW5lIHRoZSBDb2xsZWN0aW9uJ3MgaW5oZXJpdGFibGUgbWV0aG9kcy5cbiAgXy5leHRlbmQoQ29sbGVjdGlvbi5wcm90b3R5cGUsIEV2ZW50cywge1xuXG4gICAgLy8gVGhlIGRlZmF1bHQgbW9kZWwgZm9yIGEgY29sbGVjdGlvbiBpcyBqdXN0IGEgKipCYWNrYm9uZS5Nb2RlbCoqLlxuICAgIC8vIFRoaXMgc2hvdWxkIGJlIG92ZXJyaWRkZW4gaW4gbW9zdCBjYXNlcy5cbiAgICBtb2RlbDogTW9kZWwsXG5cbiAgICAvLyBJbml0aWFsaXplIGlzIGFuIGVtcHR5IGZ1bmN0aW9uIGJ5IGRlZmF1bHQuIE92ZXJyaWRlIGl0IHdpdGggeW91ciBvd25cbiAgICAvLyBpbml0aWFsaXphdGlvbiBsb2dpYy5cbiAgICBpbml0aWFsaXplOiBmdW5jdGlvbigpe30sXG5cbiAgICAvLyBUaGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIENvbGxlY3Rpb24gaXMgYW4gYXJyYXkgb2YgdGhlXG4gICAgLy8gbW9kZWxzJyBhdHRyaWJ1dGVzLlxuICAgIHRvSlNPTjogZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKG1vZGVsKXsgcmV0dXJuIG1vZGVsLnRvSlNPTihvcHRpb25zKTsgfSk7XG4gICAgfSxcblxuICAgIC8vIFByb3h5IGBCYWNrYm9uZS5zeW5jYCBieSBkZWZhdWx0LlxuICAgIHN5bmM6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIEJhY2tib25lLnN5bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9LFxuXG4gICAgLy8gQWRkIGEgbW9kZWwsIG9yIGxpc3Qgb2YgbW9kZWxzIHRvIHRoZSBzZXQuXG4gICAgYWRkOiBmdW5jdGlvbihtb2RlbHMsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNldChtb2RlbHMsIF8uZXh0ZW5kKHttZXJnZTogZmFsc2V9LCBvcHRpb25zLCBhZGRPcHRpb25zKSk7XG4gICAgfSxcblxuICAgIC8vIFJlbW92ZSBhIG1vZGVsLCBvciBhIGxpc3Qgb2YgbW9kZWxzIGZyb20gdGhlIHNldC5cbiAgICByZW1vdmU6IGZ1bmN0aW9uKG1vZGVscywgb3B0aW9ucykge1xuICAgICAgdmFyIHNpbmd1bGFyID0gIV8uaXNBcnJheShtb2RlbHMpO1xuICAgICAgbW9kZWxzID0gc2luZ3VsYXIgPyBbbW9kZWxzXSA6IF8uY2xvbmUobW9kZWxzKTtcbiAgICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG4gICAgICB2YXIgaSwgbCwgaW5kZXgsIG1vZGVsO1xuICAgICAgZm9yIChpID0gMCwgbCA9IG1vZGVscy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgbW9kZWwgPSBtb2RlbHNbaV0gPSB0aGlzLmdldChtb2RlbHNbaV0pO1xuICAgICAgICBpZiAoIW1vZGVsKSBjb250aW51ZTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2J5SWRbbW9kZWwuaWRdO1xuICAgICAgICBkZWxldGUgdGhpcy5fYnlJZFttb2RlbC5jaWRdO1xuICAgICAgICBpbmRleCA9IHRoaXMuaW5kZXhPZihtb2RlbCk7XG4gICAgICAgIHRoaXMubW9kZWxzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMubGVuZ3RoLS07XG4gICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICBvcHRpb25zLmluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgbW9kZWwudHJpZ2dlcigncmVtb3ZlJywgbW9kZWwsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JlbW92ZVJlZmVyZW5jZShtb2RlbCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2luZ3VsYXIgPyBtb2RlbHNbMF0gOiBtb2RlbHM7XG4gICAgfSxcblxuICAgIC8vIFVwZGF0ZSBhIGNvbGxlY3Rpb24gYnkgYHNldGAtaW5nIGEgbmV3IGxpc3Qgb2YgbW9kZWxzLCBhZGRpbmcgbmV3IG9uZXMsXG4gICAgLy8gcmVtb3ZpbmcgbW9kZWxzIHRoYXQgYXJlIG5vIGxvbmdlciBwcmVzZW50LCBhbmQgbWVyZ2luZyBtb2RlbHMgdGhhdFxuICAgIC8vIGFscmVhZHkgZXhpc3QgaW4gdGhlIGNvbGxlY3Rpb24sIGFzIG5lY2Vzc2FyeS4gU2ltaWxhciB0byAqKk1vZGVsI3NldCoqLFxuICAgIC8vIHRoZSBjb3JlIG9wZXJhdGlvbiBmb3IgdXBkYXRpbmcgdGhlIGRhdGEgY29udGFpbmVkIGJ5IHRoZSBjb2xsZWN0aW9uLlxuICAgIHNldDogZnVuY3Rpb24obW9kZWxzLCBvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0gXy5kZWZhdWx0cyh7fSwgb3B0aW9ucywgc2V0T3B0aW9ucyk7XG4gICAgICBpZiAob3B0aW9ucy5wYXJzZSkgbW9kZWxzID0gdGhpcy5wYXJzZShtb2RlbHMsIG9wdGlvbnMpO1xuICAgICAgdmFyIHNpbmd1bGFyID0gIV8uaXNBcnJheShtb2RlbHMpO1xuICAgICAgbW9kZWxzID0gc2luZ3VsYXIgPyAobW9kZWxzID8gW21vZGVsc10gOiBbXSkgOiBfLmNsb25lKG1vZGVscyk7XG4gICAgICB2YXIgaSwgbCwgaWQsIG1vZGVsLCBhdHRycywgZXhpc3RpbmcsIHNvcnQ7XG4gICAgICB2YXIgYXQgPSBvcHRpb25zLmF0O1xuICAgICAgdmFyIHRhcmdldE1vZGVsID0gdGhpcy5tb2RlbDtcbiAgICAgIHZhciBzb3J0YWJsZSA9IHRoaXMuY29tcGFyYXRvciAmJiAoYXQgPT0gbnVsbCkgJiYgb3B0aW9ucy5zb3J0ICE9PSBmYWxzZTtcbiAgICAgIHZhciBzb3J0QXR0ciA9IF8uaXNTdHJpbmcodGhpcy5jb21wYXJhdG9yKSA/IHRoaXMuY29tcGFyYXRvciA6IG51bGw7XG4gICAgICB2YXIgdG9BZGQgPSBbXSwgdG9SZW1vdmUgPSBbXSwgbW9kZWxNYXAgPSB7fTtcbiAgICAgIHZhciBhZGQgPSBvcHRpb25zLmFkZCwgbWVyZ2UgPSBvcHRpb25zLm1lcmdlLCByZW1vdmUgPSBvcHRpb25zLnJlbW92ZTtcbiAgICAgIHZhciBvcmRlciA9ICFzb3J0YWJsZSAmJiBhZGQgJiYgcmVtb3ZlID8gW10gOiBmYWxzZTtcblxuICAgICAgLy8gVHVybiBiYXJlIG9iamVjdHMgaW50byBtb2RlbCByZWZlcmVuY2VzLCBhbmQgcHJldmVudCBpbnZhbGlkIG1vZGVsc1xuICAgICAgLy8gZnJvbSBiZWluZyBhZGRlZC5cbiAgICAgIGZvciAoaSA9IDAsIGwgPSBtb2RlbHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGF0dHJzID0gbW9kZWxzW2ldO1xuICAgICAgICBpZiAoYXR0cnMgaW5zdGFuY2VvZiBNb2RlbCkge1xuICAgICAgICAgIGlkID0gbW9kZWwgPSBhdHRycztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZCA9IGF0dHJzW3RhcmdldE1vZGVsLnByb3RvdHlwZS5pZEF0dHJpYnV0ZV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGR1cGxpY2F0ZSBpcyBmb3VuZCwgcHJldmVudCBpdCBmcm9tIGJlaW5nIGFkZGVkIGFuZFxuICAgICAgICAvLyBvcHRpb25hbGx5IG1lcmdlIGl0IGludG8gdGhlIGV4aXN0aW5nIG1vZGVsLlxuICAgICAgICBpZiAoZXhpc3RpbmcgPSB0aGlzLmdldChpZCkpIHtcbiAgICAgICAgICBpZiAocmVtb3ZlKSBtb2RlbE1hcFtleGlzdGluZy5jaWRdID0gdHJ1ZTtcbiAgICAgICAgICBpZiAobWVyZ2UpIHtcbiAgICAgICAgICAgIGF0dHJzID0gYXR0cnMgPT09IG1vZGVsID8gbW9kZWwuYXR0cmlidXRlcyA6IGF0dHJzO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMucGFyc2UpIGF0dHJzID0gZXhpc3RpbmcucGFyc2UoYXR0cnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgZXhpc3Rpbmcuc2V0KGF0dHJzLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChzb3J0YWJsZSAmJiAhc29ydCAmJiBleGlzdGluZy5oYXNDaGFuZ2VkKHNvcnRBdHRyKSkgc29ydCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG1vZGVsc1tpXSA9IGV4aXN0aW5nO1xuXG4gICAgICAgIC8vIElmIHRoaXMgaXMgYSBuZXcsIHZhbGlkIG1vZGVsLCBwdXNoIGl0IHRvIHRoZSBgdG9BZGRgIGxpc3QuXG4gICAgICAgIH0gZWxzZSBpZiAoYWRkKSB7XG4gICAgICAgICAgbW9kZWwgPSBtb2RlbHNbaV0gPSB0aGlzLl9wcmVwYXJlTW9kZWwoYXR0cnMsIG9wdGlvbnMpO1xuICAgICAgICAgIGlmICghbW9kZWwpIGNvbnRpbnVlO1xuICAgICAgICAgIHRvQWRkLnB1c2gobW9kZWwpO1xuXG4gICAgICAgICAgLy8gTGlzdGVuIHRvIGFkZGVkIG1vZGVscycgZXZlbnRzLCBhbmQgaW5kZXggbW9kZWxzIGZvciBsb29rdXAgYnlcbiAgICAgICAgICAvLyBgaWRgIGFuZCBieSBgY2lkYC5cbiAgICAgICAgICBtb2RlbC5vbignYWxsJywgdGhpcy5fb25Nb2RlbEV2ZW50LCB0aGlzKTtcbiAgICAgICAgICB0aGlzLl9ieUlkW21vZGVsLmNpZF0gPSBtb2RlbDtcbiAgICAgICAgICBpZiAobW9kZWwuaWQgIT0gbnVsbCkgdGhpcy5fYnlJZFttb2RlbC5pZF0gPSBtb2RlbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3JkZXIpIG9yZGVyLnB1c2goZXhpc3RpbmcgfHwgbW9kZWwpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZW1vdmUgbm9uZXhpc3RlbnQgbW9kZWxzIGlmIGFwcHJvcHJpYXRlLlxuICAgICAgaWYgKHJlbW92ZSkge1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICBpZiAoIW1vZGVsTWFwWyhtb2RlbCA9IHRoaXMubW9kZWxzW2ldKS5jaWRdKSB0b1JlbW92ZS5wdXNoKG1vZGVsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9SZW1vdmUubGVuZ3RoKSB0aGlzLnJlbW92ZSh0b1JlbW92ZSwgb3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlZSBpZiBzb3J0aW5nIGlzIG5lZWRlZCwgdXBkYXRlIGBsZW5ndGhgIGFuZCBzcGxpY2UgaW4gbmV3IG1vZGVscy5cbiAgICAgIGlmICh0b0FkZC5sZW5ndGggfHwgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkpIHtcbiAgICAgICAgaWYgKHNvcnRhYmxlKSBzb3J0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5sZW5ndGggKz0gdG9BZGQubGVuZ3RoO1xuICAgICAgICBpZiAoYXQgIT0gbnVsbCkge1xuICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSB0b0FkZC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWxzLnNwbGljZShhdCArIGksIDAsIHRvQWRkW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG9yZGVyKSB0aGlzLm1vZGVscy5sZW5ndGggPSAwO1xuICAgICAgICAgIHZhciBvcmRlcmVkTW9kZWxzID0gb3JkZXIgfHwgdG9BZGQ7XG4gICAgICAgICAgZm9yIChpID0gMCwgbCA9IG9yZGVyZWRNb2RlbHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVscy5wdXNoKG9yZGVyZWRNb2RlbHNbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTaWxlbnRseSBzb3J0IHRoZSBjb2xsZWN0aW9uIGlmIGFwcHJvcHJpYXRlLlxuICAgICAgaWYgKHNvcnQpIHRoaXMuc29ydCh7c2lsZW50OiB0cnVlfSk7XG5cbiAgICAgIC8vIFVubGVzcyBzaWxlbmNlZCwgaXQncyB0aW1lIHRvIGZpcmUgYWxsIGFwcHJvcHJpYXRlIGFkZC9zb3J0IGV2ZW50cy5cbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IHRvQWRkLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIChtb2RlbCA9IHRvQWRkW2ldKS50cmlnZ2VyKCdhZGQnLCBtb2RlbCwgdGhpcywgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNvcnQgfHwgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkpIHRoaXMudHJpZ2dlcignc29ydCcsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBSZXR1cm4gdGhlIGFkZGVkIChvciBtZXJnZWQpIG1vZGVsIChvciBtb2RlbHMpLlxuICAgICAgcmV0dXJuIHNpbmd1bGFyID8gbW9kZWxzWzBdIDogbW9kZWxzO1xuICAgIH0sXG5cbiAgICAvLyBXaGVuIHlvdSBoYXZlIG1vcmUgaXRlbXMgdGhhbiB5b3Ugd2FudCB0byBhZGQgb3IgcmVtb3ZlIGluZGl2aWR1YWxseSxcbiAgICAvLyB5b3UgY2FuIHJlc2V0IHRoZSBlbnRpcmUgc2V0IHdpdGggYSBuZXcgbGlzdCBvZiBtb2RlbHMsIHdpdGhvdXQgZmlyaW5nXG4gICAgLy8gYW55IGdyYW51bGFyIGBhZGRgIG9yIGByZW1vdmVgIGV2ZW50cy4gRmlyZXMgYHJlc2V0YCB3aGVuIGZpbmlzaGVkLlxuICAgIC8vIFVzZWZ1bCBmb3IgYnVsayBvcGVyYXRpb25zIGFuZCBvcHRpbWl6YXRpb25zLlxuICAgIHJlc2V0OiBmdW5jdGlvbihtb2RlbHMsIG9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubW9kZWxzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB0aGlzLl9yZW1vdmVSZWZlcmVuY2UodGhpcy5tb2RlbHNbaV0pO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy5wcmV2aW91c01vZGVscyA9IHRoaXMubW9kZWxzO1xuICAgICAgdGhpcy5fcmVzZXQoKTtcbiAgICAgIG1vZGVscyA9IHRoaXMuYWRkKG1vZGVscywgXy5leHRlbmQoe3NpbGVudDogdHJ1ZX0sIG9wdGlvbnMpKTtcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHRoaXMudHJpZ2dlcigncmVzZXQnLCB0aGlzLCBvcHRpb25zKTtcbiAgICAgIHJldHVybiBtb2RlbHM7XG4gICAgfSxcblxuICAgIC8vIEFkZCBhIG1vZGVsIHRvIHRoZSBlbmQgb2YgdGhlIGNvbGxlY3Rpb24uXG4gICAgcHVzaDogZnVuY3Rpb24obW9kZWwsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZChtb2RlbCwgXy5leHRlbmQoe2F0OiB0aGlzLmxlbmd0aH0sIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgLy8gUmVtb3ZlIGEgbW9kZWwgZnJvbSB0aGUgZW5kIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgIHBvcDogZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgdmFyIG1vZGVsID0gdGhpcy5hdCh0aGlzLmxlbmd0aCAtIDEpO1xuICAgICAgdGhpcy5yZW1vdmUobW9kZWwsIG9wdGlvbnMpO1xuICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH0sXG5cbiAgICAvLyBBZGQgYSBtb2RlbCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgIHVuc2hpZnQ6IGZ1bmN0aW9uKG1vZGVsLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGQobW9kZWwsIF8uZXh0ZW5kKHthdDogMH0sIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgLy8gUmVtb3ZlIGEgbW9kZWwgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgIHNoaWZ0OiBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICB2YXIgbW9kZWwgPSB0aGlzLmF0KDApO1xuICAgICAgdGhpcy5yZW1vdmUobW9kZWwsIG9wdGlvbnMpO1xuICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH0sXG5cbiAgICAvLyBTbGljZSBvdXQgYSBzdWItYXJyYXkgb2YgbW9kZWxzIGZyb20gdGhlIGNvbGxlY3Rpb24uXG4gICAgc2xpY2U6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHNsaWNlLmFwcGx5KHRoaXMubW9kZWxzLCBhcmd1bWVudHMpO1xuICAgIH0sXG5cbiAgICAvLyBHZXQgYSBtb2RlbCBmcm9tIHRoZSBzZXQgYnkgaWQuXG4gICAgZ2V0OiBmdW5jdGlvbihvYmopIHtcbiAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICAgIHJldHVybiB0aGlzLl9ieUlkW29iai5pZF0gfHwgdGhpcy5fYnlJZFtvYmouY2lkXSB8fCB0aGlzLl9ieUlkW29ial07XG4gICAgfSxcblxuICAgIC8vIEdldCB0aGUgbW9kZWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuICAgIGF0OiBmdW5jdGlvbihpbmRleCkge1xuICAgICAgcmV0dXJuIHRoaXMubW9kZWxzW2luZGV4XTtcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJuIG1vZGVscyB3aXRoIG1hdGNoaW5nIGF0dHJpYnV0ZXMuIFVzZWZ1bCBmb3Igc2ltcGxlIGNhc2VzIG9mXG4gICAgLy8gYGZpbHRlcmAuXG4gICAgd2hlcmU6IGZ1bmN0aW9uKGF0dHJzLCBmaXJzdCkge1xuICAgICAgaWYgKF8uaXNFbXB0eShhdHRycykpIHJldHVybiBmaXJzdCA/IHZvaWQgMCA6IFtdO1xuICAgICAgcmV0dXJuIHRoaXNbZmlyc3QgPyAnZmluZCcgOiAnZmlsdGVyJ10oZnVuY3Rpb24obW9kZWwpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGF0dHJzKSB7XG4gICAgICAgICAgaWYgKGF0dHJzW2tleV0gIT09IG1vZGVsLmdldChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJuIHRoZSBmaXJzdCBtb2RlbCB3aXRoIG1hdGNoaW5nIGF0dHJpYnV0ZXMuIFVzZWZ1bCBmb3Igc2ltcGxlIGNhc2VzXG4gICAgLy8gb2YgYGZpbmRgLlxuICAgIGZpbmRXaGVyZTogZnVuY3Rpb24oYXR0cnMpIHtcbiAgICAgIHJldHVybiB0aGlzLndoZXJlKGF0dHJzLCB0cnVlKTtcbiAgICB9LFxuXG4gICAgLy8gRm9yY2UgdGhlIGNvbGxlY3Rpb24gdG8gcmUtc29ydCBpdHNlbGYuIFlvdSBkb24ndCBuZWVkIHRvIGNhbGwgdGhpcyB1bmRlclxuICAgIC8vIG5vcm1hbCBjaXJjdW1zdGFuY2VzLCBhcyB0aGUgc2V0IHdpbGwgbWFpbnRhaW4gc29ydCBvcmRlciBhcyBlYWNoIGl0ZW1cbiAgICAvLyBpcyBhZGRlZC5cbiAgICBzb3J0OiBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICBpZiAoIXRoaXMuY29tcGFyYXRvcikgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc29ydCBhIHNldCB3aXRob3V0IGEgY29tcGFyYXRvcicpO1xuICAgICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcblxuICAgICAgLy8gUnVuIHNvcnQgYmFzZWQgb24gdHlwZSBvZiBgY29tcGFyYXRvcmAuXG4gICAgICBpZiAoXy5pc1N0cmluZyh0aGlzLmNvbXBhcmF0b3IpIHx8IHRoaXMuY29tcGFyYXRvci5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdGhpcy5tb2RlbHMgPSB0aGlzLnNvcnRCeSh0aGlzLmNvbXBhcmF0b3IsIHRoaXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tb2RlbHMuc29ydChfLmJpbmQodGhpcy5jb21wYXJhdG9yLCB0aGlzKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHRoaXMudHJpZ2dlcignc29ydCcsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8vIFBsdWNrIGFuIGF0dHJpYnV0ZSBmcm9tIGVhY2ggbW9kZWwgaW4gdGhlIGNvbGxlY3Rpb24uXG4gICAgcGx1Y2s6IGZ1bmN0aW9uKGF0dHIpIHtcbiAgICAgIHJldHVybiBfLmludm9rZSh0aGlzLm1vZGVscywgJ2dldCcsIGF0dHIpO1xuICAgIH0sXG5cbiAgICAvLyBGZXRjaCB0aGUgZGVmYXVsdCBzZXQgb2YgbW9kZWxzIGZvciB0aGlzIGNvbGxlY3Rpb24sIHJlc2V0dGluZyB0aGVcbiAgICAvLyBjb2xsZWN0aW9uIHdoZW4gdGhleSBhcnJpdmUuIElmIGByZXNldDogdHJ1ZWAgaXMgcGFzc2VkLCB0aGUgcmVzcG9uc2VcbiAgICAvLyBkYXRhIHdpbGwgYmUgcGFzc2VkIHRocm91Z2ggdGhlIGByZXNldGAgbWV0aG9kIGluc3RlYWQgb2YgYHNldGAuXG4gICAgZmV0Y2g6IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zID8gXy5jbG9uZShvcHRpb25zKSA6IHt9O1xuICAgICAgaWYgKG9wdGlvbnMucGFyc2UgPT09IHZvaWQgMCkgb3B0aW9ucy5wYXJzZSA9IHRydWU7XG4gICAgICB2YXIgc3VjY2VzcyA9IG9wdGlvbnMuc3VjY2VzcztcbiAgICAgIHZhciBjb2xsZWN0aW9uID0gdGhpcztcbiAgICAgIG9wdGlvbnMuc3VjY2VzcyA9IGZ1bmN0aW9uKHJlc3ApIHtcbiAgICAgICAgdmFyIG1ldGhvZCA9IG9wdGlvbnMucmVzZXQgPyAncmVzZXQnIDogJ3NldCc7XG4gICAgICAgIGNvbGxlY3Rpb25bbWV0aG9kXShyZXNwLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHN1Y2Nlc3MoY29sbGVjdGlvbiwgcmVzcCwgb3B0aW9ucyk7XG4gICAgICAgIGNvbGxlY3Rpb24udHJpZ2dlcignc3luYycsIGNvbGxlY3Rpb24sIHJlc3AsIG9wdGlvbnMpO1xuICAgICAgfTtcbiAgICAgIHdyYXBFcnJvcih0aGlzLCBvcHRpb25zKTtcbiAgICAgIHJldHVybiB0aGlzLnN5bmMoJ3JlYWQnLCB0aGlzLCBvcHRpb25zKTtcbiAgICB9LFxuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGEgbW9kZWwgaW4gdGhpcyBjb2xsZWN0aW9uLiBBZGQgdGhlIG1vZGVsIHRvIHRoZVxuICAgIC8vIGNvbGxlY3Rpb24gaW1tZWRpYXRlbHksIHVubGVzcyBgd2FpdDogdHJ1ZWAgaXMgcGFzc2VkLCBpbiB3aGljaCBjYXNlIHdlXG4gICAgLy8gd2FpdCBmb3IgdGhlIHNlcnZlciB0byBhZ3JlZS5cbiAgICBjcmVhdGU6IGZ1bmN0aW9uKG1vZGVsLCBvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0gb3B0aW9ucyA/IF8uY2xvbmUob3B0aW9ucykgOiB7fTtcbiAgICAgIGlmICghKG1vZGVsID0gdGhpcy5fcHJlcGFyZU1vZGVsKG1vZGVsLCBvcHRpb25zKSkpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICghb3B0aW9ucy53YWl0KSB0aGlzLmFkZChtb2RlbCwgb3B0aW9ucyk7XG4gICAgICB2YXIgY29sbGVjdGlvbiA9IHRoaXM7XG4gICAgICB2YXIgc3VjY2VzcyA9IG9wdGlvbnMuc3VjY2VzcztcbiAgICAgIG9wdGlvbnMuc3VjY2VzcyA9IGZ1bmN0aW9uKG1vZGVsLCByZXNwLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zLndhaXQpIGNvbGxlY3Rpb24uYWRkKG1vZGVsLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHN1Y2Nlc3MobW9kZWwsIHJlc3AsIG9wdGlvbnMpO1xuICAgICAgfTtcbiAgICAgIG1vZGVsLnNhdmUobnVsbCwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gbW9kZWw7XG4gICAgfSxcblxuICAgIC8vICoqcGFyc2UqKiBjb252ZXJ0cyBhIHJlc3BvbnNlIGludG8gYSBsaXN0IG9mIG1vZGVscyB0byBiZSBhZGRlZCB0byB0aGVcbiAgICAvLyBjb2xsZWN0aW9uLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBqdXN0IHRvIHBhc3MgaXQgdGhyb3VnaC5cbiAgICBwYXJzZTogZnVuY3Rpb24ocmVzcCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIHJlc3A7XG4gICAgfSxcblxuICAgIC8vIENyZWF0ZSBhIG5ldyBjb2xsZWN0aW9uIHdpdGggYW4gaWRlbnRpY2FsIGxpc3Qgb2YgbW9kZWxzIGFzIHRoaXMgb25lLlxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLm1vZGVscyk7XG4gICAgfSxcblxuICAgIC8vIFByaXZhdGUgbWV0aG9kIHRvIHJlc2V0IGFsbCBpbnRlcm5hbCBzdGF0ZS4gQ2FsbGVkIHdoZW4gdGhlIGNvbGxlY3Rpb25cbiAgICAvLyBpcyBmaXJzdCBpbml0aWFsaXplZCBvciByZXNldC5cbiAgICBfcmVzZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5sZW5ndGggPSAwO1xuICAgICAgdGhpcy5tb2RlbHMgPSBbXTtcbiAgICAgIHRoaXMuX2J5SWQgID0ge307XG4gICAgfSxcblxuICAgIC8vIFByZXBhcmUgYSBoYXNoIG9mIGF0dHJpYnV0ZXMgKG9yIG90aGVyIG1vZGVsKSB0byBiZSBhZGRlZCB0byB0aGlzXG4gICAgLy8gY29sbGVjdGlvbi5cbiAgICBfcHJlcGFyZU1vZGVsOiBmdW5jdGlvbihhdHRycywgb3B0aW9ucykge1xuICAgICAgaWYgKGF0dHJzIGluc3RhbmNlb2YgTW9kZWwpIHtcbiAgICAgICAgaWYgKCFhdHRycy5jb2xsZWN0aW9uKSBhdHRycy5jb2xsZWN0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGF0dHJzO1xuICAgICAgfVxuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgPyBfLmNsb25lKG9wdGlvbnMpIDoge307XG4gICAgICBvcHRpb25zLmNvbGxlY3Rpb24gPSB0aGlzO1xuICAgICAgdmFyIG1vZGVsID0gbmV3IHRoaXMubW9kZWwoYXR0cnMsIG9wdGlvbnMpO1xuICAgICAgaWYgKCFtb2RlbC52YWxpZGF0aW9uRXJyb3IpIHJldHVybiBtb2RlbDtcbiAgICAgIHRoaXMudHJpZ2dlcignaW52YWxpZCcsIHRoaXMsIG1vZGVsLnZhbGlkYXRpb25FcnJvciwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIC8vIEludGVybmFsIG1ldGhvZCB0byBzZXZlciBhIG1vZGVsJ3MgdGllcyB0byBhIGNvbGxlY3Rpb24uXG4gICAgX3JlbW92ZVJlZmVyZW5jZTogZnVuY3Rpb24obW9kZWwpIHtcbiAgICAgIGlmICh0aGlzID09PSBtb2RlbC5jb2xsZWN0aW9uKSBkZWxldGUgbW9kZWwuY29sbGVjdGlvbjtcbiAgICAgIG1vZGVsLm9mZignYWxsJywgdGhpcy5fb25Nb2RlbEV2ZW50LCB0aGlzKTtcbiAgICB9LFxuXG4gICAgLy8gSW50ZXJuYWwgbWV0aG9kIGNhbGxlZCBldmVyeSB0aW1lIGEgbW9kZWwgaW4gdGhlIHNldCBmaXJlcyBhbiBldmVudC5cbiAgICAvLyBTZXRzIG5lZWQgdG8gdXBkYXRlIHRoZWlyIGluZGV4ZXMgd2hlbiBtb2RlbHMgY2hhbmdlIGlkcy4gQWxsIG90aGVyXG4gICAgLy8gZXZlbnRzIHNpbXBseSBwcm94eSB0aHJvdWdoLiBcImFkZFwiIGFuZCBcInJlbW92ZVwiIGV2ZW50cyB0aGF0IG9yaWdpbmF0ZVxuICAgIC8vIGluIG90aGVyIGNvbGxlY3Rpb25zIGFyZSBpZ25vcmVkLlxuICAgIF9vbk1vZGVsRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50LCBtb2RlbCwgY29sbGVjdGlvbiwgb3B0aW9ucykge1xuICAgICAgaWYgKChldmVudCA9PT0gJ2FkZCcgfHwgZXZlbnQgPT09ICdyZW1vdmUnKSAmJiBjb2xsZWN0aW9uICE9PSB0aGlzKSByZXR1cm47XG4gICAgICBpZiAoZXZlbnQgPT09ICdkZXN0cm95JykgdGhpcy5yZW1vdmUobW9kZWwsIG9wdGlvbnMpO1xuICAgICAgaWYgKG1vZGVsICYmIGV2ZW50ID09PSAnY2hhbmdlOicgKyBtb2RlbC5pZEF0dHJpYnV0ZSkge1xuICAgICAgICBkZWxldGUgdGhpcy5fYnlJZFttb2RlbC5wcmV2aW91cyhtb2RlbC5pZEF0dHJpYnV0ZSldO1xuICAgICAgICBpZiAobW9kZWwuaWQgIT0gbnVsbCkgdGhpcy5fYnlJZFttb2RlbC5pZF0gPSBtb2RlbDtcbiAgICAgIH1cbiAgICAgIHRoaXMudHJpZ2dlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICB9KTtcblxuICAvLyBVbmRlcnNjb3JlIG1ldGhvZHMgdGhhdCB3ZSB3YW50IHRvIGltcGxlbWVudCBvbiB0aGUgQ29sbGVjdGlvbi5cbiAgLy8gOTAlIG9mIHRoZSBjb3JlIHVzZWZ1bG5lc3Mgb2YgQmFja2JvbmUgQ29sbGVjdGlvbnMgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWRcbiAgLy8gcmlnaHQgaGVyZTpcbiAgdmFyIG1ldGhvZHMgPSBbJ2ZvckVhY2gnLCAnZWFjaCcsICdtYXAnLCAnY29sbGVjdCcsICdyZWR1Y2UnLCAnZm9sZGwnLFxuICAgICdpbmplY3QnLCAncmVkdWNlUmlnaHQnLCAnZm9sZHInLCAnZmluZCcsICdkZXRlY3QnLCAnZmlsdGVyJywgJ3NlbGVjdCcsXG4gICAgJ3JlamVjdCcsICdldmVyeScsICdhbGwnLCAnc29tZScsICdhbnknLCAnaW5jbHVkZScsICdjb250YWlucycsICdpbnZva2UnLFxuICAgICdtYXgnLCAnbWluJywgJ3RvQXJyYXknLCAnc2l6ZScsICdmaXJzdCcsICdoZWFkJywgJ3Rha2UnLCAnaW5pdGlhbCcsICdyZXN0JyxcbiAgICAndGFpbCcsICdkcm9wJywgJ2xhc3QnLCAnd2l0aG91dCcsICdkaWZmZXJlbmNlJywgJ2luZGV4T2YnLCAnc2h1ZmZsZScsXG4gICAgJ2xhc3RJbmRleE9mJywgJ2lzRW1wdHknLCAnY2hhaW4nXTtcblxuICAvLyBNaXggaW4gZWFjaCBVbmRlcnNjb3JlIG1ldGhvZCBhcyBhIHByb3h5IHRvIGBDb2xsZWN0aW9uI21vZGVsc2AuXG4gIF8uZWFjaChtZXRob2RzLCBmdW5jdGlvbihtZXRob2QpIHtcbiAgICBDb2xsZWN0aW9uLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgIGFyZ3MudW5zaGlmdCh0aGlzLm1vZGVscyk7XG4gICAgICByZXR1cm4gX1ttZXRob2RdLmFwcGx5KF8sIGFyZ3MpO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIFVuZGVyc2NvcmUgbWV0aG9kcyB0aGF0IHRha2UgYSBwcm9wZXJ0eSBuYW1lIGFzIGFuIGFyZ3VtZW50LlxuICB2YXIgYXR0cmlidXRlTWV0aG9kcyA9IFsnZ3JvdXBCeScsICdjb3VudEJ5JywgJ3NvcnRCeSddO1xuXG4gIC8vIFVzZSBhdHRyaWJ1dGVzIGluc3RlYWQgb2YgcHJvcGVydGllcy5cbiAgXy5lYWNoKGF0dHJpYnV0ZU1ldGhvZHMsIGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgIENvbGxlY3Rpb24ucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCkge1xuICAgICAgdmFyIGl0ZXJhdG9yID0gXy5pc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlIDogZnVuY3Rpb24obW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIG1vZGVsLmdldCh2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIF9bbWV0aG9kXSh0aGlzLm1vZGVscywgaXRlcmF0b3IsIGNvbnRleHQpO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIEJhY2tib25lLlZpZXdcbiAgLy8gLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEJhY2tib25lIFZpZXdzIGFyZSBhbG1vc3QgbW9yZSBjb252ZW50aW9uIHRoYW4gdGhleSBhcmUgYWN0dWFsIGNvZGUuIEEgVmlld1xuICAvLyBpcyBzaW1wbHkgYSBKYXZhU2NyaXB0IG9iamVjdCB0aGF0IHJlcHJlc2VudHMgYSBsb2dpY2FsIGNodW5rIG9mIFVJIGluIHRoZVxuICAvLyBET00uIFRoaXMgbWlnaHQgYmUgYSBzaW5nbGUgaXRlbSwgYW4gZW50aXJlIGxpc3QsIGEgc2lkZWJhciBvciBwYW5lbCwgb3JcbiAgLy8gZXZlbiB0aGUgc3Vycm91bmRpbmcgZnJhbWUgd2hpY2ggd3JhcHMgeW91ciB3aG9sZSBhcHAuIERlZmluaW5nIGEgY2h1bmsgb2ZcbiAgLy8gVUkgYXMgYSAqKlZpZXcqKiBhbGxvd3MgeW91IHRvIGRlZmluZSB5b3VyIERPTSBldmVudHMgZGVjbGFyYXRpdmVseSwgd2l0aG91dFxuICAvLyBoYXZpbmcgdG8gd29ycnkgYWJvdXQgcmVuZGVyIG9yZGVyIC4uLiBhbmQgbWFrZXMgaXQgZWFzeSBmb3IgdGhlIHZpZXcgdG9cbiAgLy8gcmVhY3QgdG8gc3BlY2lmaWMgY2hhbmdlcyBpbiB0aGUgc3RhdGUgb2YgeW91ciBtb2RlbHMuXG5cbiAgLy8gQ3JlYXRpbmcgYSBCYWNrYm9uZS5WaWV3IGNyZWF0ZXMgaXRzIGluaXRpYWwgZWxlbWVudCBvdXRzaWRlIG9mIHRoZSBET00sXG4gIC8vIGlmIGFuIGV4aXN0aW5nIGVsZW1lbnQgaXMgbm90IHByb3ZpZGVkLi4uXG4gIHZhciBWaWV3ID0gQmFja2JvbmUuVmlldyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICB0aGlzLmNpZCA9IF8udW5pcXVlSWQoJ3ZpZXcnKTtcbiAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pO1xuICAgIF8uZXh0ZW5kKHRoaXMsIF8ucGljayhvcHRpb25zLCB2aWV3T3B0aW9ucykpO1xuICAgIHRoaXMuX2Vuc3VyZUVsZW1lbnQoKTtcbiAgICB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLmRlbGVnYXRlRXZlbnRzKCk7XG4gIH07XG5cbiAgLy8gQ2FjaGVkIHJlZ2V4IHRvIHNwbGl0IGtleXMgZm9yIGBkZWxlZ2F0ZWAuXG4gIHZhciBkZWxlZ2F0ZUV2ZW50U3BsaXR0ZXIgPSAvXihcXFMrKVxccyooLiopJC87XG5cbiAgLy8gTGlzdCBvZiB2aWV3IG9wdGlvbnMgdG8gYmUgbWVyZ2VkIGFzIHByb3BlcnRpZXMuXG4gIHZhciB2aWV3T3B0aW9ucyA9IFsnbW9kZWwnLCAnY29sbGVjdGlvbicsICdlbCcsICdpZCcsICdhdHRyaWJ1dGVzJywgJ2NsYXNzTmFtZScsICd0YWdOYW1lJywgJ2V2ZW50cyddO1xuXG4gIC8vIFNldCB1cCBhbGwgaW5oZXJpdGFibGUgKipCYWNrYm9uZS5WaWV3KiogcHJvcGVydGllcyBhbmQgbWV0aG9kcy5cbiAgXy5leHRlbmQoVmlldy5wcm90b3R5cGUsIEV2ZW50cywge1xuXG4gICAgLy8gVGhlIGRlZmF1bHQgYHRhZ05hbWVgIG9mIGEgVmlldydzIGVsZW1lbnQgaXMgYFwiZGl2XCJgLlxuICAgIHRhZ05hbWU6ICdkaXYnLFxuXG4gICAgLy8galF1ZXJ5IGRlbGVnYXRlIGZvciBlbGVtZW50IGxvb2t1cCwgc2NvcGVkIHRvIERPTSBlbGVtZW50cyB3aXRoaW4gdGhlXG4gICAgLy8gY3VycmVudCB2aWV3LiBUaGlzIHNob3VsZCBiZSBwcmVmZXJyZWQgdG8gZ2xvYmFsIGxvb2t1cHMgd2hlcmUgcG9zc2libGUuXG4gICAgJDogZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLiRlbC5maW5kKHNlbGVjdG9yKTtcbiAgICB9LFxuXG4gICAgLy8gSW5pdGlhbGl6ZSBpcyBhbiBlbXB0eSBmdW5jdGlvbiBieSBkZWZhdWx0LiBPdmVycmlkZSBpdCB3aXRoIHlvdXIgb3duXG4gICAgLy8gaW5pdGlhbGl6YXRpb24gbG9naWMuXG4gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKXt9LFxuXG4gICAgLy8gKipyZW5kZXIqKiBpcyB0aGUgY29yZSBmdW5jdGlvbiB0aGF0IHlvdXIgdmlldyBzaG91bGQgb3ZlcnJpZGUsIGluIG9yZGVyXG4gICAgLy8gdG8gcG9wdWxhdGUgaXRzIGVsZW1lbnQgKGB0aGlzLmVsYCksIHdpdGggdGhlIGFwcHJvcHJpYXRlIEhUTUwuIFRoZVxuICAgIC8vIGNvbnZlbnRpb24gaXMgZm9yICoqcmVuZGVyKiogdG8gYWx3YXlzIHJldHVybiBgdGhpc2AuXG4gICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBSZW1vdmUgdGhpcyB2aWV3IGJ5IHRha2luZyB0aGUgZWxlbWVudCBvdXQgb2YgdGhlIERPTSwgYW5kIHJlbW92aW5nIGFueVxuICAgIC8vIGFwcGxpY2FibGUgQmFja2JvbmUuRXZlbnRzIGxpc3RlbmVycy5cbiAgICByZW1vdmU6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy4kZWwucmVtb3ZlKCk7XG4gICAgICB0aGlzLnN0b3BMaXN0ZW5pbmcoKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBDaGFuZ2UgdGhlIHZpZXcncyBlbGVtZW50IChgdGhpcy5lbGAgcHJvcGVydHkpLCBpbmNsdWRpbmcgZXZlbnRcbiAgICAvLyByZS1kZWxlZ2F0aW9uLlxuICAgIHNldEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGRlbGVnYXRlKSB7XG4gICAgICBpZiAodGhpcy4kZWwpIHRoaXMudW5kZWxlZ2F0ZUV2ZW50cygpO1xuICAgICAgdGhpcy4kZWwgPSBlbGVtZW50IGluc3RhbmNlb2YgQmFja2JvbmUuJCA/IGVsZW1lbnQgOiBCYWNrYm9uZS4kKGVsZW1lbnQpO1xuICAgICAgdGhpcy5lbCA9IHRoaXMuJGVsWzBdO1xuICAgICAgaWYgKGRlbGVnYXRlICE9PSBmYWxzZSkgdGhpcy5kZWxlZ2F0ZUV2ZW50cygpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8vIFNldCBjYWxsYmFja3MsIHdoZXJlIGB0aGlzLmV2ZW50c2AgaXMgYSBoYXNoIG9mXG4gICAgLy9cbiAgICAvLyAqe1wiZXZlbnQgc2VsZWN0b3JcIjogXCJjYWxsYmFja1wifSpcbiAgICAvL1xuICAgIC8vICAgICB7XG4gICAgLy8gICAgICAgJ21vdXNlZG93biAudGl0bGUnOiAgJ2VkaXQnLFxuICAgIC8vICAgICAgICdjbGljayAuYnV0dG9uJzogICAgICdzYXZlJyxcbiAgICAvLyAgICAgICAnY2xpY2sgLm9wZW4nOiAgICAgICBmdW5jdGlvbihlKSB7IC4uLiB9XG4gICAgLy8gICAgIH1cbiAgICAvL1xuICAgIC8vIHBhaXJzLiBDYWxsYmFja3Mgd2lsbCBiZSBib3VuZCB0byB0aGUgdmlldywgd2l0aCBgdGhpc2Agc2V0IHByb3Blcmx5LlxuICAgIC8vIFVzZXMgZXZlbnQgZGVsZWdhdGlvbiBmb3IgZWZmaWNpZW5jeS5cbiAgICAvLyBPbWl0dGluZyB0aGUgc2VsZWN0b3IgYmluZHMgdGhlIGV2ZW50IHRvIGB0aGlzLmVsYC5cbiAgICAvLyBUaGlzIG9ubHkgd29ya3MgZm9yIGRlbGVnYXRlLWFibGUgZXZlbnRzOiBub3QgYGZvY3VzYCwgYGJsdXJgLCBhbmRcbiAgICAvLyBub3QgYGNoYW5nZWAsIGBzdWJtaXRgLCBhbmQgYHJlc2V0YCBpbiBJbnRlcm5ldCBFeHBsb3Jlci5cbiAgICBkZWxlZ2F0ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRzKSB7XG4gICAgICBpZiAoIShldmVudHMgfHwgKGV2ZW50cyA9IF8ucmVzdWx0KHRoaXMsICdldmVudHMnKSkpKSByZXR1cm4gdGhpcztcbiAgICAgIHRoaXMudW5kZWxlZ2F0ZUV2ZW50cygpO1xuICAgICAgZm9yICh2YXIga2V5IGluIGV2ZW50cykge1xuICAgICAgICB2YXIgbWV0aG9kID0gZXZlbnRzW2tleV07XG4gICAgICAgIGlmICghXy5pc0Z1bmN0aW9uKG1ldGhvZCkpIG1ldGhvZCA9IHRoaXNbZXZlbnRzW2tleV1dO1xuICAgICAgICBpZiAoIW1ldGhvZCkgY29udGludWU7XG5cbiAgICAgICAgdmFyIG1hdGNoID0ga2V5Lm1hdGNoKGRlbGVnYXRlRXZlbnRTcGxpdHRlcik7XG4gICAgICAgIHZhciBldmVudE5hbWUgPSBtYXRjaFsxXSwgc2VsZWN0b3IgPSBtYXRjaFsyXTtcbiAgICAgICAgbWV0aG9kID0gXy5iaW5kKG1ldGhvZCwgdGhpcyk7XG4gICAgICAgIGV2ZW50TmFtZSArPSAnLmRlbGVnYXRlRXZlbnRzJyArIHRoaXMuY2lkO1xuICAgICAgICBpZiAoc2VsZWN0b3IgPT09ICcnKSB7XG4gICAgICAgICAgdGhpcy4kZWwub24oZXZlbnROYW1lLCBtZXRob2QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJGVsLm9uKGV2ZW50TmFtZSwgc2VsZWN0b3IsIG1ldGhvZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBDbGVhcnMgYWxsIGNhbGxiYWNrcyBwcmV2aW91c2x5IGJvdW5kIHRvIHRoZSB2aWV3IHdpdGggYGRlbGVnYXRlRXZlbnRzYC5cbiAgICAvLyBZb3UgdXN1YWxseSBkb24ndCBuZWVkIHRvIHVzZSB0aGlzLCBidXQgbWF5IHdpc2ggdG8gaWYgeW91IGhhdmUgbXVsdGlwbGVcbiAgICAvLyBCYWNrYm9uZSB2aWV3cyBhdHRhY2hlZCB0byB0aGUgc2FtZSBET00gZWxlbWVudC5cbiAgICB1bmRlbGVnYXRlRXZlbnRzOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuJGVsLm9mZignLmRlbGVnYXRlRXZlbnRzJyArIHRoaXMuY2lkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBFbnN1cmUgdGhhdCB0aGUgVmlldyBoYXMgYSBET00gZWxlbWVudCB0byByZW5kZXIgaW50by5cbiAgICAvLyBJZiBgdGhpcy5lbGAgaXMgYSBzdHJpbmcsIHBhc3MgaXQgdGhyb3VnaCBgJCgpYCwgdGFrZSB0aGUgZmlyc3RcbiAgICAvLyBtYXRjaGluZyBlbGVtZW50LCBhbmQgcmUtYXNzaWduIGl0IHRvIGBlbGAuIE90aGVyd2lzZSwgY3JlYXRlXG4gICAgLy8gYW4gZWxlbWVudCBmcm9tIHRoZSBgaWRgLCBgY2xhc3NOYW1lYCBhbmQgYHRhZ05hbWVgIHByb3BlcnRpZXMuXG4gICAgX2Vuc3VyZUVsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCF0aGlzLmVsKSB7XG4gICAgICAgIHZhciBhdHRycyA9IF8uZXh0ZW5kKHt9LCBfLnJlc3VsdCh0aGlzLCAnYXR0cmlidXRlcycpKTtcbiAgICAgICAgaWYgKHRoaXMuaWQpIGF0dHJzLmlkID0gXy5yZXN1bHQodGhpcywgJ2lkJyk7XG4gICAgICAgIGlmICh0aGlzLmNsYXNzTmFtZSkgYXR0cnNbJ2NsYXNzJ10gPSBfLnJlc3VsdCh0aGlzLCAnY2xhc3NOYW1lJyk7XG4gICAgICAgIHZhciAkZWwgPSBCYWNrYm9uZS4kKCc8JyArIF8ucmVzdWx0KHRoaXMsICd0YWdOYW1lJykgKyAnPicpLmF0dHIoYXR0cnMpO1xuICAgICAgICB0aGlzLnNldEVsZW1lbnQoJGVsLCBmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldEVsZW1lbnQoXy5yZXN1bHQodGhpcywgJ2VsJyksIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfSk7XG5cbiAgLy8gQmFja2JvbmUuc3luY1xuICAvLyAtLS0tLS0tLS0tLS0tXG5cbiAgLy8gT3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byBjaGFuZ2UgdGhlIG1hbm5lciBpbiB3aGljaCBCYWNrYm9uZSBwZXJzaXN0c1xuICAvLyBtb2RlbHMgdG8gdGhlIHNlcnZlci4gWW91IHdpbGwgYmUgcGFzc2VkIHRoZSB0eXBlIG9mIHJlcXVlc3QsIGFuZCB0aGVcbiAgLy8gbW9kZWwgaW4gcXVlc3Rpb24uIEJ5IGRlZmF1bHQsIG1ha2VzIGEgUkVTVGZ1bCBBamF4IHJlcXVlc3RcbiAgLy8gdG8gdGhlIG1vZGVsJ3MgYHVybCgpYC4gU29tZSBwb3NzaWJsZSBjdXN0b21pemF0aW9ucyBjb3VsZCBiZTpcbiAgLy9cbiAgLy8gKiBVc2UgYHNldFRpbWVvdXRgIHRvIGJhdGNoIHJhcGlkLWZpcmUgdXBkYXRlcyBpbnRvIGEgc2luZ2xlIHJlcXVlc3QuXG4gIC8vICogU2VuZCB1cCB0aGUgbW9kZWxzIGFzIFhNTCBpbnN0ZWFkIG9mIEpTT04uXG4gIC8vICogUGVyc2lzdCBtb2RlbHMgdmlhIFdlYlNvY2tldHMgaW5zdGVhZCBvZiBBamF4LlxuICAvL1xuICAvLyBUdXJuIG9uIGBCYWNrYm9uZS5lbXVsYXRlSFRUUGAgaW4gb3JkZXIgdG8gc2VuZCBgUFVUYCBhbmQgYERFTEVURWAgcmVxdWVzdHNcbiAgLy8gYXMgYFBPU1RgLCB3aXRoIGEgYF9tZXRob2RgIHBhcmFtZXRlciBjb250YWluaW5nIHRoZSB0cnVlIEhUVFAgbWV0aG9kLFxuICAvLyBhcyB3ZWxsIGFzIGFsbCByZXF1ZXN0cyB3aXRoIHRoZSBib2R5IGFzIGBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRgXG4gIC8vIGluc3RlYWQgb2YgYGFwcGxpY2F0aW9uL2pzb25gIHdpdGggdGhlIG1vZGVsIGluIGEgcGFyYW0gbmFtZWQgYG1vZGVsYC5cbiAgLy8gVXNlZnVsIHdoZW4gaW50ZXJmYWNpbmcgd2l0aCBzZXJ2ZXItc2lkZSBsYW5ndWFnZXMgbGlrZSAqKlBIUCoqIHRoYXQgbWFrZVxuICAvLyBpdCBkaWZmaWN1bHQgdG8gcmVhZCB0aGUgYm9keSBvZiBgUFVUYCByZXF1ZXN0cy5cbiAgQmFja2JvbmUuc3luYyA9IGZ1bmN0aW9uKG1ldGhvZCwgbW9kZWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgdHlwZSA9IG1ldGhvZE1hcFttZXRob2RdO1xuXG4gICAgLy8gRGVmYXVsdCBvcHRpb25zLCB1bmxlc3Mgc3BlY2lmaWVkLlxuICAgIF8uZGVmYXVsdHMob3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KSwge1xuICAgICAgZW11bGF0ZUhUVFA6IEJhY2tib25lLmVtdWxhdGVIVFRQLFxuICAgICAgZW11bGF0ZUpTT046IEJhY2tib25lLmVtdWxhdGVKU09OXG4gICAgfSk7XG5cbiAgICAvLyBEZWZhdWx0IEpTT04tcmVxdWVzdCBvcHRpb25zLlxuICAgIHZhciBwYXJhbXMgPSB7dHlwZTogdHlwZSwgZGF0YVR5cGU6ICdqc29uJ307XG5cbiAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIGEgVVJMLlxuICAgIGlmICghb3B0aW9ucy51cmwpIHtcbiAgICAgIHBhcmFtcy51cmwgPSBfLnJlc3VsdChtb2RlbCwgJ3VybCcpIHx8IHVybEVycm9yKCk7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgcmVxdWVzdCBkYXRhLlxuICAgIGlmIChvcHRpb25zLmRhdGEgPT0gbnVsbCAmJiBtb2RlbCAmJiAobWV0aG9kID09PSAnY3JlYXRlJyB8fCBtZXRob2QgPT09ICd1cGRhdGUnIHx8IG1ldGhvZCA9PT0gJ3BhdGNoJykpIHtcbiAgICAgIHBhcmFtcy5jb250ZW50VHlwZSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgICAgIHBhcmFtcy5kYXRhID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5hdHRycyB8fCBtb2RlbC50b0pTT04ob3B0aW9ucykpO1xuICAgIH1cblxuICAgIC8vIEZvciBvbGRlciBzZXJ2ZXJzLCBlbXVsYXRlIEpTT04gYnkgZW5jb2RpbmcgdGhlIHJlcXVlc3QgaW50byBhbiBIVE1MLWZvcm0uXG4gICAgaWYgKG9wdGlvbnMuZW11bGF0ZUpTT04pIHtcbiAgICAgIHBhcmFtcy5jb250ZW50VHlwZSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnO1xuICAgICAgcGFyYW1zLmRhdGEgPSBwYXJhbXMuZGF0YSA/IHttb2RlbDogcGFyYW1zLmRhdGF9IDoge307XG4gICAgfVxuXG4gICAgLy8gRm9yIG9sZGVyIHNlcnZlcnMsIGVtdWxhdGUgSFRUUCBieSBtaW1pY2tpbmcgdGhlIEhUVFAgbWV0aG9kIHdpdGggYF9tZXRob2RgXG4gICAgLy8gQW5kIGFuIGBYLUhUVFAtTWV0aG9kLU92ZXJyaWRlYCBoZWFkZXIuXG4gICAgaWYgKG9wdGlvbnMuZW11bGF0ZUhUVFAgJiYgKHR5cGUgPT09ICdQVVQnIHx8IHR5cGUgPT09ICdERUxFVEUnIHx8IHR5cGUgPT09ICdQQVRDSCcpKSB7XG4gICAgICBwYXJhbXMudHlwZSA9ICdQT1NUJztcbiAgICAgIGlmIChvcHRpb25zLmVtdWxhdGVKU09OKSBwYXJhbXMuZGF0YS5fbWV0aG9kID0gdHlwZTtcbiAgICAgIHZhciBiZWZvcmVTZW5kID0gb3B0aW9ucy5iZWZvcmVTZW5kO1xuICAgICAgb3B0aW9ucy5iZWZvcmVTZW5kID0gZnVuY3Rpb24oeGhyKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdYLUhUVFAtTWV0aG9kLU92ZXJyaWRlJywgdHlwZSk7XG4gICAgICAgIGlmIChiZWZvcmVTZW5kKSByZXR1cm4gYmVmb3JlU2VuZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBEb24ndCBwcm9jZXNzIGRhdGEgb24gYSBub24tR0VUIHJlcXVlc3QuXG4gICAgaWYgKHBhcmFtcy50eXBlICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5lbXVsYXRlSlNPTikge1xuICAgICAgcGFyYW1zLnByb2Nlc3NEYXRhID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UncmUgc2VuZGluZyBhIGBQQVRDSGAgcmVxdWVzdCwgYW5kIHdlJ3JlIGluIGFuIG9sZCBJbnRlcm5ldCBFeHBsb3JlclxuICAgIC8vIHRoYXQgc3RpbGwgaGFzIEFjdGl2ZVggZW5hYmxlZCBieSBkZWZhdWx0LCBvdmVycmlkZSBqUXVlcnkgdG8gdXNlIHRoYXRcbiAgICAvLyBmb3IgWEhSIGluc3RlYWQuIFJlbW92ZSB0aGlzIGxpbmUgd2hlbiBqUXVlcnkgc3VwcG9ydHMgYFBBVENIYCBvbiBJRTguXG4gICAgaWYgKHBhcmFtcy50eXBlID09PSAnUEFUQ0gnICYmIG5vWGhyUGF0Y2gpIHtcbiAgICAgIHBhcmFtcy54aHIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KFwiTWljcm9zb2Z0LlhNTEhUVFBcIik7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIE1ha2UgdGhlIHJlcXVlc3QsIGFsbG93aW5nIHRoZSB1c2VyIHRvIG92ZXJyaWRlIGFueSBBamF4IG9wdGlvbnMuXG4gICAgdmFyIHhociA9IG9wdGlvbnMueGhyID0gQmFja2JvbmUuYWpheChfLmV4dGVuZChwYXJhbXMsIG9wdGlvbnMpKTtcbiAgICBtb2RlbC50cmlnZ2VyKCdyZXF1ZXN0JywgbW9kZWwsIHhociwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHhocjtcbiAgfTtcblxuICB2YXIgbm9YaHJQYXRjaCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICEhd2luZG93LkFjdGl2ZVhPYmplY3QgJiYgISh3aW5kb3cuWE1MSHR0cFJlcXVlc3QgJiYgKG5ldyBYTUxIdHRwUmVxdWVzdCkuZGlzcGF0Y2hFdmVudCk7XG5cbiAgLy8gTWFwIGZyb20gQ1JVRCB0byBIVFRQIGZvciBvdXIgZGVmYXVsdCBgQmFja2JvbmUuc3luY2AgaW1wbGVtZW50YXRpb24uXG4gIHZhciBtZXRob2RNYXAgPSB7XG4gICAgJ2NyZWF0ZSc6ICdQT1NUJyxcbiAgICAndXBkYXRlJzogJ1BVVCcsXG4gICAgJ3BhdGNoJzogICdQQVRDSCcsXG4gICAgJ2RlbGV0ZSc6ICdERUxFVEUnLFxuICAgICdyZWFkJzogICAnR0VUJ1xuICB9O1xuXG4gIC8vIFNldCB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBgQmFja2JvbmUuYWpheGAgdG8gcHJveHkgdGhyb3VnaCB0byBgJGAuXG4gIC8vIE92ZXJyaWRlIHRoaXMgaWYgeW91J2QgbGlrZSB0byB1c2UgYSBkaWZmZXJlbnQgbGlicmFyeS5cbiAgQmFja2JvbmUuYWpheCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBCYWNrYm9uZS4kLmFqYXguYXBwbHkoQmFja2JvbmUuJCwgYXJndW1lbnRzKTtcbiAgfTtcblxuICAvLyBCYWNrYm9uZS5Sb3V0ZXJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gUm91dGVycyBtYXAgZmF1eC1VUkxzIHRvIGFjdGlvbnMsIGFuZCBmaXJlIGV2ZW50cyB3aGVuIHJvdXRlcyBhcmVcbiAgLy8gbWF0Y2hlZC4gQ3JlYXRpbmcgYSBuZXcgb25lIHNldHMgaXRzIGByb3V0ZXNgIGhhc2gsIGlmIG5vdCBzZXQgc3RhdGljYWxseS5cbiAgdmFyIFJvdXRlciA9IEJhY2tib25lLlJvdXRlciA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pO1xuICAgIGlmIChvcHRpb25zLnJvdXRlcykgdGhpcy5yb3V0ZXMgPSBvcHRpb25zLnJvdXRlcztcbiAgICB0aGlzLl9iaW5kUm91dGVzKCk7XG4gICAgdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgLy8gQ2FjaGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIG1hdGNoaW5nIG5hbWVkIHBhcmFtIHBhcnRzIGFuZCBzcGxhdHRlZFxuICAvLyBwYXJ0cyBvZiByb3V0ZSBzdHJpbmdzLlxuICB2YXIgb3B0aW9uYWxQYXJhbSA9IC9cXCgoLio/KVxcKS9nO1xuICB2YXIgbmFtZWRQYXJhbSAgICA9IC8oXFwoXFw/KT86XFx3Ky9nO1xuICB2YXIgc3BsYXRQYXJhbSAgICA9IC9cXCpcXHcrL2c7XG4gIHZhciBlc2NhcGVSZWdFeHAgID0gL1tcXC17fVxcW1xcXSs/LixcXFxcXFxeJHwjXFxzXS9nO1xuXG4gIC8vIFNldCB1cCBhbGwgaW5oZXJpdGFibGUgKipCYWNrYm9uZS5Sb3V0ZXIqKiBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxuICBfLmV4dGVuZChSb3V0ZXIucHJvdG90eXBlLCBFdmVudHMsIHtcblxuICAgIC8vIEluaXRpYWxpemUgaXMgYW4gZW1wdHkgZnVuY3Rpb24gYnkgZGVmYXVsdC4gT3ZlcnJpZGUgaXQgd2l0aCB5b3VyIG93blxuICAgIC8vIGluaXRpYWxpemF0aW9uIGxvZ2ljLlxuICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCl7fSxcblxuICAgIC8vIE1hbnVhbGx5IGJpbmQgYSBzaW5nbGUgbmFtZWQgcm91dGUgdG8gYSBjYWxsYmFjay4gRm9yIGV4YW1wbGU6XG4gICAgLy9cbiAgICAvLyAgICAgdGhpcy5yb3V0ZSgnc2VhcmNoLzpxdWVyeS9wOm51bScsICdzZWFyY2gnLCBmdW5jdGlvbihxdWVyeSwgbnVtKSB7XG4gICAgLy8gICAgICAgLi4uXG4gICAgLy8gICAgIH0pO1xuICAgIC8vXG4gICAgcm91dGU6IGZ1bmN0aW9uKHJvdXRlLCBuYW1lLCBjYWxsYmFjaykge1xuICAgICAgaWYgKCFfLmlzUmVnRXhwKHJvdXRlKSkgcm91dGUgPSB0aGlzLl9yb3V0ZVRvUmVnRXhwKHJvdXRlKTtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24obmFtZSkpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBuYW1lO1xuICAgICAgICBuYW1lID0gJyc7XG4gICAgICB9XG4gICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IHRoaXNbbmFtZV07XG4gICAgICB2YXIgcm91dGVyID0gdGhpcztcbiAgICAgIEJhY2tib25lLmhpc3Rvcnkucm91dGUocm91dGUsIGZ1bmN0aW9uKGZyYWdtZW50KSB7XG4gICAgICAgIHZhciBhcmdzID0gcm91dGVyLl9leHRyYWN0UGFyYW1ldGVycyhyb3V0ZSwgZnJhZ21lbnQpO1xuICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjay5hcHBseShyb3V0ZXIsIGFyZ3MpO1xuICAgICAgICByb3V0ZXIudHJpZ2dlci5hcHBseShyb3V0ZXIsIFsncm91dGU6JyArIG5hbWVdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIHJvdXRlci50cmlnZ2VyKCdyb3V0ZScsIG5hbWUsIGFyZ3MpO1xuICAgICAgICBCYWNrYm9uZS5oaXN0b3J5LnRyaWdnZXIoJ3JvdXRlJywgcm91dGVyLCBuYW1lLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8vIFNpbXBsZSBwcm94eSB0byBgQmFja2JvbmUuaGlzdG9yeWAgdG8gc2F2ZSBhIGZyYWdtZW50IGludG8gdGhlIGhpc3RvcnkuXG4gICAgbmF2aWdhdGU6IGZ1bmN0aW9uKGZyYWdtZW50LCBvcHRpb25zKSB7XG4gICAgICBCYWNrYm9uZS5oaXN0b3J5Lm5hdmlnYXRlKGZyYWdtZW50LCBvcHRpb25zKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBCaW5kIGFsbCBkZWZpbmVkIHJvdXRlcyB0byBgQmFja2JvbmUuaGlzdG9yeWAuIFdlIGhhdmUgdG8gcmV2ZXJzZSB0aGVcbiAgICAvLyBvcmRlciBvZiB0aGUgcm91dGVzIGhlcmUgdG8gc3VwcG9ydCBiZWhhdmlvciB3aGVyZSB0aGUgbW9zdCBnZW5lcmFsXG4gICAgLy8gcm91dGVzIGNhbiBiZSBkZWZpbmVkIGF0IHRoZSBib3R0b20gb2YgdGhlIHJvdXRlIG1hcC5cbiAgICBfYmluZFJvdXRlczogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoIXRoaXMucm91dGVzKSByZXR1cm47XG4gICAgICB0aGlzLnJvdXRlcyA9IF8ucmVzdWx0KHRoaXMsICdyb3V0ZXMnKTtcbiAgICAgIHZhciByb3V0ZSwgcm91dGVzID0gXy5rZXlzKHRoaXMucm91dGVzKTtcbiAgICAgIHdoaWxlICgocm91dGUgPSByb3V0ZXMucG9wKCkpICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5yb3V0ZShyb3V0ZSwgdGhpcy5yb3V0ZXNbcm91dGVdKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ29udmVydCBhIHJvdXRlIHN0cmluZyBpbnRvIGEgcmVndWxhciBleHByZXNzaW9uLCBzdWl0YWJsZSBmb3IgbWF0Y2hpbmdcbiAgICAvLyBhZ2FpbnN0IHRoZSBjdXJyZW50IGxvY2F0aW9uIGhhc2guXG4gICAgX3JvdXRlVG9SZWdFeHA6IGZ1bmN0aW9uKHJvdXRlKSB7XG4gICAgICByb3V0ZSA9IHJvdXRlLnJlcGxhY2UoZXNjYXBlUmVnRXhwLCAnXFxcXCQmJylcbiAgICAgICAgICAgICAgICAgICAucmVwbGFjZShvcHRpb25hbFBhcmFtLCAnKD86JDEpPycpXG4gICAgICAgICAgICAgICAgICAgLnJlcGxhY2UobmFtZWRQYXJhbSwgZnVuY3Rpb24obWF0Y2gsIG9wdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uYWwgPyBtYXRjaCA6ICcoW15cXC9dKyknO1xuICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgLnJlcGxhY2Uoc3BsYXRQYXJhbSwgJyguKj8pJyk7XG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cCgnXicgKyByb3V0ZSArICckJyk7XG4gICAgfSxcblxuICAgIC8vIEdpdmVuIGEgcm91dGUsIGFuZCBhIFVSTCBmcmFnbWVudCB0aGF0IGl0IG1hdGNoZXMsIHJldHVybiB0aGUgYXJyYXkgb2ZcbiAgICAvLyBleHRyYWN0ZWQgZGVjb2RlZCBwYXJhbWV0ZXJzLiBFbXB0eSBvciB1bm1hdGNoZWQgcGFyYW1ldGVycyB3aWxsIGJlXG4gICAgLy8gdHJlYXRlZCBhcyBgbnVsbGAgdG8gbm9ybWFsaXplIGNyb3NzLWJyb3dzZXIgYmVoYXZpb3IuXG4gICAgX2V4dHJhY3RQYXJhbWV0ZXJzOiBmdW5jdGlvbihyb3V0ZSwgZnJhZ21lbnQpIHtcbiAgICAgIHZhciBwYXJhbXMgPSByb3V0ZS5leGVjKGZyYWdtZW50KS5zbGljZSgxKTtcbiAgICAgIHJldHVybiBfLm1hcChwYXJhbXMsIGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgICAgIHJldHVybiBwYXJhbSA/IGRlY29kZVVSSUNvbXBvbmVudChwYXJhbSkgOiBudWxsO1xuICAgICAgfSk7XG4gICAgfVxuXG4gIH0pO1xuXG4gIC8vIEJhY2tib25lLkhpc3RvcnlcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEhhbmRsZXMgY3Jvc3MtYnJvd3NlciBoaXN0b3J5IG1hbmFnZW1lbnQsIGJhc2VkIG9uIGVpdGhlclxuICAvLyBbcHVzaFN0YXRlXShodHRwOi8vZGl2ZWludG9odG1sNS5pbmZvL2hpc3RvcnkuaHRtbCkgYW5kIHJlYWwgVVJMcywgb3JcbiAgLy8gW29uaGFzaGNoYW5nZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9ET00vd2luZG93Lm9uaGFzaGNoYW5nZSlcbiAgLy8gYW5kIFVSTCBmcmFnbWVudHMuIElmIHRoZSBicm93c2VyIHN1cHBvcnRzIG5laXRoZXIgKG9sZCBJRSwgbmF0Y2gpLFxuICAvLyBmYWxscyBiYWNrIHRvIHBvbGxpbmcuXG4gIHZhciBIaXN0b3J5ID0gQmFja2JvbmUuSGlzdG9yeSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgICBfLmJpbmRBbGwodGhpcywgJ2NoZWNrVXJsJyk7XG5cbiAgICAvLyBFbnN1cmUgdGhhdCBgSGlzdG9yeWAgY2FuIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgYnJvd3Nlci5cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMubG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG4gICAgICB0aGlzLmhpc3RvcnkgPSB3aW5kb3cuaGlzdG9yeTtcbiAgICB9XG4gIH07XG5cbiAgLy8gQ2FjaGVkIHJlZ2V4IGZvciBzdHJpcHBpbmcgYSBsZWFkaW5nIGhhc2gvc2xhc2ggYW5kIHRyYWlsaW5nIHNwYWNlLlxuICB2YXIgcm91dGVTdHJpcHBlciA9IC9eWyNcXC9dfFxccyskL2c7XG5cbiAgLy8gQ2FjaGVkIHJlZ2V4IGZvciBzdHJpcHBpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2hlcy5cbiAgdmFyIHJvb3RTdHJpcHBlciA9IC9eXFwvK3xcXC8rJC9nO1xuXG4gIC8vIENhY2hlZCByZWdleCBmb3IgZGV0ZWN0aW5nIE1TSUUuXG4gIHZhciBpc0V4cGxvcmVyID0gL21zaWUgW1xcdy5dKy87XG5cbiAgLy8gQ2FjaGVkIHJlZ2V4IGZvciByZW1vdmluZyBhIHRyYWlsaW5nIHNsYXNoLlxuICB2YXIgdHJhaWxpbmdTbGFzaCA9IC9cXC8kLztcblxuICAvLyBDYWNoZWQgcmVnZXggZm9yIHN0cmlwcGluZyB1cmxzIG9mIGhhc2ggYW5kIHF1ZXJ5LlxuICB2YXIgcGF0aFN0cmlwcGVyID0gL1s/I10uKiQvO1xuXG4gIC8vIEhhcyB0aGUgaGlzdG9yeSBoYW5kbGluZyBhbHJlYWR5IGJlZW4gc3RhcnRlZD9cbiAgSGlzdG9yeS5zdGFydGVkID0gZmFsc2U7XG5cbiAgLy8gU2V0IHVwIGFsbCBpbmhlcml0YWJsZSAqKkJhY2tib25lLkhpc3RvcnkqKiBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxuICBfLmV4dGVuZChIaXN0b3J5LnByb3RvdHlwZSwgRXZlbnRzLCB7XG5cbiAgICAvLyBUaGUgZGVmYXVsdCBpbnRlcnZhbCB0byBwb2xsIGZvciBoYXNoIGNoYW5nZXMsIGlmIG5lY2Vzc2FyeSwgaXNcbiAgICAvLyB0d2VudHkgdGltZXMgYSBzZWNvbmQuXG4gICAgaW50ZXJ2YWw6IDUwLFxuXG4gICAgLy8gR2V0cyB0aGUgdHJ1ZSBoYXNoIHZhbHVlLiBDYW5ub3QgdXNlIGxvY2F0aW9uLmhhc2ggZGlyZWN0bHkgZHVlIHRvIGJ1Z1xuICAgIC8vIGluIEZpcmVmb3ggd2hlcmUgbG9jYXRpb24uaGFzaCB3aWxsIGFsd2F5cyBiZSBkZWNvZGVkLlxuICAgIGdldEhhc2g6IGZ1bmN0aW9uKHdpbmRvdykge1xuICAgICAgdmFyIG1hdGNoID0gKHdpbmRvdyB8fCB0aGlzKS5sb2NhdGlvbi5ocmVmLm1hdGNoKC8jKC4qKSQvKTtcbiAgICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJyc7XG4gICAgfSxcblxuICAgIC8vIEdldCB0aGUgY3Jvc3MtYnJvd3NlciBub3JtYWxpemVkIFVSTCBmcmFnbWVudCwgZWl0aGVyIGZyb20gdGhlIFVSTCxcbiAgICAvLyB0aGUgaGFzaCwgb3IgdGhlIG92ZXJyaWRlLlxuICAgIGdldEZyYWdtZW50OiBmdW5jdGlvbihmcmFnbWVudCwgZm9yY2VQdXNoU3RhdGUpIHtcbiAgICAgIGlmIChmcmFnbWVudCA9PSBudWxsKSB7XG4gICAgICAgIGlmICh0aGlzLl9oYXNQdXNoU3RhdGUgfHwgIXRoaXMuX3dhbnRzSGFzaENoYW5nZSB8fCBmb3JjZVB1c2hTdGF0ZSkge1xuICAgICAgICAgIGZyYWdtZW50ID0gdGhpcy5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICAgICAgICB2YXIgcm9vdCA9IHRoaXMucm9vdC5yZXBsYWNlKHRyYWlsaW5nU2xhc2gsICcnKTtcbiAgICAgICAgICBpZiAoIWZyYWdtZW50LmluZGV4T2Yocm9vdCkpIGZyYWdtZW50ID0gZnJhZ21lbnQuc2xpY2Uocm9vdC5sZW5ndGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZyYWdtZW50ID0gdGhpcy5nZXRIYXNoKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmcmFnbWVudC5yZXBsYWNlKHJvdXRlU3RyaXBwZXIsICcnKTtcbiAgICB9LFxuXG4gICAgLy8gU3RhcnQgdGhlIGhhc2ggY2hhbmdlIGhhbmRsaW5nLCByZXR1cm5pbmcgYHRydWVgIGlmIHRoZSBjdXJyZW50IFVSTCBtYXRjaGVzXG4gICAgLy8gYW4gZXhpc3Rpbmcgcm91dGUsIGFuZCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICBzdGFydDogZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgaWYgKEhpc3Rvcnkuc3RhcnRlZCkgdGhyb3cgbmV3IEVycm9yKFwiQmFja2JvbmUuaGlzdG9yeSBoYXMgYWxyZWFkeSBiZWVuIHN0YXJ0ZWRcIik7XG4gICAgICBIaXN0b3J5LnN0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgICAvLyBGaWd1cmUgb3V0IHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24uIERvIHdlIG5lZWQgYW4gaWZyYW1lP1xuICAgICAgLy8gSXMgcHVzaFN0YXRlIGRlc2lyZWQgLi4uIGlzIGl0IGF2YWlsYWJsZT9cbiAgICAgIHRoaXMub3B0aW9ucyAgICAgICAgICA9IF8uZXh0ZW5kKHtyb290OiAnLyd9LCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgdGhpcy5yb290ICAgICAgICAgICAgID0gdGhpcy5vcHRpb25zLnJvb3Q7XG4gICAgICB0aGlzLl93YW50c0hhc2hDaGFuZ2UgPSB0aGlzLm9wdGlvbnMuaGFzaENoYW5nZSAhPT0gZmFsc2U7XG4gICAgICB0aGlzLl93YW50c1B1c2hTdGF0ZSAgPSAhIXRoaXMub3B0aW9ucy5wdXNoU3RhdGU7XG4gICAgICB0aGlzLl9oYXNQdXNoU3RhdGUgICAgPSAhISh0aGlzLm9wdGlvbnMucHVzaFN0YXRlICYmIHRoaXMuaGlzdG9yeSAmJiB0aGlzLmhpc3RvcnkucHVzaFN0YXRlKTtcbiAgICAgIHZhciBmcmFnbWVudCAgICAgICAgICA9IHRoaXMuZ2V0RnJhZ21lbnQoKTtcbiAgICAgIHZhciBkb2NNb2RlICAgICAgICAgICA9IGRvY3VtZW50LmRvY3VtZW50TW9kZTtcbiAgICAgIHZhciBvbGRJRSAgICAgICAgICAgICA9IChpc0V4cGxvcmVyLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKSAmJiAoIWRvY01vZGUgfHwgZG9jTW9kZSA8PSA3KSk7XG5cbiAgICAgIC8vIE5vcm1hbGl6ZSByb290IHRvIGFsd2F5cyBpbmNsdWRlIGEgbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2guXG4gICAgICB0aGlzLnJvb3QgPSAoJy8nICsgdGhpcy5yb290ICsgJy8nKS5yZXBsYWNlKHJvb3RTdHJpcHBlciwgJy8nKTtcblxuICAgICAgaWYgKG9sZElFICYmIHRoaXMuX3dhbnRzSGFzaENoYW5nZSkge1xuICAgICAgICB0aGlzLmlmcmFtZSA9IEJhY2tib25lLiQoJzxpZnJhbWUgc3JjPVwiamF2YXNjcmlwdDowXCIgdGFiaW5kZXg9XCItMVwiIC8+JykuaGlkZSgpLmFwcGVuZFRvKCdib2R5JylbMF0uY29udGVudFdpbmRvdztcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZShmcmFnbWVudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIERlcGVuZGluZyBvbiB3aGV0aGVyIHdlJ3JlIHVzaW5nIHB1c2hTdGF0ZSBvciBoYXNoZXMsIGFuZCB3aGV0aGVyXG4gICAgICAvLyAnb25oYXNoY2hhbmdlJyBpcyBzdXBwb3J0ZWQsIGRldGVybWluZSBob3cgd2UgY2hlY2sgdGhlIFVSTCBzdGF0ZS5cbiAgICAgIGlmICh0aGlzLl9oYXNQdXNoU3RhdGUpIHtcbiAgICAgICAgQmFja2JvbmUuJCh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIHRoaXMuY2hlY2tVcmwpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl93YW50c0hhc2hDaGFuZ2UgJiYgKCdvbmhhc2hjaGFuZ2UnIGluIHdpbmRvdykgJiYgIW9sZElFKSB7XG4gICAgICAgIEJhY2tib25lLiQod2luZG93KS5vbignaGFzaGNoYW5nZScsIHRoaXMuY2hlY2tVcmwpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl93YW50c0hhc2hDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tVcmxJbnRlcnZhbCA9IHNldEludGVydmFsKHRoaXMuY2hlY2tVcmwsIHRoaXMuaW50ZXJ2YWwpO1xuICAgICAgfVxuXG4gICAgICAvLyBEZXRlcm1pbmUgaWYgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIGJhc2UgdXJsLCBmb3IgYSBwdXNoU3RhdGUgbGlua1xuICAgICAgLy8gb3BlbmVkIGJ5IGEgbm9uLXB1c2hTdGF0ZSBicm93c2VyLlxuICAgICAgdGhpcy5mcmFnbWVudCA9IGZyYWdtZW50O1xuICAgICAgdmFyIGxvYyA9IHRoaXMubG9jYXRpb247XG4gICAgICB2YXIgYXRSb290ID0gbG9jLnBhdGhuYW1lLnJlcGxhY2UoL1teXFwvXSQvLCAnJCYvJykgPT09IHRoaXMucm9vdDtcblxuICAgICAgLy8gVHJhbnNpdGlvbiBmcm9tIGhhc2hDaGFuZ2UgdG8gcHVzaFN0YXRlIG9yIHZpY2UgdmVyc2EgaWYgYm90aCBhcmVcbiAgICAgIC8vIHJlcXVlc3RlZC5cbiAgICAgIGlmICh0aGlzLl93YW50c0hhc2hDaGFuZ2UgJiYgdGhpcy5fd2FudHNQdXNoU3RhdGUpIHtcblxuICAgICAgICAvLyBJZiB3ZSd2ZSBzdGFydGVkIG9mZiB3aXRoIGEgcm91dGUgZnJvbSBhIGBwdXNoU3RhdGVgLWVuYWJsZWRcbiAgICAgICAgLy8gYnJvd3NlciwgYnV0IHdlJ3JlIGN1cnJlbnRseSBpbiBhIGJyb3dzZXIgdGhhdCBkb2Vzbid0IHN1cHBvcnQgaXQuLi5cbiAgICAgICAgaWYgKCF0aGlzLl9oYXNQdXNoU3RhdGUgJiYgIWF0Um9vdCkge1xuICAgICAgICAgIHRoaXMuZnJhZ21lbnQgPSB0aGlzLmdldEZyYWdtZW50KG51bGwsIHRydWUpO1xuICAgICAgICAgIHRoaXMubG9jYXRpb24ucmVwbGFjZSh0aGlzLnJvb3QgKyB0aGlzLmxvY2F0aW9uLnNlYXJjaCArICcjJyArIHRoaXMuZnJhZ21lbnQpO1xuICAgICAgICAgIC8vIFJldHVybiBpbW1lZGlhdGVseSBhcyBicm93c2VyIHdpbGwgZG8gcmVkaXJlY3QgdG8gbmV3IHVybFxuICAgICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICAgIC8vIE9yIGlmIHdlJ3ZlIHN0YXJ0ZWQgb3V0IHdpdGggYSBoYXNoLWJhc2VkIHJvdXRlLCBidXQgd2UncmUgY3VycmVudGx5XG4gICAgICAgIC8vIGluIGEgYnJvd3NlciB3aGVyZSBpdCBjb3VsZCBiZSBgcHVzaFN0YXRlYC1iYXNlZCBpbnN0ZWFkLi4uXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5faGFzUHVzaFN0YXRlICYmIGF0Um9vdCAmJiBsb2MuaGFzaCkge1xuICAgICAgICAgIHRoaXMuZnJhZ21lbnQgPSB0aGlzLmdldEhhc2goKS5yZXBsYWNlKHJvdXRlU3RyaXBwZXIsICcnKTtcbiAgICAgICAgICB0aGlzLmhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCBkb2N1bWVudC50aXRsZSwgdGhpcy5yb290ICsgdGhpcy5mcmFnbWVudCArIGxvYy5zZWFyY2gpO1xuICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc2lsZW50KSByZXR1cm4gdGhpcy5sb2FkVXJsKCk7XG4gICAgfSxcblxuICAgIC8vIERpc2FibGUgQmFja2JvbmUuaGlzdG9yeSwgcGVyaGFwcyB0ZW1wb3JhcmlseS4gTm90IHVzZWZ1bCBpbiBhIHJlYWwgYXBwLFxuICAgIC8vIGJ1dCBwb3NzaWJseSB1c2VmdWwgZm9yIHVuaXQgdGVzdGluZyBSb3V0ZXJzLlxuICAgIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgICAgQmFja2JvbmUuJCh3aW5kb3cpLm9mZigncG9wc3RhdGUnLCB0aGlzLmNoZWNrVXJsKS5vZmYoJ2hhc2hjaGFuZ2UnLCB0aGlzLmNoZWNrVXJsKTtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fY2hlY2tVcmxJbnRlcnZhbCk7XG4gICAgICBIaXN0b3J5LnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgLy8gQWRkIGEgcm91dGUgdG8gYmUgdGVzdGVkIHdoZW4gdGhlIGZyYWdtZW50IGNoYW5nZXMuIFJvdXRlcyBhZGRlZCBsYXRlclxuICAgIC8vIG1heSBvdmVycmlkZSBwcmV2aW91cyByb3V0ZXMuXG4gICAgcm91dGU6IGZ1bmN0aW9uKHJvdXRlLCBjYWxsYmFjaykge1xuICAgICAgdGhpcy5oYW5kbGVycy51bnNoaWZ0KHtyb3V0ZTogcm91dGUsIGNhbGxiYWNrOiBjYWxsYmFja30pO1xuICAgIH0sXG5cbiAgICAvLyBDaGVja3MgdGhlIGN1cnJlbnQgVVJMIHRvIHNlZSBpZiBpdCBoYXMgY2hhbmdlZCwgYW5kIGlmIGl0IGhhcyxcbiAgICAvLyBjYWxscyBgbG9hZFVybGAsIG5vcm1hbGl6aW5nIGFjcm9zcyB0aGUgaGlkZGVuIGlmcmFtZS5cbiAgICBjaGVja1VybDogZnVuY3Rpb24oZSkge1xuICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmdldEZyYWdtZW50KCk7XG4gICAgICBpZiAoY3VycmVudCA9PT0gdGhpcy5mcmFnbWVudCAmJiB0aGlzLmlmcmFtZSkge1xuICAgICAgICBjdXJyZW50ID0gdGhpcy5nZXRGcmFnbWVudCh0aGlzLmdldEhhc2godGhpcy5pZnJhbWUpKTtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50ID09PSB0aGlzLmZyYWdtZW50KSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAodGhpcy5pZnJhbWUpIHRoaXMubmF2aWdhdGUoY3VycmVudCk7XG4gICAgICB0aGlzLmxvYWRVcmwoKTtcbiAgICB9LFxuXG4gICAgLy8gQXR0ZW1wdCB0byBsb2FkIHRoZSBjdXJyZW50IFVSTCBmcmFnbWVudC4gSWYgYSByb3V0ZSBzdWNjZWVkcyB3aXRoIGFcbiAgICAvLyBtYXRjaCwgcmV0dXJucyBgdHJ1ZWAuIElmIG5vIGRlZmluZWQgcm91dGVzIG1hdGNoZXMgdGhlIGZyYWdtZW50LFxuICAgIC8vIHJldHVybnMgYGZhbHNlYC5cbiAgICBsb2FkVXJsOiBmdW5jdGlvbihmcmFnbWVudCkge1xuICAgICAgZnJhZ21lbnQgPSB0aGlzLmZyYWdtZW50ID0gdGhpcy5nZXRGcmFnbWVudChmcmFnbWVudCk7XG4gICAgICByZXR1cm4gXy5hbnkodGhpcy5oYW5kbGVycywgZnVuY3Rpb24oaGFuZGxlcikge1xuICAgICAgICBpZiAoaGFuZGxlci5yb3V0ZS50ZXN0KGZyYWdtZW50KSkge1xuICAgICAgICAgIGhhbmRsZXIuY2FsbGJhY2soZnJhZ21lbnQpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgLy8gU2F2ZSBhIGZyYWdtZW50IGludG8gdGhlIGhhc2ggaGlzdG9yeSwgb3IgcmVwbGFjZSB0aGUgVVJMIHN0YXRlIGlmIHRoZVxuICAgIC8vICdyZXBsYWNlJyBvcHRpb24gaXMgcGFzc2VkLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBwcm9wZXJseSBVUkwtZW5jb2RpbmdcbiAgICAvLyB0aGUgZnJhZ21lbnQgaW4gYWR2YW5jZS5cbiAgICAvL1xuICAgIC8vIFRoZSBvcHRpb25zIG9iamVjdCBjYW4gY29udGFpbiBgdHJpZ2dlcjogdHJ1ZWAgaWYgeW91IHdpc2ggdG8gaGF2ZSB0aGVcbiAgICAvLyByb3V0ZSBjYWxsYmFjayBiZSBmaXJlZCAobm90IHVzdWFsbHkgZGVzaXJhYmxlKSwgb3IgYHJlcGxhY2U6IHRydWVgLCBpZlxuICAgIC8vIHlvdSB3aXNoIHRvIG1vZGlmeSB0aGUgY3VycmVudCBVUkwgd2l0aG91dCBhZGRpbmcgYW4gZW50cnkgdG8gdGhlIGhpc3RvcnkuXG4gICAgbmF2aWdhdGU6IGZ1bmN0aW9uKGZyYWdtZW50LCBvcHRpb25zKSB7XG4gICAgICBpZiAoIUhpc3Rvcnkuc3RhcnRlZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMgPT09IHRydWUpIG9wdGlvbnMgPSB7dHJpZ2dlcjogISFvcHRpb25zfTtcblxuICAgICAgdmFyIHVybCA9IHRoaXMucm9vdCArIChmcmFnbWVudCA9IHRoaXMuZ2V0RnJhZ21lbnQoZnJhZ21lbnQgfHwgJycpKTtcblxuICAgICAgLy8gU3RyaXAgdGhlIGZyYWdtZW50IG9mIHRoZSBxdWVyeSBhbmQgaGFzaCBmb3IgbWF0Y2hpbmcuXG4gICAgICBmcmFnbWVudCA9IGZyYWdtZW50LnJlcGxhY2UocGF0aFN0cmlwcGVyLCAnJyk7XG5cbiAgICAgIGlmICh0aGlzLmZyYWdtZW50ID09PSBmcmFnbWVudCkgcmV0dXJuO1xuICAgICAgdGhpcy5mcmFnbWVudCA9IGZyYWdtZW50O1xuXG4gICAgICAvLyBEb24ndCBpbmNsdWRlIGEgdHJhaWxpbmcgc2xhc2ggb24gdGhlIHJvb3QuXG4gICAgICBpZiAoZnJhZ21lbnQgPT09ICcnICYmIHVybCAhPT0gJy8nKSB1cmwgPSB1cmwuc2xpY2UoMCwgLTEpO1xuXG4gICAgICAvLyBJZiBwdXNoU3RhdGUgaXMgYXZhaWxhYmxlLCB3ZSB1c2UgaXQgdG8gc2V0IHRoZSBmcmFnbWVudCBhcyBhIHJlYWwgVVJMLlxuICAgICAgaWYgKHRoaXMuX2hhc1B1c2hTdGF0ZSkge1xuICAgICAgICB0aGlzLmhpc3Rvcnlbb3B0aW9ucy5yZXBsYWNlID8gJ3JlcGxhY2VTdGF0ZScgOiAncHVzaFN0YXRlJ10oe30sIGRvY3VtZW50LnRpdGxlLCB1cmwpO1xuXG4gICAgICAvLyBJZiBoYXNoIGNoYW5nZXMgaGF2ZW4ndCBiZWVuIGV4cGxpY2l0bHkgZGlzYWJsZWQsIHVwZGF0ZSB0aGUgaGFzaFxuICAgICAgLy8gZnJhZ21lbnQgdG8gc3RvcmUgaGlzdG9yeS5cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fd2FudHNIYXNoQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUhhc2godGhpcy5sb2NhdGlvbiwgZnJhZ21lbnQsIG9wdGlvbnMucmVwbGFjZSk7XG4gICAgICAgIGlmICh0aGlzLmlmcmFtZSAmJiAoZnJhZ21lbnQgIT09IHRoaXMuZ2V0RnJhZ21lbnQodGhpcy5nZXRIYXNoKHRoaXMuaWZyYW1lKSkpKSB7XG4gICAgICAgICAgLy8gT3BlbmluZyBhbmQgY2xvc2luZyB0aGUgaWZyYW1lIHRyaWNrcyBJRTcgYW5kIGVhcmxpZXIgdG8gcHVzaCBhXG4gICAgICAgICAgLy8gaGlzdG9yeSBlbnRyeSBvbiBoYXNoLXRhZyBjaGFuZ2UuICBXaGVuIHJlcGxhY2UgaXMgdHJ1ZSwgd2UgZG9uJ3RcbiAgICAgICAgICAvLyB3YW50IHRoaXMuXG4gICAgICAgICAgaWYoIW9wdGlvbnMucmVwbGFjZSkgdGhpcy5pZnJhbWUuZG9jdW1lbnQub3BlbigpLmNsb3NlKCk7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlSGFzaCh0aGlzLmlmcmFtZS5sb2NhdGlvbiwgZnJhZ21lbnQsIG9wdGlvbnMucmVwbGFjZSk7XG4gICAgICAgIH1cblxuICAgICAgLy8gSWYgeW91J3ZlIHRvbGQgdXMgdGhhdCB5b3UgZXhwbGljaXRseSBkb24ndCB3YW50IGZhbGxiYWNrIGhhc2hjaGFuZ2UtXG4gICAgICAvLyBiYXNlZCBoaXN0b3J5LCB0aGVuIGBuYXZpZ2F0ZWAgYmVjb21lcyBhIHBhZ2UgcmVmcmVzaC5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2F0aW9uLmFzc2lnbih1cmwpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMudHJpZ2dlcikgcmV0dXJuIHRoaXMubG9hZFVybChmcmFnbWVudCk7XG4gICAgfSxcblxuICAgIC8vIFVwZGF0ZSB0aGUgaGFzaCBsb2NhdGlvbiwgZWl0aGVyIHJlcGxhY2luZyB0aGUgY3VycmVudCBlbnRyeSwgb3IgYWRkaW5nXG4gICAgLy8gYSBuZXcgb25lIHRvIHRoZSBicm93c2VyIGhpc3RvcnkuXG4gICAgX3VwZGF0ZUhhc2g6IGZ1bmN0aW9uKGxvY2F0aW9uLCBmcmFnbWVudCwgcmVwbGFjZSkge1xuICAgICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgICAgdmFyIGhyZWYgPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoLyhqYXZhc2NyaXB0OnwjKS4qJC8sICcnKTtcbiAgICAgICAgbG9jYXRpb24ucmVwbGFjZShocmVmICsgJyMnICsgZnJhZ21lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU29tZSBicm93c2VycyByZXF1aXJlIHRoYXQgYGhhc2hgIGNvbnRhaW5zIGEgbGVhZGluZyAjLlxuICAgICAgICBsb2NhdGlvbi5oYXNoID0gJyMnICsgZnJhZ21lbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gIH0pO1xuXG4gIC8vIENyZWF0ZSB0aGUgZGVmYXVsdCBCYWNrYm9uZS5oaXN0b3J5LlxuICBCYWNrYm9uZS5oaXN0b3J5ID0gbmV3IEhpc3Rvcnk7XG5cbiAgLy8gSGVscGVyc1xuICAvLyAtLS0tLS0tXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvcnJlY3RseSBzZXQgdXAgdGhlIHByb3RvdHlwZSBjaGFpbiwgZm9yIHN1YmNsYXNzZXMuXG4gIC8vIFNpbWlsYXIgdG8gYGdvb2cuaW5oZXJpdHNgLCBidXQgdXNlcyBhIGhhc2ggb2YgcHJvdG90eXBlIHByb3BlcnRpZXMgYW5kXG4gIC8vIGNsYXNzIHByb3BlcnRpZXMgdG8gYmUgZXh0ZW5kZWQuXG4gIHZhciBleHRlbmQgPSBmdW5jdGlvbihwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIHZhciBwYXJlbnQgPSB0aGlzO1xuICAgIHZhciBjaGlsZDtcblxuICAgIC8vIFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgdGhlIG5ldyBzdWJjbGFzcyBpcyBlaXRoZXIgZGVmaW5lZCBieSB5b3VcbiAgICAvLyAodGhlIFwiY29uc3RydWN0b3JcIiBwcm9wZXJ0eSBpbiB5b3VyIGBleHRlbmRgIGRlZmluaXRpb24pLCBvciBkZWZhdWx0ZWRcbiAgICAvLyBieSB1cyB0byBzaW1wbHkgY2FsbCB0aGUgcGFyZW50J3MgY29uc3RydWN0b3IuXG4gICAgaWYgKHByb3RvUHJvcHMgJiYgXy5oYXMocHJvdG9Qcm9wcywgJ2NvbnN0cnVjdG9yJykpIHtcbiAgICAgIGNoaWxkID0gcHJvdG9Qcm9wcy5jb25zdHJ1Y3RvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGQgPSBmdW5jdGlvbigpeyByZXR1cm4gcGFyZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gICAgfVxuXG4gICAgLy8gQWRkIHN0YXRpYyBwcm9wZXJ0aWVzIHRvIHRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiwgaWYgc3VwcGxpZWQuXG4gICAgXy5leHRlbmQoY2hpbGQsIHBhcmVudCwgc3RhdGljUHJvcHMpO1xuXG4gICAgLy8gU2V0IHRoZSBwcm90b3R5cGUgY2hhaW4gdG8gaW5oZXJpdCBmcm9tIGBwYXJlbnRgLCB3aXRob3V0IGNhbGxpbmdcbiAgICAvLyBgcGFyZW50YCdzIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLlxuICAgIHZhciBTdXJyb2dhdGUgPSBmdW5jdGlvbigpeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH07XG4gICAgU3Vycm9nYXRlLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7XG4gICAgY2hpbGQucHJvdG90eXBlID0gbmV3IFN1cnJvZ2F0ZTtcblxuICAgIC8vIEFkZCBwcm90b3R5cGUgcHJvcGVydGllcyAoaW5zdGFuY2UgcHJvcGVydGllcykgdG8gdGhlIHN1YmNsYXNzLFxuICAgIC8vIGlmIHN1cHBsaWVkLlxuICAgIGlmIChwcm90b1Byb3BzKSBfLmV4dGVuZChjaGlsZC5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuXG4gICAgLy8gU2V0IGEgY29udmVuaWVuY2UgcHJvcGVydHkgaW4gY2FzZSB0aGUgcGFyZW50J3MgcHJvdG90eXBlIGlzIG5lZWRlZFxuICAgIC8vIGxhdGVyLlxuICAgIGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7XG5cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH07XG5cbiAgLy8gU2V0IHVwIGluaGVyaXRhbmNlIGZvciB0aGUgbW9kZWwsIGNvbGxlY3Rpb24sIHJvdXRlciwgdmlldyBhbmQgaGlzdG9yeS5cbiAgTW9kZWwuZXh0ZW5kID0gQ29sbGVjdGlvbi5leHRlbmQgPSBSb3V0ZXIuZXh0ZW5kID0gVmlldy5leHRlbmQgPSBIaXN0b3J5LmV4dGVuZCA9IGV4dGVuZDtcblxuICAvLyBUaHJvdyBhbiBlcnJvciB3aGVuIGEgVVJMIGlzIG5lZWRlZCwgYW5kIG5vbmUgaXMgc3VwcGxpZWQuXG4gIHZhciB1cmxFcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQSBcInVybFwiIHByb3BlcnR5IG9yIGZ1bmN0aW9uIG11c3QgYmUgc3BlY2lmaWVkJyk7XG4gIH07XG5cbiAgLy8gV3JhcCBhbiBvcHRpb25hbCBlcnJvciBjYWxsYmFjayB3aXRoIGEgZmFsbGJhY2sgZXJyb3IgZXZlbnQuXG4gIHZhciB3cmFwRXJyb3IgPSBmdW5jdGlvbihtb2RlbCwgb3B0aW9ucykge1xuICAgIHZhciBlcnJvciA9IG9wdGlvbnMuZXJyb3I7XG4gICAgb3B0aW9ucy5lcnJvciA9IGZ1bmN0aW9uKHJlc3ApIHtcbiAgICAgIGlmIChlcnJvcikgZXJyb3IobW9kZWwsIHJlc3AsIG9wdGlvbnMpO1xuICAgICAgbW9kZWwudHJpZ2dlcignZXJyb3InLCBtb2RlbCwgcmVzcCwgb3B0aW9ucyk7XG4gICAgfTtcbiAgfTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8qIVxuICogQW1wbGlmeSAxLjEuMlxuICpcbiAqIENvcHlyaWdodCAyMDExIC0gMjAxMyBhcHBlbmRUbyBMTEMuIChodHRwOi8vYXBwZW5kdG8uY29tL3RlYW0pXG4gKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIGxpY2Vuc2VzLlxuICogaHR0cDovL2FwcGVuZHRvLmNvbS9vcGVuLXNvdXJjZS1saWNlbnNlc1xuICpcbiAqIGh0dHA6Ly9hbXBsaWZ5anMuY29tXG4gKi9cbihmdW5jdGlvbiggZ2xvYmFsLCB1bmRlZmluZWQgKSB7XG5cbnZhciBzbGljZSA9IFtdLnNsaWNlLFxuXHRzdWJzY3JpcHRpb25zID0ge307XG5cbnZhciBhbXBsaWZ5ID0gZ2xvYmFsLmFtcGxpZnkgPSB7XG5cdHB1Ymxpc2g6IGZ1bmN0aW9uKCB0b3BpYyApIHtcblx0XHRpZiAoIHR5cGVvZiB0b3BpYyAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvciggXCJZb3UgbXVzdCBwcm92aWRlIGEgdmFsaWQgdG9waWMgdG8gcHVibGlzaC5cIiApO1xuXHRcdH1cblxuXHRcdHZhciBhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAxICksXG5cdFx0XHR0b3BpY1N1YnNjcmlwdGlvbnMsXG5cdFx0XHRzdWJzY3JpcHRpb24sXG5cdFx0XHRsZW5ndGgsXG5cdFx0XHRpID0gMCxcblx0XHRcdHJldDtcblxuXHRcdGlmICggIXN1YnNjcmlwdGlvbnNbIHRvcGljIF0gKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHR0b3BpY1N1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zWyB0b3BpYyBdLnNsaWNlKCk7XG5cdFx0Zm9yICggbGVuZ3RoID0gdG9waWNTdWJzY3JpcHRpb25zLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0c3Vic2NyaXB0aW9uID0gdG9waWNTdWJzY3JpcHRpb25zWyBpIF07XG5cdFx0XHRyZXQgPSBzdWJzY3JpcHRpb24uY2FsbGJhY2suYXBwbHkoIHN1YnNjcmlwdGlvbi5jb250ZXh0LCBhcmdzICk7XG5cdFx0XHRpZiAoIHJldCA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmV0ICE9PSBmYWxzZTtcblx0fSxcblxuXHRzdWJzY3JpYmU6IGZ1bmN0aW9uKCB0b3BpYywgY29udGV4dCwgY2FsbGJhY2ssIHByaW9yaXR5ICkge1xuXHRcdGlmICggdHlwZW9mIHRvcGljICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcIllvdSBtdXN0IHByb3ZpZGUgYSB2YWxpZCB0b3BpYyB0byBjcmVhdGUgYSBzdWJzY3JpcHRpb24uXCIgKTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIGNhbGxiYWNrID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0cHJpb3JpdHkgPSBjYWxsYmFjaztcblx0XHRcdGNhbGxiYWNrID0gY29udGV4dDtcblx0XHRcdGNvbnRleHQgPSBudWxsO1xuXHRcdH1cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPT09IDIgKSB7XG5cdFx0XHRjYWxsYmFjayA9IGNvbnRleHQ7XG5cdFx0XHRjb250ZXh0ID0gbnVsbDtcblx0XHR9XG5cdFx0cHJpb3JpdHkgPSBwcmlvcml0eSB8fCAxMDtcblxuXHRcdHZhciB0b3BpY0luZGV4ID0gMCxcblx0XHRcdHRvcGljcyA9IHRvcGljLnNwbGl0KCAvXFxzLyApLFxuXHRcdFx0dG9waWNMZW5ndGggPSB0b3BpY3MubGVuZ3RoLFxuXHRcdFx0YWRkZWQ7XG5cdFx0Zm9yICggOyB0b3BpY0luZGV4IDwgdG9waWNMZW5ndGg7IHRvcGljSW5kZXgrKyApIHtcblx0XHRcdHRvcGljID0gdG9waWNzWyB0b3BpY0luZGV4IF07XG5cdFx0XHRhZGRlZCA9IGZhbHNlO1xuXHRcdFx0aWYgKCAhc3Vic2NyaXB0aW9uc1sgdG9waWMgXSApIHtcblx0XHRcdFx0c3Vic2NyaXB0aW9uc1sgdG9waWMgXSA9IFtdO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgaSA9IHN1YnNjcmlwdGlvbnNbIHRvcGljIF0ubGVuZ3RoIC0gMSxcblx0XHRcdFx0c3Vic2NyaXB0aW9uSW5mbyA9IHtcblx0XHRcdFx0XHRjYWxsYmFjazogY2FsbGJhY2ssXG5cdFx0XHRcdFx0Y29udGV4dDogY29udGV4dCxcblx0XHRcdFx0XHRwcmlvcml0eTogcHJpb3JpdHlcblx0XHRcdFx0fTtcblxuXHRcdFx0Zm9yICggOyBpID49IDA7IGktLSApIHtcblx0XHRcdFx0aWYgKCBzdWJzY3JpcHRpb25zWyB0b3BpYyBdWyBpIF0ucHJpb3JpdHkgPD0gcHJpb3JpdHkgKSB7XG5cdFx0XHRcdFx0c3Vic2NyaXB0aW9uc1sgdG9waWMgXS5zcGxpY2UoIGkgKyAxLCAwLCBzdWJzY3JpcHRpb25JbmZvICk7XG5cdFx0XHRcdFx0YWRkZWQgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggIWFkZGVkICkge1xuXHRcdFx0XHRzdWJzY3JpcHRpb25zWyB0b3BpYyBdLnVuc2hpZnQoIHN1YnNjcmlwdGlvbkluZm8gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2FsbGJhY2s7XG5cdH0sXG5cblx0dW5zdWJzY3JpYmU6IGZ1bmN0aW9uKCB0b3BpYywgY29udGV4dCwgY2FsbGJhY2sgKSB7XG5cdFx0aWYgKCB0eXBlb2YgdG9waWMgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoIFwiWW91IG11c3QgcHJvdmlkZSBhIHZhbGlkIHRvcGljIHRvIHJlbW92ZSBhIHN1YnNjcmlwdGlvbi5cIiApO1xuXHRcdH1cblxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCA9PT0gMiApIHtcblx0XHRcdGNhbGxiYWNrID0gY29udGV4dDtcblx0XHRcdGNvbnRleHQgPSBudWxsO1xuXHRcdH1cblxuXHRcdGlmICggIXN1YnNjcmlwdGlvbnNbIHRvcGljIF0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIGxlbmd0aCA9IHN1YnNjcmlwdGlvbnNbIHRvcGljIF0ubGVuZ3RoLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdGlmICggc3Vic2NyaXB0aW9uc1sgdG9waWMgXVsgaSBdLmNhbGxiYWNrID09PSBjYWxsYmFjayApIHtcblx0XHRcdFx0aWYgKCAhY29udGV4dCB8fCBzdWJzY3JpcHRpb25zWyB0b3BpYyBdWyBpIF0uY29udGV4dCA9PT0gY29udGV4dCApIHtcblx0XHRcdFx0XHRzdWJzY3JpcHRpb25zWyB0b3BpYyBdLnNwbGljZSggaSwgMSApO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdC8vIEFkanVzdCBjb3VudGVyIGFuZCBsZW5ndGggZm9yIHJlbW92ZWQgaXRlbVxuXHRcdFx0XHRcdGktLTtcblx0XHRcdFx0XHRsZW5ndGgtLTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxufSggdGhpcyApICk7XG5cbihmdW5jdGlvbiggYW1wbGlmeSwgdW5kZWZpbmVkICkge1xuXG52YXIgc3RvcmUgPSBhbXBsaWZ5LnN0b3JlID0gZnVuY3Rpb24oIGtleSwgdmFsdWUsIG9wdGlvbnMgKSB7XG5cdHZhciB0eXBlID0gc3RvcmUudHlwZTtcblx0aWYgKCBvcHRpb25zICYmIG9wdGlvbnMudHlwZSAmJiBvcHRpb25zLnR5cGUgaW4gc3RvcmUudHlwZXMgKSB7XG5cdFx0dHlwZSA9IG9wdGlvbnMudHlwZTtcblx0fVxuXHRyZXR1cm4gc3RvcmUudHlwZXNbIHR5cGUgXSgga2V5LCB2YWx1ZSwgb3B0aW9ucyB8fCB7fSApO1xufTtcblxuc3RvcmUudHlwZXMgPSB7fTtcbnN0b3JlLnR5cGUgPSBudWxsO1xuc3RvcmUuYWRkVHlwZSA9IGZ1bmN0aW9uKCB0eXBlLCBzdG9yYWdlICkge1xuXHRpZiAoICFzdG9yZS50eXBlICkge1xuXHRcdHN0b3JlLnR5cGUgPSB0eXBlO1xuXHR9XG5cblx0c3RvcmUudHlwZXNbIHR5cGUgXSA9IHN0b3JhZ2U7XG5cdHN0b3JlWyB0eXBlIF0gPSBmdW5jdGlvbigga2V5LCB2YWx1ZSwgb3B0aW9ucyApIHtcblx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblx0XHRvcHRpb25zLnR5cGUgPSB0eXBlO1xuXHRcdHJldHVybiBzdG9yZSgga2V5LCB2YWx1ZSwgb3B0aW9ucyApO1xuXHR9O1xufTtcbnN0b3JlLmVycm9yID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBcImFtcGxpZnkuc3RvcmUgcXVvdGEgZXhjZWVkZWRcIjtcbn07XG5cbnZhciBycHJlZml4ID0gL15fX2FtcGxpZnlfXy87XG5mdW5jdGlvbiBjcmVhdGVGcm9tU3RvcmFnZUludGVyZmFjZSggc3RvcmFnZVR5cGUsIHN0b3JhZ2UgKSB7XG5cdHN0b3JlLmFkZFR5cGUoIHN0b3JhZ2VUeXBlLCBmdW5jdGlvbigga2V5LCB2YWx1ZSwgb3B0aW9ucyApIHtcblx0XHR2YXIgc3RvcmVkVmFsdWUsIHBhcnNlZCwgaSwgcmVtb3ZlLFxuXHRcdFx0cmV0ID0gdmFsdWUsXG5cdFx0XHRub3cgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuXG5cdFx0aWYgKCAha2V5ICkge1xuXHRcdFx0cmV0ID0ge307XG5cdFx0XHRyZW1vdmUgPSBbXTtcblx0XHRcdGkgPSAwO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Ly8gYWNjZXNzaW5nIHRoZSBsZW5ndGggcHJvcGVydHkgd29ya3MgYXJvdW5kIGEgbG9jYWxTdG9yYWdlIGJ1Z1xuXHRcdFx0XHQvLyBpbiBGaXJlZm94IDQuMCB3aGVyZSB0aGUga2V5cyBkb24ndCB1cGRhdGUgY3Jvc3MtcGFnZVxuXHRcdFx0XHQvLyB3ZSBhc3NpZ24gdG8ga2V5IGp1c3QgdG8gYXZvaWQgQ2xvc3VyZSBDb21waWxlciBmcm9tIHJlbW92aW5nXG5cdFx0XHRcdC8vIHRoZSBhY2Nlc3MgYXMgXCJ1c2VsZXNzIGNvZGVcIlxuXHRcdFx0XHQvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02NjI1MTFcblx0XHRcdFx0a2V5ID0gc3RvcmFnZS5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKCBrZXkgPSBzdG9yYWdlLmtleSggaSsrICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBycHJlZml4LnRlc3QoIGtleSApICkge1xuXHRcdFx0XHRcdFx0cGFyc2VkID0gSlNPTi5wYXJzZSggc3RvcmFnZS5nZXRJdGVtKCBrZXkgKSApO1xuXHRcdFx0XHRcdFx0aWYgKCBwYXJzZWQuZXhwaXJlcyAmJiBwYXJzZWQuZXhwaXJlcyA8PSBub3cgKSB7XG5cdFx0XHRcdFx0XHRcdHJlbW92ZS5wdXNoKCBrZXkgKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldFsga2V5LnJlcGxhY2UoIHJwcmVmaXgsIFwiXCIgKSBdID0gcGFyc2VkLmRhdGE7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHdoaWxlICgga2V5ID0gcmVtb3ZlLnBvcCgpICkge1xuXHRcdFx0XHRcdHN0b3JhZ2UucmVtb3ZlSXRlbSgga2V5ICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKCBlcnJvciApIHt9XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdC8vIHByb3RlY3QgYWdhaW5zdCBuYW1lIGNvbGxpc2lvbnMgd2l0aCBkaXJlY3Qgc3RvcmFnZVxuXHRcdGtleSA9IFwiX19hbXBsaWZ5X19cIiArIGtleTtcblxuXHRcdGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHN0b3JlZFZhbHVlID0gc3RvcmFnZS5nZXRJdGVtKCBrZXkgKTtcblx0XHRcdHBhcnNlZCA9IHN0b3JlZFZhbHVlID8gSlNPTi5wYXJzZSggc3RvcmVkVmFsdWUgKSA6IHsgZXhwaXJlczogLTEgfTtcblx0XHRcdGlmICggcGFyc2VkLmV4cGlyZXMgJiYgcGFyc2VkLmV4cGlyZXMgPD0gbm93ICkge1xuXHRcdFx0XHRzdG9yYWdlLnJlbW92ZUl0ZW0oIGtleSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHBhcnNlZC5kYXRhO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIHZhbHVlID09PSBudWxsICkge1xuXHRcdFx0XHRzdG9yYWdlLnJlbW92ZUl0ZW0oIGtleSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFyc2VkID0gSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdGRhdGE6IHZhbHVlLFxuXHRcdFx0XHRcdGV4cGlyZXM6IG9wdGlvbnMuZXhwaXJlcyA/IG5vdyArIG9wdGlvbnMuZXhwaXJlcyA6IG51bGxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c3RvcmFnZS5zZXRJdGVtKCBrZXksIHBhcnNlZCApO1xuXHRcdFx0XHQvLyBxdW90YSBleGNlZWRlZFxuXHRcdFx0XHR9IGNhdGNoKCBlcnJvciApIHtcblx0XHRcdFx0XHQvLyBleHBpcmUgb2xkIGRhdGEgYW5kIHRyeSBhZ2FpblxuXHRcdFx0XHRcdHN0b3JlWyBzdG9yYWdlVHlwZSBdKCk7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdHN0b3JhZ2Uuc2V0SXRlbSgga2V5LCBwYXJzZWQgKTtcblx0XHRcdFx0XHR9IGNhdGNoKCBlcnJvciApIHtcblx0XHRcdFx0XHRcdHRocm93IHN0b3JlLmVycm9yKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldDtcblx0fSk7XG59XG5cbi8vIGxvY2FsU3RvcmFnZSArIHNlc3Npb25TdG9yYWdlXG4vLyBJRSA4KywgRmlyZWZveCAzLjUrLCBTYWZhcmkgNCssIENocm9tZSA0KywgT3BlcmEgMTAuNSssIGlQaG9uZSAyKywgQW5kcm9pZCAyK1xuZm9yICggdmFyIHdlYlN0b3JhZ2VUeXBlIGluIHsgbG9jYWxTdG9yYWdlOiAxLCBzZXNzaW9uU3RvcmFnZTogMSB9ICkge1xuXHQvLyB0cnkvY2F0Y2ggZm9yIGZpbGUgcHJvdG9jb2wgaW4gRmlyZWZveCBhbmQgUHJpdmF0ZSBCcm93c2luZyBpbiBTYWZhcmkgNVxuXHR0cnkge1xuXHRcdC8vIFNhZmFyaSA1IGluIFByaXZhdGUgQnJvd3NpbmcgbW9kZSBleHBvc2VzIGxvY2FsU3RvcmFnZVxuXHRcdC8vIGJ1dCBkb2Vzbid0IGFsbG93IHN0b3JpbmcgZGF0YSwgc28gd2UgYXR0ZW1wdCB0byBzdG9yZSBhbmQgcmVtb3ZlIGFuIGl0ZW0uXG5cdFx0Ly8gVGhpcyB3aWxsIHVuZm9ydHVuYXRlbHkgZ2l2ZSB1cyBhIGZhbHNlIG5lZ2F0aXZlIGlmIHdlJ3JlIGF0IHRoZSBsaW1pdC5cblx0XHR3aW5kb3dbIHdlYlN0b3JhZ2VUeXBlIF0uc2V0SXRlbSggXCJfX2FtcGxpZnlfX1wiLCBcInhcIiApO1xuXHRcdHdpbmRvd1sgd2ViU3RvcmFnZVR5cGUgXS5yZW1vdmVJdGVtKCBcIl9fYW1wbGlmeV9fXCIgKTtcblx0XHRjcmVhdGVGcm9tU3RvcmFnZUludGVyZmFjZSggd2ViU3RvcmFnZVR5cGUsIHdpbmRvd1sgd2ViU3RvcmFnZVR5cGUgXSApO1xuXHR9IGNhdGNoKCBlICkge31cbn1cblxuLy8gZ2xvYmFsU3RvcmFnZVxuLy8gbm9uLXN0YW5kYXJkOiBGaXJlZm94IDIrXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb20vc3RvcmFnZSNnbG9iYWxTdG9yYWdlXG5pZiAoICFzdG9yZS50eXBlcy5sb2NhbFN0b3JhZ2UgJiYgd2luZG93Lmdsb2JhbFN0b3JhZ2UgKSB7XG5cdC8vIHRyeS9jYXRjaCBmb3IgZmlsZSBwcm90b2NvbCBpbiBGaXJlZm94XG5cdHRyeSB7XG5cdFx0Y3JlYXRlRnJvbVN0b3JhZ2VJbnRlcmZhY2UoIFwiZ2xvYmFsU3RvcmFnZVwiLFxuXHRcdFx0d2luZG93Lmdsb2JhbFN0b3JhZ2VbIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSBdICk7XG5cdFx0Ly8gRmlyZWZveCAyLjAgYW5kIDMuMCBoYXZlIHNlc3Npb25TdG9yYWdlIGFuZCBnbG9iYWxTdG9yYWdlXG5cdFx0Ly8gbWFrZSBzdXJlIHdlIGRlZmF1bHQgdG8gZ2xvYmFsU3RvcmFnZVxuXHRcdC8vIGJ1dCBkb24ndCBkZWZhdWx0IHRvIGdsb2JhbFN0b3JhZ2UgaW4gMy41KyB3aGljaCBhbHNvIGhhcyBsb2NhbFN0b3JhZ2Vcblx0XHRpZiAoIHN0b3JlLnR5cGUgPT09IFwic2Vzc2lvblN0b3JhZ2VcIiApIHtcblx0XHRcdHN0b3JlLnR5cGUgPSBcImdsb2JhbFN0b3JhZ2VcIjtcblx0XHR9XG5cdH0gY2F0Y2goIGUgKSB7fVxufVxuXG4vLyB1c2VyRGF0YVxuLy8gbm9uLXN0YW5kYXJkOiBJRSA1K1xuLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTMxNDI0KHY9dnMuODUpLmFzcHhcbihmdW5jdGlvbigpIHtcblx0Ly8gSUUgOSBoYXMgcXVpcmtzIGluIHVzZXJEYXRhIHRoYXQgYXJlIGEgaHVnZSBwYWluXG5cdC8vIHJhdGhlciB0aGFuIGZpbmRpbmcgYSB3YXkgdG8gZGV0ZWN0IHRoZXNlIHF1aXJrc1xuXHQvLyB3ZSBqdXN0IGRvbid0IHJlZ2lzdGVyIHVzZXJEYXRhIGlmIHdlIGhhdmUgbG9jYWxTdG9yYWdlXG5cdGlmICggc3RvcmUudHlwZXMubG9jYWxTdG9yYWdlICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIGFwcGVuZCB0byBodG1sIGluc3RlYWQgb2YgYm9keSBzbyB3ZSBjYW4gZG8gdGhpcyBmcm9tIHRoZSBoZWFkXG5cdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICksXG5cdFx0YXR0cktleSA9IFwiYW1wbGlmeVwiO1xuXHRkaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCJoZWFkXCIgKVsgMCBdLmFwcGVuZENoaWxkKCBkaXYgKTtcblxuXHQvLyB3ZSBjYW4ndCBmZWF0dXJlIGRldGVjdCB1c2VyRGF0YSBzdXBwb3J0XG5cdC8vIHNvIGp1c3QgdHJ5IGFuZCBzZWUgaWYgaXQgZmFpbHNcblx0Ly8gc3VycHJpc2luZ2x5LCBldmVuIGp1c3QgYWRkaW5nIHRoZSBiZWhhdmlvciBpc24ndCBlbm91Z2ggZm9yIGEgZmFpbHVyZVxuXHQvLyBzbyB3ZSBuZWVkIHRvIGxvYWQgdGhlIGRhdGEgYXMgd2VsbFxuXHR0cnkge1xuXHRcdGRpdi5hZGRCZWhhdmlvciggXCIjZGVmYXVsdCN1c2VyZGF0YVwiICk7XG5cdFx0ZGl2LmxvYWQoIGF0dHJLZXkgKTtcblx0fSBjYXRjaCggZSApIHtcblx0XHRkaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZGl2ICk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0c3RvcmUuYWRkVHlwZSggXCJ1c2VyRGF0YVwiLCBmdW5jdGlvbigga2V5LCB2YWx1ZSwgb3B0aW9ucyApIHtcblx0XHRkaXYubG9hZCggYXR0cktleSApO1xuXHRcdHZhciBhdHRyLCBwYXJzZWQsIHByZXZWYWx1ZSwgaSwgcmVtb3ZlLFxuXHRcdFx0cmV0ID0gdmFsdWUsXG5cdFx0XHRub3cgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuXG5cdFx0aWYgKCAha2V5ICkge1xuXHRcdFx0cmV0ID0ge307XG5cdFx0XHRyZW1vdmUgPSBbXTtcblx0XHRcdGkgPSAwO1xuXHRcdFx0d2hpbGUgKCBhdHRyID0gZGl2LlhNTERvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRyaWJ1dGVzWyBpKysgXSApIHtcblx0XHRcdFx0cGFyc2VkID0gSlNPTi5wYXJzZSggYXR0ci52YWx1ZSApO1xuXHRcdFx0XHRpZiAoIHBhcnNlZC5leHBpcmVzICYmIHBhcnNlZC5leHBpcmVzIDw9IG5vdyApIHtcblx0XHRcdFx0XHRyZW1vdmUucHVzaCggYXR0ci5uYW1lICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0WyBhdHRyLm5hbWUgXSA9IHBhcnNlZC5kYXRhO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR3aGlsZSAoIGtleSA9IHJlbW92ZS5wb3AoKSApIHtcblx0XHRcdFx0ZGl2LnJlbW92ZUF0dHJpYnV0ZSgga2V5ICk7XG5cdFx0XHR9XG5cdFx0XHRkaXYuc2F2ZSggYXR0cktleSApO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHQvLyBjb252ZXJ0IGludmFsaWQgY2hhcmFjdGVycyB0byBkYXNoZXNcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLyNOVC1OYW1lXG5cdFx0Ly8gc2ltcGxpZmllZCB0byBhc3N1bWUgdGhlIHN0YXJ0aW5nIGNoYXJhY3RlciBpcyB2YWxpZFxuXHRcdC8vIGFsc28gcmVtb3ZlZCBjb2xvbiBhcyBpdCBpcyBpbnZhbGlkIGluIEhUTUwgYXR0cmlidXRlIG5hbWVzXG5cdFx0a2V5ID0ga2V5LnJlcGxhY2UoIC9bXlxcLS5fMC05QS1aYS16XFx4YjdcXHhjMC1cXHhkNlxceGQ4LVxceGY2XFx4ZjgtXFx1MDM3ZFxcdTAzN2YtXFx1MWZmZlxcdTIwMGMtXFx1MjAwZFxcdTIwM2ZcXHUyMDQwXFx1MjA3MC1cXHUyMThmXS9nLCBcIi1cIiApO1xuXHRcdC8vIGFkanVzdCBpbnZhbGlkIHN0YXJ0aW5nIGNoYXJhY3RlciB0byBkZWFsIHdpdGggb3VyIHNpbXBsaWZpZWQgc2FuaXRpemF0aW9uXG5cdFx0a2V5ID0ga2V5LnJlcGxhY2UoIC9eLS8sIFwiXy1cIiApO1xuXG5cdFx0aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0YXR0ciA9IGRpdi5nZXRBdHRyaWJ1dGUoIGtleSApO1xuXHRcdFx0cGFyc2VkID0gYXR0ciA/IEpTT04ucGFyc2UoIGF0dHIgKSA6IHsgZXhwaXJlczogLTEgfTtcblx0XHRcdGlmICggcGFyc2VkLmV4cGlyZXMgJiYgcGFyc2VkLmV4cGlyZXMgPD0gbm93ICkge1xuXHRcdFx0XHRkaXYucmVtb3ZlQXR0cmlidXRlKCBrZXkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBwYXJzZWQuZGF0YTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0ZGl2LnJlbW92ZUF0dHJpYnV0ZSgga2V5ICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyB3ZSBuZWVkIHRvIGdldCB0aGUgcHJldmlvdXMgdmFsdWUgaW4gY2FzZSB3ZSBuZWVkIHRvIHJvbGxiYWNrXG5cdFx0XHRcdHByZXZWYWx1ZSA9IGRpdi5nZXRBdHRyaWJ1dGUoIGtleSApO1xuXHRcdFx0XHRwYXJzZWQgPSBKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0ZGF0YTogdmFsdWUsXG5cdFx0XHRcdFx0ZXhwaXJlczogKG9wdGlvbnMuZXhwaXJlcyA/IChub3cgKyBvcHRpb25zLmV4cGlyZXMpIDogbnVsbClcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGRpdi5zZXRBdHRyaWJ1dGUoIGtleSwgcGFyc2VkICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGRpdi5zYXZlKCBhdHRyS2V5ICk7XG5cdFx0Ly8gcXVvdGEgZXhjZWVkZWRcblx0XHR9IGNhdGNoICggZXJyb3IgKSB7XG5cdFx0XHQvLyByb2xsIHRoZSB2YWx1ZSBiYWNrIHRvIHRoZSBwcmV2aW91cyB2YWx1ZVxuXHRcdFx0aWYgKCBwcmV2VmFsdWUgPT09IG51bGwgKSB7XG5cdFx0XHRcdGRpdi5yZW1vdmVBdHRyaWJ1dGUoIGtleSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGl2LnNldEF0dHJpYnV0ZSgga2V5LCBwcmV2VmFsdWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gZXhwaXJlIG9sZCBkYXRhIGFuZCB0cnkgYWdhaW5cblx0XHRcdHN0b3JlLnVzZXJEYXRhKCk7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRkaXYuc2V0QXR0cmlidXRlKCBrZXksIHBhcnNlZCApO1xuXHRcdFx0XHRkaXYuc2F2ZSggYXR0cktleSApO1xuXHRcdFx0fSBjYXRjaCAoIGVycm9yICkge1xuXHRcdFx0XHQvLyByb2xsIHRoZSB2YWx1ZSBiYWNrIHRvIHRoZSBwcmV2aW91cyB2YWx1ZVxuXHRcdFx0XHRpZiAoIHByZXZWYWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0XHRkaXYucmVtb3ZlQXR0cmlidXRlKCBrZXkgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkaXYuc2V0QXR0cmlidXRlKCBrZXksIHByZXZWYWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRocm93IHN0b3JlLmVycm9yKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH0pO1xufSgpICk7XG5cbi8vIGluLW1lbW9yeSBzdG9yYWdlXG4vLyBmYWxsYmFjayBmb3IgYWxsIGJyb3dzZXJzIHRvIGVuYWJsZSB0aGUgQVBJIGV2ZW4gaWYgd2UgY2FuJ3QgcGVyc2lzdCBkYXRhXG4oZnVuY3Rpb24oKSB7XG5cdHZhciBtZW1vcnkgPSB7fSxcblx0XHR0aW1lb3V0ID0ge307XG5cblx0ZnVuY3Rpb24gY29weSggb2JqICkge1xuXHRcdHJldHVybiBvYmogPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IEpTT04ucGFyc2UoIEpTT04uc3RyaW5naWZ5KCBvYmogKSApO1xuXHR9XG5cblx0c3RvcmUuYWRkVHlwZSggXCJtZW1vcnlcIiwgZnVuY3Rpb24oIGtleSwgdmFsdWUsIG9wdGlvbnMgKSB7XG5cdFx0aWYgKCAha2V5ICkge1xuXHRcdFx0cmV0dXJuIGNvcHkoIG1lbW9yeSApO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHJldHVybiBjb3B5KCBtZW1vcnlbIGtleSBdICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aW1lb3V0WyBrZXkgXSApIHtcblx0XHRcdGNsZWFyVGltZW91dCggdGltZW91dFsga2V5IF0gKTtcblx0XHRcdGRlbGV0ZSB0aW1lb3V0WyBrZXkgXTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlID09PSBudWxsICkge1xuXHRcdFx0ZGVsZXRlIG1lbW9yeVsga2V5IF07XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRtZW1vcnlbIGtleSBdID0gdmFsdWU7XG5cdFx0aWYgKCBvcHRpb25zLmV4cGlyZXMgKSB7XG5cdFx0XHR0aW1lb3V0WyBrZXkgXSA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRlbGV0ZSBtZW1vcnlbIGtleSBdO1xuXHRcdFx0XHRkZWxldGUgdGltZW91dFsga2V5IF07XG5cdFx0XHR9LCBvcHRpb25zLmV4cGlyZXMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0pO1xufSgpICk7XG5cbn0oIHRoaXMuYW1wbGlmeSA9IHRoaXMuYW1wbGlmeSB8fCB7fSApICk7XG5cbi8qZ2xvYmFsIGFtcGxpZnkqL1xuXG4oZnVuY3Rpb24oIGFtcGxpZnksIHVuZGVmaW5lZCApIHtcbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5mdW5jdGlvbiBpc0Z1bmN0aW9uKCBvYmogKSB7XG5cdHJldHVybiAoe30pLnRvU3RyaW5nLmNhbGwoIG9iaiApID09PSBcIltvYmplY3QgRnVuY3Rpb25dXCI7XG59XG5cbmZ1bmN0aW9uIGFzeW5jKCBmbiApIHtcblx0dmFyIGlzQXN5bmMgPSBmYWxzZTtcblx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRpc0FzeW5jID0gdHJ1ZTtcblx0fSwgMSApO1xuXHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0YXJncyA9IGFyZ3VtZW50cztcblx0XHRpZiAoIGlzQXN5bmMgKSB7XG5cdFx0XHRmbi5hcHBseSggdGhhdCwgYXJncyApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRmbi5hcHBseSggdGhhdCwgYXJncyApO1xuXHRcdFx0fSwgMSApO1xuXHRcdH1cblx0fTtcbn1cblxuYW1wbGlmeS5yZXF1ZXN0ID0gZnVuY3Rpb24oIHJlc291cmNlSWQsIGRhdGEsIGNhbGxiYWNrICkge1xuXHQvLyBkZWZhdWx0IHRvIGFuIGVtcHR5IGhhc2gganVzdCBzbyB3ZSBjYW4gaGFuZGxlIGEgbWlzc2luZyByZXNvdXJjZUlkXG5cdC8vIGluIG9uZSBwbGFjZVxuXHR2YXIgc2V0dGluZ3MgPSByZXNvdXJjZUlkIHx8IHt9O1xuXG5cdGlmICggdHlwZW9mIHNldHRpbmdzID09PSBcInN0cmluZ1wiICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggZGF0YSApICkge1xuXHRcdFx0Y2FsbGJhY2sgPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHt9O1xuXHRcdH1cblx0XHRzZXR0aW5ncyA9IHtcblx0XHRcdHJlc291cmNlSWQ6IHJlc291cmNlSWQsXG5cdFx0XHRkYXRhOiBkYXRhIHx8IHt9LFxuXHRcdFx0c3VjY2VzczogY2FsbGJhY2tcblx0XHR9O1xuXHR9XG5cblx0dmFyIHJlcXVlc3QgPSB7IGFib3J0OiBub29wIH0sXG5cdFx0cmVzb3VyY2UgPSBhbXBsaWZ5LnJlcXVlc3QucmVzb3VyY2VzWyBzZXR0aW5ncy5yZXNvdXJjZUlkIF0sXG5cdFx0c3VjY2VzcyA9IHNldHRpbmdzLnN1Y2Nlc3MgfHwgbm9vcCxcblx0XHRlcnJvciA9IHNldHRpbmdzLmVycm9yIHx8IG5vb3A7XG5cblx0c2V0dGluZ3Muc3VjY2VzcyA9IGFzeW5jKCBmdW5jdGlvbiggZGF0YSwgc3RhdHVzICkge1xuXHRcdHN0YXR1cyA9IHN0YXR1cyB8fCBcInN1Y2Nlc3NcIjtcblx0XHRhbXBsaWZ5LnB1Ymxpc2goIFwicmVxdWVzdC5zdWNjZXNzXCIsIHNldHRpbmdzLCBkYXRhLCBzdGF0dXMgKTtcblx0XHRhbXBsaWZ5LnB1Ymxpc2goIFwicmVxdWVzdC5jb21wbGV0ZVwiLCBzZXR0aW5ncywgZGF0YSwgc3RhdHVzICk7XG5cdFx0c3VjY2VzcyggZGF0YSwgc3RhdHVzICk7XG5cdH0pO1xuXG5cdHNldHRpbmdzLmVycm9yID0gYXN5bmMoIGZ1bmN0aW9uKCBkYXRhLCBzdGF0dXMgKSB7XG5cdFx0c3RhdHVzID0gc3RhdHVzIHx8IFwiZXJyb3JcIjtcblx0XHRhbXBsaWZ5LnB1Ymxpc2goIFwicmVxdWVzdC5lcnJvclwiLCBzZXR0aW5ncywgZGF0YSwgc3RhdHVzICk7XG5cdFx0YW1wbGlmeS5wdWJsaXNoKCBcInJlcXVlc3QuY29tcGxldGVcIiwgc2V0dGluZ3MsIGRhdGEsIHN0YXR1cyApO1xuXHRcdGVycm9yKCBkYXRhLCBzdGF0dXMgKTtcblx0fSk7XG5cblx0aWYgKCAhcmVzb3VyY2UgKSB7XG5cdFx0aWYgKCAhc2V0dGluZ3MucmVzb3VyY2VJZCApIHtcblx0XHRcdHRocm93IFwiYW1wbGlmeS5yZXF1ZXN0OiBubyByZXNvdXJjZUlkIHByb3ZpZGVkXCI7XG5cdFx0fVxuXHRcdHRocm93IFwiYW1wbGlmeS5yZXF1ZXN0OiB1bmtub3duIHJlc291cmNlSWQ6IFwiICsgc2V0dGluZ3MucmVzb3VyY2VJZDtcblx0fVxuXG5cdGlmICggIWFtcGxpZnkucHVibGlzaCggXCJyZXF1ZXN0LmJlZm9yZVwiLCBzZXR0aW5ncyApICkge1xuXHRcdHNldHRpbmdzLmVycm9yKCBudWxsLCBcImFib3J0XCIgKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRhbXBsaWZ5LnJlcXVlc3QucmVzb3VyY2VzWyBzZXR0aW5ncy5yZXNvdXJjZUlkIF0oIHNldHRpbmdzLCByZXF1ZXN0ICk7XG5cdHJldHVybiByZXF1ZXN0O1xufTtcblxuYW1wbGlmeS5yZXF1ZXN0LnR5cGVzID0ge307XG5hbXBsaWZ5LnJlcXVlc3QucmVzb3VyY2VzID0ge307XG5hbXBsaWZ5LnJlcXVlc3QuZGVmaW5lID0gZnVuY3Rpb24oIHJlc291cmNlSWQsIHR5cGUsIHNldHRpbmdzICkge1xuXHRpZiAoIHR5cGVvZiB0eXBlID09PSBcInN0cmluZ1wiICkge1xuXHRcdGlmICggISggdHlwZSBpbiBhbXBsaWZ5LnJlcXVlc3QudHlwZXMgKSApIHtcblx0XHRcdHRocm93IFwiYW1wbGlmeS5yZXF1ZXN0LmRlZmluZTogdW5rbm93biB0eXBlOiBcIiArIHR5cGU7XG5cdFx0fVxuXG5cdFx0c2V0dGluZ3MucmVzb3VyY2VJZCA9IHJlc291cmNlSWQ7XG5cdFx0YW1wbGlmeS5yZXF1ZXN0LnJlc291cmNlc1sgcmVzb3VyY2VJZCBdID1cblx0XHRcdGFtcGxpZnkucmVxdWVzdC50eXBlc1sgdHlwZSBdKCBzZXR0aW5ncyApO1xuXHR9IGVsc2Uge1xuXHRcdC8vIG5vIHByZS1wcm9jZXNzb3Igb3Igc2V0dGluZ3MgZm9yIG9uZS1vZmYgdHlwZXMgKGRvbid0IGludm9rZSlcblx0XHRhbXBsaWZ5LnJlcXVlc3QucmVzb3VyY2VzWyByZXNvdXJjZUlkIF0gPSB0eXBlO1xuXHR9XG59O1xuXG59KCBhbXBsaWZ5ICkgKTtcblxuXG4oZnVuY3Rpb24oIGFtcGxpZnksICQsIHVuZGVmaW5lZCApIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIHhoclByb3BzID0gWyBcInN0YXR1c1wiLCBcInN0YXR1c1RleHRcIiwgXCJyZXNwb25zZVRleHRcIiwgXCJyZXNwb25zZVhNTFwiLCBcInJlYWR5U3RhdGVcIiBdLFxuXHRcdHJ1cmxEYXRhID0gL1xceyhbXlxcfV0rKVxcfS9nO1xuXG5hbXBsaWZ5LnJlcXVlc3QudHlwZXMuYWpheCA9IGZ1bmN0aW9uKCBkZWZuU2V0dGluZ3MgKSB7XG5cdGRlZm5TZXR0aW5ncyA9ICQuZXh0ZW5kKHtcblx0XHR0eXBlOiBcIkdFVFwiXG5cdH0sIGRlZm5TZXR0aW5ncyApO1xuXG5cdHJldHVybiBmdW5jdGlvbiggc2V0dGluZ3MsIHJlcXVlc3QgKSB7XG5cdFx0dmFyIHhociwgaGFuZGxlUmVzcG9uc2UsXG5cdFx0XHR1cmwgPSBkZWZuU2V0dGluZ3MudXJsLFxuXHRcdFx0YWJvcnQgPSByZXF1ZXN0LmFib3J0LFxuXHRcdFx0YWpheFNldHRpbmdzID0gJC5leHRlbmQoIHRydWUsIHt9LCBkZWZuU2V0dGluZ3MsIHsgZGF0YTogc2V0dGluZ3MuZGF0YSB9ICksXG5cdFx0XHRhYm9ydGVkID0gZmFsc2UsXG5cdFx0XHRhbXBYSFIgPSB7XG5cdFx0XHRcdHJlYWR5U3RhdGU6IDAsXG5cdFx0XHRcdHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXR1cm4geGhyLnNldFJlcXVlc3RIZWFkZXIoIG5hbWUsIHZhbHVlICk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0Z2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHhoci5nZXRSZXNwb25zZUhlYWRlcigga2V5ICk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdHJldHVybiB4aHIub3ZlcnJpZGVNaW1lVHlwZSggdHlwZSApO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0YWJvcnRlZCA9IHRydWU7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdHhoci5hYm9ydCgpO1xuXHRcdFx0XHRcdC8vIElFIDcgdGhyb3dzIGFuIGVycm9yIHdoZW4gdHJ5aW5nIHRvIGFib3J0XG5cdFx0XHRcdFx0fSBjYXRjaCggZSApIHt9XG5cdFx0XHRcdFx0aGFuZGxlUmVzcG9uc2UoIG51bGwsIFwiYWJvcnRcIiApO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRzdWNjZXNzOiBmdW5jdGlvbiggZGF0YSwgc3RhdHVzICkge1xuXHRcdFx0XHRcdHNldHRpbmdzLnN1Y2Nlc3MoIGRhdGEsIHN0YXR1cyApO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRlcnJvcjogZnVuY3Rpb24oIGRhdGEsIHN0YXR1cyApIHtcblx0XHRcdFx0XHRzZXR0aW5ncy5lcnJvciggZGF0YSwgc3RhdHVzICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRoYW5kbGVSZXNwb25zZSA9IGZ1bmN0aW9uKCBkYXRhLCBzdGF0dXMgKSB7XG5cdFx0XHQkLmVhY2goIHhoclByb3BzLCBmdW5jdGlvbiggaSwga2V5ICkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGFtcFhIUlsga2V5IF0gPSB4aHJbIGtleSBdO1xuXHRcdFx0XHR9IGNhdGNoKCBlICkge31cblx0XHRcdH0pO1xuXHRcdFx0Ly8gUGxheWJvb2sgcmV0dXJucyBcIkhUVFAvMS4xIDIwMCBPS1wiXG5cdFx0XHQvLyBUT0RPOiBzb21ldGhpbmcgYWxzbyByZXR1cm5zIFwiT0tcIiwgd2hhdD9cblx0XHRcdGlmICggL09LJC8udGVzdCggYW1wWEhSLnN0YXR1c1RleHQgKSApIHtcblx0XHRcdFx0YW1wWEhSLnN0YXR1c1RleHQgPSBcInN1Y2Nlc3NcIjtcblx0XHRcdH1cblx0XHRcdGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHQvLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgYWpheCBlcnJvcnMgd2l0aCBkYXRhXG5cdFx0XHRcdGRhdGEgPSBudWxsO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBhYm9ydGVkICkge1xuXHRcdFx0XHRzdGF0dXMgPSBcImFib3J0XCI7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIC90aW1lb3V0fGVycm9yfGFib3J0Ly50ZXN0KCBzdGF0dXMgKSApIHtcblx0XHRcdFx0YW1wWEhSLmVycm9yKCBkYXRhLCBzdGF0dXMgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFtcFhIUi5zdWNjZXNzKCBkYXRhLCBzdGF0dXMgKTtcblx0XHRcdH1cblx0XHRcdC8vIGF2b2lkIGhhbmRsaW5nIGEgcmVzcG9uc2UgbXVsdGlwbGUgdGltZXNcblx0XHRcdC8vIHRoaXMgY2FuIGhhcHBlbiBpZiBhIHJlcXVlc3QgaXMgYWJvcnRlZFxuXHRcdFx0Ly8gVE9ETzogZmlndXJlIG91dCBpZiB0aGlzIGJyZWFrcyBwb2xsaW5nIG9yIG11bHRpLXBhcnQgcmVzcG9uc2VzXG5cdFx0XHRoYW5kbGVSZXNwb25zZSA9ICQubm9vcDtcblx0XHR9O1xuXG5cdFx0YW1wbGlmeS5wdWJsaXNoKCBcInJlcXVlc3QuYWpheC5wcmVwcm9jZXNzXCIsXG5cdFx0XHRkZWZuU2V0dGluZ3MsIHNldHRpbmdzLCBhamF4U2V0dGluZ3MsIGFtcFhIUiApO1xuXG5cdFx0JC5leHRlbmQoIGFqYXhTZXR0aW5ncywge1xuXHRcdFx0aXNKU09OUDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gKC9qc29ucC9naSkudGVzdCh0aGlzLmRhdGFUeXBlKTtcblx0XHRcdH0sXG5cdFx0XHRjYWNoZVVSTDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRpZiAoIXRoaXMuaXNKU09OUCgpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMudXJsO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIGNhbGxiYWNrTmFtZSA9ICdjYWxsYmFjayc7XG5cblx0XHRcdFx0Ly8gcG9zc2libGUgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBuYW1lIHRvIGJlIG92ZXJyaWRkZW5cblx0XHRcdFx0aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoJ2pzb25wJykpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5qc29ucCAhPT0gZmFsc2UpIHtcblx0XHRcdFx0XHRcdGNhbGxiYWNrTmFtZSA9IHRoaXMuanNvbnA7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmhhc093blByb3BlcnR5KCdqc29ucENhbGxiYWNrJykpIHtcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2tOYW1lID0gdGhpcy5qc29ucENhbGxiYWNrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIHNlYXJjaCBhbmQgcmVwbGFjZSBjYWxsYmFjayBwYXJhbWV0ZXIgaW4gcXVlcnkgc3RyaW5nIHdpdGggZW1wdHkgc3RyaW5nXG5cdFx0XHRcdHZhciBjYWxsYmFja1JlZ2V4ID0gbmV3IFJlZ0V4cCgnJj8nICsgY2FsbGJhY2tOYW1lICsgJz1bXiZdKiY/JywgJ2dpJyk7XG5cdFx0XHRcdHJldHVybiB0aGlzLnVybC5yZXBsYWNlKGNhbGxiYWNrUmVnZXgsICcnKTtcblx0XHRcdH0sXG5cdFx0XHRzdWNjZXNzOiBmdW5jdGlvbiggZGF0YSwgc3RhdHVzICkge1xuXHRcdFx0XHRoYW5kbGVSZXNwb25zZSggZGF0YSwgc3RhdHVzICk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3I6IGZ1bmN0aW9uKCBfeGhyLCBzdGF0dXMgKSB7XG5cdFx0XHRcdGhhbmRsZVJlc3BvbnNlKCBudWxsLCBzdGF0dXMgKTtcblx0XHRcdH0sXG5cdFx0XHRiZWZvcmVTZW5kOiBmdW5jdGlvbiggX3hociwgX2FqYXhTZXR0aW5ncyApIHtcblx0XHRcdFx0eGhyID0gX3hocjtcblx0XHRcdFx0YWpheFNldHRpbmdzID0gX2FqYXhTZXR0aW5ncztcblx0XHRcdFx0dmFyIHJldCA9IGRlZm5TZXR0aW5ncy5iZWZvcmVTZW5kID9cblx0XHRcdFx0XHRkZWZuU2V0dGluZ3MuYmVmb3JlU2VuZC5jYWxsKCB0aGlzLCBhbXBYSFIsIGFqYXhTZXR0aW5ncyApIDogdHJ1ZTtcblx0XHRcdFx0cmV0dXJuIHJldCAmJiBhbXBsaWZ5LnB1Ymxpc2goIFwicmVxdWVzdC5iZWZvcmUuYWpheFwiLFxuXHRcdFx0XHRcdGRlZm5TZXR0aW5ncywgc2V0dGluZ3MsIGFqYXhTZXR0aW5ncywgYW1wWEhSICk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBjYWNoZSBhbGwgSlNPTlAgcmVxdWVzdHNcblx0XHRpZiAoYWpheFNldHRpbmdzLmNhY2hlICYmIGFqYXhTZXR0aW5ncy5pc0pTT05QKCkpIHtcblx0XHRcdCQuZXh0ZW5kKGFqYXhTZXR0aW5ncywge1xuXHRcdFx0XHRjYWNoZTogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0JC5hamF4KCBhamF4U2V0dGluZ3MgKTtcblxuXHRcdHJlcXVlc3QuYWJvcnQgPSBmdW5jdGlvbigpIHtcblx0XHRcdGFtcFhIUi5hYm9ydCgpO1xuXHRcdFx0YWJvcnQuY2FsbCggdGhpcyApO1xuXHRcdH07XG5cdH07XG59O1xuXG5cblxuYW1wbGlmeS5zdWJzY3JpYmUoIFwicmVxdWVzdC5hamF4LnByZXByb2Nlc3NcIiwgZnVuY3Rpb24oIGRlZm5TZXR0aW5ncywgc2V0dGluZ3MsIGFqYXhTZXR0aW5ncyApIHtcblx0dmFyIG1hcHBlZEtleXMgPSBbXSxcblx0XHRkYXRhID0gYWpheFNldHRpbmdzLmRhdGE7XG5cblx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRkYXRhID0gJC5leHRlbmQoIHRydWUsIHt9LCBkZWZuU2V0dGluZ3MuZGF0YSwgZGF0YSApO1xuXG5cdGFqYXhTZXR0aW5ncy51cmwgPSBhamF4U2V0dGluZ3MudXJsLnJlcGxhY2UoIHJ1cmxEYXRhLCBmdW5jdGlvbiAoIG0sIGtleSApIHtcblx0XHRpZiAoIGtleSBpbiBkYXRhICkge1xuXHRcdFx0bWFwcGVkS2V5cy5wdXNoKCBrZXkgKTtcblx0XHRcdHJldHVybiBkYXRhWyBrZXkgXTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vIFdlIGRlbGV0ZSB0aGUga2V5cyBsYXRlciBzbyBkdXBsaWNhdGVzIGFyZSBzdGlsbCByZXBsYWNlZFxuXHQkLmVhY2goIG1hcHBlZEtleXMsIGZ1bmN0aW9uICggaSwga2V5ICkge1xuXHRcdGRlbGV0ZSBkYXRhWyBrZXkgXTtcblx0fSk7XG5cblx0YWpheFNldHRpbmdzLmRhdGEgPSBkYXRhO1xufSk7XG5cblxuXG5hbXBsaWZ5LnN1YnNjcmliZSggXCJyZXF1ZXN0LmFqYXgucHJlcHJvY2Vzc1wiLCBmdW5jdGlvbiggZGVmblNldHRpbmdzLCBzZXR0aW5ncywgYWpheFNldHRpbmdzICkge1xuXHR2YXIgZGF0YSA9IGFqYXhTZXR0aW5ncy5kYXRhLFxuXHRcdGRhdGFNYXAgPSBkZWZuU2V0dGluZ3MuZGF0YU1hcDtcblxuXHRpZiAoICFkYXRhTWFwIHx8IHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICggJC5pc0Z1bmN0aW9uKCBkYXRhTWFwICkgKSB7XG5cdFx0YWpheFNldHRpbmdzLmRhdGEgPSBkYXRhTWFwKCBkYXRhICk7XG5cdH0gZWxzZSB7XG5cdFx0JC5lYWNoKCBkZWZuU2V0dGluZ3MuZGF0YU1hcCwgZnVuY3Rpb24oIG9yaWcsIHJlcGxhY2UgKSB7XG5cdFx0XHRpZiAoIG9yaWcgaW4gZGF0YSApIHtcblx0XHRcdFx0ZGF0YVsgcmVwbGFjZSBdID0gZGF0YVsgb3JpZyBdO1xuXHRcdFx0XHRkZWxldGUgZGF0YVsgb3JpZyBdO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGFqYXhTZXR0aW5ncy5kYXRhID0gZGF0YTtcblx0fVxufSk7XG5cblxuXG52YXIgY2FjaGUgPSBhbXBsaWZ5LnJlcXVlc3QuY2FjaGUgPSB7XG5cdF9rZXk6IGZ1bmN0aW9uKCByZXNvdXJjZUlkLCB1cmwsIGRhdGEgKSB7XG5cdFx0ZGF0YSA9IHVybCArIGRhdGE7XG5cdFx0dmFyIGxlbmd0aCA9IGRhdGEubGVuZ3RoLFxuXHRcdFx0aSA9IDA7XG5cblx0XHQvKmpzaGludCBiaXR3aXNlOmZhbHNlKi9cblx0XHRmdW5jdGlvbiBjaHVuaygpIHtcblx0XHRcdHJldHVybiBkYXRhLmNoYXJDb2RlQXQoIGkrKyApIDw8IDI0IHxcblx0XHRcdFx0ZGF0YS5jaGFyQ29kZUF0KCBpKysgKSA8PCAxNiB8XG5cdFx0XHRcdGRhdGEuY2hhckNvZGVBdCggaSsrICkgPDwgOCB8XG5cdFx0XHRcdGRhdGEuY2hhckNvZGVBdCggaSsrICkgPDwgMDtcblx0XHR9XG5cblx0XHR2YXIgY2hlY2tzdW0gPSBjaHVuaygpO1xuXHRcdHdoaWxlICggaSA8IGxlbmd0aCApIHtcblx0XHRcdGNoZWNrc3VtIF49IGNodW5rKCk7XG5cdFx0fVxuXHRcdC8qanNoaW50IGJpdHdpc2U6dHJ1ZSovXG5cblx0XHRyZXR1cm4gXCJyZXF1ZXN0LVwiICsgcmVzb3VyY2VJZCArIFwiLVwiICsgY2hlY2tzdW07XG5cdH0sXG5cblx0X2RlZmF1bHQ6IChmdW5jdGlvbigpIHtcblx0XHR2YXIgbWVtb3J5U3RvcmUgPSB7fTtcblx0XHRyZXR1cm4gZnVuY3Rpb24oIHJlc291cmNlLCBzZXR0aW5ncywgYWpheFNldHRpbmdzLCBhbXBYSFIgKSB7XG5cdFx0XHQvLyBkYXRhIGlzIGFscmVhZHkgY29udmVydGVkIHRvIGEgc3RyaW5nIGJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlXG5cdFx0XHR2YXIgY2FjaGVLZXkgPSBjYWNoZS5fa2V5KCBzZXR0aW5ncy5yZXNvdXJjZUlkLFxuXHRcdFx0XHRcdGFqYXhTZXR0aW5ncy5jYWNoZVVSTCgpLCBhamF4U2V0dGluZ3MuZGF0YSApLFxuXHRcdFx0XHRkdXJhdGlvbiA9IHJlc291cmNlLmNhY2hlO1xuXG5cdFx0XHRpZiAoIGNhY2hlS2V5IGluIG1lbW9yeVN0b3JlICkge1xuXHRcdFx0XHRhbXBYSFIuc3VjY2VzcyggbWVtb3J5U3RvcmVbIGNhY2hlS2V5IF0gKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIHN1Y2Nlc3MgPSBhbXBYSFIuc3VjY2Vzcztcblx0XHRcdGFtcFhIUi5zdWNjZXNzID0gZnVuY3Rpb24oIGRhdGEgKSB7XG5cdFx0XHRcdG1lbW9yeVN0b3JlWyBjYWNoZUtleSBdID0gZGF0YTtcblx0XHRcdFx0aWYgKCB0eXBlb2YgZHVyYXRpb24gPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBtZW1vcnlTdG9yZVsgY2FjaGVLZXkgXTtcblx0XHRcdFx0XHR9LCBkdXJhdGlvbiApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN1Y2Nlc3MuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0fTtcblx0XHR9O1xuXHR9KCkpXG59O1xuXG5pZiAoIGFtcGxpZnkuc3RvcmUgKSB7XG5cdCQuZWFjaCggYW1wbGlmeS5zdG9yZS50eXBlcywgZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0Y2FjaGVbIHR5cGUgXSA9IGZ1bmN0aW9uKCByZXNvdXJjZSwgc2V0dGluZ3MsIGFqYXhTZXR0aW5ncywgYW1wWEhSICkge1xuXHRcdFx0dmFyIGNhY2hlS2V5ID0gY2FjaGUuX2tleSggc2V0dGluZ3MucmVzb3VyY2VJZCxcblx0XHRcdFx0XHRhamF4U2V0dGluZ3MuY2FjaGVVUkwoKSwgYWpheFNldHRpbmdzLmRhdGEgKSxcblx0XHRcdFx0Y2FjaGVkID0gYW1wbGlmeS5zdG9yZVsgdHlwZSBdKCBjYWNoZUtleSApO1xuXG5cdFx0XHRpZiAoIGNhY2hlZCApIHtcblx0XHRcdFx0YWpheFNldHRpbmdzLnN1Y2Nlc3MoIGNhY2hlZCApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR2YXIgc3VjY2VzcyA9IGFtcFhIUi5zdWNjZXNzO1xuXHRcdFx0YW1wWEhSLnN1Y2Nlc3MgPSBmdW5jdGlvbiggZGF0YSApIHtcblx0XHRcdFx0YW1wbGlmeS5zdG9yZVsgdHlwZSBdKCBjYWNoZUtleSwgZGF0YSwgeyBleHBpcmVzOiByZXNvdXJjZS5jYWNoZS5leHBpcmVzIH0gKTtcblx0XHRcdFx0c3VjY2Vzcy5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHR9O1xuXHRcdH07XG5cdH0pO1xuXHRjYWNoZS5wZXJzaXN0ID0gY2FjaGVbIGFtcGxpZnkuc3RvcmUudHlwZSBdO1xufVxuXG5hbXBsaWZ5LnN1YnNjcmliZSggXCJyZXF1ZXN0LmJlZm9yZS5hamF4XCIsIGZ1bmN0aW9uKCByZXNvdXJjZSApIHtcblx0dmFyIGNhY2hlVHlwZSA9IHJlc291cmNlLmNhY2hlO1xuXHRpZiAoIGNhY2hlVHlwZSApIHtcblx0XHQvLyBub3JtYWxpemUgYmV0d2VlbiBvYmplY3RzIGFuZCBzdHJpbmdzL2Jvb2xlYW5zL251bWJlcnNcblx0XHRjYWNoZVR5cGUgPSBjYWNoZVR5cGUudHlwZSB8fCBjYWNoZVR5cGU7XG5cdFx0cmV0dXJuIGNhY2hlWyBjYWNoZVR5cGUgaW4gY2FjaGUgPyBjYWNoZVR5cGUgOiBcIl9kZWZhdWx0XCIgXVxuXHRcdFx0LmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fVxufSk7XG5cblxuXG5hbXBsaWZ5LnJlcXVlc3QuZGVjb2RlcnMgPSB7XG5cdC8vIGh0dHA6Ly9sYWJzLm9tbml0aS5jb20vbGFicy9qc2VuZFxuXHRqc2VuZDogZnVuY3Rpb24oIGRhdGEsIHN0YXR1cywgYW1wWEhSLCBzdWNjZXNzLCBlcnJvciApIHtcblx0XHRpZiAoIGRhdGEuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiApIHtcblx0XHRcdHN1Y2Nlc3MoIGRhdGEuZGF0YSApO1xuXHRcdH0gZWxzZSBpZiAoIGRhdGEuc3RhdHVzID09PSBcImZhaWxcIiApIHtcblx0XHRcdGVycm9yKCBkYXRhLmRhdGEsIFwiZmFpbFwiICk7XG5cdFx0fSBlbHNlIGlmICggZGF0YS5zdGF0dXMgPT09IFwiZXJyb3JcIiApIHtcblx0XHRcdGRlbGV0ZSBkYXRhLnN0YXR1cztcblx0XHRcdGVycm9yKCBkYXRhLCBcImVycm9yXCIgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZXJyb3IoIG51bGwsIFwiZXJyb3JcIiApO1xuXHRcdH1cblx0fVxufTtcblxuYW1wbGlmeS5zdWJzY3JpYmUoIFwicmVxdWVzdC5iZWZvcmUuYWpheFwiLCBmdW5jdGlvbiggcmVzb3VyY2UsIHNldHRpbmdzLCBhamF4U2V0dGluZ3MsIGFtcFhIUiApIHtcblx0dmFyIF9zdWNjZXNzID0gYW1wWEhSLnN1Y2Nlc3MsXG5cdFx0X2Vycm9yID0gYW1wWEhSLmVycm9yLFxuXHRcdGRlY29kZXIgPSAkLmlzRnVuY3Rpb24oIHJlc291cmNlLmRlY29kZXIgKSA/XG5cdFx0XHRyZXNvdXJjZS5kZWNvZGVyIDpcblx0XHRcdHJlc291cmNlLmRlY29kZXIgaW4gYW1wbGlmeS5yZXF1ZXN0LmRlY29kZXJzID9cblx0XHRcdFx0YW1wbGlmeS5yZXF1ZXN0LmRlY29kZXJzWyByZXNvdXJjZS5kZWNvZGVyIF0gOlxuXHRcdFx0XHRhbXBsaWZ5LnJlcXVlc3QuZGVjb2RlcnMuX2RlZmF1bHQ7XG5cblx0aWYgKCAhZGVjb2RlciApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRmdW5jdGlvbiBzdWNjZXNzKCBkYXRhLCBzdGF0dXMgKSB7XG5cdFx0X3N1Y2Nlc3MoIGRhdGEsIHN0YXR1cyApO1xuXHR9XG5cdGZ1bmN0aW9uIGVycm9yKCBkYXRhLCBzdGF0dXMgKSB7XG5cdFx0X2Vycm9yKCBkYXRhLCBzdGF0dXMgKTtcblx0fVxuXHRhbXBYSFIuc3VjY2VzcyA9IGZ1bmN0aW9uKCBkYXRhLCBzdGF0dXMgKSB7XG5cdFx0ZGVjb2RlciggZGF0YSwgc3RhdHVzLCBhbXBYSFIsIHN1Y2Nlc3MsIGVycm9yICk7XG5cdH07XG5cdGFtcFhIUi5lcnJvciA9IGZ1bmN0aW9uKCBkYXRhLCBzdGF0dXMgKSB7XG5cdFx0ZGVjb2RlciggZGF0YSwgc3RhdHVzLCBhbXBYSFIsIHN1Y2Nlc3MsIGVycm9yICk7XG5cdH07XG59KTtcblxufSggYW1wbGlmeSwgalF1ZXJ5ICkgKTtcbiIsIi8qKlxuICogVmVyc2lvbjogMS4wIEFscGhhLTEgXG4gKiBCdWlsZCBEYXRlOiAxMy1Ob3YtMjAwN1xuICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcsIENvb2xpdGUgSW5jLiAoaHR0cDovL3d3dy5jb29saXRlLmNvbS8pLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZTogTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlLiBTZWUgbGljZW5zZS50eHQgYW5kIGh0dHA6Ly93d3cuZGF0ZWpzLmNvbS9saWNlbnNlLy4gXG4gKiBXZWJzaXRlOiBodHRwOi8vd3d3LmRhdGVqcy5jb20vIG9yIGh0dHA6Ly93d3cuY29vbGl0ZS5jb20vZGF0ZWpzL1xuICovXG5EYXRlLkN1bHR1cmVJbmZvPXtuYW1lOlwiZW4tVVNcIixlbmdsaXNoTmFtZTpcIkVuZ2xpc2ggKFVuaXRlZCBTdGF0ZXMpXCIsbmF0aXZlTmFtZTpcIkVuZ2xpc2ggKFVuaXRlZCBTdGF0ZXMpXCIsZGF5TmFtZXM6W1wiU3VuZGF5XCIsXCJNb25kYXlcIixcIlR1ZXNkYXlcIixcIldlZG5lc2RheVwiLFwiVGh1cnNkYXlcIixcIkZyaWRheVwiLFwiU2F0dXJkYXlcIl0sYWJicmV2aWF0ZWREYXlOYW1lczpbXCJTdW5cIixcIk1vblwiLFwiVHVlXCIsXCJXZWRcIixcIlRodVwiLFwiRnJpXCIsXCJTYXRcIl0sc2hvcnRlc3REYXlOYW1lczpbXCJTdVwiLFwiTW9cIixcIlR1XCIsXCJXZVwiLFwiVGhcIixcIkZyXCIsXCJTYVwiXSxmaXJzdExldHRlckRheU5hbWVzOltcIlNcIixcIk1cIixcIlRcIixcIldcIixcIlRcIixcIkZcIixcIlNcIl0sbW9udGhOYW1lczpbXCJKYW51YXJ5XCIsXCJGZWJydWFyeVwiLFwiTWFyY2hcIixcIkFwcmlsXCIsXCJNYXlcIixcIkp1bmVcIixcIkp1bHlcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYmVyXCIsXCJPY3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVjZW1iZXJcIl0sYWJicmV2aWF0ZWRNb250aE5hbWVzOltcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWF5XCIsXCJKdW5cIixcIkp1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm92XCIsXCJEZWNcIl0sYW1EZXNpZ25hdG9yOlwiQU1cIixwbURlc2lnbmF0b3I6XCJQTVwiLGZpcnN0RGF5T2ZXZWVrOjAsdHdvRGlnaXRZZWFyTWF4OjIwMjksZGF0ZUVsZW1lbnRPcmRlcjpcIm1keVwiLGZvcm1hdFBhdHRlcm5zOntzaG9ydERhdGU6XCJNL2QveXl5eVwiLGxvbmdEYXRlOlwiZGRkZCwgTU1NTSBkZCwgeXl5eVwiLHNob3J0VGltZTpcImg6bW0gdHRcIixsb25nVGltZTpcImg6bW06c3MgdHRcIixmdWxsRGF0ZVRpbWU6XCJkZGRkLCBNTU1NIGRkLCB5eXl5IGg6bW06c3MgdHRcIixzb3J0YWJsZURhdGVUaW1lOlwieXl5eS1NTS1kZFRISDptbTpzc1wiLHVuaXZlcnNhbFNvcnRhYmxlRGF0ZVRpbWU6XCJ5eXl5LU1NLWRkIEhIOm1tOnNzWlwiLHJmYzExMjM6XCJkZGQsIGRkIE1NTSB5eXl5IEhIOm1tOnNzIEdNVFwiLG1vbnRoRGF5OlwiTU1NTSBkZFwiLHllYXJNb250aDpcIk1NTU0sIHl5eXlcIn0scmVnZXhQYXR0ZXJuczp7amFuOi9eamFuKHVhcnkpPy9pLGZlYjovXmZlYihydWFyeSk/L2ksbWFyOi9ebWFyKGNoKT8vaSxhcHI6L15hcHIoaWwpPy9pLG1heTovXm1heS9pLGp1bjovXmp1bihlKT8vaSxqdWw6L15qdWwoeSk/L2ksYXVnOi9eYXVnKHVzdCk/L2ksc2VwOi9ec2VwKHQoZW1iZXIpPyk/L2ksb2N0Oi9eb2N0KG9iZXIpPy9pLG5vdjovXm5vdihlbWJlcik/L2ksZGVjOi9eZGVjKGVtYmVyKT8vaSxzdW46L15zdShuKGRheSk/KT8vaSxtb246L15tbyhuKGRheSk/KT8vaSx0dWU6L150dShlKHMoZGF5KT8pPyk/L2ksd2VkOi9ed2UoZChuZXNkYXkpPyk/L2ksdGh1Oi9edGgodShyKHMoZGF5KT8pPyk/KT8vaSxmcmk6L15mcihpKGRheSk/KT8vaSxzYXQ6L15zYSh0KHVyZGF5KT8pPy9pLGZ1dHVyZTovXm5leHQvaSxwYXN0Oi9ebGFzdHxwYXN0fHByZXYoaW91cyk/L2ksYWRkOi9eKFxcK3xhZnRlcnxmcm9tKS9pLHN1YnRyYWN0Oi9eKFxcLXxiZWZvcmV8YWdvKS9pLHllc3RlcmRheTovXnllc3RlcmRheS9pLHRvZGF5Oi9edChvZGF5KT8vaSx0b21vcnJvdzovXnRvbW9ycm93L2ksbm93Oi9ebihvdyk/L2ksbWlsbGlzZWNvbmQ6L15tc3xtaWxsaShzZWNvbmQpP3M/L2ksc2Vjb25kOi9ec2VjKG9uZCk/cz8vaSxtaW51dGU6L15taW4odXRlKT9zPy9pLGhvdXI6L15oKG91KT9ycz8vaSx3ZWVrOi9edyhlZSk/ay9pLG1vbnRoOi9ebShvKG50aCk/cz8pPy9pLGRheTovXmQoYXlzPyk/L2kseWVhcjovXnkoKGVhKT9ycz8pPy9pLHNob3J0TWVyaWRpYW46L14oYXxwKS9pLGxvbmdNZXJpZGlhbjovXihhXFwuP20/XFwuP3xwXFwuP20/XFwuPykvaSx0aW1lem9uZTovXigoZShzfGQpdHxjKHN8ZCl0fG0oc3xkKXR8cChzfGQpdCl8KChnbXQpP1xccyooXFwrfFxcLSlcXHMqXFxkXFxkXFxkXFxkPyl8Z210KS9pLG9yZGluYWxTdWZmaXg6L15cXHMqKHN0fG5kfHJkfHRoKS9pLHRpbWVDb250ZXh0Oi9eXFxzKihcXDp8YXxwKS9pfSxhYmJyZXZpYXRlZFRpbWVab25lU3RhbmRhcmQ6e0dNVDpcIi0wMDBcIixFU1Q6XCItMDQwMFwiLENTVDpcIi0wNTAwXCIsTVNUOlwiLTA2MDBcIixQU1Q6XCItMDcwMFwifSxhYmJyZXZpYXRlZFRpbWVab25lRFNUOntHTVQ6XCItMDAwXCIsRURUOlwiLTA1MDBcIixDRFQ6XCItMDYwMFwiLE1EVDpcIi0wNzAwXCIsUERUOlwiLTA4MDBcIn19O1xuRGF0ZS5nZXRNb250aE51bWJlckZyb21OYW1lPWZ1bmN0aW9uKG5hbWUpe3ZhciBuPURhdGUuQ3VsdHVyZUluZm8ubW9udGhOYW1lcyxtPURhdGUuQ3VsdHVyZUluZm8uYWJicmV2aWF0ZWRNb250aE5hbWVzLHM9bmFtZS50b0xvd2VyQ2FzZSgpO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXtpZihuW2ldLnRvTG93ZXJDYXNlKCk9PXN8fG1baV0udG9Mb3dlckNhc2UoKT09cyl7cmV0dXJuIGk7fX1cbnJldHVybi0xO307RGF0ZS5nZXREYXlOdW1iZXJGcm9tTmFtZT1mdW5jdGlvbihuYW1lKXt2YXIgbj1EYXRlLkN1bHR1cmVJbmZvLmRheU5hbWVzLG09RGF0ZS5DdWx0dXJlSW5mby5hYmJyZXZpYXRlZERheU5hbWVzLG89RGF0ZS5DdWx0dXJlSW5mby5zaG9ydGVzdERheU5hbWVzLHM9bmFtZS50b0xvd2VyQ2FzZSgpO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXtpZihuW2ldLnRvTG93ZXJDYXNlKCk9PXN8fG1baV0udG9Mb3dlckNhc2UoKT09cyl7cmV0dXJuIGk7fX1cbnJldHVybi0xO307RGF0ZS5pc0xlYXBZZWFyPWZ1bmN0aW9uKHllYXIpe3JldHVybigoKHllYXIlND09PTApJiYoeWVhciUxMDAhPT0wKSl8fCh5ZWFyJTQwMD09PTApKTt9O0RhdGUuZ2V0RGF5c0luTW9udGg9ZnVuY3Rpb24oeWVhcixtb250aCl7cmV0dXJuWzMxLChEYXRlLmlzTGVhcFllYXIoeWVhcik/Mjk6MjgpLDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXVttb250aF07fTtEYXRlLmdldFRpbWV6b25lT2Zmc2V0PWZ1bmN0aW9uKHMsZHN0KXtyZXR1cm4oZHN0fHxmYWxzZSk/RGF0ZS5DdWx0dXJlSW5mby5hYmJyZXZpYXRlZFRpbWVab25lRFNUW3MudG9VcHBlckNhc2UoKV06RGF0ZS5DdWx0dXJlSW5mby5hYmJyZXZpYXRlZFRpbWVab25lU3RhbmRhcmRbcy50b1VwcGVyQ2FzZSgpXTt9O0RhdGUuZ2V0VGltZXpvbmVBYmJyZXZpYXRpb249ZnVuY3Rpb24ob2Zmc2V0LGRzdCl7dmFyIG49KGRzdHx8ZmFsc2UpP0RhdGUuQ3VsdHVyZUluZm8uYWJicmV2aWF0ZWRUaW1lWm9uZURTVDpEYXRlLkN1bHR1cmVJbmZvLmFiYnJldmlhdGVkVGltZVpvbmVTdGFuZGFyZCxwO2ZvcihwIGluIG4pe2lmKG5bcF09PT1vZmZzZXQpe3JldHVybiBwO319XG5yZXR1cm4gbnVsbDt9O0RhdGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMuZ2V0VGltZSgpKTt9O0RhdGUucHJvdG90eXBlLmNvbXBhcmVUbz1mdW5jdGlvbihkYXRlKXtpZihpc05hTih0aGlzKSl7dGhyb3cgbmV3IEVycm9yKHRoaXMpO31cbmlmKGRhdGUgaW5zdGFuY2VvZiBEYXRlJiYhaXNOYU4oZGF0ZSkpe3JldHVybih0aGlzPmRhdGUpPzE6KHRoaXM8ZGF0ZSk/LTE6MDt9ZWxzZXt0aHJvdyBuZXcgVHlwZUVycm9yKGRhdGUpO319O0RhdGUucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihkYXRlKXtyZXR1cm4odGhpcy5jb21wYXJlVG8oZGF0ZSk9PT0wKTt9O0RhdGUucHJvdG90eXBlLmJldHdlZW49ZnVuY3Rpb24oc3RhcnQsZW5kKXt2YXIgdD10aGlzLmdldFRpbWUoKTtyZXR1cm4gdD49c3RhcnQuZ2V0VGltZSgpJiZ0PD1lbmQuZ2V0VGltZSgpO307RGF0ZS5wcm90b3R5cGUuYWRkTWlsbGlzZWNvbmRzPWZ1bmN0aW9uKHZhbHVlKXt0aGlzLnNldE1pbGxpc2Vjb25kcyh0aGlzLmdldE1pbGxpc2Vjb25kcygpK3ZhbHVlKTtyZXR1cm4gdGhpczt9O0RhdGUucHJvdG90eXBlLmFkZFNlY29uZHM9ZnVuY3Rpb24odmFsdWUpe3JldHVybiB0aGlzLmFkZE1pbGxpc2Vjb25kcyh2YWx1ZSoxMDAwKTt9O0RhdGUucHJvdG90eXBlLmFkZE1pbnV0ZXM9ZnVuY3Rpb24odmFsdWUpe3JldHVybiB0aGlzLmFkZE1pbGxpc2Vjb25kcyh2YWx1ZSo2MDAwMCk7fTtEYXRlLnByb3RvdHlwZS5hZGRIb3Vycz1mdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHRoaXMuYWRkTWlsbGlzZWNvbmRzKHZhbHVlKjM2MDAwMDApO307RGF0ZS5wcm90b3R5cGUuYWRkRGF5cz1mdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHRoaXMuYWRkTWlsbGlzZWNvbmRzKHZhbHVlKjg2NDAwMDAwKTt9O0RhdGUucHJvdG90eXBlLmFkZFdlZWtzPWZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdGhpcy5hZGRNaWxsaXNlY29uZHModmFsdWUqNjA0ODAwMDAwKTt9O0RhdGUucHJvdG90eXBlLmFkZE1vbnRocz1mdW5jdGlvbih2YWx1ZSl7dmFyIG49dGhpcy5nZXREYXRlKCk7dGhpcy5zZXREYXRlKDEpO3RoaXMuc2V0TW9udGgodGhpcy5nZXRNb250aCgpK3ZhbHVlKTt0aGlzLnNldERhdGUoTWF0aC5taW4obix0aGlzLmdldERheXNJbk1vbnRoKCkpKTtyZXR1cm4gdGhpczt9O0RhdGUucHJvdG90eXBlLmFkZFllYXJzPWZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdGhpcy5hZGRNb250aHModmFsdWUqMTIpO307RGF0ZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGNvbmZpZyl7aWYodHlwZW9mIGNvbmZpZz09XCJudW1iZXJcIil7dGhpcy5fb3JpZW50PWNvbmZpZztyZXR1cm4gdGhpczt9XG52YXIgeD1jb25maWc7aWYoeC5taWxsaXNlY29uZHx8eC5taWxsaXNlY29uZHMpe3RoaXMuYWRkTWlsbGlzZWNvbmRzKHgubWlsbGlzZWNvbmR8fHgubWlsbGlzZWNvbmRzKTt9XG5pZih4LnNlY29uZHx8eC5zZWNvbmRzKXt0aGlzLmFkZFNlY29uZHMoeC5zZWNvbmR8fHguc2Vjb25kcyk7fVxuaWYoeC5taW51dGV8fHgubWludXRlcyl7dGhpcy5hZGRNaW51dGVzKHgubWludXRlfHx4Lm1pbnV0ZXMpO31cbmlmKHguaG91cnx8eC5ob3Vycyl7dGhpcy5hZGRIb3Vycyh4LmhvdXJ8fHguaG91cnMpO31cbmlmKHgubW9udGh8fHgubW9udGhzKXt0aGlzLmFkZE1vbnRocyh4Lm1vbnRofHx4Lm1vbnRocyk7fVxuaWYoeC55ZWFyfHx4LnllYXJzKXt0aGlzLmFkZFllYXJzKHgueWVhcnx8eC55ZWFycyk7fVxuaWYoeC5kYXl8fHguZGF5cyl7dGhpcy5hZGREYXlzKHguZGF5fHx4LmRheXMpO31cbnJldHVybiB0aGlzO307RGF0ZS5fdmFsaWRhdGU9ZnVuY3Rpb24odmFsdWUsbWluLG1heCxuYW1lKXtpZih0eXBlb2YgdmFsdWUhPVwibnVtYmVyXCIpe3Rocm93IG5ldyBUeXBlRXJyb3IodmFsdWUrXCIgaXMgbm90IGEgTnVtYmVyLlwiKTt9ZWxzZSBpZih2YWx1ZTxtaW58fHZhbHVlPm1heCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IodmFsdWUrXCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIFwiK25hbWUrXCIuXCIpO31cbnJldHVybiB0cnVlO307RGF0ZS52YWxpZGF0ZU1pbGxpc2Vjb25kPWZ1bmN0aW9uKG4pe3JldHVybiBEYXRlLl92YWxpZGF0ZShuLDAsOTk5LFwibWlsbGlzZWNvbmRzXCIpO307RGF0ZS52YWxpZGF0ZVNlY29uZD1mdW5jdGlvbihuKXtyZXR1cm4gRGF0ZS5fdmFsaWRhdGUobiwwLDU5LFwic2Vjb25kc1wiKTt9O0RhdGUudmFsaWRhdGVNaW51dGU9ZnVuY3Rpb24obil7cmV0dXJuIERhdGUuX3ZhbGlkYXRlKG4sMCw1OSxcIm1pbnV0ZXNcIik7fTtEYXRlLnZhbGlkYXRlSG91cj1mdW5jdGlvbihuKXtyZXR1cm4gRGF0ZS5fdmFsaWRhdGUobiwwLDIzLFwiaG91cnNcIik7fTtEYXRlLnZhbGlkYXRlRGF5PWZ1bmN0aW9uKG4seWVhcixtb250aCl7cmV0dXJuIERhdGUuX3ZhbGlkYXRlKG4sMSxEYXRlLmdldERheXNJbk1vbnRoKHllYXIsbW9udGgpLFwiZGF5c1wiKTt9O0RhdGUudmFsaWRhdGVNb250aD1mdW5jdGlvbihuKXtyZXR1cm4gRGF0ZS5fdmFsaWRhdGUobiwwLDExLFwibW9udGhzXCIpO307RGF0ZS52YWxpZGF0ZVllYXI9ZnVuY3Rpb24obil7cmV0dXJuIERhdGUuX3ZhbGlkYXRlKG4sMSw5OTk5LFwic2Vjb25kc1wiKTt9O0RhdGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihjb25maWcpe3ZhciB4PWNvbmZpZztpZigheC5taWxsaXNlY29uZCYmeC5taWxsaXNlY29uZCE9PTApe3gubWlsbGlzZWNvbmQ9LTE7fVxuaWYoIXguc2Vjb25kJiZ4LnNlY29uZCE9PTApe3guc2Vjb25kPS0xO31cbmlmKCF4Lm1pbnV0ZSYmeC5taW51dGUhPT0wKXt4Lm1pbnV0ZT0tMTt9XG5pZigheC5ob3VyJiZ4LmhvdXIhPT0wKXt4LmhvdXI9LTE7fVxuaWYoIXguZGF5JiZ4LmRheSE9PTApe3guZGF5PS0xO31cbmlmKCF4Lm1vbnRoJiZ4Lm1vbnRoIT09MCl7eC5tb250aD0tMTt9XG5pZigheC55ZWFyJiZ4LnllYXIhPT0wKXt4LnllYXI9LTE7fVxuaWYoeC5taWxsaXNlY29uZCE9LTEmJkRhdGUudmFsaWRhdGVNaWxsaXNlY29uZCh4Lm1pbGxpc2Vjb25kKSl7dGhpcy5hZGRNaWxsaXNlY29uZHMoeC5taWxsaXNlY29uZC10aGlzLmdldE1pbGxpc2Vjb25kcygpKTt9XG5pZih4LnNlY29uZCE9LTEmJkRhdGUudmFsaWRhdGVTZWNvbmQoeC5zZWNvbmQpKXt0aGlzLmFkZFNlY29uZHMoeC5zZWNvbmQtdGhpcy5nZXRTZWNvbmRzKCkpO31cbmlmKHgubWludXRlIT0tMSYmRGF0ZS52YWxpZGF0ZU1pbnV0ZSh4Lm1pbnV0ZSkpe3RoaXMuYWRkTWludXRlcyh4Lm1pbnV0ZS10aGlzLmdldE1pbnV0ZXMoKSk7fVxuaWYoeC5ob3VyIT0tMSYmRGF0ZS52YWxpZGF0ZUhvdXIoeC5ob3VyKSl7dGhpcy5hZGRIb3Vycyh4LmhvdXItdGhpcy5nZXRIb3VycygpKTt9XG5pZih4Lm1vbnRoIT09LTEmJkRhdGUudmFsaWRhdGVNb250aCh4Lm1vbnRoKSl7dGhpcy5hZGRNb250aHMoeC5tb250aC10aGlzLmdldE1vbnRoKCkpO31cbmlmKHgueWVhciE9LTEmJkRhdGUudmFsaWRhdGVZZWFyKHgueWVhcikpe3RoaXMuYWRkWWVhcnMoeC55ZWFyLXRoaXMuZ2V0RnVsbFllYXIoKSk7fVxuaWYoeC5kYXkhPS0xJiZEYXRlLnZhbGlkYXRlRGF5KHguZGF5LHRoaXMuZ2V0RnVsbFllYXIoKSx0aGlzLmdldE1vbnRoKCkpKXt0aGlzLmFkZERheXMoeC5kYXktdGhpcy5nZXREYXRlKCkpO31cbmlmKHgudGltZXpvbmUpe3RoaXMuc2V0VGltZXpvbmUoeC50aW1lem9uZSk7fVxuaWYoeC50aW1lem9uZU9mZnNldCl7dGhpcy5zZXRUaW1lem9uZU9mZnNldCh4LnRpbWV6b25lT2Zmc2V0KTt9XG5yZXR1cm4gdGhpczt9O0RhdGUucHJvdG90eXBlLmNsZWFyVGltZT1mdW5jdGlvbigpe3RoaXMuc2V0SG91cnMoMCk7dGhpcy5zZXRNaW51dGVzKDApO3RoaXMuc2V0U2Vjb25kcygwKTt0aGlzLnNldE1pbGxpc2Vjb25kcygwKTtyZXR1cm4gdGhpczt9O0RhdGUucHJvdG90eXBlLmlzTGVhcFllYXI9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLmdldEZ1bGxZZWFyKCk7cmV0dXJuKCgoeSU0PT09MCkmJih5JTEwMCE9PTApKXx8KHklNDAwPT09MCkpO307RGF0ZS5wcm90b3R5cGUuaXNXZWVrZGF5PWZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLmlzKCkuc2F0KCl8fHRoaXMuaXMoKS5zdW4oKSk7fTtEYXRlLnByb3RvdHlwZS5nZXREYXlzSW5Nb250aD1mdW5jdGlvbigpe3JldHVybiBEYXRlLmdldERheXNJbk1vbnRoKHRoaXMuZ2V0RnVsbFllYXIoKSx0aGlzLmdldE1vbnRoKCkpO307RGF0ZS5wcm90b3R5cGUubW92ZVRvRmlyc3REYXlPZk1vbnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0KHtkYXk6MX0pO307RGF0ZS5wcm90b3R5cGUubW92ZVRvTGFzdERheU9mTW9udGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXQoe2RheTp0aGlzLmdldERheXNJbk1vbnRoKCl9KTt9O0RhdGUucHJvdG90eXBlLm1vdmVUb0RheU9mV2Vlaz1mdW5jdGlvbihkYXksb3JpZW50KXt2YXIgZGlmZj0oZGF5LXRoaXMuZ2V0RGF5KCkrNyoob3JpZW50fHwrMSkpJTc7cmV0dXJuIHRoaXMuYWRkRGF5cygoZGlmZj09PTApP2RpZmYrPTcqKG9yaWVudHx8KzEpOmRpZmYpO307RGF0ZS5wcm90b3R5cGUubW92ZVRvTW9udGg9ZnVuY3Rpb24obW9udGgsb3JpZW50KXt2YXIgZGlmZj0obW9udGgtdGhpcy5nZXRNb250aCgpKzEyKihvcmllbnR8fCsxKSklMTI7cmV0dXJuIHRoaXMuYWRkTW9udGhzKChkaWZmPT09MCk/ZGlmZis9MTIqKG9yaWVudHx8KzEpOmRpZmYpO307RGF0ZS5wcm90b3R5cGUuZ2V0RGF5T2ZZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IoKHRoaXMtbmV3IERhdGUodGhpcy5nZXRGdWxsWWVhcigpLDAsMSkpLzg2NDAwMDAwKTt9O0RhdGUucHJvdG90eXBlLmdldFdlZWtPZlllYXI9ZnVuY3Rpb24oZmlyc3REYXlPZldlZWspe3ZhciB5PXRoaXMuZ2V0RnVsbFllYXIoKSxtPXRoaXMuZ2V0TW9udGgoKSxkPXRoaXMuZ2V0RGF0ZSgpO3ZhciBkb3c9Zmlyc3REYXlPZldlZWt8fERhdGUuQ3VsdHVyZUluZm8uZmlyc3REYXlPZldlZWs7dmFyIG9mZnNldD03KzEtbmV3IERhdGUoeSwwLDEpLmdldERheSgpO2lmKG9mZnNldD09OCl7b2Zmc2V0PTE7fVxudmFyIGRheW51bT0oKERhdGUuVVRDKHksbSxkLDAsMCwwKS1EYXRlLlVUQyh5LDAsMSwwLDAsMCkpLzg2NDAwMDAwKSsxO3ZhciB3PU1hdGguZmxvb3IoKGRheW51bS1vZmZzZXQrNykvNyk7aWYodz09PWRvdyl7eS0tO3ZhciBwcmV2T2Zmc2V0PTcrMS1uZXcgRGF0ZSh5LDAsMSkuZ2V0RGF5KCk7aWYocHJldk9mZnNldD09Mnx8cHJldk9mZnNldD09OCl7dz01Mzt9ZWxzZXt3PTUyO319XG5yZXR1cm4gdzt9O0RhdGUucHJvdG90eXBlLmlzRFNUPWZ1bmN0aW9uKCl7Y29uc29sZS5sb2coJ2lzRFNUJyk7cmV0dXJuIHRoaXMudG9TdHJpbmcoKS5tYXRjaCgvKEV8Q3xNfFApKFN8RClULylbMl09PVwiRFwiO307RGF0ZS5wcm90b3R5cGUuZ2V0VGltZXpvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5nZXRUaW1lem9uZUFiYnJldmlhdGlvbih0aGlzLmdldFVUQ09mZnNldCx0aGlzLmlzRFNUKCkpO307RGF0ZS5wcm90b3R5cGUuc2V0VGltZXpvbmVPZmZzZXQ9ZnVuY3Rpb24ocyl7dmFyIGhlcmU9dGhpcy5nZXRUaW1lem9uZU9mZnNldCgpLHRoZXJlPU51bWJlcihzKSotNi8xMDt0aGlzLmFkZE1pbnV0ZXModGhlcmUtaGVyZSk7cmV0dXJuIHRoaXM7fTtEYXRlLnByb3RvdHlwZS5zZXRUaW1lem9uZT1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5zZXRUaW1lem9uZU9mZnNldChEYXRlLmdldFRpbWV6b25lT2Zmc2V0KHMpKTt9O0RhdGUucHJvdG90eXBlLmdldFVUQ09mZnNldD1mdW5jdGlvbigpe3ZhciBuPXRoaXMuZ2V0VGltZXpvbmVPZmZzZXQoKSotMTAvNixyO2lmKG48MCl7cj0obi0xMDAwMCkudG9TdHJpbmcoKTtyZXR1cm4gclswXStyLnN1YnN0cigyKTt9ZWxzZXtyPShuKzEwMDAwKS50b1N0cmluZygpO3JldHVyblwiK1wiK3Iuc3Vic3RyKDEpO319O0RhdGUucHJvdG90eXBlLmdldERheU5hbWU9ZnVuY3Rpb24oYWJicmV2KXtyZXR1cm4gYWJicmV2P0RhdGUuQ3VsdHVyZUluZm8uYWJicmV2aWF0ZWREYXlOYW1lc1t0aGlzLmdldERheSgpXTpEYXRlLkN1bHR1cmVJbmZvLmRheU5hbWVzW3RoaXMuZ2V0RGF5KCldO307RGF0ZS5wcm90b3R5cGUuZ2V0TW9udGhOYW1lPWZ1bmN0aW9uKGFiYnJldil7cmV0dXJuIGFiYnJldj9EYXRlLkN1bHR1cmVJbmZvLmFiYnJldmlhdGVkTW9udGhOYW1lc1t0aGlzLmdldE1vbnRoKCldOkRhdGUuQ3VsdHVyZUluZm8ubW9udGhOYW1lc1t0aGlzLmdldE1vbnRoKCldO307RGF0ZS5wcm90b3R5cGUuX3RvU3RyaW5nPURhdGUucHJvdG90eXBlLnRvU3RyaW5nO0RhdGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGZvcm1hdCl7dmFyIHNlbGY9dGhpczt2YXIgcD1mdW5jdGlvbiBwKHMpe3JldHVybihzLnRvU3RyaW5nKCkubGVuZ3RoPT0xKT9cIjBcIitzOnM7fTtyZXR1cm4gZm9ybWF0P2Zvcm1hdC5yZXBsYWNlKC9kZD9kP2Q/fE1NP00/TT98eXk/eT95P3xoaD98SEg/fG1tP3xzcz98dHQ/fHp6P3o/L2csZnVuY3Rpb24oZm9ybWF0KXtzd2l0Y2goZm9ybWF0KXtjYXNlXCJoaFwiOnJldHVybiBwKHNlbGYuZ2V0SG91cnMoKTwxMz9zZWxmLmdldEhvdXJzKCk6KHNlbGYuZ2V0SG91cnMoKS0xMikpO2Nhc2VcImhcIjpyZXR1cm4gc2VsZi5nZXRIb3VycygpPDEzP3NlbGYuZ2V0SG91cnMoKTooc2VsZi5nZXRIb3VycygpLTEyKTtjYXNlXCJISFwiOnJldHVybiBwKHNlbGYuZ2V0SG91cnMoKSk7Y2FzZVwiSFwiOnJldHVybiBzZWxmLmdldEhvdXJzKCk7Y2FzZVwibW1cIjpyZXR1cm4gcChzZWxmLmdldE1pbnV0ZXMoKSk7Y2FzZVwibVwiOnJldHVybiBzZWxmLmdldE1pbnV0ZXMoKTtjYXNlXCJzc1wiOnJldHVybiBwKHNlbGYuZ2V0U2Vjb25kcygpKTtjYXNlXCJzXCI6cmV0dXJuIHNlbGYuZ2V0U2Vjb25kcygpO2Nhc2VcInl5eXlcIjpyZXR1cm4gc2VsZi5nZXRGdWxsWWVhcigpO2Nhc2VcInl5XCI6cmV0dXJuIHNlbGYuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpLnN1YnN0cmluZygyLDQpO2Nhc2VcImRkZGRcIjpyZXR1cm4gc2VsZi5nZXREYXlOYW1lKCk7Y2FzZVwiZGRkXCI6cmV0dXJuIHNlbGYuZ2V0RGF5TmFtZSh0cnVlKTtjYXNlXCJkZFwiOnJldHVybiBwKHNlbGYuZ2V0RGF0ZSgpKTtjYXNlXCJkXCI6cmV0dXJuIHNlbGYuZ2V0RGF0ZSgpLnRvU3RyaW5nKCk7Y2FzZVwiTU1NTVwiOnJldHVybiBzZWxmLmdldE1vbnRoTmFtZSgpO2Nhc2VcIk1NTVwiOnJldHVybiBzZWxmLmdldE1vbnRoTmFtZSh0cnVlKTtjYXNlXCJNTVwiOnJldHVybiBwKChzZWxmLmdldE1vbnRoKCkrMSkpO2Nhc2VcIk1cIjpyZXR1cm4gc2VsZi5nZXRNb250aCgpKzE7Y2FzZVwidFwiOnJldHVybiBzZWxmLmdldEhvdXJzKCk8MTI/RGF0ZS5DdWx0dXJlSW5mby5hbURlc2lnbmF0b3Iuc3Vic3RyaW5nKDAsMSk6RGF0ZS5DdWx0dXJlSW5mby5wbURlc2lnbmF0b3Iuc3Vic3RyaW5nKDAsMSk7Y2FzZVwidHRcIjpyZXR1cm4gc2VsZi5nZXRIb3VycygpPDEyP0RhdGUuQ3VsdHVyZUluZm8uYW1EZXNpZ25hdG9yOkRhdGUuQ3VsdHVyZUluZm8ucG1EZXNpZ25hdG9yO2Nhc2VcInp6elwiOmNhc2VcInp6XCI6Y2FzZVwielwiOnJldHVyblwiXCI7fX0pOnRoaXMuX3RvU3RyaW5nKCk7fTtcbkRhdGUubm93PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKCk7fTtEYXRlLnRvZGF5PWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCkuY2xlYXJUaW1lKCk7fTtEYXRlLnByb3RvdHlwZS5fb3JpZW50PSsxO0RhdGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt0aGlzLl9vcmllbnQ9KzE7cmV0dXJuIHRoaXM7fTtEYXRlLnByb3RvdHlwZS5sYXN0PURhdGUucHJvdG90eXBlLnByZXY9RGF0ZS5wcm90b3R5cGUucHJldmlvdXM9ZnVuY3Rpb24oKXt0aGlzLl9vcmllbnQ9LTE7cmV0dXJuIHRoaXM7fTtEYXRlLnByb3RvdHlwZS5faXM9ZmFsc2U7RGF0ZS5wcm90b3R5cGUuaXM9ZnVuY3Rpb24oKXt0aGlzLl9pcz10cnVlO3JldHVybiB0aGlzO307TnVtYmVyLnByb3RvdHlwZS5fZGF0ZUVsZW1lbnQ9XCJkYXlcIjtOdW1iZXIucHJvdG90eXBlLmZyb21Ob3c9ZnVuY3Rpb24oKXt2YXIgYz17fTtjW3RoaXMuX2RhdGVFbGVtZW50XT10aGlzO3JldHVybiBEYXRlLm5vdygpLmFkZChjKTt9O051bWJlci5wcm90b3R5cGUuYWdvPWZ1bmN0aW9uKCl7dmFyIGM9e307Y1t0aGlzLl9kYXRlRWxlbWVudF09dGhpcyotMTtyZXR1cm4gRGF0ZS5ub3coKS5hZGQoYyk7fTsoZnVuY3Rpb24oKXt2YXIgJEQ9RGF0ZS5wcm90b3R5cGUsJE49TnVtYmVyLnByb3RvdHlwZTt2YXIgZHg9KFwic3VuZGF5IG1vbmRheSB0dWVzZGF5IHdlZG5lc2RheSB0aHVyc2RheSBmcmlkYXkgc2F0dXJkYXlcIikuc3BsaXQoL1xccy8pLG14PShcImphbnVhcnkgZmVicnVhcnkgbWFyY2ggYXByaWwgbWF5IGp1bmUganVseSBhdWd1c3Qgc2VwdGVtYmVyIG9jdG9iZXIgbm92ZW1iZXIgZGVjZW1iZXJcIikuc3BsaXQoL1xccy8pLHB4PShcIk1pbGxpc2Vjb25kIFNlY29uZCBNaW51dGUgSG91ciBEYXkgV2VlayBNb250aCBZZWFyXCIpLnNwbGl0KC9cXHMvKSxkZTt2YXIgZGY9ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7aWYodGhpcy5faXMpe3RoaXMuX2lzPWZhbHNlO3JldHVybiB0aGlzLmdldERheSgpPT1uO31cbnJldHVybiB0aGlzLm1vdmVUb0RheU9mV2VlayhuLHRoaXMuX29yaWVudCk7fTt9O2Zvcih2YXIgaT0wO2k8ZHgubGVuZ3RoO2krKyl7JERbZHhbaV1dPSREW2R4W2ldLnN1YnN0cmluZygwLDMpXT1kZihpKTt9XG52YXIgbWY9ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7aWYodGhpcy5faXMpe3RoaXMuX2lzPWZhbHNlO3JldHVybiB0aGlzLmdldE1vbnRoKCk9PT1uO31cbnJldHVybiB0aGlzLm1vdmVUb01vbnRoKG4sdGhpcy5fb3JpZW50KTt9O307Zm9yKHZhciBqPTA7ajxteC5sZW5ndGg7aisrKXskRFtteFtqXV09JERbbXhbal0uc3Vic3RyaW5nKDAsMyldPW1mKGopO31cbnZhciBlZj1mdW5jdGlvbihqKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihqLnN1YnN0cmluZyhqLmxlbmd0aC0xKSE9XCJzXCIpe2orPVwic1wiO31cbnJldHVybiB0aGlzW1wiYWRkXCIral0odGhpcy5fb3JpZW50KTt9O307dmFyIG5mPWZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuX2RhdGVFbGVtZW50PW47cmV0dXJuIHRoaXM7fTt9O2Zvcih2YXIgaz0wO2s8cHgubGVuZ3RoO2srKyl7ZGU9cHhba10udG9Mb3dlckNhc2UoKTskRFtkZV09JERbZGUrXCJzXCJdPWVmKHB4W2tdKTskTltkZV09JE5bZGUrXCJzXCJdPW5mKGRlKTt9fSgpKTtEYXRlLnByb3RvdHlwZS50b0pTT05TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZyhcInl5eXktTU0tZGRUaGg6bW06c3NaXCIpO307RGF0ZS5wcm90b3R5cGUudG9TaG9ydERhdGVTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZyhEYXRlLkN1bHR1cmVJbmZvLmZvcm1hdFBhdHRlcm5zLnNob3J0RGF0ZVBhdHRlcm4pO307RGF0ZS5wcm90b3R5cGUudG9Mb25nRGF0ZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKERhdGUuQ3VsdHVyZUluZm8uZm9ybWF0UGF0dGVybnMubG9uZ0RhdGVQYXR0ZXJuKTt9O0RhdGUucHJvdG90eXBlLnRvU2hvcnRUaW1lU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoRGF0ZS5DdWx0dXJlSW5mby5mb3JtYXRQYXR0ZXJucy5zaG9ydFRpbWVQYXR0ZXJuKTt9O0RhdGUucHJvdG90eXBlLnRvTG9uZ1RpbWVTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZyhEYXRlLkN1bHR1cmVJbmZvLmZvcm1hdFBhdHRlcm5zLmxvbmdUaW1lUGF0dGVybik7fTtEYXRlLnByb3RvdHlwZS5nZXRPcmRpbmFsPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZ2V0RGF0ZSgpKXtjYXNlIDE6Y2FzZSAyMTpjYXNlIDMxOnJldHVyblwic3RcIjtjYXNlIDI6Y2FzZSAyMjpyZXR1cm5cIm5kXCI7Y2FzZSAzOmNhc2UgMjM6cmV0dXJuXCJyZFwiO2RlZmF1bHQ6cmV0dXJuXCJ0aFwiO319O1xuKGZ1bmN0aW9uKCl7RGF0ZS5QYXJzaW5nPXtFeGNlcHRpb246ZnVuY3Rpb24ocyl7dGhpcy5tZXNzYWdlPVwiUGFyc2UgZXJyb3IgYXQgJ1wiK3Muc3Vic3RyaW5nKDAsMTApK1wiIC4uLidcIjt9fTt2YXIgJFA9RGF0ZS5QYXJzaW5nO3ZhciBfPSRQLk9wZXJhdG9ycz17cnRva2VuOmZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbihzKXt2YXIgbXg9cy5tYXRjaChyKTtpZihteCl7cmV0dXJuKFtteFswXSxzLnN1YnN0cmluZyhteFswXS5sZW5ndGgpXSk7fWVsc2V7dGhyb3cgbmV3ICRQLkV4Y2VwdGlvbihzKTt9fTt9LHRva2VuOmZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gXy5ydG9rZW4obmV3IFJlZ0V4cChcIl5cXHMqXCIrcytcIlxccypcIikpKHMpO307fSxzdG9rZW46ZnVuY3Rpb24ocyl7cmV0dXJuIF8ucnRva2VuKG5ldyBSZWdFeHAoXCJeXCIrcykpO30sdW50aWw6ZnVuY3Rpb24ocCl7cmV0dXJuIGZ1bmN0aW9uKHMpe3ZhciBxeD1bXSxyeD1udWxsO3doaWxlKHMubGVuZ3RoKXt0cnl7cng9cC5jYWxsKHRoaXMscyk7fWNhdGNoKGUpe3F4LnB1c2gocnhbMF0pO3M9cnhbMV07Y29udGludWU7fVxuYnJlYWs7fVxucmV0dXJuW3F4LHNdO307fSxtYW55OmZ1bmN0aW9uKHApe3JldHVybiBmdW5jdGlvbihzKXt2YXIgcng9W10scj1udWxsO3doaWxlKHMubGVuZ3RoKXt0cnl7cj1wLmNhbGwodGhpcyxzKTt9Y2F0Y2goZSl7cmV0dXJuW3J4LHNdO31cbnJ4LnB1c2goclswXSk7cz1yWzFdO31cbnJldHVybltyeCxzXTt9O30sb3B0aW9uYWw6ZnVuY3Rpb24ocCl7cmV0dXJuIGZ1bmN0aW9uKHMpe3ZhciByPW51bGw7dHJ5e3I9cC5jYWxsKHRoaXMscyk7fWNhdGNoKGUpe3JldHVybltudWxsLHNdO31cbnJldHVybltyWzBdLHJbMV1dO307fSxub3Q6ZnVuY3Rpb24ocCl7cmV0dXJuIGZ1bmN0aW9uKHMpe3RyeXtwLmNhbGwodGhpcyxzKTt9Y2F0Y2goZSl7cmV0dXJuW251bGwsc107fVxudGhyb3cgbmV3ICRQLkV4Y2VwdGlvbihzKTt9O30saWdub3JlOmZ1bmN0aW9uKHApe3JldHVybiBwP2Z1bmN0aW9uKHMpe3ZhciByPW51bGw7cj1wLmNhbGwodGhpcyxzKTtyZXR1cm5bbnVsbCxyWzFdXTt9Om51bGw7fSxwcm9kdWN0OmZ1bmN0aW9uKCl7dmFyIHB4PWFyZ3VtZW50c1swXSxxeD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscng9W107Zm9yKHZhciBpPTA7aTxweC5sZW5ndGg7aSsrKXtyeC5wdXNoKF8uZWFjaChweFtpXSxxeCkpO31cbnJldHVybiByeDt9LGNhY2hlOmZ1bmN0aW9uKHJ1bGUpe3ZhciBjYWNoZT17fSxyPW51bGw7cmV0dXJuIGZ1bmN0aW9uKHMpe3RyeXtyPWNhY2hlW3NdPShjYWNoZVtzXXx8cnVsZS5jYWxsKHRoaXMscykpO31jYXRjaChlKXtyPWNhY2hlW3NdPWU7fVxuaWYociBpbnN0YW5jZW9mICRQLkV4Y2VwdGlvbil7dGhyb3cgcjt9ZWxzZXtyZXR1cm4gcjt9fTt9LGFueTpmdW5jdGlvbigpe3ZhciBweD1hcmd1bWVudHM7cmV0dXJuIGZ1bmN0aW9uKHMpe3ZhciByPW51bGw7Zm9yKHZhciBpPTA7aTxweC5sZW5ndGg7aSsrKXtpZihweFtpXT09bnVsbCl7Y29udGludWU7fVxudHJ5e3I9KHB4W2ldLmNhbGwodGhpcyxzKSk7fWNhdGNoKGUpe3I9bnVsbDt9XG5pZihyKXtyZXR1cm4gcjt9fVxudGhyb3cgbmV3ICRQLkV4Y2VwdGlvbihzKTt9O30sZWFjaDpmdW5jdGlvbigpe3ZhciBweD1hcmd1bWVudHM7cmV0dXJuIGZ1bmN0aW9uKHMpe3ZhciByeD1bXSxyPW51bGw7Zm9yKHZhciBpPTA7aTxweC5sZW5ndGg7aSsrKXtpZihweFtpXT09bnVsbCl7Y29udGludWU7fVxudHJ5e3I9KHB4W2ldLmNhbGwodGhpcyxzKSk7fWNhdGNoKGUpe3Rocm93IG5ldyAkUC5FeGNlcHRpb24ocyk7fVxucngucHVzaChyWzBdKTtzPXJbMV07fVxucmV0dXJuW3J4LHNdO307fSxhbGw6ZnVuY3Rpb24oKXt2YXIgcHg9YXJndW1lbnRzLF89XztyZXR1cm4gXy5lYWNoKF8ub3B0aW9uYWwocHgpKTt9LHNlcXVlbmNlOmZ1bmN0aW9uKHB4LGQsYyl7ZD1kfHxfLnJ0b2tlbigvXlxccyovKTtjPWN8fG51bGw7aWYocHgubGVuZ3RoPT0xKXtyZXR1cm4gcHhbMF07fVxucmV0dXJuIGZ1bmN0aW9uKHMpe3ZhciByPW51bGwscT1udWxsO3ZhciByeD1bXTtmb3IodmFyIGk9MDtpPHB4Lmxlbmd0aDtpKyspe3RyeXtyPXB4W2ldLmNhbGwodGhpcyxzKTt9Y2F0Y2goZSl7YnJlYWs7fVxucngucHVzaChyWzBdKTt0cnl7cT1kLmNhbGwodGhpcyxyWzFdKTt9Y2F0Y2goZXgpe3E9bnVsbDticmVhazt9XG5zPXFbMV07fVxuaWYoIXIpe3Rocm93IG5ldyAkUC5FeGNlcHRpb24ocyk7fVxuaWYocSl7dGhyb3cgbmV3ICRQLkV4Y2VwdGlvbihxWzFdKTt9XG5pZihjKXt0cnl7cj1jLmNhbGwodGhpcyxyWzFdKTt9Y2F0Y2goZXkpe3Rocm93IG5ldyAkUC5FeGNlcHRpb24oclsxXSk7fX1cbnJldHVybltyeCwocj9yWzFdOnMpXTt9O30sYmV0d2VlbjpmdW5jdGlvbihkMSxwLGQyKXtkMj1kMnx8ZDE7dmFyIF9mbj1fLmVhY2goXy5pZ25vcmUoZDEpLHAsXy5pZ25vcmUoZDIpKTtyZXR1cm4gZnVuY3Rpb24ocyl7dmFyIHJ4PV9mbi5jYWxsKHRoaXMscyk7cmV0dXJuW1tyeFswXVswXSxyWzBdWzJdXSxyeFsxXV07fTt9LGxpc3Q6ZnVuY3Rpb24ocCxkLGMpe2Q9ZHx8Xy5ydG9rZW4oL15cXHMqLyk7Yz1jfHxudWxsO3JldHVybihwIGluc3RhbmNlb2YgQXJyYXk/Xy5lYWNoKF8ucHJvZHVjdChwLnNsaWNlKDAsLTEpLF8uaWdub3JlKGQpKSxwLnNsaWNlKC0xKSxfLmlnbm9yZShjKSk6Xy5lYWNoKF8ubWFueShfLmVhY2gocCxfLmlnbm9yZShkKSkpLHB4LF8uaWdub3JlKGMpKSk7fSxzZXQ6ZnVuY3Rpb24ocHgsZCxjKXtkPWR8fF8ucnRva2VuKC9eXFxzKi8pO2M9Y3x8bnVsbDtyZXR1cm4gZnVuY3Rpb24ocyl7dmFyIHI9bnVsbCxwPW51bGwscT1udWxsLHJ4PW51bGwsYmVzdD1bW10sc10sbGFzdD1mYWxzZTtmb3IodmFyIGk9MDtpPHB4Lmxlbmd0aDtpKyspe3E9bnVsbDtwPW51bGw7cj1udWxsO2xhc3Q9KHB4Lmxlbmd0aD09MSk7dHJ5e3I9cHhbaV0uY2FsbCh0aGlzLHMpO31jYXRjaChlKXtjb250aW51ZTt9XG5yeD1bW3JbMF1dLHJbMV1dO2lmKHJbMV0ubGVuZ3RoPjAmJiFsYXN0KXt0cnl7cT1kLmNhbGwodGhpcyxyWzFdKTt9Y2F0Y2goZXgpe2xhc3Q9dHJ1ZTt9fWVsc2V7bGFzdD10cnVlO31cbmlmKCFsYXN0JiZxWzFdLmxlbmd0aD09PTApe2xhc3Q9dHJ1ZTt9XG5pZighbGFzdCl7dmFyIHF4PVtdO2Zvcih2YXIgaj0wO2o8cHgubGVuZ3RoO2orKyl7aWYoaSE9ail7cXgucHVzaChweFtqXSk7fX1cbnA9Xy5zZXQocXgsZCkuY2FsbCh0aGlzLHFbMV0pO2lmKHBbMF0ubGVuZ3RoPjApe3J4WzBdPXJ4WzBdLmNvbmNhdChwWzBdKTtyeFsxXT1wWzFdO319XG5pZihyeFsxXS5sZW5ndGg8YmVzdFsxXS5sZW5ndGgpe2Jlc3Q9cng7fVxuaWYoYmVzdFsxXS5sZW5ndGg9PT0wKXticmVhazt9fVxuaWYoYmVzdFswXS5sZW5ndGg9PT0wKXtyZXR1cm4gYmVzdDt9XG5pZihjKXt0cnl7cT1jLmNhbGwodGhpcyxiZXN0WzFdKTt9Y2F0Y2goZXkpe3Rocm93IG5ldyAkUC5FeGNlcHRpb24oYmVzdFsxXSk7fVxuYmVzdFsxXT1xWzFdO31cbnJldHVybiBiZXN0O307fSxmb3J3YXJkOmZ1bmN0aW9uKGdyLGZuYW1lKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIGdyW2ZuYW1lXS5jYWxsKHRoaXMscyk7fTt9LHJlcGxhY2U6ZnVuY3Rpb24ocnVsZSxyZXBsKXtyZXR1cm4gZnVuY3Rpb24ocyl7dmFyIHI9cnVsZS5jYWxsKHRoaXMscyk7cmV0dXJuW3JlcGwsclsxXV07fTt9LHByb2Nlc3M6ZnVuY3Rpb24ocnVsZSxmbil7cmV0dXJuIGZ1bmN0aW9uKHMpe3ZhciByPXJ1bGUuY2FsbCh0aGlzLHMpO3JldHVybltmbi5jYWxsKHRoaXMsclswXSksclsxXV07fTt9LG1pbjpmdW5jdGlvbihtaW4scnVsZSl7cmV0dXJuIGZ1bmN0aW9uKHMpe3ZhciByeD1ydWxlLmNhbGwodGhpcyxzKTtpZihyeFswXS5sZW5ndGg8bWluKXt0aHJvdyBuZXcgJFAuRXhjZXB0aW9uKHMpO31cbnJldHVybiByeDt9O319O3ZhciBfZ2VuZXJhdG9yPWZ1bmN0aW9uKG9wKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYXJncz1udWxsLHJ4PVtdO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7YXJncz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO31lbHNlIGlmKGFyZ3VtZW50c1swXWluc3RhbmNlb2YgQXJyYXkpe2FyZ3M9YXJndW1lbnRzWzBdO31cbmlmKGFyZ3Mpe2Zvcih2YXIgaT0wLHB4PWFyZ3Muc2hpZnQoKTtpPHB4Lmxlbmd0aDtpKyspe2FyZ3MudW5zaGlmdChweFtpXSk7cngucHVzaChvcC5hcHBseShudWxsLGFyZ3MpKTthcmdzLnNoaWZ0KCk7cmV0dXJuIHJ4O319ZWxzZXtyZXR1cm4gb3AuYXBwbHkobnVsbCxhcmd1bWVudHMpO319O307dmFyIGd4PVwib3B0aW9uYWwgbm90IGlnbm9yZSBjYWNoZVwiLnNwbGl0KC9cXHMvKTtmb3IodmFyIGk9MDtpPGd4Lmxlbmd0aDtpKyspe19bZ3hbaV1dPV9nZW5lcmF0b3IoX1tneFtpXV0pO31cbnZhciBfdmVjdG9yPWZ1bmN0aW9uKG9wKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5KXtyZXR1cm4gb3AuYXBwbHkobnVsbCxhcmd1bWVudHNbMF0pO31lbHNle3JldHVybiBvcC5hcHBseShudWxsLGFyZ3VtZW50cyk7fX07fTt2YXIgdng9XCJlYWNoIGFueSBhbGxcIi5zcGxpdCgvXFxzLyk7Zm9yKHZhciBqPTA7ajx2eC5sZW5ndGg7aisrKXtfW3Z4W2pdXT1fdmVjdG9yKF9bdnhbal1dKTt9fSgpKTsoZnVuY3Rpb24oKXt2YXIgZmxhdHRlbkFuZENvbXBhY3Q9ZnVuY3Rpb24oYXgpe3ZhciByeD1bXTtmb3IodmFyIGk9MDtpPGF4Lmxlbmd0aDtpKyspe2lmKGF4W2ldaW5zdGFuY2VvZiBBcnJheSl7cng9cnguY29uY2F0KGZsYXR0ZW5BbmRDb21wYWN0KGF4W2ldKSk7fWVsc2V7aWYoYXhbaV0pe3J4LnB1c2goYXhbaV0pO319fVxucmV0dXJuIHJ4O307RGF0ZS5HcmFtbWFyPXt9O0RhdGUuVHJhbnNsYXRvcj17aG91cjpmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmhvdXI9TnVtYmVyKHMpO307fSxtaW51dGU6ZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5taW51dGU9TnVtYmVyKHMpO307fSxzZWNvbmQ6ZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZWNvbmQ9TnVtYmVyKHMpO307fSxtZXJpZGlhbjpmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLm1lcmlkaWFuPXMuc2xpY2UoMCwxKS50b0xvd2VyQ2FzZSgpO307fSx0aW1lem9uZTpmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1zLnJlcGxhY2UoL1teXFxkXFwrXFwtXS9nLFwiXCIpO2lmKG4ubGVuZ3RoKXt0aGlzLnRpbWV6b25lT2Zmc2V0PU51bWJlcihuKTt9ZWxzZXt0aGlzLnRpbWV6b25lPXMudG9Mb3dlckNhc2UoKTt9fTt9LGRheTpmdW5jdGlvbih4KXt2YXIgcz14WzBdO3JldHVybiBmdW5jdGlvbigpe3RoaXMuZGF5PU51bWJlcihzLm1hdGNoKC9cXGQrLylbMF0pO307fSxtb250aDpmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLm1vbnRoPSgocy5sZW5ndGg9PTMpP0RhdGUuZ2V0TW9udGhOdW1iZXJGcm9tTmFtZShzKTooTnVtYmVyKHMpLTEpKTt9O30seWVhcjpmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1OdW1iZXIocyk7dGhpcy55ZWFyPSgocy5sZW5ndGg+Mik/bjoobisoKChuKzIwMDApPERhdGUuQ3VsdHVyZUluZm8udHdvRGlnaXRZZWFyTWF4KT8yMDAwOjE5MDApKSk7fTt9LHJkYXk6ZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKCl7c3dpdGNoKHMpe2Nhc2VcInllc3RlcmRheVwiOnRoaXMuZGF5cz0tMTticmVhaztjYXNlXCJ0b21vcnJvd1wiOnRoaXMuZGF5cz0xO2JyZWFrO2Nhc2VcInRvZGF5XCI6dGhpcy5kYXlzPTA7YnJlYWs7Y2FzZVwibm93XCI6dGhpcy5kYXlzPTA7dGhpcy5ub3c9dHJ1ZTticmVhazt9fTt9LGZpbmlzaEV4YWN0OmZ1bmN0aW9uKHgpe3g9KHggaW5zdGFuY2VvZiBBcnJheSk/eDpbeF07dmFyIG5vdz1uZXcgRGF0ZSgpO3RoaXMueWVhcj1ub3cuZ2V0RnVsbFllYXIoKTt0aGlzLm1vbnRoPW5vdy5nZXRNb250aCgpO3RoaXMuZGF5PTE7dGhpcy5ob3VyPTA7dGhpcy5taW51dGU9MDt0aGlzLnNlY29uZD0wO2Zvcih2YXIgaT0wO2k8eC5sZW5ndGg7aSsrKXtpZih4W2ldKXt4W2ldLmNhbGwodGhpcyk7fX1cbnRoaXMuaG91cj0odGhpcy5tZXJpZGlhbj09XCJwXCImJnRoaXMuaG91cjwxMyk/dGhpcy5ob3VyKzEyOnRoaXMuaG91cjtpZih0aGlzLmRheT5EYXRlLmdldERheXNJbk1vbnRoKHRoaXMueWVhcix0aGlzLm1vbnRoKSl7dGhyb3cgbmV3IFJhbmdlRXJyb3IodGhpcy5kYXkrXCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIGRheXMuXCIpO31cbnZhciByPW5ldyBEYXRlKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF5LHRoaXMuaG91cix0aGlzLm1pbnV0ZSx0aGlzLnNlY29uZCk7aWYodGhpcy50aW1lem9uZSl7ci5zZXQoe3RpbWV6b25lOnRoaXMudGltZXpvbmV9KTt9ZWxzZSBpZih0aGlzLnRpbWV6b25lT2Zmc2V0KXtyLnNldCh7dGltZXpvbmVPZmZzZXQ6dGhpcy50aW1lem9uZU9mZnNldH0pO31cbnJldHVybiByO30sZmluaXNoOmZ1bmN0aW9uKHgpe3g9KHggaW5zdGFuY2VvZiBBcnJheSk/ZmxhdHRlbkFuZENvbXBhY3QoeCk6W3hdO2lmKHgubGVuZ3RoPT09MCl7cmV0dXJuIG51bGw7fVxuZm9yKHZhciBpPTA7aTx4Lmxlbmd0aDtpKyspe2lmKHR5cGVvZiB4W2ldPT1cImZ1bmN0aW9uXCIpe3hbaV0uY2FsbCh0aGlzKTt9fVxuaWYodGhpcy5ub3cpe3JldHVybiBuZXcgRGF0ZSgpO31cbnZhciB0b2RheT1EYXRlLnRvZGF5KCk7dmFyIG1ldGhvZD1udWxsO3ZhciBleHByZXNzaW9uPSEhKHRoaXMuZGF5cyE9bnVsbHx8dGhpcy5vcmllbnR8fHRoaXMub3BlcmF0b3IpO2lmKGV4cHJlc3Npb24pe3ZhciBnYXAsbW9kLG9yaWVudDtvcmllbnQ9KCh0aGlzLm9yaWVudD09XCJwYXN0XCJ8fHRoaXMub3BlcmF0b3I9PVwic3VidHJhY3RcIik/LTE6MSk7aWYodGhpcy53ZWVrZGF5KXt0aGlzLnVuaXQ9XCJkYXlcIjtnYXA9KERhdGUuZ2V0RGF5TnVtYmVyRnJvbU5hbWUodGhpcy53ZWVrZGF5KS10b2RheS5nZXREYXkoKSk7bW9kPTc7dGhpcy5kYXlzPWdhcD8oKGdhcCsob3JpZW50Km1vZCkpJW1vZCk6KG9yaWVudCptb2QpO31cbmlmKHRoaXMubW9udGgpe3RoaXMudW5pdD1cIm1vbnRoXCI7Z2FwPSh0aGlzLm1vbnRoLXRvZGF5LmdldE1vbnRoKCkpO21vZD0xMjt0aGlzLm1vbnRocz1nYXA/KChnYXArKG9yaWVudCptb2QpKSVtb2QpOihvcmllbnQqbW9kKTt0aGlzLm1vbnRoPW51bGw7fVxuaWYoIXRoaXMudW5pdCl7dGhpcy51bml0PVwiZGF5XCI7fVxuaWYodGhpc1t0aGlzLnVuaXQrXCJzXCJdPT1udWxsfHx0aGlzLm9wZXJhdG9yIT1udWxsKXtpZighdGhpcy52YWx1ZSl7dGhpcy52YWx1ZT0xO31cbmlmKHRoaXMudW5pdD09XCJ3ZWVrXCIpe3RoaXMudW5pdD1cImRheVwiO3RoaXMudmFsdWU9dGhpcy52YWx1ZSo3O31cbnRoaXNbdGhpcy51bml0K1wic1wiXT10aGlzLnZhbHVlKm9yaWVudDt9XG5yZXR1cm4gdG9kYXkuYWRkKHRoaXMpO31lbHNle2lmKHRoaXMubWVyaWRpYW4mJnRoaXMuaG91cil7dGhpcy5ob3VyPSh0aGlzLmhvdXI8MTMmJnRoaXMubWVyaWRpYW49PVwicFwiKT90aGlzLmhvdXIrMTI6dGhpcy5ob3VyO31cbmlmKHRoaXMud2Vla2RheSYmIXRoaXMuZGF5KXt0aGlzLmRheT0odG9kYXkuYWRkRGF5cygoRGF0ZS5nZXREYXlOdW1iZXJGcm9tTmFtZSh0aGlzLndlZWtkYXkpLXRvZGF5LmdldERheSgpKSkpLmdldERhdGUoKTt9XG5pZih0aGlzLm1vbnRoJiYhdGhpcy5kYXkpe3RoaXMuZGF5PTE7fVxucmV0dXJuIHRvZGF5LnNldCh0aGlzKTt9fX07dmFyIF89RGF0ZS5QYXJzaW5nLk9wZXJhdG9ycyxnPURhdGUuR3JhbW1hcix0PURhdGUuVHJhbnNsYXRvcixfZm47Zy5kYXRlUGFydERlbGltaXRlcj1fLnJ0b2tlbigvXihbXFxzXFwtXFwuXFwsXFwvXFx4MjddKykvKTtnLnRpbWVQYXJ0RGVsaW1pdGVyPV8uc3Rva2VuKFwiOlwiKTtnLndoaXRlU3BhY2U9Xy5ydG9rZW4oL15cXHMqLyk7Zy5nZW5lcmFsRGVsaW1pdGVyPV8ucnRva2VuKC9eKChbXFxzXFwsXXxhdHxvbikrKS8pO3ZhciBfQz17fTtnLmN0b2tlbj1mdW5jdGlvbihrZXlzKXt2YXIgZm49X0Nba2V5c107aWYoIWZuKXt2YXIgYz1EYXRlLkN1bHR1cmVJbmZvLnJlZ2V4UGF0dGVybnM7dmFyIGt4PWtleXMuc3BsaXQoL1xccysvKSxweD1bXTtmb3IodmFyIGk9MDtpPGt4Lmxlbmd0aDtpKyspe3B4LnB1c2goXy5yZXBsYWNlKF8ucnRva2VuKGNba3hbaV1dKSxreFtpXSkpO31cbmZuPV9DW2tleXNdPV8uYW55LmFwcGx5KG51bGwscHgpO31cbnJldHVybiBmbjt9O2cuY3Rva2VuMj1mdW5jdGlvbihrZXkpe3JldHVybiBfLnJ0b2tlbihEYXRlLkN1bHR1cmVJbmZvLnJlZ2V4UGF0dGVybnNba2V5XSk7fTtnLmg9Xy5jYWNoZShfLnByb2Nlc3MoXy5ydG9rZW4oL14oMFswLTldfDFbMC0yXXxbMS05XSkvKSx0LmhvdXIpKTtnLmhoPV8uY2FjaGUoXy5wcm9jZXNzKF8ucnRva2VuKC9eKDBbMC05XXwxWzAtMl0pLyksdC5ob3VyKSk7Zy5IPV8uY2FjaGUoXy5wcm9jZXNzKF8ucnRva2VuKC9eKFswLTFdWzAtOV18MlswLTNdfFswLTldKS8pLHQuaG91cikpO2cuSEg9Xy5jYWNoZShfLnByb2Nlc3MoXy5ydG9rZW4oL14oWzAtMV1bMC05XXwyWzAtM10pLyksdC5ob3VyKSk7Zy5tPV8uY2FjaGUoXy5wcm9jZXNzKF8ucnRva2VuKC9eKFswLTVdWzAtOV18WzAtOV0pLyksdC5taW51dGUpKTtnLm1tPV8uY2FjaGUoXy5wcm9jZXNzKF8ucnRva2VuKC9eWzAtNV1bMC05XS8pLHQubWludXRlKSk7Zy5zPV8uY2FjaGUoXy5wcm9jZXNzKF8ucnRva2VuKC9eKFswLTVdWzAtOV18WzAtOV0pLyksdC5zZWNvbmQpKTtnLnNzPV8uY2FjaGUoXy5wcm9jZXNzKF8ucnRva2VuKC9eWzAtNV1bMC05XS8pLHQuc2Vjb25kKSk7Zy5obXM9Xy5jYWNoZShfLnNlcXVlbmNlKFtnLkgsZy5tbSxnLnNzXSxnLnRpbWVQYXJ0RGVsaW1pdGVyKSk7Zy50PV8uY2FjaGUoXy5wcm9jZXNzKGcuY3Rva2VuMihcInNob3J0TWVyaWRpYW5cIiksdC5tZXJpZGlhbikpO2cudHQ9Xy5jYWNoZShfLnByb2Nlc3MoZy5jdG9rZW4yKFwibG9uZ01lcmlkaWFuXCIpLHQubWVyaWRpYW4pKTtnLno9Xy5jYWNoZShfLnByb2Nlc3MoXy5ydG9rZW4oL14oXFwrfFxcLSk/XFxzKlxcZFxcZFxcZFxcZD8vKSx0LnRpbWV6b25lKSk7Zy56ej1fLmNhY2hlKF8ucHJvY2VzcyhfLnJ0b2tlbigvXihcXCt8XFwtKVxccypcXGRcXGRcXGRcXGQvKSx0LnRpbWV6b25lKSk7Zy56eno9Xy5jYWNoZShfLnByb2Nlc3MoZy5jdG9rZW4yKFwidGltZXpvbmVcIiksdC50aW1lem9uZSkpO2cudGltZVN1ZmZpeD1fLmVhY2goXy5pZ25vcmUoZy53aGl0ZVNwYWNlKSxfLnNldChbZy50dCxnLnp6el0pKTtnLnRpbWU9Xy5lYWNoKF8ub3B0aW9uYWwoXy5pZ25vcmUoXy5zdG9rZW4oXCJUXCIpKSksZy5obXMsZy50aW1lU3VmZml4KTtnLmQ9Xy5jYWNoZShfLnByb2Nlc3MoXy5lYWNoKF8ucnRva2VuKC9eKFswLTJdXFxkfDNbMC0xXXxcXGQpLyksXy5vcHRpb25hbChnLmN0b2tlbjIoXCJvcmRpbmFsU3VmZml4XCIpKSksdC5kYXkpKTtnLmRkPV8uY2FjaGUoXy5wcm9jZXNzKF8uZWFjaChfLnJ0b2tlbigvXihbMC0yXVxcZHwzWzAtMV0pLyksXy5vcHRpb25hbChnLmN0b2tlbjIoXCJvcmRpbmFsU3VmZml4XCIpKSksdC5kYXkpKTtnLmRkZD1nLmRkZGQ9Xy5jYWNoZShfLnByb2Nlc3MoZy5jdG9rZW4oXCJzdW4gbW9uIHR1ZSB3ZWQgdGh1IGZyaSBzYXRcIiksZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy53ZWVrZGF5PXM7fTt9KSk7Zy5NPV8uY2FjaGUoXy5wcm9jZXNzKF8ucnRva2VuKC9eKDFbMC0yXXwwXFxkfFxcZCkvKSx0Lm1vbnRoKSk7Zy5NTT1fLmNhY2hlKF8ucHJvY2VzcyhfLnJ0b2tlbigvXigxWzAtMl18MFxcZCkvKSx0Lm1vbnRoKSk7Zy5NTU09Zy5NTU1NPV8uY2FjaGUoXy5wcm9jZXNzKGcuY3Rva2VuKFwiamFuIGZlYiBtYXIgYXByIG1heSBqdW4ganVsIGF1ZyBzZXAgb2N0IG5vdiBkZWNcIiksdC5tb250aCkpO2cueT1fLmNhY2hlKF8ucHJvY2VzcyhfLnJ0b2tlbigvXihcXGRcXGQ/KS8pLHQueWVhcikpO2cueXk9Xy5jYWNoZShfLnByb2Nlc3MoXy5ydG9rZW4oL14oXFxkXFxkKS8pLHQueWVhcikpO2cueXl5PV8uY2FjaGUoXy5wcm9jZXNzKF8ucnRva2VuKC9eKFxcZFxcZD9cXGQ/XFxkPykvKSx0LnllYXIpKTtnLnl5eXk9Xy5jYWNoZShfLnByb2Nlc3MoXy5ydG9rZW4oL14oXFxkXFxkXFxkXFxkKS8pLHQueWVhcikpO19mbj1mdW5jdGlvbigpe3JldHVybiBfLmVhY2goXy5hbnkuYXBwbHkobnVsbCxhcmd1bWVudHMpLF8ubm90KGcuY3Rva2VuMihcInRpbWVDb250ZXh0XCIpKSk7fTtnLmRheT1fZm4oZy5kLGcuZGQpO2cubW9udGg9X2ZuKGcuTSxnLk1NTSk7Zy55ZWFyPV9mbihnLnl5eXksZy55eSk7Zy5vcmllbnRhdGlvbj1fLnByb2Nlc3MoZy5jdG9rZW4oXCJwYXN0IGZ1dHVyZVwiKSxmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLm9yaWVudD1zO307fSk7Zy5vcGVyYXRvcj1fLnByb2Nlc3MoZy5jdG9rZW4oXCJhZGQgc3VidHJhY3RcIiksZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5vcGVyYXRvcj1zO307fSk7Zy5yZGF5PV8ucHJvY2VzcyhnLmN0b2tlbihcInllc3RlcmRheSB0b21vcnJvdyB0b2RheSBub3dcIiksdC5yZGF5KTtnLnVuaXQ9Xy5wcm9jZXNzKGcuY3Rva2VuKFwibWludXRlIGhvdXIgZGF5IHdlZWsgbW9udGggeWVhclwiKSxmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnVuaXQ9czt9O30pO2cudmFsdWU9Xy5wcm9jZXNzKF8ucnRva2VuKC9eXFxkXFxkPyhzdHxuZHxyZHx0aCk/LyksZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy52YWx1ZT1zLnJlcGxhY2UoL1xcRC9nLFwiXCIpO307fSk7Zy5leHByZXNzaW9uPV8uc2V0KFtnLnJkYXksZy5vcGVyYXRvcixnLnZhbHVlLGcudW5pdCxnLm9yaWVudGF0aW9uLGcuZGRkLGcuTU1NXSk7X2ZuPWZ1bmN0aW9uKCl7cmV0dXJuIF8uc2V0KGFyZ3VtZW50cyxnLmRhdGVQYXJ0RGVsaW1pdGVyKTt9O2cubWR5PV9mbihnLmRkZCxnLm1vbnRoLGcuZGF5LGcueWVhcik7Zy55bWQ9X2ZuKGcuZGRkLGcueWVhcixnLm1vbnRoLGcuZGF5KTtnLmRteT1fZm4oZy5kZGQsZy5kYXksZy5tb250aCxnLnllYXIpO2cuZGF0ZT1mdW5jdGlvbihzKXtyZXR1cm4oKGdbRGF0ZS5DdWx0dXJlSW5mby5kYXRlRWxlbWVudE9yZGVyXXx8Zy5tZHkpLmNhbGwodGhpcyxzKSk7fTtnLmZvcm1hdD1fLnByb2Nlc3MoXy5tYW55KF8uYW55KF8ucHJvY2VzcyhfLnJ0b2tlbigvXihkZD9kP2Q/fE1NP00/TT98eXk/eT95P3xoaD98SEg/fG1tP3xzcz98dHQ/fHp6P3o/KS8pLGZ1bmN0aW9uKGZtdCl7aWYoZ1tmbXRdKXtyZXR1cm4gZ1tmbXRdO31lbHNle3Rocm93IERhdGUuUGFyc2luZy5FeGNlcHRpb24oZm10KTt9fSksXy5wcm9jZXNzKF8ucnRva2VuKC9eW15kTXloSG1zdHpdKy8pLGZ1bmN0aW9uKHMpe3JldHVybiBfLmlnbm9yZShfLnN0b2tlbihzKSk7fSkpKSxmdW5jdGlvbihydWxlcyl7cmV0dXJuIF8ucHJvY2VzcyhfLmVhY2guYXBwbHkobnVsbCxydWxlcyksdC5maW5pc2hFeGFjdCk7fSk7dmFyIF9GPXt9O3ZhciBfZ2V0PWZ1bmN0aW9uKGYpe3JldHVybiBfRltmXT0oX0ZbZl18fGcuZm9ybWF0KGYpWzBdKTt9O2cuZm9ybWF0cz1mdW5jdGlvbihmeCl7aWYoZnggaW5zdGFuY2VvZiBBcnJheSl7dmFyIHJ4PVtdO2Zvcih2YXIgaT0wO2k8ZngubGVuZ3RoO2krKyl7cngucHVzaChfZ2V0KGZ4W2ldKSk7fVxucmV0dXJuIF8uYW55LmFwcGx5KG51bGwscngpO31lbHNle3JldHVybiBfZ2V0KGZ4KTt9fTtnLl9mb3JtYXRzPWcuZm9ybWF0cyhbXCJ5eXl5LU1NLWRkVEhIOm1tOnNzXCIsXCJkZGQsIE1NTSBkZCwgeXl5eSBIOm1tOnNzIHR0XCIsXCJkZGQgTU1NIGQgeXl5eSBISDptbTpzcyB6enpcIixcImRcIl0pO2cuX3N0YXJ0PV8ucHJvY2VzcyhfLnNldChbZy5kYXRlLGcudGltZSxnLmV4cHJlc3Npb25dLGcuZ2VuZXJhbERlbGltaXRlcixnLndoaXRlU3BhY2UpLHQuZmluaXNoKTtnLnN0YXJ0PWZ1bmN0aW9uKHMpe3RyeXt2YXIgcj1nLl9mb3JtYXRzLmNhbGwoe30scyk7aWYoclsxXS5sZW5ndGg9PT0wKXtyZXR1cm4gcjt9fWNhdGNoKGUpe31cbnJldHVybiBnLl9zdGFydC5jYWxsKHt9LHMpO307fSgpKTtEYXRlLl9wYXJzZT1EYXRlLnBhcnNlO0RhdGUucGFyc2U9ZnVuY3Rpb24ocyl7dmFyIHI9bnVsbDtpZighcyl7cmV0dXJuIG51bGw7fVxudHJ5e3I9RGF0ZS5HcmFtbWFyLnN0YXJ0LmNhbGwoe30scyk7fWNhdGNoKGUpe3JldHVybiBudWxsO31cbnJldHVybigoclsxXS5sZW5ndGg9PT0wKT9yWzBdOm51bGwpO307RGF0ZS5nZXRQYXJzZUZ1bmN0aW9uPWZ1bmN0aW9uKGZ4KXt2YXIgZm49RGF0ZS5HcmFtbWFyLmZvcm1hdHMoZngpO3JldHVybiBmdW5jdGlvbihzKXt2YXIgcj1udWxsO3RyeXtyPWZuLmNhbGwoe30scyk7fWNhdGNoKGUpe3JldHVybiBudWxsO31cbnJldHVybigoclsxXS5sZW5ndGg9PT0wKT9yWzBdOm51bGwpO307fTtEYXRlLnBhcnNlRXhhY3Q9ZnVuY3Rpb24ocyxmeCl7cmV0dXJuIERhdGUuZ2V0UGFyc2VGdW5jdGlvbihmeCkocyk7fTtcbiJdfQ==
</pre></body></html>