// ==UserScript==
// @name Eldarya Enhancements
// @namespace https://gitlab.com/NatoBoram/eldarya-enhancements
// @license GPL-3.0-or-later
// @version 1.1.2
// @author Nato Boram
// @description Enhances the user experience of Eldarya.
// @icon https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/avatar.png
// @supportURL https://gitlab.com/NatoBoram/Eldarya-Face-Downloader/issues
//
// @match https://www.eldarya.com.br/*
// @match https://www.eldarya.de/*
// @match https://www.eldarya.es/*
// @match https://www.eldarya.hu/*
// @match https://www.eldarya.it/*
// @match https://www.eldarya.pl/*
// @match https://www.eldarya.ru/*
// @match https://www.eldarya.com/*
// @match https://www.eldarya.fr/*
//
// @grant none
// ==/UserScript==
(()=>{var e={329:(e,t)=>{!function(e){var t=/\S/,n=/\"/g,a=/\n/g,i=/\r/g,o=/\\/g,r=/\u2028/,s=/\u2029/;function c(e){return e.trim?e.trim():e.replace(/^\s*|\s*$/g,"")}function l(e,t,n){if(t.charAt(n)!=e.charAt(0))return!1;for(var a=1,i=e.length;a<i;a++)if(t.charAt(n+a)!=e.charAt(a))return!1;return!0}e.tags={"#":1,"^":2,"<":3,$:4,"/":5,"!":6,">":7,"=":8,_v:9,"{":10,"&":11,_t:12},e.scan=function(n,a){var i,o=n.length,r=0,s=null,u=null,d="",m=[],p=!1,f=0,g=0,h="{{",b="}}";function v(){d.length>0&&(m.push({tag:"_t",text:new String(d)}),d="")}function y(n,a){if(v(),n&&function(){for(var n=!0,a=g;a<m.length;a++)if(!(n=e.tags[m[a].tag]<e.tags._v||"_t"==m[a].tag&&null===m[a].text.match(t)))return!1;return n}())for(var i,o=g;o<m.length;o++)m[o].text&&((i=m[o+1])&&">"==i.tag&&(i.indent=m[o].text.toString()),m.splice(o,1));else a||m.push({tag:"\n"});p=!1,g=m.length}function w(e,t){var n="="+b,a=e.indexOf(n,t),i=c(e.substring(e.indexOf("=",t)+1,a)).split(" ");return h=i[0],b=i[i.length-1],a+n.length-1}for(a&&(a=a.split(" "),h=a[0],b=a[1]),f=0;f<o;f++)0==r?l(h,n,f)?(--f,v(),r=1):"\n"==n.charAt(f)?y(p):d+=n.charAt(f):1==r?(f+=h.length-1,"="==(s=(u=e.tags[n.charAt(f+1)])?n.charAt(f+1):"_v")?(f=w(n,f),r=0):(u&&f++,r=2),p=f):l(b,n,f)?(m.push({tag:s,n:c(d),otag:h,ctag:b,i:"/"==s?p-h.length:f+b.length}),d="",f+=b.length-1,r=0,"{"==s&&("}}"==b?f++:"}"===(i=m[m.length-1]).n.substr(i.n.length-1)&&(i.n=i.n.substring(0,i.n.length-1)))):d+=n.charAt(f);return y(p,!0),m};var u={_t:!0,"\n":!0,$:!0,"/":!0};function d(t,n,a,i){var o,r=[],s=null,c=null;for(o=a[a.length-1];t.length>0;){if(c=t.shift(),o&&"<"==o.tag&&!(c.tag in u))throw new Error("Illegal content in < super tag.");if(e.tags[c.tag]<=e.tags.$||m(c,i))a.push(c),c.nodes=d(t,c.tag,a,i);else{if("/"==c.tag){if(0===a.length)throw new Error("Closing tag without opener: /"+c.n);if(s=a.pop(),c.n!=s.n&&!p(c.n,s.n,i))throw new Error("Nesting error: "+s.n+" vs. "+c.n);return s.end=c.i,r}"\n"==c.tag&&(c.last=0==t.length||"\n"==t[0].tag)}r.push(c)}if(a.length>0)throw new Error("missing closing tag: "+a.pop().n);return r}function m(e,t){for(var n=0,a=t.length;n<a;n++)if(t[n].o==e.n)return e.tag="#",!0}function p(e,t,n){for(var a=0,i=n.length;a<i;a++)if(n[a].c==e&&n[a].o==t)return!0}function f(e){var t=[];for(var n in e.partials)t.push('"'+h(n)+'":{name:"'+h(e.partials[n].name)+'", '+f(e.partials[n])+"}");return"partials: {"+t.join(",")+"}, subs: "+function(e){var t=[];for(var n in e)t.push('"'+h(n)+'": function(c,p,t,i) {'+e[n]+"}");return"{ "+t.join(",")+" }"}(e.subs)}e.stringify=function(t,n,a){return"{code: function (c,p,i) { "+e.wrapMain(t.code)+" },"+f(t)+"}"};var g=0;function h(e){return e.replace(o,"\\\\").replace(n,'\\"').replace(a,"\\n").replace(i,"\\r").replace(r,"\\u2028").replace(s,"\\u2029")}function b(e){return~e.indexOf(".")?"d":"f"}function v(e,t){var n="<"+(t.prefix||"")+e.n+g++;return t.partials[n]={name:e.n,partials:{}},t.code+='t.b(t.rp("'+h(n)+'",c,p,"'+(e.indent||"")+'"));',n}function y(e,t){t.code+="t.b(t.t(t."+b(e.n)+'("'+h(e.n)+'",c,p,0)));'}function w(e){return"t.b("+e+");"}e.generate=function(t,n,a){g=0;var i={code:"",subs:{},partials:{}};return e.walk(t,i),a.asString?this.stringify(i,n,a):this.makeTemplate(i,n,a)},e.wrapMain=function(e){return'var t=this;t.b(i=i||"");'+e+"return t.fl();"},e.template=e.Template,e.makeTemplate=function(e,t,n){var a=this.makePartials(e);return a.code=new Function("c","p","i",this.wrapMain(e.code)),new this.template(a,t,this,n)},e.makePartials=function(e){var t,n={subs:{},partials:e.partials,name:e.name};for(t in n.partials)n.partials[t]=this.makePartials(n.partials[t]);for(t in e.subs)n.subs[t]=new Function("c","p","t","i",e.subs[t]);return n},e.codegen={"#":function(t,n){n.code+="if(t.s(t."+b(t.n)+'("'+h(t.n)+'",c,p,1),c,p,0,'+t.i+","+t.end+',"'+t.otag+" "+t.ctag+'")){t.rs(c,p,function(c,p,t){',e.walk(t.nodes,n),n.code+="});c.pop();}"},"^":function(t,n){n.code+="if(!t.s(t."+b(t.n)+'("'+h(t.n)+'",c,p,1),c,p,1,0,0,"")){',e.walk(t.nodes,n),n.code+="};"},">":v,"<":function(t,n){var a={partials:{},code:"",subs:{},inPartial:!0};e.walk(t.nodes,a);var i=n.partials[v(t,n)];i.subs=a.subs,i.partials=a.partials},$:function(t,n){var a={subs:{},code:"",partials:n.partials,prefix:t.n};e.walk(t.nodes,a),n.subs[t.n]=a.code,n.inPartial||(n.code+='t.sub("'+h(t.n)+'",c,p,i);')},"\n":function(e,t){t.code+=w('"\\n"'+(e.last?"":" + i"))},_v:function(e,t){t.code+="t.b(t.v(t."+b(e.n)+'("'+h(e.n)+'",c,p,0)));'},_t:function(e,t){t.code+=w('"'+h(e.text)+'"')},"{":y,"&":y},e.walk=function(t,n){for(var a,i=0,o=t.length;i<o;i++)(a=e.codegen[t[i].tag])&&a(t[i],n);return n},e.parse=function(e,t,n){return d(e,0,[],(n=n||{}).sectionTags||[])},e.cache={},e.cacheKey=function(e,t){return[e,!!t.asString,!!t.disableLambda,t.delimiters,!!t.modelGet].join("||")},e.compile=function(t,n){n=n||{};var a=e.cacheKey(t,n),i=this.cache[a];if(i){var o=i.partials;for(var r in o)delete o[r].instance;return i}return i=this.generate(this.parse(this.scan(t,n.delimiters),t,n),t,n),this.cache[a]=i}}(t)},508:(e,t,n)=>{var a=n(329);a.Template=n(14).Template,a.template=a.Template,e.exports=a},14:(e,t)=>{!function(e){function t(e,t,n){var a;return t&&"object"==typeof t&&(void 0!==t[e]?a=t[e]:n&&t.get&&"function"==typeof t.get&&(a=t.get(e))),a}e.Template=function(e,t,n,a){e=e||{},this.r=e.code||this.r,this.c=n,this.options=a||{},this.text=t||"",this.partials=e.partials||{},this.subs=e.subs||{},this.buf=""},e.Template.prototype={r:function(e,t,n){return""},v:function(e){return e=c(e),s.test(e)?e.replace(n,"&").replace(a,"<").replace(i,">").replace(o,"'").replace(r,"""):e},t:c,render:function(e,t,n){return this.ri([e],t||{},n)},ri:function(e,t,n){return this.r(e,t,n)},ep:function(e,t){var n=this.partials[e],a=t[n.name];if(n.instance&&n.base==a)return n.instance;if("string"==typeof a){if(!this.c)throw new Error("No compiler available.");a=this.c.compile(a,this.options)}if(!a)return null;if(this.partials[e].base=a,n.subs){for(key in t.stackText||(t.stackText={}),n.subs)t.stackText[key]||(t.stackText[key]=void 0!==this.activeSub&&t.stackText[this.activeSub]?t.stackText[this.activeSub]:this.text);a=function(e,t,n,a,i,o){function r(){}function s(){}var c;r.prototype=e,s.prototype=e.subs;var l=new r;for(c in l.subs=new s,l.subsText={},l.buf="",a=a||{},l.stackSubs=a,l.subsText=o,t)a[c]||(a[c]=t[c]);for(c in a)l.subs[c]=a[c];for(c in i=i||{},l.stackPartials=i,n)i[c]||(i[c]=n[c]);for(c in i)l.partials[c]=i[c];return l}(a,n.subs,n.partials,this.stackSubs,this.stackPartials,t.stackText)}return this.partials[e].instance=a,a},rp:function(e,t,n,a){var i=this.ep(e,n);return i?i.ri(t,n,a):""},rs:function(e,t,n){var a=e[e.length-1];if(l(a))for(var i=0;i<a.length;i++)e.push(a[i]),n(e,t,this),e.pop();else n(e,t,this)},s:function(e,t,n,a,i,o,r){var s;return(!l(e)||0!==e.length)&&("function"==typeof e&&(e=this.ms(e,t,n,a,i,o,r)),s=!!e,!a&&s&&t&&t.push("object"==typeof e?e:t[t.length-1]),s)},d:function(e,n,a,i){var o,r=e.split("."),s=this.f(r[0],n,a,i),c=this.options.modelGet,u=null;if("."===e&&l(n[n.length-2]))s=n[n.length-1];else for(var d=1;d<r.length;d++)void 0!==(o=t(r[d],s,c))?(u=s,s=o):s="";return!(i&&!s)&&(i||"function"!=typeof s||(n.push(u),s=this.mv(s,n,a),n.pop()),s)},f:function(e,n,a,i){for(var o=!1,r=!1,s=this.options.modelGet,c=n.length-1;c>=0;c--)if(void 0!==(o=t(e,n[c],s))){r=!0;break}return r?(i||"function"!=typeof o||(o=this.mv(o,n,a)),o):!i&&""},ls:function(e,t,n,a,i){var o=this.options.delimiters;return this.options.delimiters=i,this.b(this.ct(c(e.call(t,a)),t,n)),this.options.delimiters=o,!1},ct:function(e,t,n){if(this.options.disableLambda)throw new Error("Lambda features disabled.");return this.c.compile(e,this.options).render(t,n)},b:function(e){this.buf+=e},fl:function(){var e=this.buf;return this.buf="",e},ms:function(e,t,n,a,i,o,r){var s,c=t[t.length-1],l=e.call(c);return"function"==typeof l?!!a||(s=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(l,c,n,s.substring(i,o),r)):l},mv:function(e,t,n){var a=t[t.length-1],i=e.call(a);return"function"==typeof i?this.ct(c(i.call(a)),a,n):i},sub:function(e,t,n,a){var i=this.subs[e];i&&(this.activeSub=e,i(t,n,this,a),this.activeSub=!1)}};var n=/&/g,a=/</g,i=/>/g,o=/\'/g,r=/\"/g,s=/[&<>\"\']/;function c(e){return String(null==e?"":e)}var l=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}}(t)},520:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<div id="marketplace-itemDetail-info-autobuy" style="text-align: center; margin: 20px auto"><div class="nl-button">Add to wishlist</div></div>'),a.fl()},partials:{},subs:{}})},184:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b("<h1>Add to wishlist</h1><p>How many maanas do you wish to offer to acquire this item?</p>"),a.fl()},partials:{},subs:{}})},397:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<button id="auto-explore-button" class="nl-button '),a.s(a.f("active",e,t,1),e,t,0,61,67,"{{ }}")&&(a.rs(e,t,(function(e,t,n){n.b("active")})),e.pop()),a.b('" data-id="'),a.b(a.v(a.f("locationId",e,t,0))),a.b('" data-mapid="'),a.b(a.v(a.f("regionId",e,t,0))),a.b('">Auto explore</button>'),a.fl()},partials:{},subs:{}})},835:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<a id="'),a.b(a.v(a.f("id",e,t,0))),a.b('" class="carousel-news carousel-ee" href="" style="background-image: url('),a.b(a.v(a.f("backgroundImage",e,t,0))),a.b(')"><div><h4>'),a.b(a.v(a.f("h4",e,t,0))),a.b("</h4><h5>"),a.b(a.v(a.f("h5",e,t,0))),a.b("</h5><p>"),a.b(a.v(a.f("p",e,t,0))),a.b("</p></div></a>"),a.fl()},partials:{},subs:{}})},147:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b("<h1>Change price</h1><p>How many maanas do you wish to offer to acquire this item?</p>"),a.fl()},partials:{},subs:{}})},421:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<button id="'),a.b(a.v(a.f("id",e,t,0))),a.b('" class="nl-button favorites-action-ee">'),a.b(a.v(a.f("text",e,t,0))),a.b("</button>"),a.fl()},partials:{},subs:{}})},15:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<img src="'),a.b(a.v(a.f("icon",e,t,0))),a.b('" alt="'),a.b(a.v(a.f("name",e,t,0))),a.b('" height="21" style="display: inline-block; margin: -2px auto"> Added <strong>'),a.b(a.v(a.f("name",e,t,0))),a.b('</strong>for <strong class="price-item">'),a.b(a.v(a.f("price",e,t,0))),a.b('</strong><span class="maana-icon" alt="maanas"></span> to the wishlist.'),a.fl()},partials:{},subs:{}})},637:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<img src="'),a.b(a.v(a.f("icon",e,t,0))),a.b('" alt="'),a.b(a.v(a.f("name",e,t,0))),a.b('" height="21" style="display: inline-block; margin: -2px auto"> Changed <strong>'),a.b(a.v(a.f("name",e,t,0))),a.b('</strong>\'s price for <strong class="price-item">'),a.b(a.v(a.f("price",e,t,0))),a.b('</strong><span class="maana-icon" alt="maanas"></span>.'),a.fl()},partials:{},subs:{}})},867:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<li id="header-takeover" style="transition: transform ease-in-out 200ms" onMouseOver="this.style.transform=\'scale(1.3)\'" onMouseOut="this.style.transform=\'scale(1)\'"><a><img src="/static/img/new-layout/home/connected/lock.png" style="filter: contrast(0%) brightness(200%)" height="21"></a></li>'),a.fl()},partials:{},subs:{}})},655:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<a id="home-'),a.b(a.v(a.f("id",e,t,0))),a.b('" class="home-content-tile home-content-small home-content-small-ee" href="'),a.b(a.v(a.f("href",e,t,0))),a.b('" style="background-image: url('),a.b(a.v(a.f("backgroundImage",e,t,0))),a.b(');"><h4>'),a.b(a.v(a.f("h4",e,t,0))),a.b("</h4></a>"),a.fl()},partials:{},subs:{}})},693:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<li class="main-menu-'),a.b(a.v(a.f("class",e,t,0))),a.b(' main-menu-ee"><a href="'),a.b(a.v(a.f("href",e,t,0))),a.b('">'),a.b(a.v(a.f("text",e,t,0))),a.b("</a></li>"),a.fl()},partials:{},subs:{}})},843:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<li id="'),a.b(a.v(a.f("id",e,t,0))),a.b('" class="profile-contact-action-ee"><span class="nl-button nl-button-sm"><div class="action-description">'),a.b(a.v(a.f("actionDescription",e,t,0))),a.b("</div></span></li>"),a.fl()},partials:{},subs:{}})},333:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<div class="account-misc-bloc account-ee-bloc bloc"><h2 class="section-title">Enhancements</h2><ul class="account-misc-actions"><li id="ee-debug-enabled" class="nl-button nl-button-sm '),a.s(a.f("debug",e,t,1),e,t,0,194,200,"{{ }}")&&(a.rs(e,t,(function(e,t,n){n.b("active")})),e.pop()),a.b('" title="Enables or disables logging.">Debug</li><li id="ee-minigames-enabled" class="nl-button nl-button-sm '),a.s(a.f("minigames",e,t,1),e,t,0,333,339,"{{ }}")&&(a.rs(e,t,(function(e,t,n){n.b("active")})),e.pop()),a.b('">Minigames</li><li id="ee-explorations-enabled" class="nl-button nl-button-sm '),a.s(a.f("explorations",e,t,1),e,t,0,449,455,"{{ }}")&&(a.rs(e,t,(function(e,t,n){n.b("active")})),e.pop()),a.b('">Explorations</li><li id="ee-market-enabled" class="nl-button nl-button-sm '),a.s(a.f("market",e,t,1),e,t,0,559,565,"{{ }}")&&(a.rs(e,t,(function(e,t,n){n.b("active")})),e.pop()),a.b('">Market</li><li id="ee-import" class="nl-button nl-button-sm">Import</li><li id="ee-export" class="nl-button nl-button-sm">Export</li></ul></div>'),a.fl()},partials:{},subs:{}})},290:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<a id="wishlist-button" class="nl-button">Wishlist</a>'),a.fl()},partials:{},subs:{}})},16:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b("<style>table {"),a.b("\n"+n),a.b(" text-align: center;"),a.b("\n"+n),a.b(" width: 100%;"),a.b("\n"+n),a.b(" }"),a.b("\n"),a.b("\n"+n),a.b(" .action-picto {"),a.b("\n"+n),a.b(" height: 50px;"),a.b("\n"+n),a.b(" width: 50px;"),a.b("\n"+n),a.b(" cursor: pointer;"),a.b("\n"+n),a.b(" }"),a.b("\n"),a.b("\n"+n),a.b(" .action-picto:hover:not(.disabled),"),a.b("\n"+n),a.b(" .edit-price:hover {"),a.b("\n"+n),a.b(" animation: button-bounce 300ms linear forwards;"),a.b("\n"+n),a.b(" filter: brightness(1.05) contrast(1.1);"),a.b("\n"+n),a.b(" }"),a.b("\n"),a.b("\n"+n),a.b(" .edit-price {"),a.b("\n"+n),a.b(" cursor: pointer;"),a.b("\n"+n),a.b(" }"),a.b("\n"),a.b("\n"+n),a.b(" img.disabled {"),a.b("\n"+n),a.b(" filter: grayscale(1);"),a.b("\n"+n),a.b(" }"),a.b("\n"),a.b("\n"+n),a.b(" .item-icon {"),a.b("\n"+n),a.b(" width: 100px;"),a.b("\n"+n),a.b(" height: 100px;"),a.b("\n"+n),a.b(" }</style><table><thead><tr><th>Icon</th><th>Name</th><th>Price</th><th>Status</th><th>Actions</th></tr></thead><tbody> "),a.s(a.f("wishlist",e,t,1),e,t,0,577,1275,"{{ }}")&&(a.rs(e,t,(function(e,t,n){n.b(' <tr class="marketplace-abstract" data-wearableitemid="'),n.b(n.v(n.f("wearableitemid",e,t,0))),n.b('"><td><img class="item-icon" src="'),n.b(n.v(n.f("icon",e,t,0))),n.b('" alt="'),n.b(n.v(n.f("name",e,t,0))),n.b('"></td><td><div class="abstract-name">'),n.b(n.v(n.f("name",e,t,0))),n.b('</div></td><td><div class="edit-price" title="Change price"><span class="price-item">'),n.b(n.v(n.f("price",e,t,0))),n.b('</span><span class="maana-icon" alt="maanas"></span></div></td><td><p class="error">'),n.b(n.v(n.f("error",e,t,0))),n.b('</p></td><td><img class="action-picto reset-item-status '),n.s(n.f("error",e,t,1),e,t,1,0,0,"")||n.b("disabled"),n.b('" src="/static/img/new-layout/wardrobe/reset-btn.png" title="Reset the error status" alt="Reset"> <img class="action-picto delete-wishlist-item" src="/static/img/new-layout/wardrobe/delete.png" title="Remove from the wishlist" alt="Delete"></td></tr> ')})),e.pop()),a.b(" </tbody></table>"),a.fl()},partials:{},subs:{}})}},t={};function n(a){var i=t[a];if(void 0!==i)return i.exports;var o=t[a]={exports:{}};return e[a](o,o.exports,n),o.exports}(()=>{"use strict";var e,t,a,i,o,r,s,c,l,u;!function(e){e[e.millisecond=1]="millisecond",e[e.second=1e3]="second",e[e.minute=6e4]="minute",e[e.hour=36e5]="hour",e[e.day=864e5]="day",e[e.week=6048e5]="week"}(e||(e={})),function(e){e.autoExploreLocations="autoExploreLocations",e.debug="debug",e.explorations="explorations",e.market="market",e.minigames="minigames",e.wishlist="wishlist"}(t||(t={}));class d{static localStorage=localStorage;constructor(){}static get autoExploreLocations(){return this.getItem(t.autoExploreLocations,[])}static set autoExploreLocations(e){this.setItem(t.autoExploreLocations,e)}static get debug(){return this.getItem(t.debug,!1)}static set debug(e){this.setItem(t.debug,e)}static get explorations(){return this.getItem(t.explorations,!1)}static set explorations(e){this.setItem(t.explorations,e)}static get market(){return this.getItem(t.market,!1)}static set market(e){this.setItem(t.market,e)}static get minigames(){return this.getItem(t.minigames,!1)}static set minigames(e){this.setItem(t.minigames,e)}static get settings(){return{autoExploreLocations:this.autoExploreLocations,debug:this.debug,explorations:this.explorations,market:this.market,minigames:this.minigames,wishlist:this.wishlist}}static set settings(e){this.autoExploreLocations=e.autoExploreLocations,this.debug=e.debug,this.explorations=e.explorations,this.market=e.market,this.minigames=e.minigames,this.wishlist=e.wishlist}static get wishlist(){return this.getItem(t.wishlist,[])}static set wishlist(e){this.setItem(t.wishlist,e)}static getItem(e,t){return JSON.parse(this.localStorage.getItem(e)??JSON.stringify(t))??t}static setItem(e,t){this.localStorage.setItem(e,JSON.stringify(t))}}class m{static console=console;constructor(){}static get debugging(){return d.debug}static debug(e,...t){this.debugging&&this.console.debug(e,...t)}static error(e,...t){this.debugging&&this.console.error(e,...t)}static info(e,...t){this.debugging&&this.console.info(e,...t)}static log(e,...t){this.debugging&&this.console.log(e,...t)}static warn(e,...t){this.debugging&&this.console.warn(e,...t)}}!function(e){e.action="action",e.explorationsDone="explorationsDone",e.meta="meta",e.minigamesDone="minigamesDone",e.selectedLocation="selectedLocation",e.takeover="takeover",e.wishlist="wishlist"}(a||(a={}));class p{static sessionStorage=sessionStorage;constructor(){}static get action(){return this.getItem(a.action,null)}static set action(e){this.setItem(a.action,e)}static get explorationsDone(){return this.getItem(a.explorationsDone,!1)}static set explorationsDone(e){this.setItem(a.explorationsDone,e)}static get meta(){return this.getItem(a.meta,null)}static set meta(e){this.setItem(a.meta,e)}static get minigamesDone(){return this.getItem(a.minigamesDone,!1)}static set minigamesDone(e){this.setItem(a.minigamesDone,e)}static get selectedLocation(){return this.getItem(a.selectedLocation,null)}static set selectedLocation(e){this.setItem(a.selectedLocation,e)}static get takeover(){return this.getItem(a.takeover,!1)}static set takeover(e){this.setItem(a.takeover,e)}static get wishlist(){return this.getItem(a.wishlist,[])}static set wishlist(e){this.setItem(a.wishlist,e)}static getItem(e,t){return JSON.parse(this.sessionStorage.getItem(e)??JSON.stringify(t))??t}static setItem(e,t){this.sessionStorage.setItem(e,JSON.stringify(t))}}function f(){const e=document.getElementById("header-right");if(!e)return;const t=e.querySelector("#header-takeover");if(p.takeover){if(!t){const t=n(867);e.insertAdjacentHTML("afterbegin",t.render({})),e.querySelector("#header-takeover")?.addEventListener("click",B)}}else t?.remove()}function g(e){const t=e.querySelector(".abstract-name")?.innerText,n=e.querySelector(".abstract-icon img")?.src,a=e.querySelector(".price-item[data-bids]")?.dataset,i=e.querySelector(".price-item:not([data-bids])")?.dataset;return n&&t?{...e.dataset,icon:n,name:t,buyNowPrice:i,currentPrice:a}:null}async function h(e){return new Promise((t=>{const n=setInterval((()=>{const a=document.querySelector(e);if(!a)return;clearInterval(n);const i=document.createEvent("MouseEvent");i.initEvent("mouseover"),a.dispatchEvent(i),setTimeout((()=>{a.click(),t(a)}),800)}),800)}))}!function(e){e.All="",e[e.Underwear=1]="Underwear",e[e.Skins=2]="Skins",e[e.Tattoos=20]="Tattoos",e[e.Mouths=21]="Mouths",e[e.Eyes=3]="Eyes",e[e.Hair=4]="Hair",e[e.Socks=5]="Socks",e[e.Shoes=6]="Shoes",e[e.Pants=7]="Pants",e[e.HandAccessories=8]="HandAccessories",e[e.Tops=9]="Tops",e[e.Coats=10]="Coats",e[e.Gloves=11]="Gloves",e[e.Necklaces=12]="Necklaces",e[e.Dresses=13]="Dresses",e[e.Hats=14]="Hats",e[e.FaceAccessories=15]="FaceAccessories",e[e.Funds=16]="Funds",e[e.Belts=18]="Belts",e[e.Atmospheres=19]="Atmospheres"}(i||(i={})),function(e){e.all="",e.food="food",e.alchemy="alchemy",e.utility="utility",e.tame="tame"}(o||(o={})),function(e){e.all="",e[e.food=1]="food",e.alchemy="Consumable",e[e.utility=3]="utility",e[e.tame=4]="tame"}(r||(r={})),function(e){e.any="",e[e.light=1]="light",e[e.obsidian=2]="obsidian",e[e.absynthe=3]="absynthe",e[e.shadow=4]="shadow"}(s||(s={})),function(e){e.all="",e.common="common",e.rare="rare",e.Epic="epic",e.legendary="legendary",e.event="event"}(c||(c={})),function(e){e.All="",e.Bag="Bag",e.Consumable="Consumable",e.EggItem="EggItem",e.PlayerWearableItem="PlayerWearableItem",e.QuestItem="QuestItem"}(l||(l={})),function(e){e.daily="daily",e.minigames="minigames",e.explorations="explorations",e.auctions="auctions",e.buy="buy",e.wait="wait"}(u||(u={}));class b{}const v=new class extends b{key=u.buy;get currentMaana(){return Number(document.querySelector("#currency-maana")?.dataset.maana)}condition(){return d.market&&Boolean(d.wishlist.length)}async perform(){if(!location.pathname.startsWith("/marketplace"))return await h(".main-menu-marketplace a"),!0;for(const e of d.wishlist){if(e.error){m.warn(`Skipped "${e.name}"`,e);continue}m.info(`Searching for "${e.name}"`,e);let t=8;e:for(let n=1;8===t;n++){const a=await this.search(e,n);t=a.length,m.log(`Found ${t} results`,a);const i=a.filter((t=>t.icon===e.icon&&t.buyNowPrice&&Number(t.buyNowPrice.price)<=e.price&&Number(t.buyNowPrice.price)<=this.currentMaana));for(const e of i){if(!await this.buy(e))break e;m.info(`Bought "${e.name}" for ${Number(e.buyNowPrice?.price)} maanas.`,e),$.flavrNotif(`Bought <strong>${e.name}</strong> for <strong class="price-item">${Number(e.buyNowPrice?.price)}</strong> <span class="maana-icon" alt="maanas"></span>.`)}}}return!1}async buy(e){const t=await async function(e){return new Promise((t=>{$.post("/marketplace/buy",{id:e},(e=>{p.meta=e.meta,t(e),"success"===e.result||$.flavrNotif(e.data)}),"json")}))}(Number(e.itemid));return"success"!==t.result&&this.setError(e.wearableitemid,t.data),"success"===t.result}async search(e,t=1){const n=document.querySelector("#filter-itemName");n&&(n.value=e.name);const a=document.querySelector(".marketplace-search-items");return a?(a.innerHTML=await async function(e){return e={type:l.All,bodyLocation:i.All,category:r.all,rarity:c.all,price:"",guard:s.any,page:1,name:"",...e},new Promise((t=>{$.get("/marketplace/ajax_search",{...e,from:8*(e.page-1),to:8},t)}))}({name:e.name,page:t}),Array.from(a.querySelectorAll(".marketplace-search-item")).map(g).filter((e=>null!==e))):[]}setError(e,t){const n=d.wishlist,a=n.findIndex((t=>t.wearableitemid===e)),i=n[a];i&&(i.error=t,d.wishlist=[...n.slice(void 0,a),i,...n.slice(a+1,void 0)])}},y=new class{key=u.daily;condition(){const e=document.getElementById("daily-gift-container");return!!e&&"none"!==getComputedStyle(e).display}async perform(){const e=document.getElementById("daily-gift-container");return!(!e||"none"===getComputedStyle(e).display||(e.click(),await h(".first-connexion .flavr-button.default"),C(),1))}};async function w(e){return new Promise((t=>{$.post("/pet/changeRegion",{newRegionId:e},(e=>{p.meta=e.meta,t(e),"success"===e.result?(currentRegion=e.data.currentRegion,pendingTreasureHuntLocation=void 0===e.data.pendingTreasureHuntLocation?null:e.data.pendingTreasureHuntLocation,timeLeftExploration=void 0===e.data.timeLeftExploration?null:e.data.timeLeftExploration):$.flavrNotif(e.data)}))}))}var k,x;!function(e){e.error="error",e.success="success"}(k||(k={})),function(e){e[e.idle=0]="idle",e[e.result=1]="result",e[e.capture=2]="capture",e[e.pending=3]="pending"}(x||(x={}));const S=new class extends b{key=u.explorations;get globals(){return{currentRegion,pendingTreasureHuntLocation,timeLeftExploration}}condition(){return d.explorations&&!p.explorationsDone&&!!d.autoExploreLocations.length}async perform(){if("/pet"!==location.pathname)return await h(".main-menu-pet a"),!0;switch(this.getExplorationStatus()){case x.idle:return(await this.startExploration()).selected||(p.explorationsDone=!0),!1;case x.pending:return await this.waitExploration()&&this.perform();case x.result:return await this.endExploration(),this.perform();case x.capture:return await this.endCapture(),this.perform();default:return!1}}async clickExplore(){return h("#explore-button")}async clickLocation(e){return h(`.map-location[data-id="${e.location.id}"]`)}clickRegion(e){const t=document.querySelector(`.minimap[data-mapid="${e.region.id}"]`);return t?(t.click(),t):(d.autoExploreLocations=d.autoExploreLocations.filter((t=>t.region.id!==e.region.toString())),p.selectedLocation=null,location.reload(),null)}async clickSeason(){return h("#crystal-images-container")}async endCapture(){try{new Audio("/static/event/2021/music/sounds/mission-complete.mp3").play()}catch(e){}await h("#open-capture-interface"),await h("#capture-button"),await h("#close-result")}async endExploration(){return h("#close-result")}getCurrentSeason(){return Array.from(document.querySelector("body")?.classList??[]).find((e=>e.startsWith("season-")))?.replace("season-","")??null}getExplorationStatus(){return document.querySelector("#open-capture-interface")||document.querySelector("#capture-interface-outer.active")?x.capture:document.querySelector("#pending-map-location-data-outer.active")||document.querySelector("#map-container.pending")?x.pending:document.querySelector("#treasure-hunt-result-overlay.active")?x.result:x.idle}getLowestEnergyLocation(){return d.autoExploreLocations.reduce(((e,t)=>Number(t.location.energyRequired)<Number(e.location.energyRequired)?t:e))}getSelectedLocation(){let e=p.selectedLocation;return e||(e=this.selectLocation(),p.selectedLocation=e),e}selectLocation(){const e=d.autoExploreLocations.filter((e=>Number(e.location.energyRequired)<=petEnergy)),t=this.getLowestEnergyLocation(),n=e.filter((e=>petEnergy-Number(e.location.energyRequired)>=Number(t.location.energyRequired)));if(n.length)return n[Math.floor(Math.random()*n.length)]??null;const a=e.filter((e=>Number(e.location.energyRequired)===petEnergy));return a.length?a[Math.floor(Math.random()*a.length)]??null:e[Math.floor(Math.random()*e.length)]??null}async startExploration(){const e=this.getSelectedLocation();return e?(m.info("Exploring",e),e.region.season&&this.getCurrentSeason()!==e.region.season?(await this.clickSeason(),{exploring:!1,selected:e}):(this.clickRegion(e),await this.clickLocation(e),await this.clickExplore(),p.selectedLocation=null,{exploring:!0,selected:e})):{exploring:!1,selected:e}}async waitExploration(t){document.querySelector(`.minimap[data-mapid="${t?.region.id??currentRegion.id}"]`)?.click();let n=3*e.second;if(t)n+=t.location.timeToExplore*e.minute;else if(timeLeftExploration&&timeLeftExploration>0)n+=timeLeftExploration*e.second;else if(!pendingTreasureHuntLocation&&document.querySelector("#map-container.pending")){const t=await async function(){return new Promise((e=>{$.post("/pet/explorationResults",(t=>{p.meta=t.meta,e(t),"success"===t.result||$.flavrNotif(t.data)}))}))}();return t.result===k.success&&(!!t.data.results.find((e=>"capture"===e.type))&&(await async function(){return new Promise((e=>{$.post("/pet/capture/end",(t=>{p.meta=t.meta,e(t),"success"===t.result||$.flavrNotif(t.data)}))}))}(),m.error("Reloading because the exploration is in another region.",this.globals),await new Promise((t=>setTimeout(t,e.minute))),location.reload(),!0))}return!(n>10*e.minute||(m.log(`Waiting for the exploration to end in ${Math.ceil(n/e.second)} seconds...`,this.globals),await new Promise((e=>setTimeout(e,n))),await w(Number(t?.region.id??currentRegion.id)),this.getExplorationStatus()===x.pending&&timeLeftExploration&&timeLeftExploration<0&&(m.info("Reloading because the timer is desynchronised.",this.globals),await new Promise((t=>setTimeout(t,e.second))),location.reload()),0))}},E={name:"Flappy",scoreMin:180,scoreMax:200,delayMin:6e4,delayMax:7e4,buttonSelector:'.minigame-start [href="/minigames/bubbltemple"] .nl-button'},L={name:"Hatchlings",scoreMin:18,scoreMax:20,delayMin:3e4,delayMax:3e4,buttonSelector:'.minigame-start [href="/minigames/cocooninpick"] .nl-button'},I={name:"Peggle",scoreMin:9,scoreMax:10,delayMin:1e4,delayMax:2e4,buttonSelector:'.minigame-start [href="/minigames/gembomb"] .nl-button'};async function T(e){await new Promise((e=>{const t=setInterval((()=>{const n=document.querySelectorAll(".minigames-rules .flavr-button");if(n.length){clearInterval(t);for(const e of n)e.classList.add("disabled");e(!0)}}),250)}));const t=await async function(e){return new Promise(((t,n)=>{"undefined"!=typeof Recaptcha?Recaptcha.execute(`minigameStart${e.name}`,(a=>{A(e,a).then(t).catch(n)})):A(e).then(t).catch(n)}))}(e);$.flavrNotif(`Playing <strong>${e.name}</strong>...`);const n=t.data,a=q(e.scoreMin,e.scoreMax),i=function(e,t){e=e.toString(),t=t.toString();let n="";for(let a=0;a<e.length;++a){let i=e[a];for(let e=0;e<t.length;++e)i=String.fromCharCode(i.charCodeAt(0)^t.charCodeAt(e));n+=i}return encodeURIComponent(n)}(n,a.toString());await new Promise((t=>setTimeout(t,q(e.delayMin,e.delayMax)))),await M(e,n,a),await new Promise((e=>setTimeout(e,q(1e3,3e3)))),await async function(e,t,n){return new Promise((a=>{"undefined"!=typeof Recaptcha?Recaptcha.execute("minigameSave"+n,(i=>{N(e,t,n,i).then(a)})):N(e,t,n).then(a)}))}(i,a,e.name.toLowerCase()),await new Promise((e=>setTimeout(e,q(1e3,3e3))))}function q(e,t){return Math.floor(Math.random()*(t-e+1)+e)}async function A(e,t){return new Promise(((n,a)=>{$.ajax({url:"/minigames/ajax_startGame",type:"post",dataType:"json",data:t?{game:e.name.toLowerCase(),recaptchaToken:t}:{game:e.name.toLowerCase()},success:e=>{n(e)},error:()=>{a()}})}))}async function M(e,t,n){return new Promise((a=>{$.post("/minigames/ajax_getPrizes",{game:e.name.toLowerCase(),score:n},(t=>{a(t),"success"===t.result?$.flavrNotif(`Played <strong>${e.name}</strong> for <strong class="price-item">${t.data.maana}</strong> <span class="maana-icon" alt="maanas"></span>.`):$.flavrNotif(t.data)}),"json").fail((()=>setTimeout((()=>{a(M(e,t,n))}),q(1e3,3e3))))}))}async function N(e,t,n,a){return new Promise((i=>{const o=decodeURIComponent(e);$.ajax({type:"post",url:"/minigames/ajax_saveScore",data:a?{token:o,score:t,game:n,recaptchaToken:a}:{token:o,score:t,game:n},success:()=>{i()},error:()=>setTimeout((()=>{i(N(e,t,n))}),q(1e3,3e3))})}))}function P(){p.takeover&&j()}function B(){C(),p.takeover=!p.takeover,f(),p.takeover?$.flavrNotif("Takeover mode enabled. Please do not interact with this tab."):$.flavrNotif("Takeover mode disabled."),j()}function C(){p.action=null,p.explorationsDone=!1,p.minigamesDone=!1,p.selectedLocation=null,p.wishlist=[]}async function j(){if(!p.takeover)return;y.condition()&&await y.perform();const e=_.find((e=>e.key===p.action));return e?(m.info("Action:",e.key),e.condition()&&await e.perform()?void 0:(D(),void j())):(D(),void j())}const _=[new class{key=u.minigames;condition(){return d.minigames&&!p.minigamesDone}async perform(){switch(location.pathname){case"/minigames":{const e=this.openMinigame(I)||this.openMinigame(E)||this.openMinigame(L);return e||(p.minigamesDone=!0,document.querySelector('.minigames-rules [rel="btn-cancel"]')?.click()),e}case"/minigames/gembomb":await async function(){return T(I)}();break;case"/minigames/bubbltemple":await async function(){return T(E)}();break;case"/minigames/cocooninpick":await async function(){return T(L)}();break;default:return await h(".main-menu-minigames a"),!0}return await h(".main-menu-minigames a"),!0}openMinigame(e){const t=document.querySelector(e.buttonSelector);return!!t&&(t.click(),!0)}},S,v,new class extends b{key=u.wait;condition(){return!0}async perform(){return m.log("Waiting for 10 minutes..."),new Promise((e=>setTimeout((()=>{e(!1)}),6e5)))}}];function D(){const e=_.findIndex((e=>e.key===p.action))+1;return p.action=_[e>=_.length?0:e].key}function R(e,t="outfit"){const n=Sacha.Avatar.avatars[e];if(!n)return;const a=function(e){return e.children.map((e=>{const t=e.getItem();return{id:t._id,group:t._group,name:t._name,image:t._image,type:t._type,categoryId:t._categoryId,hiddenCategories:Object.values(t._hiddenCategories),animationData:t._animationData,locked:t._locked}}))}(n),i="data:text/json;charset=utf-8,"+encodeURIComponent(JSON.stringify(a,null,"\t")),o=document.createElement("a");o.setAttribute("href",i),o.setAttribute("download",`${t}.json`),o.click()}function H(){R("#appearance-preview")}function O(){const e=document.createElement("input");e.setAttribute("type","file"),e.setAttribute("accept","application/json"),e.click(),e.addEventListener("input",(e=>{if(!e.target)return;const t=e.target.files;if(!t)return;const n=t[0];n&&n.text().then((async e=>{if(!e)return;const t=JSON.parse(e),n=Sacha.Avatar.avatars["#appearance-preview"];if(!n)return;$.flavrNotif("Importing outfit. Please wait...");const a=new Set;for(const e of t)a.add(e.type);await Promise.all(Array.from(a.values()).map((async e=>async function(e){return new Promise((t=>{const n=$("#appearance-items-category-"+e);n.hasClass("active")?t():n.length<=0?$.post("/player/openCategory/"+e,(e=>{$(e).hide().appendTo("#appearance-items")})).always((()=>{t()})):t()}))}(e))));const i=new Set;for(const e of t)document.querySelector(`[data-group="${e.group}"]`)&&i.add(e.group);await Promise.all(Array.from(i.values()).map((async e=>async function(e){return new Promise((t=>{const n=$("#appearance-items-group-"+e.toString());n.hasClass("active")?t():n.length<=0?$.get("/player/openGroup/"+e.toString(),(e=>{$(e).hide().appendTo("#appearance-items")})).always((()=>{t()})):t()}))}(e))));const o=[];for(const e of t){const t=availableItems[e.id];t&&o.push(t)}!function(){const e=Sacha.Avatar.avatars["#appearance-preview"];if(e)for(let t=e.children.length-1;t>=0;t--){const n=e.children[t];if(!n)continue;const a=n.getItem();Sacha.Avatar.removeItemFromAllAvatars(a)&&$(`#appearance-item-${a._id}`).removeClass("selected")}}(),n.addItems(o),initializeSelectedItems(),initializeHiddenCategories(),$.flavrNotif("Imported outfit!")}))}))}function G(e,t){const n=e.toDataURL("image/png"),a=document.createElement("a");a.setAttribute("href",n),a.setAttribute("download",`${t}.png`),a.style.display="none",document.body.appendChild(a),a.click(),document.body.removeChild(a)}function F(){const e=document.querySelector("#avatar-menu-container canvas");e?G(e,"face"):console.warn("Couldn't find the guardian's face.")}function J(){const e=document.querySelector("#home-avatar-player canvas");e?G(e,U()??"guardian"):console.warn("Couldn't find the guardian.")}function W(){const e=document.querySelector("#appearance-preview canvas");e?G(e,U()??"guardian"):console.warn("Couldn't find the guardian.")}function U(){return document.querySelector("#avatar-menu-container-outer>p")?.textContent??null}let z;function K(){z?.disconnect(),z=null;const e=document.getElementById("appearance-items");e&&(z=new MutationObserver(K),z.observe(e,{childList:!0}),function(){const e=document.getElementById("favorites-actions");if(!e||document.querySelector(".favorites-action-ee"))return;const t=n(421),a={id:"import-outfit",text:"Import"},i={id:"export-outfit",text:"Export"},o={id:"download-outfit",text:"Download"};e.insertAdjacentHTML("beforeend",t.render(a)+t.render(i)+t.render(o)),document.getElementById(a.id)?.addEventListener("click",O),document.getElementById(i.id)?.addEventListener("click",H),document.getElementById(o.id)?.addEventListener("click",W)}())}const Q={backgroundImage:"https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_beemoov_annoyances.png",h4:"Beemoov Annoyances",href:"https://gitlab.com/NatoBoram/Beemoov-Annoyances",id:"carousel-beemoov-annoyances",p:"Block some of Eldarya's annoyances."},V={backgroundImage:"https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_download_face.png",id:"carousel-download-face",h4:"Download your face!",p:"Click here to download your guardian's face."},X={backgroundImage:"https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_download_guardian.png",id:"carousel-download-guardian",h4:"Download your guardian!",p:"Click here to download your guardian."},Y={backgroundImage:"https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_eldarya_enhancements.png",h4:`${GM.info.script.name} v${GM.info.script.version}`,href:GM.info.script.namespace,id:"carousel-eldarya-enhancements",p:GM.info.script.description},Z={backgroundImage:"https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_takeover.png",id:"carousel-takeover",h4:"Takeover",p:"Give up this tab to perform automated actions."};function ee(e){const t=e.querySelector("h4");t&&(t.innerText=(p.takeover?"Disable":"Enable")+" Takeover")}let te,ne;function ae(){for(const e of document.querySelectorAll(".marketplace-abstract"))e.addEventListener("click",(()=>{new MutationObserver(((t,n)=>{const a=g(e);a&&ie(a,n)})).observe(document.getElementById("marketplace-zoom"),{childList:!0})}))}function ie(e,t){const a=document.querySelector("#marketplace-itemDetail");if(!a)return;t?.disconnect(),document.getElementById("marketplace-itemDetail-info-autobuy")?.remove();const i=n(520);a.insertAdjacentHTML("beforeend",i.render({})),a.querySelector("#marketplace-itemDetail-info-autobuy")?.addEventListener("click",(()=>{!function(e){const t=n(184);$.flavr({content:t.render({}),buttons:{close:{style:"close"},save:{action:()=>oe(e)}},dialog:"prompt",prompt:{value:""},onBuild:t=>{t.addClass("new-layout-popup"),document.querySelector(".flavr-prompt")?.addEventListener("keyup",(({key:t})=>{"Enter"===t&&oe(e)}))}})}(e)}))}function oe(e){const t=Number(document.querySelector(".flavr-prompt")?.value.trim());if(!t||t<=0)return $.flavrNotif("This is not a valid price."),!1;const a=d.wishlist.filter((t=>t.icon!==e.icon)),i={...e,price:t};a.push(i),d.wishlist=a;const o=n(15);return $.flavrNotif(o.render(i)),!0}function re(){if(ne?.disconnect(),ne=null,"/pet"!==location.pathname)return;const e=document.querySelector(".page-main-container");e&&(ne=new MutationObserver(re),ne.observe(e,{attributes:!0}),function(){const e=d.autoExploreLocations;for(const t of document.querySelectorAll(".map-location[data-id]")){const n=Number(t.getAttribute("data-id"));n&&(ue(e,t),t.addEventListener("click",(()=>{new MutationObserver(((e,t)=>{se(n,t)})).observe(document.getElementById("map-location-preview"),{attributes:!0})})))}}())}function se(e,t){const a=document.querySelector("#buttons-container");if(!a)return;t?.disconnect();const i={locationId:e,active:d.autoExploreLocations.some((t=>t.location.id===e.toString())),regionId:Number(document.querySelector(".minimap.current[data-mapid]")?.getAttribute("data-mapid"))};a.querySelector("#auto-explore-button")?.remove();const o=n(397);a.insertAdjacentHTML("beforeend",o.render(i)),a.querySelector("#auto-explore-button")?.addEventListener("click",(()=>{(async function(e){if(e.active){const t=d.autoExploreLocations.filter((t=>t.location.id!==e.locationId.toString()));return d.autoExploreLocations=t,void se(e.locationId)}const t=await ce(e.regionId,e.locationId);if(!t)return;const n=d.autoExploreLocations;n.push(t),d.autoExploreLocations=n,se(e.locationId)})(i).then(le)})),async function(e){const t=await ce(e.regionId,e.locationId);t&&petEnergy<Number(t.location.energyRequired)&&document.getElementById("explore-button")?.classList.add("disabled")}(i)}async function ce(e,t){const n=await async function(e){if(e.toString()===currentRegion.id)return currentRegion;const t=await w(e);return t.result===k.success?t.data.currentRegion:null}(e);if(!n)return null;const a=n.locations.find((e=>e.id===t.toString()));return a?{location:a,region:n}:null}function le(){const e=d.autoExploreLocations;for(const t of document.querySelectorAll(".map-location[data-id]"))ue(e,t)}function ue(e,t){const n=t.getAttribute("data-id");n&&(t.style.backgroundImage=e.some((e=>e.location.id===n))?"url(/static/img/new-layout/pet/icons/picto_map_explo.png)":"url(/static/img/new-layout/pet/icons/picto_map.png)")}function de(){const e=document.querySelector("#main-section .section-title"),t=Object.keys(Sacha.Avatar.avatars).filter((e=>e.startsWith("#playerProfileAvatar")));for(const n of t)R(n,e?.textContent?.trim())}function me(){const e=document.querySelector("#account-right div");if(!e||e.querySelector(".account-ee-bloc"))return;const t=n(333);e.insertAdjacentHTML("beforeend",t.render(d.settings)),document.getElementById("ee-debug-enabled")?.addEventListener("click",(()=>{d.debug=!d.debug,pe()})),document.getElementById("ee-minigames-enabled")?.addEventListener("click",(()=>{d.minigames=!d.minigames,pe()})),document.getElementById("ee-explorations-enabled")?.addEventListener("click",(()=>{d.explorations=!d.explorations,pe()})),document.getElementById("ee-market-enabled")?.addEventListener("click",(()=>{d.market=!d.market,pe()})),document.getElementById("ee-import")?.addEventListener("click",fe),document.getElementById("ee-export")?.addEventListener("click",ge)}function pe(){document.querySelector(".account-ee-bloc")?.remove(),me()}function fe(){const e=document.createElement("input");e.setAttribute("type","file"),e.setAttribute("accept","application/json"),e.click(),e.addEventListener("input",(e=>{if(!e.target)return;const t=e.target.files;if(!t)return;const n=t[0];n&&n.text().then((e=>{e&&(d.settings=JSON.parse(e),pe(),$.flavrNotif("Imported settings!"))}))}))}function ge(){const e="data:text/json;charset=utf-8,"+encodeURIComponent(JSON.stringify(d.settings,null,"\t")),t=document.createElement("a");t.setAttribute("href",e),t.setAttribute("download",`${U()??"eldarya-enhancements"}-settings.json`),t.click()}function he(){const e=document.getElementById("marketplace-menu");if(!e)return;if(!e.querySelector("#wishlist-button"))for(const t of e.querySelectorAll("a"))t.addEventListener("click",(()=>{pageLoad(t.href,void 0,void 0,void 0,!0)}));e.querySelector("#wishlist-button")?.remove();const t=n(290);e.insertAdjacentHTML("beforeend",t.render({}));const a=e.querySelector("#wishlist-button");a?.addEventListener("click",(()=>{be(a)}))}function be(e){const t=document.querySelector(".marketplace-assistance");t&&(t.textContent="On this page, you can organize your wishlist and check the status of your wished items."),document.querySelector("#marketplace-menu .active")?.classList.remove("active"),e.classList.add("active");const a=document.getElementById("marketplace-filters");a&&(a.innerHTML="");const i=n(16),o=document.querySelector(".marketplace-container")??document.getElementById("marketplace-active-auctions")??document.getElementById("marketplace-itemsForSale");if(!o)return;const r={wishlist:d.wishlist};o.innerHTML=i.render(r);for(const t of o.querySelectorAll("tr")){const n=t.dataset.wearableitemid;if(!n)continue;const a=t.querySelector(".reset-item-status");a&&a.addEventListener("click",(()=>{ve(n),be(e)}));const i=t.querySelector(".delete-wishlist-item");i&&i.addEventListener("click",(()=>{ye(n),be(e)}));const o=t.querySelector(".edit-price");o&&o.addEventListener("click",(()=>{we(n).then((()=>{be(e)}))}))}}function ve(e){const t=d.wishlist,n=t.findIndex((t=>t.wearableitemid===e)),a=t[n];a&&(delete a.error,d.wishlist=[...t.slice(void 0,n),a,...t.slice(n+1,void 0)])}function ye(e){d.wishlist=d.wishlist.filter((t=>t.wearableitemid!==e))}async function we(e){const t=n(147),a=d.wishlist,i=a.findIndex((t=>t.wearableitemid===e)),o=a[i];if(o)return new Promise((n=>{$.flavr({content:t.render({}),dialog:"prompt",prompt:{value:o.price.toString()},buttons:{close:{style:"close",action:()=>(n(),!0)},save:{action:()=>ke(e,n)}},onBuild:t=>{t.addClass("new-layout-popup"),document.querySelector(".flavr-prompt")?.addEventListener("keyup",(({key:t})=>{"Enter"===t&&ke(e,n)}))}})}))}function ke(e,t){const a=d.wishlist,i=a.findIndex((t=>t.wearableitemid===e)),o=a[i];if(!o)return!1;const r=Number(document.querySelector(".flavr-prompt")?.value.trim());if(!r||r<=0)return $.flavrNotif("This is not a valid price."),!1;o.price=r,d.wishlist=[...a.slice(void 0,i),o,...a.slice(i+1,void 0)];const s=n(637);return $.flavrNotif(s.render(o)),t(),!0}function xe(){!function(){const e=document.getElementById("menu-inner-right");if(!e||e.querySelector(".main-menu-ee"))return;e.querySelector(".main-menu-bank")?.remove();const t=n(693);e.insertAdjacentHTML("beforeend",t.render({class:"forum",href:"/forum",text:"Forum"}))}(),function(){const e=document.querySelector("#carousel-inner");if(!e||document.querySelector(".carousel-ee"))return;const t=n(835),a=[Y,...d.minigames||d.explorations||d.market?[Z]:[],X,V,Q];e.insertAdjacentHTML("beforeend",a.map((e=>t.render(e))).join("\n"));for(const t of a){if(!t.href)continue;const n=e.querySelector(`#${t.id}`);n&&n.addEventListener("click",(()=>{n.classList.contains("active")&&open(t.href,"_blank")}))}document.getElementById(V.id)?.addEventListener("click",F),document.getElementById(X.id)?.addEventListener("click",J);const i=document.getElementById(Z.id);i?.addEventListener("click",(()=>{B(),ee(i)})),i&&ee(i)}(),function(){const e=document.getElementById("home-content-smalls");if(!e||e.querySelector(".home-content-small-ee"))return;document.getElementById("home-bank")?.remove();const t=n(655);e.insertAdjacentHTML("beforeend",t.render({backgroundImage:"/assets/img/minigames/treasurehunt/a48bbc4e4849745ebe6dbcf5313eb3f0.jpg",h4:"Forum",href:"/forum",id:"forum"}))}(),K(),function(){const e=document.getElementById("profile-contact-actions");if(!e||document.querySelector(".profile-contact-action-ee"))return;const t=n(843),a={id:"profile-contact-action-export",actionDescription:"Export outfit"};e.insertAdjacentHTML("beforeend",t.render(a)),document.getElementById(a.id)?.addEventListener("click",de)}(),me(),re(),function(){if(te?.disconnect(),te=null,"/marketplace"!==location.pathname)return;const e=document.querySelector(".marketplace-search-items");e&&(te=new MutationObserver(ae),te.observe(e,{childList:!0}),ae())}(),he(),f(),setTimeout((()=>{document.querySelector(".music-hidden-voice")?.click()}),e.second)}window.addEventListener("load",(()=>{document.querySelector(".music-hidden-voice")?.click()})),new MutationObserver((function(){xe(),P()})).observe(document.getElementById("container"),{childList:!0}),xe(),console.log(`${GM.info.script.name} v${GM.info.script.version} loaded.`),P()})()})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL25vZGVfbW9kdWxlcy8ucG5wbS9ob2dhbi5qc0AzLjAuMi9ub2RlX21vZHVsZXMvaG9nYW4uanMvbGliL2NvbXBpbGVyLmpzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hvZ2FuLmpzQDMuMC4yL25vZGVfbW9kdWxlcy9ob2dhbi5qcy9saWIvaG9nYW4uanMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9ub2RlX21vZHVsZXMvLnBucG0vaG9nYW4uanNAMy4wLjIvbm9kZV9tb2R1bGVzL2hvZ2FuLmpzL2xpYi90ZW1wbGF0ZS5qcyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9hdXRvX2J1eV9idXR0b24uaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9hdXRvX2J1eV9mbGF2ci5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2F1dG9fZXhwbG9yZV9idXR0b24uaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9jYXJvdXNlbF9uZXdzLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvY2hhbmdlX3ByaWNlX2ZsYXZyLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvZmF2b3JpdGVzX2FjdGlvbi5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2ZsYXZyX25vdGlmL2FkZGVkX3RvX3dpc2hsaXN0Lmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvZmxhdnJfbm90aWYvY2hhbmdlZF93aXNobGlzdF9wcmljZS5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2hlYWRlcl90YWtlb3Zlci5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2hvbWVfY29udGVudF9zbWFsbC5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL21haW5fbWVudS5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL3Byb2ZpbGVfY29udGFjdF9hY3Rpb24uaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9zZXR0aW5ncy5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL3dpc2hsaXN0X2J1dHRvbi5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL3dpc2hsaXN0X3NldHRpbmdzLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvZHVyYXRpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvc2Vzc2lvbl9zdG9yYWdlL3Nlc3Npb25fc3RvcmFnZS5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21hcmtldHBsYWNlL2VudW1zL2JvZHlfbG9jYXRpb24uZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9tYXJrZXRwbGFjZS9lbnVtcy9jYXRlZ29yeS5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21hcmtldHBsYWNlL2VudW1zL2d1YXJkLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWFya2V0cGxhY2UvZW51bXMvcmFyaXR5LmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWFya2V0cGxhY2UvZW51bXMvdHlwZS5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Nlc3Npb25fc3RvcmFnZS90YWtlb3Zlcl9hY3Rpb24uZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2UudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvY29uc29sZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL2hlYWRlcl90YWtlb3Zlci50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZV9oYW5kbGVycy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9jbGljay50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9jbGFzc2VzL2FjdGlvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9jbGFzc2VzL2J1eV9hY3Rpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYWpheC9idXkudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYWpheC9hamF4X3NlYXJjaC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9jbGFzc2VzL2RhaWx5X2FjdGlvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hamF4L2NoYW5nZV9yZWdpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYXBpL3Jlc3VsdC5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2V4cGxvcmF0aW9uX3N0YXR1cy5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2NsYXNzZXMvZXhwbG9yYXRpb25fYWN0aW9uLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FqYXgvZXhwbG9yYXRpb25fcmVzdWx0cy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hamF4L2NhcHR1cmVfZW5kLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21pbmlnYW1lcy9mbGFwcHkudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWluaWdhbWVzL2hhdGNobGluZ3MudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWluaWdhbWVzL3BlZ2dsZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9taW5pZ2FtZXMvZW1pbGUudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvYnJhaW4udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvY2xhc3Nlcy9taW5pZ2FtZV9hY3Rpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvY2xhc3Nlcy93YWl0X2FjdGlvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9vdXRmaXQudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYXBwZWFyYW5jZS9mYXZvcml0ZXNfYWN0aW9ucy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9kb3dubG9hZC1jYW52YXMudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvYXBwZWFyYW5jZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9jYXJvdXNlbC9jYXJvdXNlbF9iZWVtb292X2Fubm95YW5jZXMudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvY2Fyb3VzZWwvY2Fyb3VzZWxfZG93bmxvYWRfZmFjZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9jYXJvdXNlbC9jYXJvdXNlbF9kb3dubG9hZF9ndWFyZGlhbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9jYXJvdXNlbC9jYXJvdXNlbF9lbGRhcnlhX2VuaGFuY2VtZW50cy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9jYXJvdXNlbC9jYXJvdXNlbF90YWtlb3Zlci50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9jYXJvdXNlbC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9tYXJrZXQudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvcGV0LnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL3Byb2ZpbGUudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvc2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvd2lzaGxpc3QudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWFpbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9tZW51LnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL2hvbWVfY29udGVudC50cyJdLCJuYW1lcyI6WyJIb2dhbiIsInJJc1doaXRlc3BhY2UiLCJyUXVvdCIsInJOZXdsaW5lIiwickNyIiwiclNsYXNoIiwickxpbmVTZXAiLCJyUGFyYWdyYXBoU2VwIiwidHJpbSIsInMiLCJyZXBsYWNlIiwidGFnQ2hhbmdlIiwidGFnIiwidGV4dCIsImluZGV4IiwiY2hhckF0IiwiaSIsImwiLCJsZW5ndGgiLCJ0YWdzIiwic2NhbiIsImRlbGltaXRlcnMiLCJ0b2tlbiIsImxlbiIsInN0YXRlIiwidGFnVHlwZSIsImJ1ZiIsInRva2VucyIsInNlZW5UYWciLCJsaW5lU3RhcnQiLCJvdGFnIiwiY3RhZyIsImFkZEJ1ZiIsInB1c2giLCJTdHJpbmciLCJmaWx0ZXJMaW5lIiwiaGF2ZVNlZW5UYWciLCJub05ld0xpbmUiLCJpc0FsbFdoaXRlc3BhY2UiLCJqIiwibWF0Y2giLCJsaW5lSXNXaGl0ZXNwYWNlIiwibmV4dCIsImluZGVudCIsInRvU3RyaW5nIiwic3BsaWNlIiwiY2hhbmdlRGVsaW1pdGVycyIsImNsb3NlIiwiY2xvc2VJbmRleCIsImluZGV4T2YiLCJzdWJzdHJpbmciLCJzcGxpdCIsIm4iLCJzdWJzdHIiLCJhbGxvd2VkSW5TdXBlciIsImJ1aWxkVHJlZSIsImtpbmQiLCJzdGFjayIsImN1c3RvbVRhZ3MiLCJ0YWlsIiwiaW5zdHJ1Y3Rpb25zIiwib3BlbmVyIiwic2hpZnQiLCJFcnJvciIsImlzT3BlbmVyIiwibm9kZXMiLCJwb3AiLCJpc0Nsb3NlciIsImVuZCIsImxhc3QiLCJvIiwib3BlbiIsImMiLCJzdHJpbmdpZnlQYXJ0aWFscyIsImNvZGVPYmoiLCJwYXJ0aWFscyIsImtleSIsImVzYyIsIm5hbWUiLCJqb2luIiwib2JqIiwiaXRlbXMiLCJzdHJpbmdpZnlTdWJzdGl0dXRpb25zIiwic3VicyIsInN0cmluZ2lmeSIsIm9wdGlvbnMiLCJ3cmFwTWFpbiIsImNvZGUiLCJzZXJpYWxObyIsImNob29zZU1ldGhvZCIsImNyZWF0ZVBhcnRpYWwiLCJub2RlIiwiY29udGV4dCIsInN5bSIsInByZWZpeCIsInRyaXBsZVN0YWNoZSIsIndyaXRlIiwiZ2VuZXJhdGUiLCJ0cmVlIiwid2FsayIsImFzU3RyaW5nIiwidGhpcyIsIm1ha2VUZW1wbGF0ZSIsInRlbXBsYXRlIiwiVGVtcGxhdGUiLCJtYWtlUGFydGlhbHMiLCJGdW5jdGlvbiIsImNvZGVnZW4iLCJjdHgiLCJpblBhcnRpYWwiLCJub2RlbGlzdCIsImZ1bmMiLCJwYXJzZSIsInNlY3Rpb25UYWdzIiwiY2FjaGUiLCJjYWNoZUtleSIsImRpc2FibGVMYW1iZGEiLCJtb2RlbEdldCIsImNvbXBpbGUiLCJpbnN0YW5jZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJmaW5kSW5TY29wZSIsInNjb3BlIiwiZG9Nb2RlbEdldCIsInZhbCIsInVuZGVmaW5lZCIsImdldCIsImNvbXBpbGVyIiwiciIsInByb3RvdHlwZSIsInYiLCJzdHIiLCJjb2VyY2VUb1N0cmluZyIsImhDaGFycyIsInRlc3QiLCJyQW1wIiwickx0Iiwickd0IiwickFwb3MiLCJ0IiwicmVuZGVyIiwicmkiLCJlcCIsInN5bWJvbCIsInBhcnRpYWwiLCJiYXNlIiwic3RhY2tUZXh0IiwiYWN0aXZlU3ViIiwic3RhY2tTdWJzIiwic3RhY2tQYXJ0aWFscyIsIlBhcnRpYWxUZW1wbGF0ZSIsIlN1YnN0aXR1dGlvbnMiLCJzdWJzVGV4dCIsImNyZWF0ZVNwZWNpYWxpemVkUGFydGlhbCIsInJwIiwicnMiLCJzZWN0aW9uIiwiaXNBcnJheSIsImludmVydGVkIiwic3RhcnQiLCJwYXNzIiwibXMiLCJkIiwicmV0dXJuRm91bmQiLCJmb3VuZCIsIm5hbWVzIiwiZiIsImN4IiwibXYiLCJscyIsIm9sZFRhZ3MiLCJiIiwiY3QiLCJjYWxsIiwiZmwiLCJ0ZXh0U291cmNlIiwicmVzdWx0Iiwic3ViIiwiQXJyYXkiLCJhIiwiT2JqZWN0IiwiSCIsInAiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiRHVyYXRpb25Vbml0IiwiTG9jYWxTdG9yYWdlS2V5IiwiU2Vzc2lvblN0b3JhZ2VLZXkiLCJCb2R5TG9jYXRpb24iLCJDYXRlZ29yeVN0cmluZyIsIkNhdGVnb3J5TnVtYmVyIiwiR3VhcmQiLCJSYXJpdHkiLCJUeXBlIiwiVGFrZW92ZXJBY3Rpb24iLCJMb2NhbFN0b3JhZ2UiLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiYXV0b0V4cGxvcmVMb2NhdGlvbnMiLCJsb2NhdGlvbnMiLCJzZXRJdGVtIiwiZGVidWciLCJlbmFibGVkIiwiZXhwbG9yYXRpb25zIiwibWFya2V0IiwibWluaWdhbWVzIiwid2lzaGxpc3QiLCJzZXR0aW5ncyIsImZhbGxiYWNrIiwiSlNPTiIsInZhbHVlIiwiQ29uc29sZSIsImNvbnNvbGUiLCJtZXNzYWdlIiwib3B0aW9uYWxQYXJhbXMiLCJkZWJ1Z2dpbmciLCJlcnJvciIsImluZm8iLCJsb2ciLCJ3YXJuIiwiU2Vzc2lvblN0b3JhZ2UiLCJzZXNzaW9uU3RvcmFnZSIsImFjdGlvbiIsImV4cGxvcmF0aW9uc0RvbmUiLCJkb25lIiwibWV0YSIsIm1pbmlnYW1lc0RvbmUiLCJzZWxlY3RlZExvY2F0aW9uIiwic2VsZWN0ZWQiLCJ0YWtlb3ZlciIsImxvYWRIZWFkZXJUYWtlb3ZlciIsImhlYWRlclJpZ2h0IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImhlYWRlclRha2VvdmVyIiwicXVlcnlTZWxlY3RvciIsImluc2VydEFkamFjZW50SFRNTCIsImFkZEV2ZW50TGlzdGVuZXIiLCJ0b2dnbGVUYWtlb3ZlciIsInJlbW92ZSIsImdldEl0ZW1EZXRhaWxzIiwibGkiLCJpbm5lclRleHQiLCJzcmMiLCJjdXJyZW50UHJpY2UiLCJkYXRhc2V0IiwiYnV5Tm93UHJpY2UiLCJpY29uIiwiYXN5bmMiLCJjbGljayIsInNlbGVjdG9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJpbnRlcnZhbCIsInNldEludGVydmFsIiwiZWxlbWVudCIsImNsZWFySW50ZXJ2YWwiLCJtb3VzZUV2ZW50IiwiY3JlYXRlRXZlbnQiLCJpbml0RXZlbnQiLCJkaXNwYXRjaEV2ZW50Iiwic2V0VGltZW91dCIsIkFjdGlvbiIsImJ1eSIsIk51bWJlciIsIm1hYW5hIiwiY29uZGl0aW9uIiwiQm9vbGVhbiIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJzdGFydHNXaXRoIiwid2lzaGVkIiwiYW1vdW50IiwiZm9ycGFnZSIsInBhZ2UiLCJyZXN1bHRzIiwic2VhcmNoIiwid2FudGVkIiwiZmlsdGVyIiwicHJpY2UiLCJjdXJyZW50TWFhbmEiLCIkIiwiZmxhdnJOb3RpZiIsImpzb24iLCJpdGVtSWQiLCJwb3N0IiwiaWQiLCJkYXRhIiwiaXRlbWlkIiwic2V0RXJyb3IiLCJ3ZWFyYWJsZWl0ZW1pZCIsImZpbHRlckl0ZW1OYW1lIiwibWFya2V0cGxhY2VTZWFyY2hJdGVtcyIsImlubmVySFRNTCIsInR5cGUiLCJBbGwiLCJib2R5TG9jYXRpb24iLCJjYXRlZ29yeSIsImFsbCIsInJhcml0eSIsImd1YXJkIiwiYW55IiwiZnJvbSIsInRvIiwiYWpheFNlYXJjaCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJtYXAiLCJpdGVtIiwiZmluZEluZGV4IiwiZW50cnkiLCJzbGljZSIsImRhaWx5IiwiZGFpbHlHaWZ0Q29udGFpbmVyIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImRpc3BsYXkiLCJyZXNldFRha2VvdmVyIiwiY2hhbmdlUmVnaW9uIiwibmV3UmVnaW9uSWQiLCJjdXJyZW50UmVnaW9uIiwicGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uIiwidGltZUxlZnRFeHBsb3JhdGlvbiIsIlJlc3VsdCIsIkV4cGxvcmF0aW9uU3RhdHVzIiwiZ2V0RXhwbG9yYXRpb25TdGF0dXMiLCJpZGxlIiwic3RhcnRFeHBsb3JhdGlvbiIsInBlbmRpbmciLCJ3YWl0RXhwbG9yYXRpb24iLCJwZXJmb3JtIiwiZW5kRXhwbG9yYXRpb24iLCJjYXB0dXJlIiwiZW5kQ2FwdHVyZSIsImNsaWNrUmVnaW9uIiwiZGl2IiwicmVnaW9uIiwic2F2ZWQiLCJyZWxvYWQiLCJBdWRpbyIsInBsYXkiLCJlIiwiZ2V0Q3VycmVudFNlYXNvbiIsImNsYXNzTGlzdCIsImZpbmQiLCJnZXRMb3dlc3RFbmVyZ3lMb2NhdGlvbiIsInJlZHVjZSIsImxvd2VzdCIsInBsYWNlIiwiZW5lcmd5UmVxdWlyZWQiLCJnZXRTZWxlY3RlZExvY2F0aW9uIiwic2VsZWN0TG9jYXRpb24iLCJhZmZvcmRhYmxlIiwicGV0RW5lcmd5IiwibWluaW11bUVuZXJneSIsIm5vdERlYWRFbmQiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJzYW1lRW5lcmd5Iiwic2Vhc29uIiwiY2xpY2tTZWFzb24iLCJleHBsb3JpbmciLCJjbGlja0xvY2F0aW9uIiwiY2xpY2tFeHBsb3JlIiwic2Vjb25kIiwidGltZVRvRXhwbG9yZSIsIm1pbnV0ZSIsImV4cGxvcmF0aW9uUmVzdWx0cyIsInN1Y2Nlc3MiLCJjYXB0dXJlRW5kIiwiZ2xvYmFscyIsImNlaWwiLCJmbGFwcHkiLCJzY29yZU1pbiIsInNjb3JlTWF4IiwiZGVsYXlNaW4iLCJkZWxheU1heCIsImJ1dHRvblNlbGVjdG9yIiwiaGF0Y2hsaW5ncyIsInBlZ2dsZSIsIm1pbmlnYW1lIiwiYnV0dG9ucyIsImJ1dHRvbiIsImFkZCIsInJlamVjdCIsIlJlY2FwdGNoYSIsImV4ZWN1dGUiLCJzdGFydEdhbWUiLCJ0aGVuIiwiY2F0Y2giLCJnYW1lVG9rZW4iLCJzY29yZSIsInJhbmRvbUludCIsImVuY190b2tlbiIsInhvciIsInRtcCIsImZyb21DaGFyQ29kZSIsImNoYXJDb2RlQXQiLCJlbmNvZGVVUklDb21wb25lbnQiLCJ4b3JFbmNvZGUiLCJnZXRQcml6ZXMiLCJnYW1lIiwicmVjYXB0Y2hhVG9rZW4iLCJzYXZlU2NvcmUiLCJzZW5kIiwidG9Mb3dlckNhc2UiLCJtaW4iLCJtYXgiLCJhamF4IiwidXJsIiwiZGF0YVR5cGUiLCJmYWlsIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwibG9hZFRha2VvdmVyIiwiYWN0aW9ucyIsImNoYW5nZUFjdGlvbiIsInBsYXlpbmciLCJvcGVuTWluaWdhbWUiLCJwbGF5UGVnZ2xlIiwicGxheUZsYXBweSIsInBsYXlIYXRjaGxpbmdzIiwid2FpdCIsImV4cG9ydE91dGZpdCIsImF2YXRhciIsIlNhY2hhIiwiQXZhdGFyIiwiYXZhdGFycyIsIm91dGZpdCIsImNoaWxkcmVuIiwiY2hpbGQiLCJfaWQiLCJncm91cCIsIl9ncm91cCIsIl9uYW1lIiwiaW1hZ2UiLCJfaW1hZ2UiLCJfdHlwZSIsImNhdGVnb3J5SWQiLCJfY2F0ZWdvcnlJZCIsImhpZGRlbkNhdGVnb3JpZXMiLCJ2YWx1ZXMiLCJfaGlkZGVuQ2F0ZWdvcmllcyIsImFuaW1hdGlvbkRhdGEiLCJfYW5pbWF0aW9uRGF0YSIsImxvY2tlZCIsIl9sb2NrZWQiLCJnZXRJdGVtc1RvU2F2ZSIsImhyZWYiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiZXhwb3J0UHJldmlldyIsImltcG9ydE91dGZpdCIsImlucHV0IiwiZXZlbnQiLCJ0YXJnZXQiLCJmaWxlcyIsImZpbGUiLCJjYXRlZ29yaWVzIiwiU2V0IiwiY2xvdGhpbmciLCJjYXRlZ29yeUNvbnRhaW5lciIsImhhc0NsYXNzIiwidmlldyIsImhpZGUiLCJhcHBlbmRUbyIsImFsd2F5cyIsIm9wZW5DYXRlZ29yeSIsImdyb3VwcyIsIm9wZW5Hcm91cCIsIndvcm5JdGVtcyIsImF2YWlsYWJsZUl0ZW1zIiwiaXRlbVJlbmRlciIsInJlbW92ZUl0ZW1Gcm9tQWxsQXZhdGFycyIsInJlbW92ZUNsYXNzIiwicmVtb3ZlQ2xvdGhlcyIsImFkZEl0ZW1zIiwiaW5pdGlhbGl6ZVNlbGVjdGVkSXRlbXMiLCJpbml0aWFsaXplSGlkZGVuQ2F0ZWdvcmllcyIsImRvd25sb2FkQ2FudmFzIiwiY2FudmFzIiwidG9EYXRhVVJMIiwic3R5bGUiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJyZW1vdmVDaGlsZCIsImRvd25sb2FkRmFjZSIsImRvd25sb2FkR3VhcmRpYW4iLCJnZXROYW1lIiwiZG93bmxvYWRBcHBlYXJhbmNlIiwidGV4dENvbnRlbnQiLCJvYnNlcnZlciIsImxvYWRBcHBlYXJhbmNlIiwiZGlzY29ubmVjdCIsImFwcGVhcmFuY2VJdGVtcyIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJvYnNlcnZlIiwiY2hpbGRMaXN0IiwiYWN0aW9uVGVtcGxhdGUiLCJpbXBvcnRBY3Rpb24iLCJleHBvcnRBY3Rpb24iLCJkb3dubG9hZEFjdGlvbiIsImxvYWRGYXZvcml0ZXNBY3Rpb25zIiwiY2Fyb3VzZWxCZWVtb292QW5ub3lhbmNlcyIsImJhY2tncm91bmRJbWFnZSIsImg0IiwiY2Fyb3VzZWxEb3dubG9hZEZhY2UiLCJjYXJvdXNlbERvd25sb2FkR3VhcmRpYW4iLCJjYXJvdXNlbEVFIiwiR00iLCJzY3JpcHQiLCJ2ZXJzaW9uIiwibmFtZXNwYWNlIiwiZGVzY3JpcHRpb24iLCJjYXJvdXNlbFRha2VvdmVyIiwidGFrZW92ZXJUaXRsZSIsInRha2VvdmVyQW5jaG9yIiwidGFrZW92ZXJINCIsIm1hcmtldE9ic2VydmVyIiwicGV0T2JzZXJ2ZXIiLCJsb2FkV2lzaGxpc3QiLCJfIiwibWFya2V0RW50cnkiLCJhZGRXaXNoaXN0QnV0dG9uIiwiYnV0dG9uc0NvbnRhaW5lciIsImJ1dHRvblRlbXBsYXRlIiwiZmxhdnIiLCJjb250ZW50Iiwic2F2ZSIsImRpYWxvZyIsInByb21wdCIsIm9uQnVpbGQiLCIkY29udGFpbmVyIiwiYWRkQ2xhc3MiLCJhZGRUb1dpc2hsaXN0RmxhdnIiLCJ3aXNobGlzdEVudHJ5IiwibG9hZFBldCIsIm1haW5Db250YWluZXIiLCJhdHRyaWJ1dGVzIiwibG9jYXRpb25JZCIsImdldEF0dHJpYnV0ZSIsImxvYWRQaWN0b01hcCIsImFkZEF1dG9FeHBsb3JlQnV0dG9uIiwibG9hZEV4cGxvcmF0aW9ucyIsImFjdGl2ZSIsInNvbWUiLCJyZWdpb25JZCIsImF1dG9FeHBsb3JlVGVtcGxhdGUiLCJmaWx0ZXJlZExvY2F0aW9ucyIsIm5ld0F1dG9FeHBsb3JlIiwiZ2V0QXV0b0V4cGxvcmVFbnRyeSIsIm5ld0xvY2F0aW9ucyIsImF1dG9FeHBsb3JlIiwibG9hZFBpY3RvTWFwcyIsImRpc2FibGVFeHBsb3JlIiwiZ2V0UmVnaW9uIiwibWFwTG9jYXRpb24iLCJleHBvcnRQcm9maWxlIiwidGl0bGUiLCJrZXlzIiwibG9hZFNldHRpbmdzIiwiYWNjb3VudFJpZ2h0Iiwic2V0dGluZ3NUZW1wbGF0ZSIsInJlbG9hZFNldHRpbmdzIiwiaW1wb3J0U2V0dGluZ3MiLCJleHBvcnRTZXR0aW5ncyIsIm1hcmtldHBsYWNlTWVudSIsInBhZ2VMb2FkIiwid2lzaGxpc3RCdXR0b25UZW1wbGF0ZSIsIndpc2hsaXN0QnV0dG9uIiwiaW5zZXJ0V2lzaGxpc3QiLCJhc3Npc3RhbmNlIiwiZmlsdGVycyIsIndpc2hsaXN0VGVtcGxhdGUiLCJjb250YWluZXIiLCJ3aXNobGlzdENvbnRleHQiLCJ0ciIsInJlc2V0IiwicmVzZXRTdGF0dXMiLCJkZWxldGVCdXR0b24iLCJkZWxldGVJdGVtIiwiZWRpdFByaWNlIiwiY2hhbmdlUHJpY2UiLCJsb2FkVUkiLCJtZW51SW5uZXJSaWdodCIsIm1lbnVUZW1wbGF0ZSIsImNsYXNzIiwibG9hZE1lbnUiLCJjYXJvdXNlbElubmVyIiwiY29udGV4dHMiLCJiYW5uZXIiLCJjYXJvdXNlbCIsImNvbnRhaW5zIiwibG9hZENhcm91c2VsIiwiaG9tZUNvbnRlbnRTbWFsbHMiLCJzbWFsbFRlbXBsYXRlIiwibG9hZEhvbWVDb250ZW50IiwicHJvZmlsZUNvbnRhY3RBY3Rpb25zIiwicHJvZmlsZUFjdGlvbkV4cG9ydCIsImFjdGlvbkRlc2NyaXB0aW9uIiwibG9hZFByb2ZpbGUiLCJzZWFyY2hJdGVtcyIsImxvYWRNYXJrZXQiLCJ3aW5kb3ciXSwibWFwcGluZ3MiOiIwQkFlQSxTQUFXQSxHQUdULElBQUlDLEVBQWdCLEtBQ2hCQyxFQUFRLE1BQ1JDLEVBQVksTUFDWkMsRUFBTSxNQUNOQyxFQUFTLE1BQ1RDLEVBQVcsU0FDWEMsRUFBZ0IsU0ErSXBCLFNBQVNDLEVBQUtDLEdBQ1osT0FBSUEsRUFBRUQsS0FDR0MsRUFBRUQsT0FHSkMsRUFBRUMsUUFBUSxhQUFjLElBR2pDLFNBQVNDLEVBQVVDLEVBQUtDLEVBQU1DLEdBQzVCLEdBQUlELEVBQUtFLE9BQU9ELElBQVVGLEVBQUlHLE9BQU8sR0FDbkMsT0FBTyxFQUdULElBQUssSUFBSUMsRUFBSSxFQUFHQyxFQUFJTCxFQUFJTSxPQUFRRixFQUFJQyxFQUFHRCxJQUNyQyxHQUFJSCxFQUFLRSxPQUFPRCxFQUFRRSxJQUFNSixFQUFJRyxPQUFPQyxHQUN2QyxPQUFPLEVBSVgsT0FBTyxFQWhLVGhCLEVBQU1tQixLQUFPLENBQ1gsSUFBSyxFQUFHLElBQUssRUFBRyxJQUFLLEVBQUcsRUFBSyxFQUM3QixJQUFLLEVBQUcsSUFBSyxFQUFHLElBQUssRUFBRyxJQUFLLEVBQUcsR0FBTSxFQUN0QyxJQUFLLEdBQUksSUFBSyxHQUFJLEdBQU0sSUFHMUJuQixFQUFNb0IsS0FBTyxTQUFjUCxFQUFNUSxHQUMvQixJQWdJeUJDLEVBaElyQkMsRUFBTVYsRUFBS0ssT0FJWE0sRUFIVSxFQUlWQyxFQUFVLEtBQ1ZiLEVBQU0sS0FDTmMsRUFBTSxHQUNOQyxFQUFTLEdBQ1RDLEdBQVUsRUFDVlos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Qiw2QkFFRzRXLElBRUxuRixHQUFpQixJQUFJdkIsaUJBQWlCeUIsSUFDdENGLEdBQWV0QixRQUFReUcsRUFBYSxDQUNsQ3hHLFdBQVcsSUFHYnVCLE1LRUFrRixHQUNBLEtBQ0FsWCxJQUVBK0IsWUFBVyxLQUNUN0IsU0FBU0csY0FBZ0Msd0JBQXdCYyxVQUNoRWhFLEVBQWFrTCxRQUdsQjhPLE9BQU81VyxpQkFBaUIsUUFBUSxLQUM5QkwsU0FBU0csY0FBZ0Msd0JBQXdCYyxXQUduRSxJQUFJb1Asa0JBMUJKLFdBQ0V3RixLQUNBekssT0F3QnlCa0YsUUFBY3RRLFNBQVNDLGVBQWUsYUFBYyxDQUM3RXNRLFdBQVcsSUFHYnNGLEtBQ0FqWCxRQUFRTSxJQUFJLEdBQUdpUyxHQUFHbFMsS0FBS21TLE9BQU9sYixTQUFTaWIsR0FBR2xTLEtBQUttUyxPQUFPQyxtQkFDdERqRyxLIiwiZmlsZSI6ImVsZGFyeWEtZW5oYW5jZW1lbnRzLnVzZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogIENvcHlyaWdodCAyMDExIFR3aXR0ZXIsIEluYy5cbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbihmdW5jdGlvbiAoSG9nYW4pIHtcbiAgLy8gU2V0dXAgcmVnZXggIGFzc2lnbm1lbnRzXG4gIC8vIHJlbW92ZSB3aGl0ZXNwYWNlIGFjY29yZGluZyB0byBNdXN0YWNoZSBzcGVjXG4gIHZhciBySXNXaGl0ZXNwYWNlID0gL1xcUy8sXG4gICAgICByUXVvdCA9IC9cXFwiL2csXG4gICAgICByTmV3bGluZSA9ICAvXFxuL2csXG4gICAgICByQ3IgPSAvXFxyL2csXG4gICAgICByU2xhc2ggPSAvXFxcXC9nLFxuICAgICAgckxpbmVTZXAgPSAvXFx1MjAyOC8sXG4gICAgICByUGFyYWdyYXBoU2VwID0gL1xcdTIwMjkvO1xuXG4gIEhvZ2FuLnRhZ3MgPSB7XG4gICAgJyMnOiAxLCAnXic6IDIsICc8JzogMywgJyQnOiA0LFxuICAgICcvJzogNSwgJyEnOiA2LCAnPic6IDcsICc9JzogOCwgJ192JzogOSxcbiAgICAneyc6IDEwLCAnJic6IDExLCAnX3QnOiAxMlxuICB9O1xuXG4gIEhvZ2FuLnNjYW4gPSBmdW5jdGlvbiBzY2FuKHRleHQsIGRlbGltaXRlcnMpIHtcbiAgICB2YXIgbGVuID0gdGV4dC5sZW5ndGgsXG4gICAgICAgIElOX1RFWFQgPSAwLFxuICAgICAgICBJTl9UQUdfVFlQRSA9IDEsXG4gICAgICAgIElOX1RBRyA9IDIsXG4gICAgICAgIHN0YXRlID0gSU5fVEVYVCxcbiAgICAgICAgdGFnVHlwZSA9IG51bGwsXG4gICAgICAgIHRhZyA9IG51bGwsXG4gICAgICAgIGJ1ZiA9ICcnLFxuICAgICAgICB0b2tlbnMgPSBbXSxcbiAgICAgICAgc2VlblRhZyA9IGZhbHNlLFxuICAgICAgICBpID0gMCxcbiAgICAgICAgbGluZVN0YXJ0ID0gMCxcbiAgICAgICAgb3RhZyA9ICd7eycsXG4gICAgICAgIGN0YWcgPSAnfX0nO1xuXG4gICAgZnVuY3Rpb24gYWRkQnVmKCkge1xuICAgICAgaWYgKGJ1Zi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRva2Vucy5wdXNoKHt0YWc6ICdfdCcsIHRleHQ6IG5ldyBTdHJpbmcoYnVmKX0pO1xuICAgICAgICBidWYgPSAnJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaW5lSXNXaGl0ZXNwYWNlKCkge1xuICAgICAgdmFyIGlzQWxsV2hpdGVzcGFjZSA9IHRydWU7XG4gICAgICBmb3IgKHZhciBqID0gbGluZVN0YXJ0OyBqIDwgdG9rZW5zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlzQWxsV2hpdGVzcGFjZSA9XG4gICAgICAgICAgKEhvZ2FuLnRhZ3NbdG9rZW5zW2pdLnRhZ10gPCBIb2dhbi50YWdzWydfdiddKSB8fFxuICAgICAgICAgICh0b2tlbnNbal0udGFnID09ICdfdCcgJiYgdG9rZW5zW2pdLnRleHQubWF0Y2gocklzV2hpdGVzcGFjZSkgPT09IG51bGwpO1xuICAgICAgICBpZiAoIWlzQWxsV2hpdGVzcGFjZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXNBbGxXaGl0ZXNwYWNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbHRlckxpbmUoaGF2ZVNlZW5UYWcsIG5vTmV3TGluZSkge1xuICAgICAgYWRkQnVmKCk7XG5cbiAgICAgIGlmIChoYXZlU2VlblRhZyAmJiBsaW5lSXNXaGl0ZXNwYWNlKCkpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IGxpbmVTdGFydCwgbmV4dDsgaiA8IHRva2Vucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGlmICh0b2tlbnNbal0udGV4dCkge1xuICAgICAgICAgICAgaWYgKChuZXh0ID0gdG9rZW5zW2orMV0pICYmIG5leHQudGFnID09ICc+Jykge1xuICAgICAgICAgICAgICAvLyBzZXQgaW5kZW50IHRvIHRva2VuIHZhbHVlXG4gICAgICAgICAgICAgIG5leHQuaW5kZW50ID0gdG9rZW5zW2pdLnRleHQudG9TdHJpbmcoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG9rZW5zLnNwbGljZShqLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIW5vTmV3TGluZSkge1xuICAgICAgICB0b2tlbnMucHVzaCh7dGFnOidcXG4nfSk7XG4gICAgICB9XG5cbiAgICAgIHNlZW5UYWcgPSBmYWxzZTtcbiAgICAgIGxpbmVTdGFydCA9IHRva2Vucy5sZW5ndGg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hhbmdlRGVsaW1pdGVycyh0ZXh0LCBpbmRleCkge1xuICAgICAgdmFyIGNsb3NlID0gJz0nICsgY3RhZyxcbiAgICAgICAgICBjbG9zZUluZGV4ID0gdGV4dC5pbmRleE9mKGNsb3NlLCBpbmRleCksXG4gICAgICAgICAgZGVsaW1pdGVycyA9IHRyaW0oXG4gICAgICAgICAgICB0ZXh0LnN1YnN0cmluZyh0ZXh0LmluZGV4T2YoJz0nLCBpbmRleCkgKyAxLCBjbG9zZUluZGV4KVxuICAgICAgICAgICkuc3BsaXQoJyAnKTtcblxuICAgICAgb3RhZyA9IGRlbGltaXRlcnNbMF07XG4gICAgICBjdGFnID0gZGVsaW1pdGVyc1tkZWxpbWl0ZXJzLmxlbmd0aCAtIDFdO1xuXG4gICAgICByZXR1cm4gY2xvc2VJbmRleCArIGNsb3NlLmxlbmd0aCAtIDE7XG4gICAgfVxuXG4gICAgaWYgKGRlbGltaXRlcnMpIHtcbiAgICAgIGRlbGltaXRlcnMgPSBkZWxpbWl0ZXJzLnNwbGl0KCcgJyk7XG4gICAgICBvdGFnID0gZGVsaW1pdGVyc1swXTtcbiAgICAgIGN0YWcgPSBkZWxpbWl0ZXJzWzFdO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKHN0YXRlID09IElOX1RFWFQpIHtcbiAgICAgICAgaWYgKHRhZ0NoYW5nZShvdGFnLCB0ZXh0LCBpKSkge1xuICAgICAgICAgIC0taTtcbiAgICAgICAgICBhZGRCdWYoKTtcbiAgICAgICAgICBzdGF0ZSA9IElOX1RBR19UWVBFO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0ZXh0LmNoYXJBdChpKSA9PSAnXFxuJykge1xuICAgICAgICAgICAgZmlsdGVyTGluZShzZWVuVGFnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmICs9IHRleHQuY2hhckF0KGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBJTl9UQUdfVFlQRSkge1xuICAgICAgICBpICs9IG90YWcubGVuZ3RoIC0gMTtcbiAgICAgICAgdGFnID0gSG9nYW4udGFnc1t0ZXh0LmNoYXJBdChpICsgMSldO1xuICAgICAgICB0YWdUeXBlID0gdGFnID8gdGV4dC5jaGFyQXQoaSArIDEpIDogJ192JztcbiAgICAgICAgaWYgKHRhZ1R5cGUgPT0gJz0nKSB7XG4gICAgICAgICAgaSA9IGNoYW5nZURlbGltaXRlcnModGV4dCwgaSk7XG4gICAgICAgICAgc3RhdGUgPSBJTl9URVhUO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0YWcpIHtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RhdGUgPSBJTl9UQUc7XG4gICAgICAgIH1cbiAgICAgICAgc2VlblRhZyA9IGk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFnQ2hhbmdlKGN0YWcsIHRleHQsIGkpKSB7XG4gICAgICAgICAgdG9rZW5zLnB1c2goe3RhZzogdGFnVHlwZSwgbjogdHJpbShidWYpLCBvdGFnOiBvdGFnLCBjdGFnOiBjdGFnLFxuICAgICAgICAgICAgICAgICAgICAgICBpOiAodGFnVHlwZSA9PSAnLycpID8gc2VlblRhZyAtIG90YWcubGVuZ3RoIDogaSArIGN0YWcubGVuZ3RofSk7XG4gICAgICAgICAgYnVmID0gJyc7XG4gICAgICAgICAgaSArPSBjdGFnLmxlbmd0aCAtIDE7XG4gICAgICAgICAgc3RhdGUgPSBJTl9URVhUO1xuICAgICAgICAgIGlmICh0YWdUeXBlID09ICd7Jykge1xuICAgICAgICAgICAgaWYgKGN0YWcgPT0gJ319Jykge1xuICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjbGVhblRyaXBsZVN0YWNoZSh0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVmICs9IHRleHQuY2hhckF0KGkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmlsdGVyTGluZShzZWVuVGFnLCB0cnVlKTtcblxuICAgIHJldHVybiB0b2tlbnM7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhblRyaXBsZVN0YWNoZSh0b2tlbikge1xuICAgIGlmICh0b2tlbi5uLnN1YnN0cih0b2tlbi5uLmxlbmd0aCAtIDEpID09PSAnfScpIHtcbiAgICAgIHRva2VuLm4gPSB0b2tlbi5uLnN1YnN0cmluZygwLCB0b2tlbi5uLmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRyaW0ocykge1xuICAgIGlmIChzLnRyaW0pIHtcbiAgICAgIHJldHVybiBzLnRyaW0oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcy5yZXBsYWNlKC9eXFxzKnxcXHMqJC9nLCAnJyk7XG4gIH1cblxuICBmdW5jdGlvbiB0YWdDaGFuZ2UodGFnLCB0ZXh0LCBpbmRleCkge1xuICAgIGlmICh0ZXh0LmNoYXJBdChpbmRleCkgIT0gdGFnLmNoYXJBdCgwKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAxLCBsID0gdGFnLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKHRleHQuY2hhckF0KGluZGV4ICsgaSkgIT0gdGFnLmNoYXJBdChpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyB0aGUgdGFncyBhbGxvd2VkIGluc2lkZSBzdXBlciB0ZW1wbGF0ZXNcbiAgdmFyIGFsbG93ZWRJblN1cGVyID0geydfdCc6IHRydWUsICdcXG4nOiB0cnVlLCAnJCc6IHRydWUsICcvJzogdHJ1ZX07XG5cbiAgZnVuY3Rpb24gYnVpbGRUcmVlKHRva2Vucywga2luZCwgc3RhY2ssIGN1c3RvbVRhZ3MpIHtcbiAgICB2YXIgaW5zdHJ1Y3Rpb25zID0gW10sXG4gICAgICAgIG9wZW5lciA9IG51bGwsXG4gICAgICAgIHRhaWwgPSBudWxsLFxuICAgICAgICB0b2tlbiA9IG51bGw7XG5cbiAgICB0YWlsID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG5cbiAgICB3aGlsZSAodG9rZW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRva2VuID0gdG9rZW5zLnNoaWZ0KCk7XG5cbiAgICAgIGlmICh0YWlsICYmIHRhaWwudGFnID09ICc8JyAmJiAhKHRva2VuLnRhZyBpbiBhbGxvd2VkSW5TdXBlcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGNvbnRlbnQgaW4gPCBzdXBlciB0YWcuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChIb2dhbi50YWdzW3Rva2VuLnRhZ10gPD0gSG9nYW4udGFnc1snJCddIHx8IGlzT3BlbmVyKHRva2VuLCBjdXN0b21UYWdzKSkge1xuICAgICAgICBzdGFjay5wdXNoKHRva2VuKTtcbiAgICAgICAgdG9rZW4ubm9kZXMgPSBidWlsZFRyZWUodG9rZW5zLCB0b2tlbi50YWcsIHN0YWNrLCBjdXN0b21UYWdzKTtcbiAgICAgIH0gZWxzZSBpZiAodG9rZW4udGFnID09ICcvJykge1xuICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDbG9zaW5nIHRhZyB3aXRob3V0IG9wZW5lcjogLycgKyB0b2tlbi5uKTtcbiAgICAgICAgfVxuICAgICAgICBvcGVuZXIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgaWYgKHRva2VuLm4gIT0gb3BlbmVyLm4gJiYgIWlzQ2xvc2VyKHRva2VuLm4sIG9wZW5lci5uLCBjdXN0b21UYWdzKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTmVzdGluZyBlcnJvcjogJyArIG9wZW5lci5uICsgJyB2cy4gJyArIHRva2VuLm4pO1xuICAgICAgICB9XG4gICAgICAgIG9wZW5lci5lbmQgPSB0b2tlbi5pO1xuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25zO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi50YWcgPT0gJ1xcbicpIHtcbiAgICAgICAgdG9rZW4ubGFzdCA9ICh0b2tlbnMubGVuZ3RoID09IDApIHx8ICh0b2tlbnNbMF0udGFnID09ICdcXG4nKTtcbiAgICAgIH1cblxuICAgICAgaW5zdHJ1Y3Rpb25zLnB1c2godG9rZW4pO1xuICAgIH1cblxuICAgIGlmIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgY2xvc2luZyB0YWc6ICcgKyBzdGFjay5wb3AoKS5uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zdHJ1Y3Rpb25zO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNPcGVuZXIodG9rZW4sIHRhZ3MpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRhZ3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAodGFnc1tpXS5vID09IHRva2VuLm4pIHtcbiAgICAgICAgdG9rZW4udGFnID0gJyMnO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc0Nsb3NlcihjbG9zZSwgb3BlbiwgdGFncykge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGFncy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmICh0YWdzW2ldLmMgPT0gY2xvc2UgJiYgdGFnc1tpXS5vID09IG9wZW4pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RyaW5naWZ5U3Vic3RpdHV0aW9ucyhvYmopIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpdGVtcy5wdXNoKCdcIicgKyBlc2Moa2V5KSArICdcIjogZnVuY3Rpb24oYyxwLHQsaSkgeycgKyBvYmpba2V5XSArICd9Jyk7XG4gICAgfVxuICAgIHJldHVybiBcInsgXCIgKyBpdGVtcy5qb2luKFwiLFwiKSArIFwiIH1cIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0cmluZ2lmeVBhcnRpYWxzKGNvZGVPYmopIHtcbiAgICB2YXIgcGFydGlhbHMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gY29kZU9iai5wYXJ0aWFscykge1xuICAgICAgcGFydGlhbHMucHVzaCgnXCInICsgZXNjKGtleSkgKyAnXCI6e25hbWU6XCInICsgZXNjKGNvZGVPYmoucGFydGlhbHNba2V5XS5uYW1lKSArICdcIiwgJyArIHN0cmluZ2lmeVBhcnRpYWxzKGNvZGVPYmoucGFydGlhbHNba2V5XSkgKyBcIn1cIik7XG4gICAgfVxuICAgIHJldHVybiBcInBhcnRpYWxzOiB7XCIgKyBwYXJ0aWFscy5qb2luKFwiLFwiKSArIFwifSwgc3ViczogXCIgKyBzdHJpbmdpZnlTdWJzdGl0dXRpb25zKGNvZGVPYmouc3Vicyk7XG4gIH1cblxuICBIb2dhbi5zdHJpbmdpZnkgPSBmdW5jdGlvbihjb2RlT2JqLCB0ZXh0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFwie2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyBcIiArIEhvZ2FuLndyYXBNYWluKGNvZGVPYmouY29kZSkgKyBcIiB9LFwiICsgc3RyaW5naWZ5UGFydGlhbHMoY29kZU9iaikgKyAgXCJ9XCI7XG4gIH1cblxuICB2YXIgc2VyaWFsTm8gPSAwO1xuICBIb2dhbi5nZW5lcmF0ZSA9IGZ1bmN0aW9uKHRyZWUsIHRleHQsIG9wdGlvbnMpIHtcbiAgICBzZXJpYWxObyA9IDA7XG4gICAgdmFyIGNvbnRleHQgPSB7IGNvZGU6ICcnLCBzdWJzOiB7fSwgcGFydGlhbHM6IHt9IH07XG4gICAgSG9nYW4ud2Fsayh0cmVlLCBjb250ZXh0KTtcblxuICAgIGlmIChvcHRpb25zLmFzU3RyaW5nKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHJpbmdpZnkoY29udGV4dCwgdGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubWFrZVRlbXBsYXRlKGNvbnRleHQsIHRleHQsIG9wdGlvbnMpO1xuICB9XG5cbiAgSG9nYW4ud3JhcE1haW4gPSBmdW5jdGlvbihjb2RlKSB7XG4gICAgcmV0dXJuICd2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpOycgKyBjb2RlICsgJ3JldHVybiB0LmZsKCk7JztcbiAgfVxuXG4gIEhvZ2FuLnRlbXBsYXRlID0gSG9nYW4uVGVtcGxhdGU7XG5cbiAgSG9nYW4ubWFrZVRlbXBsYXRlID0gZnVuY3Rpb24oY29kZU9iaiwgdGV4dCwgb3B0aW9ucykge1xuICAgIHZhciB0ZW1wbGF0ZSA9IHRoaXMubWFrZVBhcnRpYWxzKGNvZGVPYmopO1xuICAgIHRlbXBsYXRlLmNvZGUgPSBuZXcgRnVuY3Rpb24oJ2MnLCAncCcsICdpJywgdGhpcy53cmFwTWFpbihjb2RlT2JqLmNvZGUpKTtcbiAgICByZXR1cm4gbmV3IHRoaXMudGVtcGxhdGUodGVtcGxhdGUsIHRleHQsIHRoaXMsIG9wdGlvbnMpO1xuICB9XG5cbiAgSG9nYW4ubWFrZVBhcnRpYWxzID0gZnVuY3Rpb24oY29kZU9iaikge1xuICAgIHZhciBrZXksIHRlbXBsYXRlID0ge3N1YnM6IHt9LCBwYXJ0aWFsczogY29kZU9iai5wYXJ0aWFscywgbmFtZTogY29kZU9iai5uYW1lfTtcbiAgICBmb3IgKGtleSBpbiB0ZW1wbGF0ZS5wYXJ0aWFscykge1xuICAgICAgdGVtcGxhdGUucGFydGlhbHNba2V5XSA9IHRoaXMubWFrZVBhcnRpYWxzKHRlbXBsYXRlLnBhcnRpYWxzW2tleV0pO1xuICAgIH1cbiAgICBmb3IgKGtleSBpbiBjb2RlT2JqLnN1YnMpIHtcbiAgICAgIHRlbXBsYXRlLnN1YnNba2V5XSA9IG5ldyBGdW5jdGlvbignYycsICdwJywgJ3QnLCAnaScsIGNvZGVPYmouc3Vic1trZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gZXNjKHMpIHtcbiAgICByZXR1cm4gcy5yZXBsYWNlKHJTbGFzaCwgJ1xcXFxcXFxcJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHJRdW90LCAnXFxcXFxcXCInKVxuICAgICAgICAgICAgLnJlcGxhY2Uock5ld2xpbmUsICdcXFxcbicpXG4gICAgICAgICAgICAucmVwbGFjZShyQ3IsICdcXFxccicpXG4gICAgICAgICAgICAucmVwbGFjZShyTGluZVNlcCwgJ1xcXFx1MjAyOCcpXG4gICAgICAgICAgICAucmVwbGFjZShyUGFyYWdyYXBoU2VwLCAnXFxcXHUyMDI5Jyk7XG4gIH1cblxuICBmdW5jdGlvbiBjaG9vc2VNZXRob2Qocykge1xuICAgIHJldHVybiAofnMuaW5kZXhPZignLicpKSA/ICdkJyA6ICdmJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVBhcnRpYWwobm9kZSwgY29udGV4dCkge1xuICAgIHZhciBwcmVmaXggPSBcIjxcIiArIChjb250ZXh0LnByZWZpeCB8fCBcIlwiKTtcbiAgICB2YXIgc3ltID0gcHJlZml4ICsgbm9kZS5uICsgc2VyaWFsTm8rKztcbiAgICBjb250ZXh0LnBhcnRpYWxzW3N5bV0gPSB7bmFtZTogbm9kZS5uLCBwYXJ0aWFsczoge319O1xuICAgIGNvbnRleHQuY29kZSArPSAndC5iKHQucnAoXCInICsgIGVzYyhzeW0pICsgJ1wiLGMscCxcIicgKyAobm9kZS5pbmRlbnQgfHwgJycpICsgJ1wiKSk7JztcbiAgICByZXR1cm4gc3ltO1xuICB9XG5cbiAgSG9nYW4uY29kZWdlbiA9IHtcbiAgICAnIyc6IGZ1bmN0aW9uKG5vZGUsIGNvbnRleHQpIHtcbiAgICAgIGNvbnRleHQuY29kZSArPSAnaWYodC5zKHQuJyArIGNob29zZU1ldGhvZChub2RlLm4pICsgJyhcIicgKyBlc2Mobm9kZS5uKSArICdcIixjLHAsMSksJyArXG4gICAgICAgICAgICAgICAgICAgICAgJ2MscCwwLCcgKyBub2RlLmkgKyAnLCcgKyBub2RlLmVuZCArICcsXCInICsgbm9kZS5vdGFnICsgXCIgXCIgKyBub2RlLmN0YWcgKyAnXCIpKXsnICtcbiAgICAgICAgICAgICAgICAgICAgICAndC5ycyhjLHAsJyArICdmdW5jdGlvbihjLHAsdCl7JztcbiAgICAgIEhvZ2FuLndhbGsobm9kZS5ub2RlcywgY29udGV4dCk7XG4gICAgICBjb250ZXh0LmNvZGUgKz0gJ30pO2MucG9wKCk7fSc7XG4gICAgfSxcblxuICAgICdeJzogZnVuY3Rpb24obm9kZSwgY29udGV4dCkge1xuICAgICAgY29udGV4dC5jb2RlICs9ICdpZighdC5zKHQuJyArIGNob29zZU1ldGhvZChub2RlLm4pICsgJyhcIicgKyBlc2Mobm9kZS5uKSArICdcIixjLHAsMSksYyxwLDEsMCwwLFwiXCIpKXsnO1xuICAgICAgSG9nYW4ud2Fsayhub2RlLm5vZGVzLCBjb250ZXh0KTtcbiAgICAgIGNvbnRleHQuY29kZSArPSAnfTsnO1xuICAgIH0sXG5cbiAgICAnPic6IGNyZWF0ZVBhcnRpYWwsXG4gICAgJzwnOiBmdW5jdGlvbihub2RlLCBjb250ZXh0KSB7XG4gICAgICB2YXIgY3R4ID0ge3BhcnRpYWxzOiB7fSwgY29kZTogJycsIHN1YnM6IHt9LCBpblBhcnRpYWw6IHRydWV9O1xuICAgICAgSG9nYW4ud2Fsayhub2RlLm5vZGVzLCBjdHgpO1xuICAgICAgdmFyIHRlbXBsYXRlID0gY29udGV4dC5wYXJ0aWFsc1tjcmVhdGVQYXJ0aWFsKG5vZGUsIGNvbnRleHQpXTtcbiAgICAgIHRlbXBsYXRlLnN1YnMgPSBjdHguc3VicztcbiAgICAgIHRlbXBsYXRlLnBhcnRpYWxzID0gY3R4LnBhcnRpYWxzO1xuICAgIH0sXG5cbiAgICAnJCc6IGZ1bmN0aW9uKG5vZGUsIGNvbnRleHQpIHtcbiAgICAgIHZhciBjdHggPSB7c3Viczoge30sIGNvZGU6ICcnLCBwYXJ0aWFsczogY29udGV4dC5wYXJ0aWFscywgcHJlZml4OiBub2RlLm59O1xuICAgICAgSG9nYW4ud2Fsayhub2RlLm5vZGVzLCBjdHgpO1xuICAgICAgY29udGV4dC5zdWJzW25vZGUubl0gPSBjdHguY29kZTtcbiAgICAgIGlmICghY29udGV4dC5pblBhcnRpYWwpIHtcbiAgICAgICAgY29udGV4dC5jb2RlICs9ICd0LnN1YihcIicgKyBlc2Mobm9kZS5uKSArICdcIixjLHAsaSk7JztcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgJ1xcbic6IGZ1bmN0aW9uKG5vZGUsIGNvbnRleHQpIHtcbiAgICAgIGNvbnRleHQuY29kZSArPSB3cml0ZSgnXCJcXFxcblwiJyArIChub2RlLmxhc3QgPyAnJyA6ICcgKyBpJykpO1xuICAgIH0sXG5cbiAgICAnX3YnOiBmdW5jdGlvbihub2RlLCBjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LmNvZGUgKz0gJ3QuYih0LnYodC4nICsgY2hvb3NlTWV0aG9kKG5vZGUubikgKyAnKFwiJyArIGVzYyhub2RlLm4pICsgJ1wiLGMscCwwKSkpOyc7XG4gICAgfSxcblxuICAgICdfdCc6IGZ1bmN0aW9uKG5vZGUsIGNvbnRleHQpIHtcbiAgICAgIGNvbnRleHQuY29kZSArPSB3cml0ZSgnXCInICsgZXNjKG5vZGUudGV4dCkgKyAnXCInKTtcbiAgICB9LFxuXG4gICAgJ3snOiB0cmlwbGVTdGFjaGUsXG5cbiAgICAnJic6IHRyaXBsZVN0YWNoZVxuICB9XG5cbiAgZnVuY3Rpb24gdHJpcGxlU3RhY2hlKG5vZGUsIGNvbnRleHQpIHtcbiAgICBjb250ZXh0LmNvZGUgKz0gJ3QuYih0LnQodC4nICsgY2hvb3NlTWV0aG9kKG5vZGUubikgKyAnKFwiJyArIGVzYyhub2RlLm4pICsgJ1wiLGMscCwwKSkpOyc7XG4gIH1cblxuICBmdW5jdGlvbiB3cml0ZShzKSB7XG4gICAgcmV0dXJuICd0LmIoJyArIHMgKyAnKTsnO1xuICB9XG5cbiAgSG9nYW4ud2FsayA9IGZ1bmN0aW9uKG5vZGVsaXN0LCBjb250ZXh0KSB7XG4gICAgdmFyIGZ1bmM7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBub2RlbGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZ1bmMgPSBIb2dhbi5jb2RlZ2VuW25vZGVsaXN0W2ldLnRhZ107XG4gICAgICBmdW5jICYmIGZ1bmMobm9kZWxpc3RbaV0sIGNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxuXG4gIEhvZ2FuLnBhcnNlID0gZnVuY3Rpb24odG9rZW5zLCB0ZXh0LCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgcmV0dXJuIGJ1aWxkVHJlZSh0b2tlbnMsICcnLCBbXSwgb3B0aW9ucy5zZWN0aW9uVGFncyB8fCBbXSk7XG4gIH1cblxuICBIb2dhbi5jYWNoZSA9IHt9O1xuXG4gIEhvZ2FuLmNhY2hlS2V5ID0gZnVuY3Rpb24odGV4dCwgb3B0aW9ucykge1xuICAgIHJldHVybiBbdGV4dCwgISFvcHRpb25zLmFzU3RyaW5nLCAhIW9wdGlvbnMuZGlzYWJsZUxhbWJkYSwgb3B0aW9ucy5kZWxpbWl0ZXJzLCAhIW9wdGlvbnMubW9kZWxHZXRdLmpvaW4oJ3x8Jyk7XG4gIH1cblxuICBIb2dhbi5jb21waWxlID0gZnVuY3Rpb24odGV4dCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHZhciBrZXkgPSBIb2dhbi5jYWNoZUtleSh0ZXh0LCBvcHRpb25zKTtcbiAgICB2YXIgdGVtcGxhdGUgPSB0aGlzLmNhY2hlW2tleV07XG5cbiAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgIHZhciBwYXJ0aWFscyA9IHRlbXBsYXRlLnBhcnRpYWxzO1xuICAgICAgZm9yICh2YXIgbmFtZSBpbiBwYXJ0aWFscykge1xuICAgICAgICBkZWxldGUgcGFydGlhbHNbbmFtZV0uaW5zdGFuY2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgfVxuXG4gICAgdGVtcGxhdGUgPSB0aGlzLmdlbmVyYXRlKHRoaXMucGFyc2UodGhpcy5zY2FuKHRleHQsIG9wdGlvbnMuZGVsaW1pdGVycyksIHRleHQsIG9wdGlvbnMpLCB0ZXh0LCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVtrZXldID0gdGVtcGxhdGU7XG4gIH1cbn0pKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJyA/IGV4cG9ydHMgOiBIb2dhbik7XG4iLCIvKlxuICogIENvcHlyaWdodCAyMDExIFR3aXR0ZXIsIEluYy5cbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIFRoaXMgZmlsZSBpcyBmb3IgdXNlIHdpdGggTm9kZS5qcy4gU2VlIGRpc3QvIGZvciBicm93c2VyIGZpbGVzLlxuXG52YXIgSG9nYW4gPSByZXF1aXJlKCcuL2NvbXBpbGVyJyk7XG5Ib2dhbi5UZW1wbGF0ZSA9IHJlcXVpcmUoJy4vdGVtcGxhdGUnKS5UZW1wbGF0ZTtcbkhvZ2FuLnRlbXBsYXRlID0gSG9nYW4uVGVtcGxhdGU7XG5tb2R1bGUuZXhwb3J0cyA9IEhvZ2FuO1xuIiwiLypcbiAqICBDb3B5cmlnaHQgMjAxMSBUd2l0dGVyLCBJbmMuXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG52YXIgSG9nYW4gPSB7fTtcblxuKGZ1bmN0aW9uIChIb2dhbikge1xuICBIb2dhbi5UZW1wbGF0ZSA9IGZ1bmN0aW9uIChjb2RlT2JqLCB0ZXh0LCBjb21waWxlciwgb3B0aW9ucykge1xuICAgIGNvZGVPYmogPSBjb2RlT2JqIHx8IHt9O1xuICAgIHRoaXMuciA9IGNvZGVPYmouY29kZSB8fCB0aGlzLnI7XG4gICAgdGhpcy5jID0gY29tcGlsZXI7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB0aGlzLnRleHQgPSB0ZXh0IHx8ICcnO1xuICAgIHRoaXMucGFydGlhbHMgPSBjb2RlT2JqLnBhcnRpYWxzIHx8IHt9O1xuICAgIHRoaXMuc3VicyA9IGNvZGVPYmouc3VicyB8fCB7fTtcbiAgICB0aGlzLmJ1ZiA9ICcnO1xuICB9XG5cbiAgSG9nYW4uVGVtcGxhdGUucHJvdG90eXBlID0ge1xuICAgIC8vIHJlbmRlcjogcmVwbGFjZWQgYnkgZ2VuZXJhdGVkIGNvZGUuXG4gICAgcjogZnVuY3Rpb24gKGNvbnRleHQsIHBhcnRpYWxzLCBpbmRlbnQpIHsgcmV0dXJuICcnOyB9LFxuXG4gICAgLy8gdmFyaWFibGUgZXNjYXBpbmdcbiAgICB2OiBob2dhbkVzY2FwZSxcblxuICAgIC8vIHRyaXBsZSBzdGFjaGVcbiAgICB0OiBjb2VyY2VUb1N0cmluZyxcblxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGNvbnRleHQsIHBhcnRpYWxzLCBpbmRlbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJpKFtjb250ZXh0XSwgcGFydGlhbHMgfHwge30sIGluZGVudCk7XG4gICAgfSxcblxuICAgIC8vIHJlbmRlciBpbnRlcm5hbCAtLSBhIGhvb2sgZm9yIG92ZXJyaWRlcyB0aGF0IGNhdGNoZXMgcGFydGlhbHMgdG9vXG4gICAgcmk6IGZ1bmN0aW9uIChjb250ZXh0LCBwYXJ0aWFscywgaW5kZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5yKGNvbnRleHQsIHBhcnRpYWxzLCBpbmRlbnQpO1xuICAgIH0sXG5cbiAgICAvLyBlbnN1cmVQYXJ0aWFsXG4gICAgZXA6IGZ1bmN0aW9uKHN5bWJvbCwgcGFydGlhbHMpIHtcbiAgICAgIHZhciBwYXJ0aWFsID0gdGhpcy5wYXJ0aWFsc1tzeW1ib2xdO1xuXG4gICAgICAvLyBjaGVjayB0byBzZWUgdGhhdCBpZiB3ZSd2ZSBpbnN0YW50aWF0ZWQgdGhpcyBwYXJ0aWFsIGJlZm9yZVxuICAgICAgdmFyIHRlbXBsYXRlID0gcGFydGlhbHNbcGFydGlhbC5uYW1lXTtcbiAgICAgIGlmIChwYXJ0aWFsLmluc3RhbmNlICYmIHBhcnRpYWwuYmFzZSA9PSB0ZW1wbGF0ZSkge1xuICAgICAgICByZXR1cm4gcGFydGlhbC5pbnN0YW5jZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZSA9PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoIXRoaXMuYykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbXBpbGVyIGF2YWlsYWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGVtcGxhdGUgPSB0aGlzLmMuY29tcGlsZSh0ZW1wbGF0ZSwgdGhpcy5vcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gV2UgdXNlIHRoaXMgdG8gY2hlY2sgd2hldGhlciB0aGUgcGFydGlhbHMgZGljdGlvbmFyeSBoYXMgY2hhbmdlZFxuICAgICAgdGhpcy5wYXJ0aWFsc1tzeW1ib2xdLmJhc2UgPSB0ZW1wbGF0ZTtcblxuICAgICAgaWYgKHBhcnRpYWwuc3Vicykge1xuICAgICAgICAvLyBNYWtlIHN1cmUgd2UgY29uc2lkZXIgcGFyZW50IHRlbXBsYXRlIG5vd1xuICAgICAgICBpZiAoIXBhcnRpYWxzLnN0YWNrVGV4dCkgcGFydGlhbHMuc3RhY2tUZXh0ID0ge307XG4gICAgICAgIGZvciAoa2V5IGluIHBhcnRpYWwuc3Vicykge1xuICAgICAgICAgIGlmICghcGFydGlhbHMuc3RhY2tUZXh0W2tleV0pIHtcbiAgICAgICAgICAgIHBhcnRpYWxzLnN0YWNrVGV4dFtrZXldID0gKHRoaXMuYWN0aXZlU3ViICE9PSB1bmRlZmluZWQgJiYgcGFydGlhbHMuc3RhY2tUZXh0W3RoaXMuYWN0aXZlU3ViXSkgPyBwYXJ0aWFscy5zdGFja1RleHRbdGhpcy5hY3RpdmVTdWJdIDogdGhpcy50ZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0ZW1wbGF0ZSA9IGNyZWF0ZVNwZWNpYWxpemVkUGFydGlhbCh0ZW1wbGF0ZSwgcGFydGlhbC5zdWJzLCBwYXJ0aWFsLnBhcnRpYWxzLFxuICAgICAgICAgIHRoaXMuc3RhY2tTdWJzLCB0aGlzLnN0YWNrUGFydGlhbHMsIHBhcnRpYWxzLnN0YWNrVGV4dCk7XG4gICAgICB9XG4gICAgICB0aGlzLnBhcnRpYWxzW3N5bWJvbF0uaW5zdGFuY2UgPSB0ZW1wbGF0ZTtcblxuICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgIH0sXG5cbiAgICAvLyB0cmllcyB0byBmaW5kIGEgcGFydGlhbCBpbiB0aGUgY3VycmVudCBzY29wZSBhbmQgcmVuZGVyIGl0XG4gICAgcnA6IGZ1bmN0aW9uKHN5bWJvbCwgY29udGV4dCwgcGFydGlhbHMsIGluZGVudCkge1xuICAgICAgdmFyIHBhcnRpYWwgPSB0aGlzLmVwKHN5bWJvbCwgcGFydGlhbHMpO1xuICAgICAgaWYgKCFwYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcnRpYWwucmkoY29udGV4dCwgcGFydGlhbHMsIGluZGVudCk7XG4gICAgfSxcblxuICAgIC8vIHJlbmRlciBhIHNlY3Rpb25cbiAgICByczogZnVuY3Rpb24oY29udGV4dCwgcGFydGlhbHMsIHNlY3Rpb24pIHtcbiAgICAgIHZhciB0YWlsID0gY29udGV4dFtjb250ZXh0Lmxlbmd0aCAtIDFdO1xuXG4gICAgICBpZiAoIWlzQXJyYXkodGFpbCkpIHtcbiAgICAgICAgc2VjdGlvbihjb250ZXh0LCBwYXJ0aWFscywgdGhpcyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWlsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnRleHQucHVzaCh0YWlsW2ldKTtcbiAgICAgICAgc2VjdGlvbihjb250ZXh0LCBwYXJ0aWFscywgdGhpcyk7XG4gICAgICAgIGNvbnRleHQucG9wKCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIG1heWJlIHN0YXJ0IGEgc2VjdGlvblxuICAgIHM6IGZ1bmN0aW9uKHZhbCwgY3R4LCBwYXJ0aWFscywgaW52ZXJ0ZWQsIHN0YXJ0LCBlbmQsIHRhZ3MpIHtcbiAgICAgIHZhciBwYXNzO1xuXG4gICAgICBpZiAoaXNBcnJheSh2YWwpICYmIHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbCA9IHRoaXMubXModmFsLCBjdHgsIHBhcnRpYWxzLCBpbnZlcnRlZCwgc3RhcnQsIGVuZCwgdGFncyk7XG4gICAgICB9XG5cbiAgICAgIHBhc3MgPSAhIXZhbDtcblxuICAgICAgaWYgKCFpbnZlcnRlZCAmJiBwYXNzICYmIGN0eCkge1xuICAgICAgICBjdHgucHVzaCgodHlwZW9mIHZhbCA9PSAnb2JqZWN0JykgPyB2YWwgOiBjdHhbY3R4Lmxlbmd0aCAtIDFdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhc3M7XG4gICAgfSxcblxuICAgIC8vIGZpbmQgdmFsdWVzIHdpdGggZG90dGVkIG5hbWVzXG4gICAgZDogZnVuY3Rpb24oa2V5LCBjdHgsIHBhcnRpYWxzLCByZXR1cm5Gb3VuZCkge1xuICAgICAgdmFyIGZvdW5kLFxuICAgICAgICAgIG5hbWVzID0ga2V5LnNwbGl0KCcuJyksXG4gICAgICAgICAgdmFsID0gdGhpcy5mKG5hbWVzWzBdLCBjdHgsIHBhcnRpYWxzLCByZXR1cm5Gb3VuZCksXG4gICAgICAgICAgZG9Nb2RlbEdldCA9IHRoaXMub3B0aW9ucy5tb2RlbEdldCxcbiAgICAgICAgICBjeCA9IG51bGw7XG5cbiAgICAgIGlmIChrZXkgPT09ICcuJyAmJiBpc0FycmF5KGN0eFtjdHgubGVuZ3RoIC0gMl0pKSB7XG4gICAgICAgIHZhbCA9IGN0eFtjdHgubGVuZ3RoIC0gMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZm91bmQgPSBmaW5kSW5TY29wZShuYW1lc1tpXSwgdmFsLCBkb01vZGVsR2V0KTtcbiAgICAgICAgICBpZiAoZm91bmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY3ggPSB2YWw7XG4gICAgICAgICAgICB2YWwgPSBmb3VuZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXR1cm5Gb3VuZCAmJiAhdmFsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXR1cm5Gb3VuZCAmJiB0eXBlb2YgdmFsID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY3R4LnB1c2goY3gpO1xuICAgICAgICB2YWwgPSB0aGlzLm12KHZhbCwgY3R4LCBwYXJ0aWFscyk7XG4gICAgICAgIGN0eC5wb3AoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgLy8gZmluZCB2YWx1ZXMgd2l0aCBub3JtYWwgbmFtZXNcbiAgICBmOiBmdW5jdGlvbihrZXksIGN0eCwgcGFydGlhbHMsIHJldHVybkZvdW5kKSB7XG4gICAgICB2YXIgdmFsID0gZmFsc2UsXG4gICAgICAgICAgdiA9IG51bGwsXG4gICAgICAgICAgZm91bmQgPSBmYWxzZSxcbiAgICAgICAgICBkb01vZGVsR2V0ID0gdGhpcy5vcHRpb25zLm1vZGVsR2V0O1xuXG4gICAgICBmb3IgKHZhciBpID0gY3R4Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHYgPSBjdHhbaV07XG4gICAgICAgIHZhbCA9IGZpbmRJblNjb3BlKGtleSwgdiwgZG9Nb2RlbEdldCk7XG4gICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgIHJldHVybiAocmV0dXJuRm91bmQpID8gZmFsc2UgOiBcIlwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJldHVybkZvdW5kICYmIHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWwgPSB0aGlzLm12KHZhbCwgY3R4LCBwYXJ0aWFscyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIC8vIGhpZ2hlciBvcmRlciB0ZW1wbGF0ZXNcbiAgICBsczogZnVuY3Rpb24oZnVuYywgY3gsIHBhcnRpYWxzLCB0ZXh0LCB0YWdzKSB7XG4gICAgICB2YXIgb2xkVGFncyA9IHRoaXMub3B0aW9ucy5kZWxpbWl0ZXJzO1xuXG4gICAgICB0aGlzLm9wdGlvbnMuZGVsaW1pdGVycyA9IHRhZ3M7XG4gICAgICB0aGlzLmIodGhpcy5jdChjb2VyY2VUb1N0cmluZyhmdW5jLmNhbGwoY3gsIHRleHQpKSwgY3gsIHBhcnRpYWxzKSk7XG4gICAgICB0aGlzLm9wdGlvbnMuZGVsaW1pdGVycyA9IG9sZFRhZ3M7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgLy8gY29tcGlsZSB0ZXh0XG4gICAgY3Q6IGZ1bmN0aW9uKHRleHQsIGN4LCBwYXJ0aWFscykge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5kaXNhYmxlTGFtYmRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTGFtYmRhIGZlYXR1cmVzIGRpc2FibGVkLicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYy5jb21waWxlKHRleHQsIHRoaXMub3B0aW9ucykucmVuZGVyKGN4LCBwYXJ0aWFscyk7XG4gICAgfSxcblxuICAgIC8vIHRlbXBsYXRlIHJlc3VsdCBidWZmZXJpbmdcbiAgICBiOiBmdW5jdGlvbihzKSB7IHRoaXMuYnVmICs9IHM7IH0sXG5cbiAgICBmbDogZnVuY3Rpb24oKSB7IHZhciByID0gdGhpcy5idWY7IHRoaXMuYnVmID0gJyc7IHJldHVybiByOyB9LFxuXG4gICAgLy8gbWV0aG9kIHJlcGxhY2Ugc2VjdGlvblxuICAgIG1zOiBmdW5jdGlvbihmdW5jLCBjdHgsIHBhcnRpYWxzLCBpbnZlcnRlZCwgc3RhcnQsIGVuZCwgdGFncykge1xuICAgICAgdmFyIHRleHRTb3VyY2UsXG4gICAgICAgICAgY3ggPSBjdHhbY3R4Lmxlbmd0aCAtIDFdLFxuICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuY2FsbChjeCk7XG5cbiAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKGludmVydGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dFNvdXJjZSA9ICh0aGlzLmFjdGl2ZVN1YiAmJiB0aGlzLnN1YnNUZXh0ICYmIHRoaXMuc3Vic1RleHRbdGhpcy5hY3RpdmVTdWJdKSA/IHRoaXMuc3Vic1RleHRbdGhpcy5hY3RpdmVTdWJdIDogdGhpcy50ZXh0O1xuICAgICAgICAgIHJldHVybiB0aGlzLmxzKHJlc3VsdCwgY3gsIHBhcnRpYWxzLCB0ZXh0U291cmNlLnN1YnN0cmluZyhzdGFydCwgZW5kKSwgdGFncyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgLy8gbWV0aG9kIHJlcGxhY2UgdmFyaWFibGVcbiAgICBtdjogZnVuY3Rpb24oZnVuYywgY3R4LCBwYXJ0aWFscykge1xuICAgICAgdmFyIGN4ID0gY3R4W2N0eC5sZW5ndGggLSAxXTtcbiAgICAgIHZhciByZXN1bHQgPSBmdW5jLmNhbGwoY3gpO1xuXG4gICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN0KGNvZXJjZVRvU3RyaW5nKHJlc3VsdC5jYWxsKGN4KSksIGN4LCBwYXJ0aWFscyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHN1YjogZnVuY3Rpb24obmFtZSwgY29udGV4dCwgcGFydGlhbHMsIGluZGVudCkge1xuICAgICAgdmFyIGYgPSB0aGlzLnN1YnNbbmFtZV07XG4gICAgICBpZiAoZikge1xuICAgICAgICB0aGlzLmFjdGl2ZVN1YiA9IG5hbWU7XG4gICAgICAgIGYoY29udGV4dCwgcGFydGlhbHMsIHRoaXMsIGluZGVudCk7XG4gICAgICAgIHRoaXMuYWN0aXZlU3ViID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gIH07XG5cbiAgLy9GaW5kIGEga2V5IGluIGFuIG9iamVjdFxuICBmdW5jdGlvbiBmaW5kSW5TY29wZShrZXksIHNjb3BlLCBkb01vZGVsR2V0KSB7XG4gICAgdmFyIHZhbDtcblxuICAgIGlmIChzY29wZSAmJiB0eXBlb2Ygc2NvcGUgPT0gJ29iamVjdCcpIHtcblxuICAgICAgaWYgKHNjb3BlW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWwgPSBzY29wZVtrZXldO1xuXG4gICAgICAvLyB0cnkgbG9va3VwIHdpdGggZ2V0IGZvciBiYWNrYm9uZSBvciBzaW1pbGFyIG1vZGVsIGRhdGFcbiAgICAgIH0gZWxzZSBpZiAoZG9Nb2RlbEdldCAmJiBzY29wZS5nZXQgJiYgdHlwZW9mIHNjb3BlLmdldCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbCA9IHNjb3BlLmdldChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWw7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTcGVjaWFsaXplZFBhcnRpYWwoaW5zdGFuY2UsIHN1YnMsIHBhcnRpYWxzLCBzdGFja1N1YnMsIHN0YWNrUGFydGlhbHMsIHN0YWNrVGV4dCkge1xuICAgIGZ1bmN0aW9uIFBhcnRpYWxUZW1wbGF0ZSgpIHt9O1xuICAgIFBhcnRpYWxUZW1wbGF0ZS5wcm90b3R5cGUgPSBpbnN0YW5jZTtcbiAgICBmdW5jdGlvbiBTdWJzdGl0dXRpb25zKCkge307XG4gICAgU3Vic3RpdHV0aW9ucy5wcm90b3R5cGUgPSBpbnN0YW5jZS5zdWJzO1xuICAgIHZhciBrZXk7XG4gICAgdmFyIHBhcnRpYWwgPSBuZXcgUGFydGlhbFRlbXBsYXRlKCk7XG4gICAgcGFydGlhbC5zdWJzID0gbmV3IFN1YnN0aXR1dGlvbnMoKTtcbiAgICBwYXJ0aWFsLnN1YnNUZXh0ID0ge307ICAvL2hlaGUuIHN1YnN0ZXh0LlxuICAgIHBhcnRpYWwuYnVmID0gJyc7XG5cbiAgICBzdGFja1N1YnMgPSBzdGFja1N1YnMgfHwge307XG4gICAgcGFydGlhbC5zdGFja1N1YnMgPSBzdGFja1N1YnM7XG4gICAgcGFydGlhbC5zdWJzVGV4dCA9IHN0YWNrVGV4dDtcbiAgICBmb3IgKGtleSBpbiBzdWJzKSB7XG4gICAgICBpZiAoIXN0YWNrU3Vic1trZXldKSBzdGFja1N1YnNba2V5XSA9IHN1YnNba2V5XTtcbiAgICB9XG4gICAgZm9yIChrZXkgaW4gc3RhY2tTdWJzKSB7XG4gICAgICBwYXJ0aWFsLnN1YnNba2V5XSA9IHN0YWNrU3Vic1trZXldO1xuICAgIH1cblxuICAgIHN0YWNrUGFydGlhbHMgPSBzdGFja1BhcnRpYWxzIHx8IHt9O1xuICAgIHBhcnRpYWwuc3RhY2tQYXJ0aWFscyA9IHN0YWNrUGFydGlhbHM7XG4gICAgZm9yIChrZXkgaW4gcGFydGlhbHMpIHtcbiAgICAgIGlmICghc3RhY2tQYXJ0aWFsc1trZXldKSBzdGFja1BhcnRpYWxzW2tleV0gPSBwYXJ0aWFsc1trZXldO1xuICAgIH1cbiAgICBmb3IgKGtleSBpbiBzdGFja1BhcnRpYWxzKSB7XG4gICAgICBwYXJ0aWFsLnBhcnRpYWxzW2tleV0gPSBzdGFja1BhcnRpYWxzW2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRpYWw7XG4gIH1cblxuICB2YXIgckFtcCA9IC8mL2csXG4gICAgICByTHQgPSAvPC9nLFxuICAgICAgckd0ID0gLz4vZyxcbiAgICAgIHJBcG9zID0gL1xcJy9nLFxuICAgICAgclF1b3QgPSAvXFxcIi9nLFxuICAgICAgaENoYXJzID0gL1smPD5cXFwiXFwnXS87XG5cbiAgZnVuY3Rpb24gY29lcmNlVG9TdHJpbmcodmFsKSB7XG4gICAgcmV0dXJuIFN0cmluZygodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSA/ICcnIDogdmFsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhvZ2FuRXNjYXBlKHN0cikge1xuICAgIHN0ciA9IGNvZXJjZVRvU3RyaW5nKHN0cik7XG4gICAgcmV0dXJuIGhDaGFycy50ZXN0KHN0cikgP1xuICAgICAgc3RyXG4gICAgICAgIC5yZXBsYWNlKHJBbXAsICcmYW1wOycpXG4gICAgICAgIC5yZXBsYWNlKHJMdCwgJyZsdDsnKVxuICAgICAgICAucmVwbGFjZShyR3QsICcmZ3Q7JylcbiAgICAgICAgLnJlcGxhY2UockFwb3MsICcmIzM5OycpXG4gICAgICAgIC5yZXBsYWNlKHJRdW90LCAnJnF1b3Q7JykgOlxuICAgICAgc3RyO1xuICB9XG5cbiAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uKGEpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpID09PSAnW29iamVjdCBBcnJheV0nO1xuICB9O1xuXG59KSh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcgPyBleHBvcnRzIDogSG9nYW4pO1xuIiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8ZGl2IGlkPVxcXCJtYXJrZXRwbGFjZS1pdGVtRGV0YWlsLWluZm8tYXV0b2J1eVxcXCIgc3R5bGU9XFxcInRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luOiAyMHB4IGF1dG9cXFwiPjxkaXYgY2xhc3M9XFxcIm5sLWJ1dHRvblxcXCI+QWRkIHRvIHdpc2hsaXN0PC9kaXY+PC9kaXY+XCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxoMT5BZGQgdG8gd2lzaGxpc3Q8L2gxPjxwPkhvdyBtYW55IG1hYW5hcyBkbyB5b3Ugd2lzaCB0byBvZmZlciB0byBhY3F1aXJlIHRoaXMgaXRlbT88L3A+XCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxidXR0b24gaWQ9XFxcImF1dG8tZXhwbG9yZS1idXR0b25cXFwiIGNsYXNzPVxcXCJubC1idXR0b24gXCIpO2lmKHQucyh0LmYoXCJhY3RpdmVcIixjLHAsMSksYyxwLDAsNjEsNjcsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcImFjdGl2ZVwiKTt9KTtjLnBvcCgpO310LmIoXCJcXFwiIGRhdGEtaWQ9XFxcIlwiKTt0LmIodC52KHQuZihcImxvY2F0aW9uSWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiIGRhdGEtbWFwaWQ9XFxcIlwiKTt0LmIodC52KHQuZihcInJlZ2lvbklkXCIsYyxwLDApKSk7dC5iKFwiXFxcIj5BdXRvIGV4cGxvcmU8L2J1dHRvbj5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19KTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGEgaWQ9XFxcIlwiKTt0LmIodC52KHQuZihcImlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBjbGFzcz1cXFwiY2Fyb3VzZWwtbmV3cyBjYXJvdXNlbC1lZVxcXCIgaHJlZj1cXFwiXFxcIiBzdHlsZT1cXFwiYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiKTt0LmIodC52KHQuZihcImJhY2tncm91bmRJbWFnZVwiLGMscCwwKSkpO3QuYihcIilcXFwiPjxkaXY+PGg0PlwiKTt0LmIodC52KHQuZihcImg0XCIsYyxwLDApKSk7dC5iKFwiPC9oND48aDU+XCIpO3QuYih0LnYodC5mKFwiaDVcIixjLHAsMCkpKTt0LmIoXCI8L2g1PjxwPlwiKTt0LmIodC52KHQuZihcInBcIixjLHAsMCkpKTt0LmIoXCI8L3A+PC9kaXY+PC9hPlwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0pO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8aDE+Q2hhbmdlIHByaWNlPC9oMT48cD5Ib3cgbWFueSBtYWFuYXMgZG8geW91IHdpc2ggdG8gb2ZmZXIgdG8gYWNxdWlyZSB0aGlzIGl0ZW0/PC9wPlwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0pO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8YnV0dG9uIGlkPVxcXCJcIik7dC5iKHQudih0LmYoXCJpZFwiLGMscCwwKSkpO3QuYihcIlxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvbiBmYXZvcml0ZXMtYWN0aW9uLWVlXFxcIj5cIik7dC5iKHQudih0LmYoXCJ0ZXh0XCIsYyxwLDApKSk7dC5iKFwiPC9idXR0b24+XCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxpbWcgc3JjPVxcXCJcIik7dC5iKHQudih0LmYoXCJpY29uXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBhbHQ9XFxcIlwiKTt0LmIodC52KHQuZihcIm5hbWVcIixjLHAsMCkpKTt0LmIoXCJcXFwiIGhlaWdodD1cXFwiMjFcXFwiIHN0eWxlPVxcXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IG1hcmdpbjogLTJweCBhdXRvXFxcIj4gQWRkZWQgPHN0cm9uZz5cIik7dC5iKHQudih0LmYoXCJuYW1lXCIsYyxwLDApKSk7dC5iKFwiPC9zdHJvbmc+Zm9yIDxzdHJvbmcgY2xhc3M9XFxcInByaWNlLWl0ZW1cXFwiPlwiKTt0LmIodC52KHQuZihcInByaWNlXCIsYyxwLDApKSk7dC5iKFwiPC9zdHJvbmc+PHNwYW4gY2xhc3M9XFxcIm1hYW5hLWljb25cXFwiIGFsdD1cXFwibWFhbmFzXFxcIj48L3NwYW4+IHRvIHRoZSB3aXNobGlzdC5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19KTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGltZyBzcmM9XFxcIlwiKTt0LmIodC52KHQuZihcImljb25cIixjLHAsMCkpKTt0LmIoXCJcXFwiIGFsdD1cXFwiXCIpO3QuYih0LnYodC5mKFwibmFtZVwiLGMscCwwKSkpO3QuYihcIlxcXCIgaGVpZ2h0PVxcXCIyMVxcXCIgc3R5bGU9XFxcImRpc3BsYXk6IGlubGluZS1ibG9jazsgbWFyZ2luOiAtMnB4IGF1dG9cXFwiPiBDaGFuZ2VkIDxzdHJvbmc+XCIpO3QuYih0LnYodC5mKFwibmFtZVwiLGMscCwwKSkpO3QuYihcIjwvc3Ryb25nPidzIHByaWNlIGZvciA8c3Ryb25nIGNsYXNzPVxcXCJwcmljZS1pdGVtXFxcIj5cIik7dC5iKHQudih0LmYoXCJwcmljZVwiLGMscCwwKSkpO3QuYihcIjwvc3Ryb25nPjxzcGFuIGNsYXNzPVxcXCJtYWFuYS1pY29uXFxcIiBhbHQ9XFxcIm1hYW5hc1xcXCI+PC9zcGFuPi5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19KTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGxpIGlkPVxcXCJoZWFkZXItdGFrZW92ZXJcXFwiIHN0eWxlPVxcXCJ0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gZWFzZS1pbi1vdXQgMjAwbXNcXFwiIG9uTW91c2VPdmVyPVxcXCJ0aGlzLnN0eWxlLnRyYW5zZm9ybT0nc2NhbGUoMS4zKSdcXFwiIG9uTW91c2VPdXQ9XFxcInRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxKSdcXFwiPjxhPjxpbWcgc3JjPVxcXCIvc3RhdGljL2ltZy9uZXctbGF5b3V0L2hvbWUvY29ubmVjdGVkL2xvY2sucG5nXFxcIiBzdHlsZT1cXFwiZmlsdGVyOiBjb250cmFzdCgwJSkgYnJpZ2h0bmVzcygyMDAlKVxcXCIgaGVpZ2h0PVxcXCIyMVxcXCI+PC9hPjwvbGk+XCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxhIGlkPVxcXCJob21lLVwiKTt0LmIodC52KHQuZihcImlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBjbGFzcz1cXFwiaG9tZS1jb250ZW50LXRpbGUgaG9tZS1jb250ZW50LXNtYWxsIGhvbWUtY29udGVudC1zbWFsbC1lZVxcXCIgaHJlZj1cXFwiXCIpO3QuYih0LnYodC5mKFwiaHJlZlwiLGMscCwwKSkpO3QuYihcIlxcXCIgc3R5bGU9XFxcImJhY2tncm91bmQtaW1hZ2U6IHVybChcIik7dC5iKHQudih0LmYoXCJiYWNrZ3JvdW5kSW1hZ2VcIixjLHAsMCkpKTt0LmIoXCIpO1xcXCI+PGg0PlwiKTt0LmIodC52KHQuZihcImg0XCIsYyxwLDApKSk7dC5iKFwiPC9oND48L2E+XCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxsaSBjbGFzcz1cXFwibWFpbi1tZW51LVwiKTt0LmIodC52KHQuZihcImNsYXNzXCIsYyxwLDApKSk7dC5iKFwiIG1haW4tbWVudS1lZVxcXCI+PGEgaHJlZj1cXFwiXCIpO3QuYih0LnYodC5mKFwiaHJlZlwiLGMscCwwKSkpO3QuYihcIlxcXCI+XCIpO3QuYih0LnYodC5mKFwidGV4dFwiLGMscCwwKSkpO3QuYihcIjwvYT48L2xpPlwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0pO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8bGkgaWQ9XFxcIlwiKTt0LmIodC52KHQuZihcImlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBjbGFzcz1cXFwicHJvZmlsZS1jb250YWN0LWFjdGlvbi1lZVxcXCI+PHNwYW4gY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc21cXFwiPjxkaXYgY2xhc3M9XFxcImFjdGlvbi1kZXNjcmlwdGlvblxcXCI+XCIpO3QuYih0LnYodC5mKFwiYWN0aW9uRGVzY3JpcHRpb25cIixjLHAsMCkpKTt0LmIoXCI8L2Rpdj48L3NwYW4+PC9saT5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19KTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGRpdiBjbGFzcz1cXFwiYWNjb3VudC1taXNjLWJsb2MgYWNjb3VudC1lZS1ibG9jIGJsb2NcXFwiPjxoMiBjbGFzcz1cXFwic2VjdGlvbi10aXRsZVxcXCI+RW5oYW5jZW1lbnRzPC9oMj48dWwgY2xhc3M9XFxcImFjY291bnQtbWlzYy1hY3Rpb25zXFxcIj48bGkgaWQ9XFxcImVlLWRlYnVnLWVuYWJsZWRcXFwiIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIFwiKTtpZih0LnModC5mKFwiZGVidWdcIixjLHAsMSksYyxwLDAsMTk0LDIwMCxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiYWN0aXZlXCIpO30pO2MucG9wKCk7fXQuYihcIlxcXCIgdGl0bGU9XFxcIkVuYWJsZXMgb3IgZGlzYWJsZXMgbG9nZ2luZy5cXFwiPkRlYnVnPC9saT48bGkgaWQ9XFxcImVlLW1pbmlnYW1lcy1lbmFibGVkXFxcIiBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbSBcIik7aWYodC5zKHQuZihcIm1pbmlnYW1lc1wiLGMscCwxKSxjLHAsMCwzMzMsMzM5LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCJhY3RpdmVcIik7fSk7Yy5wb3AoKTt9dC5iKFwiXFxcIj5NaW5pZ2FtZXM8L2xpPjxsaSBpZD1cXFwiZWUtZXhwbG9yYXRpb25zLWVuYWJsZWRcXFwiIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIFwiKTtpZih0LnModC5mKFwiZXhwbG9yYXRpb25zXCIsYyxwLDEpLGMscCwwLDQ0OSw0NTUsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcImFjdGl2ZVwiKTt9KTtjLnBvcCgpO310LmIoXCJcXFwiPkV4cGxvcmF0aW9uczwvbGk+PGxpIGlkPVxcXCJlZS1tYXJrZXQtZW5hYmxlZFxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc20gXCIpO2lmKHQucyh0LmYoXCJtYXJrZXRcIixjLHAsMSksYyxwLDAsNTU5LDU2NSxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiYWN0aXZlXCIpO30pO2MucG9wKCk7fXQuYihcIlxcXCI+TWFya2V0PC9saT48bGkgaWQ9XFxcImVlLWltcG9ydFxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc21cXFwiPkltcG9ydDwvbGk+PGxpIGlkPVxcXCJlZS1leHBvcnRcXFwiIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtXFxcIj5FeHBvcnQ8L2xpPjwvdWw+PC9kaXY+XCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxhIGlkPVxcXCJ3aXNobGlzdC1idXR0b25cXFwiIGNsYXNzPVxcXCJubC1idXR0b25cXFwiPldpc2hsaXN0PC9hPlwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0pO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8c3R5bGU+dGFibGUge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHdpZHRoOiAxMDAlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC5hY3Rpb24tcGljdG8ge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBoZWlnaHQ6IDUwcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHdpZHRoOiA1MHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBjdXJzb3I6IHBvaW50ZXI7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgLmFjdGlvbi1waWN0bzpob3Zlcjpub3QoLmRpc2FibGVkKSxcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC5lZGl0LXByaWNlOmhvdmVyIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgYW5pbWF0aW9uOiBidXR0b24tYm91bmNlIDMwMG1zIGxpbmVhciBmb3J3YXJkcztcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgZmlsdGVyOiBicmlnaHRuZXNzKDEuMDUpIGNvbnRyYXN0KDEuMSk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgLmVkaXQtcHJpY2Uge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBjdXJzb3I6IHBvaW50ZXI7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgaW1nLmRpc2FibGVkIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgZmlsdGVyOiBncmF5c2NhbGUoMSk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgLml0ZW0taWNvbiB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHdpZHRoOiAxMDBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgaGVpZ2h0OiAxMDBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH08L3N0eWxlPjx0YWJsZT48dGhlYWQ+PHRyPjx0aD5JY29uPC90aD48dGg+TmFtZTwvdGg+PHRoPlByaWNlPC90aD48dGg+U3RhdHVzPC90aD48dGg+QWN0aW9uczwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT4gXCIpO2lmKHQucyh0LmYoXCJ3aXNobGlzdFwiLGMscCwxKSxjLHAsMCw1NzcsMTI3NSxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiIDx0ciBjbGFzcz1cXFwibWFya2V0cGxhY2UtYWJzdHJhY3RcXFwiIGRhdGEtd2VhcmFibGVpdGVtaWQ9XFxcIlwiKTt0LmIodC52KHQuZihcIndlYXJhYmxlaXRlbWlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIj48dGQ+PGltZyBjbGFzcz1cXFwiaXRlbS1pY29uXFxcIiBzcmM9XFxcIlwiKTt0LmIodC52KHQuZihcImljb25cIixjLHAsMCkpKTt0LmIoXCJcXFwiIGFsdD1cXFwiXCIpO3QuYih0LnYodC5mKFwibmFtZVwiLGMscCwwKSkpO3QuYihcIlxcXCI+PC90ZD48dGQ+PGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtbmFtZVxcXCI+XCIpO3QuYih0LnYodC5mKFwibmFtZVwiLGMscCwwKSkpO3QuYihcIjwvZGl2PjwvdGQ+PHRkPjxkaXYgY2xhc3M9XFxcImVkaXQtcHJpY2VcXFwiIHRpdGxlPVxcXCJDaGFuZ2UgcHJpY2VcXFwiPjxzcGFuIGNsYXNzPVxcXCJwcmljZS1pdGVtXFxcIj5cIik7dC5iKHQudih0LmYoXCJwcmljZVwiLGMscCwwKSkpO3QuYihcIjwvc3Bhbj48c3BhbiBjbGFzcz1cXFwibWFhbmEtaWNvblxcXCIgYWx0PVxcXCJtYWFuYXNcXFwiPjwvc3Bhbj48L2Rpdj48L3RkPjx0ZD48cCBjbGFzcz1cXFwiZXJyb3JcXFwiPlwiKTt0LmIodC52KHQuZihcImVycm9yXCIsYyxwLDApKSk7dC5iKFwiPC9wPjwvdGQ+PHRkPjxpbWcgY2xhc3M9XFxcImFjdGlvbi1waWN0byByZXNldC1pdGVtLXN0YXR1cyBcIik7aWYoIXQucyh0LmYoXCJlcnJvclwiLGMscCwxKSxjLHAsMSwwLDAsXCJcIikpe3QuYihcImRpc2FibGVkXCIpO307dC5iKFwiXFxcIiBzcmM9XFxcIi9zdGF0aWMvaW1nL25ldy1sYXlvdXQvd2FyZHJvYmUvcmVzZXQtYnRuLnBuZ1xcXCIgdGl0bGU9XFxcIlJlc2V0IHRoZSBlcnJvciBzdGF0dXNcXFwiIGFsdD1cXFwiUmVzZXRcXFwiPiA8aW1nIGNsYXNzPVxcXCJhY3Rpb24tcGljdG8gZGVsZXRlLXdpc2hsaXN0LWl0ZW1cXFwiIHNyYz1cXFwiL3N0YXRpYy9pbWcvbmV3LWxheW91dC93YXJkcm9iZS9kZWxldGUucG5nXFxcIiB0aXRsZT1cXFwiUmVtb3ZlIGZyb20gdGhlIHdpc2hsaXN0XFxcIiBhbHQ9XFxcIkRlbGV0ZVxcXCI+PC90ZD48L3RyPiBcIik7fSk7Yy5wb3AoKTt9dC5iKFwiIDwvdGJvZHk+PC90YWJsZT5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19KTtyZXR1cm4gVDsgfSgpOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJleHBvcnQgZW51bSBEdXJhdGlvblVuaXQge1xuICBtaWxsaXNlY29uZCA9IDEsXG4gIHNlY29uZCA9IDEwMDAgKiBtaWxsaXNlY29uZCxcbiAgbWludXRlID0gNjAgKiBzZWNvbmQsXG4gIGhvdXIgPSA2MCAqIG1pbnV0ZSxcbiAgZGF5ID0gMjQgKiBob3VyLFxuICB3ZWVrID0gNyAqIGRheSxcbn1cblxuZXhwb3J0IGNsYXNzIER1cmF0aW9uIHtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgdmFsdWU6IG51bWJlciwgcmVhZG9ubHkgdW5pdDogRHVyYXRpb25Vbml0KSB7fVxuXG4gIGRpdmlkZShkdXJhdGlvbjogRHVyYXRpb24pOiBEdXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbih0aGlzLnZhbHVlIC8gZHVyYXRpb24udG8odGhpcy51bml0KS52YWx1ZSwgdGhpcy51bml0KVxuICB9XG5cbiAgbWludXMoZHVyYXRpb246IER1cmF0aW9uKTogRHVyYXRpb24ge1xuICAgIHJldHVybiBuZXcgRHVyYXRpb24odGhpcy52YWx1ZSAtIGR1cmF0aW9uLnRvKHRoaXMudW5pdCkudmFsdWUsIHRoaXMudW5pdClcbiAgfVxuXG4gIG11bHRpcGx5KGR1cmF0aW9uOiBEdXJhdGlvbik6IER1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKHRoaXMudmFsdWUgKiBkdXJhdGlvbi50byh0aGlzLnVuaXQpLnZhbHVlLCB0aGlzLnVuaXQpXG4gIH1cblxuICBwbHVzKGR1cmF0aW9uOiBEdXJhdGlvbik6IER1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKHRoaXMudmFsdWUgKyBkdXJhdGlvbi50byh0aGlzLnVuaXQpLnZhbHVlLCB0aGlzLnVuaXQpXG4gIH1cblxuICB0byh1bml0OiBEdXJhdGlvblVuaXQpOiBEdXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbigodGhpcy52YWx1ZSAqIHRoaXMudW5pdCkgLyB1bml0LCB1bml0KVxuICB9XG59XG4iLCJleHBvcnQgZW51bSBMb2NhbFN0b3JhZ2VLZXkge1xuICBhdXRvRXhwbG9yZUxvY2F0aW9ucyA9IFwiYXV0b0V4cGxvcmVMb2NhdGlvbnNcIixcbiAgZGVidWcgPSBcImRlYnVnXCIsXG4gIGV4cGxvcmF0aW9ucyA9IFwiZXhwbG9yYXRpb25zXCIsXG4gIG1hcmtldCA9IFwibWFya2V0XCIsXG4gIG1pbmlnYW1lcyA9IFwibWluaWdhbWVzXCIsXG4gIHdpc2hsaXN0ID0gXCJ3aXNobGlzdFwiLFxufVxuIiwiZXhwb3J0IGVudW0gU2Vzc2lvblN0b3JhZ2VLZXkge1xuICBhY3Rpb24gPSBcImFjdGlvblwiLFxuICBleHBsb3JhdGlvbnNEb25lID0gXCJleHBsb3JhdGlvbnNEb25lXCIsXG4gIG1ldGEgPSBcIm1ldGFcIixcbiAgbWluaWdhbWVzRG9uZSA9IFwibWluaWdhbWVzRG9uZVwiLFxuICBzZWxlY3RlZExvY2F0aW9uID0gXCJzZWxlY3RlZExvY2F0aW9uXCIsXG4gIHRha2VvdmVyID0gXCJ0YWtlb3ZlclwiLFxuICB3aXNobGlzdCA9IFwid2lzaGxpc3RcIixcbn1cbiIsImV4cG9ydCBlbnVtIEJvZHlMb2NhdGlvbiB7XG4gIEFsbCA9IFwiXCIsXG4gIFVuZGVyd2VhciA9IDEsXG4gIFNraW5zID0gMixcbiAgVGF0dG9vcyA9IDIwLFxuICBNb3V0aHMgPSAyMSxcbiAgRXllcyA9IDMsXG4gIEhhaXIgPSA0LFxuICBTb2NrcyA9IDUsXG4gIFNob2VzID0gNixcbiAgUGFudHMgPSA3LFxuICBIYW5kQWNjZXNzb3JpZXMgPSA4LFxuICBUb3BzID0gOSxcbiAgQ29hdHMgPSAxMCxcbiAgR2xvdmVzID0gMTEsXG4gIE5lY2tsYWNlcyA9IDEyLFxuICBEcmVzc2VzID0gMTMsXG4gIEhhdHMgPSAxNCxcbiAgRmFjZUFjY2Vzc29yaWVzID0gMTUsXG4gIEZ1bmRzID0gMTYsXG4gIEJlbHRzID0gMTgsXG4gIEF0bW9zcGhlcmVzID0gMTksXG59XG4iLCJpbXBvcnQgeyBUeXBlIH0gZnJvbSBcIi4vdHlwZS5lbnVtXCJcblxuZXhwb3J0IGVudW0gQ2F0ZWdvcnlTdHJpbmcge1xuICBhbGwgPSBcIlwiLFxuICBmb29kID0gXCJmb29kXCIsXG4gIGFsY2hlbXkgPSBcImFsY2hlbXlcIixcbiAgdXRpbGl0eSA9IFwidXRpbGl0eVwiLFxuICB0YW1lID0gXCJ0YW1lXCIsXG59XG5cbmV4cG9ydCBlbnVtIENhdGVnb3J5TnVtYmVyIHtcbiAgYWxsID0gQ2F0ZWdvcnlTdHJpbmcuYWxsLFxuICBmb29kID0gMSxcbiAgYWxjaGVteSA9IFR5cGUuQ29uc3VtYWJsZSxcbiAgdXRpbGl0eSA9IDMsXG4gIHRhbWUgPSA0LFxufVxuIiwiZXhwb3J0IGVudW0gR3VhcmQge1xuICBhbnkgPSBcIlwiLFxuICBsaWdodCA9IDEsXG4gIG9ic2lkaWFuLFxuICBhYnN5bnRoZSxcbiAgc2hhZG93LFxufVxuIiwiZXhwb3J0IGVudW0gUmFyaXR5IHtcbiAgYWxsID0gXCJcIixcbiAgY29tbW9uID0gXCJjb21tb25cIixcbiAgcmFyZSA9IFwicmFyZVwiLFxuICBFcGljID0gXCJlcGljXCIsXG4gIGxlZ2VuZGFyeSA9IFwibGVnZW5kYXJ5XCIsXG4gIGV2ZW50ID0gXCJldmVudFwiLFxufVxuIiwiZXhwb3J0IGVudW0gVHlwZSB7XG4gIEFsbCA9IFwiXCIsXG4gIEJhZyA9IFwiQmFnXCIsXG4gIENvbnN1bWFibGUgPSBcIkNvbnN1bWFibGVcIixcbiAgRWdnSXRlbSA9IFwiRWdnSXRlbVwiLFxuICBQbGF5ZXJXZWFyYWJsZUl0ZW0gPSBcIlBsYXllcldlYXJhYmxlSXRlbVwiLFxuICBRdWVzdEl0ZW0gPSBcIlF1ZXN0SXRlbVwiLFxufVxuIiwiZXhwb3J0IGVudW0gVGFrZW92ZXJBY3Rpb24ge1xuICBkYWlseSA9IFwiZGFpbHlcIixcbiAgbWluaWdhbWVzID0gXCJtaW5pZ2FtZXNcIixcbiAgZXhwbG9yYXRpb25zID0gXCJleHBsb3JhdGlvbnNcIixcbiAgYXVjdGlvbnMgPSBcImF1Y3Rpb25zXCIsXG4gIGJ1eSA9IFwiYnV5XCIsXG4gIC8vIHNlbGwsXG4gIHdhaXQgPSBcIndhaXRcIixcbn1cbiIsImltcG9ydCB0eXBlIHsgU2V0dGluZ3MgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvc2V0dGluZ3NcIlxuaW1wb3J0IHR5cGUgeyBBdXRvRXhwbG9yZUxvY2F0aW9uIH0gZnJvbSBcIi4vYXV0b19leHBsb3JlX2xvY2F0aW9uXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZUtleSB9IGZyb20gXCIuL2xvY2FsX3N0b3JhZ2UuZW51bVwiXG5pbXBvcnQgdHlwZSB7IFdpc2hlZEl0ZW0gfSBmcm9tIFwiLi93aXNoZWRfaXRlbVwiXG5cbmV4cG9ydCBjbGFzcyBMb2NhbFN0b3JhZ2Uge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBsb2NhbFN0b3JhZ2UgPSBsb2NhbFN0b3JhZ2VcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICBzdGF0aWMgZ2V0IGF1dG9FeHBsb3JlTG9jYXRpb25zKCk6IEF1dG9FeHBsb3JlTG9jYXRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxBdXRvRXhwbG9yZUxvY2F0aW9uW10+KFxuICAgICAgTG9jYWxTdG9yYWdlS2V5LmF1dG9FeHBsb3JlTG9jYXRpb25zLFxuICAgICAgW11cbiAgICApXG4gIH1cblxuICBzdGF0aWMgc2V0IGF1dG9FeHBsb3JlTG9jYXRpb25zKGxvY2F0aW9uczogQXV0b0V4cGxvcmVMb2NhdGlvbltdKSB7XG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS5hdXRvRXhwbG9yZUxvY2F0aW9ucywgbG9jYXRpb25zKVxuICB9XG5cbiAgc3RhdGljIGdldCBkZWJ1ZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPGJvb2xlYW4+KExvY2FsU3RvcmFnZUtleS5kZWJ1ZywgZmFsc2UpXG4gIH1cblxuICBzdGF0aWMgc2V0IGRlYnVnKGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5LmRlYnVnLCBlbmFibGVkKVxuICB9XG5cbiAgc3RhdGljIGdldCBleHBsb3JhdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxib29sZWFuPihMb2NhbFN0b3JhZ2VLZXkuZXhwbG9yYXRpb25zLCBmYWxzZSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgZXhwbG9yYXRpb25zKGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5LmV4cGxvcmF0aW9ucywgZW5hYmxlZClcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWFya2V0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW08Ym9vbGVhbj4oTG9jYWxTdG9yYWdlS2V5Lm1hcmtldCwgZmFsc2UpXG4gIH1cblxuICBzdGF0aWMgc2V0IG1hcmtldChlbmFibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS5tYXJrZXQsIGVuYWJsZWQpXG4gIH1cblxuICBzdGF0aWMgZ2V0IG1pbmlnYW1lcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPGJvb2xlYW4+KExvY2FsU3RvcmFnZUtleS5taW5pZ2FtZXMsIGZhbHNlKVxuICB9XG5cbiAgc3RhdGljIHNldCBtaW5pZ2FtZXMoZW5hYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkubWluaWdhbWVzLCBlbmFibGVkKVxuICB9XG5cbiAgc3RhdGljIGdldCBzZXR0aW5ncygpOiBTZXR0aW5ncyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF1dG9FeHBsb3JlTG9jYXRpb25zOiB0aGlzLmF1dG9FeHBsb3JlTG9jYXRpb25zLFxuICAgICAgZGVidWc6IHRoaXMuZGVidWcsXG4gICAgICBleHBsb3JhdGlvbnM6IHRoaXMuZXhwbG9yYXRpb25zLFxuICAgICAgbWFya2V0OiB0aGlzLm1hcmtldCxcbiAgICAgIG1pbmlnYW1lczogdGhpcy5taW5pZ2FtZXMsXG4gICAgICB3aXNobGlzdDogdGhpcy53aXNobGlzdCxcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgc2V0IHNldHRpbmdzKHNldHRpbmdzOiBTZXR0aW5ncykge1xuICAgIHRoaXMuYXV0b0V4cGxvcmVMb2NhdGlvbnMgPSBzZXR0aW5ncy5hdXRvRXhwbG9yZUxvY2F0aW9uc1xuICAgIHRoaXMuZGVidWcgPSBzZXR0aW5ncy5kZWJ1Z1xuICAgIHRoaXMuZXhwbG9yYXRpb25zID0gc2V0dGluZ3MuZXhwbG9yYXRpb25zXG4gICAgdGhpcy5tYXJrZXQgPSBzZXR0aW5ncy5tYXJrZXRcbiAgICB0aGlzLm1pbmlnYW1lcyA9IHNldHRpbmdzLm1pbmlnYW1lc1xuICAgIHRoaXMud2lzaGxpc3QgPSBzZXR0aW5ncy53aXNobGlzdFxuICB9XG5cbiAgc3RhdGljIGdldCB3aXNobGlzdCgpOiBXaXNoZWRJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW08V2lzaGVkSXRlbVtdPihMb2NhbFN0b3JhZ2VLZXkud2lzaGxpc3QsIFtdKVxuICB9XG5cbiAgc3RhdGljIHNldCB3aXNobGlzdChsb2NhdGlvbnM6IFdpc2hlZEl0ZW1bXSkge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkud2lzaGxpc3QsIGxvY2F0aW9ucylcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldEl0ZW08VD4oa2V5OiBMb2NhbFN0b3JhZ2VLZXksIGZhbGxiYWNrOiBUKTogVCB7XG4gICAgcmV0dXJuIDxUPihcbiAgICAgIChKU09OLnBhcnNlKHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSA/PyBKU09OLnN0cmluZ2lmeShmYWxsYmFjaykpID8/XG4gICAgICAgIGZhbGxiYWNrKVxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHNldEl0ZW08VD4oa2V5OiBMb2NhbFN0b3JhZ2VLZXksIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHZhbHVlKSlcbiAgfVxufVxuIiwiaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcblxuZXhwb3J0IGNsYXNzIENvbnNvbGUge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBjb25zb2xlID0gY29uc29sZVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxuXG4gIHByaXZhdGUgc3RhdGljIGdldCBkZWJ1Z2dpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIExvY2FsU3RvcmFnZS5kZWJ1Z1xuICB9XG5cbiAgc3RhdGljIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgLi4ub3B0aW9uYWxQYXJhbXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kZWJ1Z2dpbmcpIHJldHVyblxuICAgIHRoaXMuY29uc29sZS5kZWJ1ZyhtZXNzYWdlLCAuLi5vcHRpb25hbFBhcmFtcylcbiAgfVxuXG4gIHN0YXRpYyBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGVidWdnaW5nKSByZXR1cm5cbiAgICB0aGlzLmNvbnNvbGUuZXJyb3IobWVzc2FnZSwgLi4ub3B0aW9uYWxQYXJhbXMpXG4gIH1cblxuICBzdGF0aWMgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGVidWdnaW5nKSByZXR1cm5cbiAgICB0aGlzLmNvbnNvbGUuaW5mbyhtZXNzYWdlLCAuLi5vcHRpb25hbFBhcmFtcylcbiAgfVxuXG4gIHN0YXRpYyBsb2cobWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRlYnVnZ2luZykgcmV0dXJuXG4gICAgdGhpcy5jb25zb2xlLmxvZyhtZXNzYWdlLCAuLi5vcHRpb25hbFBhcmFtcylcbiAgfVxuXG4gIHN0YXRpYyB3YXJuKG1lc3NhZ2U6IHN0cmluZywgLi4ub3B0aW9uYWxQYXJhbXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kZWJ1Z2dpbmcpIHJldHVyblxuICAgIHRoaXMuY29uc29sZS53YXJuKG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKVxuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IE1ldGEgfSBmcm9tIFwiLi4vYXBpL21ldGFcIlxuaW1wb3J0IHR5cGUgeyBBdXRvRXhwbG9yZUxvY2F0aW9uIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvYXV0b19leHBsb3JlX2xvY2F0aW9uXCJcbmltcG9ydCB0eXBlIHsgV2lzaGVkSXRlbSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL3dpc2hlZF9pdGVtXCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlS2V5IH0gZnJvbSBcIi4vc2Vzc2lvbl9zdG9yYWdlLmVudW1cIlxuaW1wb3J0IHR5cGUgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcblxuZXhwb3J0IGNsYXNzIFNlc3Npb25TdG9yYWdlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgc2Vzc2lvblN0b3JhZ2UgPSBzZXNzaW9uU3RvcmFnZVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxuXG4gIHN0YXRpYyBnZXQgYWN0aW9uKCk6IFRha2VvdmVyQWN0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5hY3Rpb24sIG51bGwpXG4gIH1cblxuICBzdGF0aWMgc2V0IGFjdGlvbihhY3Rpb246IFRha2VvdmVyQWN0aW9uIHwgbnVsbCkge1xuICAgIHRoaXMuc2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5hY3Rpb24sIGFjdGlvbilcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZXhwbG9yYXRpb25zRG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LmV4cGxvcmF0aW9uc0RvbmUsIGZhbHNlKVxuICB9XG5cbiAgc3RhdGljIHNldCBleHBsb3JhdGlvbnNEb25lKGRvbmU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkuZXhwbG9yYXRpb25zRG9uZSwgZG9uZSlcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWV0YSgpOiBNZXRhIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5tZXRhLCBudWxsKVxuICB9XG5cbiAgc3RhdGljIHNldCBtZXRhKG1ldGE6IE1ldGEgfCBudWxsKSB7XG4gICAgdGhpcy5zZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5Lm1ldGEsIG1ldGEpXG4gIH1cblxuICBzdGF0aWMgZ2V0IG1pbmlnYW1lc0RvbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5taW5pZ2FtZXNEb25lLCBmYWxzZSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWluaWdhbWVzRG9uZShkb25lOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5Lm1pbmlnYW1lc0RvbmUsIGRvbmUpXG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbGVjdGVkTG9jYXRpb24oKTogQXV0b0V4cGxvcmVMb2NhdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkuc2VsZWN0ZWRMb2NhdGlvbiwgbnVsbClcbiAgfVxuXG4gIHN0YXRpYyBzZXQgc2VsZWN0ZWRMb2NhdGlvbihzZWxlY3RlZDogQXV0b0V4cGxvcmVMb2NhdGlvbiB8IG51bGwpIHtcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkuc2VsZWN0ZWRMb2NhdGlvbiwgc2VsZWN0ZWQpXG4gIH1cblxuICBzdGF0aWMgZ2V0IHRha2VvdmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkudGFrZW92ZXIsIGZhbHNlKVxuICB9XG5cbiAgc3RhdGljIHNldCB0YWtlb3ZlcihlbmFibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LnRha2VvdmVyLCBlbmFibGVkKVxuICB9XG5cbiAgc3RhdGljIGdldCB3aXNobGlzdCgpOiBXaXNoZWRJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkud2lzaGxpc3QsIFtdKVxuICB9XG5cbiAgc3RhdGljIHNldCB3aXNobGlzdCh3aXNobGlzdDogV2lzaGVkSXRlbVtdKSB7XG4gICAgdGhpcy5zZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5Lndpc2hsaXN0LCB3aXNobGlzdClcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldEl0ZW08VD4oa2V5OiBTZXNzaW9uU3RvcmFnZUtleSwgZmFsbGJhY2s6IFQpOiBUIHtcbiAgICByZXR1cm4gPFQ+KFxuICAgICAgKEpTT04ucGFyc2UoXG4gICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShrZXkpID8/IEpTT04uc3RyaW5naWZ5KGZhbGxiYWNrKVxuICAgICAgKSA/PyBmYWxsYmFjaylcbiAgICApXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBzZXRJdGVtPFQ+KGtleTogU2Vzc2lvblN0b3JhZ2VLZXksIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpKVxuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuaW1wb3J0IHsgdG9nZ2xlVGFrZW92ZXIgfSBmcm9tIFwiLi4vdGFrZW92ZXIvYnJhaW5cIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEhlYWRlclRha2VvdmVyKCk6IHZvaWQge1xuICBjb25zdCBoZWFkZXJSaWdodCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaGVhZGVyLXJpZ2h0XCIpXG4gIGlmICghaGVhZGVyUmlnaHQpIHJldHVyblxuXG4gIGNvbnN0IGhlYWRlclRha2VvdmVyID0gaGVhZGVyUmlnaHQucXVlcnlTZWxlY3RvcihcIiNoZWFkZXItdGFrZW92ZXJcIilcbiAgaWYgKFNlc3Npb25TdG9yYWdlLnRha2VvdmVyKSB7XG4gICAgaWYgKCFoZWFkZXJUYWtlb3Zlcikge1xuICAgICAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2hlYWRlcl90YWtlb3Zlci5odG1sXCIpXG4gICAgICBoZWFkZXJSaWdodC5pbnNlcnRBZGphY2VudEhUTUwoXCJhZnRlcmJlZ2luXCIsIHRlbXBsYXRlLnJlbmRlcih7fSkpXG5cbiAgICAgIGhlYWRlclJpZ2h0XG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKFwiI2hlYWRlci10YWtlb3ZlclwiKVxuICAgICAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0b2dnbGVUYWtlb3ZlcilcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaGVhZGVyVGFrZW92ZXI/LnJlbW92ZSgpXG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgQnV5Tm93UHJpY2UgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2J1eV9ub3dfcHJpY2VcIlxuaW1wb3J0IHR5cGUgeyBDdXJyZW50UHJpY2UgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2N1cnJlbnRfcHJpY2VcIlxuaW1wb3J0IHR5cGUgeyBNYXJrZXRFbnRyeSB9IGZyb20gXCIuL2ludGVyZmFjZXMvbWFya2V0X2VudHJ5XCJcbmltcG9ydCB0eXBlIHsgTWFya2V0RW50cnlEYXRhU2V0IH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9tYXJrZXRfZW50cnlfZGF0YV9zZXRcIlxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURldGFpbHMobGk6IEhUTUxMSUVsZW1lbnQpOiBNYXJrZXRFbnRyeSB8IG51bGwge1xuICBjb25zdCBuYW1lID0gbGkucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIuYWJzdHJhY3QtbmFtZVwiKT8uaW5uZXJUZXh0XG4gIGNvbnN0IHNyYyA9IGxpLnF1ZXJ5U2VsZWN0b3I8SFRNTEltYWdlRWxlbWVudD4oXCIuYWJzdHJhY3QtaWNvbiBpbWdcIik/LnNyY1xuXG4gIGNvbnN0IGN1cnJlbnRQcmljZSA9IGxpLnF1ZXJ5U2VsZWN0b3I8SFRNTEltYWdlRWxlbWVudD4oXG4gICAgXCIucHJpY2UtaXRlbVtkYXRhLWJpZHNdXCJcbiAgKT8uZGF0YXNldCBhcyB1bmtub3duIGFzIEN1cnJlbnRQcmljZVxuXG4gIGNvbnN0IGJ1eU5vd1ByaWNlID0gbGkucXVlcnlTZWxlY3RvcjxIVE1MSW1hZ2VFbGVtZW50PihcbiAgICBcIi5wcmljZS1pdGVtOm5vdChbZGF0YS1iaWRzXSlcIlxuICApPy5kYXRhc2V0IGFzIHVua25vd24gYXMgQnV5Tm93UHJpY2VcblxuICBpZiAoIXNyYyB8fCAhbmFtZSkgcmV0dXJuIG51bGxcblxuICByZXR1cm4ge1xuICAgIC4uLihsaS5kYXRhc2V0IGFzIHVua25vd24gYXMgTWFya2V0RW50cnlEYXRhU2V0KSxcbiAgICBpY29uOiBzcmMsXG4gICAgbmFtZSxcbiAgICBidXlOb3dQcmljZSxcbiAgICBjdXJyZW50UHJpY2UsXG4gIH1cbn1cbiIsImV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGljazxUIGV4dGVuZHMgSFRNTEVsZW1lbnQ+KFxuICBzZWxlY3Rvcjogc3RyaW5nXG4pOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KHJlc29sdmUgPT4ge1xuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8VD4oc2VsZWN0b3IpXG4gICAgICBpZiAoIWVsZW1lbnQpIHJldHVyblxuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbClcblxuICAgICAgLy8gU29tZSBlbGVtZW50cyBkb24ndCBoYXZlIHRoZWlyIGNsaWNrIGhhbmRsZXJzIHJlYWR5IHVudGlsIHRoZXkncmVcbiAgICAgIC8vIGhvdmVyZWQuXG4gICAgICBjb25zdCBtb3VzZUV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJNb3VzZUV2ZW50XCIpXG4gICAgICBtb3VzZUV2ZW50LmluaXRFdmVudChcIm1vdXNlb3ZlclwiKVxuICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KG1vdXNlRXZlbnQpXG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVtZW50LmNsaWNrKClcbiAgICAgICAgcmVzb2x2ZShlbGVtZW50KVxuICAgICAgfSwgODAwKVxuICAgIH0sIDgwMClcbiAgfSlcbn1cbiIsImltcG9ydCB0eXBlIHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFjdGlvbiB7XG4gIC8qKiBLZXkgYnkgd2hpY2ggdGhlIGBTZXNzaW9uU3RvcmFnZWAgY2FuIHJlZmVyZW5jZSB0aGlzIGFjdGlvbi4gKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkga2V5OiBUYWtlb3ZlckFjdGlvblxuXG4gIC8qKiBEZXRlcm1pbmVzIGlmIHRoaXMgYWN0aW9uIGNhbiBiZSBwZXJmb3JtZWQgZHVyaW5nIGEgdGFrZW92ZXIuICovXG4gIGFic3RyYWN0IGNvbmRpdGlvbigpOiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIHRoZSBhY3Rpb24gYW5kIHJldHVybnMgYHRydWVgIHRoZSBicmFpbiBjYW4gY29udGludWUgd2l0aCBhbm90aGVyXG4gICAqIGFjdGlvbiBvciBgZmFsc2VgIGlmIHRoaXMgYWN0aW9uIGlzbid0IGZpbmlzaGVkIGV4ZWN1dGluZy5cbiAgICovXG4gIGFic3RyYWN0IHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPlxufVxuIiwiaW1wb3J0IHsgYWpheFNlYXJjaCB9IGZyb20gXCIuLi8uLi9hamF4L2FqYXhfc2VhcmNoXCJcbmltcG9ydCB7IGJ1eSB9IGZyb20gXCIuLi8uLi9hamF4L2J1eVwiXG5pbXBvcnQgeyBDb25zb2xlIH0gZnJvbSBcIi4uLy4uL2NvbnNvbGVcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uLy4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgdHlwZSB7IFdpc2hlZEl0ZW0gfSBmcm9tIFwiLi4vLi4vbG9jYWxfc3RvcmFnZS93aXNoZWRfaXRlbVwiXG5pbXBvcnQgdHlwZSB7IE1hcmtldEVudHJ5IH0gZnJvbSBcIi4uLy4uL21hcmtldHBsYWNlL2ludGVyZmFjZXMvbWFya2V0X2VudHJ5XCJcbmltcG9ydCB7IGdldEl0ZW1EZXRhaWxzIH0gZnJvbSBcIi4uLy4uL21hcmtldHBsYWNlL21hcmtldHBsYWNlX2hhbmRsZXJzXCJcbmltcG9ydCB7IFRha2VvdmVyQWN0aW9uIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS90YWtlb3Zlcl9hY3Rpb24uZW51bVwiXG5pbXBvcnQgeyBjbGljayB9IGZyb20gXCIuLi9jbGlja1wiXG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25cIlxuXG5jbGFzcyBCdXlBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xuICByZWFkb25seSBrZXkgPSBUYWtlb3ZlckFjdGlvbi5idXlcblxuICBwcml2YXRlIGdldCBjdXJyZW50TWFhbmEoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTnVtYmVyKFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MQW5jaG9yRWxlbWVudD4oXCIjY3VycmVuY3ktbWFhbmFcIik/LmRhdGFzZXRcbiAgICAgICAgLm1hYW5hXG4gICAgKVxuICB9XG5cbiAgY29uZGl0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBMb2NhbFN0b3JhZ2UubWFya2V0ICYmIEJvb2xlYW4oTG9jYWxTdG9yYWdlLndpc2hsaXN0Lmxlbmd0aClcbiAgfVxuXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCFsb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKFwiL21hcmtldHBsYWNlXCIpKSB7XG4gICAgICBhd2FpdCBjbGljazxIVE1MQW5jaG9yRWxlbWVudD4oXCIubWFpbi1tZW51LW1hcmtldHBsYWNlIGFcIilcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB3aXNoZWQgb2YgTG9jYWxTdG9yYWdlLndpc2hsaXN0KSB7XG4gICAgICAvLyBDbG90aGVzIG1pZ2h0IGJlIGEgc3BlY2lhbCBleGNlcHRpb24uIElmIHRoZXkgYXJlLCB0aGVuIGNoZWNrIGZvclxuICAgICAgLy8gYHdpc2hlZC50eXBlID09PSBUeXBlLlBsYXllcldlYXJhYmxlSXRlbWAuXG4gICAgICBpZiAod2lzaGVkLmVycm9yKSB7XG4gICAgICAgIENvbnNvbGUud2FybihgU2tpcHBlZCBcIiR7d2lzaGVkLm5hbWV9XCJgLCB3aXNoZWQpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBDb25zb2xlLmluZm8oYFNlYXJjaGluZyBmb3IgXCIke3dpc2hlZC5uYW1lfVwiYCwgd2lzaGVkKVxuXG4gICAgICBsZXQgYW1vdW50ID0gOFxuICAgICAgZm9ycGFnZTogZm9yIChsZXQgcGFnZSA9IDE7IGFtb3VudCA9PT0gODsgcGFnZSsrKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLnNlYXJjaCh3aXNoZWQsIHBhZ2UpXG4gICAgICAgIGFtb3VudCA9IHJlc3VsdHMubGVuZ3RoXG4gICAgICAgIENvbnNvbGUubG9nKGBGb3VuZCAke2Ftb3VudH0gcmVzdWx0c2AsIHJlc3VsdHMpXG5cbiAgICAgICAgY29uc3Qgd2FudGVkID0gcmVzdWx0cy5maWx0ZXIoXG4gICAgICAgICAgcmVzdWx0ID0+XG4gICAgICAgICAgICByZXN1bHQuaWNvbiA9PT0gd2lzaGVkLmljb24gJiZcbiAgICAgICAgICAgIHJlc3VsdC5idXlOb3dQcmljZSAmJlxuICAgICAgICAgICAgTnVtYmVyKHJlc3VsdC5idXlOb3dQcmljZS5wcmljZSkgPD0gd2lzaGVkLnByaWNlICYmXG4gICAgICAgICAgICBOdW1iZXIocmVzdWx0LmJ1eU5vd1ByaWNlLnByaWNlKSA8PSB0aGlzLmN1cnJlbnRNYWFuYVxuICAgICAgICApXG4gICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHdhbnRlZCkge1xuICAgICAgICAgIGlmICghKGF3YWl0IHRoaXMuYnV5KHJlc3VsdCkpKSBicmVhayBmb3JwYWdlXG5cbiAgICAgICAgICBDb25zb2xlLmluZm8oXG4gICAgICAgICAgICBgQm91Z2h0IFwiJHtyZXN1bHQubmFtZX1cIiBmb3IgJHtOdW1iZXIoXG4gICAgICAgICAgICAgIHJlc3VsdC5idXlOb3dQcmljZT8ucHJpY2VcbiAgICAgICAgICAgICl9IG1hYW5hcy5gLFxuICAgICAgICAgICAgcmVzdWx0XG4gICAgICAgICAgKVxuXG4gICAgICAgICAgJC5mbGF2ck5vdGlmKFxuICAgICAgICAgICAgYEJvdWdodCA8c3Ryb25nPiR7XG4gICAgICAgICAgICAgIHJlc3VsdC5uYW1lXG4gICAgICAgICAgICB9PC9zdHJvbmc+IGZvciA8c3Ryb25nIGNsYXNzPVwicHJpY2UtaXRlbVwiPiR7TnVtYmVyKFxuICAgICAgICAgICAgICByZXN1bHQuYnV5Tm93UHJpY2U/LnByaWNlXG4gICAgICAgICAgICApfTwvc3Ryb25nPiA8c3BhbiBjbGFzcz1cIm1hYW5hLWljb25cIiBhbHQ9XCJtYWFuYXNcIj48L3NwYW4+LmBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnV5KHJlc3VsdDogTWFya2V0RW50cnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBqc29uID0gYXdhaXQgYnV5KE51bWJlcihyZXN1bHQuaXRlbWlkKSlcbiAgICBpZiAoanNvbi5yZXN1bHQgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgdGhpcy5zZXRFcnJvcihyZXN1bHQud2VhcmFibGVpdGVtaWQsIGpzb24uZGF0YSlcbiAgICByZXR1cm4ganNvbi5yZXN1bHQgPT09IFwic3VjY2Vzc1wiXG4gIH1cblxuICAvKiogU2VhcmNoIGZvciBhIHdpc2hlZCBpdGVtIG9uIGEgc3BlY2lmaWMgcGFnZSB1c2luZyB0aGUgaXRlbSdzIG5hbWUuICovXG4gIHByaXZhdGUgYXN5bmMgc2VhcmNoKHdpc2hlZDogV2lzaGVkSXRlbSwgcGFnZSA9IDEpOiBQcm9taXNlPE1hcmtldEVudHJ5W10+IHtcbiAgICBjb25zdCBmaWx0ZXJJdGVtTmFtZSA9XG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KFwiI2ZpbHRlci1pdGVtTmFtZVwiKVxuICAgIGlmIChmaWx0ZXJJdGVtTmFtZSkgZmlsdGVySXRlbU5hbWUudmFsdWUgPSB3aXNoZWQubmFtZVxuXG4gICAgY29uc3QgbWFya2V0cGxhY2VTZWFyY2hJdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTFVMaXN0RWxlbWVudD4oXG4gICAgICBcIi5tYXJrZXRwbGFjZS1zZWFyY2gtaXRlbXNcIlxuICAgIClcbiAgICBpZiAoIW1hcmtldHBsYWNlU2VhcmNoSXRlbXMpIHJldHVybiBbXVxuICAgIG1hcmtldHBsYWNlU2VhcmNoSXRlbXMuaW5uZXJIVE1MID0gYXdhaXQgYWpheFNlYXJjaCh7XG4gICAgICBuYW1lOiB3aXNoZWQubmFtZSxcbiAgICAgIHBhZ2UsXG4gICAgfSlcblxuICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgbWFya2V0cGxhY2VTZWFyY2hJdGVtcy5xdWVyeVNlbGVjdG9yQWxsPEhUTUxMSUVsZW1lbnQ+KFxuICAgICAgICBcIi5tYXJrZXRwbGFjZS1zZWFyY2gtaXRlbVwiXG4gICAgICApXG4gICAgKVxuICAgICAgLm1hcChnZXRJdGVtRGV0YWlscylcbiAgICAgIC5maWx0ZXI8TWFya2V0RW50cnk+KChpdGVtKTogaXRlbSBpcyBNYXJrZXRFbnRyeSA9PiBpdGVtICE9PSBudWxsKVxuICB9XG5cbiAgLyoqIFNldCB0aGUgYFdpc2hlZEl0ZW0uZXJyb3JgIHByb3BlcnR5IHdpdGhvdXQgcmVvcmRlcmluZyB0aGUgd2lzaGxpc3QuICovXG4gIHByaXZhdGUgc2V0RXJyb3Iod2VhcmFibGVpdGVtaWQ6IHN0cmluZywgZXJyb3I6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHdpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0XG4gICAgY29uc3QgaW5kZXggPSB3aXNobGlzdC5maW5kSW5kZXgoXG4gICAgICBpdGVtID0+IGl0ZW0ud2VhcmFibGVpdGVtaWQgPT09IHdlYXJhYmxlaXRlbWlkXG4gICAgKVxuICAgIGNvbnN0IGVudHJ5ID0gd2lzaGxpc3RbaW5kZXhdXG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuXG5cbiAgICBlbnRyeS5lcnJvciA9IGVycm9yXG4gICAgTG9jYWxTdG9yYWdlLndpc2hsaXN0ID0gW1xuICAgICAgLi4ud2lzaGxpc3Quc2xpY2UodW5kZWZpbmVkLCBpbmRleCksXG4gICAgICBlbnRyeSxcbiAgICAgIC4uLndpc2hsaXN0LnNsaWNlKGluZGV4ICsgMSwgdW5kZWZpbmVkKSxcbiAgICBdXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IEJ1eUFjdGlvbigpXG4iLCJpbXBvcnQgdHlwZSB7IFBhY2tldCB9IGZyb20gXCIuLi9hcGkvcGFja2V0XCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnV5KGl0ZW1JZDogbnVtYmVyKTogUHJvbWlzZTxQYWNrZXQ8XCJcIj4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHZvaWQgJC5wb3N0KFxuICAgICAgXCIvbWFya2V0cGxhY2UvYnV5XCIsXG4gICAgICB7IGlkOiBpdGVtSWQgfSxcbiAgICAgIChqc29uOiBQYWNrZXQ8XCJcIj4pOiB2b2lkID0+IHtcbiAgICAgICAgU2Vzc2lvblN0b3JhZ2UubWV0YSA9IGpzb24ubWV0YVxuICAgICAgICByZXNvbHZlKGpzb24pXG5cbiAgICAgICAgaWYgKGpzb24ucmVzdWx0ICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICQuZmxhdnJOb3RpZihqc29uLmRhdGEpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImpzb25cIlxuICAgIClcbiAgfSlcbn1cbiIsImltcG9ydCB7IEJvZHlMb2NhdGlvbiB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9lbnVtcy9ib2R5X2xvY2F0aW9uLmVudW1cIlxuaW1wb3J0IHsgQ2F0ZWdvcnlOdW1iZXIgfSBmcm9tIFwiLi4vbWFya2V0cGxhY2UvZW51bXMvY2F0ZWdvcnkuZW51bVwiXG5pbXBvcnQgeyBHdWFyZCB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9lbnVtcy9ndWFyZC5lbnVtXCJcbmltcG9ydCB7IFJhcml0eSB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9lbnVtcy9yYXJpdHkuZW51bVwiXG5pbXBvcnQgeyBUeXBlIH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL2VudW1zL3R5cGUuZW51bVwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhamF4U2VhcmNoKGRhdGE6IHtcbiAgdHlwZT86IFR5cGVcbiAgYm9keUxvY2F0aW9uPzogQm9keUxvY2F0aW9uXG4gIGNhdGVnb3J5PzogQ2F0ZWdvcnlOdW1iZXJcbiAgcmFyaXR5PzogUmFyaXR5XG4gIHByaWNlPzogbnVtYmVyIHwgXCJcIlxuICBndWFyZD86IEd1YXJkXG4gIC8qKiBQYWdlIG51bWJlciwgaW5kZXhlZCBieSAxICovXG4gIHBhZ2U6IG51bWJlclxuICBuYW1lPzogc3RyaW5nXG59KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgZGF0YSA9IHtcbiAgICAuLi57XG4gICAgICB0eXBlOiBUeXBlLkFsbCxcbiAgICAgIGJvZHlMb2NhdGlvbjogQm9keUxvY2F0aW9uLkFsbCxcbiAgICAgIGNhdGVnb3J5OiBDYXRlZ29yeU51bWJlci5hbGwsXG4gICAgICByYXJpdHk6IFJhcml0eS5hbGwsXG4gICAgICBwcmljZTogXCJcIixcbiAgICAgIGd1YXJkOiBHdWFyZC5hbnksXG4gICAgICBwYWdlOiAxLFxuICAgICAgbmFtZTogXCJcIixcbiAgICB9LFxuICAgIC4uLmRhdGEsXG4gIH1cblxuICBjb25zdCBJVEVNU19QRVJfUEFHRSA9IDhcblxuICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgIHZvaWQgJC5nZXQoXG4gICAgICBcIi9tYXJrZXRwbGFjZS9hamF4X3NlYXJjaFwiLFxuICAgICAge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICBmcm9tOiAoZGF0YS5wYWdlIC0gMSkgKiBJVEVNU19QRVJfUEFHRSxcbiAgICAgICAgdG86IElURU1TX1BFUl9QQUdFLFxuICAgICAgfSxcbiAgICAgIHJlc29sdmVcbiAgICApXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxuaW1wb3J0IHsgcmVzZXRUYWtlb3ZlciB9IGZyb20gXCIuLi9icmFpblwiXG5pbXBvcnQgeyBjbGljayB9IGZyb20gXCIuLi9jbGlja1wiXG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCIuL2FjdGlvblwiXG5cbmNsYXNzIERhaWx5QWN0aW9uIGltcGxlbWVudHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkga2V5ID0gVGFrZW92ZXJBY3Rpb24uZGFpbHlcblxuICAvKiogQ2hlY2tzIGlmIHRoZSBkYWlseSBtYWFuYSBnaWZ0IGlmIHRoZXJlLiAqL1xuICBjb25kaXRpb24oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGFpbHlHaWZ0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkYWlseS1naWZ0LWNvbnRhaW5lclwiKVxuICAgIHJldHVybiAoXG4gICAgICAhIWRhaWx5R2lmdENvbnRhaW5lciAmJlxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkYWlseUdpZnRDb250YWluZXIpLmRpc3BsYXkgIT09IFwibm9uZVwiXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIENsaWNrIG9uIHRoZSBkYWlseSBtYWFuYSBnaWZ0LlxuICAgKiBAcmV0dXJucyBgZmFsc2VgLiBUaGlzIGFjdGlvbiBkb2VzIG5vdCBwZXJmb3JtIG1lYW5pbmdmdWwgYWN0aW9ucyBvbiB0aGVcbiAgICogcGFnZS5cbiAgICovXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZGFpbHlHaWZ0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkYWlseS1naWZ0LWNvbnRhaW5lclwiKVxuICAgIGlmIChcbiAgICAgICFkYWlseUdpZnRDb250YWluZXIgfHxcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZGFpbHlHaWZ0Q29udGFpbmVyKS5kaXNwbGF5ID09PSBcIm5vbmVcIlxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgZGFpbHlHaWZ0Q29udGFpbmVyLmNsaWNrKClcbiAgICBhd2FpdCBjbGljazxIVE1MQnV0dG9uRWxlbWVudD4oXCIuZmlyc3QtY29ubmV4aW9uIC5mbGF2ci1idXR0b24uZGVmYXVsdFwiKVxuXG4gICAgcmVzZXRUYWtlb3ZlcigpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IERhaWx5QWN0aW9uKClcbiIsImltcG9ydCB0eXBlIHsgQ2hhbmdlUmVnaW9uRGF0YSB9IGZyb20gXCIuLi9hcGkvY2hhbmdlX3JlZ2lvbl9kYXRhXCJcbmltcG9ydCB0eXBlIHsgUGFja2V0IH0gZnJvbSBcIi4uL2FwaS9wYWNrZXRcIlxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tIFwiLi4vc2Vzc2lvbl9zdG9yYWdlL3Nlc3Npb25fc3RvcmFnZVwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGFuZ2VSZWdpb24oXG4gIG5ld1JlZ2lvbklkOiBudW1iZXJcbik6IFByb21pc2U8UGFja2V0PENoYW5nZVJlZ2lvbkRhdGE+PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxQYWNrZXQ8Q2hhbmdlUmVnaW9uRGF0YT4+KChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgdm9pZCAkLnBvc3QoXG4gICAgICBcIi9wZXQvY2hhbmdlUmVnaW9uXCIsXG4gICAgICB7IG5ld1JlZ2lvbklkIH0sXG4gICAgICAoanNvbjogUGFja2V0PENoYW5nZVJlZ2lvbkRhdGE+KTogdm9pZCA9PiB7XG4gICAgICAgIFNlc3Npb25TdG9yYWdlLm1ldGEgPSBqc29uLm1ldGFcbiAgICAgICAgcmVzb2x2ZShqc29uKVxuXG4gICAgICAgIGlmIChqc29uLnJlc3VsdCAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAkLmZsYXZyTm90aWYoanNvbi5kYXRhKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudFJlZ2lvbiA9IGpzb24uZGF0YS5jdXJyZW50UmVnaW9uXG5cbiAgICAgICAgcGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uID1cbiAgICAgICAgICB0eXBlb2YganNvbi5kYXRhLnBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbiA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IGpzb24uZGF0YS5wZW5kaW5nVHJlYXN1cmVIdW50TG9jYXRpb25cblxuICAgICAgICB0aW1lTGVmdEV4cGxvcmF0aW9uID1cbiAgICAgICAgICB0eXBlb2YganNvbi5kYXRhLnRpbWVMZWZ0RXhwbG9yYXRpb24gPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBqc29uLmRhdGEudGltZUxlZnRFeHBsb3JhdGlvblxuICAgICAgfVxuICAgIClcbiAgfSlcbn1cbiIsImV4cG9ydCBlbnVtIFJlc3VsdCB7XG4gIGVycm9yID0gXCJlcnJvclwiLFxuICBzdWNjZXNzID0gXCJzdWNjZXNzXCIsXG59XG4iLCJleHBvcnQgZW51bSBFeHBsb3JhdGlvblN0YXR1cyB7XG4gIGlkbGUsXG4gIHJlc3VsdCxcbiAgY2FwdHVyZSxcbiAgcGVuZGluZyxcbn1cbiIsImltcG9ydCB7IGNhcHR1cmVFbmQgfSBmcm9tIFwiLi4vLi4vYWpheC9jYXB0dXJlX2VuZFwiXG5pbXBvcnQgeyBjaGFuZ2VSZWdpb24gfSBmcm9tIFwiLi4vLi4vYWpheC9jaGFuZ2VfcmVnaW9uXCJcbmltcG9ydCB7IGV4cGxvcmF0aW9uUmVzdWx0cyB9IGZyb20gXCIuLi8uLi9hamF4L2V4cGxvcmF0aW9uX3Jlc3VsdHNcIlxuaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcIi4uLy4uL2FwaS9yZXN1bHQuZW51bVwiXG5pbXBvcnQgeyBDb25zb2xlIH0gZnJvbSBcIi4uLy4uL2NvbnNvbGVcIlxuaW1wb3J0IHsgRHVyYXRpb25Vbml0IH0gZnJvbSBcIi4uLy4uL2R1cmF0aW9uXCJcbmltcG9ydCB0eXBlIHsgTWFwUmVnaW9uLCBTZWFzb24gfSBmcm9tIFwiLi4vLi4vZWxkYXJ5YS9jdXJyZW50X3JlZ2lvblwiXG5pbXBvcnQgdHlwZSB7IFBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbiB9IGZyb20gXCIuLi8uLi9lbGRhcnlhL3RyZWFzdXJlXCJcbmltcG9ydCB0eXBlIHsgQXV0b0V4cGxvcmVMb2NhdGlvbiB9IGZyb20gXCIuLi8uLi9sb2NhbF9zdG9yYWdlL2F1dG9fZXhwbG9yZV9sb2NhdGlvblwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuaW1wb3J0IHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcbmltcG9ydCB7IGNsaWNrIH0gZnJvbSBcIi4uL2NsaWNrXCJcbmltcG9ydCB7IEV4cGxvcmF0aW9uU3RhdHVzIH0gZnJvbSBcIi4uL2V4cGxvcmF0aW9uX3N0YXR1cy5lbnVtXCJcbmltcG9ydCB0eXBlIHsgU3RhcnRFeHBsb3JhdGlvbiB9IGZyb20gXCIuLi9zdGFydF9leHBsb3JhdGlvblwiXG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25cIlxuXG5jbGFzcyBFeHBsb3JhdGlvbkFjdGlvbiBleHRlbmRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IGtleSA9IFRha2VvdmVyQWN0aW9uLmV4cGxvcmF0aW9uc1xuXG4gIHByaXZhdGUgZ2V0IGdsb2JhbHMoKToge1xuICAgIGN1cnJlbnRSZWdpb246IE1hcFJlZ2lvblxuICAgIHBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbjogUGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uIHwgbnVsbFxuICAgIHRpbWVMZWZ0RXhwbG9yYXRpb246IG51bWJlciB8IG51bGxcbiAgfSB7XG4gICAgcmV0dXJuIHsgY3VycmVudFJlZ2lvbiwgcGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uLCB0aW1lTGVmdEV4cGxvcmF0aW9uIH1cbiAgfVxuXG4gIGNvbmRpdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgTG9jYWxTdG9yYWdlLmV4cGxvcmF0aW9ucyAmJlxuICAgICAgIVNlc3Npb25TdG9yYWdlLmV4cGxvcmF0aW9uc0RvbmUgJiZcbiAgICAgICEhTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zLmxlbmd0aFxuICAgIClcbiAgfVxuXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lICE9PSBcIi9wZXRcIikge1xuICAgICAgYXdhaXQgY2xpY2s8SFRNTEFuY2hvckVsZW1lbnQ+KFwiLm1haW4tbWVudS1wZXQgYVwiKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRoaXMuZ2V0RXhwbG9yYXRpb25TdGF0dXMoKSkge1xuICAgICAgY2FzZSBFeHBsb3JhdGlvblN0YXR1cy5pZGxlOlxuICAgICAgICBpZiAoIShhd2FpdCB0aGlzLnN0YXJ0RXhwbG9yYXRpb24oKSkuc2VsZWN0ZWQpXG4gICAgICAgICAgU2Vzc2lvblN0b3JhZ2UuZXhwbG9yYXRpb25zRG9uZSA9IHRydWVcbiAgICAgICAgcmV0dXJuIGZhbHNlXG5cbiAgICAgIGNhc2UgRXhwbG9yYXRpb25TdGF0dXMucGVuZGluZzpcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLndhaXRFeHBsb3JhdGlvbigpKSAmJiB0aGlzLnBlcmZvcm0oKVxuXG4gICAgICBjYXNlIEV4cGxvcmF0aW9uU3RhdHVzLnJlc3VsdDpcbiAgICAgICAgYXdhaXQgdGhpcy5lbmRFeHBsb3JhdGlvbigpXG4gICAgICAgIHJldHVybiB0aGlzLnBlcmZvcm0oKVxuXG4gICAgICBjYXNlIEV4cGxvcmF0aW9uU3RhdHVzLmNhcHR1cmU6XG4gICAgICAgIGF3YWl0IHRoaXMuZW5kQ2FwdHVyZSgpXG4gICAgICAgIHJldHVybiB0aGlzLnBlcmZvcm0oKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNsaWNrRXhwbG9yZSgpOiBQcm9taXNlPEhUTUxCdXR0b25FbGVtZW50PiB7XG4gICAgcmV0dXJuIGNsaWNrKFwiI2V4cGxvcmUtYnV0dG9uXCIpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNsaWNrTG9jYXRpb24oXG4gICAgc2VsZWN0ZWQ6IEF1dG9FeHBsb3JlTG9jYXRpb25cbiAgKTogUHJvbWlzZTxIVE1MRGl2RWxlbWVudD4ge1xuICAgIHJldHVybiBjbGljazxIVE1MRGl2RWxlbWVudD4oXG4gICAgICBgLm1hcC1sb2NhdGlvbltkYXRhLWlkPVwiJHtzZWxlY3RlZC5sb2NhdGlvbi5pZH1cIl1gXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBjbGlja1JlZ2lvbihzZWxlY3RlZDogQXV0b0V4cGxvcmVMb2NhdGlvbik6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgICBgLm1pbmltYXBbZGF0YS1tYXBpZD1cIiR7c2VsZWN0ZWQucmVnaW9uLmlkfVwiXWBcbiAgICApXG5cbiAgICBpZiAoIWRpdikge1xuICAgICAgLy8gQ2xlYXJpbmcgaW52YWxpZCByZWdpb25zIGlzIHVzZWZ1bCB0byByZW1vdmUgZmluaXNoZWQgZXZlbnRzLlxuICAgICAgTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zID1cbiAgICAgICAgTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zLmZpbHRlcihcbiAgICAgICAgICBzYXZlZCA9PiBzYXZlZC5yZWdpb24uaWQgIT09IHNlbGVjdGVkLnJlZ2lvbi50b1N0cmluZygpXG4gICAgICAgIClcblxuICAgICAgU2Vzc2lvblN0b3JhZ2Uuc2VsZWN0ZWRMb2NhdGlvbiA9IG51bGxcbiAgICAgIGxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGRpdi5jbGljaygpXG4gICAgcmV0dXJuIGRpdlxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjbGlja1NlYXNvbigpOiBQcm9taXNlPEhUTUxJbWFnZUVsZW1lbnQ+IHtcbiAgICByZXR1cm4gY2xpY2s8SFRNTEltYWdlRWxlbWVudD4oXCIjY3J5c3RhbC1pbWFnZXMtY29udGFpbmVyXCIpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuZENhcHR1cmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHZvaWQgbmV3IEF1ZGlvKFxuICAgICAgICBcIi9zdGF0aWMvZXZlbnQvMjAyMS9tdXNpYy9zb3VuZHMvbWlzc2lvbi1jb21wbGV0ZS5tcDNcIlxuICAgICAgKS5wbGF5KClcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9XG5cbiAgICBhd2FpdCBjbGljazxIVE1MQnV0dG9uRWxlbWVudD4oXCIjb3Blbi1jYXB0dXJlLWludGVyZmFjZVwiKVxuICAgIGF3YWl0IGNsaWNrPEhUTUxCdXR0b25FbGVtZW50PihcIiNjYXB0dXJlLWJ1dHRvblwiKVxuICAgIGF3YWl0IGNsaWNrPEhUTUxCdXR0b25FbGVtZW50PihcIiNjbG9zZS1yZXN1bHRcIilcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5kRXhwbG9yYXRpb24oKTogUHJvbWlzZTxIVE1MRGl2RWxlbWVudD4ge1xuICAgIHJldHVybiBjbGljayhcIiNjbG9zZS1yZXN1bHRcIilcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudFNlYXNvbigpOiBTZWFzb24ge1xuICAgIHJldHVybiA8U2Vhc29uPihBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpPy5jbGFzc0xpc3QgPz8gW10pXG4gICAgICAuZmluZChjID0+IGMuc3RhcnRzV2l0aChcInNlYXNvbi1cIikpXG4gICAgICA/LnJlcGxhY2UoXCJzZWFzb24tXCIsIFwiXCIpID8/IG51bGwpXG4gIH1cblxuICBwcml2YXRlIGdldEV4cGxvcmF0aW9uU3RhdHVzKCk6IEV4cGxvcmF0aW9uU3RhdHVzIHtcbiAgICBpZiAoXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI29wZW4tY2FwdHVyZS1pbnRlcmZhY2VcIikgfHxcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjY2FwdHVyZS1pbnRlcmZhY2Utb3V0ZXIuYWN0aXZlXCIpXG4gICAgKSB7XG4gICAgICByZXR1cm4gRXhwbG9yYXRpb25TdGF0dXMuY2FwdHVyZVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3BlbmRpbmctbWFwLWxvY2F0aW9uLWRhdGEtb3V0ZXIuYWN0aXZlXCIpIHx8XG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI21hcC1jb250YWluZXIucGVuZGluZ1wiKVxuICAgICkge1xuICAgICAgcmV0dXJuIEV4cGxvcmF0aW9uU3RhdHVzLnBlbmRpbmdcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjdHJlYXN1cmUtaHVudC1yZXN1bHQtb3ZlcmxheS5hY3RpdmVcIikpXG4gICAgICByZXR1cm4gRXhwbG9yYXRpb25TdGF0dXMucmVzdWx0XG4gICAgcmV0dXJuIEV4cGxvcmF0aW9uU3RhdHVzLmlkbGVcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG93ZXN0RW5lcmd5TG9jYXRpb24oKTogQXV0b0V4cGxvcmVMb2NhdGlvbiB7XG4gICAgcmV0dXJuIExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucy5yZWR1Y2UoKGxvd2VzdCwgcGxhY2UpID0+XG4gICAgICBOdW1iZXIocGxhY2UubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpIDxcbiAgICAgIE51bWJlcihsb3dlc3QubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpXG4gICAgICAgID8gcGxhY2VcbiAgICAgICAgOiBsb3dlc3RcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdGVkTG9jYXRpb24oKTogQXV0b0V4cGxvcmVMb2NhdGlvbiB8IG51bGwge1xuICAgIGxldCBzZWxlY3RlZCA9IFNlc3Npb25TdG9yYWdlLnNlbGVjdGVkTG9jYXRpb25cbiAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0TG9jYXRpb24oKVxuICAgICAgU2Vzc2lvblN0b3JhZ2Uuc2VsZWN0ZWRMb2NhdGlvbiA9IHNlbGVjdGVkXG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGVjdGVkXG4gIH1cblxuICBwcml2YXRlIHNlbGVjdExvY2F0aW9uKCk6IEF1dG9FeHBsb3JlTG9jYXRpb24gfCBudWxsIHtcbiAgICBjb25zdCBhZmZvcmRhYmxlID0gTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zLmZpbHRlcihcbiAgICAgIHNhdmVkID0+IE51bWJlcihzYXZlZC5sb2NhdGlvbi5lbmVyZ3lSZXF1aXJlZCkgPD0gcGV0RW5lcmd5XG4gICAgKVxuXG4gICAgY29uc3QgbWluaW11bUVuZXJneSA9IHRoaXMuZ2V0TG93ZXN0RW5lcmd5TG9jYXRpb24oKVxuICAgIGNvbnN0IG5vdERlYWRFbmQgPSBhZmZvcmRhYmxlLmZpbHRlcihcbiAgICAgIHBsYWNlID0+XG4gICAgICAgIHBldEVuZXJneSAtIE51bWJlcihwbGFjZS5sb2NhdGlvbi5lbmVyZ3lSZXF1aXJlZCkgPj1cbiAgICAgICAgTnVtYmVyKG1pbmltdW1FbmVyZ3kubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpXG4gICAgKVxuICAgIGlmIChub3REZWFkRW5kLmxlbmd0aClcbiAgICAgIHJldHVybiBub3REZWFkRW5kW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG5vdERlYWRFbmQubGVuZ3RoKV0gPz8gbnVsbFxuXG4gICAgY29uc3Qgc2FtZUVuZXJneSA9IGFmZm9yZGFibGUuZmlsdGVyKFxuICAgICAgcGxhY2UgPT4gTnVtYmVyKHBsYWNlLmxvY2F0aW9uLmVuZXJneVJlcXVpcmVkKSA9PT0gcGV0RW5lcmd5XG4gICAgKVxuICAgIGlmIChzYW1lRW5lcmd5Lmxlbmd0aClcbiAgICAgIHJldHVybiBzYW1lRW5lcmd5W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHNhbWVFbmVyZ3kubGVuZ3RoKV0gPz8gbnVsbFxuXG4gICAgcmV0dXJuIGFmZm9yZGFibGVbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYWZmb3JkYWJsZS5sZW5ndGgpXSA/PyBudWxsXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN0YXJ0RXhwbG9yYXRpb24oKTogUHJvbWlzZTxTdGFydEV4cGxvcmF0aW9uPiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmdldFNlbGVjdGVkTG9jYXRpb24oKVxuICAgIGlmICghc2VsZWN0ZWQpIHJldHVybiB7IGV4cGxvcmluZzogZmFsc2UsIHNlbGVjdGVkIH1cbiAgICBDb25zb2xlLmluZm8oXCJFeHBsb3JpbmdcIiwgc2VsZWN0ZWQpXG5cbiAgICAvLyBHbyB0byBzZWFzb25cbiAgICBpZiAoXG4gICAgICBzZWxlY3RlZC5yZWdpb24uc2Vhc29uICYmXG4gICAgICB0aGlzLmdldEN1cnJlbnRTZWFzb24oKSAhPT0gc2VsZWN0ZWQucmVnaW9uLnNlYXNvblxuICAgICkge1xuICAgICAgYXdhaXQgdGhpcy5jbGlja1NlYXNvbigpXG4gICAgICByZXR1cm4geyBleHBsb3Jpbmc6IGZhbHNlLCBzZWxlY3RlZCB9XG4gICAgfVxuXG4gICAgLy8gR28gdG8gcmVnaW9uXG4gICAgdGhpcy5jbGlja1JlZ2lvbihzZWxlY3RlZClcblxuICAgIC8vIEdvIHRvIGxvY2F0aW9uXG4gICAgYXdhaXQgdGhpcy5jbGlja0xvY2F0aW9uKHNlbGVjdGVkKVxuICAgIGF3YWl0IHRoaXMuY2xpY2tFeHBsb3JlKClcblxuICAgIFNlc3Npb25TdG9yYWdlLnNlbGVjdGVkTG9jYXRpb24gPSBudWxsXG4gICAgcmV0dXJuIHsgZXhwbG9yaW5nOiB0cnVlLCBzZWxlY3RlZCB9XG4gIH1cblxuICAvKipcbiAgICogV2FpdCBmb3IgdXAgdG8gMTAgbWludXRlcy5cbiAgICogQHJldHVybnMgd2hldGhlciB0aGUgZXhwbG9yYXRpb24gaXMgZmluaXNoZWQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHdhaXRFeHBsb3JhdGlvbihcbiAgICBzZWxlY3RlZD86IEF1dG9FeHBsb3JlTG9jYXRpb25cbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgZG9jdW1lbnRcbiAgICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcbiAgICAgICAgYC5taW5pbWFwW2RhdGEtbWFwaWQ9XCIke3NlbGVjdGVkPy5yZWdpb24uaWQgPz8gY3VycmVudFJlZ2lvbi5pZH1cIl1gXG4gICAgICApXG4gICAgICA/LmNsaWNrKClcblxuICAgIGxldCBtcyA9IDMgKiBEdXJhdGlvblVuaXQuc2Vjb25kXG4gICAgaWYgKHNlbGVjdGVkKSBtcyArPSBzZWxlY3RlZC5sb2NhdGlvbi50aW1lVG9FeHBsb3JlICogRHVyYXRpb25Vbml0Lm1pbnV0ZVxuICAgIGVsc2UgaWYgKHRpbWVMZWZ0RXhwbG9yYXRpb24gJiYgdGltZUxlZnRFeHBsb3JhdGlvbiA+IDApXG4gICAgICBtcyArPSB0aW1lTGVmdEV4cGxvcmF0aW9uICogRHVyYXRpb25Vbml0LnNlY29uZFxuICAgIGVsc2UgaWYgKFxuICAgICAgIXBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbiAmJlxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNtYXAtY29udGFpbmVyLnBlbmRpbmdcIilcbiAgICApIHtcbiAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBleHBsb3JhdGlvblJlc3VsdHMoKVxuICAgICAgaWYgKGpzb24ucmVzdWx0ICE9PSBSZXN1bHQuc3VjY2VzcykgcmV0dXJuIGZhbHNlXG5cbiAgICAgIGNvbnN0IGNhcHR1cmUgPSBqc29uLmRhdGEucmVzdWx0cy5maW5kKFxuICAgICAgICByZXN1bHQgPT4gcmVzdWx0LnR5cGUgPT09IFwiY2FwdHVyZVwiXG4gICAgICApXG4gICAgICBpZiAoIWNhcHR1cmUpIHJldHVybiBmYWxzZVxuICAgICAgYXdhaXQgY2FwdHVyZUVuZCgpXG5cbiAgICAgIC8vIFJlbG9hZGluZyBpcyB0aGUgb25seSBwb3NzaWJsZSBhY3Rpb24gaWYgdGhlIGV4cGxvcmF0aW9uIGZpbmlzaGVkIGluIGFcbiAgICAgIC8vIGRpZmZlcmVudCByZWdpb24uXG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBcIlJlbG9hZGluZyBiZWNhdXNlIHRoZSBleHBsb3JhdGlvbiBpcyBpbiBhbm90aGVyIHJlZ2lvbi5cIixcbiAgICAgICAgdGhpcy5nbG9iYWxzXG4gICAgICApXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgRHVyYXRpb25Vbml0Lm1pbnV0ZSkpXG4gICAgICBsb2NhdGlvbi5yZWxvYWQoKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAobXMgPiAxMCAqIER1cmF0aW9uVW5pdC5taW51dGUpIHJldHVybiBmYWxzZVxuXG4gICAgQ29uc29sZS5sb2coXG4gICAgICBgV2FpdGluZyBmb3IgdGhlIGV4cGxvcmF0aW9uIHRvIGVuZCBpbiAke01hdGguY2VpbChcbiAgICAgICAgbXMgLyBEdXJhdGlvblVuaXQuc2Vjb25kXG4gICAgICApfSBzZWNvbmRzLi4uYCxcbiAgICAgIHRoaXMuZ2xvYmFsc1xuICAgIClcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKVxuICAgIGF3YWl0IGNoYW5nZVJlZ2lvbihOdW1iZXIoc2VsZWN0ZWQ/LnJlZ2lvbi5pZCA/PyBjdXJyZW50UmVnaW9uLmlkKSlcblxuICAgIGlmIChcbiAgICAgIHRoaXMuZ2V0RXhwbG9yYXRpb25TdGF0dXMoKSA9PT0gRXhwbG9yYXRpb25TdGF0dXMucGVuZGluZyAmJlxuICAgICAgdGltZUxlZnRFeHBsb3JhdGlvbiAmJlxuICAgICAgdGltZUxlZnRFeHBsb3JhdGlvbiA8IDBcbiAgICApIHtcbiAgICAgIENvbnNvbGUuaW5mbyhcbiAgICAgICAgXCJSZWxvYWRpbmcgYmVjYXVzZSB0aGUgdGltZXIgaXMgZGVzeW5jaHJvbmlzZWQuXCIsXG4gICAgICAgIHRoaXMuZ2xvYmFsc1xuICAgICAgKVxuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIER1cmF0aW9uVW5pdC5zZWNvbmQpKVxuICAgICAgbG9jYXRpb24ucmVsb2FkKClcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBFeHBsb3JhdGlvbkFjdGlvbigpXG4iLCJpbXBvcnQgdHlwZSB7IEV4cGxvcmF0aW9uUmVzdWx0c0RhdGEgfSBmcm9tIFwiLi4vYXBpL2V4cGxvcmF0aW9uX3Jlc3VsdHNfZGF0YVwiXG5pbXBvcnQgdHlwZSB7IFBhY2tldCB9IGZyb20gXCIuLi9hcGkvcGFja2V0XCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwbG9yYXRpb25SZXN1bHRzKCk6IFByb21pc2U8XG4gIFBhY2tldDxFeHBsb3JhdGlvblJlc3VsdHNEYXRhPlxuPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxQYWNrZXQ8RXhwbG9yYXRpb25SZXN1bHRzRGF0YT4+KChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgdm9pZCAkLnBvc3QoXG4gICAgICBcIi9wZXQvZXhwbG9yYXRpb25SZXN1bHRzXCIsXG4gICAgICAoanNvbjogUGFja2V0PEV4cGxvcmF0aW9uUmVzdWx0c0RhdGE+KTogdm9pZCA9PiB7XG4gICAgICAgIFNlc3Npb25TdG9yYWdlLm1ldGEgPSBqc29uLm1ldGFcbiAgICAgICAgcmVzb2x2ZShqc29uKVxuXG4gICAgICAgIGlmIChqc29uLnJlc3VsdCAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAkLmZsYXZyTm90aWYoanNvbi5kYXRhKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuICB9KVxufVxuIiwiaW1wb3J0IHR5cGUgeyBFeHBsb3JhdGlvblJlc3VsdHNEYXRhIH0gZnJvbSBcIi4uL2FwaS9leHBsb3JhdGlvbl9yZXN1bHRzX2RhdGFcIlxuaW1wb3J0IHR5cGUgeyBQYWNrZXQgfSBmcm9tIFwiLi4vYXBpL3BhY2tldFwiXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCIuLi9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVFbmQoKTogUHJvbWlzZTxQYWNrZXQ8RXhwbG9yYXRpb25SZXN1bHRzRGF0YT4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHZvaWQgJC5wb3N0KFxuICAgICAgXCIvcGV0L2NhcHR1cmUvZW5kXCIsXG4gICAgICAoanNvbjogUGFja2V0PEV4cGxvcmF0aW9uUmVzdWx0c0RhdGE+KTogdm9pZCA9PiB7XG4gICAgICAgIFNlc3Npb25TdG9yYWdlLm1ldGEgPSBqc29uLm1ldGFcbiAgICAgICAgcmVzb2x2ZShqc29uKVxuXG4gICAgICAgIGlmIChqc29uLnJlc3VsdCAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAkLmZsYXZyTm90aWYoanNvbi5kYXRhKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuICB9KVxufVxuIiwiaW1wb3J0IHR5cGUgeyBNaW5pZ2FtZSB9IGZyb20gXCIuL21pbmlnYW1lXCJcblxuZXhwb3J0IGNvbnN0IGZsYXBweTogTWluaWdhbWUgPSB7XG4gIG5hbWU6IFwiRmxhcHB5XCIsXG4gIHNjb3JlTWluOiAxODAsXG4gIHNjb3JlTWF4OiAyMDAsXG4gIGRlbGF5TWluOiA2MF8wMDAsXG4gIGRlbGF5TWF4OiA3MF8wMDAsXG4gIGJ1dHRvblNlbGVjdG9yOiAnLm1pbmlnYW1lLXN0YXJ0IFtocmVmPVwiL21pbmlnYW1lcy9idWJibHRlbXBsZVwiXSAubmwtYnV0dG9uJyxcbn1cbiIsImltcG9ydCB0eXBlIHsgTWluaWdhbWUgfSBmcm9tIFwiLi9taW5pZ2FtZVwiXG5cbmV4cG9ydCBjb25zdCBoYXRjaGxpbmdzOiBNaW5pZ2FtZSA9IHtcbiAgbmFtZTogXCJIYXRjaGxpbmdzXCIsXG4gIHNjb3JlTWluOiAxOCxcbiAgc2NvcmVNYXg6IDIwLFxuICBkZWxheU1pbjogMzBfMDAwLFxuICBkZWxheU1heDogMzBfMDAwLFxuICBidXR0b25TZWxlY3RvcjogJy5taW5pZ2FtZS1zdGFydCBbaHJlZj1cIi9taW5pZ2FtZXMvY29jb29uaW5waWNrXCJdIC5ubC1idXR0b24nLFxufVxuIiwiaW1wb3J0IHR5cGUgeyBNaW5pZ2FtZSB9IGZyb20gXCIuL21pbmlnYW1lXCJcblxuZXhwb3J0IGNvbnN0IHBlZ2dsZTogTWluaWdhbWUgPSB7XG4gIG5hbWU6IFwiUGVnZ2xlXCIsXG4gIHNjb3JlTWluOiA5LFxuICBzY29yZU1heDogMTAsXG4gIGRlbGF5TWluOiAxMF8wMDAsXG4gIGRlbGF5TWF4OiAyMF8wMDAsXG4gIGJ1dHRvblNlbGVjdG9yOiAnLm1pbmlnYW1lLXN0YXJ0IFtocmVmPVwiL21pbmlnYW1lcy9nZW1ib21iXCJdIC5ubC1idXR0b24nLFxufVxuIiwiaW1wb3J0IHR5cGUgeyBHZXRQcml6ZXNEYXRhIH0gZnJvbSBcIi4uL2FwaS9nZXRfcHJpemVzX2RhdGFcIlxuaW1wb3J0IHR5cGUgeyBQYWNrZXQgfSBmcm9tIFwiLi4vYXBpL3BhY2tldFwiXG5pbXBvcnQgdHlwZSB7IFN0YXJ0R2FtZURhdGEgfSBmcm9tIFwiLi4vYXBpL3N0YXJ0X2dhbWVfZGF0YVwiXG5pbXBvcnQgXCIuLi9lbGRhcnlhL2pxdWVyeVwiXG5pbXBvcnQgeyBmbGFwcHkgfSBmcm9tIFwiLi9mbGFwcHlcIlxuaW1wb3J0IHsgaGF0Y2hsaW5ncyB9IGZyb20gXCIuL2hhdGNobGluZ3NcIlxuaW1wb3J0IHR5cGUgeyBNaW5pZ2FtZSB9IGZyb20gXCIuL21pbmlnYW1lXCJcbmltcG9ydCB7IHBlZ2dsZSB9IGZyb20gXCIuL3BlZ2dsZVwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwbGF5UGVnZ2xlKCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gcGxheShwZWdnbGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwbGF5RmxhcHB5KCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gcGxheShmbGFwcHkpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwbGF5SGF0Y2hsaW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIHBsYXkoaGF0Y2hsaW5ncylcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGxheShtaW5pZ2FtZTogTWluaWdhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gRGlzYWJsZSBidXR0b25zXG4gIGF3YWl0IG5ldyBQcm9taXNlPGJvb2xlYW4+KHJlc29sdmUgPT4ge1xuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgYnV0dG9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEJ1dHRvbkVsZW1lbnQ+KFxuICAgICAgICBcIi5taW5pZ2FtZXMtcnVsZXMgLmZsYXZyLWJ1dHRvblwiXG4gICAgICApXG5cbiAgICAgIGlmIChidXR0b25zLmxlbmd0aCkge1xuICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKVxuXG4gICAgICAgIGZvciAoY29uc3QgYnV0dG9uIG9mIGJ1dHRvbnMpIHtcbiAgICAgICAgICBidXR0b24uY2xhc3NMaXN0LmFkZChcImRpc2FibGVkXCIpXG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICB9XG4gICAgfSwgMjUwKVxuICB9KVxuXG4gIGNvbnN0IGpzb24gPSBhd2FpdCBleGVjdXRlKG1pbmlnYW1lKVxuICAkLmZsYXZyTm90aWYoYFBsYXlpbmcgPHN0cm9uZz4ke21pbmlnYW1lLm5hbWV9PC9zdHJvbmc+Li4uYClcblxuICBjb25zdCBnYW1lVG9rZW4gPSBqc29uLmRhdGFcbiAgY29uc3Qgc2NvcmUgPSByYW5kb21JbnQobWluaWdhbWUuc2NvcmVNaW4sIG1pbmlnYW1lLnNjb3JlTWF4KVxuICBjb25zdCBlbmNfdG9rZW4gPSB4b3JFbmNvZGUoZ2FtZVRva2VuLCBzY29yZS50b1N0cmluZygpKVxuICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCByYW5kb21JbnQobWluaWdhbWUuZGVsYXlNaW4sIG1pbmlnYW1lLmRlbGF5TWF4KSlcbiAgKVxuXG4gIGF3YWl0IGdldFByaXplcyhtaW5pZ2FtZSwgZ2FtZVRva2VuLCBzY29yZSlcbiAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHJhbmRvbUludCgxMDAwLCAzMDAwKSkpXG5cbiAgYXdhaXQgc2VuZChlbmNfdG9rZW4sIHNjb3JlLCBtaW5pZ2FtZS5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCByYW5kb21JbnQoMTAwMCwgMzAwMCkpKVxufVxuXG5mdW5jdGlvbiByYW5kb21JbnQobWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSArIG1pbilcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZShtaW5pZ2FtZTogTWluaWdhbWUpOiBQcm9taXNlPFBhY2tldDxTdGFydEdhbWVEYXRhPj4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8UGFja2V0PFN0YXJ0R2FtZURhdGE+PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBSZWNhcHRjaGEgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIFJlY2FwdGNoYS5leGVjdXRlKFxuICAgICAgICBgbWluaWdhbWVTdGFydCR7bWluaWdhbWUubmFtZX1gLFxuICAgICAgICAodG9rZW4pOiB2b2lkID0+XG4gICAgICAgICAgdm9pZCBzdGFydEdhbWUobWluaWdhbWUsIHRva2VuKS50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdClcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdm9pZCBzdGFydEdhbWUobWluaWdhbWUpLnRoZW4ocmVzb2x2ZSkuY2F0Y2gocmVqZWN0KVxuICAgIH1cbiAgfSlcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RhcnRHYW1lKFxuICBtaW5pZ2FtZTogTWluaWdhbWUsXG4gIHJlY2FwdGNoYVRva2VuPzogc3RyaW5nXG4pOiBQcm9taXNlPFBhY2tldDxTdGFydEdhbWVEYXRhPj4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8UGFja2V0PFN0YXJ0R2FtZURhdGE+PihcbiAgICAocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgICAgdm9pZCAkLmFqYXgoe1xuICAgICAgICB1cmw6IFwiL21pbmlnYW1lcy9hamF4X3N0YXJ0R2FtZVwiLFxuICAgICAgICB0eXBlOiBcInBvc3RcIixcbiAgICAgICAgZGF0YVR5cGU6IFwianNvblwiLFxuICAgICAgICBkYXRhOiByZWNhcHRjaGFUb2tlblxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBnYW1lOiBtaW5pZ2FtZS5uYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgIHJlY2FwdGNoYVRva2VuOiByZWNhcHRjaGFUb2tlbixcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgZ2FtZTogbWluaWdhbWUubmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgc3VjY2VzczogKGpzb246IFBhY2tldDxTdGFydEdhbWVEYXRhPik6IHZvaWQgPT4ge1xuICAgICAgICAgIHJlc29sdmUoanNvbilcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICByZWplY3QoKVxuICAgICAgICB9LFxuICAgICAgfSlcbiAgKVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRQcml6ZXMoXG4gIG1pbmlnYW1lOiBNaW5pZ2FtZSxcbiAgZ2FtZVRva2VuOiBzdHJpbmcsXG4gIHNjb3JlOiBudW1iZXJcbik6IFByb21pc2U8UGFja2V0PEdldFByaXplc0RhdGE+PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxQYWNrZXQ8R2V0UHJpemVzRGF0YT4+KFxuICAgIChyZXNvbHZlKTogdm9pZCA9PlxuICAgICAgdm9pZCAkLnBvc3QoXG4gICAgICAgIFwiL21pbmlnYW1lcy9hamF4X2dldFByaXplc1wiLFxuICAgICAgICB7IGdhbWU6IG1pbmlnYW1lLm5hbWUudG9Mb3dlckNhc2UoKSwgc2NvcmU6IHNjb3JlIH0sXG4gICAgICAgIChqc29uOiBQYWNrZXQ8R2V0UHJpemVzRGF0YT4pOiB2b2lkID0+IHtcbiAgICAgICAgICByZXNvbHZlKGpzb24pXG5cbiAgICAgICAgICBpZiAoanNvbi5yZXN1bHQgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgJC5mbGF2ck5vdGlmKFxuICAgICAgICAgICAgICBgUGxheWVkIDxzdHJvbmc+JHttaW5pZ2FtZS5uYW1lfTwvc3Ryb25nPiBmb3IgPHN0cm9uZyBjbGFzcz1cInByaWNlLWl0ZW1cIj4ke2pzb24uZGF0YS5tYWFuYX08L3N0cm9uZz4gPHNwYW4gY2xhc3M9XCJtYWFuYS1pY29uXCIgYWx0PVwibWFhbmFzXCI+PC9zcGFuPi5gXG4gICAgICAgICAgICApXG4gICAgICAgICAgZWxzZSAkLmZsYXZyTm90aWYoanNvbi5kYXRhKVxuICAgICAgICB9LFxuICAgICAgICBcImpzb25cIlxuICAgICAgKS5mYWlsKCgpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHJlc29sdmUoZ2V0UHJpemVzKG1pbmlnYW1lLCBnYW1lVG9rZW4sIHNjb3JlKSlcbiAgICAgICAgfSwgcmFuZG9tSW50KDEwMDAsIDMwMDApKVxuICAgICAgKVxuICApXG59XG5cbi8qKlxuICogU8OpY3VyaXNhdGlvbiBkZSBsJ2Vudm9pIGR1IHNjb3JlXG4gKiBCYXPDqSBzdXIgbCdlbmNvZGFnZSBYT1IgOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1hPUl9jaXBoZXJcbiAqIEVmZmVjdHVlIHVuIFhPUiBiaXQgw6AgYml0IGVudHJlIHVuZSBjaGFpbmUgZXQgdW5lIGNsw6lcbiAqL1xuZnVuY3Rpb24geG9yRW5jb2RlKHN0cjogc3RyaW5nLCBrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEFzc3VyZSBxdWUgbGVzIGRldXggcGFyYW3DqHRyZXMgc29pZW50IGRlcyBjaGFpbmVzIGRlIGNhcmFjdMOocmVcbiAgc3RyID0gc3RyLnRvU3RyaW5nKClcbiAga2V5ID0ga2V5LnRvU3RyaW5nKClcblxuICAvKiogRW5jb2RhZ2UgWE9SICovXG4gIGxldCB4b3IgPSBcIlwiXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItZm9yLW9mXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgbGV0IHRtcCA9IHN0cltpXVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwga2V5Lmxlbmd0aDsgKytqKSB7XG4gICAgICB0bXAgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRtcCEuY2hhckNvZGVBdCgwKSBeIGtleS5jaGFyQ29kZUF0KGopKVxuICAgIH1cbiAgICB4b3IgKz0gdG1wXG4gIH1cblxuICAvLyBSZW52b2llIGxlIHLDqXN1bHRhdCBlbiBlbmNvZGFudCBsZXMgY2FyYWN0w6hyZXMgc3DDqWNpYXV4IHBvdXZhbnQgcG9zZXIgcHJvYmzDqG1lIChcXG4gcGFyIGV4ZW1wbGUpXG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoeG9yKVxufVxuXG5hc3luYyBmdW5jdGlvbiBzZW5kKFxuICBlbmNfdG9rZW46IHN0cmluZyxcbiAgc2NvcmU6IG51bWJlcixcbiAgZ2FtZTogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIGlmICh0eXBlb2YgUmVjYXB0Y2hhICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBSZWNhcHRjaGEuZXhlY3V0ZShcbiAgICAgICAgXCJtaW5pZ2FtZVNhdmVcIiArIGdhbWUsXG4gICAgICAgIChyZWNhcHRjaGFUb2tlbik6IHZvaWQgPT5cbiAgICAgICAgICB2b2lkIHNhdmVTY29yZShlbmNfdG9rZW4sIHNjb3JlLCBnYW1lLCByZWNhcHRjaGFUb2tlbikudGhlbihyZXNvbHZlKVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB2b2lkIHNhdmVTY29yZShlbmNfdG9rZW4sIHNjb3JlLCBnYW1lKS50aGVuKHJlc29sdmUpXG4gICAgfVxuICB9KVxufVxuXG5hc3luYyBmdW5jdGlvbiBzYXZlU2NvcmUoXG4gIGVuY190b2tlbjogc3RyaW5nLFxuICBzY29yZTogbnVtYmVyLFxuICBnYW1lOiBzdHJpbmcsXG4gIHJlY2FwdGNoYVRva2VuPzogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIGNvbnN0IHRva2VuID0gZGVjb2RlVVJJQ29tcG9uZW50KGVuY190b2tlbilcblxuICAgIHZvaWQgJC5hamF4KHtcbiAgICAgIHR5cGU6IFwicG9zdFwiLFxuICAgICAgdXJsOiBcIi9taW5pZ2FtZXMvYWpheF9zYXZlU2NvcmVcIixcbiAgICAgIGRhdGE6IHJlY2FwdGNoYVRva2VuXG4gICAgICAgID8ge1xuICAgICAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICAgICAgc2NvcmU6IHNjb3JlLFxuICAgICAgICAgICAgZ2FtZTogZ2FtZSxcbiAgICAgICAgICAgIHJlY2FwdGNoYVRva2VuOiByZWNhcHRjaGFUb2tlbixcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICAgICAgc2NvcmU6IHNjb3JlLFxuICAgICAgICAgICAgZ2FtZTogZ2FtZSxcbiAgICAgICAgICB9LFxuICAgICAgc3VjY2VzczogKCk6IHZvaWQgPT4ge1xuICAgICAgICByZXNvbHZlKClcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKTogdm9pZCA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShzYXZlU2NvcmUoZW5jX3Rva2VuLCBzY29yZSwgZ2FtZSkpXG4gICAgICAgIH0sIHJhbmRvbUludCgxMDAwLCAzMDAwKSksXG4gICAgfSlcbiAgfSlcbn1cbiIsImltcG9ydCB7IENvbnNvbGUgfSBmcm9tIFwiLi4vY29uc29sZVwiXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCIuLi9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlXCJcbmltcG9ydCB0eXBlIHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcbmltcG9ydCB7IGxvYWRIZWFkZXJUYWtlb3ZlciB9IGZyb20gXCIuLi91aS9oZWFkZXJfdGFrZW92ZXJcIlxuaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tIFwiLi9jbGFzc2VzL2FjdGlvblwiXG5pbXBvcnQgYnV5QWN0aW9uIGZyb20gXCIuL2NsYXNzZXMvYnV5X2FjdGlvblwiXG5pbXBvcnQgZGFpbHlBY3Rpb24gZnJvbSBcIi4vY2xhc3Nlcy9kYWlseV9hY3Rpb25cIlxuaW1wb3J0IGV4cGxvcmF0aW9uQWN0aW9uIGZyb20gXCIuL2NsYXNzZXMvZXhwbG9yYXRpb25fYWN0aW9uXCJcbmltcG9ydCBtaW5pZ2FtZUFjdGlvbiBmcm9tIFwiLi9jbGFzc2VzL21pbmlnYW1lX2FjdGlvblwiXG5pbXBvcnQgd2FpdEFjdGlvbiBmcm9tIFwiLi9jbGFzc2VzL3dhaXRfYWN0aW9uXCJcblxuLyoqIEF1dG9tYXRlZCBlbnRyeSBwb2ludCBvZiB0aGUgdGFrZW92ZXIuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFRha2VvdmVyKCk6IHZvaWQge1xuICBpZiAoU2Vzc2lvblN0b3JhZ2UudGFrZW92ZXIpIHZvaWQgdGFrZW92ZXIoKVxufVxuXG4vKiogTWFudWFsIGVudHJ5IHBvaW50IG9mIHRoZSB0YWtlb3Zlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVUYWtlb3ZlcigpOiB2b2lkIHtcbiAgcmVzZXRUYWtlb3ZlcigpXG4gIFNlc3Npb25TdG9yYWdlLnRha2VvdmVyID0gIVNlc3Npb25TdG9yYWdlLnRha2VvdmVyXG5cbiAgbG9hZEhlYWRlclRha2VvdmVyKClcbiAgaWYgKFNlc3Npb25TdG9yYWdlLnRha2VvdmVyKVxuICAgICQuZmxhdnJOb3RpZihcIlRha2VvdmVyIG1vZGUgZW5hYmxlZC4gUGxlYXNlIGRvIG5vdCBpbnRlcmFjdCB3aXRoIHRoaXMgdGFiLlwiKVxuICBlbHNlICQuZmxhdnJOb3RpZihcIlRha2VvdmVyIG1vZGUgZGlzYWJsZWQuXCIpXG5cbiAgdm9pZCB0YWtlb3ZlcigpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldFRha2VvdmVyKCk6IHZvaWQge1xuICBTZXNzaW9uU3RvcmFnZS5hY3Rpb24gPSBudWxsXG4gIFNlc3Npb25TdG9yYWdlLmV4cGxvcmF0aW9uc0RvbmUgPSBmYWxzZVxuICBTZXNzaW9uU3RvcmFnZS5taW5pZ2FtZXNEb25lID0gZmFsc2VcbiAgU2Vzc2lvblN0b3JhZ2Uuc2VsZWN0ZWRMb2NhdGlvbiA9IG51bGxcbiAgU2Vzc2lvblN0b3JhZ2Uud2lzaGxpc3QgPSBbXVxufVxuXG5hc3luYyBmdW5jdGlvbiB0YWtlb3ZlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFTZXNzaW9uU3RvcmFnZS50YWtlb3ZlcikgcmV0dXJuXG4gIGlmIChkYWlseUFjdGlvbi5jb25kaXRpb24oKSkgYXdhaXQgZGFpbHlBY3Rpb24ucGVyZm9ybSgpXG5cbiAgY29uc3QgYWN0aW9uID0gYWN0aW9ucy5maW5kKGFjdGlvbiA9PiBhY3Rpb24ua2V5ID09PSBTZXNzaW9uU3RvcmFnZS5hY3Rpb24pXG4gIGlmICghYWN0aW9uKSB7XG4gICAgY2hhbmdlQWN0aW9uKClcbiAgICB2b2lkIHRha2VvdmVyKClcbiAgICByZXR1cm5cbiAgfVxuXG4gIENvbnNvbGUuaW5mbyhcIkFjdGlvbjpcIiwgYWN0aW9uLmtleSlcblxuICBpZiAoYWN0aW9uLmNvbmRpdGlvbigpICYmIChhd2FpdCBhY3Rpb24ucGVyZm9ybSgpKSkgcmV0dXJuXG4gIGVsc2Uge1xuICAgIGNoYW5nZUFjdGlvbigpXG4gICAgdm9pZCB0YWtlb3ZlcigpXG4gICAgcmV0dXJuXG4gIH1cbn1cblxuY29uc3QgYWN0aW9uczogQWN0aW9uW10gPSBbXG4gIG1pbmlnYW1lQWN0aW9uLFxuICBleHBsb3JhdGlvbkFjdGlvbixcbiAgYnV5QWN0aW9uLFxuICB3YWl0QWN0aW9uLFxuXVxuXG5mdW5jdGlvbiBjaGFuZ2VBY3Rpb24oKTogVGFrZW92ZXJBY3Rpb24ge1xuICBjb25zdCBuZXh0ID1cbiAgICBhY3Rpb25zLmZpbmRJbmRleChhY3Rpb24gPT4gYWN0aW9uLmtleSA9PT0gU2Vzc2lvblN0b3JhZ2UuYWN0aW9uKSArIDFcblxuICByZXR1cm4gKFNlc3Npb25TdG9yYWdlLmFjdGlvbiA9XG4gICAgYWN0aW9uc1tuZXh0ID49IGFjdGlvbnMubGVuZ3RoID8gMCA6IG5leHRdIS5rZXkpXG59XG4iLCJpbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcbmltcG9ydCB7IHBsYXlGbGFwcHksIHBsYXlIYXRjaGxpbmdzLCBwbGF5UGVnZ2xlIH0gZnJvbSBcIi4uLy4uL21pbmlnYW1lcy9lbWlsZVwiXG5pbXBvcnQgeyBmbGFwcHkgfSBmcm9tIFwiLi4vLi4vbWluaWdhbWVzL2ZsYXBweVwiXG5pbXBvcnQgeyBoYXRjaGxpbmdzIH0gZnJvbSBcIi4uLy4uL21pbmlnYW1lcy9oYXRjaGxpbmdzXCJcbmltcG9ydCB0eXBlIHsgTWluaWdhbWUgfSBmcm9tIFwiLi4vLi4vbWluaWdhbWVzL21pbmlnYW1lXCJcbmltcG9ydCB7IHBlZ2dsZSB9IGZyb20gXCIuLi8uLi9taW5pZ2FtZXMvcGVnZ2xlXCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuaW1wb3J0IHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcbmltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uXCJcbmltcG9ydCB7IGNsaWNrIH0gZnJvbSBcIi4uL2NsaWNrXCJcblxuY2xhc3MgTWluaWdhbWVBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb24ge1xuICByZWFkb25seSBrZXkgPSBUYWtlb3ZlckFjdGlvbi5taW5pZ2FtZXNcblxuICBjb25kaXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIExvY2FsU3RvcmFnZS5taW5pZ2FtZXMgJiYgIVNlc3Npb25TdG9yYWdlLm1pbmlnYW1lc0RvbmVcbiAgfVxuXG4gIC8qKiBEZXRlcm1pbmVzIGlmIHRoZSBtaW5pZ2FtZXMgc2hvdWxkIGJlIHBsYXllZCByaWdodCBub3cuXG4gICAqIEByZXR1cm5zIHdoZXRoZXIgdGhlIG1pbmlnYW1lcyBhcmUgY3VycmVudGx5IGJlaW5nIHBsYXllZC5cbiAgICovXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgc3dpdGNoIChsb2NhdGlvbi5wYXRobmFtZSkge1xuICAgICAgY2FzZSBcIi9taW5pZ2FtZXNcIjoge1xuICAgICAgICBjb25zdCBwbGF5aW5nID1cbiAgICAgICAgICB0aGlzLm9wZW5NaW5pZ2FtZShwZWdnbGUpIHx8XG4gICAgICAgICAgdGhpcy5vcGVuTWluaWdhbWUoZmxhcHB5KSB8fFxuICAgICAgICAgIHRoaXMub3Blbk1pbmlnYW1lKGhhdGNobGluZ3MpXG5cbiAgICAgICAgaWYgKCFwbGF5aW5nKSB7XG4gICAgICAgICAgU2Vzc2lvblN0b3JhZ2UubWluaWdhbWVzRG9uZSA9IHRydWVcbiAgICAgICAgICBkb2N1bWVudFxuICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTEJ1dHRvbkVsZW1lbnQ+KFxuICAgICAgICAgICAgICAnLm1pbmlnYW1lcy1ydWxlcyBbcmVsPVwiYnRuLWNhbmNlbFwiXSdcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgID8uY2xpY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBsYXlpbmdcbiAgICAgIH1cblxuICAgICAgY2FzZSBcIi9taW5pZ2FtZXMvZ2VtYm9tYlwiOlxuICAgICAgICBhd2FpdCBwbGF5UGVnZ2xlKClcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSBcIi9taW5pZ2FtZXMvYnViYmx0ZW1wbGVcIjpcbiAgICAgICAgYXdhaXQgcGxheUZsYXBweSgpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgXCIvbWluaWdhbWVzL2NvY29vbmlucGlja1wiOlxuICAgICAgICBhd2FpdCBwbGF5SGF0Y2hsaW5ncygpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGF3YWl0IGNsaWNrPEhUTUxBbmNob3JFbGVtZW50PihcIi5tYWluLW1lbnUtbWluaWdhbWVzIGFcIilcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBhd2FpdCBjbGljazxIVE1MQW5jaG9yRWxlbWVudD4oXCIubWFpbi1tZW51LW1pbmlnYW1lcyBhXCIpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8qKiBDbGljayBvbiBhIG1pbmlnYW1lJ3MgbGluay4gQHJldHVybnMgd2hldGhlciB0aGUgbWluaWdhbWUgd2FzIG9wZW5lZC4gKi9cbiAgcHJpdmF0ZSBvcGVuTWluaWdhbWUobWluaWdhbWU6IE1pbmlnYW1lKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3RhcnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxTcGFuRWxlbWVudD4oXG4gICAgICBtaW5pZ2FtZS5idXR0b25TZWxlY3RvclxuICAgIClcbiAgICBpZiAoIXN0YXJ0KSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBzdGFydC5jbGljaygpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgTWluaWdhbWVBY3Rpb24oKVxuIiwiaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gXCIuLi8uLi9jb25zb2xlXCJcbmltcG9ydCB7IFRha2VvdmVyQWN0aW9uIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS90YWtlb3Zlcl9hY3Rpb24uZW51bVwiXG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25cIlxuXG5jbGFzcyBXYWl0QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkga2V5ID0gVGFrZW92ZXJBY3Rpb24ud2FpdFxuXG4gIGNvbmRpdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgYXN5bmMgcGVyZm9ybSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBDb25zb2xlLmxvZyhgV2FpdGluZyBmb3IgMTAgbWludXRlcy4uLmApXG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4ocmVzb2x2ZSA9PlxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICB9LCAxMCAqIDYwICogMTAwMClcbiAgICApXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFdhaXRBY3Rpb24oKVxuIiwiaW1wb3J0IHR5cGUgeyBQYXJzYWJsZUl0ZW0gfSBmcm9tIFwiLi9hcHBlYXJhbmNlL2ludGVyZmFjZXMvcGFyc2FibGVfaXRlbVwiXG5pbXBvcnQgdHlwZSB7IEF2YXRhciB9IGZyb20gXCIuL2VsZGFyeWEvYXZhdGFyXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydE91dGZpdChzZWxlY3Rvcjogc3RyaW5nLCBuYW1lID0gXCJvdXRmaXRcIik6IHZvaWQge1xuICBjb25zdCBhdmF0YXIgPSBTYWNoYS5BdmF0YXIuYXZhdGFyc1tzZWxlY3Rvcl1cbiAgaWYgKCFhdmF0YXIpIHJldHVyblxuXG4gIGNvbnN0IG91dGZpdCA9IGdldEl0ZW1zVG9TYXZlKGF2YXRhcilcblxuICBjb25zdCBocmVmID1cbiAgICBcImRhdGE6dGV4dC9qc29uO2NoYXJzZXQ9dXRmLTgsXCIgK1xuICAgIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShvdXRmaXQsIG51bGwsIFwiXFx0XCIpKVxuXG4gIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKVxuICBhLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgaHJlZilcbiAgYS5zZXRBdHRyaWJ1dGUoXCJkb3dubG9hZFwiLCBgJHtuYW1lfS5qc29uYClcbiAgYS5jbGljaygpXG59XG5cbmZ1bmN0aW9uIGdldEl0ZW1zVG9TYXZlKGF2YXRhcjogQXZhdGFyKTogUGFyc2FibGVJdGVtW10ge1xuICByZXR1cm4gYXZhdGFyLmNoaWxkcmVuLm1hcChjaGlsZCA9PiB7XG4gICAgY29uc3QgaXRlbSA9IGNoaWxkLmdldEl0ZW0oKVxuICAgIHJldHVybiB7XG4gICAgICBpZDogaXRlbS5faWQsXG4gICAgICBncm91cDogaXRlbS5fZ3JvdXAsXG4gICAgICBuYW1lOiBpdGVtLl9uYW1lLFxuICAgICAgaW1hZ2U6IGl0ZW0uX2ltYWdlLFxuICAgICAgdHlwZTogaXRlbS5fdHlwZSxcbiAgICAgIGNhdGVnb3J5SWQ6IGl0ZW0uX2NhdGVnb3J5SWQsXG4gICAgICBoaWRkZW5DYXRlZ29yaWVzOiBPYmplY3QudmFsdWVzKGl0ZW0uX2hpZGRlbkNhdGVnb3JpZXMpLFxuICAgICAgYW5pbWF0aW9uRGF0YTogaXRlbS5fYW5pbWF0aW9uRGF0YSxcbiAgICAgIGxvY2tlZDogaXRlbS5fbG9ja2VkLFxuICAgIH1cbiAgfSlcbn1cbiIsImltcG9ydCB0eXBlIHsgSXRlbSB9IGZyb20gXCIuLi9lbGRhcnlhL2l0ZW1cIlxuaW1wb3J0IHsgZXhwb3J0T3V0Zml0IH0gZnJvbSBcIi4uL291dGZpdFwiXG5pbXBvcnQgdHlwZSB7IFBhcnNhYmxlSXRlbSB9IGZyb20gXCIuL2ludGVyZmFjZXMvcGFyc2FibGVfaXRlbVwiXG5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRQcmV2aWV3KCk6IHZvaWQge1xuICBleHBvcnRPdXRmaXQoXCIjYXBwZWFyYW5jZS1wcmV2aWV3XCIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbXBvcnRPdXRmaXQoKTogdm9pZCB7XG4gIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpXG4gIGlucHV0LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJmaWxlXCIpXG4gIGlucHV0LnNldEF0dHJpYnV0ZShcImFjY2VwdFwiLCBcImFwcGxpY2F0aW9uL2pzb25cIilcbiAgaW5wdXQuY2xpY2soKVxuXG4gIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBldmVudCA9PiB7XG4gICAgaWYgKCFldmVudC50YXJnZXQpIHJldHVyblxuICAgIGNvbnN0IGZpbGVzID0gKDxIVE1MSW5wdXRFbGVtZW50PmV2ZW50LnRhcmdldCkuZmlsZXNcbiAgICBpZiAoIWZpbGVzKSByZXR1cm5cbiAgICBjb25zdCBmaWxlID0gZmlsZXNbMF1cbiAgICBpZiAoIWZpbGUpIHJldHVyblxuICAgIHZvaWQgZmlsZS50ZXh0KCkudGhlbihhc3luYyB2YWx1ZSA9PiB7XG4gICAgICBpZiAoIXZhbHVlKSByZXR1cm5cblxuICAgICAgY29uc3Qgb3V0Zml0OiBQYXJzYWJsZUl0ZW1bXSA9IEpTT04ucGFyc2UodmFsdWUpXG4gICAgICBjb25zdCBhdmF0YXIgPSBTYWNoYS5BdmF0YXIuYXZhdGFyc1tcIiNhcHBlYXJhbmNlLXByZXZpZXdcIl1cbiAgICAgIGlmICghYXZhdGFyKSByZXR1cm5cblxuICAgICAgJC5mbGF2ck5vdGlmKFwiSW1wb3J0aW5nIG91dGZpdC4gUGxlYXNlIHdhaXQuLi5cIilcblxuICAgICAgLy8gR2V0IGFsbCBjYXRlZ29yaWVzXG4gICAgICBjb25zdCBjYXRlZ29yaWVzID0gbmV3IFNldDxzdHJpbmc+KClcbiAgICAgIGZvciAoY29uc3QgY2xvdGhpbmcgb2Ygb3V0Zml0KSB7XG4gICAgICAgIGNhdGVnb3JpZXMuYWRkKGNsb3RoaW5nLnR5cGUpXG4gICAgICB9XG5cbiAgICAgIC8vIE9wZW4gYWxsIGNhdGVnb3JpZXNcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBBcnJheS5mcm9tKGNhdGVnb3JpZXMudmFsdWVzKCkpLm1hcChhc3luYyBjYXRlZ29yeSA9PlxuICAgICAgICAgIG9wZW5DYXRlZ29yeShjYXRlZ29yeSlcbiAgICAgICAgKVxuICAgICAgKVxuXG4gICAgICAvLyBHZXQgYWxsIGdyb3Vwc1xuICAgICAgY29uc3QgZ3JvdXBzID0gbmV3IFNldDxudW1iZXI+KClcbiAgICAgIGZvciAoY29uc3QgY2xvdGhpbmcgb2Ygb3V0Zml0KSB7XG4gICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ncm91cD1cIiR7Y2xvdGhpbmcuZ3JvdXB9XCJdYCkpXG4gICAgICAgICAgZ3JvdXBzLmFkZChjbG90aGluZy5ncm91cClcbiAgICAgIH1cblxuICAgICAgLy8gT3BlbiBhbGwgZ3JvdXBzXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgQXJyYXkuZnJvbShncm91cHMudmFsdWVzKCkpLm1hcChhc3luYyBncm91cCA9PiBvcGVuR3JvdXAoZ3JvdXApKVxuICAgICAgKVxuXG4gICAgICAvLyBHZXQgdGhlIGl0ZW1zIGZyb20gYGF2YWlsYWJsZUl0ZW1zYFxuICAgICAgY29uc3Qgd29ybkl0ZW1zOiBJdGVtW10gPSBbXVxuICAgICAgZm9yIChjb25zdCBjbG90aGluZyBvZiBvdXRmaXQpIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGF2YWlsYWJsZUl0ZW1zW2Nsb3RoaW5nLmlkXVxuICAgICAgICBpZiAoaXRlbSkgd29ybkl0ZW1zLnB1c2goaXRlbSlcbiAgICAgIH1cblxuICAgICAgcmVtb3ZlQ2xvdGhlcygpXG4gICAgICBhdmF0YXIuYWRkSXRlbXMod29ybkl0ZW1zKVxuICAgICAgaW5pdGlhbGl6ZVNlbGVjdGVkSXRlbXMoKVxuICAgICAgaW5pdGlhbGl6ZUhpZGRlbkNhdGVnb3JpZXMoKVxuXG4gICAgICAkLmZsYXZyTm90aWYoXCJJbXBvcnRlZCBvdXRmaXQhXCIpXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2xvdGhlcygpOiB2b2lkIHtcbiAgY29uc3QgYXZhdGFyID0gU2FjaGEuQXZhdGFyLmF2YXRhcnNbXCIjYXBwZWFyYW5jZS1wcmV2aWV3XCJdXG4gIGlmICghYXZhdGFyKSByZXR1cm5cblxuICBmb3IgKGxldCBpID0gYXZhdGFyLmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaXRlbVJlbmRlciA9IGF2YXRhci5jaGlsZHJlbltpXVxuICAgIGlmICghaXRlbVJlbmRlcikgY29udGludWVcblxuICAgIGNvbnN0IGl0ZW0gPSBpdGVtUmVuZGVyLmdldEl0ZW0oKVxuICAgIGlmIChTYWNoYS5BdmF0YXIucmVtb3ZlSXRlbUZyb21BbGxBdmF0YXJzKGl0ZW0pKSB7XG4gICAgICAkKGAjYXBwZWFyYW5jZS1pdGVtLSR7aXRlbS5faWR9YCkucmVtb3ZlQ2xhc3MoXCJzZWxlY3RlZFwiKVxuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBvcGVuR3JvdXAoZ3JvdXA6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgY29uc3QgY2F0ZWdvcnlDb250YWluZXIgPSAkKFwiI2FwcGVhcmFuY2UtaXRlbXMtZ3JvdXAtXCIgKyBncm91cC50b1N0cmluZygpKVxuICAgIGlmIChjYXRlZ29yeUNvbnRhaW5lci5oYXNDbGFzcyhcImFjdGl2ZVwiKSkge1xuICAgICAgcmVzb2x2ZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2F0ZWdvcnlDb250YWluZXIubGVuZ3RoIDw9IDApIHtcbiAgICAgIHZvaWQgJC5nZXQoXG4gICAgICAgIFwiL3BsYXllci9vcGVuR3JvdXAvXCIgKyBncm91cC50b1N0cmluZygpLFxuICAgICAgICAodmlldzogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAgICAgJCh2aWV3KS5oaWRlKCkuYXBwZW5kVG8oXCIjYXBwZWFyYW5jZS1pdGVtc1wiKVxuICAgICAgICB9XG4gICAgICApLmFsd2F5cygoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb2x2ZSgpXG4gICAgfVxuICB9KVxufVxuXG5hc3luYyBmdW5jdGlvbiBvcGVuQ2F0ZWdvcnkoY2F0ZWdvcnk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgY29uc3QgY2F0ZWdvcnlDb250YWluZXIgPSAkKFwiI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktXCIgKyBjYXRlZ29yeSlcbiAgICBpZiAoY2F0ZWdvcnlDb250YWluZXIuaGFzQ2xhc3MoXCJhY3RpdmVcIikpIHtcbiAgICAgIHJlc29sdmUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNhdGVnb3J5Q29udGFpbmVyLmxlbmd0aCA8PSAwKSB7XG4gICAgICB2b2lkICQucG9zdChcIi9wbGF5ZXIvb3BlbkNhdGVnb3J5L1wiICsgY2F0ZWdvcnksICh2aWV3OiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICAgICAgJCh2aWV3KS5oaWRlKCkuYXBwZW5kVG8oXCIjYXBwZWFyYW5jZS1pdGVtc1wiKVxuICAgICAgfSkuYWx3YXlzKCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXNvbHZlKClcbiAgICB9XG4gIH0pXG59XG4iLCJmdW5jdGlvbiBkb3dubG9hZENhbnZhcyhjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCBuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgLy8gTWFrZSBpdCBhbiBpbWFnZVxuICBjb25zdCBpbWFnZSA9IGNhbnZhcy50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIilcblxuICAvLyBDcmVhdGUgYSBsaW5rXG4gIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKVxuICBhLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgaW1hZ2UpXG4gIGEuc2V0QXR0cmlidXRlKFwiZG93bmxvYWRcIiwgYCR7bmFtZX0ucG5nYClcblxuICAvLyBQbGFjZSBpdCBvbiB0aGUgYm9keVxuICBhLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpXG5cbiAgLy8gU3RhcnQgdGhlIGRvd25sb2FkXG4gIGEuY2xpY2soKVxuXG4gIC8vIFJlbW92ZSB0aGUgbGlua1xuICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZEZhY2UoKTogdm9pZCB7XG4gIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTENhbnZhc0VsZW1lbnQ+KFxuICAgIFwiI2F2YXRhci1tZW51LWNvbnRhaW5lciBjYW52YXNcIlxuICApXG4gIGlmICghY2FudmFzKSB7XG4gICAgY29uc29sZS53YXJuKFwiQ291bGRuJ3QgZmluZCB0aGUgZ3VhcmRpYW4ncyBmYWNlLlwiKVxuICAgIHJldHVyblxuICB9XG5cbiAgZG93bmxvYWRDYW52YXMoY2FudmFzLCBcImZhY2VcIilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkR3VhcmRpYW4oKTogdm9pZCB7XG4gIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTENhbnZhc0VsZW1lbnQ+KFxuICAgIFwiI2hvbWUtYXZhdGFyLXBsYXllciBjYW52YXNcIlxuICApXG4gIGlmICghY2FudmFzKSB7XG4gICAgY29uc29sZS53YXJuKFwiQ291bGRuJ3QgZmluZCB0aGUgZ3VhcmRpYW4uXCIpXG4gICAgcmV0dXJuXG4gIH1cblxuICBkb3dubG9hZENhbnZhcyhjYW52YXMsIGdldE5hbWUoKSA/PyBcImd1YXJkaWFuXCIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZEFwcGVhcmFuY2UoKTogdm9pZCB7XG4gIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTENhbnZhc0VsZW1lbnQ+KFxuICAgIFwiI2FwcGVhcmFuY2UtcHJldmlldyBjYW52YXNcIlxuICApXG4gIGlmICghY2FudmFzKSB7XG4gICAgY29uc29sZS53YXJuKFwiQ291bGRuJ3QgZmluZCB0aGUgZ3VhcmRpYW4uXCIpXG4gICAgcmV0dXJuXG4gIH1cblxuICBkb3dubG9hZENhbnZhcyhjYW52YXMsIGdldE5hbWUoKSA/PyBcImd1YXJkaWFuXCIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lKCk6IHN0cmluZyB8IG51bGwge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXZhdGFyLW1lbnUtY29udGFpbmVyLW91dGVyPnBcIik/LnRleHRDb250ZW50ID8/XG4gICAgbnVsbFxuICApXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IGV4cG9ydFByZXZpZXcsIGltcG9ydE91dGZpdCB9IGZyb20gXCIuLi9hcHBlYXJhbmNlL2Zhdm9yaXRlc19hY3Rpb25zXCJcbmltcG9ydCB7IGRvd25sb2FkQXBwZWFyYW5jZSB9IGZyb20gXCIuLi9kb3dubG9hZC1jYW52YXNcIlxuaW1wb3J0IHR5cGUgeyBGYXZvcml0ZXNBY3Rpb24gfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvZmF2b3JpdGVzX2FjdGlvblwiXG5cbmxldCBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlciB8IG51bGxcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBcHBlYXJhbmNlKCk6IHZvaWQge1xuICBvYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gIG9ic2VydmVyID0gbnVsbFxuXG4gIGNvbnN0IGFwcGVhcmFuY2VJdGVtcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYXBwZWFyYW5jZS1pdGVtc1wiKVxuICBpZiAoIWFwcGVhcmFuY2VJdGVtcykgcmV0dXJuXG5cbiAgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihsb2FkQXBwZWFyYW5jZSlcbiAgb2JzZXJ2ZXIub2JzZXJ2ZShhcHBlYXJhbmNlSXRlbXMsIHtcbiAgICBjaGlsZExpc3Q6IHRydWUsXG4gIH0pXG5cbiAgbG9hZEZhdm9yaXRlc0FjdGlvbnMoKVxufVxuXG5mdW5jdGlvbiBsb2FkRmF2b3JpdGVzQWN0aW9ucygpOiB2b2lkIHtcbiAgY29uc3QgYWN0aW9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZmF2b3JpdGVzLWFjdGlvbnNcIilcbiAgaWYgKCFhY3Rpb25zIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZmF2b3JpdGVzLWFjdGlvbi1lZVwiKSkgcmV0dXJuXG5cbiAgY29uc3QgYWN0aW9uVGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2Zhdm9yaXRlc19hY3Rpb24uaHRtbFwiKVxuXG4gIGNvbnN0IGltcG9ydEFjdGlvbjogRmF2b3JpdGVzQWN0aW9uID0ge1xuICAgIGlkOiBcImltcG9ydC1vdXRmaXRcIixcbiAgICB0ZXh0OiBcIkltcG9ydFwiLFxuICB9XG4gIGNvbnN0IGV4cG9ydEFjdGlvbjogRmF2b3JpdGVzQWN0aW9uID0ge1xuICAgIGlkOiBcImV4cG9ydC1vdXRmaXRcIixcbiAgICB0ZXh0OiBcIkV4cG9ydFwiLFxuICB9XG4gIGNvbnN0IGRvd25sb2FkQWN0aW9uOiBGYXZvcml0ZXNBY3Rpb24gPSB7XG4gICAgaWQ6IFwiZG93bmxvYWQtb3V0Zml0XCIsXG4gICAgdGV4dDogXCJEb3dubG9hZFwiLFxuICB9XG5cbiAgYWN0aW9ucy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICBhY3Rpb25UZW1wbGF0ZS5yZW5kZXIoaW1wb3J0QWN0aW9uKSArXG4gICAgICBhY3Rpb25UZW1wbGF0ZS5yZW5kZXIoZXhwb3J0QWN0aW9uKSArXG4gICAgICBhY3Rpb25UZW1wbGF0ZS5yZW5kZXIoZG93bmxvYWRBY3Rpb24pXG4gIClcblxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChpbXBvcnRBY3Rpb24uaWQpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaW1wb3J0T3V0Zml0KVxuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKGV4cG9ydEFjdGlvbi5pZClcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBleHBvcnRQcmV2aWV3KVxuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKGRvd25sb2FkQWN0aW9uLmlkKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGRvd25sb2FkQXBwZWFyYW5jZSlcbn1cbiIsImltcG9ydCB0eXBlIHsgQ2Fyb3VzZWxOZXdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2Nhcm91c2VsX25ld3NcIlxuXG5leHBvcnQgY29uc3QgY2Fyb3VzZWxCZWVtb292QW5ub3lhbmNlczogQ2Fyb3VzZWxOZXdzID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6XG4gICAgXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvY2Fyb3VzZWxfYmVlbW9vdl9hbm5veWFuY2VzLnBuZ1wiLFxuICBoNDogXCJCZWVtb292IEFubm95YW5jZXNcIixcbiAgaHJlZjogXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL0JlZW1vb3YtQW5ub3lhbmNlc1wiLFxuICBpZDogXCJjYXJvdXNlbC1iZWVtb292LWFubm95YW5jZXNcIixcbiAgcDogXCJCbG9jayBzb21lIG9mIEVsZGFyeWEncyBhbm5veWFuY2VzLlwiLFxufVxuIiwiaW1wb3J0IHR5cGUgeyBDYXJvdXNlbE5ld3MgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvY2Fyb3VzZWxfbmV3c1wiXG5cbmV4cG9ydCBjb25zdCBjYXJvdXNlbERvd25sb2FkRmFjZTogQ2Fyb3VzZWxOZXdzID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6XG4gICAgXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvY2Fyb3VzZWxfZG93bmxvYWRfZmFjZS5wbmdcIixcbiAgaWQ6IFwiY2Fyb3VzZWwtZG93bmxvYWQtZmFjZVwiLFxuICBoNDogXCJEb3dubG9hZCB5b3VyIGZhY2UhXCIsXG4gIHA6IFwiQ2xpY2sgaGVyZSB0byBkb3dubG9hZCB5b3VyIGd1YXJkaWFuJ3MgZmFjZS5cIixcbn1cbiIsImltcG9ydCB0eXBlIHsgQ2Fyb3VzZWxOZXdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2Nhcm91c2VsX25ld3NcIlxuXG5leHBvcnQgY29uc3QgY2Fyb3VzZWxEb3dubG9hZEd1YXJkaWFuOiBDYXJvdXNlbE5ld3MgPSB7XG4gIGJhY2tncm91bmRJbWFnZTpcbiAgICBcImh0dHBzOi8vZ2l0bGFiLmNvbS9OYXRvQm9yYW0vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLS9yYXcvbWFzdGVyL2ltYWdlcy9jYXJvdXNlbF9kb3dubG9hZF9ndWFyZGlhbi5wbmdcIixcbiAgaWQ6IFwiY2Fyb3VzZWwtZG93bmxvYWQtZ3VhcmRpYW5cIixcbiAgaDQ6IFwiRG93bmxvYWQgeW91ciBndWFyZGlhbiFcIixcbiAgcDogXCJDbGljayBoZXJlIHRvIGRvd25sb2FkIHlvdXIgZ3VhcmRpYW4uXCIsXG59XG4iLCJpbXBvcnQgdHlwZSB7IENhcm91c2VsTmV3cyB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9jYXJvdXNlbF9uZXdzXCJcblxuZXhwb3J0IGNvbnN0IGNhcm91c2VsRUU6IENhcm91c2VsTmV3cyA9IHtcbiAgYmFja2dyb3VuZEltYWdlOlxuICAgIFwiaHR0cHM6Ly9naXRsYWIuY29tL05hdG9Cb3JhbS9lbGRhcnlhLWVuaGFuY2VtZW50cy8tL3Jhdy9tYXN0ZXIvaW1hZ2VzL2Nhcm91c2VsX2VsZGFyeWFfZW5oYW5jZW1lbnRzLnBuZ1wiLFxuICBoNDogYCR7R00uaW5mby5zY3JpcHQubmFtZX0gdiR7R00uaW5mby5zY3JpcHQudmVyc2lvbn1gLFxuICBocmVmOiBHTS5pbmZvLnNjcmlwdC5uYW1lc3BhY2UsXG4gIGlkOiBcImNhcm91c2VsLWVsZGFyeWEtZW5oYW5jZW1lbnRzXCIsXG4gIHA6IEdNLmluZm8uc2NyaXB0LmRlc2NyaXB0aW9uLFxufVxuIiwiaW1wb3J0IHR5cGUgeyBDYXJvdXNlbE5ld3MgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvY2Fyb3VzZWxfbmV3c1wiXG5cbmV4cG9ydCBjb25zdCBjYXJvdXNlbFRha2VvdmVyOiBDYXJvdXNlbE5ld3MgPSB7XG4gIGJhY2tncm91bmRJbWFnZTpcbiAgICBcImh0dHBzOi8vZ2l0bGFiLmNvbS9OYXRvQm9yYW0vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLS9yYXcvbWFzdGVyL2ltYWdlcy9jYXJvdXNlbF90YWtlb3Zlci5wbmdcIixcbiAgaWQ6IFwiY2Fyb3VzZWwtdGFrZW92ZXJcIixcbiAgaDQ6IFwiVGFrZW92ZXJcIixcbiAgcDogXCJHaXZlIHVwIHRoaXMgdGFiIHRvIHBlcmZvcm0gYXV0b21hdGVkIGFjdGlvbnMuXCIsXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IGNhcm91c2VsQmVlbW9vdkFubm95YW5jZXMgfSBmcm9tIFwiLi4vY2Fyb3VzZWwvY2Fyb3VzZWxfYmVlbW9vdl9hbm5veWFuY2VzXCJcbmltcG9ydCB7IGNhcm91c2VsRG93bmxvYWRGYWNlIH0gZnJvbSBcIi4uL2Nhcm91c2VsL2Nhcm91c2VsX2Rvd25sb2FkX2ZhY2VcIlxuaW1wb3J0IHsgY2Fyb3VzZWxEb3dubG9hZEd1YXJkaWFuIH0gZnJvbSBcIi4uL2Nhcm91c2VsL2Nhcm91c2VsX2Rvd25sb2FkX2d1YXJkaWFuXCJcbmltcG9ydCB7IGNhcm91c2VsRUUgfSBmcm9tIFwiLi4vY2Fyb3VzZWwvY2Fyb3VzZWxfZWxkYXJ5YV9lbmhhbmNlbWVudHNcIlxuaW1wb3J0IHsgY2Fyb3VzZWxUYWtlb3ZlciB9IGZyb20gXCIuLi9jYXJvdXNlbC9jYXJvdXNlbF90YWtlb3ZlclwiXG5pbXBvcnQgeyBkb3dubG9hZEZhY2UsIGRvd25sb2FkR3VhcmRpYW4gfSBmcm9tIFwiLi4vZG93bmxvYWQtY2FudmFzXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tIFwiLi4vc2Vzc2lvbl9zdG9yYWdlL3Nlc3Npb25fc3RvcmFnZVwiXG5pbXBvcnQgeyB0b2dnbGVUYWtlb3ZlciB9IGZyb20gXCIuLi90YWtlb3Zlci9icmFpblwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ2Fyb3VzZWwoKTogdm9pZCB7XG4gIGNvbnN0IGNhcm91c2VsSW5uZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2Nhcm91c2VsLWlubmVyXCIpXG4gIGlmICghY2Fyb3VzZWxJbm5lciB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmNhcm91c2VsLWVlXCIpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBJbXBvcnQgY2Fyb3VzZWwgdGVtcGxhdGVcbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2Nhcm91c2VsX25ld3MuaHRtbFwiKVxuXG4gIGNvbnN0IGNvbnRleHRzID0gW1xuICAgIC8vIEludHJvXG4gICAgY2Fyb3VzZWxFRSxcblxuICAgIC8vIEZlYXR1cmVzXG4gICAgLi4uKExvY2FsU3RvcmFnZS5taW5pZ2FtZXMgfHxcbiAgICBMb2NhbFN0b3JhZ2UuZXhwbG9yYXRpb25zIHx8XG4gICAgTG9jYWxTdG9yYWdlLm1hcmtldFxuICAgICAgPyBbY2Fyb3VzZWxUYWtlb3Zlcl1cbiAgICAgIDogW10pLFxuICAgIGNhcm91c2VsRG93bmxvYWRHdWFyZGlhbixcbiAgICBjYXJvdXNlbERvd25sb2FkRmFjZSxcblxuICAgIC8vIEFkc1xuICAgIGNhcm91c2VsQmVlbW9vdkFubm95YW5jZXMsXG4gIF1cblxuICAvLyBBZGQgZW50cmllcyB0byB0aGUgY2Fyb3VzZWxcbiAgY2Fyb3VzZWxJbm5lci5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICBjb250ZXh0cy5tYXAoYmFubmVyID0+IHRlbXBsYXRlLnJlbmRlcihiYW5uZXIpKS5qb2luKFwiXFxuXCIpXG4gIClcblxuICAvLyBBZGQgbGlua3NcbiAgZm9yIChjb25zdCBjYXJvdXNlbCBvZiBjb250ZXh0cykge1xuICAgIGlmICghY2Fyb3VzZWwuaHJlZikgY29udGludWVcblxuICAgIGNvbnN0IGVsZW1lbnQgPSBjYXJvdXNlbElubmVyLnF1ZXJ5U2VsZWN0b3IoYCMke2Nhcm91c2VsLmlkfWApXG4gICAgaWYgKCFlbGVtZW50KSBjb250aW51ZVxuXG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKSBvcGVuKGNhcm91c2VsLmhyZWYsIFwiX2JsYW5rXCIpXG4gICAgfSlcbiAgfVxuXG4gIC8vIEFkZCBjbGljayBldmVudHNcblxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChjYXJvdXNlbERvd25sb2FkRmFjZS5pZClcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBkb3dubG9hZEZhY2UpXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoY2Fyb3VzZWxEb3dubG9hZEd1YXJkaWFuLmlkKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGRvd25sb2FkR3VhcmRpYW4pXG5cbiAgY29uc3QgdGFrZW92ZXJBbmNob3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjYXJvdXNlbFRha2VvdmVyLmlkKVxuICB0YWtlb3ZlckFuY2hvcj8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICB0b2dnbGVUYWtlb3ZlcigpXG4gICAgdGFrZW92ZXJUaXRsZSh0YWtlb3ZlckFuY2hvcilcbiAgfSlcblxuICBpZiAodGFrZW92ZXJBbmNob3IpIHRha2VvdmVyVGl0bGUodGFrZW92ZXJBbmNob3IpXG59XG5cbmZ1bmN0aW9uIHRha2VvdmVyVGl0bGUodGFrZW92ZXJBbmNob3I6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gIGNvbnN0IHRha2VvdmVySDQgPSB0YWtlb3ZlckFuY2hvci5xdWVyeVNlbGVjdG9yKFwiaDRcIilcbiAgaWYgKHRha2VvdmVySDQpIHtcbiAgICB0YWtlb3Zlckg0LmlubmVyVGV4dCA9IGAke1xuICAgICAgU2Vzc2lvblN0b3JhZ2UudGFrZW92ZXIgPyBcIkRpc2FibGVcIiA6IFwiRW5hYmxlXCJcbiAgICB9IFRha2VvdmVyYFxuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHR5cGUgeyBXaXNoZWRJdGVtIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2Uvd2lzaGVkX2l0ZW1cIlxuaW1wb3J0IHR5cGUgeyBNYXJrZXRFbnRyeSB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9pbnRlcmZhY2VzL21hcmtldF9lbnRyeVwiXG5pbXBvcnQgeyBnZXRJdGVtRGV0YWlscyB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZV9oYW5kbGVyc1wiXG5cbmxldCBtYXJrZXRPYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlciB8IG51bGxcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRNYXJrZXQoKTogdm9pZCB7XG4gIG1hcmtldE9ic2VydmVyPy5kaXNjb25uZWN0KClcbiAgbWFya2V0T2JzZXJ2ZXIgPSBudWxsXG5cbiAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lICE9PSBcIi9tYXJrZXRwbGFjZVwiKSByZXR1cm5cblxuICAvLyBgLm1hcmtldHBsYWNlLXNlYXJjaC1pdGVtc2AgaXMgdGhlIGNvbnRhaW5lciB3aG9zZSBIVE1MIGNvbnRlbnQgaXMgYmVpbmdcbiAgLy8gcmVwbGFjZWQgb24gZXZlcnkgYWN0aW9uLlxuICBjb25zdCBzZWFyY2hJdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTFVMaXN0RWxlbWVudD4oXG4gICAgXCIubWFya2V0cGxhY2Utc2VhcmNoLWl0ZW1zXCJcbiAgKVxuICBpZiAoIXNlYXJjaEl0ZW1zKSByZXR1cm5cblxuICBtYXJrZXRPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGxvYWRXaXNobGlzdClcbiAgbWFya2V0T2JzZXJ2ZXIub2JzZXJ2ZShzZWFyY2hJdGVtcywge1xuICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgfSlcblxuICBsb2FkV2lzaGxpc3QoKVxufVxuXG5mdW5jdGlvbiBsb2FkV2lzaGxpc3QoKTogdm9pZCB7XG4gIGZvciAoY29uc3QgbGkgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MTElFbGVtZW50PihcbiAgICBcIi5tYXJrZXRwbGFjZS1hYnN0cmFjdFwiXG4gICkpIHtcbiAgICBsaS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAgIChfOiBNdXRhdGlvblJlY29yZFtdLCBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcik6IHZvaWQgPT4ge1xuICAgICAgICAgIGNvbnN0IG1hcmtldEVudHJ5ID0gZ2V0SXRlbURldGFpbHMobGkpXG4gICAgICAgICAgaWYgKCFtYXJrZXRFbnRyeSkgcmV0dXJuXG5cbiAgICAgICAgICBhZGRXaXNoaXN0QnV0dG9uKG1hcmtldEVudHJ5LCBvYnNlcnZlcilcbiAgICAgICAgfVxuICAgICAgKS5vYnNlcnZlKDxOb2RlPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFya2V0cGxhY2Utem9vbVwiKSwge1xuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkV2lzaGlzdEJ1dHRvbihcbiAgbWFya2V0RW50cnk6IE1hcmtldEVudHJ5LFxuICBvYnNlcnZlcj86IE11dGF0aW9uT2JzZXJ2ZXJcbik6IHZvaWQge1xuICBjb25zdCBidXR0b25zQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgXCIjbWFya2V0cGxhY2UtaXRlbURldGFpbFwiXG4gIClcbiAgaWYgKCFidXR0b25zQ29udGFpbmVyKSByZXR1cm5cbiAgb2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKVxuXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFya2V0cGxhY2UtaXRlbURldGFpbC1pbmZvLWF1dG9idXlcIik/LnJlbW92ZSgpXG4gIGNvbnN0IGJ1dHRvblRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hdXRvX2J1eV9idXR0b24uaHRtbFwiKVxuICBidXR0b25zQ29udGFpbmVyLmluc2VydEFkamFjZW50SFRNTChcImJlZm9yZWVuZFwiLCBidXR0b25UZW1wbGF0ZS5yZW5kZXIoe30pKVxuXG4gIGJ1dHRvbnNDb250YWluZXJcbiAgICAucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIjbWFya2V0cGxhY2UtaXRlbURldGFpbC1pbmZvLWF1dG9idXlcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBhZGRUb1dpc2hsaXN0RmxhdnIobWFya2V0RW50cnkpXG4gICAgfSlcbn1cblxuZnVuY3Rpb24gYWRkVG9XaXNobGlzdEZsYXZyKG1hcmtldEVudHJ5OiBNYXJrZXRFbnRyeSk6IHZvaWQge1xuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvYXV0b19idXlfZmxhdnIuaHRtbFwiKVxuXG4gICQuZmxhdnIoe1xuICAgIGNvbnRlbnQ6IHRlbXBsYXRlLnJlbmRlcih7fSksXG4gICAgYnV0dG9uczoge1xuICAgICAgY2xvc2U6IHsgc3R5bGU6IFwiY2xvc2VcIiB9LFxuICAgICAgc2F2ZToge1xuICAgICAgICBhY3Rpb246ICgpID0+IHNhdmUobWFya2V0RW50cnkpLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGRpYWxvZzogXCJwcm9tcHRcIixcbiAgICBwcm9tcHQ6IHtcbiAgICAgIHZhbHVlOiBcIlwiLFxuICAgIH0sXG4gICAgb25CdWlsZDogJGNvbnRhaW5lciA9PiB7XG4gICAgICAkY29udGFpbmVyLmFkZENsYXNzKFwibmV3LWxheW91dC1wb3B1cFwiKVxuXG4gICAgICBkb2N1bWVudFxuICAgICAgICAucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcIi5mbGF2ci1wcm9tcHRcIilcbiAgICAgICAgPy5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgKHsga2V5IH0pID0+IHtcbiAgICAgICAgICBpZiAoa2V5ICE9PSBcIkVudGVyXCIpIHJldHVyblxuICAgICAgICAgIHNhdmUobWFya2V0RW50cnkpXG4gICAgICAgIH0pXG4gICAgfSxcbiAgfSlcbn1cblxuZnVuY3Rpb24gc2F2ZShtYXJrZXRFbnRyeTogTWFya2V0RW50cnkpOiBib29sZWFuIHtcbiAgY29uc3QgcHJpY2UgPSBOdW1iZXIoXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcIi5mbGF2ci1wcm9tcHRcIik/LnZhbHVlLnRyaW0oKVxuICApXG4gIGlmICghcHJpY2UgfHwgcHJpY2UgPD0gMCkge1xuICAgICQuZmxhdnJOb3RpZihcIlRoaXMgaXMgbm90IGEgdmFsaWQgcHJpY2UuXCIpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCB3aXNobGlzdCA9IExvY2FsU3RvcmFnZS53aXNobGlzdC5maWx0ZXIoXG4gICAgd2lzaGxpc3RFbnRyeSA9PiB3aXNobGlzdEVudHJ5Lmljb24gIT09IG1hcmtldEVudHJ5Lmljb25cbiAgKVxuICBjb25zdCB3aXNoZWQ6IFdpc2hlZEl0ZW0gPSB7IC4uLm1hcmtldEVudHJ5LCBwcmljZSB9XG4gIHdpc2hsaXN0LnB1c2god2lzaGVkKVxuICBMb2NhbFN0b3JhZ2Uud2lzaGxpc3QgPSB3aXNobGlzdFxuXG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9mbGF2cl9ub3RpZi9hZGRlZF90b193aXNobGlzdC5odG1sXCIpXG4gICQuZmxhdnJOb3RpZih0ZW1wbGF0ZS5yZW5kZXIod2lzaGVkKSlcbiAgcmV0dXJuIHRydWVcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgY2hhbmdlUmVnaW9uIH0gZnJvbSBcIi4uL2FqYXgvY2hhbmdlX3JlZ2lvblwiXG5pbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiLi4vYXBpL3Jlc3VsdC5lbnVtXCJcbmltcG9ydCB0eXBlIHsgTWFwUmVnaW9uIH0gZnJvbSBcIi4uL2VsZGFyeWEvY3VycmVudF9yZWdpb25cIlxuaW1wb3J0IHR5cGUgeyBBdXRvRXhwbG9yZUxvY2F0aW9uIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvYXV0b19leHBsb3JlX2xvY2F0aW9uXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHR5cGUgeyBBdXRvRXhwbG9yZUJ1dHRvbiB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9hdXRvX2V4cGxvcmVfYnV0dG9uXCJcblxubGV0IHBldE9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbFxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZFBldCgpOiB2b2lkIHtcbiAgcGV0T2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKVxuICBwZXRPYnNlcnZlciA9IG51bGxcblxuICBpZiAobG9jYXRpb24ucGF0aG5hbWUgIT09IFwiL3BldFwiKSByZXR1cm5cblxuICAvLyBgLnBhZ2UtbWFpbi1jb250YWluZXJgIGNoYW5nZXMgYmFja2dyb3VuZCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnRseVxuICAvLyBzZWxlY3RlZCByZWdpb24uXG4gIGNvbnN0IG1haW5Db250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcbiAgICBcIi5wYWdlLW1haW4tY29udGFpbmVyXCJcbiAgKVxuICBpZiAoIW1haW5Db250YWluZXIpIHJldHVyblxuXG4gIHBldE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobG9hZFBldClcbiAgcGV0T2JzZXJ2ZXIub2JzZXJ2ZShtYWluQ29udGFpbmVyLCB7XG4gICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgfSlcblxuICBsb2FkRXhwbG9yYXRpb25zKClcbn1cblxuZnVuY3Rpb24gbG9hZEV4cGxvcmF0aW9ucygpOiB2b2lkIHtcbiAgY29uc3QgYXV0b0V4cGxvcmVMb2NhdGlvbnMgPSBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnNcblxuICBmb3IgKGNvbnN0IGRpdiBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxEaXZFbGVtZW50PihcbiAgICBcIi5tYXAtbG9jYXRpb25bZGF0YS1pZF1cIlxuICApKSB7XG4gICAgY29uc3QgbG9jYXRpb25JZCA9IE51bWJlcihkaXYuZ2V0QXR0cmlidXRlKFwiZGF0YS1pZFwiKSlcbiAgICBpZiAoIWxvY2F0aW9uSWQpIGNvbnRpbnVlXG5cbiAgICBsb2FkUGljdG9NYXAoYXV0b0V4cGxvcmVMb2NhdGlvbnMsIGRpdilcblxuICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAgIChfOiBNdXRhdGlvblJlY29yZFtdLCBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcik6IHZvaWQgPT4ge1xuICAgICAgICAgIGFkZEF1dG9FeHBsb3JlQnV0dG9uKGxvY2F0aW9uSWQsIG9ic2VydmVyKVxuICAgICAgICB9XG4gICAgICApLm9ic2VydmUoPE5vZGU+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYXAtbG9jYXRpb24tcHJldmlld1wiKSwge1xuICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZEF1dG9FeHBsb3JlQnV0dG9uKFxuICBsb2NhdGlvbklkOiBudW1iZXIsXG4gIG9ic2VydmVyPzogTXV0YXRpb25PYnNlcnZlclxuKTogdm9pZCB7XG4gIGNvbnN0IGJ1dHRvbnNDb250YWluZXIgPVxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiI2J1dHRvbnMtY29udGFpbmVyXCIpXG4gIGlmICghYnV0dG9uc0NvbnRhaW5lcikgcmV0dXJuXG4gIG9ic2VydmVyPy5kaXNjb25uZWN0KClcblxuICAvLyBQYXJhbWV0ZXJzIHRvIGJlIGluamVjdGVkIGludG8gdGhlIHRlbXBsYXRlXG4gIGNvbnN0IGNvbnRleHQ6IEF1dG9FeHBsb3JlQnV0dG9uID0ge1xuICAgIGxvY2F0aW9uSWQsXG4gICAgYWN0aXZlOiBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMuc29tZShcbiAgICAgIHNhdmVkID0+IHNhdmVkLmxvY2F0aW9uLmlkID09PSBsb2NhdGlvbklkLnRvU3RyaW5nKClcbiAgICApLFxuICAgIHJlZ2lvbklkOiBOdW1iZXIoXG4gICAgICBkb2N1bWVudFxuICAgICAgICAucXVlcnlTZWxlY3RvcihcIi5taW5pbWFwLmN1cnJlbnRbZGF0YS1tYXBpZF1cIilcbiAgICAgICAgPy5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1hcGlkXCIpXG4gICAgKSxcbiAgfVxuXG4gIC8vIEFkZCB0aGUgYXV0byBleHBsb3JlIGJ1dHRvblxuICBidXR0b25zQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIjYXV0by1leHBsb3JlLWJ1dHRvblwiKT8ucmVtb3ZlKClcbiAgY29uc3QgYXV0b0V4cGxvcmVUZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvYXV0b19leHBsb3JlX2J1dHRvbi5odG1sXCIpXG4gIGJ1dHRvbnNDb250YWluZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgYXV0b0V4cGxvcmVUZW1wbGF0ZS5yZW5kZXIoY29udGV4dClcbiAgKVxuXG4gIC8vIEJpbmQgYGF1dG9FeHBsb3JlYCBhbmQgYGxvYWRQaWN0b01hcHNgXG4gIGJ1dHRvbnNDb250YWluZXJcbiAgICAucXVlcnlTZWxlY3RvcjxIVE1MQnV0dG9uRWxlbWVudD4oXCIjYXV0by1leHBsb3JlLWJ1dHRvblwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIHZvaWQgYXV0b0V4cGxvcmUoY29udGV4dCkudGhlbihsb2FkUGljdG9NYXBzKVxuICAgIH0pXG5cbiAgdm9pZCBkaXNhYmxlRXhwbG9yZShjb250ZXh0KVxufVxuXG5hc3luYyBmdW5jdGlvbiBkaXNhYmxlRXhwbG9yZShjb250ZXh0OiBBdXRvRXhwbG9yZUJ1dHRvbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBlbnRyeSA9IGF3YWl0IGdldEF1dG9FeHBsb3JlRW50cnkoY29udGV4dC5yZWdpb25JZCwgY29udGV4dC5sb2NhdGlvbklkKVxuICBpZiAoIWVudHJ5KSByZXR1cm5cblxuICBpZiAocGV0RW5lcmd5IDwgTnVtYmVyKGVudHJ5LmxvY2F0aW9uLmVuZXJneVJlcXVpcmVkKSlcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImV4cGxvcmUtYnV0dG9uXCIpPy5jbGFzc0xpc3QuYWRkKFwiZGlzYWJsZWRcIilcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXV0b0V4cGxvcmUoY29udGV4dDogQXV0b0V4cGxvcmVCdXR0b24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKGNvbnRleHQuYWN0aXZlKSB7XG4gICAgY29uc3QgZmlsdGVyZWRMb2NhdGlvbnMgPSBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMuZmlsdGVyKFxuICAgICAgc2F2ZWQgPT4gc2F2ZWQubG9jYXRpb24uaWQgIT09IGNvbnRleHQubG9jYXRpb25JZC50b1N0cmluZygpXG4gICAgKVxuICAgIExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucyA9IGZpbHRlcmVkTG9jYXRpb25zXG4gICAgYWRkQXV0b0V4cGxvcmVCdXR0b24oY29udGV4dC5sb2NhdGlvbklkKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgbmV3QXV0b0V4cGxvcmUgPSBhd2FpdCBnZXRBdXRvRXhwbG9yZUVudHJ5KFxuICAgIGNvbnRleHQucmVnaW9uSWQsXG4gICAgY29udGV4dC5sb2NhdGlvbklkXG4gIClcbiAgaWYgKCFuZXdBdXRvRXhwbG9yZSkgcmV0dXJuXG5cbiAgY29uc3QgbmV3TG9jYXRpb25zID0gTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zXG4gIG5ld0xvY2F0aW9ucy5wdXNoKG5ld0F1dG9FeHBsb3JlKVxuICBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMgPSBuZXdMb2NhdGlvbnNcbiAgYWRkQXV0b0V4cGxvcmVCdXR0b24oY29udGV4dC5sb2NhdGlvbklkKVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRBdXRvRXhwbG9yZUVudHJ5KFxuICByZWdpb25JZDogbnVtYmVyLFxuICBsb2NhdGlvbklkOiBudW1iZXJcbik6IFByb21pc2U8QXV0b0V4cGxvcmVMb2NhdGlvbiB8IG51bGw+IHtcbiAgY29uc3QgcmVnaW9uID0gYXdhaXQgZ2V0UmVnaW9uKHJlZ2lvbklkKVxuICBpZiAoIXJlZ2lvbikgcmV0dXJuIG51bGxcblxuICBjb25zdCBsb2NhdGlvbiA9IHJlZ2lvbi5sb2NhdGlvbnMuZmluZChcbiAgICBsb2NhdGlvbiA9PiBsb2NhdGlvbi5pZCA9PT0gbG9jYXRpb25JZC50b1N0cmluZygpXG4gIClcbiAgaWYgKCFsb2NhdGlvbikgcmV0dXJuIG51bGxcblxuICByZXR1cm4ge1xuICAgIGxvY2F0aW9uLFxuICAgIHJlZ2lvbixcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZWdpb24oaWQ6IG51bWJlcik6IFByb21pc2U8TWFwUmVnaW9uIHwgbnVsbD4ge1xuICBpZiAoaWQudG9TdHJpbmcoKSA9PT0gY3VycmVudFJlZ2lvbi5pZCkgcmV0dXJuIGN1cnJlbnRSZWdpb25cblxuICBjb25zdCBqc29uID0gYXdhaXQgY2hhbmdlUmVnaW9uKGlkKVxuICBpZiAoanNvbi5yZXN1bHQgPT09IFJlc3VsdC5zdWNjZXNzKSByZXR1cm4ganNvbi5kYXRhLmN1cnJlbnRSZWdpb25cblxuICByZXR1cm4gbnVsbFxufVxuXG4vLyBQaWN0byBtYXBcblxuZnVuY3Rpb24gbG9hZFBpY3RvTWFwcygpOiB2b2lkIHtcbiAgY29uc3QgYXV0b0V4cGxvcmVMb2NhdGlvbnMgPSBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnNcbiAgZm9yIChjb25zdCBkaXYgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MRGl2RWxlbWVudD4oXG4gICAgXCIubWFwLWxvY2F0aW9uW2RhdGEtaWRdXCJcbiAgKSkge1xuICAgIGxvYWRQaWN0b01hcChhdXRvRXhwbG9yZUxvY2F0aW9ucywgZGl2KVxuICB9XG59XG5cbmZ1bmN0aW9uIGxvYWRQaWN0b01hcChcbiAgYXV0b0V4cGxvcmVMb2NhdGlvbnM6IEF1dG9FeHBsb3JlTG9jYXRpb25bXSxcbiAgZGl2OiBIVE1MRGl2RWxlbWVudFxuKTogdm9pZCB7XG4gIGNvbnN0IG1hcExvY2F0aW9uID0gZGl2LmdldEF0dHJpYnV0ZShcImRhdGEtaWRcIilcbiAgaWYgKCFtYXBMb2NhdGlvbikgcmV0dXJuXG5cbiAgZGl2LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGF1dG9FeHBsb3JlTG9jYXRpb25zLnNvbWUoXG4gICAgc2F2ZWQgPT4gc2F2ZWQubG9jYXRpb24uaWQgPT09IG1hcExvY2F0aW9uXG4gIClcbiAgICA/IFwidXJsKC9zdGF0aWMvaW1nL25ldy1sYXlvdXQvcGV0L2ljb25zL3BpY3RvX21hcF9leHBsby5wbmcpXCJcbiAgICA6IFwidXJsKC9zdGF0aWMvaW1nL25ldy1sYXlvdXQvcGV0L2ljb25zL3BpY3RvX21hcC5wbmcpXCJcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgZXhwb3J0T3V0Zml0IH0gZnJvbSBcIi4uL291dGZpdFwiXG5pbXBvcnQgdHlwZSB7IFByb2ZpbGVDb250YWN0QWN0aW9uIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL3Byb2ZpbGVfY29udGFjdF9hY3Rpb25cIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZFByb2ZpbGUoKTogdm9pZCB7XG4gIGNvbnN0IHByb2ZpbGVDb250YWN0QWN0aW9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgIFwicHJvZmlsZS1jb250YWN0LWFjdGlvbnNcIlxuICApXG4gIGlmIChcbiAgICAhcHJvZmlsZUNvbnRhY3RBY3Rpb25zIHx8XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5wcm9maWxlLWNvbnRhY3QtYWN0aW9uLWVlXCIpXG4gICkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL3Byb2ZpbGVfY29udGFjdF9hY3Rpb24uaHRtbFwiKVxuICBjb25zdCBwcm9maWxlQWN0aW9uRXhwb3J0OiBQcm9maWxlQ29udGFjdEFjdGlvbiA9IHtcbiAgICBpZDogXCJwcm9maWxlLWNvbnRhY3QtYWN0aW9uLWV4cG9ydFwiLFxuICAgIGFjdGlvbkRlc2NyaXB0aW9uOiBcIkV4cG9ydCBvdXRmaXRcIixcbiAgfVxuXG4gIC8vIEFkZCBlbnRyaWVzXG4gIHByb2ZpbGVDb250YWN0QWN0aW9ucy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICB0ZW1wbGF0ZS5yZW5kZXIocHJvZmlsZUFjdGlvbkV4cG9ydClcbiAgKVxuXG4gIC8vIEFkZCBjbGljayBldmVudHNcbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQocHJvZmlsZUFjdGlvbkV4cG9ydC5pZClcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBleHBvcnRQcm9maWxlKVxufVxuXG5mdW5jdGlvbiBleHBvcnRQcm9maWxlKCk6IHZvaWQge1xuICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEhlYWRpbmdFbGVtZW50PihcbiAgICBcIiNtYWluLXNlY3Rpb24gLnNlY3Rpb24tdGl0bGVcIlxuICApXG5cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKFNhY2hhLkF2YXRhci5hdmF0YXJzKS5maWx0ZXIoa2V5ID0+XG4gICAga2V5LnN0YXJ0c1dpdGgoXCIjcGxheWVyUHJvZmlsZUF2YXRhclwiKVxuICApXG5cbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGV4cG9ydE91dGZpdChrZXksIHRpdGxlPy50ZXh0Q29udGVudD8udHJpbSgpKVxuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IGdldE5hbWUgfSBmcm9tIFwiLi4vZG93bmxvYWQtY2FudmFzXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZFNldHRpbmdzKCk6IHZvaWQge1xuICBjb25zdCBhY2NvdW50UmlnaHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FjY291bnQtcmlnaHQgZGl2XCIpXG4gIGlmICghYWNjb3VudFJpZ2h0IHx8IGFjY291bnRSaWdodC5xdWVyeVNlbGVjdG9yKFwiLmFjY291bnQtZWUtYmxvY1wiKSkgcmV0dXJuXG5cbiAgY29uc3Qgc2V0dGluZ3NUZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvc2V0dGluZ3MuaHRtbFwiKVxuXG4gIGFjY291bnRSaWdodC5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICBzZXR0aW5nc1RlbXBsYXRlLnJlbmRlcihMb2NhbFN0b3JhZ2Uuc2V0dGluZ3MpXG4gIClcblxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImVlLWRlYnVnLWVuYWJsZWRcIik/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgTG9jYWxTdG9yYWdlLmRlYnVnID0gIUxvY2FsU3RvcmFnZS5kZWJ1Z1xuICAgIHJlbG9hZFNldHRpbmdzKClcbiAgfSlcblxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChcImVlLW1pbmlnYW1lcy1lbmFibGVkXCIpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgTG9jYWxTdG9yYWdlLm1pbmlnYW1lcyA9ICFMb2NhbFN0b3JhZ2UubWluaWdhbWVzXG4gICAgICByZWxvYWRTZXR0aW5ncygpXG4gICAgfSlcblxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChcImVlLWV4cGxvcmF0aW9ucy1lbmFibGVkXCIpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgTG9jYWxTdG9yYWdlLmV4cGxvcmF0aW9ucyA9ICFMb2NhbFN0b3JhZ2UuZXhwbG9yYXRpb25zXG4gICAgICByZWxvYWRTZXR0aW5ncygpXG4gICAgfSlcblxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChcImVlLW1hcmtldC1lbmFibGVkXCIpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgTG9jYWxTdG9yYWdlLm1hcmtldCA9ICFMb2NhbFN0b3JhZ2UubWFya2V0XG4gICAgICByZWxvYWRTZXR0aW5ncygpXG4gICAgfSlcblxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChcImVlLWltcG9ydFwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGltcG9ydFNldHRpbmdzKVxuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKFwiZWUtZXhwb3J0XCIpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZXhwb3J0U2V0dGluZ3MpXG59XG5cbmZ1bmN0aW9uIHJlbG9hZFNldHRpbmdzKCk6IHZvaWQge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcIi5hY2NvdW50LWVlLWJsb2NcIik/LnJlbW92ZSgpXG4gIGxvYWRTZXR0aW5ncygpXG59XG5cbmZ1bmN0aW9uIGltcG9ydFNldHRpbmdzKCk6IHZvaWQge1xuICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKVxuICBpbnB1dC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwiZmlsZVwiKVxuICBpbnB1dC5zZXRBdHRyaWJ1dGUoXCJhY2NlcHRcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpXG4gIGlucHV0LmNsaWNrKClcblxuICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgZXZlbnQgPT4ge1xuICAgIGlmICghZXZlbnQudGFyZ2V0KSByZXR1cm5cbiAgICBjb25zdCBmaWxlcyA9ICg8SFRNTElucHV0RWxlbWVudD5ldmVudC50YXJnZXQpLmZpbGVzXG4gICAgaWYgKCFmaWxlcykgcmV0dXJuXG4gICAgY29uc3QgZmlsZSA9IGZpbGVzWzBdXG4gICAgaWYgKCFmaWxlKSByZXR1cm5cbiAgICB2b2lkIGZpbGUudGV4dCgpLnRoZW4odmFsdWUgPT4ge1xuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuXG5cbiAgICAgIExvY2FsU3RvcmFnZS5zZXR0aW5ncyA9IEpTT04ucGFyc2UodmFsdWUpXG5cbiAgICAgIHJlbG9hZFNldHRpbmdzKClcbiAgICAgICQuZmxhdnJOb3RpZihcIkltcG9ydGVkIHNldHRpbmdzIVwiKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGV4cG9ydFNldHRpbmdzKCk6IHZvaWQge1xuICBjb25zdCBocmVmID1cbiAgICBcImRhdGE6dGV4dC9qc29uO2NoYXJzZXQ9dXRmLTgsXCIgK1xuICAgIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShMb2NhbFN0b3JhZ2Uuc2V0dGluZ3MsIG51bGwsIFwiXFx0XCIpKVxuXG4gIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKVxuICBhLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgaHJlZilcbiAgYS5zZXRBdHRyaWJ1dGUoXG4gICAgXCJkb3dubG9hZFwiLFxuICAgIGAke2dldE5hbWUoKSA/PyBcImVsZGFyeWEtZW5oYW5jZW1lbnRzXCJ9LXNldHRpbmdzLmpzb25gXG4gIClcbiAgYS5jbGljaygpXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHR5cGUgeyBXaXNobGlzdFNldHRpbmdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL3dpc2hsaXN0X3NldHRpbmdzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRXaXNobGlzdCgpOiB2b2lkIHtcbiAgY29uc3QgbWFya2V0cGxhY2VNZW51ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYXJrZXRwbGFjZS1tZW51XCIpXG4gIGlmICghbWFya2V0cGxhY2VNZW51KSByZXR1cm5cblxuICBpZiAoIW1hcmtldHBsYWNlTWVudS5xdWVyeVNlbGVjdG9yKFwiI3dpc2hsaXN0LWJ1dHRvblwiKSkge1xuICAgIGZvciAoY29uc3QgYSBvZiBtYXJrZXRwbGFjZU1lbnUucXVlcnlTZWxlY3RvckFsbChcImFcIikpIHtcbiAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgcGFnZUxvYWQoYS5ocmVmLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0cnVlKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBtYXJrZXRwbGFjZU1lbnUucXVlcnlTZWxlY3RvcihcIiN3aXNobGlzdC1idXR0b25cIik/LnJlbW92ZSgpXG4gIGNvbnN0IHdpc2hsaXN0QnV0dG9uVGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL3dpc2hsaXN0X2J1dHRvbi5odG1sXCIpXG4gIG1hcmtldHBsYWNlTWVudS5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICB3aXNobGlzdEJ1dHRvblRlbXBsYXRlLnJlbmRlcih7fSlcbiAgKVxuXG4gIGNvbnN0IHdpc2hsaXN0QnV0dG9uID1cbiAgICBtYXJrZXRwbGFjZU1lbnUucXVlcnlTZWxlY3RvcjxIVE1MQW5jaG9yRWxlbWVudD4oXCIjd2lzaGxpc3QtYnV0dG9uXCIpXG4gIHdpc2hsaXN0QnV0dG9uPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIGluc2VydFdpc2hsaXN0KHdpc2hsaXN0QnV0dG9uKVxuICB9KVxufVxuXG5mdW5jdGlvbiBpbnNlcnRXaXNobGlzdChidXR0b246IEhUTUxBbmNob3JFbGVtZW50KTogdm9pZCB7XG4gIC8vIEFzc2lzdGFuY2VcbiAgY29uc3QgYXNzaXN0YW5jZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIubWFya2V0cGxhY2UtYXNzaXN0YW5jZVwiKVxuICBpZiAoYXNzaXN0YW5jZSlcbiAgICBhc3Npc3RhbmNlLnRleHRDb250ZW50ID1cbiAgICAgIFwiT24gdGhpcyBwYWdlLCB5b3UgY2FuIG9yZ2FuaXplIHlvdXIgd2lzaGxpc3QgYW5kIGNoZWNrIHRoZSBzdGF0dXMgb2YgeW91ciB3aXNoZWQgaXRlbXMuXCJcblxuICAvLyBNZW51XG4gIGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCIjbWFya2V0cGxhY2UtbWVudSAuYWN0aXZlXCIpXG4gICAgPy5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpXG4gIGJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpXG5cbiAgLy8gRmlsdGVyc1xuICBjb25zdCBmaWx0ZXJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYXJrZXRwbGFjZS1maWx0ZXJzXCIpXG4gIGlmIChmaWx0ZXJzKSBmaWx0ZXJzLmlubmVySFRNTCA9IFwiXCJcblxuICAvLyBDb250ZW50XG4gIGNvbnN0IHdpc2hsaXN0VGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL3dpc2hsaXN0X3NldHRpbmdzLmh0bWxcIilcbiAgY29uc3QgY29udGFpbmVyID1cbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLm1hcmtldHBsYWNlLWNvbnRhaW5lclwiKSA/P1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFya2V0cGxhY2UtYWN0aXZlLWF1Y3Rpb25zXCIpID8/XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYXJrZXRwbGFjZS1pdGVtc0ZvclNhbGVcIilcbiAgaWYgKCFjb250YWluZXIpIHJldHVyblxuXG4gIGNvbnN0IHdpc2hsaXN0Q29udGV4dDogV2lzaGxpc3RTZXR0aW5ncyA9IHtcbiAgICB3aXNobGlzdDogTG9jYWxTdG9yYWdlLndpc2hsaXN0LFxuICB9XG4gIGNvbnRhaW5lci5pbm5lckhUTUwgPSB3aXNobGlzdFRlbXBsYXRlLnJlbmRlcih3aXNobGlzdENvbnRleHQpXG5cbiAgLy8gQnV0dG9uc1xuICBmb3IgKGNvbnN0IHRyIG9mIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwidHJcIikpIHtcbiAgICBjb25zdCB3ZWFyYWJsZWl0ZW1pZCA9IHRyLmRhdGFzZXQud2VhcmFibGVpdGVtaWRcbiAgICBpZiAoIXdlYXJhYmxlaXRlbWlkKSBjb250aW51ZVxuXG4gICAgLy8gUmVzZXQgc3RhdHVzXG4gICAgY29uc3QgcmVzZXQgPSB0ci5xdWVyeVNlbGVjdG9yKFwiLnJlc2V0LWl0ZW0tc3RhdHVzXCIpXG4gICAgaWYgKHJlc2V0KVxuICAgICAgcmVzZXQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgcmVzZXRTdGF0dXMod2VhcmFibGVpdGVtaWQpXG4gICAgICAgIGluc2VydFdpc2hsaXN0KGJ1dHRvbilcbiAgICAgIH0pXG5cbiAgICAvLyBEZWxldGUgaXRlbSBmcm9tIHdpc2hsaXN0XG4gICAgY29uc3QgZGVsZXRlQnV0dG9uID0gdHIucXVlcnlTZWxlY3RvcihcIi5kZWxldGUtd2lzaGxpc3QtaXRlbVwiKVxuICAgIGlmIChkZWxldGVCdXR0b24pXG4gICAgICBkZWxldGVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgZGVsZXRlSXRlbSh3ZWFyYWJsZWl0ZW1pZClcbiAgICAgICAgaW5zZXJ0V2lzaGxpc3QoYnV0dG9uKVxuICAgICAgfSlcblxuICAgIC8vIENoYW5nZSBwcmljZVxuICAgIGNvbnN0IGVkaXRQcmljZSA9IHRyLnF1ZXJ5U2VsZWN0b3IoXCIuZWRpdC1wcmljZVwiKVxuICAgIGlmIChlZGl0UHJpY2UpXG4gICAgICBlZGl0UHJpY2UuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgdm9pZCBjaGFuZ2VQcmljZSh3ZWFyYWJsZWl0ZW1pZCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgaW5zZXJ0V2lzaGxpc3QoYnV0dG9uKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldFN0YXR1cyh3ZWFyYWJsZWl0ZW1pZDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IHdpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0XG4gIGNvbnN0IGluZGV4ID0gd2lzaGxpc3QuZmluZEluZGV4KFxuICAgIGl0ZW0gPT4gaXRlbS53ZWFyYWJsZWl0ZW1pZCA9PT0gd2VhcmFibGVpdGVtaWRcbiAgKVxuICBjb25zdCBlbnRyeSA9IHdpc2hsaXN0W2luZGV4XVxuICBpZiAoIWVudHJ5KSByZXR1cm5cblxuICBkZWxldGUgZW50cnkuZXJyb3JcbiAgTG9jYWxTdG9yYWdlLndpc2hsaXN0ID0gW1xuICAgIC4uLndpc2hsaXN0LnNsaWNlKHVuZGVmaW5lZCwgaW5kZXgpLFxuICAgIGVudHJ5LFxuICAgIC4uLndpc2hsaXN0LnNsaWNlKGluZGV4ICsgMSwgdW5kZWZpbmVkKSxcbiAgXVxufVxuXG5mdW5jdGlvbiBkZWxldGVJdGVtKHdlYXJhYmxlaXRlbWlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgTG9jYWxTdG9yYWdlLndpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0LmZpbHRlcihcbiAgICBpdGVtID0+IGl0ZW0ud2VhcmFibGVpdGVtaWQgIT09IHdlYXJhYmxlaXRlbWlkXG4gIClcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2hhbmdlUHJpY2Uod2VhcmFibGVpdGVtaWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvY2hhbmdlX3ByaWNlX2ZsYXZyLmh0bWxcIilcblxuICBjb25zdCB3aXNobGlzdCA9IExvY2FsU3RvcmFnZS53aXNobGlzdFxuICBjb25zdCBpbmRleCA9IHdpc2hsaXN0LmZpbmRJbmRleChcbiAgICBpdGVtID0+IGl0ZW0ud2VhcmFibGVpdGVtaWQgPT09IHdlYXJhYmxlaXRlbWlkXG4gIClcbiAgY29uc3QgZW50cnkgPSB3aXNobGlzdFtpbmRleF1cbiAgaWYgKCFlbnRyeSkgcmV0dXJuXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICQuZmxhdnIoe1xuICAgICAgY29udGVudDogdGVtcGxhdGUucmVuZGVyKHt9KSxcbiAgICAgIGRpYWxvZzogXCJwcm9tcHRcIixcbiAgICAgIHByb21wdDoge1xuICAgICAgICB2YWx1ZTogZW50cnkucHJpY2UudG9TdHJpbmcoKSxcbiAgICAgIH0sXG4gICAgICBidXR0b25zOiB7XG4gICAgICAgIGNsb3NlOiB7XG4gICAgICAgICAgc3R5bGU6IFwiY2xvc2VcIixcbiAgICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzYXZlOiB7XG4gICAgICAgICAgYWN0aW9uOiAoKSA9PiBzYXZlKHdlYXJhYmxlaXRlbWlkLCByZXNvbHZlKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBvbkJ1aWxkOiAkY29udGFpbmVyID0+IHtcbiAgICAgICAgJGNvbnRhaW5lci5hZGRDbGFzcyhcIm5ldy1sYXlvdXQtcG9wdXBcIilcblxuICAgICAgICBkb2N1bWVudFxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KFwiLmZsYXZyLXByb21wdFwiKVxuICAgICAgICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsICh7IGtleSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ICE9PSBcIkVudGVyXCIpIHJldHVyblxuICAgICAgICAgICAgc2F2ZSh3ZWFyYWJsZWl0ZW1pZCwgcmVzb2x2ZSlcbiAgICAgICAgICB9KVxuICAgICAgfSxcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBzYXZlKHdlYXJhYmxlaXRlbWlkOiBzdHJpbmcsIHJlc29sdmU6ICgpID0+IHZvaWQpOiBib29sZWFuIHtcbiAgY29uc3Qgd2lzaGxpc3QgPSBMb2NhbFN0b3JhZ2Uud2lzaGxpc3RcbiAgY29uc3QgaW5kZXggPSB3aXNobGlzdC5maW5kSW5kZXgoXG4gICAgaXRlbSA9PiBpdGVtLndlYXJhYmxlaXRlbWlkID09PSB3ZWFyYWJsZWl0ZW1pZFxuICApXG4gIGNvbnN0IGVudHJ5ID0gd2lzaGxpc3RbaW5kZXhdXG4gIGlmICghZW50cnkpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHByaWNlID0gTnVtYmVyKFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXCIuZmxhdnItcHJvbXB0XCIpPy52YWx1ZS50cmltKClcbiAgKVxuICBpZiAoIXByaWNlIHx8IHByaWNlIDw9IDApIHtcbiAgICAkLmZsYXZyTm90aWYoXCJUaGlzIGlzIG5vdCBhIHZhbGlkIHByaWNlLlwiKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZW50cnkucHJpY2UgPSBwcmljZVxuICBMb2NhbFN0b3JhZ2Uud2lzaGxpc3QgPSBbXG4gICAgLi4ud2lzaGxpc3Quc2xpY2UodW5kZWZpbmVkLCBpbmRleCksXG4gICAgZW50cnksXG4gICAgLi4ud2lzaGxpc3Quc2xpY2UoaW5kZXggKyAxLCB1bmRlZmluZWQpLFxuICBdXG5cbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2ZsYXZyX25vdGlmL2NoYW5nZWRfd2lzaGxpc3RfcHJpY2UuaHRtbFwiKVxuICAkLmZsYXZyTm90aWYodGVtcGxhdGUucmVuZGVyKGVudHJ5KSlcblxuICByZXNvbHZlKClcbiAgcmV0dXJuIHRydWVcbn1cbiIsImltcG9ydCB7IER1cmF0aW9uVW5pdCB9IGZyb20gXCIuL2R1cmF0aW9uXCJcbmltcG9ydCB7IGxvYWRUYWtlb3ZlciB9IGZyb20gXCIuL3Rha2VvdmVyL2JyYWluXCJcbmltcG9ydCB7IGxvYWRBcHBlYXJhbmNlIH0gZnJvbSBcIi4vdWkvYXBwZWFyYW5jZVwiXG5pbXBvcnQgeyBsb2FkQ2Fyb3VzZWwgfSBmcm9tIFwiLi91aS9jYXJvdXNlbFwiXG5pbXBvcnQgeyBsb2FkSGVhZGVyVGFrZW92ZXIgfSBmcm9tIFwiLi91aS9oZWFkZXJfdGFrZW92ZXJcIlxuaW1wb3J0IHsgbG9hZEhvbWVDb250ZW50IH0gZnJvbSBcIi4vdWkvaG9tZV9jb250ZW50XCJcbmltcG9ydCB7IGxvYWRNYXJrZXQgfSBmcm9tIFwiLi91aS9tYXJrZXRcIlxuaW1wb3J0IHsgbG9hZE1lbnUgfSBmcm9tIFwiLi91aS9tZW51XCJcbmltcG9ydCB7IGxvYWRQZXQgfSBmcm9tIFwiLi91aS9wZXRcIlxuaW1wb3J0IHsgbG9hZFByb2ZpbGUgfSBmcm9tIFwiLi91aS9wcm9maWxlXCJcbmltcG9ydCB7IGxvYWRTZXR0aW5ncyB9IGZyb20gXCIuL3VpL3NldHRpbmdzXCJcbmltcG9ydCB7IGxvYWRXaXNobGlzdCB9IGZyb20gXCIuL3VpL3dpc2hsaXN0XCJcblxuLy8gbG9hZEpTKFwiaHR0cHM6Ly91bnBrZy5jb20vaG9nYW4uanMvZGlzdC90ZW1wbGF0ZS0zLjAuMi5taW4uanNcIiwgdHJ1ZSk7XG5cbmZ1bmN0aW9uIGxvYWQoKTogdm9pZCB7XG4gIGxvYWRVSSgpXG4gIGxvYWRUYWtlb3ZlcigpXG59XG5cbmZ1bmN0aW9uIGxvYWRVSSgpOiB2b2lkIHtcbiAgbG9hZE1lbnUoKVxuICBsb2FkQ2Fyb3VzZWwoKVxuICBsb2FkSG9tZUNvbnRlbnQoKVxuICBsb2FkQXBwZWFyYW5jZSgpXG4gIGxvYWRQcm9maWxlKClcbiAgbG9hZFNldHRpbmdzKClcbiAgbG9hZFBldCgpXG4gIGxvYWRNYXJrZXQoKVxuICBsb2FkV2lzaGxpc3QoKVxuICBsb2FkSGVhZGVyVGFrZW92ZXIoKVxuXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEltYWdlRWxlbWVudD4oXCIubXVzaWMtaGlkZGVuLXZvaWNlXCIpPy5jbGljaygpXG4gIH0sIER1cmF0aW9uVW5pdC5zZWNvbmQpXG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKSA9PiB7XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEltYWdlRWxlbWVudD4oXCIubXVzaWMtaGlkZGVuLXZvaWNlXCIpPy5jbGljaygpXG59KVxuXG5uZXcgTXV0YXRpb25PYnNlcnZlcihsb2FkKS5vYnNlcnZlKDxOb2RlPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29udGFpbmVyXCIpLCB7XG4gIGNoaWxkTGlzdDogdHJ1ZSxcbn0pXG5cbmxvYWRVSSgpXG5jb25zb2xlLmxvZyhgJHtHTS5pbmZvLnNjcmlwdC5uYW1lfSB2JHtHTS5pbmZvLnNjcmlwdC52ZXJzaW9ufSBsb2FkZWQuYClcbmxvYWRUYWtlb3ZlcigpXG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB0eXBlIHsgTWFpbk1lbnUgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvbWFpbl9tZW51XCJcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRNZW51KCk6IHZvaWQge1xuICBjb25zdCBtZW51SW5uZXJSaWdodCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWVudS1pbm5lci1yaWdodFwiKVxuICBpZiAoIW1lbnVJbm5lclJpZ2h0IHx8IG1lbnVJbm5lclJpZ2h0LnF1ZXJ5U2VsZWN0b3IoXCIubWFpbi1tZW51LWVlXCIpKSByZXR1cm5cblxuICAvLyBSZW1vdmUgYmFua1xuICBtZW51SW5uZXJSaWdodC5xdWVyeVNlbGVjdG9yKFwiLm1haW4tbWVudS1iYW5rXCIpPy5yZW1vdmUoKVxuXG4gIC8vIEFkZCBGb3J1bVxuICBjb25zdCBtZW51VGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL21haW5fbWVudS5odG1sXCIpXG4gIGNvbnN0IG1haW5NZW51Rm9ydW06IE1haW5NZW51ID0ge1xuICAgIGNsYXNzOiBcImZvcnVtXCIsXG4gICAgaHJlZjogXCIvZm9ydW1cIixcbiAgICB0ZXh0OiBcIkZvcnVtXCIsXG4gIH1cblxuICBtZW51SW5uZXJSaWdodC5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICBtZW51VGVtcGxhdGUucmVuZGVyKG1haW5NZW51Rm9ydW0pXG4gIClcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHR5cGUgeyBIb21lQ29udGVudFNtYWxsIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2hvbWVfY29udGVudF9zbWFsbFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkSG9tZUNvbnRlbnQoKTogdm9pZCB7XG4gIGNvbnN0IGhvbWVDb250ZW50U21hbGxzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJob21lLWNvbnRlbnQtc21hbGxzXCIpXG4gIGlmIChcbiAgICAhaG9tZUNvbnRlbnRTbWFsbHMgfHxcbiAgICBob21lQ29udGVudFNtYWxscy5xdWVyeVNlbGVjdG9yKFwiLmhvbWUtY29udGVudC1zbWFsbC1lZVwiKVxuICApXG4gICAgcmV0dXJuXG5cbiAgLy8gUmVtb3ZlIGJhbmtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJob21lLWJhbmtcIik/LnJlbW92ZSgpXG5cbiAgLy8gQWRkIGZvcnVtXG4gIGNvbnN0IHNtYWxsVGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2hvbWVfY29udGVudF9zbWFsbC5odG1sXCIpXG4gIGNvbnN0IHNtYWxsQ29udGVudDogSG9tZUNvbnRlbnRTbWFsbCA9IHtcbiAgICBiYWNrZ3JvdW5kSW1hZ2U6XG4gICAgICBcIi9hc3NldHMvaW1nL21pbmlnYW1lcy90cmVhc3VyZWh1bnQvYTQ4YmJjNGU0ODQ5NzQ1ZWJlNmRiY2Y1MzEzZWIzZjAuanBnXCIsXG4gICAgaDQ6IFwiRm9ydW1cIixcbiAgICBocmVmOiBcIi9mb3J1bVwiLFxuICAgIGlkOiBcImZvcnVtXCIsXG4gIH1cblxuICBob21lQ29udGVudFNtYWxscy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICBzbWFsbFRlbXBsYXRlLnJlbmRlcihzbWFsbENvbnRlbnQpXG4gIClcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=