diff --git a/main/main.bundle.js b/main/main.bundle.js index 1361f16a..2281db0c 100644 --- a/main/main.bundle.js +++ b/main/main.bundle.js @@ -1,2 +1,2 @@ -(()=>{var n={239:(n,e,t)=>{"use strict";t.d(e,{A:()=>h});var o=t(354),i=t.n(o),r=t(314),a=t.n(r),s=t(417),c=t.n(s),u=new URL(t(243),t.b),l=new URL(t(46),t.b),d=new URL(t(320),t.b),A=new URL(t(220),t.b),p=new URL(t(277),t.b),b=a()(i()),f=c()(u),g=c()(l),w=c()(d),m=c()(A),v=c()(p);b.push([n.id,":root {\n --accent-color: rgb(240, 68, 5);\n --accent-dark-color: rgb(140, 39, 3);\n --error-color: #b3261e;\n --font-family: 'Fira Mono', monospace;\n --font-family-consolas: Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n}\n\nbody {\n width: 100%;\n height: 100%;\n cursor: default;\n margin: 0px;\n padding: 0px;\n background-color: #f2f2f7;\n color: #000;\n font-size: 14px;\n position: relative;\n overflow-x: hidden;\n font-weight: 400;\n font-family: var(--font-family);\n padding-bottom: 24px;\n}\n\n* {\n box-sizing: border-box;\n}\n\n.container {\n width: calc(100% - 128px);\n max-width: 1536px;\n margin: 0 auto;\n}\n\n.medium-container {\n width: calc(100% - 32px);\n max-width: 960px;\n margin: 0 auto;\n}\n\n#navbar {\n width: 100%;\n height: 96px;\n background-color: #fff;\n}\n\n#navbar a {\n text-decoration: none;\n color: inherit;\n}\n\n#navbar .container {\n display: flex;\n align-items: center;\n height: 100%;\n}\n\n#navbar-chevron {\n width: 24px;\n height: 24px;\n background-repeat: no-repeat;\n background-position: center;\n background-image: url("+f+");\n opacity: 0.2;\n margin-left: 8px;\n}\n\n#navbar .logo-ref {\n width: max-content;\n}\n\n#navbar .logo {\n width: 196px;\n margin-top: 2px;\n}\n\n@media only screen and (max-width: 700px) {\n #navbar {\n height: auto;\n }\n\n #navbar .container {\n flex-direction: column;\n align-items: center;\n }\n\n #navbar .logo-ref {\n margin-top: 32px;\n }\n\n #navbar .logo {\n margin-top: 0;\n width: 256px;\n }\n\n #navbar #navbar-chevron {\n transform: rotate(90deg);\n }\n\n #navbar #playground-actions {\n margin-left: 0;\n margin: 32px 0px;\n }\n}\n\nh1,\nh2 {\n font-weight: 700;\n color: #0d102b;\n}\nh1 {\n font-size: 24px;\n}\nh2 {\n font-size: 20px;\n}\n\n.content {\n height: 100vh;\n width: calc(100% - 64px);\n max-width: 960px;\n display: flex;\n flex-direction: column;\n margin: 0 auto;\n}\n\n.github-card {\n display: flex;\n align-items: center;\n border-radius: 8px;\n user-select: none;\n padding: 8px;\n}\n\n.github-card:hover {\n background-color: rgba(0, 0, 0, 0.06);\n transition: 0.15s;\n}\n\n.github-card:active,\n.github-card:focus {\n background-color: rgba(0, 0, 0, 0.12);\n transition: 0.15s;\n}\n\n.github-card::before {\n display: block;\n content: '';\n width: 32px;\n height: 32px;\n background-image: url("+g+");\n background-size: 24px;\n background-repeat: no-repeat;\n background-position: center;\n margin-right: 4px;\n}\n\n#playground-actions {\n display: flex;\n align-items: center;\n column-gap: 16px;\n margin-left: auto;\n}\n\n.button {\n width: fit-content;\n height: fit-content;\n padding: 12px 20px;\n border-radius: 6px;\n outline: none;\n margin: none;\n border: none;\n font-size: 14px;\n font-family: var(--font-family);\n transition: 0.15s background-color;\n font-weight: 600;\n}\n\n.orange-button {\n background-color: var(--accent-color);\n color: #fff;\n border: 2px solid transparent;\n}\n\n.orange-button-outlined {\n border: 2px solid var(--accent-color);\n color: var(--accent-color);\n background-color: transparent;\n}\n\n.orange-button:hover,\n.orange-button:active,\n.orange-button:focus {\n background-color: var(--accent-dark-color);\n}\n\n.orange-button-outlined:hover,\n.orange-button-outlined:active,\n.orange-button-outlined:focus {\n background-color: rgba(240, 68, 5, 0.12);\n}\n\n.content-card {\n overflow: hidden;\n}\n\n.content-card-header {\n font-size: 20px;\n font-weight: 600;\n padding: var(--content-card-padding);\n}\n\n#result {\n overflow: hidden;\n margin: 96px auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n --bot-icon-color: #4caf50;\n --bot-icon-url: url("+w+");\n}\n\n.result-detected {\n --bot-icon-color: #f44336 !important;\n --bot-icon-url: url("+m+") !important;\n}\n\n.result-error {\n --bot-icon-color: var(--error-color) !important;\n --bot-icon-url: url("+v+") !important;\n}\n\n.result-bot-icon-container {\n width: 128px;\n height: 128px;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.result-bot-icon-container::before {\n content: '';\n display: block;\n background-color: var(--bot-icon-color);\n opacity: 0.08;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: -1;\n border-radius: 100%;\n transition: 0.2s background-color;\n}\n\n.result-bot-icon {\n width: 52px;\n height: 52px;\n mask-image: var(--bot-icon-url);\n -webkit-mask-image: var(--bot-icon-url);\n mask-size: 100%;\n mask-repeat: no-repeat;\n mask-position: center;\n background-color: var(--bot-icon-color);\n position: relative;\n transition: 0.2s mask-image, 0.2s -webkit-mask-image, 0.2s background-color;\n}\n\n#result-text {\n margin-top: 24px;\n font-size: 18px;\n font-weight: 600;\n color: var(--bot-icon-color);\n transition: 0.2s color;\n}\n\n.logs-content {\n background-color: #282c34;\n color: #fff;\n border-radius: 12px;\n padding: 24px;\n margin-top: 12px;\n font-family: var(--font-family-consolas);\n}\n\n.logs-buttons-list {\n display: flex;\n margin-left: auto;\n}\n\n.logs-top-bar {\n display: flex;\n align-items: center;\n}\n\n.logs-section:not(:first-child) {\n margin-top: 24px;\n}\n\n.logs-section-header {\n color: var(--accent-color);\n font-size: 14px;\n}\n\n.logs-section-content {\n font-size: 12px;\n margin-top: 1em;\n white-space: pre-wrap;\n}\n\n#error-container {\n margin-bottom: 96px;\n padding: 24px;\n border: 2px solid var(--error-color);\n border-radius: 12px;\n font-family: var(--font-family-consolas);\n font-size: 14px;\n line-height: 2;\n display: none;\n}\n\n.error-container-visible {\n display: block !important;\n}\n","",{version:3,sources:["webpack://./playground/style.css"],names:[],mappings:"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",sourcesContent:[":root {\n --accent-color: rgb(240, 68, 5);\n --accent-dark-color: rgb(140, 39, 3);\n --error-color: #b3261e;\n --font-family: 'Fira Mono', monospace;\n --font-family-consolas: Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n}\n\nbody {\n width: 100%;\n height: 100%;\n cursor: default;\n margin: 0px;\n padding: 0px;\n background-color: #f2f2f7;\n color: #000;\n font-size: 14px;\n position: relative;\n overflow-x: hidden;\n font-weight: 400;\n font-family: var(--font-family);\n padding-bottom: 24px;\n}\n\n* {\n box-sizing: border-box;\n}\n\n.container {\n width: calc(100% - 128px);\n max-width: 1536px;\n margin: 0 auto;\n}\n\n.medium-container {\n width: calc(100% - 32px);\n max-width: 960px;\n margin: 0 auto;\n}\n\n#navbar {\n width: 100%;\n height: 96px;\n background-color: #fff;\n}\n\n#navbar a {\n text-decoration: none;\n color: inherit;\n}\n\n#navbar .container {\n display: flex;\n align-items: center;\n height: 100%;\n}\n\n#navbar-chevron {\n width: 24px;\n height: 24px;\n background-repeat: no-repeat;\n background-position: center;\n background-image: url(../resources/chevron_right.svg);\n opacity: 0.2;\n margin-left: 8px;\n}\n\n#navbar .logo-ref {\n width: max-content;\n}\n\n#navbar .logo {\n width: 196px;\n margin-top: 2px;\n}\n\n@media only screen and (max-width: 700px) {\n #navbar {\n height: auto;\n }\n\n #navbar .container {\n flex-direction: column;\n align-items: center;\n }\n\n #navbar .logo-ref {\n margin-top: 32px;\n }\n\n #navbar .logo {\n margin-top: 0;\n width: 256px;\n }\n\n #navbar #navbar-chevron {\n transform: rotate(90deg);\n }\n\n #navbar #playground-actions {\n margin-left: 0;\n margin: 32px 0px;\n }\n}\n\nh1,\nh2 {\n font-weight: 700;\n color: #0d102b;\n}\nh1 {\n font-size: 24px;\n}\nh2 {\n font-size: 20px;\n}\n\n.content {\n height: 100vh;\n width: calc(100% - 64px);\n max-width: 960px;\n display: flex;\n flex-direction: column;\n margin: 0 auto;\n}\n\n.github-card {\n display: flex;\n align-items: center;\n border-radius: 8px;\n user-select: none;\n padding: 8px;\n}\n\n.github-card:hover {\n background-color: rgba(0, 0, 0, 0.06);\n transition: 0.15s;\n}\n\n.github-card:active,\n.github-card:focus {\n background-color: rgba(0, 0, 0, 0.12);\n transition: 0.15s;\n}\n\n.github-card::before {\n display: block;\n content: '';\n width: 32px;\n height: 32px;\n background-image: url(../resources/github_icon.svg);\n background-size: 24px;\n background-repeat: no-repeat;\n background-position: center;\n margin-right: 4px;\n}\n\n#playground-actions {\n display: flex;\n align-items: center;\n column-gap: 16px;\n margin-left: auto;\n}\n\n.button {\n width: fit-content;\n height: fit-content;\n padding: 12px 20px;\n border-radius: 6px;\n outline: none;\n margin: none;\n border: none;\n font-size: 14px;\n font-family: var(--font-family);\n transition: 0.15s background-color;\n font-weight: 600;\n}\n\n.orange-button {\n background-color: var(--accent-color);\n color: #fff;\n border: 2px solid transparent;\n}\n\n.orange-button-outlined {\n border: 2px solid var(--accent-color);\n color: var(--accent-color);\n background-color: transparent;\n}\n\n.orange-button:hover,\n.orange-button:active,\n.orange-button:focus {\n background-color: var(--accent-dark-color);\n}\n\n.orange-button-outlined:hover,\n.orange-button-outlined:active,\n.orange-button-outlined:focus {\n background-color: rgba(240, 68, 5, 0.12);\n}\n\n.content-card {\n overflow: hidden;\n}\n\n.content-card-header {\n font-size: 20px;\n font-weight: 600;\n padding: var(--content-card-padding);\n}\n\n#result {\n overflow: hidden;\n margin: 96px auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n --bot-icon-color: #4caf50;\n --bot-icon-url: url(../resources/robot-off-outline.svg);\n}\n\n.result-detected {\n --bot-icon-color: #f44336 !important;\n --bot-icon-url: url(../resources/robot-outline.svg) !important;\n}\n\n.result-error {\n --bot-icon-color: var(--error-color) !important;\n --bot-icon-url: url(../resources/alert-circle-outline.svg) !important;\n}\n\n.result-bot-icon-container {\n width: 128px;\n height: 128px;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.result-bot-icon-container::before {\n content: '';\n display: block;\n background-color: var(--bot-icon-color);\n opacity: 0.08;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: -1;\n border-radius: 100%;\n transition: 0.2s background-color;\n}\n\n.result-bot-icon {\n width: 52px;\n height: 52px;\n mask-image: var(--bot-icon-url);\n -webkit-mask-image: var(--bot-icon-url);\n mask-size: 100%;\n mask-repeat: no-repeat;\n mask-position: center;\n background-color: var(--bot-icon-color);\n position: relative;\n transition: 0.2s mask-image, 0.2s -webkit-mask-image, 0.2s background-color;\n}\n\n#result-text {\n margin-top: 24px;\n font-size: 18px;\n font-weight: 600;\n color: var(--bot-icon-color);\n transition: 0.2s color;\n}\n\n.logs-content {\n background-color: #282c34;\n color: #fff;\n border-radius: 12px;\n padding: 24px;\n margin-top: 12px;\n font-family: var(--font-family-consolas);\n}\n\n.logs-buttons-list {\n display: flex;\n margin-left: auto;\n}\n\n.logs-top-bar {\n display: flex;\n align-items: center;\n}\n\n.logs-section:not(:first-child) {\n margin-top: 24px;\n}\n\n.logs-section-header {\n color: var(--accent-color);\n font-size: 14px;\n}\n\n.logs-section-content {\n font-size: 12px;\n margin-top: 1em;\n white-space: pre-wrap;\n}\n\n#error-container {\n margin-bottom: 96px;\n padding: 24px;\n border: 2px solid var(--error-color);\n border-radius: 12px;\n font-family: var(--font-family-consolas);\n font-size: 14px;\n line-height: 2;\n display: none;\n}\n\n.error-container-visible {\n display: block !important;\n}\n"],sourceRoot:""}]);const h=b},314:n=>{"use strict";n.exports=function(n){var e=[];return e.toString=function(){return this.map((function(e){var t="",o=void 0!==e[5];return e[4]&&(t+="@supports (".concat(e[4],") {")),e[2]&&(t+="@media ".concat(e[2]," {")),o&&(t+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),t+=n(e),o&&(t+="}"),e[2]&&(t+="}"),e[4]&&(t+="}"),t})).join("")},e.i=function(n,t,o,i,r){"string"==typeof n&&(n=[[null,n,void 0]]);var a={};if(o)for(var s=0;s0?" ".concat(l[5]):""," {").concat(l[1],"}")),l[5]=r),t&&(l[2]?(l[1]="@media ".concat(l[2]," {").concat(l[1],"}"),l[2]=t):l[2]=t),i&&(l[4]?(l[1]="@supports (".concat(l[4],") {").concat(l[1],"}"),l[4]=i):l[4]="".concat(i)),e.push(l))}},e}},417:n=>{"use strict";n.exports=function(n,e){return e||(e={}),n?(n=String(n.__esModule?n.default:n),/^['"].*['"]$/.test(n)&&(n=n.slice(1,-1)),e.hash&&(n+=e.hash),/["'() \t\n]|(%20)/.test(n)||e.needQuotes?'"'.concat(n.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):n):n}},354:n=>{"use strict";n.exports=function(n){var e=n[1],t=n[3];if(!t)return e;if("function"==typeof btoa){var o=btoa(unescape(encodeURIComponent(JSON.stringify(t)))),i="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(o),r="/*# ".concat(i," */"),a=t.sources.map((function(n){return"/*# sourceURL=".concat(t.sourceRoot||"").concat(n," */")}));return[e].concat(a).concat([r]).join("\n")}return[e].join("\n")}},72:n=>{"use strict";var e=[];function t(n){for(var t=-1,o=0;o{"use strict";var e={};n.exports=function(n,t){var o=function(n){if(void 0===e[n]){var t=document.querySelector(n);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(n){t=null}e[n]=t}return e[n]}(n);if(!o)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");o.appendChild(t)}},540:n=>{"use strict";n.exports=function(n){var e=document.createElement("style");return n.setAttributes(e,n.attributes),n.insert(e,n.options),e}},56:(n,e,t)=>{"use strict";n.exports=function(n){var e=t.nc;e&&n.setAttribute("nonce",e)}},825:n=>{"use strict";n.exports=function(n){var e=n.insertStyleElement(n);return{update:function(t){!function(n,e,t){var o="";t.supports&&(o+="@supports (".concat(t.supports,") {")),t.media&&(o+="@media ".concat(t.media," {"));var i=void 0!==t.layer;i&&(o+="@layer".concat(t.layer.length>0?" ".concat(t.layer):""," {")),o+=t.css,i&&(o+="}"),t.media&&(o+="}"),t.supports&&(o+="}");var r=t.sourceMap;r&&"undefined"!=typeof btoa&&(o+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(r))))," */")),e.styleTagTransform(o,n,e.options)}(e,n,t)},remove:function(){!function(n){if(null===n.parentNode)return!1;n.parentNode.removeChild(n)}(e)}}}},113:n=>{"use strict";n.exports=function(n,e){if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}},232:function(n,e,t){var o;!function(i,r){"use strict";var a="function",s="undefined",c="object",u="string",l="major",d="model",A="name",p="type",b="vendor",f="version",g="architecture",w="console",m="mobile",v="tablet",h="smarttv",E="wearable",C="embedded",x="Amazon",B="Apple",y="ASUS",k="BlackBerry",_="Browser",S="Chrome",T="Firefox",z="Google",P="Huawei",j="LG",q="Microsoft",L="Motorola",O="Opera",I="Samsung",M="Sharp",R="Sony",W="Xiaomi",N="Zebra",D="Facebook",Y="Chromium OS",U="Mac OS",F=function(n){for(var e={},t=0;t0?2===s.length?typeof s[1]==a?this[s[0]]=s[1].call(this,l):this[s[0]]=s[1]:3===s.length?typeof s[1]!==a||s[1].exec&&s[1].test?this[s[0]]=l?l.replace(s[1],s[2]):r:this[s[0]]=l?s[1].call(this,l,s[2]):r:4===s.length&&(this[s[0]]=l?s[3].call(this,l.replace(s[1],s[2])):r):this[s]=l||r;d+=2}},X=function(n,e){for(var t in e)if(typeof e[t]===c&&e[t].length>0){for(var o=0;o2&&(n[d]="iPad",n[p]=v),n},this.getEngine=function(){var n={};return n[A]=r,n[f]=r,Z.call(n,o,h.engine),n},this.getOS=function(){var n={};return n[A]=r,n[f]=r,Z.call(n,o,h.os),E&&!n[A]&&w&&"Unknown"!=w.platform&&(n[A]=w.platform.replace(/chrome os/i,Y).replace(/macos/i,U)),n},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return o},this.setUA=function(n){return o=typeof n===u&&n.length>350?K(n,350):n,this},this.setUA(o),this};J.VERSION="1.0.35",J.BROWSER=F([A,f,l]),J.CPU=F([g]),J.DEVICE=F([d,b,p,w,m,h,v,E,C]),J.ENGINE=J.OS=F([A,f]),typeof e!==s?(n.exports&&(e=n.exports=J),e.UAParser=J):t.amdO?(o=function(){return J}.call(e,t,e,n))===r||(n.exports=o):typeof i!==s&&(i.UAParser=J);var Q=typeof i!==s&&(i.jQuery||i.Zepto);if(Q&&!Q.ua){var nn=new J;Q.ua=nn.getResult(),Q.ua.get=function(){return nn.getUA()},Q.ua.set=function(n){nn.setUA(n);var e=nn.getResult();for(var t in e)Q.ua[t]=e[t]}}}("object"==typeof window?window:this)},277:(n,e,t)=>{"use strict";n.exports=t.p+"bf468b98f99fe3cb600c.svg"},243:(n,e,t)=>{"use strict";n.exports=t.p+"cb3e629604702ef8bc66.svg"},46:(n,e,t)=>{"use strict";n.exports=t.p+"550985caaa8859d4b95f.svg"},320:(n,e,t)=>{"use strict";n.exports=t.p+"80392182d321c655d4d0.svg"},220:(n,e,t)=>{"use strict";n.exports=t.p+"52d88d31d700c20dcc04.svg"}},e={};function t(o){var i=e[o];if(void 0!==i)return i.exports;var r=e[o]={id:o,exports:{}};return n[o].call(r.exports,r,r.exports,t),r.exports}t.m=n,t.amdO={},t.n=n=>{var e=n&&n.__esModule?()=>n.default:()=>n;return t.d(e,{a:e}),e},t.d=(n,e)=>{for(var o in e)t.o(e,o)&&!t.o(n,o)&&Object.defineProperty(n,o,{enumerable:!0,get:e[o]})},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"==typeof window)return window}}(),t.o=(n,e)=>Object.prototype.hasOwnProperty.call(n,e),(()=>{var n;t.g.importScripts&&(n=t.g.location+"");var e=t.g.document;if(!n&&e&&(e.currentScript&&"SCRIPT"===e.currentScript.tagName.toUpperCase()&&(n=e.currentScript.src),!n)){var o=e.getElementsByTagName("script");if(o.length)for(var i=o.length-1;i>-1&&(!n||!/^http(s?):/.test(n));)n=o[i--].src}if(!n)throw new Error("Automatic publicPath is not supported in this browser");n=n.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),t.p=n})(),t.b=document.baseURI||self.location.href,t.nc=void 0,(()=>{"use strict";var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,e){n.__proto__=e}||function(n,e){for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(n[t]=e[t])},n(e,t)};function e(n,e,t,o){return new(t||(t=Promise))((function(i,r){function a(n){try{c(o.next(n))}catch(n){r(n)}}function s(n){try{c(o.throw(n))}catch(n){r(n)}}function c(n){var e;n.done?i(n.value):(e=n.value,e instanceof t?e:new t((function(n){n(e)}))).then(a,s)}c((o=o.apply(n,e||[])).next())}))}function o(n,e){var t,o,i,r,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return r={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(r[Symbol.iterator]=function(){return this}),r;function s(s){return function(c){return function(s){if(t)throw new TypeError("Generator is already executing.");for(;r&&(r=0,s[0]&&(a=0)),a;)try{if(t=1,o&&(i=2&s[0]?o.return:s[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,s[1])).done)return i;switch(o=0,i&&(s=[2&s[0],i.value]),s[0]){case 0:case 1:i=s;break;case 4:return a.label++,{value:s[1],done:!1};case 5:a.label++,o=s[1],s=[0];continue;case 7:s=a.ops.pop(),a.trys.pop();continue;default:if(!((i=(i=a.trys).length>0&&i[i.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!i||s[1]>i[0]&&s[1]=5?"chromium":m(["ApplePayError"in t,"CSSPrimitiveValue"in t,"Counter"in t,0===o.vendor.indexOf("Apple"),"getStorageUpdates"in o,"WebKitMediaKeys"in t])>=4?"webkit":m(["buildID"in navigator,"MozAppearance"in(null!==(e=null===(n=document.documentElement)||void 0===n?void 0:n.style)&&void 0!==e?e:{}),"onmozfullscreenchange"in t,"mozInnerScreenX"in t,"CSSMozDocumentRule"in t,"CanvasCaptureMediaStream"in t])>=4?"gecko":"unknown"}function E(){var n,e=null===(n=navigator.userAgent)||void 0===n?void 0:n.toLowerCase();return f(e,"edg/")?"edge":f(e,"trident")||f(e,"msie")?"internet_explorer":f(e,"wechat")?"wechat":f(e,"firefox")?"firefox":f(e,"opera")||f(e,"opr")?"opera":f(e,"chrome")?"chrome":f(e,"safari")?"safari":"unknown"}function C(){var n=h(),e="chromium"===n,t="gecko"===n;if(!e&&!t)return!1;var o=window;return m(["onorientationchange"in o,"orientation"in o,e&&!("SharedWorker"in o),t&&/android/i.test(navigator.appVersion)])>=2}function x(){if(void 0===window.CSS)throw new A(-1,"window.CSS is undefined");return CSS.supports("-moz-appearance","auto")}function B(){return void 0!==document.hasFocus&&document.hasFocus()}function y(){if("iPad"===navigator.platform)return!0;var n=screen,e=n.width/n.height;return m(["MediaSource"in window,!!Element.prototype.webkitRequestFullscreen,e>.65&&e<1.53])>=2}var k={android:C,browserKind:E,browserEngineKind:h,documentFocus:B,userAgent:function(){return navigator.userAgent},appVersion:function(){var n=navigator.appVersion;if(null==n)throw new A(-1,"navigator.appVersion is undefined");return n},rtt:function(){if(void 0===navigator.connection)throw new A(-1,"navigator.connection is undefined");if(void 0===navigator.connection.rtt)throw new A(-1,"navigator.connection.rtt is undefined");return navigator.connection.rtt},windowSize:function(){return{outerWidth:window.outerWidth,outerHeight:window.outerHeight,innerWidth:window.innerWidth,innerHeight:window.innerHeight}},pluginsLength:function(){if(void 0===navigator.plugins)throw new A(-1,"navigator.plugins is undefined");if(void 0===navigator.plugins.length)throw new A(-3,"navigator.plugins.length is undefined");return navigator.plugins.length},pluginsArray:function(){if(void 0===navigator.plugins)throw new A(-1,"navigator.plugins is undefined");if(void 0===window.PluginArray)throw new A(-1,"window.PluginArray is undefined");return navigator.plugins instanceof PluginArray},errorTrace:function(){try{null[0]()}catch(n){if(n instanceof Error&&null!=n.stack)return n.stack.toString()}throw new A(-3,"errorTrace signal unexpected behaviour")},productSub:function(){var n=navigator.productSub;if(void 0===n)throw new A(-1,"navigator.productSub is undefined");return n},windowExternal:function(){if(void 0===window.external)throw new A(-1,"window.external is undefined");var n=window.external;if("function"!=typeof n.toString)throw new A(-2,"window.external.toString is not a function");return n.toString()},mimeTypesConsistent:function(){if(void 0===navigator.mimeTypes)throw new A(-1,"navigator.mimeTypes is undefined");for(var n=navigator.mimeTypes,e=Object.getPrototypeOf(n)===MimeTypeArray.prototype,t=0;t=3||t.push(e.languages);else if("string"==typeof e.languages){var i=e.languages;i&&t.push(i.split(","))}return t},notificationPermissions:function(){return e(this,void 0,void 0,(function(){var n,e;return o(this,(function(t){switch(t.label){case 0:if(void 0===window.Notification)throw new A(-1,"window.Notification is undefined");if(void 0===navigator.permissions)throw new A(-1,"navigator.permissions is undefined");if("function"!=typeof(n=navigator.permissions).query)throw new A(-2,"navigator.permissions.query is not a function");t.label=1;case 1:return t.trys.push([1,3,,4]),[4,n.query({name:"notifications"})];case 2:return e=t.sent(),[2,"denied"===window.Notification.permission&&"prompt"===e.state];case 3:throw t.sent(),new A(-3,"notificationPermissions signal unexpected behaviour");case 4:return[2]}}))}))},documentElementKeys:function(){if(void 0===document.documentElement)throw new A(-1,"document.documentElement is undefined");var n=document.documentElement;if("function"!=typeof n.getAttributeNames)throw new A(-2,"document.documentElement.getAttributeNames is not a function");return n.getAttributeNames()},functionBind:function(){if(void 0===Function.prototype.bind)throw new A(-2,"Function.prototype.bind is undefined");return Function.prototype.bind.toString()},process:function(){var n=window.process,e="window.process is";if(void 0===n)throw new A(-1,"".concat(e," undefined"));if(n&&"object"!=typeof n)throw new A(-3,"".concat(e," not an object"));return n},distinctiveProps:function(){var n,e,t=((n={}).awesomium={window:["awesomium"]},n.cef={window:["RunPerfTest"]},n.cefsharp={window:["CefSharp"]},n.coachjs={window:["emit"]},n.fminer={window:["fmget_targets"]},n.geb={window:["geb"]},n.nightmarejs={window:["__nightmare","nightmare"]},n.phantomas={window:["__phantomas"]},n[s]={window:["callPhantom","_phantom"]},n.rhino={window:["spawn"]},n[c]={window:["_Selenium_IDE_Recorder","_selenium","calledSelenium",/^([a-z]){3}_.*_(Array|Promise|Symbol)$/],document:["__selenium_evaluate","selenium-evaluate","__selenium_unwrapped"]},n.webdriverio={window:["wdioElectron"]},n.webdriver={window:["webdriver","__webdriverFunc","__lastWatirAlert","__lastWatirConfirm","__lastWatirPrompt","_WEBDRIVER_ELEM_CACHE","ChromeDriverw"],document:["__webdriver_script_fn","__driver_evaluate","__webdriver_evaluate","__fxdriver_evaluate","__driver_unwrapped","__webdriver_unwrapped","__fxdriver_unwrapped","__webdriver_script_fn","__webdriver_script_func","__webdriver_script_function","$cdc_asdjflasutopfhvcZLmcf","$cdc_asdjflasutopfhvcZLmcfl_","$chrome_asyncScriptInfo","__$webdriverAsyncExecutor"]},n[l]={window:["domAutomation","domAutomationController"]},n),o={},r=g(window),a=[];for(e in void 0!==window.document&&(a=g(window.document)),t){var u=t[e];if(void 0!==u){var d=void 0!==u.window&&w.apply(void 0,i([r],u.window,!1)),A=!(void 0===u.document||!a.length)&&w.apply(void 0,i([a],u.document,!1));o[e]=d||A}}return o}},_=function(){function n(){this.components=void 0,this.detections=void 0}return n.prototype.getComponents=function(){return this.components},n.prototype.getDetections=function(){return this.detections},n.prototype.detect=function(){if(void 0===this.components)throw new Error("BotDetector.detect can't be called before BotDetector.collect");var n=function(n,e){var t={},o={bot:!1};for(var i in e){var r=(0,e[i])(n),a={bot:!1};"string"==typeof r?a={bot:!0,botKind:r}:r&&(a={bot:!0,botKind:d}),t[i]=a,a.bot&&(o=a)}return[t,o]}(this.components,v),e=n[0],t=n[1];return this.detections=e,t},n.prototype.collect=function(){return e(this,void 0,void 0,(function(){var n;return o(this,(function(e){switch(e.label){case 0:return n=this,[4,p(k)];case 1:return n.components=e.sent(),[2,this.components]}}))}))},n}();const S=_;function T(n){var t=(void 0===n?{}:n).monitoring,i=void 0===t||t;return e(this,void 0,void 0,(function(){var n;return o(this,(function(e){switch(e.label){case 0:return i&&function(){if(!(window.__fpjs_d_m||Math.random()>=.001))try{var n=new XMLHttpRequest;n.open("get","https://m1.openfpcdn.io/botd/v".concat(r,"/npm-monitoring"),!0),n.send()}catch(n){console.error(n)}}(),[4,(n=new S).collect()];case 1:return e.sent(),[2,n]}}))}))}var z=t(232);function P(){var n=(new z.UAParser).getBrowser().version;if(void 0!==n)return{major:parseInt(n.split(".")[0]),minor:parseInt(n.split(".")[1])}}var j=t(72),q=t.n(j),L=t(825),O=t.n(L),I=t(659),M=t.n(I),R=t(56),W=t.n(R),N=t(540),D=t.n(N),Y=t(113),U=t.n(Y),F=t(239),H={};H.styleTagTransform=U(),H.setAttributes=W(),H.insert=M().bind(null,"head"),H.domAPI=O(),H.insertStyleElement=D(),q()(F.A,H),F.A&&F.A.locals&&F.A.locals;var V=void 0,K=function(){return e(void 0,void 0,void 0,(function(){var n;return o(this,(function(t){switch(t.label){case 0:return[4,e(void 0,void 0,void 0,(function(){var n,e,t,i,r,a,s,c,u,l;return o(this,(function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),n=performance.now(),[4,T()];case 1:return e=o.sent(),t=performance.now()-n,i=e.detect(),r=performance.now()-n,a=null!==(u=e.getComponents())&&void 0!==u?u:{},s=null!==(l=e.getDetections())&&void 0!==l?l:{},c={browserEngineKind:h(),browserKind:E(),browserVersion:P(),documentFocus:B(),mozAppearanceSupport:x(),isAndroid:C(),isDesktopWebKit:(d=window,A=d.HTMLElement,p=d.Document,m(["safari"in d,!("ongestureend"in d),!("TouchEvent"in d),!("orientation"in d),A&&!("autocapitalize"in A.prototype),p&&"pointerLockElement"in p.prototype])>=4),isIPad:y()},[2,{isError:!1,collectionTime:t,detectionTime:r,detectionResult:i,detectedBot:(null==i?void 0:i.bot)?i.botKind:void 0,collectedData:a,detectorsResults:s,debugData:c}];case 2:return[2,{isError:!0,error:o.sent()}];case 3:return[2]}var d,A,p}))}))];case 1:return n=t.sent(),V=n,function(n){var e=document.getElementById("result"),t=document.getElementById("result-text"),o=document.getElementById("collection-time"),i=document.getElementById("detection-time"),r=document.getElementById("detection-result"),a=document.getElementById("detectors"),s=document.getElementById("debug-data"),c=document.getElementById("collected-data"),u=document.getElementById("error-container"),l=document.getElementById("error-message");if(e.classList.remove("result-detected","result-error"),n.isError)return t.innerHTML="An error occured",e.classList.add("result-error"),u.classList.add("error-container-visible"),void(l.textContent=n.error.message);u.classList.remove("error-container-visible"),null!=n.detectedBot?(t.innerHTML="".concat(n.detectedBot," detected."),e.classList.add("result-detected")):t.innerHTML="You are not a bot.",o.textContent="".concat(n.collectionTime.toFixed(2),"ms"),i.textContent="".concat(n.detectionTime.toFixed(2),"ms"),r.textContent=JSON.stringify(n.detectionResult,null,4),a.textContent=JSON.stringify(n.detectorsResults,null,4),s.textContent=JSON.stringify(n.debugData,null,4),c.textContent=JSON.stringify(n.collectedData,null,4)}(n),[2]}}))}))};window.onload=function(){var n=document.getElementById("detect-button"),e=document.getElementById("copy-logs-button");n.addEventListener("click",(function(){K()})),e.addEventListener("click",(function(){navigator.clipboard.writeText(JSON.stringify(V)).then((function(){alert("BotD logs copied to clipboard")}))})),K()}})()})(); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QmhiLFNBQVNpYSxlQUFlLGlCQUN6Q2dCLEVBQWlCamIsU0FBU2lhLGVBQWUsb0JBQzdDZSxFQUFlRSxpQkFBaUIsU0FBUyxXQUNyQ3BDLEdBQ0osSUFDQW1DLEVBQWVDLGlCQUFpQixTQUFTLFdBQ3JDMVUsVUFBVTJVLFVBQVVDLFVBQVU5ZCxLQUFLQyxVQUFVc2IsSUFBVXhNLE1BQUssV0FDeERnUCxNQUFNLGdDQUNWLEdBQ0osSUFDQXZDLEdBQ0osQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9wbGF5Z3JvdW5kL3N0eWxlLmNzcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL3VhLXBhcnNlci1qcy9zcmMvdWEtcGFyc2VyLmpzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC93ZWJwYWNrL3J1bnRpbWUvYW1kIG9wdGlvbnMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvd2VicGFjay9ydW50aW1lL3B1YmxpY1BhdGgiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC93ZWJwYWNrL3J1bnRpbWUvanNvbnAgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkL3dlYnBhY2svcnVudGltZS9ub25jZSIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3R5cGVzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvYXBpLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvdXRpbHMvcG9ueWZpbGxzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvdXRpbHMvbWlzYy50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9pbmRleC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9hcHBfdmVyc2lvbi50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9kb2N1bWVudF9lbGVtZW50X2tleXMudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvZXJyb3JfdHJhY2UudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvZXZhbF9sZW5ndGgudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvZnVuY3Rpb25fYmluZC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9sYW5ndWFnZXNfaW5jb25zaXN0ZW5jeS50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9ub3RpZmljYXRpb25fcGVybWlzc2lvbnMudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvcGx1Z2luc19hcnJheS50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9wbHVnaW5zX2luY29uc2lzdGVuY3kudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvcHJvY2Vzcy50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy91c2VyX2FnZW50LnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvZGV0ZWN0b3JzL3dlYmRyaXZlci50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy93ZWJnbC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy93aW5kb3dfZXh0ZXJuYWwudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvd2luZG93X3NpemUudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvbWltZV90eXBlc19jb25zaXN0ZW5jZS50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9wcm9kdWN0X3N1Yi50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9kaXN0aW5jdGl2ZV9wcm9wZXJ0aWVzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvdXRpbHMvYnJvd3Nlci50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3NvdXJjZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL3VzZXJfYWdlbnQudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL2FwcF92ZXJzaW9uLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9ydHQudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL3dpbmRvd19zaXplLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9wbHVnaW5zX2xlbmd0aC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3NvdXJjZXMvcGx1Z2luc19hcnJheS50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3NvdXJjZXMvZXJyb3JfdHJhY2UudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL3Byb2R1Y3Rfc3ViLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy93aW5kb3dfZXh0ZXJuYWwudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL21pbWVfdHlwZXNfY29uc2lzdGVuY2UudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL2V2YWxfbGVuZ3RoLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy93ZWJnbC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3NvdXJjZXMvd2ViZHJpdmVyLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9sYW5ndWFnZXMudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL25vdGlmaWNhdGlvbl9wZXJtaXNzaW9ucy50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3NvdXJjZXMvZG9jdW1lbnRfZWxlbWVudF9rZXlzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9mdW5jdGlvbl9iaW5kLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9wcm9jZXNzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9kaXN0aW5jdGl2ZV9wcm9wZXJ0aWVzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvZGV0ZWN0b3IudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vdGVzdHMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3BsYXlncm91bmQvc3R5bGUuY3NzP2RhNjIiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3BsYXlncm91bmQvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8wX19fID0gbmV3IFVSTChcIi4uL3Jlc291cmNlcy9jaGV2cm9uX3JpZ2h0LnN2Z1wiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xX19fID0gbmV3IFVSTChcIi4uL3Jlc291cmNlcy9naXRodWJfaWNvbi5zdmdcIiwgaW1wb3J0Lm1ldGEudXJsKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMl9fXyA9IG5ldyBVUkwoXCIuLi9yZXNvdXJjZXMvcm9ib3Qtb2ZmLW91dGxpbmUuc3ZnXCIsIGltcG9ydC5tZXRhLnVybCk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzNfX18gPSBuZXcgVVJMKFwiLi4vcmVzb3VyY2VzL3JvYm90LW91dGxpbmUuc3ZnXCIsIGltcG9ydC5tZXRhLnVybCk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzRfX18gPSBuZXcgVVJMKFwiLi4vcmVzb3VyY2VzL2FsZXJ0LWNpcmNsZS1vdXRsaW5lLnN2Z1wiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzBfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8wX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMV9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMl9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzJfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzNfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8zX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF80X19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfNF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCI6cm9vdCB7XFxuICAtLWFjY2VudC1jb2xvcjogcmdiKDI0MCwgNjgsIDUpO1xcbiAgLS1hY2NlbnQtZGFyay1jb2xvcjogcmdiKDE0MCwgMzksIDMpO1xcbiAgLS1lcnJvci1jb2xvcjogI2IzMjYxZTtcXG4gIC0tZm9udC1mYW1pbHk6ICdGaXJhIE1vbm8nLCBtb25vc3BhY2U7XFxuICAtLWZvbnQtZmFtaWx5LWNvbnNvbGFzOiBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2U7XFxufVxcblxcbmJvZHkge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBtYXJnaW46IDBweDtcXG4gIHBhZGRpbmc6IDBweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjc7XFxuICBjb2xvcjogIzAwMDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHkpO1xcbiAgcGFkZGluZy1ib3R0b206IDI0cHg7XFxufVxcblxcbioge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuLmNvbnRhaW5lciB7XFxuICB3aWR0aDogY2FsYygxMDAlIC0gMTI4cHgpO1xcbiAgbWF4LXdpZHRoOiAxNTM2cHg7XFxuICBtYXJnaW46IDAgYXV0bztcXG59XFxuXFxuLm1lZGl1bS1jb250YWluZXIge1xcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDMycHgpO1xcbiAgbWF4LXdpZHRoOiA5NjBweDtcXG4gIG1hcmdpbjogMCBhdXRvO1xcbn1cXG5cXG4jbmF2YmFyIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiA5NnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG59XFxuXFxuI25hdmJhciBhIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbn1cXG5cXG4jbmF2YmFyIC5jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcblxcbiNuYXZiYXItY2hldnJvbiB7XFxuICB3aWR0aDogMjRweDtcXG4gIGhlaWdodDogMjRweDtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fICsgXCIpO1xcbiAgb3BhY2l0eTogMC4yO1xcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXG59XFxuXFxuI25hdmJhciAubG9nby1yZWYge1xcbiAgd2lkdGg6IG1heC1jb250ZW50O1xcbn1cXG5cXG4jbmF2YmFyIC5sb2dvIHtcXG4gIHdpZHRoOiAxOTZweDtcXG4gIG1hcmdpbi10b3A6IDJweDtcXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3MDBweCkge1xcbiAgI25hdmJhciB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gIH1cXG5cXG4gICNuYXZiYXIgLmNvbnRhaW5lciB7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICB9XFxuXFxuICAjbmF2YmFyIC5sb2dvLXJlZiB7XFxuICAgIG1hcmdpbi10b3A6IDMycHg7XFxuICB9XFxuXFxuICAjbmF2YmFyIC5sb2dvIHtcXG4gICAgbWFyZ2luLXRvcDogMDtcXG4gICAgd2lkdGg6IDI1NnB4O1xcbiAgfVxcblxcbiAgI25hdmJhciAjbmF2YmFyLWNoZXZyb24ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XFxuICB9XFxuXFxuICAjbmF2YmFyICNwbGF5Z3JvdW5kLWFjdGlvbnMge1xcbiAgICBtYXJnaW4tbGVmdDogMDtcXG4gICAgbWFyZ2luOiAzMnB4IDBweDtcXG4gIH1cXG59XFxuXFxuaDEsXFxuaDIge1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG4gIGNvbG9yOiAjMGQxMDJiO1xcbn1cXG5oMSB7XFxuICBmb250LXNpemU6IDI0cHg7XFxufVxcbmgyIHtcXG4gIGZvbnQtc2l6ZTogMjBweDtcXG59XFxuXFxuLmNvbnRlbnQge1xcbiAgaGVpZ2h0OiAxMDB2aDtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA2NHB4KTtcXG4gIG1heC13aWR0aDogOTYwcHg7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIG1hcmdpbjogMCBhdXRvO1xcbn1cXG5cXG4uZ2l0aHViLWNhcmQge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBib3JkZXItcmFkaXVzOiA4cHg7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIHBhZGRpbmc6IDhweDtcXG59XFxuXFxuLmdpdGh1Yi1jYXJkOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNik7XFxuICB0cmFuc2l0aW9uOiAwLjE1cztcXG59XFxuXFxuLmdpdGh1Yi1jYXJkOmFjdGl2ZSxcXG4uZ2l0aHViLWNhcmQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEyKTtcXG4gIHRyYW5zaXRpb246IDAuMTVzO1xcbn1cXG5cXG4uZ2l0aHViLWNhcmQ6OmJlZm9yZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgd2lkdGg6IDMycHg7XFxuICBoZWlnaHQ6IDMycHg7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fICsgXCIpO1xcbiAgYmFja2dyb3VuZC1zaXplOiAyNHB4O1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcXG4gIG1hcmdpbi1yaWdodDogNHB4O1xcbn1cXG5cXG4jcGxheWdyb3VuZC1hY3Rpb25zIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY29sdW1uLWdhcDogMTZweDtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG5cXG4uYnV0dG9uIHtcXG4gIHdpZHRoOiBmaXQtY29udGVudDtcXG4gIGhlaWdodDogZml0LWNvbnRlbnQ7XFxuICBwYWRkaW5nOiAxMnB4IDIwcHg7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgbWFyZ2luOiBub25lO1xcbiAgYm9yZGVyOiBub25lO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZmFtaWx5KTtcXG4gIHRyYW5zaXRpb246IDAuMTVzIGJhY2tncm91bmQtY29sb3I7XFxuICBmb250LXdlaWdodDogNjAwO1xcbn1cXG5cXG4ub3JhbmdlLWJ1dHRvbiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xcbiAgY29sb3I6ICNmZmY7XFxuICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLm9yYW5nZS1idXR0b24tb3V0bGluZWQge1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYWNjZW50LWNvbG9yKTtcXG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5vcmFuZ2UtYnV0dG9uOmhvdmVyLFxcbi5vcmFuZ2UtYnV0dG9uOmFjdGl2ZSxcXG4ub3JhbmdlLWJ1dHRvbjpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hY2NlbnQtZGFyay1jb2xvcik7XFxufVxcblxcbi5vcmFuZ2UtYnV0dG9uLW91dGxpbmVkOmhvdmVyLFxcbi5vcmFuZ2UtYnV0dG9uLW91dGxpbmVkOmFjdGl2ZSxcXG4ub3JhbmdlLWJ1dHRvbi1vdXRsaW5lZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI0MCwgNjgsIDUsIDAuMTIpO1xcbn1cXG5cXG4uY29udGVudC1jYXJkIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5jb250ZW50LWNhcmQtaGVhZGVyIHtcXG4gIGZvbnQtc2l6ZTogMjBweDtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBwYWRkaW5nOiB2YXIoLS1jb250ZW50LWNhcmQtcGFkZGluZyk7XFxufVxcblxcbiNyZXN1bHQge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIG1hcmdpbjogOTZweCBhdXRvO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgLS1ib3QtaWNvbi1jb2xvcjogIzRjYWY1MDtcXG4gIC0tYm90LWljb24tdXJsOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8yX19fICsgXCIpO1xcbn1cXG5cXG4ucmVzdWx0LWRldGVjdGVkIHtcXG4gIC0tYm90LWljb24tY29sb3I6ICNmNDQzMzYgIWltcG9ydGFudDtcXG4gIC0tYm90LWljb24tdXJsOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8zX19fICsgXCIpICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZXN1bHQtZXJyb3Ige1xcbiAgLS1ib3QtaWNvbi1jb2xvcjogdmFyKC0tZXJyb3ItY29sb3IpICFpbXBvcnRhbnQ7XFxuICAtLWJvdC1pY29uLXVybDogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfNF9fXyArIFwiKSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVzdWx0LWJvdC1pY29uLWNvbnRhaW5lciB7XFxuICB3aWR0aDogMTI4cHg7XFxuICBoZWlnaHQ6IDEyOHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLnJlc3VsdC1ib3QtaWNvbi1jb250YWluZXI6OmJlZm9yZSB7XFxuICBjb250ZW50OiAnJztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgb3BhY2l0eTogMC4wODtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHotaW5kZXg6IC0xO1xcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcXG4gIHRyYW5zaXRpb246IDAuMnMgYmFja2dyb3VuZC1jb2xvcjtcXG59XFxuXFxuLnJlc3VsdC1ib3QtaWNvbiB7XFxuICB3aWR0aDogNTJweDtcXG4gIGhlaWdodDogNTJweDtcXG4gIG1hc2staW1hZ2U6IHZhcigtLWJvdC1pY29uLXVybCk7XFxuICAtd2Via2l0LW1hc2staW1hZ2U6IHZhcigtLWJvdC1pY29uLXVybCk7XFxuICBtYXNrLXNpemU6IDEwMCU7XFxuICBtYXNrLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgbWFzay1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdHJhbnNpdGlvbjogMC4ycyBtYXNrLWltYWdlLCAwLjJzIC13ZWJraXQtbWFzay1pbWFnZSwgMC4ycyBiYWNrZ3JvdW5kLWNvbG9yO1xcbn1cXG5cXG4jcmVzdWx0LXRleHQge1xcbiAgbWFyZ2luLXRvcDogMjRweDtcXG4gIGZvbnQtc2l6ZTogMThweDtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBjb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgdHJhbnNpdGlvbjogMC4ycyBjb2xvcjtcXG59XFxuXFxuLmxvZ3MtY29udGVudCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjgyYzM0O1xcbiAgY29sb3I6ICNmZmY7XFxuICBib3JkZXItcmFkaXVzOiAxMnB4O1xcbiAgcGFkZGluZzogMjRweDtcXG4gIG1hcmdpbi10b3A6IDEycHg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktY29uc29sYXMpO1xcbn1cXG5cXG4ubG9ncy1idXR0b25zLWxpc3Qge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG5cXG4ubG9ncy10b3AtYmFyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4ubG9ncy1zZWN0aW9uOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi10b3A6IDI0cHg7XFxufVxcblxcbi5sb2dzLXNlY3Rpb24taGVhZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbn1cXG5cXG4ubG9ncy1zZWN0aW9uLWNvbnRlbnQge1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgbWFyZ2luLXRvcDogMWVtO1xcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xcbn1cXG5cXG4jZXJyb3ItY29udGFpbmVyIHtcXG4gIG1hcmdpbi1ib3R0b206IDk2cHg7XFxuICBwYWRkaW5nOiAyNHB4O1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tZXJyb3ItY29sb3IpO1xcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseS1jb25zb2xhcyk7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBsaW5lLWhlaWdodDogMjtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5lcnJvci1jb250YWluZXItdmlzaWJsZSB7XFxuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbn1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9wbGF5Z3JvdW5kL3N0eWxlLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLCtCQUErQjtFQUMvQixvQ0FBb0M7RUFDcEMsc0JBQXNCO0VBQ3RCLHFDQUFxQztFQUNyQyw4RUFBOEU7QUFDaEY7O0FBRUE7RUFDRSxXQUFXO0VBQ1gsWUFBWTtFQUNaLGVBQWU7RUFDZixXQUFXO0VBQ1gsWUFBWTtFQUNaLHlCQUF5QjtFQUN6QixXQUFXO0VBQ1gsZUFBZTtFQUNmLGtCQUFrQjtFQUNsQixrQkFBa0I7RUFDbEIsZ0JBQWdCO0VBQ2hCLCtCQUErQjtFQUMvQixvQkFBb0I7QUFDdEI7O0FBRUE7RUFDRSxzQkFBc0I7QUFDeEI7O0FBRUE7RUFDRSx5QkFBeUI7RUFDekIsaUJBQWlCO0VBQ2pCLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSx3QkFBd0I7RUFDeEIsZ0JBQWdCO0VBQ2hCLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSxXQUFXO0VBQ1gsWUFBWTtFQUNaLHNCQUFzQjtBQUN4Qjs7QUFFQTtFQUNFLHFCQUFxQjtFQUNyQixjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQixZQUFZO0FBQ2Q7O0FBRUE7RUFDRSxXQUFXO0VBQ1gsWUFBWTtFQUNaLDRCQUE0QjtFQUM1QiwyQkFBMkI7RUFDM0IseURBQXFEO0VBQ3JELFlBQVk7RUFDWixnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSxZQUFZO0VBQ1osZUFBZTtBQUNqQjs7QUFFQTtFQUNFO0lBQ0UsWUFBWTtFQUNkOztFQUVBO0lBQ0Usc0JBQXNCO0lBQ3RCLG1CQUFtQjtFQUNyQjs7RUFFQTtJQUNF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QUN2Qjs7QUFFQTtFQUNFLG1CQUFtQjtFQUNuQixhQUFhO0VBQ2Isb0NBQW9DO0VBQ3BDLG1CQUFtQjtFQUNuQix3Q0FBd0M7RUFDeEMsZUFBZTtFQUNmLGNBQWM7RUFDZCxhQUFhO0FBQ2Y7O0FBRUE7RUFDRSx5QkFBeUI7QUFDM0JcIixcInNvdXJjZXNDb250ZW50XCI6W1wiOnJvb3Qge1xcbiAgLS1hY2NlbnQtY29sb3I6IHJnYigyNDAsIDY4LCA1KTtcXG4gIC0tYWNjZW50LWRhcmstY29sb3I6IHJnYigxNDAsIDM5LCAzKTtcXG4gIC0tZXJyb3ItY29sb3I6ICNiMzI2MWU7XFxuICAtLWZvbnQtZmFtaWx5OiAnRmlyYSBNb25vJywgbW9ub3NwYWNlO1xcbiAgLS1mb250LWZhbWlseS1jb25zb2xhczogQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBNZW5sbywgQ291cmllciwgbW9ub3NwYWNlO1xcbn1cXG5cXG5ib2R5IHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgbWFyZ2luOiAwcHg7XFxuICBwYWRkaW5nOiAwcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmY3O1xcbiAgY29sb3I6ICMwMDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBvdmVyZmxvdy14OiBoaWRkZW47XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZmFtaWx5KTtcXG4gIHBhZGRpbmctYm90dG9tOiAyNHB4O1xcbn1cXG5cXG4qIHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcblxcbi5jb250YWluZXIge1xcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDEyOHB4KTtcXG4gIG1heC13aWR0aDogMTUzNnB4O1xcbiAgbWFyZ2luOiAwIGF1dG87XFxufVxcblxcbi5tZWRpdW0tY29udGFpbmVyIHtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSAzMnB4KTtcXG4gIG1heC13aWR0aDogOTYwcHg7XFxuICBtYXJnaW46IDAgYXV0bztcXG59XFxuXFxuI25hdmJhciB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogOTZweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxufVxcblxcbiNuYXZiYXIgYSB7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBjb2xvcjogaW5oZXJpdDtcXG59XFxuXFxuI25hdmJhciAuY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4jbmF2YmFyLWNoZXZyb24ge1xcbiAgd2lkdGg6IDI0cHg7XFxuICBoZWlnaHQ6IDI0cHg7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL3Jlc291cmNlcy9jaGV2cm9uX3JpZ2h0LnN2Zyk7XFxuICBvcGFjaXR5OiAwLjI7XFxuICBtYXJnaW4tbGVmdDogOHB4O1xcbn1cXG5cXG4jbmF2YmFyIC5sb2dvLXJlZiB7XFxuICB3aWR0aDogbWF4LWNvbnRlbnQ7XFxufVxcblxcbiNuYXZiYXIgLmxvZ28ge1xcbiAgd2lkdGg6IDE5NnB4O1xcbiAgbWFyZ2luLXRvcDogMnB4O1xcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDcwMHB4KSB7XFxuICAjbmF2YmFyIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgfVxcblxcbiAgI25hdmJhciAuY29udGFpbmVyIHtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIH1cXG5cXG4gICNuYXZiYXIgLmxvZ28tcmVmIHtcXG4gICAgbWFyZ2luLXRvcDogMzJweDtcXG4gIH1cXG5cXG4gICNuYXZiYXIgLmxvZ28ge1xcbiAgICBtYXJnaW4tdG9wOiAwO1xcbiAgICB3aWR0aDogMjU2cHg7XFxuICB9XFxuXFxuICAjbmF2YmFyICNuYXZiYXItY2hldnJvbiB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcXG4gIH1cXG5cXG4gICNuYXZiYXIgI3BsYXlncm91bmQtYWN0aW9ucyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwO1xcbiAgICBtYXJnaW46IDMycHggMHB4O1xcbiAgfVxcbn1cXG5cXG5oMSxcXG5oMiB7XFxuICBmb250LXdlaWdodDogNzAwO1xcbiAgY29sb3I6ICMwZDEwMmI7XFxufVxcbmgxIHtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG59XFxuaDIge1xcbiAgZm9udC1zaXplOiAyMHB4O1xcbn1cXG5cXG4uY29udGVudCB7XFxuICBoZWlnaHQ6IDEwMHZoO1xcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDY0cHgpO1xcbiAgbWF4LXdpZHRoOiA5NjBweDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgbWFyZ2luOiAwIGF1dG87XFxufVxcblxcbi5naXRodWItY2FyZCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJvcmRlci1yYWRpdXM6IDhweDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgcGFkZGluZzogOHB4O1xcbn1cXG5cXG4uZ2l0aHViLWNhcmQ6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA2KTtcXG4gIHRyYW5zaXRpb246IDAuMTVzO1xcbn1cXG5cXG4uZ2l0aHViLWNhcmQ6YWN0aXZlLFxcbi5naXRodWItY2FyZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMTIpO1xcbiAgdHJhbnNpdGlvbjogMC4xNXM7XFxufVxcblxcbi5naXRodWItY2FyZDo6YmVmb3JlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgY29udGVudDogJyc7XFxuICB3aWR0aDogMzJweDtcXG4gIGhlaWdodDogMzJweDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9yZXNvdXJjZXMvZ2l0aHViX2ljb24uc3ZnKTtcXG4gIGJhY2tncm91bmQtc2l6ZTogMjRweDtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICBtYXJnaW4tcmlnaHQ6IDRweDtcXG59XFxuXFxuI3BsYXlncm91bmQtYWN0aW9ucyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGNvbHVtbi1nYXA6IDE2cHg7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuXFxuLmJ1dHRvbiB7XFxuICB3aWR0aDogZml0LWNvbnRlbnQ7XFxuICBoZWlnaHQ6IGZpdC1jb250ZW50O1xcbiAgcGFkZGluZzogMTJweCAyMHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIG1hcmdpbjogbm9uZTtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseSk7XFxuICB0cmFuc2l0aW9uOiAwLjE1cyBiYWNrZ3JvdW5kLWNvbG9yO1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG59XFxuXFxuLm9yYW5nZS1idXR0b24ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5vcmFuZ2UtYnV0dG9uLW91dGxpbmVkIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWFjY2VudC1jb2xvcik7XFxuICBjb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4ub3JhbmdlLWJ1dHRvbjpob3ZlcixcXG4ub3JhbmdlLWJ1dHRvbjphY3RpdmUsXFxuLm9yYW5nZS1idXR0b246Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYWNjZW50LWRhcmstY29sb3IpO1xcbn1cXG5cXG4ub3JhbmdlLWJ1dHRvbi1vdXRsaW5lZDpob3ZlcixcXG4ub3JhbmdlLWJ1dHRvbi1vdXRsaW5lZDphY3RpdmUsXFxuLm9yYW5nZS1idXR0b24tb3V0bGluZWQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNDAsIDY4LCA1LCAwLjEyKTtcXG59XFxuXFxuLmNvbnRlbnQtY2FyZCB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4uY29udGVudC1jYXJkLWhlYWRlciB7XFxuICBmb250LXNpemU6IDIwcHg7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgcGFkZGluZzogdmFyKC0tY29udGVudC1jYXJkLXBhZGRpbmcpO1xcbn1cXG5cXG4jcmVzdWx0IHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBtYXJnaW46IDk2cHggYXV0bztcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIC0tYm90LWljb24tY29sb3I6ICM0Y2FmNTA7XFxuICAtLWJvdC1pY29uLXVybDogdXJsKC4uL3Jlc291cmNlcy9yb2JvdC1vZmYtb3V0bGluZS5zdmcpO1xcbn1cXG5cXG4ucmVzdWx0LWRldGVjdGVkIHtcXG4gIC0tYm90LWljb24tY29sb3I6ICNmNDQzMzYgIWltcG9ydGFudDtcXG4gIC0tYm90LWljb24tdXJsOiB1cmwoLi4vcmVzb3VyY2VzL3JvYm90LW91dGxpbmUuc3ZnKSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVzdWx0LWVycm9yIHtcXG4gIC0tYm90LWljb24tY29sb3I6IHZhcigtLWVycm9yLWNvbG9yKSAhaW1wb3J0YW50O1xcbiAgLS1ib3QtaWNvbi11cmw6IHVybCguLi9yZXNvdXJjZXMvYWxlcnQtY2lyY2xlLW91dGxpbmUuc3ZnKSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVzdWx0LWJvdC1pY29uLWNvbnRhaW5lciB7XFxuICB3aWR0aDogMTI4cHg7XFxuICBoZWlnaHQ6IDEyOHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLnJlc3VsdC1ib3QtaWNvbi1jb250YWluZXI6OmJlZm9yZSB7XFxuICBjb250ZW50OiAnJztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgb3BhY2l0eTogMC4wODtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHotaW5kZXg6IC0xO1xcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcXG4gIHRyYW5zaXRpb246IDAuMnMgYmFja2dyb3VuZC1jb2xvcjtcXG59XFxuXFxuLnJlc3VsdC1ib3QtaWNvbiB7XFxuICB3aWR0aDogNTJweDtcXG4gIGhlaWdodDogNTJweDtcXG4gIG1hc2staW1hZ2U6IHZhcigtLWJvdC1pY29uLXVybCk7XFxuICAtd2Via2l0LW1hc2staW1hZ2U6IHZhcigtLWJvdC1pY29uLXVybCk7XFxuICBtYXNrLXNpemU6IDEwMCU7XFxuICBtYXNrLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgbWFzay1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdHJhbnNpdGlvbjogMC4ycyBtYXNrLWltYWdlLCAwLjJzIC13ZWJraXQtbWFzay1pbWFnZSwgMC4ycyBiYWNrZ3JvdW5kLWNvbG9yO1xcbn1cXG5cXG4jcmVzdWx0LXRleHQge1xcbiAgbWFyZ2luLXRvcDogMjRweDtcXG4gIGZvbnQtc2l6ZTogMThweDtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBjb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgdHJhbnNpdGlvbjogMC4ycyBjb2xvcjtcXG59XFxuXFxuLmxvZ3MtY29udGVudCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjgyYzM0O1xcbiAgY29sb3I6ICNmZmY7XFxuICBib3JkZXItcmFkaXVzOiAxMnB4O1xcbiAgcGFkZGluZzogMjRweDtcXG4gIG1hcmdpbi10b3A6IDEycHg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktY29uc29sYXMpO1xcbn1cXG5cXG4ubG9ncy1idXR0b25zLWxpc3Qge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG5cXG4ubG9ncy10b3AtYmFyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4ubG9ncy1zZWN0aW9uOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi10b3A6IDI0cHg7XFxufVxcblxcbi5sb2dzLXNlY3Rpb24taGVhZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbn1cXG5cXG4ubG9ncy1zZWN0aW9uLWNvbnRlbnQge1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgbWFyZ2luLXRvcDogMWVtO1xcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xcbn1cXG5cXG4jZXJyb3ItY29udGFpbmVyIHtcXG4gIG1hcmdpbi1ib3R0b206IDk2cHg7XFxuICBwYWRkaW5nOiAyNHB4O1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tZXJyb3ItY29sb3IpO1xcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseS1jb25zb2xhcyk7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBsaW5lLWhlaWdodDogMjtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5lcnJvci1jb250YWluZXItdmlzaWJsZSB7XFxuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107IC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblxuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IFwiXCI7XG4gICAgICB2YXIgbmVlZExheWVyID0gdHlwZW9mIGl0ZW1bNV0gIT09IFwidW5kZWZpbmVkXCI7XG5cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcblxuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9OyAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuXG5cbiAgbGlzdC5pID0gZnVuY3Rpb24gaShtb2R1bGVzLCBtZWRpYSwgZGVkdXBlLCBzdXBwb3J0cywgbGF5ZXIpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIHVuZGVmaW5lZF1dO1xuICAgIH1cblxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRoaXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIGlkID0gdGhpc1trXVswXTtcblxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBtb2R1bGVzLmxlbmd0aDsgX2srKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfa10pO1xuXG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgbGF5ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtWzVdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChtZWRpYSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdXBwb3J0cykge1xuICAgICAgICBpZiAoIWl0ZW1bNF0pIHtcbiAgICAgICAgICBpdGVtWzRdID0gXCJcIi5jb25jYXQoc3VwcG9ydHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs0XSA9IHN1cHBvcnRzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGxpc3Q7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdXJsID0gU3RyaW5nKHVybC5fX2VzTW9kdWxlID8gdXJsLmRlZmF1bHQgOiB1cmwpOyAvLyBJZiB1cmwgaXMgYWxyZWFkeSB3cmFwcGVkIGluIHF1b3RlcywgcmVtb3ZlIHRoZW1cblxuICBpZiAoL15bJ1wiXS4qWydcIl0kLy50ZXN0KHVybCkpIHtcbiAgICB1cmwgPSB1cmwuc2xpY2UoMSwgLTEpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuaGFzaCkge1xuICAgIHVybCArPSBvcHRpb25zLmhhc2g7XG4gIH0gLy8gU2hvdWxkIHVybCBiZSB3cmFwcGVkP1xuICAvLyBTZWUgaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMtMy8jdXJsc1xuXG5cbiAgaWYgKC9bXCInKCkgXFx0XFxuXXwoJTIwKS8udGVzdCh1cmwpIHx8IG9wdGlvbnMubmVlZFF1b3Rlcykge1xuICAgIHJldHVybiBcIlxcXCJcIi5jb25jYXQodXJsLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKS5yZXBsYWNlKC9cXG4vZywgXCJcXFxcblwiKSwgXCJcXFwiXCIpO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgdmFyIGNvbnRlbnQgPSBpdGVtWzFdO1xuICB2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG5cbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgdmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdCB8fCBcIlwiKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHN0eWxlc0luRE9NID0gW107XG5cbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5ET00ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5ET01baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleEJ5SWRlbnRpZmllciA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXSxcbiAgICAgIHN1cHBvcnRzOiBpdGVtWzRdLFxuICAgICAgbGF5ZXI6IGl0ZW1bNV1cbiAgICB9O1xuXG4gICAgaWYgKGluZGV4QnlJZGVudGlmaWVyICE9PSAtMSkge1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnJlZmVyZW5jZXMrKztcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS51cGRhdGVyKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB1cGRhdGVyID0gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLmJ5SW5kZXggPSBpO1xuICAgICAgc3R5bGVzSW5ET00uc3BsaWNlKGksIDAsIHtcbiAgICAgICAgaWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgICAgdXBkYXRlcjogdXBkYXRlcixcbiAgICAgICAgcmVmZXJlbmNlczogMVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWRlbnRpZmllcnMucHVzaChpZGVudGlmaWVyKTtcbiAgfVxuXG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cblxuZnVuY3Rpb24gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucykge1xuICB2YXIgYXBpID0gb3B0aW9ucy5kb21BUEkob3B0aW9ucyk7XG4gIGFwaS51cGRhdGUob2JqKTtcblxuICB2YXIgdXBkYXRlciA9IGZ1bmN0aW9uIHVwZGF0ZXIobmV3T2JqKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiYgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiYgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCAmJiBuZXdPYmouc3VwcG9ydHMgPT09IG9iai5zdXBwb3J0cyAmJiBuZXdPYmoubGF5ZXIgPT09IG9iai5sYXllcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFwaS51cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbW92ZSgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gdXBkYXRlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGlzdCA9IGxpc3QgfHwgW107XG4gIHZhciBsYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUobmV3TGlzdCkge1xuICAgIG5ld0xpc3QgPSBuZXdMaXN0IHx8IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cblxuICAgIHZhciBuZXdMYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obmV3TGlzdCwgb3B0aW9ucyk7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9pZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW19pXTtcblxuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHN0eWxlc0luRE9NW19pbmRleF0ucmVmZXJlbmNlcyA9PT0gMCkge1xuICAgICAgICBzdHlsZXNJbkRPTVtfaW5kZXhdLnVwZGF0ZXIoKTtcblxuICAgICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoX2luZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgbWVtbyA9IHt9O1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cbmZ1bmN0aW9uIGdldFRhcmdldCh0YXJnZXQpIHtcbiAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7IC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG5cbiAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gIH1cblxuICByZXR1cm4gbWVtb1t0YXJnZXRdO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxuZnVuY3Rpb24gaW5zZXJ0QnlTZWxlY3RvcihpbnNlcnQsIHN0eWxlKSB7XG4gIHZhciB0YXJnZXQgPSBnZXRUYXJnZXQoaW5zZXJ0KTtcblxuICBpZiAoIXRhcmdldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gIH1cblxuICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydEJ5U2VsZWN0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gIG9wdGlvbnMuc2V0QXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLmF0dHJpYnV0ZXMpO1xuICBvcHRpb25zLmluc2VydChlbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xuICByZXR1cm4gZWxlbWVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzKHN0eWxlRWxlbWVudCkge1xuICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09IFwidW5kZWZpbmVkXCIgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG5cbiAgaWYgKG5vbmNlKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIG5vbmNlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlczsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gXCJcIjtcblxuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQob2JqLnN1cHBvcnRzLCBcIikge1wiKTtcbiAgfVxuXG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJAbWVkaWEgXCIuY29uY2F0KG9iai5tZWRpYSwgXCIge1wiKTtcbiAgfVxuXG4gIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2Ygb2JqLmxheWVyICE9PSBcInVuZGVmaW5lZFwiO1xuXG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJAbGF5ZXJcIi5jb25jYXQob2JqLmxheWVyLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQob2JqLmxheWVyKSA6IFwiXCIsIFwiIHtcIik7XG4gIH1cblxuICBjc3MgKz0gb2JqLmNzcztcblxuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuICBpZiAoc291cmNlTWFwICYmIHR5cGVvZiBidG9hICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH0gLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuXG4gIG9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZUVsZW1lbnQucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudCk7XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG5mdW5jdGlvbiBkb21BUEkob3B0aW9ucykge1xuICB2YXIgc3R5bGVFbGVtZW50ID0gb3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG4gIHJldHVybiB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUob2JqKSB7XG4gICAgICBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaik7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkb21BUEk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQpIHtcbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R5bGVUYWdUcmFuc2Zvcm07IiwiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vKiBVQVBhcnNlci5qcyB2MS4wLjM1XG4gICBDb3B5cmlnaHQgwqkgMjAxMi0yMDIxIEZhaXNhbCBTYWxtYW4gPGZAZmFpc2FsbWFuLmNvbT5cbiAgIE1JVCBMaWNlbnNlICovLypcbiAgIERldGVjdCBCcm93c2VyLCBFbmdpbmUsIE9TLCBDUFUsIGFuZCBEZXZpY2UgdHlwZS9tb2RlbCBmcm9tIFVzZXItQWdlbnQgZGF0YS5cbiAgIFN1cHBvcnRzIGJyb3dzZXIgJiBub2RlLmpzIGVudmlyb25tZW50LiBcbiAgIERlbW8gICA6IGh0dHBzOi8vZmFpc2FsbWFuLmdpdGh1Yi5pby91YS1wYXJzZXItanNcbiAgIFNvdXJjZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWlzYWxtYW4vdWEtcGFyc2VyLWpzICovXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuKGZ1bmN0aW9uICh3aW5kb3csIHVuZGVmaW5lZCkge1xuXG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDb25zdGFudHNcbiAgICAvLy8vLy8vLy8vLy8vXG5cblxuICAgIHZhciBMSUJWRVJTSU9OICA9ICcxLjAuMzUnLFxuICAgICAgICBFTVBUWSAgICAgICA9ICcnLFxuICAgICAgICBVTktOT1dOICAgICA9ICc/JyxcbiAgICAgICAgRlVOQ19UWVBFICAgPSAnZnVuY3Rpb24nLFxuICAgICAgICBVTkRFRl9UWVBFICA9ICd1bmRlZmluZWQnLFxuICAgICAgICBPQkpfVFlQRSAgICA9ICdvYmplY3QnLFxuICAgICAgICBTVFJfVFlQRSAgICA9ICdzdHJpbmcnLFxuICAgICAgICBNQUpPUiAgICAgICA9ICdtYWpvcicsXG4gICAgICAgIE1PREVMICAgICAgID0gJ21vZGVsJyxcbiAgICAgICAgTkFNRSAgICAgICAgPSAnbmFtZScsXG4gICAgICAgIFRZUEUgICAgICAgID0gJ3R5cGUnLFxuICAgICAgICBWRU5ET1IgICAgICA9ICd2ZW5kb3InLFxuICAgICAgICBWRVJTSU9OICAgICA9ICd2ZXJzaW9uJyxcbiAgICAgICAgQVJDSElURUNUVVJFPSAnYXJjaGl0ZWN0dXJlJyxcbiAgICAgICAgQ09OU09MRSAgICAgPSAnY29uc29sZScsXG4gICAgICAgIE1PQklMRSAgICAgID0gJ21vYmlsZScsXG4gICAgICAgIFRBQkxFVCAgICAgID0gJ3RhYmxldCcsXG4gICAgICAgIFNNQVJUVFYgICAgID0gJ3NtYXJ0dHYnLFxuICAgICAgICBXRUFSQUJMRSAgICA9ICd3ZWFyYWJsZScsXG4gICAgICAgIEVNQkVEREVEICAgID0gJ2VtYmVkZGVkJyxcbiAgICAgICAgVUFfTUFYX0xFTkdUSCA9IDM1MDtcblxuICAgIHZhciBBTUFaT04gID0gJ0FtYXpvbicsXG4gICAgICAgIEFQUExFICAgPSAnQXBwbGUnLFxuICAgICAgICBBU1VTICAgID0gJ0FTVVMnLFxuICAgICAgICBCTEFDS0JFUlJZID0gJ0JsYWNrQmVycnknLFxuICAgICAgICBCUk9XU0VSID0gJ0Jyb3dzZXInLFxuICAgICAgICBDSFJPTUUgID0gJ0Nocm9tZScsXG4gICAgICAgIEVER0UgICAgPSAnRWRnZScsXG4gICAgICAgIEZJUkVGT1ggPSAnRmlyZWZveCcsXG4gICAgICAgIEdPT0dMRSAgPSAnR29vZ2xlJyxcbiAgICAgICAgSFVBV0VJICA9ICdIdWF3ZWknLFxuICAgICAgICBMRyAgICAgID0gJ0xHJyxcbiAgICAgICAgTUlDUk9TT0ZUID0gJ01pY3Jvc29mdCcsXG4gICAgICAgIE1PVE9ST0xBICA9ICdNb3Rvcm9sYScsXG4gICAgICAgIE9QRVJBICAgPSAnT3BlcmEnLFxuICAgICAgICBTQU1TVU5HID0gJ1NhbXN1bmcnLFxuICAgICAgICBTSEFSUCAgID0gJ1NoYXJwJyxcbiAgICAgICAgU09OWSAgICA9ICdTb255JyxcbiAgICAgICAgVklFUkEgICA9ICdWaWVyYScsXG4gICAgICAgIFhJQU9NSSAgPSAnWGlhb21pJyxcbiAgICAgICAgWkVCUkEgICA9ICdaZWJyYScsXG4gICAgICAgIEZBQ0VCT09LICAgID0gJ0ZhY2Vib29rJyxcbiAgICAgICAgQ0hST01JVU1fT1MgPSAnQ2hyb21pdW0gT1MnLFxuICAgICAgICBNQUNfT1MgID0gJ01hYyBPUyc7XG5cbiAgICAvLy8vLy8vLy8vL1xuICAgIC8vIEhlbHBlclxuICAgIC8vLy8vLy8vLy9cblxuICAgIHZhciBleHRlbmQgPSBmdW5jdGlvbiAocmVnZXhlcywgZXh0ZW5zaW9ucykge1xuICAgICAgICAgICAgdmFyIG1lcmdlZFJlZ2V4ZXMgPSB7fTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gcmVnZXhlcykge1xuICAgICAgICAgICAgICAgIGlmIChleHRlbnNpb25zW2ldICYmIGV4dGVuc2lvbnNbaV0ubGVuZ3RoICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBtZXJnZWRSZWdleGVzW2ldID0gZXh0ZW5zaW9uc1tpXS5jb25jYXQocmVnZXhlc1tpXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbWVyZ2VkUmVnZXhlc1tpXSA9IHJlZ2V4ZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1lcmdlZFJlZ2V4ZXM7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcml6ZSA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgICAgICAgICAgIHZhciBlbnVtcyA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGVudW1zW2FycltpXS50b1VwcGVyQ2FzZSgpXSA9IGFycltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlbnVtcztcbiAgICAgICAgfSxcbiAgICAgICAgaGFzID0gZnVuY3Rpb24gKHN0cjEsIHN0cjIpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygc3RyMSA9PT0gU1RSX1RZUEUgPyBsb3dlcml6ZShzdHIyKS5pbmRleE9mKGxvd2VyaXplKHN0cjEpKSAhPT0gLTEgOiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgbG93ZXJpemUgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1ham9yaXplID0gZnVuY3Rpb24gKHZlcnNpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YodmVyc2lvbikgPT09IFNUUl9UWVBFID8gdmVyc2lvbi5yZXBsYWNlKC9bXlxcZFxcLl0vZywgRU1QVFkpLnNwbGl0KCcuJylbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHRyaW0gPSBmdW5jdGlvbiAoc3RyLCBsZW4pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Yoc3RyKSA9PT0gU1RSX1RZUEUpIHtcbiAgICAgICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXlxcc1xccyovLCBFTVBUWSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZihsZW4pID09PSBVTkRFRl9UWVBFID8gc3RyIDogc3RyLnN1YnN0cmluZygwLCBVQV9NQVhfTEVOR1RIKTtcbiAgICAgICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTWFwIGhlbHBlclxuICAgIC8vLy8vLy8vLy8vLy8vXG5cbiAgICB2YXIgcmd4TWFwcGVyID0gZnVuY3Rpb24gKHVhLCBhcnJheXMpIHtcblxuICAgICAgICAgICAgdmFyIGkgPSAwLCBqLCBrLCBwLCBxLCBtYXRjaGVzLCBtYXRjaDtcblxuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFsbCByZWdleGVzIG1hcHNcbiAgICAgICAgICAgIHdoaWxlIChpIDwgYXJyYXlzLmxlbmd0aCAmJiAhbWF0Y2hlcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlZ2V4ID0gYXJyYXlzW2ldLCAgICAgICAvLyBldmVuIHNlcXVlbmNlICgwLDIsNCwuLilcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMgPSBhcnJheXNbaSArIDFdOyAgIC8vIG9kZCBzZXF1ZW5jZSAoMSwzLDUsLi4pXG4gICAgICAgICAgICAgICAgaiA9IGsgPSAwO1xuXG4gICAgICAgICAgICAgICAgLy8gdHJ5IG1hdGNoaW5nIHVhc3RyaW5nIHdpdGggcmVnZXhlc1xuICAgICAgICAgICAgICAgIHdoaWxlIChqIDwgcmVnZXgubGVuZ3RoICYmICFtYXRjaGVzKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWdleFtqXSkgeyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0gcmVnZXhbaisrXS5leGVjKHVhKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoISFtYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IG1hdGNoZXNbKytrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gcHJvcHNbcF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgZ2l2ZW4gcHJvcGVydHkgaXMgYWN0dWFsbHkgYXJyYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHEgPT09IE9CSl9UWVBFICYmIHEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcVsxXSA9PSBGVU5DX1RZUEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhc3NpZ24gbW9kaWZpZWQgbWF0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gcVsxXS5jYWxsKHRoaXMsIG1hdGNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzaWduIGdpdmVuIHZhbHVlLCBpZ25vcmUgcmVnZXggbWF0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gcVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgd2hldGhlciBmdW5jdGlvbiBvciByZWdleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBxWzFdID09PSBGVU5DX1RZUEUgJiYgIShxWzFdLmV4ZWMgJiYgcVsxXS50ZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGwgZnVuY3Rpb24gKHVzdWFsbHkgc3RyaW5nIG1hcHBlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gbWF0Y2ggPyBxWzFdLmNhbGwodGhpcywgbWF0Y2gsIHFbMl0pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzYW5pdGl6ZSBtYXRjaCB1c2luZyBnaXZlbiByZWdleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbcVswXV0gPSBtYXRjaCA/IG1hdGNoLnJlcGxhY2UocVsxXSwgcVsyXSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocS5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gbWF0Y2ggPyBxWzNdLmNhbGwodGhpcywgbWF0Y2gucmVwbGFjZShxWzFdLCBxWzJdKSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FdID0gbWF0Y2ggPyBtYXRjaCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHN0ck1hcHBlciA9IGZ1bmN0aW9uIChzdHIsIG1hcCkge1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIG1hcCkge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGN1cnJlbnQgdmFsdWUgaXMgYXJyYXlcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1hcFtpXSA9PT0gT0JKX1RZUEUgJiYgbWFwW2ldLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXBbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXMobWFwW2ldW2pdLCBzdHIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpID09PSBVTktOT1dOKSA/IHVuZGVmaW5lZCA6IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhhcyhtYXBbaV0sIHN0cikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpID09PSBVTktOT1dOKSA/IHVuZGVmaW5lZCA6IGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9O1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU3RyaW5nIG1hcFxuICAgIC8vLy8vLy8vLy8vLy8vXG5cbiAgICAvLyBTYWZhcmkgPCAzLjBcbiAgICB2YXIgb2xkU2FmYXJpTWFwID0ge1xuICAgICAgICAgICAgJzEuMCcgICA6ICcvOCcsXG4gICAgICAgICAgICAnMS4yJyAgIDogJy8xJyxcbiAgICAgICAgICAgICcxLjMnICAgOiAnLzMnLFxuICAgICAgICAgICAgJzIuMCcgICA6ICcvNDEyJyxcbiAgICAgICAgICAgICcyLjAuMicgOiAnLzQxNicsXG4gICAgICAgICAgICAnMi4wLjMnIDogJy80MTcnLFxuICAgICAgICAgICAgJzIuMC40JyA6ICcvNDE5JyxcbiAgICAgICAgICAgICc/JyAgICAgOiAnLydcbiAgICAgICAgfSxcbiAgICAgICAgd2luZG93c1ZlcnNpb25NYXAgPSB7XG4gICAgICAgICAgICAnTUUnICAgICAgICA6ICc0LjkwJyxcbiAgICAgICAgICAgICdOVCAzLjExJyAgIDogJ05UMy41MScsXG4gICAgICAgICAgICAnTlQgNC4wJyAgICA6ICdOVDQuMCcsXG4gICAgICAgICAgICAnMjAwMCcgICAgICA6ICdOVCA1LjAnLFxuICAgICAgICAgICAgJ1hQJyAgICAgICAgOiBbJ05UIDUuMScsICdOVCA1LjInXSxcbiAgICAgICAgICAgICdWaXN0YScgICAgIDogJ05UIDYuMCcsXG4gICAgICAgICAgICAnNycgICAgICAgICA6ICdOVCA2LjEnLFxuICAgICAgICAgICAgJzgnICAgICAgICAgOiAnTlQgNi4yJyxcbiAgICAgICAgICAgICc4LjEnICAgICAgIDogJ05UIDYuMycsXG4gICAgICAgICAgICAnMTAnICAgICAgICA6IFsnTlQgNi40JywgJ05UIDEwLjAnXSxcbiAgICAgICAgICAgICdSVCcgICAgICAgIDogJ0FSTSdcbiAgICB9O1xuXG4gICAgLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSZWdleCBtYXBcbiAgICAvLy8vLy8vLy8vLy8vXG5cbiAgICB2YXIgcmVnZXhlcyA9IHtcblxuICAgICAgICBicm93c2VyIDogW1tcblxuICAgICAgICAgICAgL1xcYig/OmNybW98Y3Jpb3MpXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hyb21lIGZvciBBbmRyb2lkL2lPU1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnQ2hyb21lJ11dLCBbXG4gICAgICAgICAgICAvZWRnKD86ZXxpb3N8YSk/XFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pY3Jvc29mdCBFZGdlXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdFZGdlJ11dLCBbXG5cbiAgICAgICAgICAgIC8vIFByZXN0byBiYXNlZFxuICAgICAgICAgICAgLyhvcGVyYSBtaW5pKVxcLyhbLVxcd1xcLl0rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcGVyYSBNaW5pXG4gICAgICAgICAgICAvKG9wZXJhIFttb2JpbGV0YWJdezMsNn0pXFxiLit2ZXJzaW9uXFwvKFstXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAvLyBPcGVyYSBNb2JpL1RhYmxldFxuICAgICAgICAgICAgLyhvcGVyYSkoPzouK3ZlcnNpb25cXC98W1xcLyBdKykoW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3BlcmFcbiAgICAgICAgICAgIF0sIFtOQU1FLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgL29waW9zW1xcLyBdKyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcGVyYSBtaW5pIG9uIGlwaG9uZSA+PSA4LjBcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgT1BFUkErJyBNaW5pJ11dLCBbXG4gICAgICAgICAgICAvXFxib3ByXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcGVyYSBXZWJraXRcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgT1BFUkFdXSwgW1xuXG4gICAgICAgICAgICAvLyBNaXhlZFxuICAgICAgICAgICAgLyhraW5kbGUpXFwvKFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLaW5kbGVcbiAgICAgICAgICAgIC8obHVuYXNjYXBlfG1heHRob258bmV0ZnJvbnR8amFzbWluZXxibGF6ZXIpW1xcLyBdPyhbXFx3XFwuXSopL2ksICAgICAgLy8gTHVuYXNjYXBlL01heHRob24vTmV0ZnJvbnQvSmFzbWluZS9CbGF6ZXJcbiAgICAgICAgICAgIC8vIFRyaWRlbnQgYmFzZWRcbiAgICAgICAgICAgIC8oYXZhbnQgfGllbW9iaWxlfHNsaW0pKD86YnJvd3Nlcik/W1xcLyBdPyhbXFx3XFwuXSopL2ksICAgICAgICAgICAgICAgLy8gQXZhbnQvSUVNb2JpbGUvU2xpbUJyb3dzZXJcbiAgICAgICAgICAgIC8oYmE/aWR1YnJvd3NlcilbXFwvIF0/KFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmFpZHUgQnJvd3NlclxuICAgICAgICAgICAgLyg/Om1zfFxcKCkoaWUpIChbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlcm5ldCBFeHBsb3JlclxuXG4gICAgICAgICAgICAvLyBXZWJraXQvS0hUTUwgYmFzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZsb2NrL1JvY2tNZWx0L01pZG9yaS9FcGlwaGFueS9TaWxrL1NreWZpcmUvQm9sdC9Jcm9uL0lyaWRpdW0vUGhhbnRvbUpTL0Jvd3Nlci9RdXBaaWxsYS9GYWxrb25cbiAgICAgICAgICAgIC8oZmxvY2t8cm9ja21lbHR8bWlkb3JpfGVwaXBoYW55fHNpbGt8c2t5ZmlyZXxib2x0fGlyb258dml2YWxkaXxpcmlkaXVtfHBoYW50b21qc3xib3dzZXJ8cXVhcmt8cXVwemlsbGF8ZmFsa29ufHJla29ucXxwdWZmaW58YnJhdmV8d2hhbGUoPyEuK25hdmVyKXxxcWJyb3dzZXJsaXRlfHFxfGR1Y2tkdWNrZ28pXFwvKFstXFx3XFwuXSspL2ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJla29ucS9QdWZmaW4vQnJhdmUvV2hhbGUvUVFCcm93c2VyTGl0ZS9RUSwgYWthIFNob3VRXG4gICAgICAgICAgICAvKGhleXRhcHxvdmkpYnJvd3NlclxcLyhbXFxkXFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhleXRhcC9PdmlcbiAgICAgICAgICAgIC8od2VpYm8pX18oW1xcZFxcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZWlib1xuICAgICAgICAgICAgXSwgW05BTUUsIFZFUlNJT05dLCBbXG4gICAgICAgICAgICAvKD86XFxidWM/ID9icm93c2VyfCg/Omp1Yy4rKXVjd2ViKVtcXC8gXT8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAvLyBVQ0Jyb3dzZXJcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ1VDJytCUk9XU0VSXV0sIFtcbiAgICAgICAgICAgIC9taWNyb20uK1xcYnFiY29yZVxcLyhbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlQ2hhdCBEZXNrdG9wIGZvciBXaW5kb3dzIEJ1aWx0LWluIEJyb3dzZXJcbiAgICAgICAgICAgIC9cXGJxYmNvcmVcXC8oW1xcd1xcLl0rKS4rbWljcm9tL2lcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ1dlQ2hhdChXaW4pIERlc2t0b3AnXV0sIFtcbiAgICAgICAgICAgIC9taWNyb21lc3NlbmdlclxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2VDaGF0XG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdXZUNoYXQnXV0sIFtcbiAgICAgICAgICAgIC9rb25xdWVyb3JcXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gS29ucXVlcm9yXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdLb25xdWVyb3InXV0sIFtcbiAgICAgICAgICAgIC90cmlkZW50Litydls6IF0oW1xcd1xcLl17MSw5fSlcXGIuK2xpa2UgZ2Vja28vaSAgICAgICAgICAgICAgICAgICAgICAgLy8gSUUxMVxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnSUUnXV0sIFtcbiAgICAgICAgICAgIC95YSg/OnNlYXJjaCk/YnJvd3NlclxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWWFuZGV4XG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdZYW5kZXgnXV0sIFtcbiAgICAgICAgICAgIC8oYXZhc3R8YXZnKVxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZhc3QvQVZHIFNlY3VyZSBCcm93c2VyXG4gICAgICAgICAgICBdLCBbW05BTUUsIC8oLispLywgJyQxIFNlY3VyZSAnK0JST1dTRVJdLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgL1xcYmZvY3VzXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveCBGb2N1c1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCBGSVJFRk9YKycgRm9jdXMnXV0sIFtcbiAgICAgICAgICAgIC9cXGJvcHRcXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wZXJhIFRvdWNoXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIE9QRVJBKycgVG91Y2gnXV0sIFtcbiAgICAgICAgICAgIC9jb2NfY29jXFx3K1xcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvYyBDb2MgQnJvd3NlclxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnQ29jIENvYyddXSwgW1xuICAgICAgICAgICAgL2RvbGZpblxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb2xwaGluXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdEb2xwaGluJ11dLCBbXG4gICAgICAgICAgICAvY29hc3RcXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wZXJhIENvYXN0XG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIE9QRVJBKycgQ29hc3QnXV0sIFtcbiAgICAgICAgICAgIC9taXVpYnJvd3NlclxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTUlVSSBCcm93c2VyXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdNSVVJICcrQlJPV1NFUl1dLCBbXG4gICAgICAgICAgICAvZnhpb3NcXC8oWy1cXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpcmVmb3ggZm9yIGlPU1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCBGSVJFRk9YXV0sIFtcbiAgICAgICAgICAgIC9cXGJxaWh1fChxaT9obz9vP3wzNjApYnJvd3Nlci9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDM2MFxuICAgICAgICAgICAgXSwgW1tOQU1FLCAnMzYwICcrQlJPV1NFUl1dLCBbXG4gICAgICAgICAgICAvKG9jdWx1c3xzYW1zdW5nfHNhaWxmaXNofGh1YXdlaSlicm93c2VyXFwvKFtcXHdcXC5dKykvaVxuICAgICAgICAgICAgXSwgW1tOQU1FLCAvKC4rKS8sICckMSAnK0JST1dTRVJdLCBWRVJTSU9OXSwgWyAgICAgICAgICAgICAgICAgICAgICAvLyBPY3VsdXMvU2Ftc3VuZy9TYWlsZmlzaC9IdWF3ZWkgQnJvd3NlclxuICAgICAgICAgICAgLyhjb21vZG9fZHJhZ29uKVxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb21vZG8gRHJhZ29uXG4gICAgICAgICAgICBdLCBbW05BTUUsIC9fL2csICcgJ10sIFZFUlNJT05dLCBbXG4gICAgICAgICAgICAvKGVsZWN0cm9uKVxcLyhbXFx3XFwuXSspIHNhZmFyaS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVsZWN0cm9uLWJhc2VkIEFwcFxuICAgICAgICAgICAgLyh0ZXNsYSkoPzogcXRjYXJicm93c2VyfFxcLygyMFxcZFxcZFxcLlstXFx3XFwuXSspKS9pLCAgICAgICAgICAgICAgICAgICAvLyBUZXNsYVxuICAgICAgICAgICAgL20/KHFxYnJvd3NlcnxiYWlkdWJveGFwcHwyMzQ1RXhwbG9yZXIpW1xcLyBdPyhbXFx3XFwuXSspL2kgICAgICAgICAgICAvLyBRUUJyb3dzZXIvQmFpZHUgQXBwLzIzNDUgQnJvd3NlclxuICAgICAgICAgICAgXSwgW05BTUUsIFZFUlNJT05dLCBbXG4gICAgICAgICAgICAvKG1ldGFzcilbXFwvIF0/KFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNvdUdvdUJyb3dzZXJcbiAgICAgICAgICAgIC8obGJicm93c2VyKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGllQmFvIEJyb3dzZXJcbiAgICAgICAgICAgIC9cXFsobGlua2VkaW4pYXBwXFxdL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMaW5rZWRJbiBBcHAgZm9yIGlPUyAmIEFuZHJvaWRcbiAgICAgICAgICAgIF0sIFtOQU1FXSwgW1xuXG4gICAgICAgICAgICAvLyBXZWJWaWV3XG4gICAgICAgICAgICAvKCg/OmZiYW5cXC9mYmlvc3xmYl9pYWJcXC9mYjRhKSg/IS4rZmJhdil8O2ZiYXZcXC8oW1xcd1xcLl0rKTspL2kgICAgICAgLy8gRmFjZWJvb2sgQXBwIGZvciBpT1MgJiBBbmRyb2lkXG4gICAgICAgICAgICBdLCBbW05BTUUsIEZBQ0VCT09LXSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgIC8oa2FrYW8oPzp0YWxrfHN0b3J5KSlbXFwvIF0oW1xcd1xcLl0rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gS2FrYW8gQXBwXG4gICAgICAgICAgICAvKG5hdmVyKVxcKC4qPyhcXGQrXFwuW1xcd1xcLl0rKS4qXFwpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5hdmVyIEluQXBwXG4gICAgICAgICAgICAvc2FmYXJpIChsaW5lKVxcLyhbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExpbmUgQXBwIGZvciBpT1NcbiAgICAgICAgICAgIC9cXGIobGluZSlcXC8oW1xcd1xcLl0rKVxcL2lhYi9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMaW5lIEFwcCBmb3IgQW5kcm9pZFxuICAgICAgICAgICAgLyhjaHJvbWl1bXxpbnN0YWdyYW0pW1xcLyBdKFstXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaHJvbWl1bS9JbnN0YWdyYW1cbiAgICAgICAgICAgIF0sIFtOQU1FLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgL1xcYmdzYVxcLyhbXFx3XFwuXSspIC4qc2FmYXJpXFwvL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvb2dsZSBTZWFyY2ggQXBwbGlhbmNlIG9uIGlPU1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnR1NBJ11dLCBbXG4gICAgICAgICAgICAvbXVzaWNhbF9seSg/Oi4rYXBwXz92ZXJzaW9uXFwvfF8pKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRpa1Rva1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnVGlrVG9rJ11dLCBbXG5cbiAgICAgICAgICAgIC9oZWFkbGVzc2Nocm9tZSg/OlxcLyhbXFx3XFwuXSspfCApL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hyb21lIEhlYWRsZXNzXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIENIUk9NRSsnIEhlYWRsZXNzJ11dLCBbXG5cbiAgICAgICAgICAgIC8gd3ZcXCkuKyhjaHJvbWUpXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENocm9tZSBXZWJWaWV3XG4gICAgICAgICAgICBdLCBbW05BTUUsIENIUk9NRSsnIFdlYlZpZXcnXSwgVkVSU0lPTl0sIFtcblxuICAgICAgICAgICAgL2Ryb2lkLisgdmVyc2lvblxcLyhbXFx3XFwuXSspXFxiLisoPzptb2JpbGUgc2FmYXJpfHNhZmFyaSkvaSAgICAgICAgICAgLy8gQW5kcm9pZCBCcm93c2VyXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdBbmRyb2lkICcrQlJPV1NFUl1dLCBbXG5cbiAgICAgICAgICAgIC8oY2hyb21lfG9tbml3ZWJ8YXJvcmF8W3RpemVub2thXXs1fSA/YnJvd3NlcilcXC92PyhbXFx3XFwuXSspL2kgICAgICAgLy8gQ2hyb21lL09tbmlXZWIvQXJvcmEvVGl6ZW4vTm9raWFcbiAgICAgICAgICAgIF0sIFtOQU1FLCBWRVJTSU9OXSwgW1xuXG4gICAgICAgICAgICAvdmVyc2lvblxcLyhbXFx3XFwuXFwsXSspIC4qbW9iaWxlXFwvXFx3KyAoc2FmYXJpKS9pICAgICAgICAgICAgICAgICAgICAgIC8vIE1vYmlsZSBTYWZhcmlcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ01vYmlsZSBTYWZhcmknXV0sIFtcbiAgICAgICAgICAgIC92ZXJzaW9uXFwvKFtcXHcoXFwufFxcLCldKykgLioobW9iaWxlID9zYWZhcml8c2FmYXJpKS9pICAgICAgICAgICAgICAgIC8vIFNhZmFyaSAmIFNhZmFyaSBNb2JpbGVcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBOQU1FXSwgW1xuICAgICAgICAgICAgL3dlYmtpdC4rPyhtb2JpbGUgP3NhZmFyaXxzYWZhcmkpKFxcL1tcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAvLyBTYWZhcmkgPCAzLjBcbiAgICAgICAgICAgIF0sIFtOQU1FLCBbVkVSU0lPTiwgc3RyTWFwcGVyLCBvbGRTYWZhcmlNYXBdXSwgW1xuXG4gICAgICAgICAgICAvKHdlYmtpdHxraHRtbClcXC8oW1xcd1xcLl0rKS9pXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcblxuICAgICAgICAgICAgLy8gR2Vja28gYmFzZWRcbiAgICAgICAgICAgIC8obmF2aWdhdG9yfG5ldHNjYXBlXFxkPylcXC8oWy1cXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldHNjYXBlXG4gICAgICAgICAgICBdLCBbW05BTUUsICdOZXRzY2FwZSddLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgL21vYmlsZSB2cjsgcnY6KFtcXHdcXC5dKylcXCkuK2ZpcmVmb3gvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94IFJlYWxpdHlcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgRklSRUZPWCsnIFJlYWxpdHknXV0sIFtcbiAgICAgICAgICAgIC9la2lvaGYuKyhmbG93KVxcLyhbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmxvd1xuICAgICAgICAgICAgLyhzd2lmdGZveCkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTd2lmdGZveFxuICAgICAgICAgICAgLyhpY2VkcmFnb258aWNld2Vhc2VsfGNhbWlub3xjaGltZXJhfGZlbm5lY3xtYWVtbyBicm93c2VyfG1pbmltb3xjb25rZXJvcnxrbGFyKVtcXC8gXT8oW1xcd1xcLlxcK10rKS9pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJY2VEcmFnb24vSWNld2Vhc2VsL0NhbWluby9DaGltZXJhL0Zlbm5lYy9NYWVtby9NaW5pbW8vQ29ua2Vyb3IvS2xhclxuICAgICAgICAgICAgLyhzZWFtb25rZXl8ay1tZWxlb258aWNlY2F0fGljZWFwZXxmaXJlYmlyZHxwaG9lbml4fHBhbGVtb29ufGJhc2lsaXNrfHdhdGVyZm94KVxcLyhbLVxcd1xcLl0rKSQvaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveC9TZWFNb25rZXkvSy1NZWxlb24vSWNlQ2F0L0ljZUFwZS9GaXJlYmlyZC9QaG9lbml4XG4gICAgICAgICAgICAvKGZpcmVmb3gpXFwvKFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyIEZpcmVmb3gtYmFzZWRcbiAgICAgICAgICAgIC8obW96aWxsYSlcXC8oW1xcd1xcLl0rKSAuK3J2XFw6LitnZWNrb1xcL1xcZCsvaSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW96aWxsYVxuXG4gICAgICAgICAgICAvLyBPdGhlclxuICAgICAgICAgICAgLyhwb2xhcmlzfGx5bnh8ZGlsbG98aWNhYnxkb3Jpc3xhbWF5YXx3M218bmV0c3VyZnxzbGVpcG5pcnxvYmlnb3xtb3NhaWN8KD86Z298aWNlfHVwKVtcXC4gXT9icm93c2VyKVstXFwvIF0/dj8oW1xcd1xcLl0rKS9pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQb2xhcmlzL0x5bngvRGlsbG8vaUNhYi9Eb3Jpcy9BbWF5YS93M20vTmV0U3VyZi9TbGVpcG5pci9PYmlnby9Nb3NhaWMvR28vSUNFL1VQLkJyb3dzZXJcbiAgICAgICAgICAgIC8obGlua3MpIFxcKChbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGlua3NcbiAgICAgICAgICAgIC9wYW5hc29uaWM7KHZpZXJhKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFuYXNvbmljIFZpZXJhXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLyhjb2JhbHQpXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb2JhbHRcbiAgICAgICAgICAgIF0sIFtOQU1FLCBbVkVSU0lPTiwgL21hc3Rlci58bHRzLi8sIFwiXCJdXVxuICAgICAgICBdLFxuXG4gICAgICAgIGNwdSA6IFtbXG5cbiAgICAgICAgICAgIC8oPzooYW1kfHgoPzooPzo4Nnw2NClbLV9dKT98d293fHdpbik2NClbO1xcKV0vaSAgICAgICAgICAgICAgICAgICAgIC8vIEFNRDY0ICh4NjQpXG4gICAgICAgICAgICBdLCBbW0FSQ0hJVEVDVFVSRSwgJ2FtZDY0J11dLCBbXG5cbiAgICAgICAgICAgIC8oaWEzMig/PTspKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUEzMiAocXVpY2t0aW1lKVxuICAgICAgICAgICAgXSwgW1tBUkNISVRFQ1RVUkUsIGxvd2VyaXplXV0sIFtcblxuICAgICAgICAgICAgLygoPzppWzM0Nl18eCk4NilbO1xcKV0vaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUEzMiAoeDg2KVxuICAgICAgICAgICAgXSwgW1tBUkNISVRFQ1RVUkUsICdpYTMyJ11dLCBbXG5cbiAgICAgICAgICAgIC9cXGIoYWFyY2g2NHxhcm0odj84ZT9sP3xfPzY0KSlcXGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFSTTY0XG4gICAgICAgICAgICBdLCBbW0FSQ0hJVEVDVFVSRSwgJ2FybTY0J11dLCBbXG5cbiAgICAgICAgICAgIC9cXGIoYXJtKD86dls2N10pP2h0P24/W2ZsXXA/KVxcYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBUk1IRlxuICAgICAgICAgICAgXSwgW1tBUkNISVRFQ1RVUkUsICdhcm1oZiddXSwgW1xuXG4gICAgICAgICAgICAvLyBQb2NrZXRQQyBtaXN0YWtlbmx5IGlkZW50aWZpZWQgYXMgUG93ZXJQQ1xuICAgICAgICAgICAgL3dpbmRvd3MgKGNlfG1vYmlsZSk7IHBwYzsvaVxuICAgICAgICAgICAgXSwgW1tBUkNISVRFQ1RVUkUsICdhcm0nXV0sIFtcblxuICAgICAgICAgICAgLygoPzpwcGN8cG93ZXJwYykoPzo2NCk/KSg/OiBtYWN8O3xcXCkpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUG93ZXJQQ1xuICAgICAgICAgICAgXSwgW1tBUkNISVRFQ1RVUkUsIC9vd2VyLywgRU1QVFksIGxvd2VyaXplXV0sIFtcblxuICAgICAgICAgICAgLyhzdW40XFx3KVs7XFwpXS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNQQVJDXG4gICAgICAgICAgICBdLCBbW0FSQ0hJVEVDVFVSRSwgJ3NwYXJjJ11dLCBbXG5cbiAgICAgICAgICAgIC8oKD86YXZyMzJ8aWE2NCg/PTspKXw2OGsoPz1cXCkpfFxcYmFybSg/PXYoPzpbMS03XXxbNS03XTEpbD98O3xlYWJpKXwoPz1hdG1lbCApYXZyfCg/OmlyaXh8bWlwc3xzcGFyYykoPzo2NCk/XFxifHBhLXJpc2MpL2lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUE2NCwgNjhLLCBBUk0vNjQsIEFWUi8zMiwgSVJJWC82NCwgTUlQUy82NCwgU1BBUkMvNjQsIFBBLVJJU0NcbiAgICAgICAgICAgIF0sIFtbQVJDSElURUNUVVJFLCBsb3dlcml6ZV1dXG4gICAgICAgIF0sXG5cbiAgICAgICAgZGV2aWNlIDogW1tcblxuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgICAgIC8vIE1PQklMRVMgJiBUQUJMRVRTXG4gICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgICAgIC8vIFNhbXN1bmdcbiAgICAgICAgICAgIC9cXGIoc2NoLWlbODldMFxcZHxzaHctbTM4MHN8c20tW3B0eF1cXHd7Miw0fXxndC1bcG5dXFxkezIsNH18c2doLXQ4WzU2XTl8bmV4dXMgMTApL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgU0FNU1VOR10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYigoPzpzW2NncF1ofGd0fHNtKS1cXHcrfHNjW2ctXT9bXFxkXSthP3xnYWxheHkgbmV4dXMpL2ksXG4gICAgICAgICAgICAvc2Ftc3VuZ1stIF0oWy1cXHddKykvaSxcbiAgICAgICAgICAgIC9zZWMtKHNnaFxcdyspL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgU0FNU1VOR10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBBcHBsZVxuICAgICAgICAgICAgLyg/OlxcL3xcXCgpKGlwKD86aG9uZXxvZClbXFx3LCBdKikoPzpcXC98OykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaVBvZC9pUGhvbmVcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVBQTEVdLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9cXCgoaXBhZCk7Wy1cXHdcXCksOyBdK2FwcGxlL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaVBhZFxuICAgICAgICAgICAgL2FwcGxlY29yZW1lZGlhXFwvW1xcd1xcLl0rIFxcKChpcGFkKS9pLFxuICAgICAgICAgICAgL1xcYihpcGFkKVxcZFxcZD8sXFxkXFxkP1s7XFxdXS4raW9zL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVBQTEVdLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8obWFjaW50b3NoKTsvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBBUFBMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIFNoYXJwXG4gICAgICAgICAgICAvXFxiKHNoLT9bYWx0dnpdP1xcZFxcZFthLWVrbV0/KS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFNIQVJQXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIEh1YXdlaVxuICAgICAgICAgICAgL1xcYigoPzphZ1tyc11bMjNdP3xiYWgyP3xzaHQ/fGJ0diktYT9bbHddXFxkezJ9KVxcYig/IS4rZFxcL3MpL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgSFVBV0VJXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvKD86aHVhd2VpfGhvbm9yKShbLVxcdyBdKylbO1xcKV0vaSxcbiAgICAgICAgICAgIC9cXGIobmV4dXMgNnB8XFx3ezIsNH1lPy1bYXR1XT9bbG5dW1xcZHhdWzAxMjM1OWNdW2Fkbl0/KVxcYig/IS4rZFxcL3MpL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgSFVBV0VJXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIFhpYW9taVxuICAgICAgICAgICAgL1xcYihwb2NvW1xcdyBdKykoPzogYnVpfFxcKSkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBYaWFvbWkgUE9DT1xuICAgICAgICAgICAgL1xcYjsgKFxcdyspIGJ1aWxkXFwvaG1cXDEvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWGlhb21pIEhvbmdtaSAnbnVtZXJpYycgbW9kZWxzXG4gICAgICAgICAgICAvXFxiKGhtWy1fIF0/bm90ZT9bXyBdPyg/OlxcZFxcdyk/KSBidWkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFhpYW9taSBIb25nbWlcbiAgICAgICAgICAgIC9cXGIocmVkbWlbXFwtXyBdPyg/Om5vdGV8ayk/W1xcd18gXSspKD86IGJ1aXxcXCkpL2ksICAgICAgICAgICAgICAgICAgIC8vIFhpYW9taSBSZWRtaVxuICAgICAgICAgICAgL1xcYihtaVstXyBdPyg/OmFcXGR8b25lfG9uZVtfIF1wbHVzfG5vdGUgbHRlfG1heHxjYyk/W18gXT8oPzpcXGQ/XFx3PylbXyBdPyg/OnBsdXN8c2V8bGl0ZSk/KSg/OiBidWl8XFwpKS9pIC8vIFhpYW9taSBNaVxuICAgICAgICAgICAgXSwgW1tNT0RFTCwgL18vZywgJyAnXSwgW1ZFTkRPUiwgWElBT01JXSwgW1RZUEUsIE1PQklMRV1dLCBbXG4gICAgICAgICAgICAvXFxiKG1pWy1fIF0/KD86cGFkKSg/OltcXHdfIF0rKSkoPzogYnVpfFxcKSkvaSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pIFBhZCB0YWJsZXRzXG4gICAgICAgICAgICBdLFtbTU9ERUwsIC9fL2csICcgJ10sIFtWRU5ET1IsIFhJQU9NSV0sIFtUWVBFLCBUQUJMRVRdXSwgW1xuXG4gICAgICAgICAgICAvLyBPUFBPXG4gICAgICAgICAgICAvOyAoXFx3KykgYnVpLisgb3Bwby9pLFxuICAgICAgICAgICAgL1xcYihjcGhbMTJdXFxkezN9fHAoPzphZnxjW2FsXXxkXFx3fGVbYXJdKVttdF1cXGQwfHg5MDA3fGExMDFvcClcXGIvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnT1BQTyddLCBbVFlQRSwgTU9CSUxFXV0sIFtcblxuICAgICAgICAgICAgLy8gVml2b1xuICAgICAgICAgICAgL3Zpdm8gKFxcdyspKD86IGJ1aXxcXCkpL2ksXG4gICAgICAgICAgICAvXFxiKHZbMTJdXFxkezN9XFx3P1thdF0pKD86IGJ1aXw7KS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdWaXZvJ10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBSZWFsbWVcbiAgICAgICAgICAgIC9cXGIocm14WzEyXVxcZHszfSkoPzogYnVpfDt8XFwpKS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdSZWFsbWUnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIE1vdG9yb2xhXG4gICAgICAgICAgICAvXFxiKG1pbGVzdG9uZXxkcm9pZCg/OlsyLTR4XXwgKD86YmlvbmljfHgyfHByb3xyYXpyKSk/Oj8oIDRnKT8pXFxiW1xcdyBdK2J1aWxkXFwvL2ksXG4gICAgICAgICAgICAvXFxibW90KD86b3JvbGEpP1stIF0oXFx3KikvaSxcbiAgICAgICAgICAgIC8oKD86bW90b1tcXHdcXChcXCkgXSt8eHRcXGR7Myw0fXxuZXh1cyA2KSg/PSBidWl8XFwpKSkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBNT1RPUk9MQV0sIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgL1xcYihtejYwXFxkfHhvb21bMiBdezAsMn0pIGJ1aWxkXFwvL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgTU9UT1JPTEFdLCBbVFlQRSwgVEFCTEVUXV0sIFtcblxuICAgICAgICAgICAgLy8gTEdcbiAgICAgICAgICAgIC8oKD89bGcpP1t2bF1rXFwtP1xcZHszfSkgYnVpfCAzXFwuWy1cXHc7IF17MTB9bGc/LShbMDZjdjldezMsNH0pL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgTEddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8obG0oPzotP2YxMDBbbnZdP3wtW1xcd1xcLl0rKSg/PSBidWl8XFwpKXxuZXh1cyBbNDVdKS9pLFxuICAgICAgICAgICAgL1xcYmxnWy1lO1xcLyBdKygoPyFicm93c2VyfG5ldGNhc3R8YW5kcm9pZCB0dilcXHcrKS9pLFxuICAgICAgICAgICAgL1xcYmxnLT8oW1xcZFxcd10rKSBidWkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBMR10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBMZW5vdm9cbiAgICAgICAgICAgIC8oaWRlYXRhYlstXFx3IF0rKS9pLFxuICAgICAgICAgICAgL2xlbm92byA/KHNbNTZdMDAwWy1cXHddK3x0YWIoPzpbXFx3IF0rKXx5dFstXFxkXFx3XXs2fXx0YlstXFxkXFx3XXs2fSkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnTGVub3ZvJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuXG4gICAgICAgICAgICAvLyBOb2tpYVxuICAgICAgICAgICAgLyg/Om1hZW1vfG5va2lhKS4qKG45MDB8bHVtaWEgXFxkKykvaSxcbiAgICAgICAgICAgIC9ub2tpYVstXyBdPyhbLVxcd1xcLl0qKS9pXG4gICAgICAgICAgICBdLCBbW01PREVMLCAvXy9nLCAnICddLCBbVkVORE9SLCAnTm9raWEnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIEdvb2dsZVxuICAgICAgICAgICAgLyhwaXhlbCBjKVxcYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR29vZ2xlIFBpeGVsIENcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgR09PR0xFXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvZHJvaWQuKzsgKHBpeGVsW1xcZGF4bCBdezAsNn0pKD86IGJ1aXxcXCkpL2kgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR29vZ2xlIFBpeGVsXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEdPT0dMRV0sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBTb255XG4gICAgICAgICAgICAvZHJvaWQuKyAoYT9cXGRbMC0yXXsyfXNvfFtjLWddXFxkezR9fHNvWy1nbF1cXHcrfHhxLWFcXHdbNC03XVsxMl0pKD89IGJ1aXxcXCkuK2Nocm9tZVxcLyg/IVsxLTZdezAsMX1cXGRcXC4pKS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFNPTlldLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9zb255IHRhYmxldCBbcHNdL2ksXG4gICAgICAgICAgICAvXFxiKD86c29ueSk/c2dwXFx3Kyg/OiBidWl8XFwpKS9pXG4gICAgICAgICAgICBdLCBbW01PREVMLCAnWHBlcmlhIFRhYmxldCddLCBbVkVORE9SLCBTT05ZXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG5cbiAgICAgICAgICAgIC8vIE9uZVBsdXNcbiAgICAgICAgICAgIC8gKGtiMjAwNXxpbjIwWzEyXTV8YmUyMFsxMl1bNTldKVxcYi9pLFxuICAgICAgICAgICAgLyg/Om9uZSk/KD86cGx1cyk/IChhXFxkMFxcZFxcZCkoPzogYnxcXCkpL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ09uZVBsdXMnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIEFtYXpvblxuICAgICAgICAgICAgLyhhbGV4YSl3ZWJtL2ksXG4gICAgICAgICAgICAvKGtmW2Etel17Mn13aXxhZW9bYy1yXXsyfSkoIGJ1aXxcXCkpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLaW5kbGUgRmlyZSB3aXRob3V0IFNpbGsgLyBFY2hvIFNob3dcbiAgICAgICAgICAgIC8oa2ZbYS16XSspKCBidWl8XFwpKS4rc2lsa1xcLy9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLaW5kbGUgRmlyZSBIRFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBBTUFaT05dLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8oKD86c2R8a2YpWzAzNDloaWpvcnN0dXddKykoIGJ1aXxcXCkpLitzaWxrXFwvL2kgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlIFBob25lXG4gICAgICAgICAgICBdLCBbW01PREVMLCAvKC4rKS9nLCAnRmlyZSBQaG9uZSAkMSddLCBbVkVORE9SLCBBTUFaT05dLCBbVFlQRSwgTU9CSUxFXV0sIFtcblxuICAgICAgICAgICAgLy8gQmxhY2tCZXJyeVxuICAgICAgICAgICAgLyhwbGF5Ym9vayk7Wy1cXHdcXCksOyBdKyhyaW0pL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJsYWNrQmVycnkgUGxheUJvb2tcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgVkVORE9SLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoKD86YmJbYS1mXXxzdFtodl0pMTAwLVxcZCkvaSxcbiAgICAgICAgICAgIC9cXChiYjEwOyAoXFx3KykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCbGFja0JlcnJ5IDEwXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEJMQUNLQkVSUlldLCBbVFlQRSwgTU9CSUxFXV0sIFtcblxuICAgICAgICAgICAgLy8gQXN1c1xuICAgICAgICAgICAgLyg/OlxcYnxhc3VzXykodHJhbnNmb1twcmltZSBdezQsMTB9IFxcdyt8ZWVlcGN8c2xpZGVyIFxcdyt8bmV4dXMgN3xwYWRmb25lfHAwMFtjal0pL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVNVU10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgLyAoeltiZXNdNlswMjddWzAxMl1ba21dW2xzXXx6ZW5mb25lIFxcZFxcdz8pXFxiL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVNVU10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBIVENcbiAgICAgICAgICAgIC8obmV4dXMgOSkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSFRDIE5leHVzIDlcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0hUQyddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8oaHRjKVstO18gXXsxLDJ9KFtcXHcgXSsoPz1cXCl8IGJ1aSl8XFx3KykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSFRDXG5cbiAgICAgICAgICAgIC8vIFpURVxuICAgICAgICAgICAgLyh6dGUpWy0gXShbXFx3IF0rPykoPzogYnVpfFxcL3xcXCkpL2ksXG4gICAgICAgICAgICAvKGFsY2F0ZWx8Z2Vla3NwaG9uZXxuZXhpYW58cGFuYXNvbmljKD8hKD86O3xcXC4pKXxzb255KD8hLWJyYSkpWy1fIF0/KFstXFx3XSopL2kgICAgICAgICAvLyBBbGNhdGVsL0dlZWtzUGhvbmUvTmV4aWFuL1BhbmFzb25pYy9Tb255XG4gICAgICAgICAgICBdLCBbVkVORE9SLCBbTU9ERUwsIC9fL2csICcgJ10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBBY2VyXG4gICAgICAgICAgICAvZHJvaWQuKzsgKFthYl1bMS03XS0/WzAxNzhhXVxcZFxcZD8pL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0FjZXInXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG5cbiAgICAgICAgICAgIC8vIE1laXp1XG4gICAgICAgICAgICAvZHJvaWQuKzsgKG1bMS01XSBub3RlKSBidWkvaSxcbiAgICAgICAgICAgIC9cXGJtei0oWy1cXHddezIsfSkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnTWVpenUnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIE1JWEVEXG4gICAgICAgICAgICAvKGJsYWNrYmVycnl8YmVucXxwYWxtKD89XFwtKXxzb255ZXJpY3Nzb258YWNlcnxhc3VzfGRlbGx8bWVpenV8bW90b3JvbGF8cG9seXRyb24pWy1fIF0/KFstXFx3XSopL2ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJsYWNrQmVycnkvQmVuUS9QYWxtL1NvbnktRXJpY3Nzb24vQWNlci9Bc3VzL0RlbGwvTWVpenUvTW90b3JvbGEvUG9seXRyb25cbiAgICAgICAgICAgIC8oaHApIChbXFx3IF0rXFx3KS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIUCBpUEFRXG4gICAgICAgICAgICAvKGFzdXMpLT8oXFx3KykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBc3VzXG4gICAgICAgICAgICAvKG1pY3Jvc29mdCk7IChsdW1pYVtcXHcgXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNaWNyb3NvZnQgTHVtaWFcbiAgICAgICAgICAgIC8obGVub3ZvKVstXyBdPyhbLVxcd10rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExlbm92b1xuICAgICAgICAgICAgLyhqb2xsYSkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBKb2xsYVxuICAgICAgICAgICAgLyhvcHBvKSA/KFtcXHcgXSspIGJ1aS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT1BQT1xuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvKGtvYm8pXFxzKGVyZWFkZXJ8dG91Y2gpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLb2JvXG4gICAgICAgICAgICAvKGFyY2hvcykgKGdhbWVwYWQyPykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFyY2hvc1xuICAgICAgICAgICAgLyhocCkuKyh0b3VjaHBhZCg/IS4rdGFibGV0KXx0YWJsZXQpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIUCBUb3VjaFBhZFxuICAgICAgICAgICAgLyhraW5kbGUpXFwvKFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLaW5kbGVcbiAgICAgICAgICAgIC8obm9vaylbXFx3IF0rYnVpbGRcXC8oXFx3KykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9va1xuICAgICAgICAgICAgLyhkZWxsKSAoc3RyZWFba3ByXFxkIF0qW1xcZGtvXSkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGwgU3RyZWFrXG4gICAgICAgICAgICAvKGxlWy0gXStwYW4pWy0gXSsoXFx3ezEsOX0pIGJ1aS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMZSBQYW4gVGFibGV0c1xuICAgICAgICAgICAgLyh0cmluaXR5KVstIF0qKHRcXGR7M30pIGJ1aS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJpbml0eSBUYWJsZXRzXG4gICAgICAgICAgICAvKGdpZ2FzZXQpWy0gXSsocVxcd3sxLDl9KSBidWkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHaWdhc2V0IFRhYmxldHNcbiAgICAgICAgICAgIC8odm9kYWZvbmUpIChbXFx3IF0rKSg/OlxcKXwgYnVpKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWb2RhZm9uZVxuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBUQUJMRVRdXSwgW1xuXG4gICAgICAgICAgICAvKHN1cmZhY2UgZHVvKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1cmZhY2UgRHVvXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIE1JQ1JPU09GVF0sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL2Ryb2lkIFtcXGRcXC5dKzsgKGZwXFxkdT8pKD86IGJ8XFwpKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmFpcnBob25lXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdGYWlycGhvbmUnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG4gICAgICAgICAgICAvKHUzMDRhYSkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFUJlRcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0FUJlQnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG4gICAgICAgICAgICAvXFxic2llLShcXHcqKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2llbWVuc1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnU2llbWVucyddLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9cXGIocmN0XFx3KykgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSQ0EgVGFibGV0c1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnUkNBJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYih2ZW51ZVtcXGQgXXsyLDd9KSBiL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGwgVmVudWUgVGFibGV0c1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnRGVsbCddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIocSg/Om12fHRhKVxcdyspIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWZXJpem9uIFRhYmxldFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnVmVyaXpvbiddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoPzpiYXJuZXNbJiBdK25vYmxlIHxibltydF0pKFtcXHdcXCsgXSopIGIvaSAgICAgICAgICAgICAgICAgICAgICAgLy8gQmFybmVzICYgTm9ibGUgVGFibGV0XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdCYXJuZXMgJiBOb2JsZSddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIodG1cXGR7M31cXHcrKSBiL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ051VmlzaW9uJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYihrODgpIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWlRFIEsgU2VyaWVzIFRhYmxldFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnWlRFJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYihueFxcZHszfWopIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFpURSBOdWJpYVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnWlRFJ10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgL1xcYihnZW5cXGR7M30pIGIuKzQ5aC9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN3aXNzIEdFTiBNb2JpbGVcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ1N3aXNzJ10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgL1xcYih6dXJcXGR7M30pIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN3aXNzIFpVUiBUYWJsZXRcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ1N3aXNzJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYigoemVraSk/dGIuKlxcYikgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFpla2kgVGFibGV0c1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnWmVraSddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoW3lyXVxcZHsyfSkgYi9pLFxuICAgICAgICAgICAgL1xcYihkcmFnb25bLSBdK3RvdWNoIHxkdCkoXFx3ezV9KSBiL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERyYWdvbiBUb3VjaCBUYWJsZXRcbiAgICAgICAgICAgIF0sIFtbVkVORE9SLCAnRHJhZ29uIFRvdWNoJ10sIE1PREVMLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIobnMtP1xcd3swLDl9KSBiL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnNpZ25pYSBUYWJsZXRzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdJbnNpZ25pYSddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoKG54YXxuZXh0KS0/XFx3ezAsOX0pIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOZXh0Qm9vayBUYWJsZXRzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdOZXh0Qm9vayddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoeHRyZW1lXFxfKT8odigxWzA0NV18MlswMTVdfFszNDY5XTB8N1swNV0pKSBiL2kgICAgICAgICAgICAgICAgICAvLyBWb2ljZSBYdHJlbWUgUGhvbmVzXG4gICAgICAgICAgICBdLCBbW1ZFTkRPUiwgJ1ZvaWNlJ10sIE1PREVMLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9cXGIobHZ0ZWxcXC0pPyh2MVsxMl0pIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMdlRlbCBQaG9uZXNcbiAgICAgICAgICAgIF0sIFtbVkVORE9SLCAnTHZUZWwnXSwgTU9ERUwsIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgL1xcYihwaC0xKSAvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXNzZW50aWFsIFBILTFcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0Vzc2VudGlhbCddLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9cXGIodigxMDBtZHw3MDBuYXw3MDExfDkxN2cpLipcXGIpIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbnZpemVuIFRhYmxldHNcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0Vudml6ZW4nXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvXFxiKHRyaW9bLVxcd1xcLiBdKykgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hY2hTcGVlZCBUYWJsZXRzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdNYWNoU3BlZWQnXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvXFxidHVfKDE0OTEpIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSb3RvciBUYWJsZXRzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdSb3RvciddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8oc2hpZWxkW1xcdyBdKykgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE52aWRpYSBTaGllbGQgVGFibGV0c1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnTnZpZGlhJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgLyhzcHJpbnQpIChcXHcrKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3ByaW50IFBob25lc1xuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgLyhraW5cXC5bb25ldHddezN9KS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWljcm9zb2Z0IEtpblxuICAgICAgICAgICAgXSwgW1tNT0RFTCwgL1xcLi9nLCAnICddLCBbVkVORE9SLCBNSUNST1NPRlRdLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9kcm9pZC4rOyAoY2M2NjY2P3xldDVbMTZdfG1jWzIzOV1bMjNdeD98dmM4WzAzXXg/KVxcKS9pICAgICAgICAgICAgIC8vIFplYnJhXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFpFQlJBXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvZHJvaWQuKzsgKGVjMzB8cHMyMHx0Y1syLThdXFxkW2t4XSlcXCkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBaRUJSQV0sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgICAgICAvLyBTTUFSVFRWU1xuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgICAgICAgICAvc21hcnQtdHYuKyhzYW1zdW5nKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbXN1bmdcbiAgICAgICAgICAgIF0sIFtWRU5ET1IsIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC9oYmJ0di4rbWFwbGU7KFxcZCspL2lcbiAgICAgICAgICAgIF0sIFtbTU9ERUwsIC9eLywgJ1NtYXJ0VFYnXSwgW1ZFTkRPUiwgU0FNU1VOR10sIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC8obnV4OyBuZXRjYXN0LitzbWFydHR2fGxnIChuZXRjYXN0XFwudHYtMjAxXFxkfGFuZHJvaWQgdHYpKS9pICAgICAgICAvLyBMRyBTbWFydFRWXG4gICAgICAgICAgICBdLCBbW1ZFTkRPUiwgTEddLCBbVFlQRSwgU01BUlRUVl1dLCBbXG4gICAgICAgICAgICAvKGFwcGxlKSA/dHYvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwcGxlIFRWXG4gICAgICAgICAgICBdLCBbVkVORE9SLCBbTU9ERUwsIEFQUExFKycgVFYnXSwgW1RZUEUsIFNNQVJUVFZdXSwgW1xuICAgICAgICAgICAgL2Nya2V5L2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb29nbGUgQ2hyb21lY2FzdFxuICAgICAgICAgICAgXSwgW1tNT0RFTCwgQ0hST01FKydjYXN0J10sIFtWRU5ET1IsIEdPT0dMRV0sIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC9kcm9pZC4rYWZ0KFxcdykoIGJ1aXxcXCkpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlIFRWXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEFNQVpPTl0sIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC9cXChkdHZbXFwpO10uKyhhcXVvcykvaSxcbiAgICAgICAgICAgIC8oYXF1b3MtdHZbXFx3IF0rKVxcKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaGFycFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBTSEFSUF0sIFtUWVBFLCBTTUFSVFRWXV0sW1xuICAgICAgICAgICAgLyhicmF2aWFbXFx3IF0rKSggYnVpfFxcKSkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTb255XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFNPTlldLCBbVFlQRSwgU01BUlRUVl1dLCBbXG4gICAgICAgICAgICAvKG1pdHYtXFx3ezV9KSBidWkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBYaWFvbWlcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgWElBT01JXSwgW1RZUEUsIFNNQVJUVFZdXSwgW1xuICAgICAgICAgICAgL0hiYnR2LioodGVjaG5pc2F0KSAoLiopOy9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUZWNobmlTQVRcbiAgICAgICAgICAgIF0sIFtWRU5ET1IsIE1PREVMLCBbVFlQRSwgU01BUlRUVl1dLCBbXG4gICAgICAgICAgICAvXFxiKHJva3UpW1xcZHhdKltcXClcXC9dKCg/OmR2cC0pP1tcXGRcXC5dKikvaSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJva3VcbiAgICAgICAgICAgIC9oYmJ0dlxcL1xcZCtcXC5cXGQrXFwuXFxkKyArXFwoW1xcd1xcKyBdKjsgKihbXFx3XFxkXVteO10qKTsoW147XSopL2kgICAgICAgICAvLyBIYmJUViBkZXZpY2VzXG4gICAgICAgICAgICBdLCBbW1ZFTkRPUiwgdHJpbV0sIFtNT0RFTCwgdHJpbV0sIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC9cXGIoYW5kcm9pZCB0dnxzbWFydFstIF0/dHZ8b3BlcmEgdHZ8dHY7IHJ2OilcXGIvaSAgICAgICAgICAgICAgICAgICAvLyBTbWFydFRWIGZyb20gVW5pZGVudGlmaWVkIFZlbmRvcnNcbiAgICAgICAgICAgIF0sIFtbVFlQRSwgU01BUlRUVl1dLCBbXG5cbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgICAgIC8vIENPTlNPTEVTXG4gICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgICAgIC8ob3V5YSkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3V5YVxuICAgICAgICAgICAgLyhuaW50ZW5kbykgKFt3aWRzM3V0Y2hdKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOaW50ZW5kb1xuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBDT05TT0xFXV0sIFtcbiAgICAgICAgICAgIC9kcm9pZC4rOyAoc2hpZWxkKSBidWkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTnZpZGlhXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdOdmlkaWEnXSwgW1RZUEUsIENPTlNPTEVdXSwgW1xuICAgICAgICAgICAgLyhwbGF5c3RhdGlvbiBbMzQ1cG9ydGFibGV2aV0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQbGF5c3RhdGlvblxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBTT05ZXSwgW1RZUEUsIENPTlNPTEVdXSwgW1xuICAgICAgICAgICAgL1xcYih4Ym94KD86IG9uZSk/KD8hOyB4Ym94KSlbXFwpOyBdL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pY3Jvc29mdCBYYm94XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIE1JQ1JPU09GVF0sIFtUWVBFLCBDT05TT0xFXV0sIFtcblxuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICAgICAgLy8gV0VBUkFCTEVTXG4gICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgICAgIC8oKHBlYmJsZSkpYXBwL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGViYmxlXG4gICAgICAgICAgICBdLCBbVkVORE9SLCBNT0RFTCwgW1RZUEUsIFdFQVJBQkxFXV0sIFtcbiAgICAgICAgICAgIC8od2F0Y2gpKD86ID9vc1ssXFwvXXxcXGQsXFxkXFwvKVtcXGRcXC5dKy9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwbGUgV2F0Y2hcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVBQTEVdLCBbVFlQRSwgV0VBUkFCTEVdXSwgW1xuICAgICAgICAgICAgL2Ryb2lkLis7IChnbGFzcykgXFxkL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR29vZ2xlIEdsYXNzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEdPT0dMRV0sIFtUWVBFLCBXRUFSQUJMRV1dLCBbXG4gICAgICAgICAgICAvZHJvaWQuKzsgKHd0NjM/MHsyLDN9KVxcKS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFpFQlJBXSwgW1RZUEUsIFdFQVJBQkxFXV0sIFtcbiAgICAgICAgICAgIC8ocXVlc3QoIDJ8IHBybyk/KS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT2N1bHVzIFF1ZXN0XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEZBQ0VCT09LXSwgW1RZUEUsIFdFQVJBQkxFXV0sIFtcblxuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICAgICAgLy8gRU1CRURERURcbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgICAgICAgICAgLyh0ZXNsYSkoPzogcXRjYXJicm93c2VyfFxcL1stXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXNsYVxuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgW1RZUEUsIEVNQkVEREVEXV0sIFtcbiAgICAgICAgICAgIC8oYWVvYmMpXFxiL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVjaG8gRG90XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEFNQVpPTl0sIFtUWVBFLCBFTUJFRERFRF1dLCBbXG5cbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgICAgICAvLyBNSVhFRCAoR0VORVJJQylcbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgICAgICAgICAgL2Ryb2lkIC4rPzsgKFteO10rPykoPzogYnVpfFxcKSBhcHBsZXcpLis/IG1vYmlsZSBzYWZhcmkvaSAgICAgICAgICAgLy8gQW5kcm9pZCBQaG9uZXMgZnJvbSBVbmlkZW50aWZpZWQgVmVuZG9yc1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9kcm9pZCAuKz87IChbXjtdKz8pKD86IGJ1aXxcXCkgYXBwbGV3KS4rPyg/ISBtb2JpbGUpIHNhZmFyaS9pICAgICAgIC8vIEFuZHJvaWQgVGFibGV0cyBmcm9tIFVuaWRlbnRpZmllZCBWZW5kb3JzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYigodGFibGV0fHRhYilbO1xcL118Zm9jdXNcXC9cXGQoPyEuK21vYmlsZSkpL2kgICAgICAgICAgICAgICAgICAgICAgLy8gVW5pZGVudGlmaWFibGUgVGFibGV0XG4gICAgICAgICAgICBdLCBbW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvKHBob25lfG1vYmlsZSg/Ols7XFwvXXwgWyBcXHdcXC9cXC5dKnNhZmFyaSl8cGRhKD89Lit3aW5kb3dzIGNlKSkvaSAgICAvLyBVbmlkZW50aWZpYWJsZSBNb2JpbGVcbiAgICAgICAgICAgIF0sIFtbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC8oYW5kcm9pZFstXFx3XFwuIF17MCw5fSk7LitidWlsL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZW5lcmljIEFuZHJvaWQgRGV2aWNlXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdHZW5lcmljJ11dXG4gICAgICAgIF0sXG5cbiAgICAgICAgZW5naW5lIDogW1tcblxuICAgICAgICAgICAgL3dpbmRvd3MuKyBlZGdlXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVkZ2VIVE1MXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIEVER0UrJ0hUTUwnXV0sIFtcblxuICAgICAgICAgICAgL3dlYmtpdFxcLzUzN1xcLjM2LitjaHJvbWVcXC8oPyEyNykoW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJsaW5rXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdCbGluayddXSwgW1xuXG4gICAgICAgICAgICAvKHByZXN0bylcXC8oW1xcd1xcLl0rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXN0b1xuICAgICAgICAgICAgLyh3ZWJraXR8dHJpZGVudHxuZXRmcm9udHxuZXRzdXJmfGFtYXlhfGx5bnh8dzNtfGdvYW5uYSlcXC8oW1xcd1xcLl0rKS9pLCAvLyBXZWJLaXQvVHJpZGVudC9OZXRGcm9udC9OZXRTdXJmL0FtYXlhL0x5bngvdzNtL0dvYW5uYVxuICAgICAgICAgICAgL2VraW9oKGZsb3cpXFwvKFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGbG93XG4gICAgICAgICAgICAvKGtodG1sfHRhc21hbnxsaW5rcylbXFwvIF1cXCg/KFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLSFRNTC9UYXNtYW4vTGlua3NcbiAgICAgICAgICAgIC8oaWNhYilbXFwvIF0oWzIzXVxcLltcXGRcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlDYWJcbiAgICAgICAgICAgIC9cXGIobGlid2ViKS9pXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcblxuICAgICAgICAgICAgL3J2XFw6KFtcXHdcXC5dezEsOX0pXFxiLisoZ2Vja28pL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2Vja29cbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBOQU1FXVxuICAgICAgICBdLFxuXG4gICAgICAgIG9zIDogW1tcblxuICAgICAgICAgICAgLy8gV2luZG93c1xuICAgICAgICAgICAgL21pY3Jvc29mdCAod2luZG93cykgKHZpc3RhfHhwKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaW5kb3dzIChpVHVuZXMpXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgIC8od2luZG93cykgbnQgNlxcLjI7IChhcm0pL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdpbmRvd3MgUlRcbiAgICAgICAgICAgIC8od2luZG93cyAoPzpwaG9uZSg/OiBvcyk/fG1vYmlsZSkpW1xcLyBdPyhbXFxkXFwuXFx3IF0qKS9pLCAgICAgICAgICAgIC8vIFdpbmRvd3MgUGhvbmVcbiAgICAgICAgICAgIC8od2luZG93cylbXFwvIF0/KFtudGNlXFxkXFwuIF0rXFx3KSg/IS4reGJveCkvaVxuICAgICAgICAgICAgXSwgW05BTUUsIFtWRVJTSU9OLCBzdHJNYXBwZXIsIHdpbmRvd3NWZXJzaW9uTWFwXV0sIFtcbiAgICAgICAgICAgIC8od2luKD89M3w5fG4pfHdpbiA5eCApKFtudFxcZFxcLl0rKS9pXG4gICAgICAgICAgICBdLCBbW05BTUUsICdXaW5kb3dzJ10sIFtWRVJTSU9OLCBzdHJNYXBwZXIsIHdpbmRvd3NWZXJzaW9uTWFwXV0sIFtcblxuICAgICAgICAgICAgLy8gaU9TL21hY09TXG4gICAgICAgICAgICAvaXBbaG9uZWFkXXsyLDR9XFxiKD86LipvcyAoW1xcd10rKSBsaWtlIG1hY3w7IG9wZXJhKS9pLCAgICAgICAgICAgICAgLy8gaU9TXG4gICAgICAgICAgICAvaW9zO2Zic3ZcXC8oW1xcZFxcLl0rKS9pLFxuICAgICAgICAgICAgL2NmbmV0d29ya1xcLy4rZGFyd2luL2lcbiAgICAgICAgICAgIF0sIFtbVkVSU0lPTiwgL18vZywgJy4nXSwgW05BTUUsICdpT1MnXV0sIFtcbiAgICAgICAgICAgIC8obWFjIG9zIHgpID8oW1xcd1xcLiBdKikvaSxcbiAgICAgICAgICAgIC8obWFjaW50b3NofG1hY19wb3dlcnBjXFxiKSg/IS4raGFpa3UpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hYyBPU1xuICAgICAgICAgICAgXSwgW1tOQU1FLCBNQUNfT1NdLCBbVkVSU0lPTiwgL18vZywgJy4nXV0sIFtcblxuICAgICAgICAgICAgLy8gTW9iaWxlIE9TZXNcbiAgICAgICAgICAgIC9kcm9pZCAoW1xcd1xcLl0rKVxcYi4rKGFuZHJvaWRbLSBdeDg2fGhhcm1vbnlvcykvaSAgICAgICAgICAgICAgICAgICAgLy8gQW5kcm9pZC14ODYvSGFybW9ueU9TXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgTkFNRV0sIFsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFuZHJvaWQvV2ViT1MvUU5YL0JhZGEvUklNL01hZW1vL01lZUdvL1NhaWxmaXNoIE9TXG4gICAgICAgICAgICAvKGFuZHJvaWR8d2Vib3N8cW54fGJhZGF8cmltIHRhYmxldCBvc3xtYWVtb3xtZWVnb3xzYWlsZmlzaClbLVxcLyBdPyhbXFx3XFwuXSopL2ksXG4gICAgICAgICAgICAvKGJsYWNrYmVycnkpXFx3KlxcLyhbXFx3XFwuXSopL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCbGFja2JlcnJ5XG4gICAgICAgICAgICAvKHRpemVufGthaW9zKVtcXC8gXShbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRpemVuL0thaU9TXG4gICAgICAgICAgICAvXFwoKHNlcmllczQwKTsvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXJpZXMgNDBcbiAgICAgICAgICAgIF0sIFtOQU1FLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgL1xcKGJiKDEwKTsvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmxhY2tCZXJyeSAxMFxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCBCTEFDS0JFUlJZXV0sIFtcbiAgICAgICAgICAgIC8oPzpzeW1iaWFuID9vc3xzeW1ib3N8czYwKD89Oyl8c2VyaWVzNjApWy1cXC8gXT8oW1xcd1xcLl0qKS9pICAgICAgICAgLy8gU3ltYmlhblxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnU3ltYmlhbiddXSwgW1xuICAgICAgICAgICAgL21vemlsbGFcXC9bXFxkXFwuXSsgXFwoKD86bW9iaWxlfHRhYmxldHx0dnxtb2JpbGU7IFtcXHcgXSspOyBydjouKyBnZWNrb1xcLyhbXFx3XFwuXSspL2kgLy8gRmlyZWZveCBPU1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCBGSVJFRk9YKycgT1MnXV0sIFtcbiAgICAgICAgICAgIC93ZWIwczsuK3J0KHR2KS9pLFxuICAgICAgICAgICAgL1xcYig/OmhwKT93b3MoPzpicm93c2VyKT9cXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2ViT1NcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ3dlYk9TJ11dLCBbXG4gICAgICAgICAgICAvd2F0Y2goPzogP29zWyxcXC9dfFxcZCxcXGRcXC8pKFtcXGRcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdhdGNoT1NcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ3dhdGNoT1MnXV0sIFtcblxuICAgICAgICAgICAgLy8gR29vZ2xlIENocm9tZWNhc3RcbiAgICAgICAgICAgIC9jcmtleVxcLyhbXFxkXFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR29vZ2xlIENocm9tZWNhc3RcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgQ0hST01FKydjYXN0J11dLCBbXG4gICAgICAgICAgICAvKGNyb3MpIFtcXHddKyg/OlxcKXwgKFtcXHdcXC5dKylcXGIpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hyb21pdW0gT1NcbiAgICAgICAgICAgIF0sIFtbTkFNRSwgQ0hST01JVU1fT1NdLCBWRVJTSU9OXSxbXG5cbiAgICAgICAgICAgIC8vIFNtYXJ0IFRWc1xuICAgICAgICAgICAgL3BhbmFzb25pYzsodmllcmEpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQYW5hc29uaWMgVmllcmFcbiAgICAgICAgICAgIC8obmV0cmFuZ2UpbW1oL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV0cmFuZ2VcbiAgICAgICAgICAgIC8obmV0dHYpXFwvKFxcZCtcXC5bXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOZXRUVlxuXG4gICAgICAgICAgICAvLyBDb25zb2xlXG4gICAgICAgICAgICAvKG5pbnRlbmRvfHBsYXlzdGF0aW9uKSAoW3dpZHMzNDVwb3J0YWJsZXZ1Y2hdKykvaSwgICAgICAgICAgICAgICAgIC8vIE5pbnRlbmRvL1BsYXlzdGF0aW9uXG4gICAgICAgICAgICAvKHhib3gpOyAreGJveCAoW15cXCk7XSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNaWNyb3NvZnQgWGJveCAoMzYwLCBPbmUsIFgsIFMsIFNlcmllcyBYLCBTZXJpZXMgUylcblxuICAgICAgICAgICAgLy8gT3RoZXJcbiAgICAgICAgICAgIC9cXGIoam9saXxwYWxtKVxcYiA/KD86b3MpP1xcLz8oW1xcd1xcLl0qKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBKb2xpL1BhbG1cbiAgICAgICAgICAgIC8obWludClbXFwvXFwoXFwpIF0/KFxcdyopL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pbnRcbiAgICAgICAgICAgIC8obWFnZWlhfHZlY3RvcmxpbnV4KVs7IF0vaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFnZWlhL1ZlY3RvckxpbnV4XG4gICAgICAgICAgICAvKFtreGxuXT91YnVudHV8ZGViaWFufHN1c2V8b3BlbnN1c2V8Z2VudG9vfGFyY2goPz0gbGludXgpfHNsYWNrd2FyZXxmZWRvcmF8bWFuZHJpdmF8Y2VudG9zfHBjbGludXhvc3xyZWQgP2hhdHx6ZW53YWxrfGxpbnB1c3xyYXNwYmlhbnxwbGFuIDl8bWluaXh8cmlzYyBvc3xjb250aWtpfGRlZXBpbnxtYW5qYXJvfGVsZW1lbnRhcnkgb3N8c2FiYXlvbnxsaW5zcGlyZSkoPzogZ251XFwvbGludXgpPyg/OiBlbnRlcnByaXNlKT8oPzpbLSBdbGludXgpPyg/Oi1nbnUpP1stXFwvIF0/KD8hY2hyb218cGFja2FnZSkoWy1cXHdcXC5dKikvaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVWJ1bnR1L0RlYmlhbi9TVVNFL0dlbnRvby9BcmNoL1NsYWNrd2FyZS9GZWRvcmEvTWFuZHJpdmEvQ2VudE9TL1BDTGludXhPUy9SZWRIYXQvWmVud2Fsay9MaW5wdXMvUmFzcGJpYW4vUGxhbjkvTWluaXgvUklTQ09TL0NvbnRpa2kvRGVlcGluL01hbmphcm8vZWxlbWVudGFyeS9TYWJheW9uL0xpbnNwaXJlXG4gICAgICAgICAgICAvKGh1cmR8bGludXgpID8oW1xcd1xcLl0qKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSHVyZC9MaW51eFxuICAgICAgICAgICAgLyhnbnUpID8oW1xcd1xcLl0qKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdOVVxuICAgICAgICAgICAgL1xcYihbLWZyZW50b3BjZ2hzXXswLDV9YnNkfGRyYWdvbmZseSlbXFwvIF0/KD8hYW1kfFtpeDM0Nl17MSwyfTg2KShbXFx3XFwuXSopL2ksIC8vIEZyZWVCU0QvTmV0QlNEL09wZW5CU0QvUEMtQlNEL0dob3N0QlNEL0RyYWdvbkZseVxuICAgICAgICAgICAgLyhoYWlrdSkgKFxcdyspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFpa3VcbiAgICAgICAgICAgIF0sIFtOQU1FLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgLyhzdW5vcykgPyhbXFx3XFwuXFxkXSopL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTb2xhcmlzXG4gICAgICAgICAgICBdLCBbW05BTUUsICdTb2xhcmlzJ10sIFZFUlNJT05dLCBbXG4gICAgICAgICAgICAvKCg/Om9wZW4pP3NvbGFyaXMpWy1cXC8gXT8oW1xcd1xcLl0qKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNvbGFyaXNcbiAgICAgICAgICAgIC8oYWl4KSAoKFxcZCkoPz1cXC58XFwpfCApW1xcd1xcLl0pKi9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBSVhcbiAgICAgICAgICAgIC9cXGIoYmVvc3xvc1xcLzJ8YW1pZ2Fvc3xtb3JwaG9zfG9wZW52bXN8ZnVjaHNpYXxocC11eHxzZXJlbml0eW9zKS9pLCAvLyBCZU9TL09TMi9BbWlnYU9TL01vcnBoT1MvT3BlblZNUy9GdWNoc2lhL0hQLVVYL1NlcmVuaXR5T1NcbiAgICAgICAgICAgIC8odW5peCkgPyhbXFx3XFwuXSopL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVTklYXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl1cbiAgICAgICAgXVxuICAgIH07XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENvbnN0cnVjdG9yXG4gICAgLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgdmFyIFVBUGFyc2VyID0gZnVuY3Rpb24gKHVhLCBleHRlbnNpb25zKSB7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB1YSA9PT0gT0JKX1RZUEUpIHtcbiAgICAgICAgICAgIGV4dGVuc2lvbnMgPSB1YTtcbiAgICAgICAgICAgIHVhID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFVBUGFyc2VyKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVQVBhcnNlcih1YSwgZXh0ZW5zaW9ucykuZ2V0UmVzdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX25hdmlnYXRvciA9ICh0eXBlb2Ygd2luZG93ICE9PSBVTkRFRl9UWVBFICYmIHdpbmRvdy5uYXZpZ2F0b3IpID8gd2luZG93Lm5hdmlnYXRvciA6IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIF91YSA9IHVhIHx8ICgoX25hdmlnYXRvciAmJiBfbmF2aWdhdG9yLnVzZXJBZ2VudCkgPyBfbmF2aWdhdG9yLnVzZXJBZ2VudCA6IEVNUFRZKTtcbiAgICAgICAgdmFyIF91YWNoID0gKF9uYXZpZ2F0b3IgJiYgX25hdmlnYXRvci51c2VyQWdlbnREYXRhKSA/IF9uYXZpZ2F0b3IudXNlckFnZW50RGF0YSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIF9yZ3htYXAgPSBleHRlbnNpb25zID8gZXh0ZW5kKHJlZ2V4ZXMsIGV4dGVuc2lvbnMpIDogcmVnZXhlcztcbiAgICAgICAgdmFyIF9pc1NlbGZOYXYgPSBfbmF2aWdhdG9yICYmIF9uYXZpZ2F0b3IudXNlckFnZW50ID09IF91YTtcblxuICAgICAgICB0aGlzLmdldEJyb3dzZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2Jyb3dzZXIgPSB7fTtcbiAgICAgICAgICAgIF9icm93c2VyW05BTUVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgX2Jyb3dzZXJbVkVSU0lPTl0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZ3hNYXBwZXIuY2FsbChfYnJvd3NlciwgX3VhLCBfcmd4bWFwLmJyb3dzZXIpO1xuICAgICAgICAgICAgX2Jyb3dzZXJbTUFKT1JdID0gbWFqb3JpemUoX2Jyb3dzZXJbVkVSU0lPTl0pO1xuICAgICAgICAgICAgLy8gQnJhdmUtc3BlY2lmaWMgZGV0ZWN0aW9uXG4gICAgICAgICAgICBpZiAoX2lzU2VsZk5hdiAmJiBfbmF2aWdhdG9yICYmIF9uYXZpZ2F0b3IuYnJhdmUgJiYgdHlwZW9mIF9uYXZpZ2F0b3IuYnJhdmUuaXNCcmF2ZSA9PSBGVU5DX1RZUEUpIHtcbiAgICAgICAgICAgICAgICBfYnJvd3NlcltOQU1FXSA9ICdCcmF2ZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2Jyb3dzZXI7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0Q1BVID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9jcHUgPSB7fTtcbiAgICAgICAgICAgIF9jcHVbQVJDSElURUNUVVJFXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJneE1hcHBlci5jYWxsKF9jcHUsIF91YSwgX3JneG1hcC5jcHUpO1xuICAgICAgICAgICAgcmV0dXJuIF9jcHU7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0RGV2aWNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9kZXZpY2UgPSB7fTtcbiAgICAgICAgICAgIF9kZXZpY2VbVkVORE9SXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIF9kZXZpY2VbTU9ERUxdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgX2RldmljZVtUWVBFXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJneE1hcHBlci5jYWxsKF9kZXZpY2UsIF91YSwgX3JneG1hcC5kZXZpY2UpO1xuICAgICAgICAgICAgaWYgKF9pc1NlbGZOYXYgJiYgIV9kZXZpY2VbVFlQRV0gJiYgX3VhY2ggJiYgX3VhY2gubW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgX2RldmljZVtUWVBFXSA9IE1PQklMRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlQYWRPUy1zcGVjaWZpYyBkZXRlY3Rpb246IGlkZW50aWZpZWQgYXMgTWFjLCBidXQgaGFzIHNvbWUgaU9TLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgICAgaWYgKF9pc1NlbGZOYXYgJiYgX2RldmljZVtNT0RFTF0gPT0gJ01hY2ludG9zaCcgJiYgX25hdmlnYXRvciAmJiB0eXBlb2YgX25hdmlnYXRvci5zdGFuZGFsb25lICE9PSBVTkRFRl9UWVBFICYmIF9uYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgJiYgX25hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDIpIHtcbiAgICAgICAgICAgICAgICBfZGV2aWNlW01PREVMXSA9ICdpUGFkJztcbiAgICAgICAgICAgICAgICBfZGV2aWNlW1RZUEVdID0gVEFCTEVUO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9kZXZpY2U7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0RW5naW5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9lbmdpbmUgPSB7fTtcbiAgICAgICAgICAgIF9lbmdpbmVbTkFNRV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBfZW5naW5lW1ZFUlNJT05dID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmd4TWFwcGVyLmNhbGwoX2VuZ2luZSwgX3VhLCBfcmd4bWFwLmVuZ2luZSk7XG4gICAgICAgICAgICByZXR1cm4gX2VuZ2luZTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXRPUyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfb3MgPSB7fTtcbiAgICAgICAgICAgIF9vc1tOQU1FXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIF9vc1tWRVJTSU9OXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJneE1hcHBlci5jYWxsKF9vcywgX3VhLCBfcmd4bWFwLm9zKTtcbiAgICAgICAgICAgIGlmIChfaXNTZWxmTmF2ICYmICFfb3NbTkFNRV0gJiYgX3VhY2ggJiYgX3VhY2gucGxhdGZvcm0gIT0gJ1Vua25vd24nKSB7XG4gICAgICAgICAgICAgICAgX29zW05BTUVdID0gX3VhY2gucGxhdGZvcm0gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL2Nocm9tZSBvcy9pLCBDSFJPTUlVTV9PUylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9tYWNvcy9pLCBNQUNfT1MpOyAgICAgICAgICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9vcztcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXRSZXN1bHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHVhICAgICAgOiB0aGlzLmdldFVBKCksXG4gICAgICAgICAgICAgICAgYnJvd3NlciA6IHRoaXMuZ2V0QnJvd3NlcigpLFxuICAgICAgICAgICAgICAgIGVuZ2luZSAgOiB0aGlzLmdldEVuZ2luZSgpLFxuICAgICAgICAgICAgICAgIG9zICAgICAgOiB0aGlzLmdldE9TKCksXG4gICAgICAgICAgICAgICAgZGV2aWNlICA6IHRoaXMuZ2V0RGV2aWNlKCksXG4gICAgICAgICAgICAgICAgY3B1ICAgICA6IHRoaXMuZ2V0Q1BVKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0VUEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3VhO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNldFVBID0gZnVuY3Rpb24gKHVhKSB7XG4gICAgICAgICAgICBfdWEgPSAodHlwZW9mIHVhID09PSBTVFJfVFlQRSAmJiB1YS5sZW5ndGggPiBVQV9NQVhfTEVOR1RIKSA/IHRyaW0odWEsIFVBX01BWF9MRU5HVEgpIDogdWE7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zZXRVQShfdWEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgVUFQYXJzZXIuVkVSU0lPTiA9IExJQlZFUlNJT047XG4gICAgVUFQYXJzZXIuQlJPV1NFUiA9ICBlbnVtZXJpemUoW05BTUUsIFZFUlNJT04sIE1BSk9SXSk7XG4gICAgVUFQYXJzZXIuQ1BVID0gZW51bWVyaXplKFtBUkNISVRFQ1RVUkVdKTtcbiAgICBVQVBhcnNlci5ERVZJQ0UgPSBlbnVtZXJpemUoW01PREVMLCBWRU5ET1IsIFRZUEUsIENPTlNPTEUsIE1PQklMRSwgU01BUlRUViwgVEFCTEVULCBXRUFSQUJMRSwgRU1CRURERURdKTtcbiAgICBVQVBhcnNlci5FTkdJTkUgPSBVQVBhcnNlci5PUyA9IGVudW1lcml6ZShbTkFNRSwgVkVSU0lPTl0pO1xuXG4gICAgLy8vLy8vLy8vLy9cbiAgICAvLyBFeHBvcnRcbiAgICAvLy8vLy8vLy8vXG5cbiAgICAvLyBjaGVjayBqcyBlbnZpcm9ubWVudFxuICAgIGlmICh0eXBlb2YoZXhwb3J0cykgIT09IFVOREVGX1RZUEUpIHtcbiAgICAgICAgLy8gbm9kZWpzIGVudlxuICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gVU5ERUZfVFlQRSAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICAgICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gVUFQYXJzZXI7XG4gICAgICAgIH1cbiAgICAgICAgZXhwb3J0cy5VQVBhcnNlciA9IFVBUGFyc2VyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHJlcXVpcmVqcyBlbnYgKG9wdGlvbmFsKVxuICAgICAgICBpZiAodHlwZW9mKGRlZmluZSkgPT09IEZVTkNfVFlQRSAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgICAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBVQVBhcnNlcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFVOREVGX1RZUEUpIHtcbiAgICAgICAgICAgIC8vIGJyb3dzZXIgZW52XG4gICAgICAgICAgICB3aW5kb3cuVUFQYXJzZXIgPSBVQVBhcnNlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGpRdWVyeS9aZXB0byBzcGVjaWZpYyAob3B0aW9uYWwpXG4gICAgLy8gTm90ZTpcbiAgICAvLyAgIEluIEFNRCBlbnYgdGhlIGdsb2JhbCBzY29wZSBzaG91bGQgYmUga2VwdCBjbGVhbiwgYnV0IGpRdWVyeSBpcyBhbiBleGNlcHRpb24uXG4gICAgLy8gICBqUXVlcnkgYWx3YXlzIGV4cG9ydHMgdG8gZ2xvYmFsIHNjb3BlLCB1bmxlc3MgalF1ZXJ5Lm5vQ29uZmxpY3QodHJ1ZSkgaXMgdXNlZCxcbiAgICAvLyAgIGFuZCB3ZSBzaG91bGQgY2F0Y2ggdGhhdC5cbiAgICB2YXIgJCA9IHR5cGVvZiB3aW5kb3cgIT09IFVOREVGX1RZUEUgJiYgKHdpbmRvdy5qUXVlcnkgfHwgd2luZG93LlplcHRvKTtcbiAgICBpZiAoJCAmJiAhJC51YSkge1xuICAgICAgICB2YXIgcGFyc2VyID0gbmV3IFVBUGFyc2VyKCk7XG4gICAgICAgICQudWEgPSBwYXJzZXIuZ2V0UmVzdWx0KCk7XG4gICAgICAgICQudWEuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5nZXRVQSgpO1xuICAgICAgICB9O1xuICAgICAgICAkLnVhLnNldCA9IGZ1bmN0aW9uICh1YSkge1xuICAgICAgICAgICAgcGFyc2VyLnNldFVBKHVhKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBwYXJzZXIuZ2V0UmVzdWx0KCk7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICQudWFbcHJvcF0gPSByZXN1bHRbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG59KSh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyA/IHdpbmRvdyA6IHRoaXMpO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmFtZE8gPSB7fTsiLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsInZhciBzY3JpcHRVcmw7XG5pZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5nLmltcG9ydFNjcmlwdHMpIHNjcmlwdFVybCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5sb2NhdGlvbiArIFwiXCI7XG52YXIgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7XG5pZiAoIXNjcmlwdFVybCAmJiBkb2N1bWVudCkge1xuXHRpZiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ1NDUklQVCcpXG5cdFx0c2NyaXB0VXJsID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkge1xuXHRcdFx0dmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR3aGlsZSAoaSA+IC0xICYmICghc2NyaXB0VXJsIHx8ICEvXmh0dHAocz8pOi8udGVzdChzY3JpcHRVcmwpKSkgc2NyaXB0VXJsID0gc2NyaXB0c1tpLS1dLnNyYztcblx0XHR9XG5cdH1cbn1cbi8vIFdoZW4gc3VwcG9ydGluZyBicm93c2VycyB3aGVyZSBhbiBhdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIHlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0LnB1YmxpY1BhdGggbWFudWFsbHkgdmlhIGNvbmZpZ3VyYXRpb25cbi8vIG9yIHBhc3MgYW4gZW1wdHkgc3RyaW5nIChcIlwiKSBhbmQgc2V0IHRoZSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyB2YXJpYWJsZSBmcm9tIHlvdXIgY29kZSB0byB1c2UgeW91ciBvd24gbG9naWMuXG5pZiAoIXNjcmlwdFVybCkgdGhyb3cgbmV3IEVycm9yKFwiQXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXJcIik7XG5zY3JpcHRVcmwgPSBzY3JpcHRVcmwucmVwbGFjZSgvIy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcPy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcL1teXFwvXSskLywgXCIvXCIpO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gc2NyaXB0VXJsOyIsIl9fd2VicGFja19yZXF1aXJlX18uYiA9IGRvY3VtZW50LmJhc2VVUkkgfHwgc2VsZi5sb2NhdGlvbi5ocmVmO1xuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGFuZCBsb2FkaW5nIGNodW5rc1xuLy8gdW5kZWZpbmVkID0gY2h1bmsgbm90IGxvYWRlZCwgbnVsbCA9IGNodW5rIHByZWxvYWRlZC9wcmVmZXRjaGVkXG4vLyBbcmVzb2x2ZSwgcmVqZWN0LCBQcm9taXNlXSA9IGNodW5rIGxvYWRpbmcsIDAgPSBjaHVuayBsb2FkZWRcbnZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG5cdDc5MjogMFxufTtcblxuLy8gbm8gY2h1bmsgb24gZGVtYW5kIGxvYWRpbmdcblxuLy8gbm8gcHJlZmV0Y2hpbmdcblxuLy8gbm8gcHJlbG9hZGVkXG5cbi8vIG5vIEhNUlxuXG4vLyBubyBITVIgbWFuaWZlc3RcblxuLy8gbm8gb24gY2h1bmtzIGxvYWRlZFxuXG4vLyBubyBqc29ucCBmdW5jdGlvbiIsIl9fd2VicGFja19yZXF1aXJlX18ubmMgPSB1bmRlZmluZWQ7IiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcclxuICAgIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxyXG4gICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcclxuICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xyXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XHJcbiAgICB2YXIgXywgZG9uZSA9IGZhbHNlO1xyXG4gICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgY29udGV4dCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xyXG4gICAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnB1c2goXyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xyXG4gICAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcclxuICAgIGRvbmUgPSB0cnVlO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcclxuICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xyXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xyXG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcclxuICAgIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xyXG4gICAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcclxufVxyXG4iLCJpbXBvcnQgeyBfX2V4dGVuZHMgfSBmcm9tIFwidHNsaWJcIjtcbi8qKlxuICogRW51bSBmb3IgdHlwZXMgb2YgYm90cy5cbiAqIFNwZWNpZmljIHR5cGVzIG9mIGJvdHMgY29tZSBmaXJzdCwgZm9sbG93ZWQgYnkgYXV0b21hdGlvbiB0ZWNobm9sb2dpZXMuXG4gKlxuICogQHJlYWRvbmx5XG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgdmFyIEJvdEtpbmQgPSB7XG4gICAgLy8gT2JqZWN0IGlzIHVzZWQgaW5zdGVhZCBvZiBUeXBlc2NyaXB0IGVudW0gdG8gYXZvaWQgZW1pdHRpbmcgSUlGRSB3aGljaCBtaWdodCBiZSBhZmZlY3RlZCBieSBmdXJ0aGVyIHRyZWUtc2hha2luZy5cbiAgICAvLyBTZWUgZXhhbXBsZSBvZiBjb21waWxlZCBlbnVtcyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3EvNDczNjM5OTYpXG4gICAgQXdlc29taXVtOiAnYXdlc29taXVtJyxcbiAgICBDZWY6ICdjZWYnLFxuICAgIENlZlNoYXJwOiAnY2Vmc2hhcnAnLFxuICAgIENvYWNoSlM6ICdjb2FjaGpzJyxcbiAgICBFbGVjdHJvbjogJ2VsZWN0cm9uJyxcbiAgICBGTWluZXI6ICdmbWluZXInLFxuICAgIEdlYjogJ2dlYicsXG4gICAgTmlnaHRtYXJlSlM6ICduaWdodG1hcmVqcycsXG4gICAgUGhhbnRvbWFzOiAncGhhbnRvbWFzJyxcbiAgICBQaGFudG9tSlM6ICdwaGFudG9tanMnLFxuICAgIFJoaW5vOiAncmhpbm8nLFxuICAgIFNlbGVuaXVtOiAnc2VsZW5pdW0nLFxuICAgIFNlcXVlbnR1bTogJ3NlcXVlbnR1bScsXG4gICAgU2xpbWVySlM6ICdzbGltZXJqcycsXG4gICAgV2ViRHJpdmVySU86ICd3ZWJkcml2ZXJpbycsXG4gICAgV2ViRHJpdmVyOiAnd2ViZHJpdmVyJyxcbiAgICBIZWFkbGVzc0Nocm9tZTogJ2hlYWRsZXNzX2Nocm9tZScsXG4gICAgVW5rbm93bjogJ3Vua25vd24nLFxufTtcbi8qKlxuICogQm90IGRldGVjdGlvbiBlcnJvci5cbiAqL1xudmFyIEJvdGRFcnJvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQm90ZEVycm9yLCBfc3VwZXIpO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgQm90ZEVycm9yLlxuICAgICAqXG4gICAgICogQGNsYXNzXG4gICAgICovXG4gICAgZnVuY3Rpb24gQm90ZEVycm9yKHN0YXRlLCBtZXNzYWdlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIF90aGlzLm5hbWUgPSAnQm90ZEVycm9yJztcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKF90aGlzLCBCb3RkRXJyb3IucHJvdG90eXBlKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gQm90ZEVycm9yO1xufShFcnJvcikpO1xuZXhwb3J0IHsgQm90ZEVycm9yIH07XG4iLCJpbXBvcnQgeyBfX2F3YWl0ZXIsIF9fZ2VuZXJhdG9yIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBCb3RkRXJyb3IsIEJvdEtpbmQsIH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0KGNvbXBvbmVudHMsIGRldGVjdG9ycykge1xuICAgIHZhciBkZXRlY3Rpb25zID0ge307XG4gICAgdmFyIGZpbmFsRGV0ZWN0aW9uID0ge1xuICAgICAgICBib3Q6IGZhbHNlLFxuICAgIH07XG4gICAgZm9yICh2YXIgZGV0ZWN0b3JOYW1lIGluIGRldGVjdG9ycykge1xuICAgICAgICB2YXIgZGV0ZWN0b3IgPSBkZXRlY3RvcnNbZGV0ZWN0b3JOYW1lXTtcbiAgICAgICAgdmFyIGRldGVjdG9yUmVzID0gZGV0ZWN0b3IoY29tcG9uZW50cyk7XG4gICAgICAgIHZhciBkZXRlY3Rpb24gPSB7IGJvdDogZmFsc2UgfTtcbiAgICAgICAgaWYgKHR5cGVvZiBkZXRlY3RvclJlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGRldGVjdGlvbiA9IHsgYm90OiB0cnVlLCBib3RLaW5kOiBkZXRlY3RvclJlcyB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRldGVjdG9yUmVzKSB7XG4gICAgICAgICAgICBkZXRlY3Rpb24gPSB7IGJvdDogdHJ1ZSwgYm90S2luZDogQm90S2luZC5Vbmtub3duIH07XG4gICAgICAgIH1cbiAgICAgICAgZGV0ZWN0aW9uc1tkZXRlY3Rvck5hbWVdID0gZGV0ZWN0aW9uO1xuICAgICAgICBpZiAoZGV0ZWN0aW9uLmJvdCkge1xuICAgICAgICAgICAgZmluYWxEZXRlY3Rpb24gPSBkZXRlY3Rpb247XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtkZXRlY3Rpb25zLCBmaW5hbERldGVjdGlvbl07XG59XG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdChzb3VyY2VzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY29tcG9uZW50cywgc291cmNlc0tleXM7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlc0tleXMgPSBPYmplY3Qua2V5cyhzb3VyY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgUHJvbWlzZS5hbGwoc291cmNlc0tleXMubWFwKGZ1bmN0aW9uIChzb3VyY2VLZXkpIHsgcmV0dXJuIF9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzLCBfYSwgX2IsIGVycm9yXzE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9jO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfZC5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IHNvdXJjZXNbc291cmNlS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZC5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2QudHJ5cy5wdXNoKFsxLCAzLCAsIDRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYSA9IGNvbXBvbmVudHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2IgPSBzb3VyY2VLZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCByZXMoKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2FbX2JdID0gKF9jLnZhbHVlID0gX2Quc2VudCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYy5zdGF0ZSA9IDAgLyogU3RhdGUuU3VjY2VzcyAqLyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yXzEgPSBfZC5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yXzEgaW5zdGFuY2VvZiBCb3RkRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50c1tzb3VyY2VLZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGVycm9yXzEuc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogXCJcIi5jb25jYXQoZXJyb3JfMS5uYW1lLCBcIjogXCIpLmNvbmNhdChlcnJvcl8xLm1lc3NhZ2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50c1tzb3VyY2VLZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IC0zIC8qIFN0YXRlLlVuZXhwZWN0ZWRCZWhhdmlvdXIgKi8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JfMSBpbnN0YW5jZW9mIEVycm9yID8gXCJcIi5jb25jYXQoZXJyb3JfMS5uYW1lLCBcIjogXCIpLmNvbmNhdChlcnJvcl8xLm1lc3NhZ2UpIDogU3RyaW5nKGVycm9yXzEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTsgfSkpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGNvbXBvbmVudHNdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBhcnJheUluY2x1ZGVzKGFyciwgdmFsdWUpIHtcbiAgICByZXR1cm4gYXJyLmluZGV4T2YodmFsdWUpICE9PSAtMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzdHJJbmNsdWRlcyhzdHIsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0ci5pbmRleE9mKHZhbHVlKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gYXJyYXlGaW5kKGFycmF5LCBjYWxsYmFjaykge1xuICAgIGlmICgnZmluZCcgaW4gYXJyYXkpXG4gICAgICAgIHJldHVybiBhcnJheS5maW5kKGNhbGxiYWNrKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChjYWxsYmFjayhhcnJheVtpXSwgaSwgYXJyYXkpKVxuICAgICAgICAgICAgcmV0dXJuIGFycmF5W2ldO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIiwiaW1wb3J0IHsgYXJyYXlGaW5kLCBhcnJheUluY2x1ZGVzIH0gZnJvbSAnLi9wb255ZmlsbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9iamVjdFByb3BzKG9iaikge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGluY2x1ZGVzKGFycikge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAga2V5c1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKGFycmF5SW5jbHVkZXMoYXJyLCBrZXkpKVxuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbWF0Y2ggPSBhcnJheUZpbmQoYXJyLCBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIGtleS50ZXN0KHZhbHVlKTsgfSk7XG4gICAgICAgICAgICBpZiAobWF0Y2ggIT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgfTtcbiAgICBmb3IgKHZhciBfYSA9IDAsIGtleXNfMSA9IGtleXM7IF9hIDwga2V5c18xLmxlbmd0aDsgX2ErKykge1xuICAgICAgICB2YXIga2V5ID0ga2V5c18xW19hXTtcbiAgICAgICAgdmFyIHN0YXRlXzEgPSBfbG9vcF8xKGtleSk7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGVfMSA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZV8xLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gY291bnRUcnV0aHkodmFsdWVzKSB7XG4gICAgcmV0dXJuIHZhbHVlcy5yZWR1Y2UoZnVuY3Rpb24gKHN1bSwgdmFsdWUpIHsgcmV0dXJuIHN1bSArICh2YWx1ZSA/IDEgOiAwKTsgfSwgMCk7XG59XG4iLCJpbXBvcnQgeyBkZXRlY3RBcHBWZXJzaW9uIH0gZnJvbSAnLi9hcHBfdmVyc2lvbic7XG5pbXBvcnQgeyBkZXRlY3REb2N1bWVudEF0dHJpYnV0ZXMgfSBmcm9tICcuL2RvY3VtZW50X2VsZW1lbnRfa2V5cyc7XG5pbXBvcnQgeyBkZXRlY3RFcnJvclRyYWNlIH0gZnJvbSAnLi9lcnJvcl90cmFjZSc7XG5pbXBvcnQgeyBkZXRlY3RFdmFsTGVuZ3RoSW5jb25zaXN0ZW5jeSB9IGZyb20gJy4vZXZhbF9sZW5ndGgnO1xuaW1wb3J0IHsgZGV0ZWN0RnVuY3Rpb25CaW5kIH0gZnJvbSAnLi9mdW5jdGlvbl9iaW5kJztcbmltcG9ydCB7IGRldGVjdExhbmd1YWdlc0xlbmd0aEluY29uc2lzdGVuY3kgfSBmcm9tICcuL2xhbmd1YWdlc19pbmNvbnNpc3RlbmN5JztcbmltcG9ydCB7IGRldGVjdE1pbWVUeXBlc0NvbnNpc3RlbnQgfSBmcm9tICcuL21pbWVfdHlwZXNfY29uc2lzdGVuY2UnO1xuaW1wb3J0IHsgZGV0ZWN0Tm90aWZpY2F0aW9uUGVybWlzc2lvbnMgfSBmcm9tICcuL25vdGlmaWNhdGlvbl9wZXJtaXNzaW9ucyc7XG5pbXBvcnQgeyBkZXRlY3RQbHVnaW5zQXJyYXkgfSBmcm9tICcuL3BsdWdpbnNfYXJyYXknO1xuaW1wb3J0IHsgZGV0ZWN0UGx1Z2luc0xlbmd0aEluY29uc2lzdGVuY3kgfSBmcm9tICcuL3BsdWdpbnNfaW5jb25zaXN0ZW5jeSc7XG5pbXBvcnQgeyBkZXRlY3RQcm9jZXNzIH0gZnJvbSAnLi9wcm9jZXNzJztcbmltcG9ydCB7IGRldGVjdFByb2R1Y3RTdWIgfSBmcm9tICcuL3Byb2R1Y3Rfc3ViJztcbmltcG9ydCB7IGRldGVjdFVzZXJBZ2VudCB9IGZyb20gJy4vdXNlcl9hZ2VudCc7XG5pbXBvcnQgeyBkZXRlY3RXZWJEcml2ZXIgfSBmcm9tICcuL3dlYmRyaXZlcic7XG5pbXBvcnQgeyBkZXRlY3RXZWJHTCB9IGZyb20gJy4vd2ViZ2wnO1xuaW1wb3J0IHsgZGV0ZWN0V2luZG93RXh0ZXJuYWwgfSBmcm9tICcuL3dpbmRvd19leHRlcm5hbCc7XG5pbXBvcnQgeyBkZXRlY3RXaW5kb3dTaXplIH0gZnJvbSAnLi93aW5kb3dfc2l6ZSc7XG5pbXBvcnQgeyBkZXRlY3REaXN0aW5jdGl2ZVByb3BlcnRpZXMgfSBmcm9tICcuL2Rpc3RpbmN0aXZlX3Byb3BlcnRpZXMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcbmV4cG9ydCB2YXIgZGV0ZWN0b3JzID0ge1xuICAgIGRldGVjdEFwcFZlcnNpb246IGRldGVjdEFwcFZlcnNpb24sXG4gICAgZGV0ZWN0RG9jdW1lbnRBdHRyaWJ1dGVzOiBkZXRlY3REb2N1bWVudEF0dHJpYnV0ZXMsXG4gICAgZGV0ZWN0RXJyb3JUcmFjZTogZGV0ZWN0RXJyb3JUcmFjZSxcbiAgICBkZXRlY3RFdmFsTGVuZ3RoSW5jb25zaXN0ZW5jeTogZGV0ZWN0RXZhbExlbmd0aEluY29uc2lzdGVuY3ksXG4gICAgZGV0ZWN0RnVuY3Rpb25CaW5kOiBkZXRlY3RGdW5jdGlvbkJpbmQsXG4gICAgZGV0ZWN0TGFuZ3VhZ2VzTGVuZ3RoSW5jb25zaXN0ZW5jeTogZGV0ZWN0TGFuZ3VhZ2VzTGVuZ3RoSW5jb25zaXN0ZW5jeSxcbiAgICBkZXRlY3ROb3RpZmljYXRpb25QZXJtaXNzaW9uczogZGV0ZWN0Tm90aWZpY2F0aW9uUGVybWlzc2lvbnMsXG4gICAgZGV0ZWN0UGx1Z2luc0FycmF5OiBkZXRlY3RQbHVnaW5zQXJyYXksXG4gICAgZGV0ZWN0UGx1Z2luc0xlbmd0aEluY29uc2lzdGVuY3k6IGRldGVjdFBsdWdpbnNMZW5ndGhJbmNvbnNpc3RlbmN5LFxuICAgIGRldGVjdFByb2Nlc3M6IGRldGVjdFByb2Nlc3MsXG4gICAgZGV0ZWN0VXNlckFnZW50OiBkZXRlY3RVc2VyQWdlbnQsXG4gICAgZGV0ZWN0V2ViRHJpdmVyOiBkZXRlY3RXZWJEcml2ZXIsXG4gICAgZGV0ZWN0V2ViR0w6IGRldGVjdFdlYkdMLFxuICAgIGRldGVjdFdpbmRvd0V4dGVybmFsOiBkZXRlY3RXaW5kb3dFeHRlcm5hbCxcbiAgICBkZXRlY3RXaW5kb3dTaXplOiBkZXRlY3RXaW5kb3dTaXplLFxuICAgIGRldGVjdE1pbWVUeXBlc0NvbnNpc3RlbnQ6IGRldGVjdE1pbWVUeXBlc0NvbnNpc3RlbnQsXG4gICAgZGV0ZWN0UHJvZHVjdFN1YjogZGV0ZWN0UHJvZHVjdFN1YixcbiAgICBkZXRlY3REaXN0aW5jdGl2ZVByb3BlcnRpZXM6IGRldGVjdERpc3RpbmN0aXZlUHJvcGVydGllcyxcbn07XG4iLCJpbXBvcnQgeyBCb3RLaW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEFwcFZlcnNpb24oX2EpIHtcbiAgICB2YXIgYXBwVmVyc2lvbiA9IF9hLmFwcFZlcnNpb247XG4gICAgaWYgKGFwcFZlcnNpb24uc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmICgvaGVhZGxlc3MvaS50ZXN0KGFwcFZlcnNpb24udmFsdWUpKVxuICAgICAgICByZXR1cm4gQm90S2luZC5IZWFkbGVzc0Nocm9tZTtcbiAgICBpZiAoL2VsZWN0cm9uL2kudGVzdChhcHBWZXJzaW9uLnZhbHVlKSlcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuRWxlY3Ryb247XG4gICAgaWYgKC9zbGltZXJqcy9pLnRlc3QoYXBwVmVyc2lvbi52YWx1ZSkpXG4gICAgICAgIHJldHVybiBCb3RLaW5kLlNsaW1lckpTO1xufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGluY2x1ZGVzIH0gZnJvbSAnLi4vdXRpbHMvbWlzYyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0RG9jdW1lbnRBdHRyaWJ1dGVzKF9hKSB7XG4gICAgdmFyIGRvY3VtZW50RWxlbWVudEtleXMgPSBfYS5kb2N1bWVudEVsZW1lbnRLZXlzO1xuICAgIGlmIChkb2N1bWVudEVsZW1lbnRLZXlzLnN0YXRlICE9PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8pXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaW5jbHVkZXMoZG9jdW1lbnRFbGVtZW50S2V5cy52YWx1ZSwgJ3NlbGVuaXVtJywgJ3dlYmRyaXZlcicsICdkcml2ZXInKSkge1xuICAgICAgICByZXR1cm4gQm90S2luZC5TZWxlbml1bTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBCb3RLaW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEVycm9yVHJhY2UoX2EpIHtcbiAgICB2YXIgZXJyb3JUcmFjZSA9IF9hLmVycm9yVHJhY2U7XG4gICAgaWYgKGVycm9yVHJhY2Uuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmICgvUGhhbnRvbUpTL2kudGVzdChlcnJvclRyYWNlLnZhbHVlKSlcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuUGhhbnRvbUpTO1xufVxuIiwiaW1wb3J0IHsgYXJyYXlJbmNsdWRlcyB9IGZyb20gJy4uL3V0aWxzL3BvbnlmaWxscyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0RXZhbExlbmd0aEluY29uc2lzdGVuY3koX2EpIHtcbiAgICB2YXIgZXZhbExlbmd0aCA9IF9hLmV2YWxMZW5ndGgsIGJyb3dzZXJLaW5kID0gX2EuYnJvd3NlcktpbmQsIGJyb3dzZXJFbmdpbmVLaW5kID0gX2EuYnJvd3NlckVuZ2luZUtpbmQ7XG4gICAgaWYgKGV2YWxMZW5ndGguc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLyB8fFxuICAgICAgICBicm93c2VyS2luZC5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovIHx8XG4gICAgICAgIGJyb3dzZXJFbmdpbmVLaW5kLnN0YXRlICE9PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8pXG4gICAgICAgIHJldHVybjtcbiAgICB2YXIgbGVuZ3RoID0gZXZhbExlbmd0aC52YWx1ZTtcbiAgICBpZiAoYnJvd3NlckVuZ2luZUtpbmQudmFsdWUgPT09IFwidW5rbm93blwiIC8qIEJyb3dzZXJFbmdpbmVLaW5kLlVua25vd24gKi8pXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKChsZW5ndGggPT09IDM3ICYmICFhcnJheUluY2x1ZGVzKFtcIndlYmtpdFwiIC8qIEJyb3dzZXJFbmdpbmVLaW5kLldlYmtpdCAqLywgXCJnZWNrb1wiIC8qIEJyb3dzZXJFbmdpbmVLaW5kLkdlY2tvICovXSwgYnJvd3NlckVuZ2luZUtpbmQudmFsdWUpKSB8fFxuICAgICAgICAobGVuZ3RoID09PSAzOSAmJiAhYXJyYXlJbmNsdWRlcyhbXCJpbnRlcm5ldF9leHBsb3JlclwiIC8qIEJyb3dzZXJLaW5kLklFICovXSwgYnJvd3NlcktpbmQudmFsdWUpKSB8fFxuICAgICAgICAobGVuZ3RoID09PSAzMyAmJiAhYXJyYXlJbmNsdWRlcyhbXCJjaHJvbWl1bVwiIC8qIEJyb3dzZXJFbmdpbmVLaW5kLkNocm9taXVtICovXSwgYnJvd3NlckVuZ2luZUtpbmQudmFsdWUpKSk7XG59XG4iLCJpbXBvcnQgeyBCb3RLaW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEZ1bmN0aW9uQmluZChfYSkge1xuICAgIHZhciBmdW5jdGlvbkJpbmQgPSBfYS5mdW5jdGlvbkJpbmQ7XG4gICAgaWYgKGZ1bmN0aW9uQmluZC5zdGF0ZSA9PT0gLTIgLyogU3RhdGUuTm90RnVuY3Rpb24gKi8pXG4gICAgICAgIHJldHVybiBCb3RLaW5kLlBoYW50b21KUztcbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0TGFuZ3VhZ2VzTGVuZ3RoSW5jb25zaXN0ZW5jeShfYSkge1xuICAgIHZhciBsYW5ndWFnZXMgPSBfYS5sYW5ndWFnZXM7XG4gICAgaWYgKGxhbmd1YWdlcy5zdGF0ZSA9PT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovICYmIGxhbmd1YWdlcy52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuSGVhZGxlc3NDaHJvbWU7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3ROb3RpZmljYXRpb25QZXJtaXNzaW9ucyhfYSkge1xuICAgIHZhciBub3RpZmljYXRpb25QZXJtaXNzaW9ucyA9IF9hLm5vdGlmaWNhdGlvblBlcm1pc3Npb25zLCBicm93c2VyS2luZCA9IF9hLmJyb3dzZXJLaW5kO1xuICAgIGlmIChicm93c2VyS2luZC5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovIHx8IGJyb3dzZXJLaW5kLnZhbHVlICE9PSBcImNocm9tZVwiIC8qIEJyb3dzZXJLaW5kLkNocm9tZSAqLylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChub3RpZmljYXRpb25QZXJtaXNzaW9ucy5zdGF0ZSA9PT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovICYmIG5vdGlmaWNhdGlvblBlcm1pc3Npb25zLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBCb3RLaW5kLkhlYWRsZXNzQ2hyb21lO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0UGx1Z2luc0FycmF5KF9hKSB7XG4gICAgdmFyIHBsdWdpbnNBcnJheSA9IF9hLnBsdWdpbnNBcnJheTtcbiAgICBpZiAocGx1Z2luc0FycmF5LnN0YXRlID09PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8gJiYgIXBsdWdpbnNBcnJheS52YWx1ZSlcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuSGVhZGxlc3NDaHJvbWU7XG59XG4iLCJpbXBvcnQgeyBCb3RLaW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdFBsdWdpbnNMZW5ndGhJbmNvbnNpc3RlbmN5KF9hKSB7XG4gICAgdmFyIHBsdWdpbnNMZW5ndGggPSBfYS5wbHVnaW5zTGVuZ3RoLCBhbmRyb2lkID0gX2EuYW5kcm9pZCwgYnJvd3NlcktpbmQgPSBfYS5icm93c2VyS2luZCwgYnJvd3NlckVuZ2luZUtpbmQgPSBfYS5icm93c2VyRW5naW5lS2luZDtcbiAgICBpZiAocGx1Z2luc0xlbmd0aC5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovIHx8XG4gICAgICAgIGFuZHJvaWQuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLyB8fFxuICAgICAgICBicm93c2VyS2luZC5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovIHx8XG4gICAgICAgIGJyb3dzZXJFbmdpbmVLaW5kLnN0YXRlICE9PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8pXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoYnJvd3NlcktpbmQudmFsdWUgIT09IFwiY2hyb21lXCIgLyogQnJvd3NlcktpbmQuQ2hyb21lICovIHx8XG4gICAgICAgIGFuZHJvaWQudmFsdWUgfHxcbiAgICAgICAgYnJvd3NlckVuZ2luZUtpbmQudmFsdWUgIT09IFwiY2hyb21pdW1cIiAvKiBCcm93c2VyRW5naW5lS2luZC5DaHJvbWl1bSAqLylcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChwbHVnaW5zTGVuZ3RoLnZhbHVlID09PSAwKVxuICAgICAgICByZXR1cm4gQm90S2luZC5IZWFkbGVzc0Nocm9tZTtcbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0UHJvY2VzcyhfYSkge1xuICAgIHZhciBfYjtcbiAgICB2YXIgcHJvY2VzcyA9IF9hLnByb2Nlc3M7XG4gICAgaWYgKHByb2Nlc3Muc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChwcm9jZXNzLnZhbHVlLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgKChfYiA9IHByb2Nlc3MudmFsdWUudmVyc2lvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5lbGVjdHJvbikgIT0gbnVsbClcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuRWxlY3Ryb247XG59XG4iLCJpbXBvcnQgeyBCb3RLaW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdFVzZXJBZ2VudChfYSkge1xuICAgIHZhciB1c2VyQWdlbnQgPSBfYS51c2VyQWdlbnQ7XG4gICAgaWYgKHVzZXJBZ2VudC5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKC9QaGFudG9tSlMvaS50ZXN0KHVzZXJBZ2VudC52YWx1ZSkpXG4gICAgICAgIHJldHVybiBCb3RLaW5kLlBoYW50b21KUztcbiAgICBpZiAoL0hlYWRsZXNzL2kudGVzdCh1c2VyQWdlbnQudmFsdWUpKVxuICAgICAgICByZXR1cm4gQm90S2luZC5IZWFkbGVzc0Nocm9tZTtcbiAgICBpZiAoL0VsZWN0cm9uL2kudGVzdCh1c2VyQWdlbnQudmFsdWUpKVxuICAgICAgICByZXR1cm4gQm90S2luZC5FbGVjdHJvbjtcbiAgICBpZiAoL3NsaW1lcmpzL2kudGVzdCh1c2VyQWdlbnQudmFsdWUpKVxuICAgICAgICByZXR1cm4gQm90S2luZC5TbGltZXJKUztcbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0V2ViRHJpdmVyKF9hKSB7XG4gICAgdmFyIHdlYkRyaXZlciA9IF9hLndlYkRyaXZlcjtcbiAgICBpZiAod2ViRHJpdmVyLnN0YXRlID09PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8gJiYgd2ViRHJpdmVyLnZhbHVlKVxuICAgICAgICByZXR1cm4gQm90S2luZC5IZWFkbGVzc0Nocm9tZTtcbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0V2ViR0woX2EpIHtcbiAgICB2YXIgd2ViR0wgPSBfYS53ZWJHTDtcbiAgICBpZiAod2ViR0wuc3RhdGUgPT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLykge1xuICAgICAgICB2YXIgX2IgPSB3ZWJHTC52YWx1ZSwgdmVuZG9yID0gX2IudmVuZG9yLCByZW5kZXJlciA9IF9iLnJlbmRlcmVyO1xuICAgICAgICBpZiAodmVuZG9yID09ICdCcmlhbiBQYXVsJyAmJiByZW5kZXJlciA9PSAnTWVzYSBPZmZTY3JlZW4nKSB7XG4gICAgICAgICAgICByZXR1cm4gQm90S2luZC5IZWFkbGVzc0Nocm9tZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0V2luZG93RXh0ZXJuYWwoX2EpIHtcbiAgICB2YXIgd2luZG93RXh0ZXJuYWwgPSBfYS53aW5kb3dFeHRlcm5hbDtcbiAgICBpZiAod2luZG93RXh0ZXJuYWwuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmICgvU2VxdWVudHVtL2kudGVzdCh3aW5kb3dFeHRlcm5hbC52YWx1ZSkpXG4gICAgICAgIHJldHVybiBCb3RLaW5kLlNlcXVlbnR1bTtcbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0V2luZG93U2l6ZShfYSkge1xuICAgIHZhciB3aW5kb3dTaXplID0gX2Eud2luZG93U2l6ZSwgZG9jdW1lbnRGb2N1cyA9IF9hLmRvY3VtZW50Rm9jdXM7XG4gICAgaWYgKHdpbmRvd1NpemUuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLyB8fCBkb2N1bWVudEZvY3VzLnN0YXRlICE9PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8pXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgX2IgPSB3aW5kb3dTaXplLnZhbHVlLCBvdXRlcldpZHRoID0gX2Iub3V0ZXJXaWR0aCwgb3V0ZXJIZWlnaHQgPSBfYi5vdXRlckhlaWdodDtcbiAgICAvLyBXaGVuIGEgcGFnZSBpcyBvcGVuZWQgaW4gYSBuZXcgdGFiIHdpdGhvdXQgZm9jdXNpbmcgaXQgcmlnaHQgYXdheSwgdGhlIHdpbmRvdyBvdXRlciBzaXplIGlzIDB4MFxuICAgIGlmICghZG9jdW1lbnRGb2N1cy52YWx1ZSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChvdXRlcldpZHRoID09PSAwICYmIG91dGVySGVpZ2h0ID09PSAwKVxuICAgICAgICByZXR1cm4gQm90S2luZC5IZWFkbGVzc0Nocm9tZTtcbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0TWltZVR5cGVzQ29uc2lzdGVudChfYSkge1xuICAgIHZhciBtaW1lVHlwZXNDb25zaXN0ZW50ID0gX2EubWltZVR5cGVzQ29uc2lzdGVudDtcbiAgICBpZiAobWltZVR5cGVzQ29uc2lzdGVudC5zdGF0ZSA9PT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovICYmICFtaW1lVHlwZXNDb25zaXN0ZW50LnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBCb3RLaW5kLlVua25vd247XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RQcm9kdWN0U3ViKF9hKSB7XG4gICAgdmFyIHByb2R1Y3RTdWIgPSBfYS5wcm9kdWN0U3ViLCBicm93c2VyS2luZCA9IF9hLmJyb3dzZXJLaW5kO1xuICAgIGlmIChwcm9kdWN0U3ViLnN0YXRlICE9PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8gfHwgYnJvd3NlcktpbmQuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmICgoYnJvd3NlcktpbmQudmFsdWUgPT09IFwiY2hyb21lXCIgLyogQnJvd3NlcktpbmQuQ2hyb21lICovIHx8XG4gICAgICAgIGJyb3dzZXJLaW5kLnZhbHVlID09PSBcInNhZmFyaVwiIC8qIEJyb3dzZXJLaW5kLlNhZmFyaSAqLyB8fFxuICAgICAgICBicm93c2VyS2luZC52YWx1ZSA9PT0gXCJvcGVyYVwiIC8qIEJyb3dzZXJLaW5kLk9wZXJhICovIHx8XG4gICAgICAgIGJyb3dzZXJLaW5kLnZhbHVlID09PSBcIndlY2hhdFwiIC8qIEJyb3dzZXJLaW5kLldlQ2hhdCAqLykgJiZcbiAgICAgICAgcHJvZHVjdFN1Yi52YWx1ZSAhPT0gJzIwMDMwMTA3JylcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuVW5rbm93bjtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBkZXRlY3REaXN0aW5jdGl2ZVByb3BlcnRpZXMoX2EpIHtcbiAgICB2YXIgZGlzdGluY3RpdmVQcm9wcyA9IF9hLmRpc3RpbmN0aXZlUHJvcHM7XG4gICAgaWYgKGRpc3RpbmN0aXZlUHJvcHMuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHZhciB2YWx1ZSA9IGRpc3RpbmN0aXZlUHJvcHMudmFsdWU7XG4gICAgdmFyIGJvdDtcbiAgICBmb3IgKGJvdCBpbiB2YWx1ZSlcbiAgICAgICAgaWYgKHZhbHVlW2JvdF0pXG4gICAgICAgICAgICByZXR1cm4gYm90O1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgY291bnRUcnV0aHkgfSBmcm9tICcuL21pc2MnO1xuaW1wb3J0IHsgc3RySW5jbHVkZXMgfSBmcm9tICcuL3BvbnlmaWxscyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0QnJvd3NlckVuZ2luZUtpbmQoKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICAvLyBCYXNlZCBvbiByZXNlYXJjaCBpbiBPY3RvYmVyIDIwMjAuIFRlc3RlZCB0byBkZXRlY3QgQ2hyb21pdW0gNDItODYuXG4gICAgdmFyIHcgPSB3aW5kb3c7XG4gICAgdmFyIG4gPSBuYXZpZ2F0b3I7XG4gICAgaWYgKGNvdW50VHJ1dGh5KFtcbiAgICAgICAgJ3dlYmtpdFBlcnNpc3RlbnRTdG9yYWdlJyBpbiBuLFxuICAgICAgICAnd2Via2l0VGVtcG9yYXJ5U3RvcmFnZScgaW4gbixcbiAgICAgICAgbi52ZW5kb3IuaW5kZXhPZignR29vZ2xlJykgPT09IDAsXG4gICAgICAgICd3ZWJraXRSZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMJyBpbiB3LFxuICAgICAgICAnQmF0dGVyeU1hbmFnZXInIGluIHcsXG4gICAgICAgICd3ZWJraXRNZWRpYVN0cmVhbScgaW4gdyxcbiAgICAgICAgJ3dlYmtpdFNwZWVjaEdyYW1tYXInIGluIHcsXG4gICAgXSkgPj0gNSkge1xuICAgICAgICByZXR1cm4gXCJjaHJvbWl1bVwiIC8qIEJyb3dzZXJFbmdpbmVLaW5kLkNocm9taXVtICovO1xuICAgIH1cbiAgICBpZiAoY291bnRUcnV0aHkoW1xuICAgICAgICAnQXBwbGVQYXlFcnJvcicgaW4gdyxcbiAgICAgICAgJ0NTU1ByaW1pdGl2ZVZhbHVlJyBpbiB3LFxuICAgICAgICAnQ291bnRlcicgaW4gdyxcbiAgICAgICAgbi52ZW5kb3IuaW5kZXhPZignQXBwbGUnKSA9PT0gMCxcbiAgICAgICAgJ2dldFN0b3JhZ2VVcGRhdGVzJyBpbiBuLFxuICAgICAgICAnV2ViS2l0TWVkaWFLZXlzJyBpbiB3LFxuICAgIF0pID49IDQpIHtcbiAgICAgICAgcmV0dXJuIFwid2Via2l0XCIgLyogQnJvd3NlckVuZ2luZUtpbmQuV2Via2l0ICovO1xuICAgIH1cbiAgICBpZiAoY291bnRUcnV0aHkoW1xuICAgICAgICAnYnVpbGRJRCcgaW4gbmF2aWdhdG9yLFxuICAgICAgICAnTW96QXBwZWFyYW5jZScgaW4gKChfYiA9IChfYSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0eWxlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB7fSksXG4gICAgICAgICdvbm1vemZ1bGxzY3JlZW5jaGFuZ2UnIGluIHcsXG4gICAgICAgICdtb3pJbm5lclNjcmVlblgnIGluIHcsXG4gICAgICAgICdDU1NNb3pEb2N1bWVudFJ1bGUnIGluIHcsXG4gICAgICAgICdDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW0nIGluIHcsXG4gICAgXSkgPj0gNCkge1xuICAgICAgICByZXR1cm4gXCJnZWNrb1wiIC8qIEJyb3dzZXJFbmdpbmVLaW5kLkdlY2tvICovO1xuICAgIH1cbiAgICByZXR1cm4gXCJ1bmtub3duXCIgLyogQnJvd3NlckVuZ2luZUtpbmQuVW5rbm93biAqLztcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRCcm93c2VyS2luZCgpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIHVzZXJBZ2VudCA9IChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChzdHJJbmNsdWRlcyh1c2VyQWdlbnQsICdlZGcvJykpIHtcbiAgICAgICAgcmV0dXJuIFwiZWRnZVwiIC8qIEJyb3dzZXJLaW5kLkVkZ2UgKi87XG4gICAgfVxuICAgIGVsc2UgaWYgKHN0ckluY2x1ZGVzKHVzZXJBZ2VudCwgJ3RyaWRlbnQnKSB8fCBzdHJJbmNsdWRlcyh1c2VyQWdlbnQsICdtc2llJykpIHtcbiAgICAgICAgcmV0dXJuIFwiaW50ZXJuZXRfZXhwbG9yZXJcIiAvKiBCcm93c2VyS2luZC5JRSAqLztcbiAgICB9XG4gICAgZWxzZSBpZiAoc3RySW5jbHVkZXModXNlckFnZW50LCAnd2VjaGF0JykpIHtcbiAgICAgICAgcmV0dXJuIFwid2VjaGF0XCIgLyogQnJvd3NlcktpbmQuV2VDaGF0ICovO1xuICAgIH1cbiAgICBlbHNlIGlmIChzdHJJbmNsdWRlcyh1c2VyQWdlbnQsICdmaXJlZm94JykpIHtcbiAgICAgICAgcmV0dXJuIFwiZmlyZWZveFwiIC8qIEJyb3dzZXJLaW5kLkZpcmVmb3ggKi87XG4gICAgfVxuICAgIGVsc2UgaWYgKHN0ckluY2x1ZGVzKHVzZXJBZ2VudCwgJ29wZXJhJykgfHwgc3RySW5jbHVkZXModXNlckFnZW50LCAnb3ByJykpIHtcbiAgICAgICAgcmV0dXJuIFwib3BlcmFcIiAvKiBCcm93c2VyS2luZC5PcGVyYSAqLztcbiAgICB9XG4gICAgZWxzZSBpZiAoc3RySW5jbHVkZXModXNlckFnZW50LCAnY2hyb21lJykpIHtcbiAgICAgICAgcmV0dXJuIFwiY2hyb21lXCIgLyogQnJvd3NlcktpbmQuQ2hyb21lICovO1xuICAgIH1cbiAgICBlbHNlIGlmIChzdHJJbmNsdWRlcyh1c2VyQWdlbnQsICdzYWZhcmknKSkge1xuICAgICAgICByZXR1cm4gXCJzYWZhcmlcIiAvKiBCcm93c2VyS2luZC5TYWZhcmkgKi87XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJ1bmtub3duXCIgLyogQnJvd3NlcktpbmQuVW5rbm93biAqLztcbiAgICB9XG59XG4vLyBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9maW5nZXJwcmludGpzL2ZpbmdlcnByaW50anMvYmxvYi9tYXN0ZXIvc3JjL3V0aWxzL2Jyb3dzZXIudHMjTDIyM1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW5kcm9pZCgpIHtcbiAgICB2YXIgYnJvd3NlckVuZ2luZUtpbmQgPSBnZXRCcm93c2VyRW5naW5lS2luZCgpO1xuICAgIHZhciBpc0l0Q2hyb21pdW0gPSBicm93c2VyRW5naW5lS2luZCA9PT0gXCJjaHJvbWl1bVwiIC8qIEJyb3dzZXJFbmdpbmVLaW5kLkNocm9taXVtICovO1xuICAgIHZhciBpc0l0R2Vja28gPSBicm93c2VyRW5naW5lS2luZCA9PT0gXCJnZWNrb1wiIC8qIEJyb3dzZXJFbmdpbmVLaW5kLkdlY2tvICovO1xuICAgIC8vIE9ubHkgMiBicm93c2VyIGVuZ2luZXMgYXJlIHByZXNlbnRlZCBvbiBBbmRyb2lkLlxuICAgIC8vIEFjdHVhbGx5LCB0aGVyZSBpcyBhbHNvIEFuZHJvaWQgNC4xIGJyb3dzZXIsIGJ1dCBpdCdzIG5vdCB3b3J0aCBkZXRlY3RpbmcgaXQgYXQgdGhlIG1vbWVudC5cbiAgICBpZiAoIWlzSXRDaHJvbWl1bSAmJiAhaXNJdEdlY2tvKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHcgPSB3aW5kb3c7XG4gICAgLy8gQ2hyb21lIHJlbW92ZXMgYWxsIHdvcmRzIFwiQW5kcm9pZFwiIGZyb20gYG5hdmlnYXRvcmAgd2hlbiBkZXNrdG9wIHZlcnNpb24gaXMgcmVxdWVzdGVkXG4gICAgLy8gRmlyZWZveCBrZWVwcyBcIkFuZHJvaWRcIiBpbiBgbmF2aWdhdG9yLmFwcFZlcnNpb25gIHdoZW4gZGVza3RvcCB2ZXJzaW9uIGlzIHJlcXVlc3RlZFxuICAgIHJldHVybiAoY291bnRUcnV0aHkoW1xuICAgICAgICAnb25vcmllbnRhdGlvbmNoYW5nZScgaW4gdyxcbiAgICAgICAgJ29yaWVudGF0aW9uJyBpbiB3LFxuICAgICAgICBpc0l0Q2hyb21pdW0gJiYgISgnU2hhcmVkV29ya2VyJyBpbiB3KSxcbiAgICAgICAgaXNJdEdlY2tvICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IuYXBwVmVyc2lvbiksXG4gICAgXSkgPj0gMik7XG59XG4vLyBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9maW5nZXJwcmludGpzL2ZpbmdlcnByaW50anMvYmxvYi8xMDlmOGVmODAyMTY5ZGYzZmExYzVkMWJhYTRiN2JjMGFiYmMxZDkxL3NyYy91dGlscy9icm93c2VyLnRzI0wxMDJDMS1MMTE4QzJcbmV4cG9ydCBmdW5jdGlvbiBpc0Rlc2t0b3BXZWJLaXQoKSB7XG4gICAgLy8gQ2hlY2tlZCBpbiBTYWZhcmkgYW5kIER1Y2tEdWNrR29cbiAgICB2YXIgdyA9IHdpbmRvdztcbiAgICB2YXIgSFRNTEVsZW1lbnQgPSB3LkhUTUxFbGVtZW50LCBEb2N1bWVudCA9IHcuRG9jdW1lbnQ7XG4gICAgcmV0dXJuIChjb3VudFRydXRoeShbXG4gICAgICAgICdzYWZhcmknIGluIHcsXG4gICAgICAgICEoJ29uZ2VzdHVyZWVuZCcgaW4gdyksXG4gICAgICAgICEoJ1RvdWNoRXZlbnQnIGluIHcpLFxuICAgICAgICAhKCdvcmllbnRhdGlvbicgaW4gdyksXG4gICAgICAgIEhUTUxFbGVtZW50ICYmICEoJ2F1dG9jYXBpdGFsaXplJyBpbiBIVE1MRWxlbWVudC5wcm90b3R5cGUpLFxuICAgICAgICBEb2N1bWVudCAmJiAncG9pbnRlckxvY2tFbGVtZW50JyBpbiBEb2N1bWVudC5wcm90b3R5cGUsXG4gICAgXSkgPj0gNCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TW96QXBwZWFyYW5jZVN1cHBvcnQoKSB7XG4gICAgaWYgKHdpbmRvdy5DU1MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0xIC8qIFN0YXRlLlVuZGVmaW5lZCAqLywgJ3dpbmRvdy5DU1MgaXMgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHJldHVybiBDU1Muc3VwcG9ydHMoJy1tb3otYXBwZWFyYW5jZScsICdhdXRvJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRGb2N1cygpIHtcbiAgICBpZiAoZG9jdW1lbnQuaGFzRm9jdXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBkb2N1bWVudC5oYXNGb2N1cygpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2hyb21pdW04Nk9yTmV3ZXIoKSB7XG4gICAgLy8gQ2hlY2tlZCBpbiBDaHJvbWUgODUgdnMgQ2hyb21lIDg2IGJvdGggb24gZGVza3RvcCBhbmQgQW5kcm9pZFxuICAgIHZhciB3ID0gd2luZG93O1xuICAgIHJldHVybiAoY291bnRUcnV0aHkoW1xuICAgICAgICAhKCdNZWRpYVNldHRpbmdzUmFuZ2UnIGluIHcpLFxuICAgICAgICAnUlRDRW5jb2RlZEF1ZGlvRnJhbWUnIGluIHcsXG4gICAgICAgICcnICsgdy5JbnRsID09PSAnW29iamVjdCBJbnRsXScsXG4gICAgICAgICcnICsgdy5SZWZsZWN0ID09PSAnW29iamVjdCBSZWZsZWN0XScsXG4gICAgXSkgPj0gMyk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJUGFkKCkge1xuICAgIC8vIENoZWNrZWQgb246XG4gICAgLy8gU2FmYXJpIG9uIGlQYWRPUyAoYm90aCBtb2JpbGUgYW5kIGRlc2t0b3AgbW9kZXMpOiA4LCAxMSwgMTIsIDEzLCAxNFxuICAgIC8vIENocm9tZSBvbiBpUGFkT1MgKGJvdGggbW9iaWxlIGFuZCBkZXNrdG9wIG1vZGVzKTogMTEsIDEyLCAxMywgMTRcbiAgICAvLyBTYWZhcmkgb24gaU9TIChib3RoIG1vYmlsZSBhbmQgZGVza3RvcCBtb2Rlcyk6IDksIDEwLCAxMSwgMTIsIDEzLCAxNFxuICAgIC8vIENocm9tZSBvbiBpT1MgKGJvdGggbW9iaWxlIGFuZCBkZXNrdG9wIG1vZGVzKTogOSwgMTAsIDExLCAxMiwgMTMsIDE0XG4gICAgLy8gQmVmb3JlIGlPUyAxMy4gU2FmYXJpIHRhbXBlcnMgdGhlIHZhbHVlIGluIFwicmVxdWVzdCBkZXNrdG9wIHNpdGVcIiBtb2RlIHNpbmNlIGlPUyAxMy5cbiAgICBpZiAobmF2aWdhdG9yLnBsYXRmb3JtID09PSAnaVBhZCcpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHZhciBzID0gc2NyZWVuO1xuICAgIHZhciBzY3JlZW5SYXRpbyA9IHMud2lkdGggLyBzLmhlaWdodDtcbiAgICByZXR1cm4gKGNvdW50VHJ1dGh5KFtcbiAgICAgICAgJ01lZGlhU291cmNlJyBpbiB3aW5kb3csXG4gICAgICAgICEhRWxlbWVudC5wcm90b3R5cGUud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4sXG4gICAgICAgIC8vIGlQaG9uZSA0UyB0aGF0IHJ1bnMgaU9TIDkgbWF0Y2hlcyB0aGlzLiBCdXQgaXQgd29uJ3QgbWF0Y2ggdGhlIGNyaXRlcmlhIGFib3ZlLCBzbyBpdCB3b24ndCBiZSBkZXRlY3RlZCBhcyBpUGFkLlxuICAgICAgICBzY3JlZW5SYXRpbyA+IDAuNjUgJiYgc2NyZWVuUmF0aW8gPCAxLjUzLFxuICAgIF0pID49IDIpO1xufVxuIiwiaW1wb3J0IGdldEFwcFZlcnNpb24gZnJvbSAnLi9hcHBfdmVyc2lvbic7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50S2V5cyBmcm9tICcuL2RvY3VtZW50X2VsZW1lbnRfa2V5cyc7XG5pbXBvcnQgZ2V0RXJyb3JUcmFjZSBmcm9tICcuL2Vycm9yX3RyYWNlJztcbmltcG9ydCBnZXRFdmFsTGVuZ3RoIGZyb20gJy4vZXZhbF9sZW5ndGgnO1xuaW1wb3J0IGdldEZ1bmN0aW9uQmluZCBmcm9tICcuL2Z1bmN0aW9uX2JpbmQnO1xuaW1wb3J0IGdldExhbmd1YWdlcyBmcm9tICcuL2xhbmd1YWdlcyc7XG5pbXBvcnQgYXJlTWltZVR5cGVzQ29uc2lzdGVudCBmcm9tICcuL21pbWVfdHlwZXNfY29uc2lzdGVuY2UnO1xuaW1wb3J0IGdldE5vdGlmaWNhdGlvblBlcm1pc3Npb25zIGZyb20gJy4vbm90aWZpY2F0aW9uX3Blcm1pc3Npb25zJztcbmltcG9ydCBnZXRQbHVnaW5zQXJyYXkgZnJvbSAnLi9wbHVnaW5zX2FycmF5JztcbmltcG9ydCBnZXRQbHVnaW5zTGVuZ3RoIGZyb20gJy4vcGx1Z2luc19sZW5ndGgnO1xuaW1wb3J0IGdldFByb2Nlc3MgZnJvbSAnLi9wcm9jZXNzJztcbmltcG9ydCBnZXRQcm9kdWN0U3ViIGZyb20gJy4vcHJvZHVjdF9zdWInO1xuaW1wb3J0IGdldFJUVCBmcm9tICcuL3J0dCc7XG5pbXBvcnQgZ2V0VXNlckFnZW50IGZyb20gJy4vdXNlcl9hZ2VudCc7XG5pbXBvcnQgZ2V0V2ViRHJpdmVyIGZyb20gJy4vd2ViZHJpdmVyJztcbmltcG9ydCBnZXRXZWJHTCBmcm9tICcuL3dlYmdsJztcbmltcG9ydCBnZXRXaW5kb3dFeHRlcm5hbCBmcm9tICcuL3dpbmRvd19leHRlcm5hbCc7XG5pbXBvcnQgZ2V0V2luZG93U2l6ZSBmcm9tICcuL3dpbmRvd19zaXplJztcbmltcG9ydCBjaGVja0Rpc3RpbmN0aXZlUHJvcGVydGllcyBmcm9tICcuL2Rpc3RpbmN0aXZlX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHsgZ2V0QnJvd3NlckVuZ2luZUtpbmQsIGdldEJyb3dzZXJLaW5kLCBnZXREb2N1bWVudEZvY3VzLCBpc0FuZHJvaWQgfSBmcm9tICcuLi91dGlscy9icm93c2VyJztcbmV4cG9ydCB2YXIgc291cmNlcyA9IHtcbiAgICBhbmRyb2lkOiBpc0FuZHJvaWQsXG4gICAgYnJvd3NlcktpbmQ6IGdldEJyb3dzZXJLaW5kLFxuICAgIGJyb3dzZXJFbmdpbmVLaW5kOiBnZXRCcm93c2VyRW5naW5lS2luZCxcbiAgICBkb2N1bWVudEZvY3VzOiBnZXREb2N1bWVudEZvY3VzLFxuICAgIHVzZXJBZ2VudDogZ2V0VXNlckFnZW50LFxuICAgIGFwcFZlcnNpb246IGdldEFwcFZlcnNpb24sXG4gICAgcnR0OiBnZXRSVFQsXG4gICAgd2luZG93U2l6ZTogZ2V0V2luZG93U2l6ZSxcbiAgICBwbHVnaW5zTGVuZ3RoOiBnZXRQbHVnaW5zTGVuZ3RoLFxuICAgIHBsdWdpbnNBcnJheTogZ2V0UGx1Z2luc0FycmF5LFxuICAgIGVycm9yVHJhY2U6IGdldEVycm9yVHJhY2UsXG4gICAgcHJvZHVjdFN1YjogZ2V0UHJvZHVjdFN1YixcbiAgICB3aW5kb3dFeHRlcm5hbDogZ2V0V2luZG93RXh0ZXJuYWwsXG4gICAgbWltZVR5cGVzQ29uc2lzdGVudDogYXJlTWltZVR5cGVzQ29uc2lzdGVudCxcbiAgICBldmFsTGVuZ3RoOiBnZXRFdmFsTGVuZ3RoLFxuICAgIHdlYkdMOiBnZXRXZWJHTCxcbiAgICB3ZWJEcml2ZXI6IGdldFdlYkRyaXZlcixcbiAgICBsYW5ndWFnZXM6IGdldExhbmd1YWdlcyxcbiAgICBub3RpZmljYXRpb25QZXJtaXNzaW9uczogZ2V0Tm90aWZpY2F0aW9uUGVybWlzc2lvbnMsXG4gICAgZG9jdW1lbnRFbGVtZW50S2V5czogZ2V0RG9jdW1lbnRFbGVtZW50S2V5cyxcbiAgICBmdW5jdGlvbkJpbmQ6IGdldEZ1bmN0aW9uQmluZCxcbiAgICBwcm9jZXNzOiBnZXRQcm9jZXNzLFxuICAgIGRpc3RpbmN0aXZlUHJvcHM6IGNoZWNrRGlzdGluY3RpdmVQcm9wZXJ0aWVzLFxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVzZXJBZ2VudCgpIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbn1cbiIsImltcG9ydCB7IEJvdGRFcnJvciB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEFwcFZlcnNpb24oKSB7XG4gICAgdmFyIGFwcFZlcnNpb24gPSBuYXZpZ2F0b3IuYXBwVmVyc2lvbjtcbiAgICBpZiAoYXBwVmVyc2lvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICduYXZpZ2F0b3IuYXBwVmVyc2lvbiBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIGFwcFZlcnNpb247XG59XG4iLCJpbXBvcnQgeyBCb3RkRXJyb3IgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRSVFQoKSB7XG4gICAgaWYgKG5hdmlnYXRvci5jb25uZWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICduYXZpZ2F0b3IuY29ubmVjdGlvbiBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgaWYgKG5hdmlnYXRvci5jb25uZWN0aW9uLnJ0dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTEgLyogU3RhdGUuVW5kZWZpbmVkICovLCAnbmF2aWdhdG9yLmNvbm5lY3Rpb24ucnR0IGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICByZXR1cm4gbmF2aWdhdG9yLmNvbm5lY3Rpb24ucnR0O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2l6ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBvdXRlcldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICAgICAgb3V0ZXJIZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgICAgaW5uZXJXaWR0aDogd2luZG93LmlubmVyV2lkdGgsXG4gICAgICAgIGlubmVySGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQsXG4gICAgfTtcbn1cbiIsImltcG9ydCB7IEJvdGRFcnJvciB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFBsdWdpbnNMZW5ndGgoKSB7XG4gICAgaWYgKG5hdmlnYXRvci5wbHVnaW5zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICduYXZpZ2F0b3IucGx1Z2lucyBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgaWYgKG5hdmlnYXRvci5wbHVnaW5zLmxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTMgLyogU3RhdGUuVW5leHBlY3RlZEJlaGF2aW91ciAqLywgJ25hdmlnYXRvci5wbHVnaW5zLmxlbmd0aCBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hdmlnYXRvci5wbHVnaW5zLmxlbmd0aDtcbn1cbiIsImltcG9ydCB7IEJvdGRFcnJvciB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFBsdWdpbnNBcnJheSgpIHtcbiAgICBpZiAobmF2aWdhdG9yLnBsdWdpbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0xIC8qIFN0YXRlLlVuZGVmaW5lZCAqLywgJ25hdmlnYXRvci5wbHVnaW5zIGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICBpZiAod2luZG93LlBsdWdpbkFycmF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICd3aW5kb3cuUGx1Z2luQXJyYXkgaXMgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHJldHVybiBuYXZpZ2F0b3IucGx1Z2lucyBpbnN0YW5jZW9mIFBsdWdpbkFycmF5O1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RXJyb3JUcmFjZSgpIHtcbiAgICB0cnkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgbnVsbFswXSgpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3JbJ3N0YWNrJ10gIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yLnN0YWNrLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMyAvKiBTdGF0ZS5VbmV4cGVjdGVkQmVoYXZpb3VyICovLCAnZXJyb3JUcmFjZSBzaWduYWwgdW5leHBlY3RlZCBiZWhhdmlvdXInKTtcbn1cbiIsImltcG9ydCB7IEJvdGRFcnJvciB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFByb2R1Y3RTdWIoKSB7XG4gICAgdmFyIHByb2R1Y3RTdWIgPSBuYXZpZ2F0b3IucHJvZHVjdFN1YjtcbiAgICBpZiAocHJvZHVjdFN1YiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTEgLyogU3RhdGUuVW5kZWZpbmVkICovLCAnbmF2aWdhdG9yLnByb2R1Y3RTdWIgaXMgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHJldHVybiBwcm9kdWN0U3ViO1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93RXh0ZXJuYWwoKSB7XG4gICAgaWYgKHdpbmRvdy5leHRlcm5hbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTEgLyogU3RhdGUuVW5kZWZpbmVkICovLCAnd2luZG93LmV4dGVybmFsIGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICB2YXIgZXh0ZXJuYWwgPSB3aW5kb3cuZXh0ZXJuYWw7XG4gICAgaWYgKHR5cGVvZiBleHRlcm5hbC50b1N0cmluZyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0yIC8qIFN0YXRlLk5vdEZ1bmN0aW9uICovLCAnd2luZG93LmV4dGVybmFsLnRvU3RyaW5nIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiBleHRlcm5hbC50b1N0cmluZygpO1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXJlTWltZVR5cGVzQ29uc2lzdGVudCgpIHtcbiAgICBpZiAobmF2aWdhdG9yLm1pbWVUeXBlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTEgLyogU3RhdGUuVW5kZWZpbmVkICovLCAnbmF2aWdhdG9yLm1pbWVUeXBlcyBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgdmFyIG1pbWVUeXBlcyA9IG5hdmlnYXRvci5taW1lVHlwZXM7XG4gICAgdmFyIGlzQ29uc2lzdGVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihtaW1lVHlwZXMpID09PSBNaW1lVHlwZUFycmF5LnByb3RvdHlwZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pbWVUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpc0NvbnNpc3RlbnQgJiYgKGlzQ29uc2lzdGVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihtaW1lVHlwZXNbaV0pID09PSBNaW1lVHlwZS5wcm90b3R5cGUpO1xuICAgIH1cbiAgICByZXR1cm4gaXNDb25zaXN0ZW50O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RXZhbExlbmd0aCgpIHtcbiAgICByZXR1cm4gZXZhbC50b1N0cmluZygpLmxlbmd0aDtcbn1cbiIsImltcG9ydCB7IEJvdGRFcnJvciB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdlYkdMKCkge1xuICAgIHZhciBjYW52YXNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgaWYgKHR5cGVvZiBjYW52YXNFbGVtZW50LmdldENvbnRleHQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMiAvKiBTdGF0ZS5Ob3RGdW5jdGlvbiAqLywgJ0hUTUxDYW52YXNFbGVtZW50LmdldENvbnRleHQgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG4gICAgdmFyIHdlYkdMQ29udGV4dCA9IGNhbnZhc0VsZW1lbnQuZ2V0Q29udGV4dCgnd2ViZ2wnKTtcbiAgICBpZiAod2ViR0xDb250ZXh0ID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTQgLyogU3RhdGUuTnVsbCAqLywgJ1dlYkdMUmVuZGVyaW5nQ29udGV4dCBpcyBudWxsJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd2ViR0xDb250ZXh0LmdldFBhcmFtZXRlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0yIC8qIFN0YXRlLk5vdEZ1bmN0aW9uICovLCAnV2ViR0xSZW5kZXJpbmdDb250ZXh0LmdldFBhcmFtZXRlciBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgIH1cbiAgICB2YXIgdmVuZG9yID0gd2ViR0xDb250ZXh0LmdldFBhcmFtZXRlcih3ZWJHTENvbnRleHQuVkVORE9SKTtcbiAgICB2YXIgcmVuZGVyZXIgPSB3ZWJHTENvbnRleHQuZ2V0UGFyYW1ldGVyKHdlYkdMQ29udGV4dC5SRU5ERVJFUik7XG4gICAgcmV0dXJuIHsgdmVuZG9yOiB2ZW5kb3IsIHJlbmRlcmVyOiByZW5kZXJlciB9O1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2ViRHJpdmVyKCkge1xuICAgIGlmIChuYXZpZ2F0b3Iud2ViZHJpdmVyID09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0xIC8qIFN0YXRlLlVuZGVmaW5lZCAqLywgJ25hdmlnYXRvci53ZWJkcml2ZXIgaXMgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHJldHVybiBuYXZpZ2F0b3Iud2ViZHJpdmVyO1xufVxuIiwiaW1wb3J0IHsgZ2V0QnJvd3NlckVuZ2luZUtpbmQsIGlzQ2hyb21pdW04Nk9yTmV3ZXIgfSBmcm9tICcuLi91dGlscy9icm93c2VyJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExhbmd1YWdlcygpIHtcbiAgICB2YXIgbiA9IG5hdmlnYXRvcjtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGxhbmd1YWdlID0gbi5sYW5ndWFnZSB8fCBuLnVzZXJMYW5ndWFnZSB8fCBuLmJyb3dzZXJMYW5ndWFnZSB8fCBuLnN5c3RlbUxhbmd1YWdlO1xuICAgIGlmIChsYW5ndWFnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKFtsYW5ndWFnZV0pO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShuLmxhbmd1YWdlcykpIHtcbiAgICAgICAgdmFyIGJyb3dzZXJFbmdpbmUgPSBnZXRCcm93c2VyRW5naW5lS2luZCgpO1xuICAgICAgICAvLyBTdGFydGluZyBmcm9tIENocm9taXVtIDg2LCB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHZhbHVlIGluIGBuYXZpZ2F0b3IubGFuZ3VhZ2VgIGluIEluY29nbml0byBtb2RlOlxuICAgICAgICAvLyB0aGUgdmFsdWUgb2YgYG5hdmlnYXRvci5sYW5ndWFnZWAuIFRoZXJlZm9yZSwgdGhlIHZhbHVlIGlzIGlnbm9yZWQgaW4gdGhpcyBicm93c2VyLlxuICAgICAgICBpZiAoIShicm93c2VyRW5naW5lID09PSBcImNocm9taXVtXCIgLyogQnJvd3NlckVuZ2luZUtpbmQuQ2hyb21pdW0gKi8gJiYgaXNDaHJvbWl1bTg2T3JOZXdlcigpKSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobi5sYW5ndWFnZXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBuLmxhbmd1YWdlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIGxhbmd1YWdlcyA9IG4ubGFuZ3VhZ2VzO1xuICAgICAgICBpZiAobGFuZ3VhZ2VzKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChsYW5ndWFnZXMuc3BsaXQoJywnKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCB7IF9fYXdhaXRlciwgX19nZW5lcmF0b3IgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IEJvdGRFcnJvciB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vdGlmaWNhdGlvblBlcm1pc3Npb25zKCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHBlcm1pc3Npb25zLCBwZXJtaXNzaW9uU3RhdHVzLCBlXzE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuTm90aWZpY2F0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTEgLyogU3RhdGUuVW5kZWZpbmVkICovLCAnd2luZG93Lk5vdGlmaWNhdGlvbiBpcyB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLnBlcm1pc3Npb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTEgLyogU3RhdGUuVW5kZWZpbmVkICovLCAnbmF2aWdhdG9yLnBlcm1pc3Npb25zIGlzIHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zID0gbmF2aWdhdG9yLnBlcm1pc3Npb25zO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBlcm1pc3Npb25zLnF1ZXJ5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0yIC8qIFN0YXRlLk5vdEZ1bmN0aW9uICovLCAnbmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5IGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFsxLCAzLCAsIDRdKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgcGVybWlzc2lvbnMucXVlcnkoeyBuYW1lOiAnbm90aWZpY2F0aW9ucycgfSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvblN0YXR1cyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHdpbmRvdy5Ob3RpZmljYXRpb24ucGVybWlzc2lvbiA9PT0gJ2RlbmllZCcgJiYgcGVybWlzc2lvblN0YXR1cy5zdGF0ZSA9PT0gJ3Byb21wdCddO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgZV8xID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0zIC8qIFN0YXRlLlVuZXhwZWN0ZWRCZWhhdmlvdXIgKi8sICdub3RpZmljYXRpb25QZXJtaXNzaW9ucyBzaWduYWwgdW5leHBlY3RlZCBiZWhhdmlvdXInKTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgeyBCb3RkRXJyb3IgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnRLZXlzKCkge1xuICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0xIC8qIFN0YXRlLlVuZGVmaW5lZCAqLywgJ2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGVOYW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0yIC8qIFN0YXRlLk5vdEZ1bmN0aW9uICovLCAnZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZU5hbWVzIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiBkb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMoKTtcbn1cbiIsImltcG9ydCB7IEJvdGRFcnJvciB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEZ1bmN0aW9uQmluZCgpIHtcbiAgICBpZiAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0yIC8qIFN0YXRlLk5vdEZ1bmN0aW9uICovLCAnRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgaXMgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYmluZC50b1N0cmluZygpO1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UHJvY2VzcygpIHtcbiAgICB2YXIgcHJvY2VzcyA9IHdpbmRvdy5wcm9jZXNzO1xuICAgIHZhciBlcnJvclByZWZpeCA9ICd3aW5kb3cucHJvY2VzcyBpcyc7XG4gICAgaWYgKHByb2Nlc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0xIC8qIFN0YXRlLlVuZGVmaW5lZCAqLywgXCJcIi5jb25jYXQoZXJyb3JQcmVmaXgsIFwiIHVuZGVmaW5lZFwiKSk7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzICYmIHR5cGVvZiBwcm9jZXNzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0zIC8qIFN0YXRlLlVuZXhwZWN0ZWRCZWhhdmlvdXIgKi8sIFwiXCIuY29uY2F0KGVycm9yUHJlZml4LCBcIiBub3QgYW4gb2JqZWN0XCIpKTtcbiAgICB9XG4gICAgcmV0dXJuIHByb2Nlc3M7XG59XG4iLCJpbXBvcnQgeyBfX3NwcmVhZEFycmF5IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBCb3RLaW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0T2JqZWN0UHJvcHMsIGluY2x1ZGVzIH0gZnJvbSAnLi4vdXRpbHMvbWlzYyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjaGVja0Rpc3RpbmN0aXZlUHJvcGVydGllcygpIHtcbiAgICB2YXIgX2E7XG4gICAgLy8gVGhlIG9yZGVyIGluIHRoZSBmb2xsb3dpbmcgbGlzdCBtYXR0ZXJzLCBiZWNhdXNlIHNwZWNpZmljIHR5cGVzIG9mIGJvdHMgY29tZSBmaXJzdCwgZm9sbG93ZWQgYnkgYXV0b21hdGlvbiB0ZWNobm9sb2dpZXMuXG4gICAgdmFyIGRpc3RpbmN0aXZlUHJvcHNMaXN0ID0gKF9hID0ge30sXG4gICAgICAgIF9hW0JvdEtpbmQuQXdlc29taXVtXSA9IHtcbiAgICAgICAgICAgIHdpbmRvdzogWydhd2Vzb21pdW0nXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5DZWZdID0ge1xuICAgICAgICAgICAgd2luZG93OiBbJ1J1blBlcmZUZXN0J10sXG4gICAgICAgIH0sXG4gICAgICAgIF9hW0JvdEtpbmQuQ2VmU2hhcnBdID0ge1xuICAgICAgICAgICAgd2luZG93OiBbJ0NlZlNoYXJwJ10sXG4gICAgICAgIH0sXG4gICAgICAgIF9hW0JvdEtpbmQuQ29hY2hKU10gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnZW1pdCddLFxuICAgICAgICB9LFxuICAgICAgICBfYVtCb3RLaW5kLkZNaW5lcl0gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnZm1nZXRfdGFyZ2V0cyddLFxuICAgICAgICB9LFxuICAgICAgICBfYVtCb3RLaW5kLkdlYl0gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnZ2ViJ10sXG4gICAgICAgIH0sXG4gICAgICAgIF9hW0JvdEtpbmQuTmlnaHRtYXJlSlNdID0ge1xuICAgICAgICAgICAgd2luZG93OiBbJ19fbmlnaHRtYXJlJywgJ25pZ2h0bWFyZSddLFxuICAgICAgICB9LFxuICAgICAgICBfYVtCb3RLaW5kLlBoYW50b21hc10gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnX19waGFudG9tYXMnXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5QaGFudG9tSlNdID0ge1xuICAgICAgICAgICAgd2luZG93OiBbJ2NhbGxQaGFudG9tJywgJ19waGFudG9tJ10sXG4gICAgICAgIH0sXG4gICAgICAgIF9hW0JvdEtpbmQuUmhpbm9dID0ge1xuICAgICAgICAgICAgd2luZG93OiBbJ3NwYXduJ10sXG4gICAgICAgIH0sXG4gICAgICAgIF9hW0JvdEtpbmQuU2VsZW5pdW1dID0ge1xuICAgICAgICAgICAgd2luZG93OiBbJ19TZWxlbml1bV9JREVfUmVjb3JkZXInLCAnX3NlbGVuaXVtJywgJ2NhbGxlZFNlbGVuaXVtJywgL14oW2Etel0pezN9Xy4qXyhBcnJheXxQcm9taXNlfFN5bWJvbCkkL10sXG4gICAgICAgICAgICBkb2N1bWVudDogWydfX3NlbGVuaXVtX2V2YWx1YXRlJywgJ3NlbGVuaXVtLWV2YWx1YXRlJywgJ19fc2VsZW5pdW1fdW53cmFwcGVkJ10sXG4gICAgICAgIH0sXG4gICAgICAgIF9hW0JvdEtpbmQuV2ViRHJpdmVySU9dID0ge1xuICAgICAgICAgICAgd2luZG93OiBbJ3dkaW9FbGVjdHJvbiddLFxuICAgICAgICB9LFxuICAgICAgICBfYVtCb3RLaW5kLldlYkRyaXZlcl0gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFtcbiAgICAgICAgICAgICAgICAnd2ViZHJpdmVyJyxcbiAgICAgICAgICAgICAgICAnX193ZWJkcml2ZXJGdW5jJyxcbiAgICAgICAgICAgICAgICAnX19sYXN0V2F0aXJBbGVydCcsXG4gICAgICAgICAgICAgICAgJ19fbGFzdFdhdGlyQ29uZmlybScsXG4gICAgICAgICAgICAgICAgJ19fbGFzdFdhdGlyUHJvbXB0JyxcbiAgICAgICAgICAgICAgICAnX1dFQkRSSVZFUl9FTEVNX0NBQ0hFJyxcbiAgICAgICAgICAgICAgICAnQ2hyb21lRHJpdmVydycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZG9jdW1lbnQ6IFtcbiAgICAgICAgICAgICAgICAnX193ZWJkcml2ZXJfc2NyaXB0X2ZuJyxcbiAgICAgICAgICAgICAgICAnX19kcml2ZXJfZXZhbHVhdGUnLFxuICAgICAgICAgICAgICAgICdfX3dlYmRyaXZlcl9ldmFsdWF0ZScsXG4gICAgICAgICAgICAgICAgJ19fZnhkcml2ZXJfZXZhbHVhdGUnLFxuICAgICAgICAgICAgICAgICdfX2RyaXZlcl91bndyYXBwZWQnLFxuICAgICAgICAgICAgICAgICdfX3dlYmRyaXZlcl91bndyYXBwZWQnLFxuICAgICAgICAgICAgICAgICdfX2Z4ZHJpdmVyX3Vud3JhcHBlZCcsXG4gICAgICAgICAgICAgICAgJ19fd2ViZHJpdmVyX3NjcmlwdF9mbicsXG4gICAgICAgICAgICAgICAgJ19fd2ViZHJpdmVyX3NjcmlwdF9mdW5jJyxcbiAgICAgICAgICAgICAgICAnX193ZWJkcml2ZXJfc2NyaXB0X2Z1bmN0aW9uJyxcbiAgICAgICAgICAgICAgICAnJGNkY19hc2RqZmxhc3V0b3BmaHZjWkxtY2YnLFxuICAgICAgICAgICAgICAgICckY2RjX2FzZGpmbGFzdXRvcGZodmNaTG1jZmxfJyxcbiAgICAgICAgICAgICAgICAnJGNocm9tZV9hc3luY1NjcmlwdEluZm8nLFxuICAgICAgICAgICAgICAgICdfXyR3ZWJkcml2ZXJBc3luY0V4ZWN1dG9yJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIF9hW0JvdEtpbmQuSGVhZGxlc3NDaHJvbWVdID0ge1xuICAgICAgICAgICAgd2luZG93OiBbJ2RvbUF1dG9tYXRpb24nLCAnZG9tQXV0b21hdGlvbkNvbnRyb2xsZXInXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2EpO1xuICAgIHZhciBib3ROYW1lO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgd2luZG93UHJvcHMgPSBnZXRPYmplY3RQcm9wcyh3aW5kb3cpO1xuICAgIHZhciBkb2N1bWVudFByb3BzID0gW107XG4gICAgaWYgKHdpbmRvdy5kb2N1bWVudCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBkb2N1bWVudFByb3BzID0gZ2V0T2JqZWN0UHJvcHMod2luZG93LmRvY3VtZW50KTtcbiAgICBmb3IgKGJvdE5hbWUgaW4gZGlzdGluY3RpdmVQcm9wc0xpc3QpIHtcbiAgICAgICAgdmFyIHByb3BzID0gZGlzdGluY3RpdmVQcm9wc0xpc3RbYm90TmFtZV07XG4gICAgICAgIGlmIChwcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YXIgd2luZG93Q29udGFpbnMgPSBwcm9wcy53aW5kb3cgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogaW5jbHVkZXMuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFt3aW5kb3dQcm9wc10sIHByb3BzLndpbmRvdywgZmFsc2UpKTtcbiAgICAgICAgICAgIHZhciBkb2N1bWVudENvbnRhaW5zID0gcHJvcHMuZG9jdW1lbnQgPT09IHVuZGVmaW5lZCB8fCAhZG9jdW1lbnRQcm9wcy5sZW5ndGggPyBmYWxzZSA6IGluY2x1ZGVzLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbZG9jdW1lbnRQcm9wc10sIHByb3BzLmRvY3VtZW50LCBmYWxzZSkpO1xuICAgICAgICAgICAgcmVzdWx0W2JvdE5hbWVdID0gd2luZG93Q29udGFpbnMgfHwgZG9jdW1lbnRDb250YWlucztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IHsgX19hd2FpdGVyLCBfX2dlbmVyYXRvciB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgY29sbGVjdCwgZGV0ZWN0IH0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IHsgZGV0ZWN0b3JzIH0gZnJvbSAnLi9kZXRlY3RvcnMnO1xuaW1wb3J0IHsgc291cmNlcyB9IGZyb20gJy4vc291cmNlcyc7XG4vKipcbiAqIENsYXNzIHJlcHJlc2VudGluZyBhIGJvdCBkZXRlY3Rvci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBpbXBsZW1lbnRzIHtCb3REZXRlY3RvckludGVyZmFjZX1cbiAqL1xudmFyIEJvdERldGVjdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEJvdERldGVjdG9yKCkge1xuICAgICAgICB0aGlzLmNvbXBvbmVudHMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZGV0ZWN0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgQm90RGV0ZWN0b3IucHJvdG90eXBlLmdldENvbXBvbmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudHM7XG4gICAgfTtcbiAgICBCb3REZXRlY3Rvci5wcm90b3R5cGUuZ2V0RGV0ZWN0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGV0ZWN0aW9ucztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBpbmhlcml0ZG9jXG4gICAgICovXG4gICAgQm90RGV0ZWN0b3IucHJvdG90eXBlLmRldGVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCb3REZXRlY3Rvci5kZXRlY3QgY2FuJ3QgYmUgY2FsbGVkIGJlZm9yZSBCb3REZXRlY3Rvci5jb2xsZWN0XCIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfYSA9IGRldGVjdCh0aGlzLmNvbXBvbmVudHMsIGRldGVjdG9ycyksIGRldGVjdGlvbnMgPSBfYVswXSwgZmluYWxEZXRlY3Rpb24gPSBfYVsxXTtcbiAgICAgICAgdGhpcy5kZXRlY3Rpb25zID0gZGV0ZWN0aW9ucztcbiAgICAgICAgcmV0dXJuIGZpbmFsRGV0ZWN0aW9uO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQGluaGVyaXRkb2NcbiAgICAgKi9cbiAgICBCb3REZXRlY3Rvci5wcm90b3R5cGUuY29sbGVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2EgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgY29sbGVjdChzb3VyY2VzKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLmNvbXBvbmVudHMgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgdGhpcy5jb21wb25lbnRzXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gQm90RGV0ZWN0b3I7XG59KCkpO1xuZXhwb3J0IGRlZmF1bHQgQm90RGV0ZWN0b3I7XG4iLCJpbXBvcnQgeyBfX2F3YWl0ZXIsIF9fZ2VuZXJhdG9yIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vcGFja2FnZS5qc29uJztcbmltcG9ydCBCb3REZXRlY3RvciBmcm9tICcuL2RldGVjdG9yJztcbmltcG9ydCB7IHNvdXJjZXMgfSBmcm9tICcuL3NvdXJjZXMnO1xuaW1wb3J0IHsgZGV0ZWN0b3JzIH0gZnJvbSAnLi9kZXRlY3RvcnMnO1xuaW1wb3J0IHsgQm90ZEVycm9yLCBCb3RLaW5kIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBjb2xsZWN0LCBkZXRlY3QgfSBmcm9tICcuL2FwaSc7XG4vKipcbiAqIFNlbmRzIGFuIHVucGVyc29uYWxpemVkIEFKQVggcmVxdWVzdCB0byBjb2xsZWN0IGluc3RhbGxhdGlvbiBzdGF0aXN0aWNzXG4gKi9cbmZ1bmN0aW9uIG1vbml0b3IoKSB7XG4gICAgLy8gVGhlIEZpbmdlcnByaW50SlMgQ0ROIChodHRwczovL2dpdGh1Yi5jb20vZmluZ2VycHJpbnRqcy9jZG4pIHJlcGxhY2VzIGB3aW5kb3cuX19mcGpzX2RfbWAgd2l0aCBgdHJ1ZWBcbiAgICBpZiAod2luZG93Ll9fZnBqc19kX20gfHwgTWF0aC5yYW5kb20oKSA+PSAwLjAwMSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHJlcXVlc3Qub3BlbignZ2V0JywgXCJodHRwczovL20xLm9wZW5mcGNkbi5pby9ib3RkL3ZcIi5jb25jYXQodmVyc2lvbiwgXCIvbnBtLW1vbml0b3JpbmdcIiksIHRydWUpO1xuICAgICAgICByZXF1ZXN0LnNlbmQoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IgaXMgb2sgaGVyZSBiZWNhdXNlIGl0J3MgYW4gdW5leHBlY3RlZCBlcnJvciBoYW5kbGVyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBsb2FkKF9hKSB7XG4gICAgdmFyIF9iID0gX2EgPT09IHZvaWQgMCA/IHt9IDogX2EsIF9jID0gX2IubW9uaXRvcmluZywgbW9uaXRvcmluZyA9IF9jID09PSB2b2lkIDAgPyB0cnVlIDogX2M7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGV0ZWN0b3I7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2QubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGlmIChtb25pdG9yaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb25pdG9yKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGV0ZWN0b3IgPSBuZXcgQm90RGV0ZWN0b3IoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgZGV0ZWN0b3IuY29sbGVjdCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIF9kLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGRldGVjdG9yXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCB7IGxvYWQ6IGxvYWQgfTtcbi8vIFRoZSBleHBvcnRzIGJlbG93IGFyZSBmb3IgcHJpdmF0ZSB1c2FnZS4gVGhleSBtYXkgY2hhbmdlIHVuZXhwZWN0ZWRseS4gVXNlIHRoZW0gYXQgeW91ciBvd24gcmlzay5cbi8qKiBOb3QgZG9jdW1lbnRlZCwgb3V0IG9mIFNlbWFudGljIFZlcnNpb25pbmcsIHVzYWdlIGlzIGF0IHlvdXIgb3duIHJpc2sgKi9cbmV4cG9ydCB7IHNvdXJjZXMsIGRldGVjdG9ycywgY29sbGVjdCwgZGV0ZWN0LCBCb3RkRXJyb3IsIEJvdEtpbmQsIH07XG4iLCJpbXBvcnQgeyBVQVBhcnNlciB9IGZyb20gJ3VhLXBhcnNlci1qcyc7XG4vKlxuICogU29tZXRpbWVzIHRlc3RzIG5lZWQgdG8ga25vdyB3aGF0IGJyb3dzZXIgdGhleSBydW4gaW4gdG8gbWFrZSBwcm9wZXIgYXNzZXJ0aW9ucy5cbiAqIEthcm1hIGRvZXNuJ3QgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uLlxuICogVGhlIGJyb3dzZXIgZGV0ZWN0IGZ1bmN0aW9ucyBpbiB0aGUgYHNyY2AgZGlyZWN0b3J5IGNhbid0IGJlIHVzZWQgYmVjYXVzZSB0aGV5IGFyZSBvYmplY3RzIG9mIHRlc3RpbmcuXG4gKiBUaGVyZWZvcmUgYSBwb3B1bGFyIHRoaXJkIHBhcnR5IGxpYnJhcnkgaXMgdXNlZCB0byBkZXRlY3QgYnJvd3Nlci5cbiAqIFRoZSBsaWJyYXJ5IGlzbid0IHVzZWQgaW4gdGhlIG1haW4gY29kZSBiZWNhdXNlIHNvbWUgdmlzaXRvcnMgdGFtcGVyIHVzZXIgYWdlbnQgd2hpbGUgdGhlIHRlc3QgZW52aXJvbm1lbnRzIGRvbid0LlxuICpcbiAqIFdlIHNob3VsZCBmaW5kIGEgd2F5IHRvIHBhc3MgYnJvd3NlciBzZXR0aW5ncyBmcm9tIHRoZSBLYXJtYSBjb25maWd1cmF0aW9uIHRvIHRoZSB0ZXN0cyxcbiAqIG90aGVyd2lzZSB3ZSBjYW4ndCBkaXN0aW5ndWlzaCBpbmNvZ25pdG8gYnJvd3NlcnMgZnJvbSByZWd1bGFyIGJyb3dzZXJzLCBCcmF2ZSBmcm9tIENocm9tZSwgZXRjLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDaHJvbWl1bSgpIHtcbiAgICByZXR1cm4gbmV3IFVBUGFyc2VyKCkuZ2V0RW5naW5lKCkubmFtZSA9PT0gJ0JsaW5rJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0hlYWRsZXNzQ2hyb21lKCkge1xuICAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50LmluY2x1ZGVzKCdIZWFkbGVzc0Nocm9tZScpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzR2Vja28oKSB7XG4gICAgcmV0dXJuIG5ldyBVQVBhcnNlcigpLmdldEVuZ2luZSgpLm5hbWUgPT09ICdHZWNrbyc7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNXZWJLaXQoKSB7XG4gICAgcmV0dXJuIG5ldyBVQVBhcnNlcigpLmdldEVuZ2luZSgpLm5hbWUgPT09ICdXZWJLaXQnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTW9iaWxlKCkge1xuICAgIHJldHVybiBuZXcgVUFQYXJzZXIoKS5nZXREZXZpY2UoKS50eXBlID09PSAnbW9iaWxlJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc01hY09TKCkge1xuICAgIHJldHVybiBuZXcgVUFQYXJzZXIoKS5nZXRPUygpLm5hbWUgPT09ICdNYWMgT1MnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE9zTWFqb3JWZXJzaW9uKCkge1xuICAgIHZhciB2ZXJzaW9uID0gbmV3IFVBUGFyc2VyKCkuZ2V0T1MoKS52ZXJzaW9uO1xuICAgIGlmICh2ZXJzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KHZlcnNpb24uc3BsaXQoJy4nKVswXSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QnJvd3Nlck1ham9yVmVyc2lvbigpIHtcbiAgICB2YXIgdmVyc2lvbiA9IG5ldyBVQVBhcnNlcigpLmdldEJyb3dzZXIoKS52ZXJzaW9uO1xuICAgIGlmICh2ZXJzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KHZlcnNpb24uc3BsaXQoJy4nKVswXSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QnJvd3NlclZlcnNpb24oKSB7XG4gICAgdmFyIHZlcnNpb24gPSBuZXcgVUFQYXJzZXIoKS5nZXRCcm93c2VyKCkudmVyc2lvbjtcbiAgICBpZiAodmVyc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIG1ham9yOiBwYXJzZUludCh2ZXJzaW9uLnNwbGl0KCcuJylbMF0pLFxuICAgICAgICBtaW5vcjogcGFyc2VJbnQodmVyc2lvbi5zcGxpdCgnLicpWzFdKSxcbiAgICB9O1xufVxuIiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xuXG4gICAgICBvcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xuICAgIFxub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiaW1wb3J0IHsgX19hd2FpdGVyLCBfX2dlbmVyYXRvciB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgbG9hZCB9IGZyb20gJy4uL3NyYyc7XG5pbXBvcnQgeyBnZXRCcm93c2VyRW5naW5lS2luZCwgZ2V0QnJvd3NlcktpbmQsIGdldERvY3VtZW50Rm9jdXMsIGdldE1vekFwcGVhcmFuY2VTdXBwb3J0LCBpc0FuZHJvaWQsIGlzRGVza3RvcFdlYktpdCwgaXNJUGFkLCB9IGZyb20gJy4uL3NyYy91dGlscy9icm93c2VyJztcbmltcG9ydCB7IGdldEJyb3dzZXJWZXJzaW9uIH0gZnJvbSAnLi4vdGVzdHMvdXRpbHMnO1xuaW1wb3J0ICcuL3N0eWxlLmNzcyc7XG52YXIgX3Jlc3VsdCA9IHVuZGVmaW5lZDtcbnZhciBydW5EZXRlY3Rpb24gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB0MCwgaW5zdGFuY2UsIGNvbGxlY3Rpb25UaW1lLCBkZXRlY3Rpb25SZXN1bHQsIGRldGVjdGlvblRpbWUsIGNvbXBvbmVudHMsIGRldGVjdGlvbnMsIGRlYnVnRGF0YSwgZV8xO1xuICAgIHZhciBfYSwgX2I7XG4gICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xuICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgX2MudHJ5cy5wdXNoKFswLCAyLCAsIDNdKTtcbiAgICAgICAgICAgICAgICB0MCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGxvYWQoKV07XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBfYy5zZW50KCk7XG4gICAgICAgICAgICAgICAgY29sbGVjdGlvblRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHQwO1xuICAgICAgICAgICAgICAgIGRldGVjdGlvblJlc3VsdCA9IGluc3RhbmNlLmRldGVjdCgpO1xuICAgICAgICAgICAgICAgIGRldGVjdGlvblRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHQwO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMgPSAoX2EgPSBpbnN0YW5jZS5nZXRDb21wb25lbnRzKCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9O1xuICAgICAgICAgICAgICAgIGRldGVjdGlvbnMgPSAoX2IgPSBpbnN0YW5jZS5nZXREZXRlY3Rpb25zKCkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHt9O1xuICAgICAgICAgICAgICAgIGRlYnVnRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgYnJvd3NlckVuZ2luZUtpbmQ6IGdldEJyb3dzZXJFbmdpbmVLaW5kKCksXG4gICAgICAgICAgICAgICAgICAgIGJyb3dzZXJLaW5kOiBnZXRCcm93c2VyS2luZCgpLFxuICAgICAgICAgICAgICAgICAgICBicm93c2VyVmVyc2lvbjogZ2V0QnJvd3NlclZlcnNpb24oKSxcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRGb2N1czogZ2V0RG9jdW1lbnRGb2N1cygpLFxuICAgICAgICAgICAgICAgICAgICBtb3pBcHBlYXJhbmNlU3VwcG9ydDogZ2V0TW96QXBwZWFyYW5jZVN1cHBvcnQoKSxcbiAgICAgICAgICAgICAgICAgICAgaXNBbmRyb2lkOiBpc0FuZHJvaWQoKSxcbiAgICAgICAgICAgICAgICAgICAgaXNEZXNrdG9wV2ViS2l0OiBpc0Rlc2t0b3BXZWJLaXQoKSxcbiAgICAgICAgICAgICAgICAgICAgaXNJUGFkOiBpc0lQYWQoKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0Vycm9yOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25UaW1lOiBjb2xsZWN0aW9uVGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdGlvblRpbWU6IGRldGVjdGlvblRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRlY3Rpb25SZXN1bHQ6IGRldGVjdGlvblJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdGVkQm90OiAoZGV0ZWN0aW9uUmVzdWx0ID09PSBudWxsIHx8IGRldGVjdGlvblJlc3VsdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGV0ZWN0aW9uUmVzdWx0LmJvdCkgPyBkZXRlY3Rpb25SZXN1bHQuYm90S2luZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3RlZERhdGE6IGNvbXBvbmVudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRlY3RvcnNSZXN1bHRzOiBkZXRlY3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdEYXRhOiBkZWJ1Z0RhdGEsXG4gICAgICAgICAgICAgICAgICAgIH1dO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIGVfMSA9IF9jLnNlbnQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgeyBpc0Vycm9yOiB0cnVlLCBlcnJvcjogZV8xIH1dO1xuICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgIH1cbiAgICB9KTtcbn0pOyB9O1xudmFyIHJlbmRlckRldGVjdGlvblJlc3VsdCA9IGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICB2YXIgcmVzdWx0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0Jyk7XG4gICAgdmFyIHJlc3VsdFRleHRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQtdGV4dCcpO1xuICAgIHZhciBjb2xsZWN0aW9uVGltZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbGxlY3Rpb24tdGltZScpO1xuICAgIHZhciBkZXRlY3Rpb25UaW1lRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGV0ZWN0aW9uLXRpbWUnKTtcbiAgICB2YXIgZGV0ZWN0aW9uUmVzdWx0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGV0ZWN0aW9uLXJlc3VsdCcpO1xuICAgIHZhciBkZXRlY3RvcnNFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZXRlY3RvcnMnKTtcbiAgICB2YXIgZGVidWdEYXRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RlYnVnLWRhdGEnKTtcbiAgICB2YXIgY29sbGVjdGVkRGF0YSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb2xsZWN0ZWQtZGF0YScpO1xuICAgIHZhciBlcnJvckNvbnRhaW5lckVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Vycm9yLWNvbnRhaW5lcicpO1xuICAgIHZhciBlcnJvck1lc3NhZ2VFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlcnJvci1tZXNzYWdlJyk7XG4gICAgcmVzdWx0RWwuY2xhc3NMaXN0LnJlbW92ZSgncmVzdWx0LWRldGVjdGVkJywgJ3Jlc3VsdC1lcnJvcicpO1xuICAgIGlmIChyZXN1bHQuaXNFcnJvcikge1xuICAgICAgICByZXN1bHRUZXh0RWwuaW5uZXJIVE1MID0gJ0FuIGVycm9yIG9jY3VyZWQnO1xuICAgICAgICByZXN1bHRFbC5jbGFzc0xpc3QuYWRkKCdyZXN1bHQtZXJyb3InKTtcbiAgICAgICAgZXJyb3JDb250YWluZXJFbC5jbGFzc0xpc3QuYWRkKCdlcnJvci1jb250YWluZXItdmlzaWJsZScpO1xuICAgICAgICBlcnJvck1lc3NhZ2VFbC50ZXh0Q29udGVudCA9IHJlc3VsdC5lcnJvci5tZXNzYWdlO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGVycm9yQ29udGFpbmVyRWwuY2xhc3NMaXN0LnJlbW92ZSgnZXJyb3ItY29udGFpbmVyLXZpc2libGUnKTtcbiAgICBpZiAocmVzdWx0LmRldGVjdGVkQm90ICE9IG51bGwpIHtcbiAgICAgICAgcmVzdWx0VGV4dEVsLmlubmVySFRNTCA9IFwiXCIuY29uY2F0KHJlc3VsdC5kZXRlY3RlZEJvdCwgXCIgZGV0ZWN0ZWQuXCIpO1xuICAgICAgICByZXN1bHRFbC5jbGFzc0xpc3QuYWRkKCdyZXN1bHQtZGV0ZWN0ZWQnKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdFRleHRFbC5pbm5lckhUTUwgPSAnWW91IGFyZSBub3QgYSBib3QuJztcbiAgICB9XG4gICAgY29sbGVjdGlvblRpbWVFbC50ZXh0Q29udGVudCA9IFwiXCIuY29uY2F0KHJlc3VsdC5jb2xsZWN0aW9uVGltZS50b0ZpeGVkKDIpLCBcIm1zXCIpO1xuICAgIGRldGVjdGlvblRpbWVFbC50ZXh0Q29udGVudCA9IFwiXCIuY29uY2F0KHJlc3VsdC5kZXRlY3Rpb25UaW1lLnRvRml4ZWQoMiksIFwibXNcIik7XG4gICAgZGV0ZWN0aW9uUmVzdWx0RWwudGV4dENvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShyZXN1bHQuZGV0ZWN0aW9uUmVzdWx0LCBudWxsLCA0KTtcbiAgICBkZXRlY3RvcnNFbC50ZXh0Q29udGVudCA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdC5kZXRlY3RvcnNSZXN1bHRzLCBudWxsLCA0KTtcbiAgICBkZWJ1Z0RhdGEudGV4dENvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShyZXN1bHQuZGVidWdEYXRhLCBudWxsLCA0KTtcbiAgICBjb2xsZWN0ZWREYXRhLnRleHRDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkocmVzdWx0LmNvbGxlY3RlZERhdGEsIG51bGwsIDQpO1xufTtcbnZhciBydW5BbmRSZW5kZXIgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQ7XG4gICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIHJ1bkRldGVjdGlvbigpXTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgX3Jlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICByZW5kZXJEZXRlY3Rpb25SZXN1bHQocmVzdWx0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgIH1cbiAgICB9KTtcbn0pOyB9O1xud2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZGV0ZWN0QnV0dG9uRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGV0ZWN0LWJ1dHRvbicpO1xuICAgIHZhciBjb3B5TG9nc0J1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb3B5LWxvZ3MtYnV0dG9uJyk7XG4gICAgZGV0ZWN0QnV0dG9uRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJ1bkFuZFJlbmRlcigpO1xuICAgIH0pO1xuICAgIGNvcHlMb2dzQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChKU09OLnN0cmluZ2lmeShfcmVzdWx0KSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBhbGVydCgnQm90RCBsb2dzIGNvcGllZCB0byBjbGlwYm9hcmQnKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcnVuQW5kUmVuZGVyKCk7XG59O1xuIl0sIm5hbWVzIjpbIl9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8wX19fIiwiVVJMIiwiX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzFfX18iLCJfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMl9fXyIsIl9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8zX19fIiwiX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzRfX18iLCJfX19DU1NfTE9BREVSX0VYUE9SVF9fXyIsIl9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzBfX18iLCJfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fIiwiX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMl9fXyIsIl9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzNfX18iLCJfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF80X19fIiwicHVzaCIsIm1vZHVsZSIsImlkIiwiZXhwb3J0cyIsImNzc1dpdGhNYXBwaW5nVG9TdHJpbmciLCJsaXN0IiwidG9TdHJpbmciLCJ0aGlzIiwibWFwIiwiaXRlbSIsImNvbnRlbnQiLCJuZWVkTGF5ZXIiLCJjb25jYXQiLCJsZW5ndGgiLCJqb2luIiwiaSIsIm1vZHVsZXMiLCJtZWRpYSIsImRlZHVwZSIsInN1cHBvcnRzIiwibGF5ZXIiLCJ1bmRlZmluZWQiLCJhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzIiwiayIsIl9rIiwidXJsIiwib3B0aW9ucyIsIlN0cmluZyIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidGVzdCIsInNsaWNlIiwiaGFzaCIsIm5lZWRRdW90ZXMiLCJyZXBsYWNlIiwiY3NzTWFwcGluZyIsImJ0b2EiLCJiYXNlNjQiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkYXRhIiwic291cmNlTWFwcGluZyIsInNvdXJjZVVSTHMiLCJzb3VyY2VzIiwic291cmNlIiwic291cmNlUm9vdCIsInN0eWxlc0luRE9NIiwiZ2V0SW5kZXhCeUlkZW50aWZpZXIiLCJpZGVudGlmaWVyIiwicmVzdWx0IiwibW9kdWxlc1RvRG9tIiwiaWRDb3VudE1hcCIsImlkZW50aWZpZXJzIiwiYmFzZSIsImNvdW50IiwiaW5kZXhCeUlkZW50aWZpZXIiLCJvYmoiLCJjc3MiLCJzb3VyY2VNYXAiLCJyZWZlcmVuY2VzIiwidXBkYXRlciIsImFkZEVsZW1lbnRTdHlsZSIsImJ5SW5kZXgiLCJzcGxpY2UiLCJhcGkiLCJkb21BUEkiLCJ1cGRhdGUiLCJuZXdPYmoiLCJyZW1vdmUiLCJsYXN0SWRlbnRpZmllcnMiLCJuZXdMaXN0IiwiaW5kZXgiLCJuZXdMYXN0SWRlbnRpZmllcnMiLCJfaSIsIl9pbmRleCIsIm1lbW8iLCJpbnNlcnQiLCJzdHlsZSIsInRhcmdldCIsInN0eWxlVGFyZ2V0IiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwid2luZG93IiwiSFRNTElGcmFtZUVsZW1lbnQiLCJjb250ZW50RG9jdW1lbnQiLCJoZWFkIiwiZSIsImdldFRhcmdldCIsIkVycm9yIiwiYXBwZW5kQ2hpbGQiLCJlbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZXMiLCJhdHRyaWJ1dGVzIiwic3R5bGVFbGVtZW50Iiwibm9uY2UiLCJzZXRBdHRyaWJ1dGUiLCJpbnNlcnRTdHlsZUVsZW1lbnQiLCJzdHlsZVRhZ1RyYW5zZm9ybSIsImFwcGx5IiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwicmVtb3ZlU3R5bGVFbGVtZW50Iiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJmaXJzdENoaWxkIiwiY3JlYXRlVGV4dE5vZGUiLCJGVU5DX1RZUEUiLCJVTkRFRl9UWVBFIiwiT0JKX1RZUEUiLCJTVFJfVFlQRSIsIk1BSk9SIiwiTU9ERUwiLCJOQU1FIiwiVFlQRSIsIlZFTkRPUiIsIlZFUlNJT04iLCJBUkNISVRFQ1RVUkUiLCJDT05TT0xFIiwiTU9CSUxFIiwiVEFCTEVUIiwiU01BUlRUViIsIldFQVJBQkxFIiwiRU1CRURERUQiLCJBTUFaT04iLCJBUFBMRSIsIkFTVVMiLCJCTEFDS0JFUlJZIiwiQlJPV1NFUiIsIkNIUk9NRSIsIkZJUkVGT1giLCJHT09HTEUiLCJIVUFXRUkiLCJMRyIsIk1JQ1JPU09GVCIsIk1PVE9ST0xBIiwiT1BFUkEiLCJTQU1TVU5HIiwiU0hBUlAiLCJTT05ZIiwiWElBT01JIiwiWkVCUkEiLCJGQUNFQk9PSyIsIkNIUk9NSVVNX09TIiwiTUFDX09TIiwiZW51bWVyaXplIiwiYXJyIiwiZW51bXMiLCJ0b1VwcGVyQ2FzZSIsImhhcyIsInN0cjEiLCJzdHIyIiwibG93ZXJpemUiLCJpbmRleE9mIiwic3RyIiwidG9Mb3dlckNhc2UiLCJ0cmltIiwibGVuIiwic3Vic3RyaW5nIiwicmd4TWFwcGVyIiwidWEiLCJhcnJheXMiLCJqIiwicCIsInEiLCJtYXRjaGVzIiwibWF0Y2giLCJyZWdleCIsInByb3BzIiwiZXhlYyIsImNhbGwiLCJzdHJNYXBwZXIiLCJ3aW5kb3dzVmVyc2lvbk1hcCIsInJlZ2V4ZXMiLCJicm93c2VyIiwiY3B1IiwiZGV2aWNlIiwiZW5naW5lIiwiRURHRSIsIm9zIiwiVUFQYXJzZXIiLCJleHRlbnNpb25zIiwiZ2V0UmVzdWx0IiwiX25hdmlnYXRvciIsIm5hdmlnYXRvciIsIl91YSIsInVzZXJBZ2VudCIsIl91YWNoIiwidXNlckFnZW50RGF0YSIsIl9yZ3htYXAiLCJtZXJnZWRSZWdleGVzIiwiZXh0ZW5kIiwiX2lzU2VsZk5hdiIsImdldEJyb3dzZXIiLCJ2ZXJzaW9uIiwiX2Jyb3dzZXIiLCJzcGxpdCIsImJyYXZlIiwiaXNCcmF2ZSIsImdldENQVSIsIl9jcHUiLCJnZXREZXZpY2UiLCJfZGV2aWNlIiwibW9iaWxlIiwic3RhbmRhbG9uZSIsIm1heFRvdWNoUG9pbnRzIiwiZ2V0RW5naW5lIiwiX2VuZ2luZSIsImdldE9TIiwiX29zIiwicGxhdGZvcm0iLCJnZXRVQSIsInNldFVBIiwiQ1BVIiwiREVWSUNFIiwiRU5HSU5FIiwiT1MiLCIkIiwialF1ZXJ5IiwiWmVwdG8iLCJwYXJzZXIiLCJnZXQiLCJzZXQiLCJwcm9wIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIm0iLCJhbWRPIiwibiIsImdldHRlciIsImQiLCJhIiwiZGVmaW5pdGlvbiIsImtleSIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnIiwiZ2xvYmFsVGhpcyIsIkZ1bmN0aW9uIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJzY3JpcHRVcmwiLCJpbXBvcnRTY3JpcHRzIiwibG9jYXRpb24iLCJjdXJyZW50U2NyaXB0IiwidGFnTmFtZSIsInNyYyIsInNjcmlwdHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImIiLCJiYXNlVVJJIiwic2VsZiIsImhyZWYiLCJuYyIsImV4dGVuZFN0YXRpY3MiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIkFycmF5IiwiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJ2YWx1ZSIsInN0ZXAiLCJuZXh0IiwicmVqZWN0ZWQiLCJkb25lIiwidGhlbiIsIl9fZ2VuZXJhdG9yIiwiYm9keSIsImYiLCJ5IiwidCIsIl8iLCJsYWJlbCIsInNlbnQiLCJ0cnlzIiwib3BzIiwidmVyYiIsIlN5bWJvbCIsIml0ZXJhdG9yIiwidiIsIm9wIiwiVHlwZUVycm9yIiwicG9wIiwiX19zcHJlYWRBcnJheSIsInRvIiwiZnJvbSIsInBhY2siLCJhcmd1bWVudHMiLCJhciIsImwiLCJjcmVhdGUiLCJCb3RLaW5kIiwiQm90ZEVycm9yIiwiX3N1cGVyIiwic3RhdGUiLCJtZXNzYWdlIiwiX3RoaXMiLCJuYW1lIiwiX18iLCJjb25zdHJ1Y3RvciIsIl9fZXh0ZW5kcyIsImNvbGxlY3QiLCJjb21wb25lbnRzIiwic291cmNlc0tleXMiLCJfYSIsImtleXMiLCJhbGwiLCJzb3VyY2VLZXkiLCJyZXMiLCJfYiIsImVycm9yXzEiLCJfYyIsIl9kIiwiZXJyb3IiLCJhcnJheUluY2x1ZGVzIiwic3RySW5jbHVkZXMiLCJnZXRPYmplY3RQcm9wcyIsImdldE93blByb3BlcnR5TmFtZXMiLCJpbmNsdWRlcyIsIl9sb29wXzEiLCJhcnJheSIsImNhbGxiYWNrIiwiZmluZCIsImFycmF5RmluZCIsImtleXNfMSIsInN0YXRlXzEiLCJjb3VudFRydXRoeSIsInZhbHVlcyIsInJlZHVjZSIsInN1bSIsImRldGVjdG9ycyIsImRldGVjdEFwcFZlcnNpb24iLCJhcHBWZXJzaW9uIiwiZGV0ZWN0RG9jdW1lbnRBdHRyaWJ1dGVzIiwiZG9jdW1lbnRFbGVtZW50S2V5cyIsImRldGVjdEVycm9yVHJhY2UiLCJlcnJvclRyYWNlIiwiZGV0ZWN0RXZhbExlbmd0aEluY29uc2lzdGVuY3kiLCJldmFsTGVuZ3RoIiwiYnJvd3NlcktpbmQiLCJicm93c2VyRW5naW5lS2luZCIsImRldGVjdEZ1bmN0aW9uQmluZCIsImZ1bmN0aW9uQmluZCIsImRldGVjdExhbmd1YWdlc0xlbmd0aEluY29uc2lzdGVuY3kiLCJsYW5ndWFnZXMiLCJkZXRlY3ROb3RpZmljYXRpb25QZXJtaXNzaW9ucyIsIm5vdGlmaWNhdGlvblBlcm1pc3Npb25zIiwiZGV0ZWN0UGx1Z2luc0FycmF5IiwicGx1Z2luc0FycmF5IiwiZGV0ZWN0UGx1Z2luc0xlbmd0aEluY29uc2lzdGVuY3kiLCJwbHVnaW5zTGVuZ3RoIiwiYW5kcm9pZCIsImRldGVjdFByb2Nlc3MiLCJwcm9jZXNzIiwidHlwZSIsInZlcnNpb25zIiwiZWxlY3Ryb24iLCJkZXRlY3RVc2VyQWdlbnQiLCJkZXRlY3RXZWJEcml2ZXIiLCJ3ZWJEcml2ZXIiLCJkZXRlY3RXZWJHTCIsIndlYkdMIiwidmVuZG9yIiwicmVuZGVyZXIiLCJkZXRlY3RXaW5kb3dFeHRlcm5hbCIsIndpbmRvd0V4dGVybmFsIiwiZGV0ZWN0V2luZG93U2l6ZSIsIndpbmRvd1NpemUiLCJkb2N1bWVudEZvY3VzIiwib3V0ZXJXaWR0aCIsIm91dGVySGVpZ2h0IiwiZGV0ZWN0TWltZVR5cGVzQ29uc2lzdGVudCIsIm1pbWVUeXBlc0NvbnNpc3RlbnQiLCJkZXRlY3RQcm9kdWN0U3ViIiwicHJvZHVjdFN1YiIsImRldGVjdERpc3RpbmN0aXZlUHJvcGVydGllcyIsImRpc3RpbmN0aXZlUHJvcHMiLCJib3QiLCJnZXRCcm93c2VyRW5naW5lS2luZCIsInciLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRCcm93c2VyS2luZCIsImlzQW5kcm9pZCIsImlzSXRDaHJvbWl1bSIsImlzSXRHZWNrbyIsImdldE1vekFwcGVhcmFuY2VTdXBwb3J0IiwiQ1NTIiwiZ2V0RG9jdW1lbnRGb2N1cyIsImhhc0ZvY3VzIiwiaXNJUGFkIiwicyIsInNjcmVlbiIsInNjcmVlblJhdGlvIiwid2lkdGgiLCJoZWlnaHQiLCJFbGVtZW50Iiwid2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4iLCJydHQiLCJjb25uZWN0aW9uIiwiaW5uZXJXaWR0aCIsImlubmVySGVpZ2h0IiwicGx1Z2lucyIsIlBsdWdpbkFycmF5Iiwic3RhY2siLCJleHRlcm5hbCIsIm1pbWVUeXBlcyIsImlzQ29uc2lzdGVudCIsImdldFByb3RvdHlwZU9mIiwiTWltZVR5cGVBcnJheSIsIk1pbWVUeXBlIiwiZXZhbCIsImNhbnZhc0VsZW1lbnQiLCJnZXRDb250ZXh0Iiwid2ViR0xDb250ZXh0IiwiZ2V0UGFyYW1ldGVyIiwiUkVOREVSRVIiLCJ3ZWJkcml2ZXIiLCJsYW5ndWFnZSIsInVzZXJMYW5ndWFnZSIsImJyb3dzZXJMYW5ndWFnZSIsInN5c3RlbUxhbmd1YWdlIiwiaXNBcnJheSIsIkludGwiLCJSZWZsZWN0IiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uU3RhdHVzIiwiTm90aWZpY2F0aW9uIiwicXVlcnkiLCJwZXJtaXNzaW9uIiwiZ2V0QXR0cmlidXRlTmFtZXMiLCJiaW5kIiwiZXJyb3JQcmVmaXgiLCJib3ROYW1lIiwiZGlzdGluY3RpdmVQcm9wc0xpc3QiLCJ3aW5kb3dQcm9wcyIsImRvY3VtZW50UHJvcHMiLCJ3aW5kb3dDb250YWlucyIsImRvY3VtZW50Q29udGFpbnMiLCJCb3REZXRlY3RvciIsImRldGVjdGlvbnMiLCJnZXRDb21wb25lbnRzIiwiZ2V0RGV0ZWN0aW9ucyIsImRldGVjdCIsImZpbmFsRGV0ZWN0aW9uIiwiZGV0ZWN0b3JOYW1lIiwiZGV0ZWN0b3JSZXMiLCJkZXRlY3RvciIsImRldGVjdGlvbiIsImJvdEtpbmQiLCJsb2FkIiwibW9uaXRvcmluZyIsIl9fZnBqc19kX20iLCJNYXRoIiwicmFuZG9tIiwicmVxdWVzdCIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInNlbmQiLCJjb25zb2xlIiwibW9uaXRvciIsImdldEJyb3dzZXJWZXJzaW9uIiwibWFqb3IiLCJwYXJzZUludCIsIm1pbm9yIiwibG9jYWxzIiwiX3Jlc3VsdCIsInJ1bkFuZFJlbmRlciIsInQwIiwiaW5zdGFuY2UiLCJjb2xsZWN0aW9uVGltZSIsImRldGVjdGlvblJlc3VsdCIsImRldGVjdGlvblRpbWUiLCJkZWJ1Z0RhdGEiLCJwZXJmb3JtYW5jZSIsIm5vdyIsImJyb3dzZXJWZXJzaW9uIiwibW96QXBwZWFyYW5jZVN1cHBvcnQiLCJpc0Rlc2t0b3BXZWJLaXQiLCJIVE1MRWxlbWVudCIsIkRvY3VtZW50IiwiaXNFcnJvciIsImRldGVjdGVkQm90IiwiY29sbGVjdGVkRGF0YSIsImRldGVjdG9yc1Jlc3VsdHMiLCJyZXN1bHRFbCIsImdldEVsZW1lbnRCeUlkIiwicmVzdWx0VGV4dEVsIiwiY29sbGVjdGlvblRpbWVFbCIsImRldGVjdGlvblRpbWVFbCIsImRldGVjdGlvblJlc3VsdEVsIiwiZGV0ZWN0b3JzRWwiLCJlcnJvckNvbnRhaW5lckVsIiwiZXJyb3JNZXNzYWdlRWwiLCJjbGFzc0xpc3QiLCJpbm5lckhUTUwiLCJhZGQiLCJ0ZXh0Q29udGVudCIsInRvRml4ZWQiLCJyZW5kZXJEZXRlY3Rpb25SZXN1bHQiLCJvbmxvYWQiLCJkZXRlY3RCdXR0b25FbCIsImNvcHlMb2dzQnV0dG9uIiwiYWRkRXZlbnRMaXN0ZW5lciIsImNsaXBib2FyZCIsIndyaXRlVGV4dCIsImFsZXJ0Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +(()=>{var n={239:(n,e,t)=>{"use strict";t.d(e,{A:()=>h});var o=t(354),i=t.n(o),r=t(314),a=t.n(r),s=t(417),c=t.n(s),u=new URL(t(243),t.b),l=new URL(t(46),t.b),d=new URL(t(320),t.b),A=new URL(t(220),t.b),p=new URL(t(277),t.b),b=a()(i()),f=c()(u),g=c()(l),w=c()(d),m=c()(A),v=c()(p);b.push([n.id,":root {\n --accent-color: rgb(240, 68, 5);\n --accent-dark-color: rgb(140, 39, 3);\n --error-color: #b3261e;\n --font-family: 'Fira Mono', monospace;\n --font-family-consolas: Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n}\n\nbody {\n width: 100%;\n height: 100%;\n cursor: default;\n margin: 0px;\n padding: 0px;\n background-color: #f2f2f7;\n color: #000;\n font-size: 14px;\n position: relative;\n overflow-x: hidden;\n font-weight: 400;\n font-family: var(--font-family);\n padding-bottom: 24px;\n}\n\n* {\n box-sizing: border-box;\n}\n\n.container {\n width: calc(100% - 128px);\n max-width: 1536px;\n margin: 0 auto;\n}\n\n.medium-container {\n width: calc(100% - 32px);\n max-width: 960px;\n margin: 0 auto;\n}\n\n#navbar {\n width: 100%;\n height: 96px;\n background-color: #fff;\n}\n\n#navbar a {\n text-decoration: none;\n color: inherit;\n}\n\n#navbar .container {\n display: flex;\n align-items: center;\n height: 100%;\n}\n\n#navbar-chevron {\n width: 24px;\n height: 24px;\n background-repeat: no-repeat;\n background-position: center;\n background-image: url("+f+");\n opacity: 0.2;\n margin-left: 8px;\n}\n\n#navbar .logo-ref {\n width: max-content;\n}\n\n#navbar .logo {\n width: 196px;\n margin-top: 2px;\n}\n\n@media only screen and (max-width: 700px) {\n #navbar {\n height: auto;\n }\n\n #navbar .container {\n flex-direction: column;\n align-items: center;\n }\n\n #navbar .logo-ref {\n margin-top: 32px;\n }\n\n #navbar .logo {\n margin-top: 0;\n width: 256px;\n }\n\n #navbar #navbar-chevron {\n transform: rotate(90deg);\n }\n\n #navbar #playground-actions {\n margin-left: 0;\n margin: 32px 0px;\n }\n}\n\nh1,\nh2 {\n font-weight: 700;\n color: #0d102b;\n}\nh1 {\n font-size: 24px;\n}\nh2 {\n font-size: 20px;\n}\n\n.content {\n height: 100vh;\n width: calc(100% - 64px);\n max-width: 960px;\n display: flex;\n flex-direction: column;\n margin: 0 auto;\n}\n\n.github-card {\n display: flex;\n align-items: center;\n border-radius: 8px;\n user-select: none;\n padding: 8px;\n}\n\n.github-card:hover {\n background-color: rgba(0, 0, 0, 0.06);\n transition: 0.15s;\n}\n\n.github-card:active,\n.github-card:focus {\n background-color: rgba(0, 0, 0, 0.12);\n transition: 0.15s;\n}\n\n.github-card::before {\n display: block;\n content: '';\n width: 32px;\n height: 32px;\n background-image: url("+g+");\n background-size: 24px;\n background-repeat: no-repeat;\n background-position: center;\n margin-right: 4px;\n}\n\n#playground-actions {\n display: flex;\n align-items: center;\n column-gap: 16px;\n margin-left: auto;\n}\n\n.button {\n width: fit-content;\n height: fit-content;\n padding: 12px 20px;\n border-radius: 6px;\n outline: none;\n margin: none;\n border: none;\n font-size: 14px;\n font-family: var(--font-family);\n transition: 0.15s background-color;\n font-weight: 600;\n}\n\n.orange-button {\n background-color: var(--accent-color);\n color: #fff;\n border: 2px solid transparent;\n}\n\n.orange-button-outlined {\n border: 2px solid var(--accent-color);\n color: var(--accent-color);\n background-color: transparent;\n}\n\n.orange-button:hover,\n.orange-button:active,\n.orange-button:focus {\n background-color: var(--accent-dark-color);\n}\n\n.orange-button-outlined:hover,\n.orange-button-outlined:active,\n.orange-button-outlined:focus {\n background-color: rgba(240, 68, 5, 0.12);\n}\n\n.content-card {\n overflow: hidden;\n}\n\n.content-card-header {\n font-size: 20px;\n font-weight: 600;\n padding: var(--content-card-padding);\n}\n\n#result {\n overflow: hidden;\n margin: 96px auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n --bot-icon-color: #4caf50;\n --bot-icon-url: url("+w+");\n}\n\n.result-detected {\n --bot-icon-color: #f44336 !important;\n --bot-icon-url: url("+m+") !important;\n}\n\n.result-error {\n --bot-icon-color: var(--error-color) !important;\n --bot-icon-url: url("+v+") !important;\n}\n\n.result-bot-icon-container {\n width: 128px;\n height: 128px;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.result-bot-icon-container::before {\n content: '';\n display: block;\n background-color: var(--bot-icon-color);\n opacity: 0.08;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: -1;\n border-radius: 100%;\n transition: 0.2s background-color;\n}\n\n.result-bot-icon {\n width: 52px;\n height: 52px;\n mask-image: var(--bot-icon-url);\n -webkit-mask-image: var(--bot-icon-url);\n mask-size: 100%;\n mask-repeat: no-repeat;\n mask-position: center;\n background-color: var(--bot-icon-color);\n position: relative;\n transition: 0.2s mask-image, 0.2s -webkit-mask-image, 0.2s background-color;\n}\n\n#result-text {\n margin-top: 24px;\n font-size: 18px;\n font-weight: 600;\n color: var(--bot-icon-color);\n transition: 0.2s color;\n}\n\n.logs-content {\n background-color: #282c34;\n color: #fff;\n border-radius: 12px;\n padding: 24px;\n margin-top: 12px;\n font-family: var(--font-family-consolas);\n}\n\n.logs-buttons-list {\n display: flex;\n margin-left: auto;\n}\n\n.logs-top-bar {\n display: flex;\n align-items: center;\n}\n\n.logs-section:not(:first-child) {\n margin-top: 24px;\n}\n\n.logs-section-header {\n color: var(--accent-color);\n font-size: 14px;\n}\n\n.logs-section-content {\n font-size: 12px;\n margin-top: 1em;\n white-space: pre-wrap;\n}\n\n#error-container {\n margin-bottom: 96px;\n padding: 24px;\n border: 2px solid var(--error-color);\n border-radius: 12px;\n font-family: var(--font-family-consolas);\n font-size: 14px;\n line-height: 2;\n display: none;\n}\n\n.error-container-visible {\n display: block !important;\n}\n","",{version:3,sources:["webpack://./playground/style.css"],names:[],mappings:"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",sourcesContent:[":root {\n --accent-color: rgb(240, 68, 5);\n --accent-dark-color: rgb(140, 39, 3);\n --error-color: #b3261e;\n --font-family: 'Fira Mono', monospace;\n --font-family-consolas: Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n}\n\nbody {\n width: 100%;\n height: 100%;\n cursor: default;\n margin: 0px;\n padding: 0px;\n background-color: #f2f2f7;\n color: #000;\n font-size: 14px;\n position: relative;\n overflow-x: hidden;\n font-weight: 400;\n font-family: var(--font-family);\n padding-bottom: 24px;\n}\n\n* {\n box-sizing: border-box;\n}\n\n.container {\n width: calc(100% - 128px);\n max-width: 1536px;\n margin: 0 auto;\n}\n\n.medium-container {\n width: calc(100% - 32px);\n max-width: 960px;\n margin: 0 auto;\n}\n\n#navbar {\n width: 100%;\n height: 96px;\n background-color: #fff;\n}\n\n#navbar a {\n text-decoration: none;\n color: inherit;\n}\n\n#navbar .container {\n display: flex;\n align-items: center;\n height: 100%;\n}\n\n#navbar-chevron {\n width: 24px;\n height: 24px;\n background-repeat: no-repeat;\n background-position: center;\n background-image: url(../resources/chevron_right.svg);\n opacity: 0.2;\n margin-left: 8px;\n}\n\n#navbar .logo-ref {\n width: max-content;\n}\n\n#navbar .logo {\n width: 196px;\n margin-top: 2px;\n}\n\n@media only screen and (max-width: 700px) {\n #navbar {\n height: auto;\n }\n\n #navbar .container {\n flex-direction: column;\n align-items: center;\n }\n\n #navbar .logo-ref {\n margin-top: 32px;\n }\n\n #navbar .logo {\n margin-top: 0;\n width: 256px;\n }\n\n #navbar #navbar-chevron {\n transform: rotate(90deg);\n }\n\n #navbar #playground-actions {\n margin-left: 0;\n margin: 32px 0px;\n }\n}\n\nh1,\nh2 {\n font-weight: 700;\n color: #0d102b;\n}\nh1 {\n font-size: 24px;\n}\nh2 {\n font-size: 20px;\n}\n\n.content {\n height: 100vh;\n width: calc(100% - 64px);\n max-width: 960px;\n display: flex;\n flex-direction: column;\n margin: 0 auto;\n}\n\n.github-card {\n display: flex;\n align-items: center;\n border-radius: 8px;\n user-select: none;\n padding: 8px;\n}\n\n.github-card:hover {\n background-color: rgba(0, 0, 0, 0.06);\n transition: 0.15s;\n}\n\n.github-card:active,\n.github-card:focus {\n background-color: rgba(0, 0, 0, 0.12);\n transition: 0.15s;\n}\n\n.github-card::before {\n display: block;\n content: '';\n width: 32px;\n height: 32px;\n background-image: url(../resources/github_icon.svg);\n background-size: 24px;\n background-repeat: no-repeat;\n background-position: center;\n margin-right: 4px;\n}\n\n#playground-actions {\n display: flex;\n align-items: center;\n column-gap: 16px;\n margin-left: auto;\n}\n\n.button {\n width: fit-content;\n height: fit-content;\n padding: 12px 20px;\n border-radius: 6px;\n outline: none;\n margin: none;\n border: none;\n font-size: 14px;\n font-family: var(--font-family);\n transition: 0.15s background-color;\n font-weight: 600;\n}\n\n.orange-button {\n background-color: var(--accent-color);\n color: #fff;\n border: 2px solid transparent;\n}\n\n.orange-button-outlined {\n border: 2px solid var(--accent-color);\n color: var(--accent-color);\n background-color: transparent;\n}\n\n.orange-button:hover,\n.orange-button:active,\n.orange-button:focus {\n background-color: var(--accent-dark-color);\n}\n\n.orange-button-outlined:hover,\n.orange-button-outlined:active,\n.orange-button-outlined:focus {\n background-color: rgba(240, 68, 5, 0.12);\n}\n\n.content-card {\n overflow: hidden;\n}\n\n.content-card-header {\n font-size: 20px;\n font-weight: 600;\n padding: var(--content-card-padding);\n}\n\n#result {\n overflow: hidden;\n margin: 96px auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n --bot-icon-color: #4caf50;\n --bot-icon-url: url(../resources/robot-off-outline.svg);\n}\n\n.result-detected {\n --bot-icon-color: #f44336 !important;\n --bot-icon-url: url(../resources/robot-outline.svg) !important;\n}\n\n.result-error {\n --bot-icon-color: var(--error-color) !important;\n --bot-icon-url: url(../resources/alert-circle-outline.svg) !important;\n}\n\n.result-bot-icon-container {\n width: 128px;\n height: 128px;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.result-bot-icon-container::before {\n content: '';\n display: block;\n background-color: var(--bot-icon-color);\n opacity: 0.08;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: -1;\n border-radius: 100%;\n transition: 0.2s background-color;\n}\n\n.result-bot-icon {\n width: 52px;\n height: 52px;\n mask-image: var(--bot-icon-url);\n -webkit-mask-image: var(--bot-icon-url);\n mask-size: 100%;\n mask-repeat: no-repeat;\n mask-position: center;\n background-color: var(--bot-icon-color);\n position: relative;\n transition: 0.2s mask-image, 0.2s -webkit-mask-image, 0.2s background-color;\n}\n\n#result-text {\n margin-top: 24px;\n font-size: 18px;\n font-weight: 600;\n color: var(--bot-icon-color);\n transition: 0.2s color;\n}\n\n.logs-content {\n background-color: #282c34;\n color: #fff;\n border-radius: 12px;\n padding: 24px;\n margin-top: 12px;\n font-family: var(--font-family-consolas);\n}\n\n.logs-buttons-list {\n display: flex;\n margin-left: auto;\n}\n\n.logs-top-bar {\n display: flex;\n align-items: center;\n}\n\n.logs-section:not(:first-child) {\n margin-top: 24px;\n}\n\n.logs-section-header {\n color: var(--accent-color);\n font-size: 14px;\n}\n\n.logs-section-content {\n font-size: 12px;\n margin-top: 1em;\n white-space: pre-wrap;\n}\n\n#error-container {\n margin-bottom: 96px;\n padding: 24px;\n border: 2px solid var(--error-color);\n border-radius: 12px;\n font-family: var(--font-family-consolas);\n font-size: 14px;\n line-height: 2;\n display: none;\n}\n\n.error-container-visible {\n display: block !important;\n}\n"],sourceRoot:""}]);const h=b},314:n=>{"use strict";n.exports=function(n){var e=[];return e.toString=function(){return this.map((function(e){var t="",o=void 0!==e[5];return e[4]&&(t+="@supports (".concat(e[4],") {")),e[2]&&(t+="@media ".concat(e[2]," {")),o&&(t+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),t+=n(e),o&&(t+="}"),e[2]&&(t+="}"),e[4]&&(t+="}"),t})).join("")},e.i=function(n,t,o,i,r){"string"==typeof n&&(n=[[null,n,void 0]]);var a={};if(o)for(var s=0;s0?" ".concat(l[5]):""," {").concat(l[1],"}")),l[5]=r),t&&(l[2]?(l[1]="@media ".concat(l[2]," {").concat(l[1],"}"),l[2]=t):l[2]=t),i&&(l[4]?(l[1]="@supports (".concat(l[4],") {").concat(l[1],"}"),l[4]=i):l[4]="".concat(i)),e.push(l))}},e}},417:n=>{"use strict";n.exports=function(n,e){return e||(e={}),n?(n=String(n.__esModule?n.default:n),/^['"].*['"]$/.test(n)&&(n=n.slice(1,-1)),e.hash&&(n+=e.hash),/["'() \t\n]|(%20)/.test(n)||e.needQuotes?'"'.concat(n.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):n):n}},354:n=>{"use strict";n.exports=function(n){var e=n[1],t=n[3];if(!t)return e;if("function"==typeof btoa){var o=btoa(unescape(encodeURIComponent(JSON.stringify(t)))),i="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(o),r="/*# ".concat(i," */"),a=t.sources.map((function(n){return"/*# sourceURL=".concat(t.sourceRoot||"").concat(n," */")}));return[e].concat(a).concat([r]).join("\n")}return[e].join("\n")}},72:n=>{"use strict";var e=[];function t(n){for(var t=-1,o=0;o{"use strict";var e={};n.exports=function(n,t){var o=function(n){if(void 0===e[n]){var t=document.querySelector(n);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(n){t=null}e[n]=t}return e[n]}(n);if(!o)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");o.appendChild(t)}},540:n=>{"use strict";n.exports=function(n){var e=document.createElement("style");return n.setAttributes(e,n.attributes),n.insert(e,n.options),e}},56:(n,e,t)=>{"use strict";n.exports=function(n){var e=t.nc;e&&n.setAttribute("nonce",e)}},825:n=>{"use strict";n.exports=function(n){var e=n.insertStyleElement(n);return{update:function(t){!function(n,e,t){var o="";t.supports&&(o+="@supports (".concat(t.supports,") {")),t.media&&(o+="@media ".concat(t.media," {"));var i=void 0!==t.layer;i&&(o+="@layer".concat(t.layer.length>0?" ".concat(t.layer):""," {")),o+=t.css,i&&(o+="}"),t.media&&(o+="}"),t.supports&&(o+="}");var r=t.sourceMap;r&&"undefined"!=typeof btoa&&(o+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(r))))," */")),e.styleTagTransform(o,n,e.options)}(e,n,t)},remove:function(){!function(n){if(null===n.parentNode)return!1;n.parentNode.removeChild(n)}(e)}}}},113:n=>{"use strict";n.exports=function(n,e){if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}},232:function(n,e,t){var o;!function(i,r){"use strict";var a="function",s="undefined",c="object",u="string",l="major",d="model",A="name",p="type",b="vendor",f="version",g="architecture",w="console",m="mobile",v="tablet",h="smarttv",E="wearable",C="embedded",x="Amazon",B="Apple",y="ASUS",k="BlackBerry",_="Browser",S="Chrome",T="Firefox",z="Google",P="Huawei",j="LG",q="Microsoft",L="Motorola",O="Opera",I="Samsung",M="Sharp",R="Sony",W="Xiaomi",N="Zebra",D="Facebook",Y="Chromium OS",U="Mac OS",F=function(n){for(var e={},t=0;t0?2===s.length?typeof s[1]==a?this[s[0]]=s[1].call(this,l):this[s[0]]=s[1]:3===s.length?typeof s[1]!==a||s[1].exec&&s[1].test?this[s[0]]=l?l.replace(s[1],s[2]):r:this[s[0]]=l?s[1].call(this,l,s[2]):r:4===s.length&&(this[s[0]]=l?s[3].call(this,l.replace(s[1],s[2])):r):this[s]=l||r;d+=2}},X=function(n,e){for(var t in e)if(typeof e[t]===c&&e[t].length>0){for(var o=0;o2&&(n[d]="iPad",n[p]=v),n},this.getEngine=function(){var n={};return n[A]=r,n[f]=r,Z.call(n,o,h.engine),n},this.getOS=function(){var n={};return n[A]=r,n[f]=r,Z.call(n,o,h.os),E&&!n[A]&&w&&"Unknown"!=w.platform&&(n[A]=w.platform.replace(/chrome os/i,Y).replace(/macos/i,U)),n},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return o},this.setUA=function(n){return o=typeof n===u&&n.length>350?K(n,350):n,this},this.setUA(o),this};J.VERSION="1.0.35",J.BROWSER=F([A,f,l]),J.CPU=F([g]),J.DEVICE=F([d,b,p,w,m,h,v,E,C]),J.ENGINE=J.OS=F([A,f]),typeof e!==s?(n.exports&&(e=n.exports=J),e.UAParser=J):t.amdO?(o=function(){return J}.call(e,t,e,n))===r||(n.exports=o):typeof i!==s&&(i.UAParser=J);var Q=typeof i!==s&&(i.jQuery||i.Zepto);if(Q&&!Q.ua){var nn=new J;Q.ua=nn.getResult(),Q.ua.get=function(){return nn.getUA()},Q.ua.set=function(n){nn.setUA(n);var e=nn.getResult();for(var t in e)Q.ua[t]=e[t]}}}("object"==typeof window?window:this)},277:(n,e,t)=>{"use strict";n.exports=t.p+"bf468b98f99fe3cb600c.svg"},243:(n,e,t)=>{"use strict";n.exports=t.p+"cb3e629604702ef8bc66.svg"},46:(n,e,t)=>{"use strict";n.exports=t.p+"550985caaa8859d4b95f.svg"},320:(n,e,t)=>{"use strict";n.exports=t.p+"80392182d321c655d4d0.svg"},220:(n,e,t)=>{"use strict";n.exports=t.p+"52d88d31d700c20dcc04.svg"}},e={};function t(o){var i=e[o];if(void 0!==i)return i.exports;var r=e[o]={id:o,exports:{}};return n[o].call(r.exports,r,r.exports,t),r.exports}t.m=n,t.amdO={},t.n=n=>{var e=n&&n.__esModule?()=>n.default:()=>n;return t.d(e,{a:e}),e},t.d=(n,e)=>{for(var o in e)t.o(e,o)&&!t.o(n,o)&&Object.defineProperty(n,o,{enumerable:!0,get:e[o]})},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"==typeof window)return window}}(),t.o=(n,e)=>Object.prototype.hasOwnProperty.call(n,e),(()=>{var n;t.g.importScripts&&(n=t.g.location+"");var e=t.g.document;if(!n&&e&&(e.currentScript&&"SCRIPT"===e.currentScript.tagName.toUpperCase()&&(n=e.currentScript.src),!n)){var o=e.getElementsByTagName("script");if(o.length)for(var i=o.length-1;i>-1&&(!n||!/^http(s?):/.test(n));)n=o[i--].src}if(!n)throw new Error("Automatic publicPath is not supported in this browser");n=n.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),t.p=n})(),t.b=document.baseURI||self.location.href,t.nc=void 0,(()=>{"use strict";var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,e){n.__proto__=e}||function(n,e){for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(n[t]=e[t])},n(e,t)};function e(n,e,t,o){return new(t||(t=Promise))((function(i,r){function a(n){try{c(o.next(n))}catch(n){r(n)}}function s(n){try{c(o.throw(n))}catch(n){r(n)}}function c(n){var e;n.done?i(n.value):(e=n.value,e instanceof t?e:new t((function(n){n(e)}))).then(a,s)}c((o=o.apply(n,e||[])).next())}))}function o(n,e){var t,o,i,r,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return r={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(r[Symbol.iterator]=function(){return this}),r;function s(s){return function(c){return function(s){if(t)throw new TypeError("Generator is already executing.");for(;r&&(r=0,s[0]&&(a=0)),a;)try{if(t=1,o&&(i=2&s[0]?o.return:s[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,s[1])).done)return i;switch(o=0,i&&(s=[2&s[0],i.value]),s[0]){case 0:case 1:i=s;break;case 4:return a.label++,{value:s[1],done:!1};case 5:a.label++,o=s[1],s=[0];continue;case 7:s=a.ops.pop(),a.trys.pop();continue;default:if(!((i=(i=a.trys).length>0&&i[i.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!i||s[1]>i[0]&&s[1]=5?"chromium":m(["ApplePayError"in t,"CSSPrimitiveValue"in t,"Counter"in t,0===o.vendor.indexOf("Apple"),"getStorageUpdates"in o,"WebKitMediaKeys"in t])>=4?"webkit":m(["buildID"in navigator,"MozAppearance"in(null!==(e=null===(n=document.documentElement)||void 0===n?void 0:n.style)&&void 0!==e?e:{}),"onmozfullscreenchange"in t,"mozInnerScreenX"in t,"CSSMozDocumentRule"in t,"CanvasCaptureMediaStream"in t])>=4?"gecko":"unknown"}function E(){var n,e=null===(n=navigator.userAgent)||void 0===n?void 0:n.toLowerCase();return f(e,"edg/")?"edge":f(e,"trident")||f(e,"msie")?"internet_explorer":f(e,"wechat")?"wechat":f(e,"firefox")?"firefox":f(e,"opera")||f(e,"opr")?"opera":f(e,"chrome")?"chrome":f(e,"safari")?"safari":"unknown"}function C(){var n=h(),e="gecko"===n,t=window,o=navigator,i="connection";return"chromium"===n?m([!("SharedWorker"in t),o[i]&&"ontypechange"in o[i],!("sinkId"in new Audio)])>=2:!!e&&m(["onorientationchange"in t,"orientation"in t,/android/i.test(o.appVersion)])>=2}function x(){if(void 0===window.CSS)throw new A(-1,"window.CSS is undefined");return CSS.supports("-moz-appearance","auto")}function B(){return void 0!==document.hasFocus&&document.hasFocus()}function y(){if("iPad"===navigator.platform)return!0;var n=screen,e=n.width/n.height;return m(["MediaSource"in window,!!Element.prototype.webkitRequestFullscreen,e>.65&&e<1.53])>=2}var k={android:C,browserKind:E,browserEngineKind:h,documentFocus:B,userAgent:function(){return navigator.userAgent},appVersion:function(){var n=navigator.appVersion;if(null==n)throw new A(-1,"navigator.appVersion is undefined");return n},rtt:function(){if(void 0===navigator.connection)throw new A(-1,"navigator.connection is undefined");if(void 0===navigator.connection.rtt)throw new A(-1,"navigator.connection.rtt is undefined");return navigator.connection.rtt},windowSize:function(){return{outerWidth:window.outerWidth,outerHeight:window.outerHeight,innerWidth:window.innerWidth,innerHeight:window.innerHeight}},pluginsLength:function(){if(void 0===navigator.plugins)throw new A(-1,"navigator.plugins is undefined");if(void 0===navigator.plugins.length)throw new A(-3,"navigator.plugins.length is undefined");return navigator.plugins.length},pluginsArray:function(){if(void 0===navigator.plugins)throw new A(-1,"navigator.plugins is undefined");if(void 0===window.PluginArray)throw new A(-1,"window.PluginArray is undefined");return navigator.plugins instanceof PluginArray},errorTrace:function(){try{null[0]()}catch(n){if(n instanceof Error&&null!=n.stack)return n.stack.toString()}throw new A(-3,"errorTrace signal unexpected behaviour")},productSub:function(){var n=navigator.productSub;if(void 0===n)throw new A(-1,"navigator.productSub is undefined");return n},windowExternal:function(){if(void 0===window.external)throw new A(-1,"window.external is undefined");var n=window.external;if("function"!=typeof n.toString)throw new A(-2,"window.external.toString is not a function");return n.toString()},mimeTypesConsistent:function(){if(void 0===navigator.mimeTypes)throw new A(-1,"navigator.mimeTypes is undefined");for(var n=navigator.mimeTypes,e=Object.getPrototypeOf(n)===MimeTypeArray.prototype,t=0;t=3||t.push(e.languages);else if("string"==typeof e.languages){var i=e.languages;i&&t.push(i.split(","))}return t},notificationPermissions:function(){return e(this,void 0,void 0,(function(){var n,e;return o(this,(function(t){switch(t.label){case 0:if(void 0===window.Notification)throw new A(-1,"window.Notification is undefined");if(void 0===navigator.permissions)throw new A(-1,"navigator.permissions is undefined");if("function"!=typeof(n=navigator.permissions).query)throw new A(-2,"navigator.permissions.query is not a function");t.label=1;case 1:return t.trys.push([1,3,,4]),[4,n.query({name:"notifications"})];case 2:return e=t.sent(),[2,"denied"===window.Notification.permission&&"prompt"===e.state];case 3:throw t.sent(),new A(-3,"notificationPermissions signal unexpected behaviour");case 4:return[2]}}))}))},documentElementKeys:function(){if(void 0===document.documentElement)throw new A(-1,"document.documentElement is undefined");var n=document.documentElement;if("function"!=typeof n.getAttributeNames)throw new A(-2,"document.documentElement.getAttributeNames is not a function");return n.getAttributeNames()},functionBind:function(){if(void 0===Function.prototype.bind)throw new A(-2,"Function.prototype.bind is undefined");return Function.prototype.bind.toString()},process:function(){var n=window.process,e="window.process is";if(void 0===n)throw new A(-1,"".concat(e," undefined"));if(n&&"object"!=typeof n)throw new A(-3,"".concat(e," not an object"));return n},distinctiveProps:function(){var n,e,t=((n={}).awesomium={window:["awesomium"]},n.cef={window:["RunPerfTest"]},n.cefsharp={window:["CefSharp"]},n.coachjs={window:["emit"]},n.fminer={window:["fmget_targets"]},n.geb={window:["geb"]},n.nightmarejs={window:["__nightmare","nightmare"]},n.phantomas={window:["__phantomas"]},n[s]={window:["callPhantom","_phantom"]},n.rhino={window:["spawn"]},n[c]={window:["_Selenium_IDE_Recorder","_selenium","calledSelenium",/^([a-z]){3}_.*_(Array|Promise|Symbol)$/],document:["__selenium_evaluate","selenium-evaluate","__selenium_unwrapped"]},n.webdriverio={window:["wdioElectron"]},n.webdriver={window:["webdriver","__webdriverFunc","__lastWatirAlert","__lastWatirConfirm","__lastWatirPrompt","_WEBDRIVER_ELEM_CACHE","ChromeDriverw"],document:["__webdriver_script_fn","__driver_evaluate","__webdriver_evaluate","__fxdriver_evaluate","__driver_unwrapped","__webdriver_unwrapped","__fxdriver_unwrapped","__webdriver_script_fn","__webdriver_script_func","__webdriver_script_function","$cdc_asdjflasutopfhvcZLmcf","$cdc_asdjflasutopfhvcZLmcfl_","$chrome_asyncScriptInfo","__$webdriverAsyncExecutor"]},n[l]={window:["domAutomation","domAutomationController"]},n),o={},r=g(window),a=[];for(e in void 0!==window.document&&(a=g(window.document)),t){var u=t[e];if(void 0!==u){var d=void 0!==u.window&&w.apply(void 0,i([r],u.window,!1)),A=!(void 0===u.document||!a.length)&&w.apply(void 0,i([a],u.document,!1));o[e]=d||A}}return o}},_=function(){function n(){this.components=void 0,this.detections=void 0}return n.prototype.getComponents=function(){return this.components},n.prototype.getDetections=function(){return this.detections},n.prototype.detect=function(){if(void 0===this.components)throw new Error("BotDetector.detect can't be called before BotDetector.collect");var n=function(n,e){var t={},o={bot:!1};for(var i in e){var r=(0,e[i])(n),a={bot:!1};"string"==typeof r?a={bot:!0,botKind:r}:r&&(a={bot:!0,botKind:d}),t[i]=a,a.bot&&(o=a)}return[t,o]}(this.components,v),e=n[0],t=n[1];return this.detections=e,t},n.prototype.collect=function(){return e(this,void 0,void 0,(function(){var n;return o(this,(function(e){switch(e.label){case 0:return n=this,[4,p(k)];case 1:return n.components=e.sent(),[2,this.components]}}))}))},n}();const S=_;function T(n){var t=(void 0===n?{}:n).monitoring,i=void 0===t||t;return e(this,void 0,void 0,(function(){var n;return o(this,(function(e){switch(e.label){case 0:return i&&function(){if(!(window.__fpjs_d_m||Math.random()>=.001))try{var n=new XMLHttpRequest;n.open("get","https://m1.openfpcdn.io/botd/v".concat(r,"/npm-monitoring"),!0),n.send()}catch(n){console.error(n)}}(),[4,(n=new S).collect()];case 1:return e.sent(),[2,n]}}))}))}var z=t(232);function P(){var n=(new z.UAParser).getBrowser().version;if(void 0!==n)return{major:parseInt(n.split(".")[0]),minor:parseInt(n.split(".")[1])}}var j=t(72),q=t.n(j),L=t(825),O=t.n(L),I=t(659),M=t.n(I),R=t(56),W=t.n(R),N=t(540),D=t.n(N),Y=t(113),U=t.n(Y),F=t(239),H={};H.styleTagTransform=U(),H.setAttributes=W(),H.insert=M().bind(null,"head"),H.domAPI=O(),H.insertStyleElement=D(),q()(F.A,H),F.A&&F.A.locals&&F.A.locals;var V=void 0,K=function(){return e(void 0,void 0,void 0,(function(){var n;return o(this,(function(t){switch(t.label){case 0:return[4,e(void 0,void 0,void 0,(function(){var n,e,t,i,r,a,s,c,u,l;return o(this,(function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),n=performance.now(),[4,T()];case 1:return e=o.sent(),t=performance.now()-n,i=e.detect(),r=performance.now()-n,a=null!==(u=e.getComponents())&&void 0!==u?u:{},s=null!==(l=e.getDetections())&&void 0!==l?l:{},c={browserEngineKind:h(),browserKind:E(),browserVersion:P(),documentFocus:B(),mozAppearanceSupport:x(),isAndroid:C(),isDesktopWebKit:(d=window,A=d.HTMLElement,p=d.Document,m(["safari"in d,!("ongestureend"in d),!("TouchEvent"in d),!("orientation"in d),A&&!("autocapitalize"in A.prototype),p&&"pointerLockElement"in p.prototype])>=4),isIPad:y()},[2,{isError:!1,collectionTime:t,detectionTime:r,detectionResult:i,detectedBot:(null==i?void 0:i.bot)?i.botKind:void 0,collectedData:a,detectorsResults:s,debugData:c}];case 2:return[2,{isError:!0,error:o.sent()}];case 3:return[2]}var d,A,p}))}))];case 1:return n=t.sent(),V=n,function(n){var e=document.getElementById("result"),t=document.getElementById("result-text"),o=document.getElementById("collection-time"),i=document.getElementById("detection-time"),r=document.getElementById("detection-result"),a=document.getElementById("detectors"),s=document.getElementById("debug-data"),c=document.getElementById("collected-data"),u=document.getElementById("error-container"),l=document.getElementById("error-message");if(e.classList.remove("result-detected","result-error"),n.isError)return t.innerHTML="An error occured",e.classList.add("result-error"),u.classList.add("error-container-visible"),void(l.textContent=n.error.message);u.classList.remove("error-container-visible"),null!=n.detectedBot?(t.innerHTML="".concat(n.detectedBot," detected."),e.classList.add("result-detected")):t.innerHTML="You are not a bot.",o.textContent="".concat(n.collectionTime.toFixed(2),"ms"),i.textContent="".concat(n.detectionTime.toFixed(2),"ms"),r.textContent=JSON.stringify(n.detectionResult,null,4),a.textContent=JSON.stringify(n.detectorsResults,null,4),s.textContent=JSON.stringify(n.debugData,null,4),c.textContent=JSON.stringify(n.collectedData,null,4)}(n),[2]}}))}))};window.onload=function(){var n=document.getElementById("detect-button"),e=document.getElementById("copy-logs-button");n.addEventListener("click",(function(){K()})),e.addEventListener("click",(function(){navigator.clipboard.writeText(JSON.stringify(V)).then((function(){alert("BotD logs copied to clipboard")}))})),K()}})()})(); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEdBQ0osR0FBSSxFQUNKaUMsT0FBTzhhLE9BQVMsV0FDWixJQUFJQyxFQUFpQmpiLFNBQVNrYSxlQUFlLGlCQUN6Q2dCLEVBQWlCbGIsU0FBU2thLGVBQWUsb0JBQzdDZSxFQUFlRSxpQkFBaUIsU0FBUyxXQUNyQ3BDLEdBQ0osSUFDQW1DLEVBQWVDLGlCQUFpQixTQUFTLFdBQ3JDM1UsVUFBVTRVLFVBQVVDLFVBQVUvZCxLQUFLQyxVQUFVdWIsSUFBVXpNLE1BQUssV0FDeERpUCxNQUFNLGdDQUNWLEdBQ0osSUFDQXZDLEdBQ0osQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9wbGF5Z3JvdW5kL3N0eWxlLmNzcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL3VhLXBhcnNlci1qcy9zcmMvdWEtcGFyc2VyLmpzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC93ZWJwYWNrL3J1bnRpbWUvYW1kIG9wdGlvbnMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvd2VicGFjay9ydW50aW1lL3B1YmxpY1BhdGgiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC93ZWJwYWNrL3J1bnRpbWUvanNvbnAgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkL3dlYnBhY2svcnVudGltZS9ub25jZSIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3R5cGVzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvYXBpLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvdXRpbHMvcG9ueWZpbGxzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvdXRpbHMvbWlzYy50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9pbmRleC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9hcHBfdmVyc2lvbi50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9kb2N1bWVudF9lbGVtZW50X2tleXMudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvZXJyb3JfdHJhY2UudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvZXZhbF9sZW5ndGgudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvZnVuY3Rpb25fYmluZC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9sYW5ndWFnZXNfaW5jb25zaXN0ZW5jeS50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9ub3RpZmljYXRpb25fcGVybWlzc2lvbnMudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvcGx1Z2luc19hcnJheS50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9wbHVnaW5zX2luY29uc2lzdGVuY3kudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvcHJvY2Vzcy50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy91c2VyX2FnZW50LnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvZGV0ZWN0b3JzL3dlYmRyaXZlci50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy93ZWJnbC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy93aW5kb3dfZXh0ZXJuYWwudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvd2luZG93X3NpemUudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9kZXRlY3RvcnMvbWltZV90eXBlc19jb25zaXN0ZW5jZS50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9wcm9kdWN0X3N1Yi50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL2RldGVjdG9ycy9kaXN0aW5jdGl2ZV9wcm9wZXJ0aWVzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvdXRpbHMvYnJvd3Nlci50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3NvdXJjZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL3VzZXJfYWdlbnQudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL2FwcF92ZXJzaW9uLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9ydHQudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL3dpbmRvd19zaXplLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9wbHVnaW5zX2xlbmd0aC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3NvdXJjZXMvcGx1Z2luc19hcnJheS50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3NvdXJjZXMvZXJyb3JfdHJhY2UudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL3Byb2R1Y3Rfc3ViLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy93aW5kb3dfZXh0ZXJuYWwudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL21pbWVfdHlwZXNfY29uc2lzdGVuY2UudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL2V2YWxfbGVuZ3RoLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy93ZWJnbC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3NvdXJjZXMvd2ViZHJpdmVyLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9sYW5ndWFnZXMudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9zb3VyY2VzL25vdGlmaWNhdGlvbl9wZXJtaXNzaW9ucy50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vc3JjL3NvdXJjZXMvZG9jdW1lbnRfZWxlbWVudF9rZXlzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9mdW5jdGlvbl9iaW5kLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9wcm9jZXNzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvc291cmNlcy9kaXN0aW5jdGl2ZV9wcm9wZXJ0aWVzLnRzIiwid2VicGFjazovL0BmaW5nZXJwcmludGpzL2JvdGQvLi9zcmMvZGV0ZWN0b3IudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly9AZmluZ2VycHJpbnRqcy9ib3RkLy4vdGVzdHMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3BsYXlncm91bmQvc3R5bGUuY3NzP2RhNjIiLCJ3ZWJwYWNrOi8vQGZpbmdlcnByaW50anMvYm90ZC8uL3BsYXlncm91bmQvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8wX19fID0gbmV3IFVSTChcIi4uL3Jlc291cmNlcy9jaGV2cm9uX3JpZ2h0LnN2Z1wiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xX19fID0gbmV3IFVSTChcIi4uL3Jlc291cmNlcy9naXRodWJfaWNvbi5zdmdcIiwgaW1wb3J0Lm1ldGEudXJsKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMl9fXyA9IG5ldyBVUkwoXCIuLi9yZXNvdXJjZXMvcm9ib3Qtb2ZmLW91dGxpbmUuc3ZnXCIsIGltcG9ydC5tZXRhLnVybCk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzNfX18gPSBuZXcgVVJMKFwiLi4vcmVzb3VyY2VzL3JvYm90LW91dGxpbmUuc3ZnXCIsIGltcG9ydC5tZXRhLnVybCk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzRfX18gPSBuZXcgVVJMKFwiLi4vcmVzb3VyY2VzL2FsZXJ0LWNpcmNsZS1vdXRsaW5lLnN2Z1wiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzBfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8wX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMV9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMl9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzJfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzNfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8zX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF80X19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfNF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCI6cm9vdCB7XFxuICAtLWFjY2VudC1jb2xvcjogcmdiKDI0MCwgNjgsIDUpO1xcbiAgLS1hY2NlbnQtZGFyay1jb2xvcjogcmdiKDE0MCwgMzksIDMpO1xcbiAgLS1lcnJvci1jb2xvcjogI2IzMjYxZTtcXG4gIC0tZm9udC1mYW1pbHk6ICdGaXJhIE1vbm8nLCBtb25vc3BhY2U7XFxuICAtLWZvbnQtZmFtaWx5LWNvbnNvbGFzOiBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2U7XFxufVxcblxcbmJvZHkge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBtYXJnaW46IDBweDtcXG4gIHBhZGRpbmc6IDBweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjc7XFxuICBjb2xvcjogIzAwMDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHkpO1xcbiAgcGFkZGluZy1ib3R0b206IDI0cHg7XFxufVxcblxcbioge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuLmNvbnRhaW5lciB7XFxuICB3aWR0aDogY2FsYygxMDAlIC0gMTI4cHgpO1xcbiAgbWF4LXdpZHRoOiAxNTM2cHg7XFxuICBtYXJnaW46IDAgYXV0bztcXG59XFxuXFxuLm1lZGl1bS1jb250YWluZXIge1xcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDMycHgpO1xcbiAgbWF4LXdpZHRoOiA5NjBweDtcXG4gIG1hcmdpbjogMCBhdXRvO1xcbn1cXG5cXG4jbmF2YmFyIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiA5NnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG59XFxuXFxuI25hdmJhciBhIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbn1cXG5cXG4jbmF2YmFyIC5jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcblxcbiNuYXZiYXItY2hldnJvbiB7XFxuICB3aWR0aDogMjRweDtcXG4gIGhlaWdodDogMjRweDtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fICsgXCIpO1xcbiAgb3BhY2l0eTogMC4yO1xcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXG59XFxuXFxuI25hdmJhciAubG9nby1yZWYge1xcbiAgd2lkdGg6IG1heC1jb250ZW50O1xcbn1cXG5cXG4jbmF2YmFyIC5sb2dvIHtcXG4gIHdpZHRoOiAxOTZweDtcXG4gIG1hcmdpbi10b3A6IDJweDtcXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3MDBweCkge1xcbiAgI25hdmJhciB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gIH1cXG5cXG4gICNuYXZiYXIgLmNvbnRhaW5lciB7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICB9XFxuXFxuICAjbmF2YmFyIC5sb2dvLXJlZiB7XFxuICAgIG1hcmdpbi10b3A6IDMycHg7XFxuICB9XFxuXFxuICAjbmF2YmFyIC5sb2dvIHtcXG4gICAgbWFyZ2luLXRvcDogMDtcXG4gICAgd2lkdGg6IDI1NnB4O1xcbiAgfVxcblxcbiAgI25hdmJhciAjbmF2YmFyLWNoZXZyb24ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XFxuICB9XFxuXFxuICAjbmF2YmFyICNwbGF5Z3JvdW5kLWFjdGlvbnMge1xcbiAgICBtYXJnaW4tbGVmdDogMDtcXG4gICAgbWFyZ2luOiAzMnB4IDBweDtcXG4gIH1cXG59XFxuXFxuaDEsXFxuaDIge1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG4gIGNvbG9yOiAjMGQxMDJiO1xcbn1cXG5oMSB7XFxuICBmb250LXNpemU6IDI0cHg7XFxufVxcbmgyIHtcXG4gIGZvbnQtc2l6ZTogMjBweDtcXG59XFxuXFxuLmNvbnRlbnQge1xcbiAgaGVpZ2h0OiAxMDB2aDtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA2NHB4KTtcXG4gIG1heC13aWR0aDogOTYwcHg7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIG1hcmdpbjogMCBhdXRvO1xcbn1cXG5cXG4uZ2l0aHViLWNhcmQge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBib3JkZXItcmFkaXVzOiA4cHg7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIHBhZGRpbmc6IDhweDtcXG59XFxuXFxuLmdpdGh1Yi1jYXJkOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNik7XFxuICB0cmFuc2l0aW9uOiAwLjE1cztcXG59XFxuXFxuLmdpdGh1Yi1jYXJkOmFjdGl2ZSxcXG4uZ2l0aHViLWNhcmQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEyKTtcXG4gIHRyYW5zaXRpb246IDAuMTVzO1xcbn1cXG5cXG4uZ2l0aHViLWNhcmQ6OmJlZm9yZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgd2lkdGg6IDMycHg7XFxuICBoZWlnaHQ6IDMycHg7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fICsgXCIpO1xcbiAgYmFja2dyb3VuZC1zaXplOiAyNHB4O1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcXG4gIG1hcmdpbi1yaWdodDogNHB4O1xcbn1cXG5cXG4jcGxheWdyb3VuZC1hY3Rpb25zIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY29sdW1uLWdhcDogMTZweDtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG5cXG4uYnV0dG9uIHtcXG4gIHdpZHRoOiBmaXQtY29udGVudDtcXG4gIGhlaWdodDogZml0LWNvbnRlbnQ7XFxuICBwYWRkaW5nOiAxMnB4IDIwcHg7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgbWFyZ2luOiBub25lO1xcbiAgYm9yZGVyOiBub25lO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZmFtaWx5KTtcXG4gIHRyYW5zaXRpb246IDAuMTVzIGJhY2tncm91bmQtY29sb3I7XFxuICBmb250LXdlaWdodDogNjAwO1xcbn1cXG5cXG4ub3JhbmdlLWJ1dHRvbiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xcbiAgY29sb3I6ICNmZmY7XFxuICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLm9yYW5nZS1idXR0b24tb3V0bGluZWQge1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYWNjZW50LWNvbG9yKTtcXG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5vcmFuZ2UtYnV0dG9uOmhvdmVyLFxcbi5vcmFuZ2UtYnV0dG9uOmFjdGl2ZSxcXG4ub3JhbmdlLWJ1dHRvbjpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hY2NlbnQtZGFyay1jb2xvcik7XFxufVxcblxcbi5vcmFuZ2UtYnV0dG9uLW91dGxpbmVkOmhvdmVyLFxcbi5vcmFuZ2UtYnV0dG9uLW91dGxpbmVkOmFjdGl2ZSxcXG4ub3JhbmdlLWJ1dHRvbi1vdXRsaW5lZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI0MCwgNjgsIDUsIDAuMTIpO1xcbn1cXG5cXG4uY29udGVudC1jYXJkIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5jb250ZW50LWNhcmQtaGVhZGVyIHtcXG4gIGZvbnQtc2l6ZTogMjBweDtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBwYWRkaW5nOiB2YXIoLS1jb250ZW50LWNhcmQtcGFkZGluZyk7XFxufVxcblxcbiNyZXN1bHQge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIG1hcmdpbjogOTZweCBhdXRvO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgLS1ib3QtaWNvbi1jb2xvcjogIzRjYWY1MDtcXG4gIC0tYm90LWljb24tdXJsOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8yX19fICsgXCIpO1xcbn1cXG5cXG4ucmVzdWx0LWRldGVjdGVkIHtcXG4gIC0tYm90LWljb24tY29sb3I6ICNmNDQzMzYgIWltcG9ydGFudDtcXG4gIC0tYm90LWljb24tdXJsOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8zX19fICsgXCIpICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZXN1bHQtZXJyb3Ige1xcbiAgLS1ib3QtaWNvbi1jb2xvcjogdmFyKC0tZXJyb3ItY29sb3IpICFpbXBvcnRhbnQ7XFxuICAtLWJvdC1pY29uLXVybDogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfNF9fXyArIFwiKSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVzdWx0LWJvdC1pY29uLWNvbnRhaW5lciB7XFxuICB3aWR0aDogMTI4cHg7XFxuICBoZWlnaHQ6IDEyOHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLnJlc3VsdC1ib3QtaWNvbi1jb250YWluZXI6OmJlZm9yZSB7XFxuICBjb250ZW50OiAnJztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgb3BhY2l0eTogMC4wODtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHotaW5kZXg6IC0xO1xcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcXG4gIHRyYW5zaXRpb246IDAuMnMgYmFja2dyb3VuZC1jb2xvcjtcXG59XFxuXFxuLnJlc3VsdC1ib3QtaWNvbiB7XFxuICB3aWR0aDogNTJweDtcXG4gIGhlaWdodDogNTJweDtcXG4gIG1hc2staW1hZ2U6IHZhcigtLWJvdC1pY29uLXVybCk7XFxuICAtd2Via2l0LW1hc2staW1hZ2U6IHZhcigtLWJvdC1pY29uLXVybCk7XFxuICBtYXNrLXNpemU6IDEwMCU7XFxuICBtYXNrLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgbWFzay1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdHJhbnNpdGlvbjogMC4ycyBtYXNrLWltYWdlLCAwLjJzIC13ZWJraXQtbWFzay1pbWFnZSwgMC4ycyBiYWNrZ3JvdW5kLWNvbG9yO1xcbn1cXG5cXG4jcmVzdWx0LXRleHQge1xcbiAgbWFyZ2luLXRvcDogMjRweDtcXG4gIGZvbnQtc2l6ZTogMThweDtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBjb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgdHJhbnNpdGlvbjogMC4ycyBjb2xvcjtcXG59XFxuXFxuLmxvZ3MtY29udGVudCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjgyYzM0O1xcbiAgY29sb3I6ICNmZmY7XFxuICBib3JkZXItcmFkaXVzOiAxMnB4O1xcbiAgcGFkZGluZzogMjRweDtcXG4gIG1hcmdpbi10b3A6IDEycHg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktY29uc29sYXMpO1xcbn1cXG5cXG4ubG9ncy1idXR0b25zLWxpc3Qge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG5cXG4ubG9ncy10b3AtYmFyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4ubG9ncy1zZWN0aW9uOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi10b3A6IDI0cHg7XFxufVxcblxcbi5sb2dzLXNlY3Rpb24taGVhZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbn1cXG5cXG4ubG9ncy1zZWN0aW9uLWNvbnRlbnQge1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgbWFyZ2luLXRvcDogMWVtO1xcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xcbn1cXG5cXG4jZXJyb3ItY29udGFpbmVyIHtcXG4gIG1hcmdpbi1ib3R0b206IDk2cHg7XFxuICBwYWRkaW5nOiAyNHB4O1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tZXJyb3ItY29sb3IpO1xcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseS1jb25zb2xhcyk7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBsaW5lLWhlaWdodDogMjtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5lcnJvci1jb250YWluZXItdmlzaWJsZSB7XFxuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbn1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9wbGF5Z3JvdW5kL3N0eWxlLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLCtCQUErQjtFQUMvQixvQ0FBb0M7RUFDcEMsc0JBQXNCO0VBQ3RCLHFDQUFxQztFQUNyQyw4RUFBOEU7QUFDaEY7O0FBRUE7RUFDRSxXQUFXO0VBQ1gsWUFBWTtFQUNaLGVBQWU7RUFDZixXQUFXO0VBQ1gsWUFBWTtFQUNaLHlCQUF5QjtFQUN6QixXQUFXO0VBQ1gsZUFBZTtFQUNmLGtCQUFrQjtFQUNsQixrQkFBa0I7RUFDbEIsZ0JBQWdCO0VBQ2hCLCtCQUErQjtFQUMvQixvQkFBb0I7QUFDdEI7O0FBRUE7RUFDRSxzQkFBc0I7QUFDeEI7O0FBRUE7RUFDRSx5QkFBeUI7RUFDekIsaUJBQWlCO0VBQ2pCLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSx3QkFBd0I7RUFDeEIsZ0JBQWdCO0VBQ2hCLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSxXQUFXO0VBQ1gsWUFBWTtFQUNaLHNCQUFzQjtBQUN4Qjs7QUFFQTtFQUNFLHFCQUFxQjtFQUNyQixjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQixZQUFZO0FBQ2Q7O0FBRUE7RUFDRSxXQUFXO0VBQ1gsWUFBWTtFQUNaLDRCQUE0QjtFQUM1QiwyQkFBMkI7RUFDM0IseURBQXFEO0VBQ3JELFlBQVk7RUFDWixnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSxZQUFZO0VBQ1osZUFBZTtBQUNqQjs7QUFFQTtFQUNFO0lBQ0UsWUFBWTtFQUNkOztF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QUFDakI7O0FBRUE7RUFDRSxlQUFlO0VBQ2YsZUFBZTtFQUNmLHFCQUFxQjtBQUN2Qjs7QUFFQTtFQUNFLG1CQUFtQjtFQUNuQixhQUFhO0VBQ2Isb0NBQW9DO0VBQ3BDLG1CQUFtQjtFQUNuQix3Q0FBd0M7RUFDeEMsZUFBZTtFQUNmLGNBQWM7RUFDZCxhQUFhO0FBQ2Y7O0FBRUE7RUFDRSx5QkFBeUI7QUFDM0JcIixcInNvdXJjZXNDb250ZW50XCI6W1wiOnJvb3Qge1xcbiAgLS1hY2NlbnQtY29sb3I6IHJnYigyNDAsIDY4LCA1KTtcXG4gIC0tYWNjZW50LWRhcmstY29sb3I6IHJnYigxNDAsIDM5LCAzKTtcXG4gIC0tZXJyb3ItY29sb3I6ICNiMzI2MWU7XFxuICAtLWZvbnQtZmFtaWx5OiAnRmlyYSBNb25vJywgbW9ub3NwYWNlO1xcbiAgLS1mb250LWZhbWlseS1jb25zb2xhczogQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBNZW5sbywgQ291cmllciwgbW9ub3NwYWNlO1xcbn1cXG5cXG5ib2R5IHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgbWFyZ2luOiAwcHg7XFxuICBwYWRkaW5nOiAwcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmY3O1xcbiAgY29sb3I6ICMwMDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBvdmVyZmxvdy14OiBoaWRkZW47XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZmFtaWx5KTtcXG4gIHBhZGRpbmctYm90dG9tOiAyNHB4O1xcbn1cXG5cXG4qIHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcblxcbi5jb250YWluZXIge1xcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDEyOHB4KTtcXG4gIG1heC13aWR0aDogMTUzNnB4O1xcbiAgbWFyZ2luOiAwIGF1dG87XFxufVxcblxcbi5tZWRpdW0tY29udGFpbmVyIHtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSAzMnB4KTtcXG4gIG1heC13aWR0aDogOTYwcHg7XFxuICBtYXJnaW46IDAgYXV0bztcXG59XFxuXFxuI25hdmJhciB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogOTZweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxufVxcblxcbiNuYXZiYXIgYSB7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBjb2xvcjogaW5oZXJpdDtcXG59XFxuXFxuI25hdmJhciAuY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4jbmF2YmFyLWNoZXZyb24ge1xcbiAgd2lkdGg6IDI0cHg7XFxuICBoZWlnaHQ6IDI0cHg7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL3Jlc291cmNlcy9jaGV2cm9uX3JpZ2h0LnN2Zyk7XFxuICBvcGFjaXR5OiAwLjI7XFxuICBtYXJnaW4tbGVmdDogOHB4O1xcbn1cXG5cXG4jbmF2YmFyIC5sb2dvLXJlZiB7XFxuICB3aWR0aDogbWF4LWNvbnRlbnQ7XFxufVxcblxcbiNuYXZiYXIgLmxvZ28ge1xcbiAgd2lkdGg6IDE5NnB4O1xcbiAgbWFyZ2luLXRvcDogMnB4O1xcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDcwMHB4KSB7XFxuICAjbmF2YmFyIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgfVxcblxcbiAgI25hdmJhciAuY29udGFpbmVyIHtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIH1cXG5cXG4gICNuYXZiYXIgLmxvZ28tcmVmIHtcXG4gICAgbWFyZ2luLXRvcDogMzJweDtcXG4gIH1cXG5cXG4gICNuYXZiYXIgLmxvZ28ge1xcbiAgICBtYXJnaW4tdG9wOiAwO1xcbiAgICB3aWR0aDogMjU2cHg7XFxuICB9XFxuXFxuICAjbmF2YmFyICNuYXZiYXItY2hldnJvbiB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcXG4gIH1cXG5cXG4gICNuYXZiYXIgI3BsYXlncm91bmQtYWN0aW9ucyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwO1xcbiAgICBtYXJnaW46IDMycHggMHB4O1xcbiAgfVxcbn1cXG5cXG5oMSxcXG5oMiB7XFxuICBmb250LXdlaWdodDogNzAwO1xcbiAgY29sb3I6ICMwZDEwMmI7XFxufVxcbmgxIHtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG59XFxuaDIge1xcbiAgZm9udC1zaXplOiAyMHB4O1xcbn1cXG5cXG4uY29udGVudCB7XFxuICBoZWlnaHQ6IDEwMHZoO1xcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDY0cHgpO1xcbiAgbWF4LXdpZHRoOiA5NjBweDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgbWFyZ2luOiAwIGF1dG87XFxufVxcblxcbi5naXRodWItY2FyZCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJvcmRlci1yYWRpdXM6IDhweDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgcGFkZGluZzogOHB4O1xcbn1cXG5cXG4uZ2l0aHViLWNhcmQ6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA2KTtcXG4gIHRyYW5zaXRpb246IDAuMTVzO1xcbn1cXG5cXG4uZ2l0aHViLWNhcmQ6YWN0aXZlLFxcbi5naXRodWItY2FyZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMTIpO1xcbiAgdHJhbnNpdGlvbjogMC4xNXM7XFxufVxcblxcbi5naXRodWItY2FyZDo6YmVmb3JlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgY29udGVudDogJyc7XFxuICB3aWR0aDogMzJweDtcXG4gIGhlaWdodDogMzJweDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9yZXNvdXJjZXMvZ2l0aHViX2ljb24uc3ZnKTtcXG4gIGJhY2tncm91bmQtc2l6ZTogMjRweDtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICBtYXJnaW4tcmlnaHQ6IDRweDtcXG59XFxuXFxuI3BsYXlncm91bmQtYWN0aW9ucyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGNvbHVtbi1nYXA6IDE2cHg7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuXFxuLmJ1dHRvbiB7XFxuICB3aWR0aDogZml0LWNvbnRlbnQ7XFxuICBoZWlnaHQ6IGZpdC1jb250ZW50O1xcbiAgcGFkZGluZzogMTJweCAyMHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIG1hcmdpbjogbm9uZTtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseSk7XFxuICB0cmFuc2l0aW9uOiAwLjE1cyBiYWNrZ3JvdW5kLWNvbG9yO1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG59XFxuXFxuLm9yYW5nZS1idXR0b24ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5vcmFuZ2UtYnV0dG9uLW91dGxpbmVkIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWFjY2VudC1jb2xvcik7XFxuICBjb2xvcjogdmFyKC0tYWNjZW50LWNvbG9yKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4ub3JhbmdlLWJ1dHRvbjpob3ZlcixcXG4ub3JhbmdlLWJ1dHRvbjphY3RpdmUsXFxuLm9yYW5nZS1idXR0b246Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYWNjZW50LWRhcmstY29sb3IpO1xcbn1cXG5cXG4ub3JhbmdlLWJ1dHRvbi1vdXRsaW5lZDpob3ZlcixcXG4ub3JhbmdlLWJ1dHRvbi1vdXRsaW5lZDphY3RpdmUsXFxuLm9yYW5nZS1idXR0b24tb3V0bGluZWQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNDAsIDY4LCA1LCAwLjEyKTtcXG59XFxuXFxuLmNvbnRlbnQtY2FyZCB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4uY29udGVudC1jYXJkLWhlYWRlciB7XFxuICBmb250LXNpemU6IDIwcHg7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgcGFkZGluZzogdmFyKC0tY29udGVudC1jYXJkLXBhZGRpbmcpO1xcbn1cXG5cXG4jcmVzdWx0IHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBtYXJnaW46IDk2cHggYXV0bztcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIC0tYm90LWljb24tY29sb3I6ICM0Y2FmNTA7XFxuICAtLWJvdC1pY29uLXVybDogdXJsKC4uL3Jlc291cmNlcy9yb2JvdC1vZmYtb3V0bGluZS5zdmcpO1xcbn1cXG5cXG4ucmVzdWx0LWRldGVjdGVkIHtcXG4gIC0tYm90LWljb24tY29sb3I6ICNmNDQzMzYgIWltcG9ydGFudDtcXG4gIC0tYm90LWljb24tdXJsOiB1cmwoLi4vcmVzb3VyY2VzL3JvYm90LW91dGxpbmUuc3ZnKSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVzdWx0LWVycm9yIHtcXG4gIC0tYm90LWljb24tY29sb3I6IHZhcigtLWVycm9yLWNvbG9yKSAhaW1wb3J0YW50O1xcbiAgLS1ib3QtaWNvbi11cmw6IHVybCguLi9yZXNvdXJjZXMvYWxlcnQtY2lyY2xlLW91dGxpbmUuc3ZnKSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVzdWx0LWJvdC1pY29uLWNvbnRhaW5lciB7XFxuICB3aWR0aDogMTI4cHg7XFxuICBoZWlnaHQ6IDEyOHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLnJlc3VsdC1ib3QtaWNvbi1jb250YWluZXI6OmJlZm9yZSB7XFxuICBjb250ZW50OiAnJztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgb3BhY2l0eTogMC4wODtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHotaW5kZXg6IC0xO1xcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcXG4gIHRyYW5zaXRpb246IDAuMnMgYmFja2dyb3VuZC1jb2xvcjtcXG59XFxuXFxuLnJlc3VsdC1ib3QtaWNvbiB7XFxuICB3aWR0aDogNTJweDtcXG4gIGhlaWdodDogNTJweDtcXG4gIG1hc2staW1hZ2U6IHZhcigtLWJvdC1pY29uLXVybCk7XFxuICAtd2Via2l0LW1hc2staW1hZ2U6IHZhcigtLWJvdC1pY29uLXVybCk7XFxuICBtYXNrLXNpemU6IDEwMCU7XFxuICBtYXNrLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgbWFzay1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdHJhbnNpdGlvbjogMC4ycyBtYXNrLWltYWdlLCAwLjJzIC13ZWJraXQtbWFzay1pbWFnZSwgMC4ycyBiYWNrZ3JvdW5kLWNvbG9yO1xcbn1cXG5cXG4jcmVzdWx0LXRleHQge1xcbiAgbWFyZ2luLXRvcDogMjRweDtcXG4gIGZvbnQtc2l6ZTogMThweDtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBjb2xvcjogdmFyKC0tYm90LWljb24tY29sb3IpO1xcbiAgdHJhbnNpdGlvbjogMC4ycyBjb2xvcjtcXG59XFxuXFxuLmxvZ3MtY29udGVudCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjgyYzM0O1xcbiAgY29sb3I6ICNmZmY7XFxuICBib3JkZXItcmFkaXVzOiAxMnB4O1xcbiAgcGFkZGluZzogMjRweDtcXG4gIG1hcmdpbi10b3A6IDEycHg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktY29uc29sYXMpO1xcbn1cXG5cXG4ubG9ncy1idXR0b25zLWxpc3Qge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG5cXG4ubG9ncy10b3AtYmFyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4ubG9ncy1zZWN0aW9uOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi10b3A6IDI0cHg7XFxufVxcblxcbi5sb2dzLXNlY3Rpb24taGVhZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtY29sb3IpO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbn1cXG5cXG4ubG9ncy1zZWN0aW9uLWNvbnRlbnQge1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgbWFyZ2luLXRvcDogMWVtO1xcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xcbn1cXG5cXG4jZXJyb3ItY29udGFpbmVyIHtcXG4gIG1hcmdpbi1ib3R0b206IDk2cHg7XFxuICBwYWRkaW5nOiAyNHB4O1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tZXJyb3ItY29sb3IpO1xcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseS1jb25zb2xhcyk7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBsaW5lLWhlaWdodDogMjtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5lcnJvci1jb250YWluZXItdmlzaWJsZSB7XFxuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107IC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblxuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IFwiXCI7XG4gICAgICB2YXIgbmVlZExheWVyID0gdHlwZW9mIGl0ZW1bNV0gIT09IFwidW5kZWZpbmVkXCI7XG5cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcblxuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9OyAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuXG5cbiAgbGlzdC5pID0gZnVuY3Rpb24gaShtb2R1bGVzLCBtZWRpYSwgZGVkdXBlLCBzdXBwb3J0cywgbGF5ZXIpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIHVuZGVmaW5lZF1dO1xuICAgIH1cblxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRoaXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIGlkID0gdGhpc1trXVswXTtcblxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBtb2R1bGVzLmxlbmd0aDsgX2srKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfa10pO1xuXG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgbGF5ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtWzVdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChtZWRpYSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdXBwb3J0cykge1xuICAgICAgICBpZiAoIWl0ZW1bNF0pIHtcbiAgICAgICAgICBpdGVtWzRdID0gXCJcIi5jb25jYXQoc3VwcG9ydHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs0XSA9IHN1cHBvcnRzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGxpc3Q7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdXJsID0gU3RyaW5nKHVybC5fX2VzTW9kdWxlID8gdXJsLmRlZmF1bHQgOiB1cmwpOyAvLyBJZiB1cmwgaXMgYWxyZWFkeSB3cmFwcGVkIGluIHF1b3RlcywgcmVtb3ZlIHRoZW1cblxuICBpZiAoL15bJ1wiXS4qWydcIl0kLy50ZXN0KHVybCkpIHtcbiAgICB1cmwgPSB1cmwuc2xpY2UoMSwgLTEpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuaGFzaCkge1xuICAgIHVybCArPSBvcHRpb25zLmhhc2g7XG4gIH0gLy8gU2hvdWxkIHVybCBiZSB3cmFwcGVkP1xuICAvLyBTZWUgaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMtMy8jdXJsc1xuXG5cbiAgaWYgKC9bXCInKCkgXFx0XFxuXXwoJTIwKS8udGVzdCh1cmwpIHx8IG9wdGlvbnMubmVlZFF1b3Rlcykge1xuICAgIHJldHVybiBcIlxcXCJcIi5jb25jYXQodXJsLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKS5yZXBsYWNlKC9cXG4vZywgXCJcXFxcblwiKSwgXCJcXFwiXCIpO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgdmFyIGNvbnRlbnQgPSBpdGVtWzFdO1xuICB2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG5cbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgdmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdCB8fCBcIlwiKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHN0eWxlc0luRE9NID0gW107XG5cbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5ET00ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5ET01baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleEJ5SWRlbnRpZmllciA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXSxcbiAgICAgIHN1cHBvcnRzOiBpdGVtWzRdLFxuICAgICAgbGF5ZXI6IGl0ZW1bNV1cbiAgICB9O1xuXG4gICAgaWYgKGluZGV4QnlJZGVudGlmaWVyICE9PSAtMSkge1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnJlZmVyZW5jZXMrKztcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS51cGRhdGVyKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB1cGRhdGVyID0gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLmJ5SW5kZXggPSBpO1xuICAgICAgc3R5bGVzSW5ET00uc3BsaWNlKGksIDAsIHtcbiAgICAgICAgaWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgICAgdXBkYXRlcjogdXBkYXRlcixcbiAgICAgICAgcmVmZXJlbmNlczogMVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWRlbnRpZmllcnMucHVzaChpZGVudGlmaWVyKTtcbiAgfVxuXG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cblxuZnVuY3Rpb24gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucykge1xuICB2YXIgYXBpID0gb3B0aW9ucy5kb21BUEkob3B0aW9ucyk7XG4gIGFwaS51cGRhdGUob2JqKTtcblxuICB2YXIgdXBkYXRlciA9IGZ1bmN0aW9uIHVwZGF0ZXIobmV3T2JqKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiYgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiYgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCAmJiBuZXdPYmouc3VwcG9ydHMgPT09IG9iai5zdXBwb3J0cyAmJiBuZXdPYmoubGF5ZXIgPT09IG9iai5sYXllcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFwaS51cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbW92ZSgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gdXBkYXRlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGlzdCA9IGxpc3QgfHwgW107XG4gIHZhciBsYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUobmV3TGlzdCkge1xuICAgIG5ld0xpc3QgPSBuZXdMaXN0IHx8IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cblxuICAgIHZhciBuZXdMYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obmV3TGlzdCwgb3B0aW9ucyk7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9pZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW19pXTtcblxuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHN0eWxlc0luRE9NW19pbmRleF0ucmVmZXJlbmNlcyA9PT0gMCkge1xuICAgICAgICBzdHlsZXNJbkRPTVtfaW5kZXhdLnVwZGF0ZXIoKTtcblxuICAgICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoX2luZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgbWVtbyA9IHt9O1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cbmZ1bmN0aW9uIGdldFRhcmdldCh0YXJnZXQpIHtcbiAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7IC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG5cbiAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gIH1cblxuICByZXR1cm4gbWVtb1t0YXJnZXRdO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxuZnVuY3Rpb24gaW5zZXJ0QnlTZWxlY3RvcihpbnNlcnQsIHN0eWxlKSB7XG4gIHZhciB0YXJnZXQgPSBnZXRUYXJnZXQoaW5zZXJ0KTtcblxuICBpZiAoIXRhcmdldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gIH1cblxuICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydEJ5U2VsZWN0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gIG9wdGlvbnMuc2V0QXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLmF0dHJpYnV0ZXMpO1xuICBvcHRpb25zLmluc2VydChlbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xuICByZXR1cm4gZWxlbWVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzKHN0eWxlRWxlbWVudCkge1xuICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09IFwidW5kZWZpbmVkXCIgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG5cbiAgaWYgKG5vbmNlKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIG5vbmNlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlczsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gXCJcIjtcblxuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQob2JqLnN1cHBvcnRzLCBcIikge1wiKTtcbiAgfVxuXG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJAbWVkaWEgXCIuY29uY2F0KG9iai5tZWRpYSwgXCIge1wiKTtcbiAgfVxuXG4gIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2Ygb2JqLmxheWVyICE9PSBcInVuZGVmaW5lZFwiO1xuXG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJAbGF5ZXJcIi5jb25jYXQob2JqLmxheWVyLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQob2JqLmxheWVyKSA6IFwiXCIsIFwiIHtcIik7XG4gIH1cblxuICBjc3MgKz0gb2JqLmNzcztcblxuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuICBpZiAoc291cmNlTWFwICYmIHR5cGVvZiBidG9hICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH0gLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuXG4gIG9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZUVsZW1lbnQucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudCk7XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG5mdW5jdGlvbiBkb21BUEkob3B0aW9ucykge1xuICB2YXIgc3R5bGVFbGVtZW50ID0gb3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG4gIHJldHVybiB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUob2JqKSB7XG4gICAgICBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaik7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkb21BUEk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQpIHtcbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R5bGVUYWdUcmFuc2Zvcm07IiwiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vKiBVQVBhcnNlci5qcyB2MS4wLjM1XG4gICBDb3B5cmlnaHQgwqkgMjAxMi0yMDIxIEZhaXNhbCBTYWxtYW4gPGZAZmFpc2FsbWFuLmNvbT5cbiAgIE1JVCBMaWNlbnNlICovLypcbiAgIERldGVjdCBCcm93c2VyLCBFbmdpbmUsIE9TLCBDUFUsIGFuZCBEZXZpY2UgdHlwZS9tb2RlbCBmcm9tIFVzZXItQWdlbnQgZGF0YS5cbiAgIFN1cHBvcnRzIGJyb3dzZXIgJiBub2RlLmpzIGVudmlyb25tZW50LiBcbiAgIERlbW8gICA6IGh0dHBzOi8vZmFpc2FsbWFuLmdpdGh1Yi5pby91YS1wYXJzZXItanNcbiAgIFNvdXJjZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWlzYWxtYW4vdWEtcGFyc2VyLWpzICovXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuKGZ1bmN0aW9uICh3aW5kb3csIHVuZGVmaW5lZCkge1xuXG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDb25zdGFudHNcbiAgICAvLy8vLy8vLy8vLy8vXG5cblxuICAgIHZhciBMSUJWRVJTSU9OICA9ICcxLjAuMzUnLFxuICAgICAgICBFTVBUWSAgICAgICA9ICcnLFxuICAgICAgICBVTktOT1dOICAgICA9ICc/JyxcbiAgICAgICAgRlVOQ19UWVBFICAgPSAnZnVuY3Rpb24nLFxuICAgICAgICBVTkRFRl9UWVBFICA9ICd1bmRlZmluZWQnLFxuICAgICAgICBPQkpfVFlQRSAgICA9ICdvYmplY3QnLFxuICAgICAgICBTVFJfVFlQRSAgICA9ICdzdHJpbmcnLFxuICAgICAgICBNQUpPUiAgICAgICA9ICdtYWpvcicsXG4gICAgICAgIE1PREVMICAgICAgID0gJ21vZGVsJyxcbiAgICAgICAgTkFNRSAgICAgICAgPSAnbmFtZScsXG4gICAgICAgIFRZUEUgICAgICAgID0gJ3R5cGUnLFxuICAgICAgICBWRU5ET1IgICAgICA9ICd2ZW5kb3InLFxuICAgICAgICBWRVJTSU9OICAgICA9ICd2ZXJzaW9uJyxcbiAgICAgICAgQVJDSElURUNUVVJFPSAnYXJjaGl0ZWN0dXJlJyxcbiAgICAgICAgQ09OU09MRSAgICAgPSAnY29uc29sZScsXG4gICAgICAgIE1PQklMRSAgICAgID0gJ21vYmlsZScsXG4gICAgICAgIFRBQkxFVCAgICAgID0gJ3RhYmxldCcsXG4gICAgICAgIFNNQVJUVFYgICAgID0gJ3NtYXJ0dHYnLFxuICAgICAgICBXRUFSQUJMRSAgICA9ICd3ZWFyYWJsZScsXG4gICAgICAgIEVNQkVEREVEICAgID0gJ2VtYmVkZGVkJyxcbiAgICAgICAgVUFfTUFYX0xFTkdUSCA9IDM1MDtcblxuICAgIHZhciBBTUFaT04gID0gJ0FtYXpvbicsXG4gICAgICAgIEFQUExFICAgPSAnQXBwbGUnLFxuICAgICAgICBBU1VTICAgID0gJ0FTVVMnLFxuICAgICAgICBCTEFDS0JFUlJZID0gJ0JsYWNrQmVycnknLFxuICAgICAgICBCUk9XU0VSID0gJ0Jyb3dzZXInLFxuICAgICAgICBDSFJPTUUgID0gJ0Nocm9tZScsXG4gICAgICAgIEVER0UgICAgPSAnRWRnZScsXG4gICAgICAgIEZJUkVGT1ggPSAnRmlyZWZveCcsXG4gICAgICAgIEdPT0dMRSAgPSAnR29vZ2xlJyxcbiAgICAgICAgSFVBV0VJICA9ICdIdWF3ZWknLFxuICAgICAgICBMRyAgICAgID0gJ0xHJyxcbiAgICAgICAgTUlDUk9TT0ZUID0gJ01pY3Jvc29mdCcsXG4gICAgICAgIE1PVE9ST0xBICA9ICdNb3Rvcm9sYScsXG4gICAgICAgIE9QRVJBICAgPSAnT3BlcmEnLFxuICAgICAgICBTQU1TVU5HID0gJ1NhbXN1bmcnLFxuICAgICAgICBTSEFSUCAgID0gJ1NoYXJwJyxcbiAgICAgICAgU09OWSAgICA9ICdTb255JyxcbiAgICAgICAgVklFUkEgICA9ICdWaWVyYScsXG4gICAgICAgIFhJQU9NSSAgPSAnWGlhb21pJyxcbiAgICAgICAgWkVCUkEgICA9ICdaZWJyYScsXG4gICAgICAgIEZBQ0VCT09LICAgID0gJ0ZhY2Vib29rJyxcbiAgICAgICAgQ0hST01JVU1fT1MgPSAnQ2hyb21pdW0gT1MnLFxuICAgICAgICBNQUNfT1MgID0gJ01hYyBPUyc7XG5cbiAgICAvLy8vLy8vLy8vL1xuICAgIC8vIEhlbHBlclxuICAgIC8vLy8vLy8vLy9cblxuICAgIHZhciBleHRlbmQgPSBmdW5jdGlvbiAocmVnZXhlcywgZXh0ZW5zaW9ucykge1xuICAgICAgICAgICAgdmFyIG1lcmdlZFJlZ2V4ZXMgPSB7fTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gcmVnZXhlcykge1xuICAgICAgICAgICAgICAgIGlmIChleHRlbnNpb25zW2ldICYmIGV4dGVuc2lvbnNbaV0ubGVuZ3RoICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBtZXJnZWRSZWdleGVzW2ldID0gZXh0ZW5zaW9uc1tpXS5jb25jYXQocmVnZXhlc1tpXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbWVyZ2VkUmVnZXhlc1tpXSA9IHJlZ2V4ZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1lcmdlZFJlZ2V4ZXM7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcml6ZSA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgICAgICAgICAgIHZhciBlbnVtcyA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGVudW1zW2FycltpXS50b1VwcGVyQ2FzZSgpXSA9IGFycltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlbnVtcztcbiAgICAgICAgfSxcbiAgICAgICAgaGFzID0gZnVuY3Rpb24gKHN0cjEsIHN0cjIpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygc3RyMSA9PT0gU1RSX1RZUEUgPyBsb3dlcml6ZShzdHIyKS5pbmRleE9mKGxvd2VyaXplKHN0cjEpKSAhPT0gLTEgOiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgbG93ZXJpemUgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1ham9yaXplID0gZnVuY3Rpb24gKHZlcnNpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YodmVyc2lvbikgPT09IFNUUl9UWVBFID8gdmVyc2lvbi5yZXBsYWNlKC9bXlxcZFxcLl0vZywgRU1QVFkpLnNwbGl0KCcuJylbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHRyaW0gPSBmdW5jdGlvbiAoc3RyLCBsZW4pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Yoc3RyKSA9PT0gU1RSX1RZUEUpIHtcbiAgICAgICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXlxcc1xccyovLCBFTVBUWSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZihsZW4pID09PSBVTkRFRl9UWVBFID8gc3RyIDogc3RyLnN1YnN0cmluZygwLCBVQV9NQVhfTEVOR1RIKTtcbiAgICAgICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTWFwIGhlbHBlclxuICAgIC8vLy8vLy8vLy8vLy8vXG5cbiAgICB2YXIgcmd4TWFwcGVyID0gZnVuY3Rpb24gKHVhLCBhcnJheXMpIHtcblxuICAgICAgICAgICAgdmFyIGkgPSAwLCBqLCBrLCBwLCBxLCBtYXRjaGVzLCBtYXRjaDtcblxuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFsbCByZWdleGVzIG1hcHNcbiAgICAgICAgICAgIHdoaWxlIChpIDwgYXJyYXlzLmxlbmd0aCAmJiAhbWF0Y2hlcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlZ2V4ID0gYXJyYXlzW2ldLCAgICAgICAvLyBldmVuIHNlcXVlbmNlICgwLDIsNCwuLilcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMgPSBhcnJheXNbaSArIDFdOyAgIC8vIG9kZCBzZXF1ZW5jZSAoMSwzLDUsLi4pXG4gICAgICAgICAgICAgICAgaiA9IGsgPSAwO1xuXG4gICAgICAgICAgICAgICAgLy8gdHJ5IG1hdGNoaW5nIHVhc3RyaW5nIHdpdGggcmVnZXhlc1xuICAgICAgICAgICAgICAgIHdoaWxlIChqIDwgcmVnZXgubGVuZ3RoICYmICFtYXRjaGVzKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWdleFtqXSkgeyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0gcmVnZXhbaisrXS5leGVjKHVhKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoISFtYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IG1hdGNoZXNbKytrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gcHJvcHNbcF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgZ2l2ZW4gcHJvcGVydHkgaXMgYWN0dWFsbHkgYXJyYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHEgPT09IE9CSl9UWVBFICYmIHEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcVsxXSA9PSBGVU5DX1RZUEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhc3NpZ24gbW9kaWZpZWQgbWF0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gcVsxXS5jYWxsKHRoaXMsIG1hdGNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzaWduIGdpdmVuIHZhbHVlLCBpZ25vcmUgcmVnZXggbWF0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gcVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgd2hldGhlciBmdW5jdGlvbiBvciByZWdleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBxWzFdID09PSBGVU5DX1RZUEUgJiYgIShxWzFdLmV4ZWMgJiYgcVsxXS50ZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGwgZnVuY3Rpb24gKHVzdWFsbHkgc3RyaW5nIG1hcHBlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gbWF0Y2ggPyBxWzFdLmNhbGwodGhpcywgbWF0Y2gsIHFbMl0pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzYW5pdGl6ZSBtYXRjaCB1c2luZyBnaXZlbiByZWdleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbcVswXV0gPSBtYXRjaCA/IG1hdGNoLnJlcGxhY2UocVsxXSwgcVsyXSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocS5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gbWF0Y2ggPyBxWzNdLmNhbGwodGhpcywgbWF0Y2gucmVwbGFjZShxWzFdLCBxWzJdKSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FdID0gbWF0Y2ggPyBtYXRjaCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHN0ck1hcHBlciA9IGZ1bmN0aW9uIChzdHIsIG1hcCkge1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIG1hcCkge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGN1cnJlbnQgdmFsdWUgaXMgYXJyYXlcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1hcFtpXSA9PT0gT0JKX1RZUEUgJiYgbWFwW2ldLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXBbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXMobWFwW2ldW2pdLCBzdHIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpID09PSBVTktOT1dOKSA/IHVuZGVmaW5lZCA6IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhhcyhtYXBbaV0sIHN0cikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpID09PSBVTktOT1dOKSA/IHVuZGVmaW5lZCA6IGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9O1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU3RyaW5nIG1hcFxuICAgIC8vLy8vLy8vLy8vLy8vXG5cbiAgICAvLyBTYWZhcmkgPCAzLjBcbiAgICB2YXIgb2xkU2FmYXJpTWFwID0ge1xuICAgICAgICAgICAgJzEuMCcgICA6ICcvOCcsXG4gICAgICAgICAgICAnMS4yJyAgIDogJy8xJyxcbiAgICAgICAgICAgICcxLjMnICAgOiAnLzMnLFxuICAgICAgICAgICAgJzIuMCcgICA6ICcvNDEyJyxcbiAgICAgICAgICAgICcyLjAuMicgOiAnLzQxNicsXG4gICAgICAgICAgICAnMi4wLjMnIDogJy80MTcnLFxuICAgICAgICAgICAgJzIuMC40JyA6ICcvNDE5JyxcbiAgICAgICAgICAgICc/JyAgICAgOiAnLydcbiAgICAgICAgfSxcbiAgICAgICAgd2luZG93c1ZlcnNpb25NYXAgPSB7XG4gICAgICAgICAgICAnTUUnICAgICAgICA6ICc0LjkwJyxcbiAgICAgICAgICAgICdOVCAzLjExJyAgIDogJ05UMy41MScsXG4gICAgICAgICAgICAnTlQgNC4wJyAgICA6ICdOVDQuMCcsXG4gICAgICAgICAgICAnMjAwMCcgICAgICA6ICdOVCA1LjAnLFxuICAgICAgICAgICAgJ1hQJyAgICAgICAgOiBbJ05UIDUuMScsICdOVCA1LjInXSxcbiAgICAgICAgICAgICdWaXN0YScgICAgIDogJ05UIDYuMCcsXG4gICAgICAgICAgICAnNycgICAgICAgICA6ICdOVCA2LjEnLFxuICAgICAgICAgICAgJzgnICAgICAgICAgOiAnTlQgNi4yJyxcbiAgICAgICAgICAgICc4LjEnICAgICAgIDogJ05UIDYuMycsXG4gICAgICAgICAgICAnMTAnICAgICAgICA6IFsnTlQgNi40JywgJ05UIDEwLjAnXSxcbiAgICAgICAgICAgICdSVCcgICAgICAgIDogJ0FSTSdcbiAgICB9O1xuXG4gICAgLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSZWdleCBtYXBcbiAgICAvLy8vLy8vLy8vLy8vXG5cbiAgICB2YXIgcmVnZXhlcyA9IHtcblxuICAgICAgICBicm93c2VyIDogW1tcblxuICAgICAgICAgICAgL1xcYig/OmNybW98Y3Jpb3MpXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hyb21lIGZvciBBbmRyb2lkL2lPU1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnQ2hyb21lJ11dLCBbXG4gICAgICAgICAgICAvZWRnKD86ZXxpb3N8YSk/XFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pY3Jvc29mdCBFZGdlXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdFZGdlJ11dLCBbXG5cbiAgICAgICAgICAgIC8vIFByZXN0byBiYXNlZFxuICAgICAgICAgICAgLyhvcGVyYSBtaW5pKVxcLyhbLVxcd1xcLl0rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcGVyYSBNaW5pXG4gICAgICAgICAgICAvKG9wZXJhIFttb2JpbGV0YWJdezMsNn0pXFxiLit2ZXJzaW9uXFwvKFstXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAvLyBPcGVyYSBNb2JpL1RhYmxldFxuICAgICAgICAgICAgLyhvcGVyYSkoPzouK3ZlcnNpb25cXC98W1xcLyBdKykoW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3BlcmFcbiAgICAgICAgICAgIF0sIFtOQU1FLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgL29waW9zW1xcLyBdKyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcGVyYSBtaW5pIG9uIGlwaG9uZSA+PSA4LjBcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgT1BFUkErJyBNaW5pJ11dLCBbXG4gICAgICAgICAgICAvXFxib3ByXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcGVyYSBXZWJraXRcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgT1BFUkFdXSwgW1xuXG4gICAgICAgICAgICAvLyBNaXhlZFxuICAgICAgICAgICAgLyhraW5kbGUpXFwvKFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLaW5kbGVcbiAgICAgICAgICAgIC8obHVuYXNjYXBlfG1heHRob258bmV0ZnJvbnR8amFzbWluZXxibGF6ZXIpW1xcLyBdPyhbXFx3XFwuXSopL2ksICAgICAgLy8gTHVuYXNjYXBlL01heHRob24vTmV0ZnJvbnQvSmFzbWluZS9CbGF6ZXJcbiAgICAgICAgICAgIC8vIFRyaWRlbnQgYmFzZWRcbiAgICAgICAgICAgIC8oYXZhbnQgfGllbW9iaWxlfHNsaW0pKD86YnJvd3Nlcik/W1xcLyBdPyhbXFx3XFwuXSopL2ksICAgICAgICAgICAgICAgLy8gQXZhbnQvSUVNb2JpbGUvU2xpbUJyb3dzZXJcbiAgICAgICAgICAgIC8oYmE/aWR1YnJvd3NlcilbXFwvIF0/KFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmFpZHUgQnJvd3NlclxuICAgICAgICAgICAgLyg/Om1zfFxcKCkoaWUpIChbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlcm5ldCBFeHBsb3JlclxuXG4gICAgICAgICAgICAvLyBXZWJraXQvS0hUTUwgYmFzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZsb2NrL1JvY2tNZWx0L01pZG9yaS9FcGlwaGFueS9TaWxrL1NreWZpcmUvQm9sdC9Jcm9uL0lyaWRpdW0vUGhhbnRvbUpTL0Jvd3Nlci9RdXBaaWxsYS9GYWxrb25cbiAgICAgICAgICAgIC8oZmxvY2t8cm9ja21lbHR8bWlkb3JpfGVwaXBoYW55fHNpbGt8c2t5ZmlyZXxib2x0fGlyb258dml2YWxkaXxpcmlkaXVtfHBoYW50b21qc3xib3dzZXJ8cXVhcmt8cXVwemlsbGF8ZmFsa29ufHJla29ucXxwdWZmaW58YnJhdmV8d2hhbGUoPyEuK25hdmVyKXxxcWJyb3dzZXJsaXRlfHFxfGR1Y2tkdWNrZ28pXFwvKFstXFx3XFwuXSspL2ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJla29ucS9QdWZmaW4vQnJhdmUvV2hhbGUvUVFCcm93c2VyTGl0ZS9RUSwgYWthIFNob3VRXG4gICAgICAgICAgICAvKGhleXRhcHxvdmkpYnJvd3NlclxcLyhbXFxkXFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhleXRhcC9PdmlcbiAgICAgICAgICAgIC8od2VpYm8pX18oW1xcZFxcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZWlib1xuICAgICAgICAgICAgXSwgW05BTUUsIFZFUlNJT05dLCBbXG4gICAgICAgICAgICAvKD86XFxidWM/ID9icm93c2VyfCg/Omp1Yy4rKXVjd2ViKVtcXC8gXT8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAvLyBVQ0Jyb3dzZXJcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ1VDJytCUk9XU0VSXV0sIFtcbiAgICAgICAgICAgIC9taWNyb20uK1xcYnFiY29yZVxcLyhbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlQ2hhdCBEZXNrdG9wIGZvciBXaW5kb3dzIEJ1aWx0LWluIEJyb3dzZXJcbiAgICAgICAgICAgIC9cXGJxYmNvcmVcXC8oW1xcd1xcLl0rKS4rbWljcm9tL2lcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ1dlQ2hhdChXaW4pIERlc2t0b3AnXV0sIFtcbiAgICAgICAgICAgIC9taWNyb21lc3NlbmdlclxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2VDaGF0XG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdXZUNoYXQnXV0sIFtcbiAgICAgICAgICAgIC9rb25xdWVyb3JcXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gS29ucXVlcm9yXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdLb25xdWVyb3InXV0sIFtcbiAgICAgICAgICAgIC90cmlkZW50Litydls6IF0oW1xcd1xcLl17MSw5fSlcXGIuK2xpa2UgZ2Vja28vaSAgICAgICAgICAgICAgICAgICAgICAgLy8gSUUxMVxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnSUUnXV0sIFtcbiAgICAgICAgICAgIC95YSg/OnNlYXJjaCk/YnJvd3NlclxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWWFuZGV4XG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdZYW5kZXgnXV0sIFtcbiAgICAgICAgICAgIC8oYXZhc3R8YXZnKVxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZhc3QvQVZHIFNlY3VyZSBCcm93c2VyXG4gICAgICAgICAgICBdLCBbW05BTUUsIC8oLispLywgJyQxIFNlY3VyZSAnK0JST1dTRVJdLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgL1xcYmZvY3VzXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveCBGb2N1c1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCBGSVJFRk9YKycgRm9jdXMnXV0sIFtcbiAgICAgICAgICAgIC9cXGJvcHRcXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wZXJhIFRvdWNoXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIE9QRVJBKycgVG91Y2gnXV0sIFtcbiAgICAgICAgICAgIC9jb2NfY29jXFx3K1xcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvYyBDb2MgQnJvd3NlclxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnQ29jIENvYyddXSwgW1xuICAgICAgICAgICAgL2RvbGZpblxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb2xwaGluXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdEb2xwaGluJ11dLCBbXG4gICAgICAgICAgICAvY29hc3RcXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wZXJhIENvYXN0XG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIE9QRVJBKycgQ29hc3QnXV0sIFtcbiAgICAgICAgICAgIC9taXVpYnJvd3NlclxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTUlVSSBCcm93c2VyXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdNSVVJICcrQlJPV1NFUl1dLCBbXG4gICAgICAgICAgICAvZnhpb3NcXC8oWy1cXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpcmVmb3ggZm9yIGlPU1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCBGSVJFRk9YXV0sIFtcbiAgICAgICAgICAgIC9cXGJxaWh1fChxaT9obz9vP3wzNjApYnJvd3Nlci9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDM2MFxuICAgICAgICAgICAgXSwgW1tOQU1FLCAnMzYwICcrQlJPV1NFUl1dLCBbXG4gICAgICAgICAgICAvKG9jdWx1c3xzYW1zdW5nfHNhaWxmaXNofGh1YXdlaSlicm93c2VyXFwvKFtcXHdcXC5dKykvaVxuICAgICAgICAgICAgXSwgW1tOQU1FLCAvKC4rKS8sICckMSAnK0JST1dTRVJdLCBWRVJTSU9OXSwgWyAgICAgICAgICAgICAgICAgICAgICAvLyBPY3VsdXMvU2Ftc3VuZy9TYWlsZmlzaC9IdWF3ZWkgQnJvd3NlclxuICAgICAgICAgICAgLyhjb21vZG9fZHJhZ29uKVxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb21vZG8gRHJhZ29uXG4gICAgICAgICAgICBdLCBbW05BTUUsIC9fL2csICcgJ10sIFZFUlNJT05dLCBbXG4gICAgICAgICAgICAvKGVsZWN0cm9uKVxcLyhbXFx3XFwuXSspIHNhZmFyaS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVsZWN0cm9uLWJhc2VkIEFwcFxuICAgICAgICAgICAgLyh0ZXNsYSkoPzogcXRjYXJicm93c2VyfFxcLygyMFxcZFxcZFxcLlstXFx3XFwuXSspKS9pLCAgICAgICAgICAgICAgICAgICAvLyBUZXNsYVxuICAgICAgICAgICAgL20/KHFxYnJvd3NlcnxiYWlkdWJveGFwcHwyMzQ1RXhwbG9yZXIpW1xcLyBdPyhbXFx3XFwuXSspL2kgICAgICAgICAgICAvLyBRUUJyb3dzZXIvQmFpZHUgQXBwLzIzNDUgQnJvd3NlclxuICAgICAgICAgICAgXSwgW05BTUUsIFZFUlNJT05dLCBbXG4gICAgICAgICAgICAvKG1ldGFzcilbXFwvIF0/KFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNvdUdvdUJyb3dzZXJcbiAgICAgICAgICAgIC8obGJicm93c2VyKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGllQmFvIEJyb3dzZXJcbiAgICAgICAgICAgIC9cXFsobGlua2VkaW4pYXBwXFxdL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMaW5rZWRJbiBBcHAgZm9yIGlPUyAmIEFuZHJvaWRcbiAgICAgICAgICAgIF0sIFtOQU1FXSwgW1xuXG4gICAgICAgICAgICAvLyBXZWJWaWV3XG4gICAgICAgICAgICAvKCg/OmZiYW5cXC9mYmlvc3xmYl9pYWJcXC9mYjRhKSg/IS4rZmJhdil8O2ZiYXZcXC8oW1xcd1xcLl0rKTspL2kgICAgICAgLy8gRmFjZWJvb2sgQXBwIGZvciBpT1MgJiBBbmRyb2lkXG4gICAgICAgICAgICBdLCBbW05BTUUsIEZBQ0VCT09LXSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgIC8oa2FrYW8oPzp0YWxrfHN0b3J5KSlbXFwvIF0oW1xcd1xcLl0rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gS2FrYW8gQXBwXG4gICAgICAgICAgICAvKG5hdmVyKVxcKC4qPyhcXGQrXFwuW1xcd1xcLl0rKS4qXFwpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5hdmVyIEluQXBwXG4gICAgICAgICAgICAvc2FmYXJpIChsaW5lKVxcLyhbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExpbmUgQXBwIGZvciBpT1NcbiAgICAgICAgICAgIC9cXGIobGluZSlcXC8oW1xcd1xcLl0rKVxcL2lhYi9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMaW5lIEFwcCBmb3IgQW5kcm9pZFxuICAgICAgICAgICAgLyhjaHJvbWl1bXxpbnN0YWdyYW0pW1xcLyBdKFstXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaHJvbWl1bS9JbnN0YWdyYW1cbiAgICAgICAgICAgIF0sIFtOQU1FLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgL1xcYmdzYVxcLyhbXFx3XFwuXSspIC4qc2FmYXJpXFwvL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvb2dsZSBTZWFyY2ggQXBwbGlhbmNlIG9uIGlPU1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnR1NBJ11dLCBbXG4gICAgICAgICAgICAvbXVzaWNhbF9seSg/Oi4rYXBwXz92ZXJzaW9uXFwvfF8pKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRpa1Rva1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnVGlrVG9rJ11dLCBbXG5cbiAgICAgICAgICAgIC9oZWFkbGVzc2Nocm9tZSg/OlxcLyhbXFx3XFwuXSspfCApL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hyb21lIEhlYWRsZXNzXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIENIUk9NRSsnIEhlYWRsZXNzJ11dLCBbXG5cbiAgICAgICAgICAgIC8gd3ZcXCkuKyhjaHJvbWUpXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENocm9tZSBXZWJWaWV3XG4gICAgICAgICAgICBdLCBbW05BTUUsIENIUk9NRSsnIFdlYlZpZXcnXSwgVkVSU0lPTl0sIFtcblxuICAgICAgICAgICAgL2Ryb2lkLisgdmVyc2lvblxcLyhbXFx3XFwuXSspXFxiLisoPzptb2JpbGUgc2FmYXJpfHNhZmFyaSkvaSAgICAgICAgICAgLy8gQW5kcm9pZCBCcm93c2VyXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdBbmRyb2lkICcrQlJPV1NFUl1dLCBbXG5cbiAgICAgICAgICAgIC8oY2hyb21lfG9tbml3ZWJ8YXJvcmF8W3RpemVub2thXXs1fSA/YnJvd3NlcilcXC92PyhbXFx3XFwuXSspL2kgICAgICAgLy8gQ2hyb21lL09tbmlXZWIvQXJvcmEvVGl6ZW4vTm9raWFcbiAgICAgICAgICAgIF0sIFtOQU1FLCBWRVJTSU9OXSwgW1xuXG4gICAgICAgICAgICAvdmVyc2lvblxcLyhbXFx3XFwuXFwsXSspIC4qbW9iaWxlXFwvXFx3KyAoc2FmYXJpKS9pICAgICAgICAgICAgICAgICAgICAgIC8vIE1vYmlsZSBTYWZhcmlcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ01vYmlsZSBTYWZhcmknXV0sIFtcbiAgICAgICAgICAgIC92ZXJzaW9uXFwvKFtcXHcoXFwufFxcLCldKykgLioobW9iaWxlID9zYWZhcml8c2FmYXJpKS9pICAgICAgICAgICAgICAgIC8vIFNhZmFyaSAmIFNhZmFyaSBNb2JpbGVcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBOQU1FXSwgW1xuICAgICAgICAgICAgL3dlYmtpdC4rPyhtb2JpbGUgP3NhZmFyaXxzYWZhcmkpKFxcL1tcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAvLyBTYWZhcmkgPCAzLjBcbiAgICAgICAgICAgIF0sIFtOQU1FLCBbVkVSU0lPTiwgc3RyTWFwcGVyLCBvbGRTYWZhcmlNYXBdXSwgW1xuXG4gICAgICAgICAgICAvKHdlYmtpdHxraHRtbClcXC8oW1xcd1xcLl0rKS9pXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcblxuICAgICAgICAgICAgLy8gR2Vja28gYmFzZWRcbiAgICAgICAgICAgIC8obmF2aWdhdG9yfG5ldHNjYXBlXFxkPylcXC8oWy1cXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldHNjYXBlXG4gICAgICAgICAgICBdLCBbW05BTUUsICdOZXRzY2FwZSddLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgL21vYmlsZSB2cjsgcnY6KFtcXHdcXC5dKylcXCkuK2ZpcmVmb3gvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94IFJlYWxpdHlcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgRklSRUZPWCsnIFJlYWxpdHknXV0sIFtcbiAgICAgICAgICAgIC9la2lvaGYuKyhmbG93KVxcLyhbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmxvd1xuICAgICAgICAgICAgLyhzd2lmdGZveCkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTd2lmdGZveFxuICAgICAgICAgICAgLyhpY2VkcmFnb258aWNld2Vhc2VsfGNhbWlub3xjaGltZXJhfGZlbm5lY3xtYWVtbyBicm93c2VyfG1pbmltb3xjb25rZXJvcnxrbGFyKVtcXC8gXT8oW1xcd1xcLlxcK10rKS9pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJY2VEcmFnb24vSWNld2Vhc2VsL0NhbWluby9DaGltZXJhL0Zlbm5lYy9NYWVtby9NaW5pbW8vQ29ua2Vyb3IvS2xhclxuICAgICAgICAgICAgLyhzZWFtb25rZXl8ay1tZWxlb258aWNlY2F0fGljZWFwZXxmaXJlYmlyZHxwaG9lbml4fHBhbGVtb29ufGJhc2lsaXNrfHdhdGVyZm94KVxcLyhbLVxcd1xcLl0rKSQvaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveC9TZWFNb25rZXkvSy1NZWxlb24vSWNlQ2F0L0ljZUFwZS9GaXJlYmlyZC9QaG9lbml4XG4gICAgICAgICAgICAvKGZpcmVmb3gpXFwvKFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyIEZpcmVmb3gtYmFzZWRcbiAgICAgICAgICAgIC8obW96aWxsYSlcXC8oW1xcd1xcLl0rKSAuK3J2XFw6LitnZWNrb1xcL1xcZCsvaSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW96aWxsYVxuXG4gICAgICAgICAgICAvLyBPdGhlclxuICAgICAgICAgICAgLyhwb2xhcmlzfGx5bnh8ZGlsbG98aWNhYnxkb3Jpc3xhbWF5YXx3M218bmV0c3VyZnxzbGVpcG5pcnxvYmlnb3xtb3NhaWN8KD86Z298aWNlfHVwKVtcXC4gXT9icm93c2VyKVstXFwvIF0/dj8oW1xcd1xcLl0rKS9pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQb2xhcmlzL0x5bngvRGlsbG8vaUNhYi9Eb3Jpcy9BbWF5YS93M20vTmV0U3VyZi9TbGVpcG5pci9PYmlnby9Nb3NhaWMvR28vSUNFL1VQLkJyb3dzZXJcbiAgICAgICAgICAgIC8obGlua3MpIFxcKChbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGlua3NcbiAgICAgICAgICAgIC9wYW5hc29uaWM7KHZpZXJhKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFuYXNvbmljIFZpZXJhXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLyhjb2JhbHQpXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb2JhbHRcbiAgICAgICAgICAgIF0sIFtOQU1FLCBbVkVSU0lPTiwgL21hc3Rlci58bHRzLi8sIFwiXCJdXVxuICAgICAgICBdLFxuXG4gICAgICAgIGNwdSA6IFtbXG5cbiAgICAgICAgICAgIC8oPzooYW1kfHgoPzooPzo4Nnw2NClbLV9dKT98d293fHdpbik2NClbO1xcKV0vaSAgICAgICAgICAgICAgICAgICAgIC8vIEFNRDY0ICh4NjQpXG4gICAgICAgICAgICBdLCBbW0FSQ0hJVEVDVFVSRSwgJ2FtZDY0J11dLCBbXG5cbiAgICAgICAgICAgIC8oaWEzMig/PTspKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUEzMiAocXVpY2t0aW1lKVxuICAgICAgICAgICAgXSwgW1tBUkNISVRFQ1RVUkUsIGxvd2VyaXplXV0sIFtcblxuICAgICAgICAgICAgLygoPzppWzM0Nl18eCk4NilbO1xcKV0vaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUEzMiAoeDg2KVxuICAgICAgICAgICAgXSwgW1tBUkNISVRFQ1RVUkUsICdpYTMyJ11dLCBbXG5cbiAgICAgICAgICAgIC9cXGIoYWFyY2g2NHxhcm0odj84ZT9sP3xfPzY0KSlcXGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFSTTY0XG4gICAgICAgICAgICBdLCBbW0FSQ0hJVEVDVFVSRSwgJ2FybTY0J11dLCBbXG5cbiAgICAgICAgICAgIC9cXGIoYXJtKD86dls2N10pP2h0P24/W2ZsXXA/KVxcYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBUk1IRlxuICAgICAgICAgICAgXSwgW1tBUkNISVRFQ1RVUkUsICdhcm1oZiddXSwgW1xuXG4gICAgICAgICAgICAvLyBQb2NrZXRQQyBtaXN0YWtlbmx5IGlkZW50aWZpZWQgYXMgUG93ZXJQQ1xuICAgICAgICAgICAgL3dpbmRvd3MgKGNlfG1vYmlsZSk7IHBwYzsvaVxuICAgICAgICAgICAgXSwgW1tBUkNISVRFQ1RVUkUsICdhcm0nXV0sIFtcblxuICAgICAgICAgICAgLygoPzpwcGN8cG93ZXJwYykoPzo2NCk/KSg/OiBtYWN8O3xcXCkpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUG93ZXJQQ1xuICAgICAgICAgICAgXSwgW1tBUkNISVRFQ1RVUkUsIC9vd2VyLywgRU1QVFksIGxvd2VyaXplXV0sIFtcblxuICAgICAgICAgICAgLyhzdW40XFx3KVs7XFwpXS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNQQVJDXG4gICAgICAgICAgICBdLCBbW0FSQ0hJVEVDVFVSRSwgJ3NwYXJjJ11dLCBbXG5cbiAgICAgICAgICAgIC8oKD86YXZyMzJ8aWE2NCg/PTspKXw2OGsoPz1cXCkpfFxcYmFybSg/PXYoPzpbMS03XXxbNS03XTEpbD98O3xlYWJpKXwoPz1hdG1lbCApYXZyfCg/OmlyaXh8bWlwc3xzcGFyYykoPzo2NCk/XFxifHBhLXJpc2MpL2lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUE2NCwgNjhLLCBBUk0vNjQsIEFWUi8zMiwgSVJJWC82NCwgTUlQUy82NCwgU1BBUkMvNjQsIFBBLVJJU0NcbiAgICAgICAgICAgIF0sIFtbQVJDSElURUNUVVJFLCBsb3dlcml6ZV1dXG4gICAgICAgIF0sXG5cbiAgICAgICAgZGV2aWNlIDogW1tcblxuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgICAgIC8vIE1PQklMRVMgJiBUQUJMRVRTXG4gICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgICAgIC8vIFNhbXN1bmdcbiAgICAgICAgICAgIC9cXGIoc2NoLWlbODldMFxcZHxzaHctbTM4MHN8c20tW3B0eF1cXHd7Miw0fXxndC1bcG5dXFxkezIsNH18c2doLXQ4WzU2XTl8bmV4dXMgMTApL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgU0FNU1VOR10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYigoPzpzW2NncF1ofGd0fHNtKS1cXHcrfHNjW2ctXT9bXFxkXSthP3xnYWxheHkgbmV4dXMpL2ksXG4gICAgICAgICAgICAvc2Ftc3VuZ1stIF0oWy1cXHddKykvaSxcbiAgICAgICAgICAgIC9zZWMtKHNnaFxcdyspL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgU0FNU1VOR10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBBcHBsZVxuICAgICAgICAgICAgLyg/OlxcL3xcXCgpKGlwKD86aG9uZXxvZClbXFx3LCBdKikoPzpcXC98OykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaVBvZC9pUGhvbmVcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVBQTEVdLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9cXCgoaXBhZCk7Wy1cXHdcXCksOyBdK2FwcGxlL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaVBhZFxuICAgICAgICAgICAgL2FwcGxlY29yZW1lZGlhXFwvW1xcd1xcLl0rIFxcKChpcGFkKS9pLFxuICAgICAgICAgICAgL1xcYihpcGFkKVxcZFxcZD8sXFxkXFxkP1s7XFxdXS4raW9zL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVBQTEVdLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8obWFjaW50b3NoKTsvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBBUFBMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIFNoYXJwXG4gICAgICAgICAgICAvXFxiKHNoLT9bYWx0dnpdP1xcZFxcZFthLWVrbV0/KS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFNIQVJQXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIEh1YXdlaVxuICAgICAgICAgICAgL1xcYigoPzphZ1tyc11bMjNdP3xiYWgyP3xzaHQ/fGJ0diktYT9bbHddXFxkezJ9KVxcYig/IS4rZFxcL3MpL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgSFVBV0VJXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvKD86aHVhd2VpfGhvbm9yKShbLVxcdyBdKylbO1xcKV0vaSxcbiAgICAgICAgICAgIC9cXGIobmV4dXMgNnB8XFx3ezIsNH1lPy1bYXR1XT9bbG5dW1xcZHhdWzAxMjM1OWNdW2Fkbl0/KVxcYig/IS4rZFxcL3MpL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgSFVBV0VJXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIFhpYW9taVxuICAgICAgICAgICAgL1xcYihwb2NvW1xcdyBdKykoPzogYnVpfFxcKSkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBYaWFvbWkgUE9DT1xuICAgICAgICAgICAgL1xcYjsgKFxcdyspIGJ1aWxkXFwvaG1cXDEvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWGlhb21pIEhvbmdtaSAnbnVtZXJpYycgbW9kZWxzXG4gICAgICAgICAgICAvXFxiKGhtWy1fIF0/bm90ZT9bXyBdPyg/OlxcZFxcdyk/KSBidWkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFhpYW9taSBIb25nbWlcbiAgICAgICAgICAgIC9cXGIocmVkbWlbXFwtXyBdPyg/Om5vdGV8ayk/W1xcd18gXSspKD86IGJ1aXxcXCkpL2ksICAgICAgICAgICAgICAgICAgIC8vIFhpYW9taSBSZWRtaVxuICAgICAgICAgICAgL1xcYihtaVstXyBdPyg/OmFcXGR8b25lfG9uZVtfIF1wbHVzfG5vdGUgbHRlfG1heHxjYyk/W18gXT8oPzpcXGQ/XFx3PylbXyBdPyg/OnBsdXN8c2V8bGl0ZSk/KSg/OiBidWl8XFwpKS9pIC8vIFhpYW9taSBNaVxuICAgICAgICAgICAgXSwgW1tNT0RFTCwgL18vZywgJyAnXSwgW1ZFTkRPUiwgWElBT01JXSwgW1RZUEUsIE1PQklMRV1dLCBbXG4gICAgICAgICAgICAvXFxiKG1pWy1fIF0/KD86cGFkKSg/OltcXHdfIF0rKSkoPzogYnVpfFxcKSkvaSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pIFBhZCB0YWJsZXRzXG4gICAgICAgICAgICBdLFtbTU9ERUwsIC9fL2csICcgJ10sIFtWRU5ET1IsIFhJQU9NSV0sIFtUWVBFLCBUQUJMRVRdXSwgW1xuXG4gICAgICAgICAgICAvLyBPUFBPXG4gICAgICAgICAgICAvOyAoXFx3KykgYnVpLisgb3Bwby9pLFxuICAgICAgICAgICAgL1xcYihjcGhbMTJdXFxkezN9fHAoPzphZnxjW2FsXXxkXFx3fGVbYXJdKVttdF1cXGQwfHg5MDA3fGExMDFvcClcXGIvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnT1BQTyddLCBbVFlQRSwgTU9CSUxFXV0sIFtcblxuICAgICAgICAgICAgLy8gVml2b1xuICAgICAgICAgICAgL3Zpdm8gKFxcdyspKD86IGJ1aXxcXCkpL2ksXG4gICAgICAgICAgICAvXFxiKHZbMTJdXFxkezN9XFx3P1thdF0pKD86IGJ1aXw7KS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdWaXZvJ10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBSZWFsbWVcbiAgICAgICAgICAgIC9cXGIocm14WzEyXVxcZHszfSkoPzogYnVpfDt8XFwpKS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdSZWFsbWUnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIE1vdG9yb2xhXG4gICAgICAgICAgICAvXFxiKG1pbGVzdG9uZXxkcm9pZCg/OlsyLTR4XXwgKD86YmlvbmljfHgyfHByb3xyYXpyKSk/Oj8oIDRnKT8pXFxiW1xcdyBdK2J1aWxkXFwvL2ksXG4gICAgICAgICAgICAvXFxibW90KD86b3JvbGEpP1stIF0oXFx3KikvaSxcbiAgICAgICAgICAgIC8oKD86bW90b1tcXHdcXChcXCkgXSt8eHRcXGR7Myw0fXxuZXh1cyA2KSg/PSBidWl8XFwpKSkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBNT1RPUk9MQV0sIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgL1xcYihtejYwXFxkfHhvb21bMiBdezAsMn0pIGJ1aWxkXFwvL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgTU9UT1JPTEFdLCBbVFlQRSwgVEFCTEVUXV0sIFtcblxuICAgICAgICAgICAgLy8gTEdcbiAgICAgICAgICAgIC8oKD89bGcpP1t2bF1rXFwtP1xcZHszfSkgYnVpfCAzXFwuWy1cXHc7IF17MTB9bGc/LShbMDZjdjldezMsNH0pL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgTEddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8obG0oPzotP2YxMDBbbnZdP3wtW1xcd1xcLl0rKSg/PSBidWl8XFwpKXxuZXh1cyBbNDVdKS9pLFxuICAgICAgICAgICAgL1xcYmxnWy1lO1xcLyBdKygoPyFicm93c2VyfG5ldGNhc3R8YW5kcm9pZCB0dilcXHcrKS9pLFxuICAgICAgICAgICAgL1xcYmxnLT8oW1xcZFxcd10rKSBidWkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBMR10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBMZW5vdm9cbiAgICAgICAgICAgIC8oaWRlYXRhYlstXFx3IF0rKS9pLFxuICAgICAgICAgICAgL2xlbm92byA/KHNbNTZdMDAwWy1cXHddK3x0YWIoPzpbXFx3IF0rKXx5dFstXFxkXFx3XXs2fXx0YlstXFxkXFx3XXs2fSkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnTGVub3ZvJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuXG4gICAgICAgICAgICAvLyBOb2tpYVxuICAgICAgICAgICAgLyg/Om1hZW1vfG5va2lhKS4qKG45MDB8bHVtaWEgXFxkKykvaSxcbiAgICAgICAgICAgIC9ub2tpYVstXyBdPyhbLVxcd1xcLl0qKS9pXG4gICAgICAgICAgICBdLCBbW01PREVMLCAvXy9nLCAnICddLCBbVkVORE9SLCAnTm9raWEnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIEdvb2dsZVxuICAgICAgICAgICAgLyhwaXhlbCBjKVxcYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR29vZ2xlIFBpeGVsIENcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgR09PR0xFXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvZHJvaWQuKzsgKHBpeGVsW1xcZGF4bCBdezAsNn0pKD86IGJ1aXxcXCkpL2kgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR29vZ2xlIFBpeGVsXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEdPT0dMRV0sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBTb255XG4gICAgICAgICAgICAvZHJvaWQuKyAoYT9cXGRbMC0yXXsyfXNvfFtjLWddXFxkezR9fHNvWy1nbF1cXHcrfHhxLWFcXHdbNC03XVsxMl0pKD89IGJ1aXxcXCkuK2Nocm9tZVxcLyg/IVsxLTZdezAsMX1cXGRcXC4pKS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFNPTlldLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9zb255IHRhYmxldCBbcHNdL2ksXG4gICAgICAgICAgICAvXFxiKD86c29ueSk/c2dwXFx3Kyg/OiBidWl8XFwpKS9pXG4gICAgICAgICAgICBdLCBbW01PREVMLCAnWHBlcmlhIFRhYmxldCddLCBbVkVORE9SLCBTT05ZXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG5cbiAgICAgICAgICAgIC8vIE9uZVBsdXNcbiAgICAgICAgICAgIC8gKGtiMjAwNXxpbjIwWzEyXTV8YmUyMFsxMl1bNTldKVxcYi9pLFxuICAgICAgICAgICAgLyg/Om9uZSk/KD86cGx1cyk/IChhXFxkMFxcZFxcZCkoPzogYnxcXCkpL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ09uZVBsdXMnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIEFtYXpvblxuICAgICAgICAgICAgLyhhbGV4YSl3ZWJtL2ksXG4gICAgICAgICAgICAvKGtmW2Etel17Mn13aXxhZW9bYy1yXXsyfSkoIGJ1aXxcXCkpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLaW5kbGUgRmlyZSB3aXRob3V0IFNpbGsgLyBFY2hvIFNob3dcbiAgICAgICAgICAgIC8oa2ZbYS16XSspKCBidWl8XFwpKS4rc2lsa1xcLy9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLaW5kbGUgRmlyZSBIRFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBBTUFaT05dLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8oKD86c2R8a2YpWzAzNDloaWpvcnN0dXddKykoIGJ1aXxcXCkpLitzaWxrXFwvL2kgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlIFBob25lXG4gICAgICAgICAgICBdLCBbW01PREVMLCAvKC4rKS9nLCAnRmlyZSBQaG9uZSAkMSddLCBbVkVORE9SLCBBTUFaT05dLCBbVFlQRSwgTU9CSUxFXV0sIFtcblxuICAgICAgICAgICAgLy8gQmxhY2tCZXJyeVxuICAgICAgICAgICAgLyhwbGF5Ym9vayk7Wy1cXHdcXCksOyBdKyhyaW0pL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJsYWNrQmVycnkgUGxheUJvb2tcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgVkVORE9SLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoKD86YmJbYS1mXXxzdFtodl0pMTAwLVxcZCkvaSxcbiAgICAgICAgICAgIC9cXChiYjEwOyAoXFx3KykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCbGFja0JlcnJ5IDEwXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEJMQUNLQkVSUlldLCBbVFlQRSwgTU9CSUxFXV0sIFtcblxuICAgICAgICAgICAgLy8gQXN1c1xuICAgICAgICAgICAgLyg/OlxcYnxhc3VzXykodHJhbnNmb1twcmltZSBdezQsMTB9IFxcdyt8ZWVlcGN8c2xpZGVyIFxcdyt8bmV4dXMgN3xwYWRmb25lfHAwMFtjal0pL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVNVU10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgLyAoeltiZXNdNlswMjddWzAxMl1ba21dW2xzXXx6ZW5mb25lIFxcZFxcdz8pXFxiL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVNVU10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBIVENcbiAgICAgICAgICAgIC8obmV4dXMgOSkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSFRDIE5leHVzIDlcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0hUQyddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8oaHRjKVstO18gXXsxLDJ9KFtcXHcgXSsoPz1cXCl8IGJ1aSl8XFx3KykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSFRDXG5cbiAgICAgICAgICAgIC8vIFpURVxuICAgICAgICAgICAgLyh6dGUpWy0gXShbXFx3IF0rPykoPzogYnVpfFxcL3xcXCkpL2ksXG4gICAgICAgICAgICAvKGFsY2F0ZWx8Z2Vla3NwaG9uZXxuZXhpYW58cGFuYXNvbmljKD8hKD86O3xcXC4pKXxzb255KD8hLWJyYSkpWy1fIF0/KFstXFx3XSopL2kgICAgICAgICAvLyBBbGNhdGVsL0dlZWtzUGhvbmUvTmV4aWFuL1BhbmFzb25pYy9Tb255XG4gICAgICAgICAgICBdLCBbVkVORE9SLCBbTU9ERUwsIC9fL2csICcgJ10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBBY2VyXG4gICAgICAgICAgICAvZHJvaWQuKzsgKFthYl1bMS03XS0/WzAxNzhhXVxcZFxcZD8pL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0FjZXInXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG5cbiAgICAgICAgICAgIC8vIE1laXp1XG4gICAgICAgICAgICAvZHJvaWQuKzsgKG1bMS01XSBub3RlKSBidWkvaSxcbiAgICAgICAgICAgIC9cXGJtei0oWy1cXHddezIsfSkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnTWVpenUnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIE1JWEVEXG4gICAgICAgICAgICAvKGJsYWNrYmVycnl8YmVucXxwYWxtKD89XFwtKXxzb255ZXJpY3Nzb258YWNlcnxhc3VzfGRlbGx8bWVpenV8bW90b3JvbGF8cG9seXRyb24pWy1fIF0/KFstXFx3XSopL2ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJsYWNrQmVycnkvQmVuUS9QYWxtL1NvbnktRXJpY3Nzb24vQWNlci9Bc3VzL0RlbGwvTWVpenUvTW90b3JvbGEvUG9seXRyb25cbiAgICAgICAgICAgIC8oaHApIChbXFx3IF0rXFx3KS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIUCBpUEFRXG4gICAgICAgICAgICAvKGFzdXMpLT8oXFx3KykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBc3VzXG4gICAgICAgICAgICAvKG1pY3Jvc29mdCk7IChsdW1pYVtcXHcgXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNaWNyb3NvZnQgTHVtaWFcbiAgICAgICAgICAgIC8obGVub3ZvKVstXyBdPyhbLVxcd10rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExlbm92b1xuICAgICAgICAgICAgLyhqb2xsYSkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBKb2xsYVxuICAgICAgICAgICAgLyhvcHBvKSA/KFtcXHcgXSspIGJ1aS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT1BQT1xuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvKGtvYm8pXFxzKGVyZWFkZXJ8dG91Y2gpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLb2JvXG4gICAgICAgICAgICAvKGFyY2hvcykgKGdhbWVwYWQyPykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFyY2hvc1xuICAgICAgICAgICAgLyhocCkuKyh0b3VjaHBhZCg/IS4rdGFibGV0KXx0YWJsZXQpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIUCBUb3VjaFBhZFxuICAgICAgICAgICAgLyhraW5kbGUpXFwvKFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLaW5kbGVcbiAgICAgICAgICAgIC8obm9vaylbXFx3IF0rYnVpbGRcXC8oXFx3KykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9va1xuICAgICAgICAgICAgLyhkZWxsKSAoc3RyZWFba3ByXFxkIF0qW1xcZGtvXSkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGwgU3RyZWFrXG4gICAgICAgICAgICAvKGxlWy0gXStwYW4pWy0gXSsoXFx3ezEsOX0pIGJ1aS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMZSBQYW4gVGFibGV0c1xuICAgICAgICAgICAgLyh0cmluaXR5KVstIF0qKHRcXGR7M30pIGJ1aS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJpbml0eSBUYWJsZXRzXG4gICAgICAgICAgICAvKGdpZ2FzZXQpWy0gXSsocVxcd3sxLDl9KSBidWkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHaWdhc2V0IFRhYmxldHNcbiAgICAgICAgICAgIC8odm9kYWZvbmUpIChbXFx3IF0rKSg/OlxcKXwgYnVpKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWb2RhZm9uZVxuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBUQUJMRVRdXSwgW1xuXG4gICAgICAgICAgICAvKHN1cmZhY2UgZHVvKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1cmZhY2UgRHVvXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIE1JQ1JPU09GVF0sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL2Ryb2lkIFtcXGRcXC5dKzsgKGZwXFxkdT8pKD86IGJ8XFwpKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmFpcnBob25lXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdGYWlycGhvbmUnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG4gICAgICAgICAgICAvKHUzMDRhYSkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFUJlRcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0FUJlQnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG4gICAgICAgICAgICAvXFxic2llLShcXHcqKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2llbWVuc1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnU2llbWVucyddLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9cXGIocmN0XFx3KykgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSQ0EgVGFibGV0c1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnUkNBJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYih2ZW51ZVtcXGQgXXsyLDd9KSBiL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGwgVmVudWUgVGFibGV0c1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnRGVsbCddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIocSg/Om12fHRhKVxcdyspIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWZXJpem9uIFRhYmxldFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnVmVyaXpvbiddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoPzpiYXJuZXNbJiBdK25vYmxlIHxibltydF0pKFtcXHdcXCsgXSopIGIvaSAgICAgICAgICAgICAgICAgICAgICAgLy8gQmFybmVzICYgTm9ibGUgVGFibGV0XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdCYXJuZXMgJiBOb2JsZSddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIodG1cXGR7M31cXHcrKSBiL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ051VmlzaW9uJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYihrODgpIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWlRFIEsgU2VyaWVzIFRhYmxldFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnWlRFJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYihueFxcZHszfWopIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFpURSBOdWJpYVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnWlRFJ10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgL1xcYihnZW5cXGR7M30pIGIuKzQ5aC9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN3aXNzIEdFTiBNb2JpbGVcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ1N3aXNzJ10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgL1xcYih6dXJcXGR7M30pIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN3aXNzIFpVUiBUYWJsZXRcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ1N3aXNzJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYigoemVraSk/dGIuKlxcYikgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFpla2kgVGFibGV0c1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnWmVraSddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoW3lyXVxcZHsyfSkgYi9pLFxuICAgICAgICAgICAgL1xcYihkcmFnb25bLSBdK3RvdWNoIHxkdCkoXFx3ezV9KSBiL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERyYWdvbiBUb3VjaCBUYWJsZXRcbiAgICAgICAgICAgIF0sIFtbVkVORE9SLCAnRHJhZ29uIFRvdWNoJ10sIE1PREVMLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIobnMtP1xcd3swLDl9KSBiL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnNpZ25pYSBUYWJsZXRzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdJbnNpZ25pYSddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoKG54YXxuZXh0KS0/XFx3ezAsOX0pIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOZXh0Qm9vayBUYWJsZXRzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdOZXh0Qm9vayddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoeHRyZW1lXFxfKT8odigxWzA0NV18MlswMTVdfFszNDY5XTB8N1swNV0pKSBiL2kgICAgICAgICAgICAgICAgICAvLyBWb2ljZSBYdHJlbWUgUGhvbmVzXG4gICAgICAgICAgICBdLCBbW1ZFTkRPUiwgJ1ZvaWNlJ10sIE1PREVMLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9cXGIobHZ0ZWxcXC0pPyh2MVsxMl0pIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMdlRlbCBQaG9uZXNcbiAgICAgICAgICAgIF0sIFtbVkVORE9SLCAnTHZUZWwnXSwgTU9ERUwsIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgL1xcYihwaC0xKSAvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXNzZW50aWFsIFBILTFcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0Vzc2VudGlhbCddLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9cXGIodigxMDBtZHw3MDBuYXw3MDExfDkxN2cpLipcXGIpIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbnZpemVuIFRhYmxldHNcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0Vudml6ZW4nXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvXFxiKHRyaW9bLVxcd1xcLiBdKykgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hY2hTcGVlZCBUYWJsZXRzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdNYWNoU3BlZWQnXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvXFxidHVfKDE0OTEpIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSb3RvciBUYWJsZXRzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdSb3RvciddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8oc2hpZWxkW1xcdyBdKykgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE52aWRpYSBTaGllbGQgVGFibGV0c1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnTnZpZGlhJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgLyhzcHJpbnQpIChcXHcrKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3ByaW50IFBob25lc1xuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgLyhraW5cXC5bb25ldHddezN9KS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWljcm9zb2Z0IEtpblxuICAgICAgICAgICAgXSwgW1tNT0RFTCwgL1xcLi9nLCAnICddLCBbVkVORE9SLCBNSUNST1NPRlRdLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9kcm9pZC4rOyAoY2M2NjY2P3xldDVbMTZdfG1jWzIzOV1bMjNdeD98dmM4WzAzXXg/KVxcKS9pICAgICAgICAgICAgIC8vIFplYnJhXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFpFQlJBXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvZHJvaWQuKzsgKGVjMzB8cHMyMHx0Y1syLThdXFxkW2t4XSlcXCkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBaRUJSQV0sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgICAgICAvLyBTTUFSVFRWU1xuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgICAgICAgICAvc21hcnQtdHYuKyhzYW1zdW5nKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbXN1bmdcbiAgICAgICAgICAgIF0sIFtWRU5ET1IsIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC9oYmJ0di4rbWFwbGU7KFxcZCspL2lcbiAgICAgICAgICAgIF0sIFtbTU9ERUwsIC9eLywgJ1NtYXJ0VFYnXSwgW1ZFTkRPUiwgU0FNU1VOR10sIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC8obnV4OyBuZXRjYXN0LitzbWFydHR2fGxnIChuZXRjYXN0XFwudHYtMjAxXFxkfGFuZHJvaWQgdHYpKS9pICAgICAgICAvLyBMRyBTbWFydFRWXG4gICAgICAgICAgICBdLCBbW1ZFTkRPUiwgTEddLCBbVFlQRSwgU01BUlRUVl1dLCBbXG4gICAgICAgICAgICAvKGFwcGxlKSA/dHYvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwcGxlIFRWXG4gICAgICAgICAgICBdLCBbVkVORE9SLCBbTU9ERUwsIEFQUExFKycgVFYnXSwgW1RZUEUsIFNNQVJUVFZdXSwgW1xuICAgICAgICAgICAgL2Nya2V5L2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb29nbGUgQ2hyb21lY2FzdFxuICAgICAgICAgICAgXSwgW1tNT0RFTCwgQ0hST01FKydjYXN0J10sIFtWRU5ET1IsIEdPT0dMRV0sIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC9kcm9pZC4rYWZ0KFxcdykoIGJ1aXxcXCkpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlIFRWXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEFNQVpPTl0sIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC9cXChkdHZbXFwpO10uKyhhcXVvcykvaSxcbiAgICAgICAgICAgIC8oYXF1b3MtdHZbXFx3IF0rKVxcKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaGFycFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBTSEFSUF0sIFtUWVBFLCBTTUFSVFRWXV0sW1xuICAgICAgICAgICAgLyhicmF2aWFbXFx3IF0rKSggYnVpfFxcKSkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTb255XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFNPTlldLCBbVFlQRSwgU01BUlRUVl1dLCBbXG4gICAgICAgICAgICAvKG1pdHYtXFx3ezV9KSBidWkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBYaWFvbWlcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgWElBT01JXSwgW1RZUEUsIFNNQVJUVFZdXSwgW1xuICAgICAgICAgICAgL0hiYnR2LioodGVjaG5pc2F0KSAoLiopOy9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUZWNobmlTQVRcbiAgICAgICAgICAgIF0sIFtWRU5ET1IsIE1PREVMLCBbVFlQRSwgU01BUlRUVl1dLCBbXG4gICAgICAgICAgICAvXFxiKHJva3UpW1xcZHhdKltcXClcXC9dKCg/OmR2cC0pP1tcXGRcXC5dKikvaSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJva3VcbiAgICAgICAgICAgIC9oYmJ0dlxcL1xcZCtcXC5cXGQrXFwuXFxkKyArXFwoW1xcd1xcKyBdKjsgKihbXFx3XFxkXVteO10qKTsoW147XSopL2kgICAgICAgICAvLyBIYmJUViBkZXZpY2VzXG4gICAgICAgICAgICBdLCBbW1ZFTkRPUiwgdHJpbV0sIFtNT0RFTCwgdHJpbV0sIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC9cXGIoYW5kcm9pZCB0dnxzbWFydFstIF0/dHZ8b3BlcmEgdHZ8dHY7IHJ2OilcXGIvaSAgICAgICAgICAgICAgICAgICAvLyBTbWFydFRWIGZyb20gVW5pZGVudGlmaWVkIFZlbmRvcnNcbiAgICAgICAgICAgIF0sIFtbVFlQRSwgU01BUlRUVl1dLCBbXG5cbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgICAgIC8vIENPTlNPTEVTXG4gICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgICAgIC8ob3V5YSkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3V5YVxuICAgICAgICAgICAgLyhuaW50ZW5kbykgKFt3aWRzM3V0Y2hdKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOaW50ZW5kb1xuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBDT05TT0xFXV0sIFtcbiAgICAgICAgICAgIC9kcm9pZC4rOyAoc2hpZWxkKSBidWkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTnZpZGlhXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdOdmlkaWEnXSwgW1RZUEUsIENPTlNPTEVdXSwgW1xuICAgICAgICAgICAgLyhwbGF5c3RhdGlvbiBbMzQ1cG9ydGFibGV2aV0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQbGF5c3RhdGlvblxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBTT05ZXSwgW1RZUEUsIENPTlNPTEVdXSwgW1xuICAgICAgICAgICAgL1xcYih4Ym94KD86IG9uZSk/KD8hOyB4Ym94KSlbXFwpOyBdL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pY3Jvc29mdCBYYm94XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIE1JQ1JPU09GVF0sIFtUWVBFLCBDT05TT0xFXV0sIFtcblxuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICAgICAgLy8gV0VBUkFCTEVTXG4gICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgICAgIC8oKHBlYmJsZSkpYXBwL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGViYmxlXG4gICAgICAgICAgICBdLCBbVkVORE9SLCBNT0RFTCwgW1RZUEUsIFdFQVJBQkxFXV0sIFtcbiAgICAgICAgICAgIC8od2F0Y2gpKD86ID9vc1ssXFwvXXxcXGQsXFxkXFwvKVtcXGRcXC5dKy9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwbGUgV2F0Y2hcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVBQTEVdLCBbVFlQRSwgV0VBUkFCTEVdXSwgW1xuICAgICAgICAgICAgL2Ryb2lkLis7IChnbGFzcykgXFxkL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR29vZ2xlIEdsYXNzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEdPT0dMRV0sIFtUWVBFLCBXRUFSQUJMRV1dLCBbXG4gICAgICAgICAgICAvZHJvaWQuKzsgKHd0NjM/MHsyLDN9KVxcKS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFpFQlJBXSwgW1RZUEUsIFdFQVJBQkxFXV0sIFtcbiAgICAgICAgICAgIC8ocXVlc3QoIDJ8IHBybyk/KS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT2N1bHVzIFF1ZXN0XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEZBQ0VCT09LXSwgW1RZUEUsIFdFQVJBQkxFXV0sIFtcblxuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICAgICAgLy8gRU1CRURERURcbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgICAgICAgICAgLyh0ZXNsYSkoPzogcXRjYXJicm93c2VyfFxcL1stXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXNsYVxuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgW1RZUEUsIEVNQkVEREVEXV0sIFtcbiAgICAgICAgICAgIC8oYWVvYmMpXFxiL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVjaG8gRG90XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEFNQVpPTl0sIFtUWVBFLCBFTUJFRERFRF1dLCBbXG5cbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgICAgICAvLyBNSVhFRCAoR0VORVJJQylcbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgICAgICAgICAgL2Ryb2lkIC4rPzsgKFteO10rPykoPzogYnVpfFxcKSBhcHBsZXcpLis/IG1vYmlsZSBzYWZhcmkvaSAgICAgICAgICAgLy8gQW5kcm9pZCBQaG9uZXMgZnJvbSBVbmlkZW50aWZpZWQgVmVuZG9yc1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9kcm9pZCAuKz87IChbXjtdKz8pKD86IGJ1aXxcXCkgYXBwbGV3KS4rPyg/ISBtb2JpbGUpIHNhZmFyaS9pICAgICAgIC8vIEFuZHJvaWQgVGFibGV0cyBmcm9tIFVuaWRlbnRpZmllZCBWZW5kb3JzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYigodGFibGV0fHRhYilbO1xcL118Zm9jdXNcXC9cXGQoPyEuK21vYmlsZSkpL2kgICAgICAgICAgICAgICAgICAgICAgLy8gVW5pZGVudGlmaWFibGUgVGFibGV0XG4gICAgICAgICAgICBdLCBbW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvKHBob25lfG1vYmlsZSg/Ols7XFwvXXwgWyBcXHdcXC9cXC5dKnNhZmFyaSl8cGRhKD89Lit3aW5kb3dzIGNlKSkvaSAgICAvLyBVbmlkZW50aWZpYWJsZSBNb2JpbGVcbiAgICAgICAgICAgIF0sIFtbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC8oYW5kcm9pZFstXFx3XFwuIF17MCw5fSk7LitidWlsL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZW5lcmljIEFuZHJvaWQgRGV2aWNlXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdHZW5lcmljJ11dXG4gICAgICAgIF0sXG5cbiAgICAgICAgZW5naW5lIDogW1tcblxuICAgICAgICAgICAgL3dpbmRvd3MuKyBlZGdlXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVkZ2VIVE1MXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIEVER0UrJ0hUTUwnXV0sIFtcblxuICAgICAgICAgICAgL3dlYmtpdFxcLzUzN1xcLjM2LitjaHJvbWVcXC8oPyEyNykoW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJsaW5rXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdCbGluayddXSwgW1xuXG4gICAgICAgICAgICAvKHByZXN0bylcXC8oW1xcd1xcLl0rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXN0b1xuICAgICAgICAgICAgLyh3ZWJraXR8dHJpZGVudHxuZXRmcm9udHxuZXRzdXJmfGFtYXlhfGx5bnh8dzNtfGdvYW5uYSlcXC8oW1xcd1xcLl0rKS9pLCAvLyBXZWJLaXQvVHJpZGVudC9OZXRGcm9udC9OZXRTdXJmL0FtYXlhL0x5bngvdzNtL0dvYW5uYVxuICAgICAgICAgICAgL2VraW9oKGZsb3cpXFwvKFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGbG93XG4gICAgICAgICAgICAvKGtodG1sfHRhc21hbnxsaW5rcylbXFwvIF1cXCg/KFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLSFRNTC9UYXNtYW4vTGlua3NcbiAgICAgICAgICAgIC8oaWNhYilbXFwvIF0oWzIzXVxcLltcXGRcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlDYWJcbiAgICAgICAgICAgIC9cXGIobGlid2ViKS9pXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcblxuICAgICAgICAgICAgL3J2XFw6KFtcXHdcXC5dezEsOX0pXFxiLisoZ2Vja28pL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2Vja29cbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBOQU1FXVxuICAgICAgICBdLFxuXG4gICAgICAgIG9zIDogW1tcblxuICAgICAgICAgICAgLy8gV2luZG93c1xuICAgICAgICAgICAgL21pY3Jvc29mdCAod2luZG93cykgKHZpc3RhfHhwKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaW5kb3dzIChpVHVuZXMpXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgIC8od2luZG93cykgbnQgNlxcLjI7IChhcm0pL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdpbmRvd3MgUlRcbiAgICAgICAgICAgIC8od2luZG93cyAoPzpwaG9uZSg/OiBvcyk/fG1vYmlsZSkpW1xcLyBdPyhbXFxkXFwuXFx3IF0qKS9pLCAgICAgICAgICAgIC8vIFdpbmRvd3MgUGhvbmVcbiAgICAgICAgICAgIC8od2luZG93cylbXFwvIF0/KFtudGNlXFxkXFwuIF0rXFx3KSg/IS4reGJveCkvaVxuICAgICAgICAgICAgXSwgW05BTUUsIFtWRVJTSU9OLCBzdHJNYXBwZXIsIHdpbmRvd3NWZXJzaW9uTWFwXV0sIFtcbiAgICAgICAgICAgIC8od2luKD89M3w5fG4pfHdpbiA5eCApKFtudFxcZFxcLl0rKS9pXG4gICAgICAgICAgICBdLCBbW05BTUUsICdXaW5kb3dzJ10sIFtWRVJTSU9OLCBzdHJNYXBwZXIsIHdpbmRvd3NWZXJzaW9uTWFwXV0sIFtcblxuICAgICAgICAgICAgLy8gaU9TL21hY09TXG4gICAgICAgICAgICAvaXBbaG9uZWFkXXsyLDR9XFxiKD86LipvcyAoW1xcd10rKSBsaWtlIG1hY3w7IG9wZXJhKS9pLCAgICAgICAgICAgICAgLy8gaU9TXG4gICAgICAgICAgICAvaW9zO2Zic3ZcXC8oW1xcZFxcLl0rKS9pLFxuICAgICAgICAgICAgL2NmbmV0d29ya1xcLy4rZGFyd2luL2lcbiAgICAgICAgICAgIF0sIFtbVkVSU0lPTiwgL18vZywgJy4nXSwgW05BTUUsICdpT1MnXV0sIFtcbiAgICAgICAgICAgIC8obWFjIG9zIHgpID8oW1xcd1xcLiBdKikvaSxcbiAgICAgICAgICAgIC8obWFjaW50b3NofG1hY19wb3dlcnBjXFxiKSg/IS4raGFpa3UpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hYyBPU1xuICAgICAgICAgICAgXSwgW1tOQU1FLCBNQUNfT1NdLCBbVkVSU0lPTiwgL18vZywgJy4nXV0sIFtcblxuICAgICAgICAgICAgLy8gTW9iaWxlIE9TZXNcbiAgICAgICAgICAgIC9kcm9pZCAoW1xcd1xcLl0rKVxcYi4rKGFuZHJvaWRbLSBdeDg2fGhhcm1vbnlvcykvaSAgICAgICAgICAgICAgICAgICAgLy8gQW5kcm9pZC14ODYvSGFybW9ueU9TXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgTkFNRV0sIFsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFuZHJvaWQvV2ViT1MvUU5YL0JhZGEvUklNL01hZW1vL01lZUdvL1NhaWxmaXNoIE9TXG4gICAgICAgICAgICAvKGFuZHJvaWR8d2Vib3N8cW54fGJhZGF8cmltIHRhYmxldCBvc3xtYWVtb3xtZWVnb3xzYWlsZmlzaClbLVxcLyBdPyhbXFx3XFwuXSopL2ksXG4gICAgICAgICAgICAvKGJsYWNrYmVycnkpXFx3KlxcLyhbXFx3XFwuXSopL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCbGFja2JlcnJ5XG4gICAgICAgICAgICAvKHRpemVufGthaW9zKVtcXC8gXShbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRpemVuL0thaU9TXG4gICAgICAgICAgICAvXFwoKHNlcmllczQwKTsvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXJpZXMgNDBcbiAgICAgICAgICAgIF0sIFtOQU1FLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgL1xcKGJiKDEwKTsvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmxhY2tCZXJyeSAxMFxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCBCTEFDS0JFUlJZXV0sIFtcbiAgICAgICAgICAgIC8oPzpzeW1iaWFuID9vc3xzeW1ib3N8czYwKD89Oyl8c2VyaWVzNjApWy1cXC8gXT8oW1xcd1xcLl0qKS9pICAgICAgICAgLy8gU3ltYmlhblxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnU3ltYmlhbiddXSwgW1xuICAgICAgICAgICAgL21vemlsbGFcXC9bXFxkXFwuXSsgXFwoKD86bW9iaWxlfHRhYmxldHx0dnxtb2JpbGU7IFtcXHcgXSspOyBydjouKyBnZWNrb1xcLyhbXFx3XFwuXSspL2kgLy8gRmlyZWZveCBPU1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCBGSVJFRk9YKycgT1MnXV0sIFtcbiAgICAgICAgICAgIC93ZWIwczsuK3J0KHR2KS9pLFxuICAgICAgICAgICAgL1xcYig/OmhwKT93b3MoPzpicm93c2VyKT9cXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2ViT1NcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ3dlYk9TJ11dLCBbXG4gICAgICAgICAgICAvd2F0Y2goPzogP29zWyxcXC9dfFxcZCxcXGRcXC8pKFtcXGRcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdhdGNoT1NcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ3dhdGNoT1MnXV0sIFtcblxuICAgICAgICAgICAgLy8gR29vZ2xlIENocm9tZWNhc3RcbiAgICAgICAgICAgIC9jcmtleVxcLyhbXFxkXFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR29vZ2xlIENocm9tZWNhc3RcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgQ0hST01FKydjYXN0J11dLCBbXG4gICAgICAgICAgICAvKGNyb3MpIFtcXHddKyg/OlxcKXwgKFtcXHdcXC5dKylcXGIpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hyb21pdW0gT1NcbiAgICAgICAgICAgIF0sIFtbTkFNRSwgQ0hST01JVU1fT1NdLCBWRVJTSU9OXSxbXG5cbiAgICAgICAgICAgIC8vIFNtYXJ0IFRWc1xuICAgICAgICAgICAgL3BhbmFzb25pYzsodmllcmEpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQYW5hc29uaWMgVmllcmFcbiAgICAgICAgICAgIC8obmV0cmFuZ2UpbW1oL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV0cmFuZ2VcbiAgICAgICAgICAgIC8obmV0dHYpXFwvKFxcZCtcXC5bXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOZXRUVlxuXG4gICAgICAgICAgICAvLyBDb25zb2xlXG4gICAgICAgICAgICAvKG5pbnRlbmRvfHBsYXlzdGF0aW9uKSAoW3dpZHMzNDVwb3J0YWJsZXZ1Y2hdKykvaSwgICAgICAgICAgICAgICAgIC8vIE5pbnRlbmRvL1BsYXlzdGF0aW9uXG4gICAgICAgICAgICAvKHhib3gpOyAreGJveCAoW15cXCk7XSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNaWNyb3NvZnQgWGJveCAoMzYwLCBPbmUsIFgsIFMsIFNlcmllcyBYLCBTZXJpZXMgUylcblxuICAgICAgICAgICAgLy8gT3RoZXJcbiAgICAgICAgICAgIC9cXGIoam9saXxwYWxtKVxcYiA/KD86b3MpP1xcLz8oW1xcd1xcLl0qKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBKb2xpL1BhbG1cbiAgICAgICAgICAgIC8obWludClbXFwvXFwoXFwpIF0/KFxcdyopL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pbnRcbiAgICAgICAgICAgIC8obWFnZWlhfHZlY3RvcmxpbnV4KVs7IF0vaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFnZWlhL1ZlY3RvckxpbnV4XG4gICAgICAgICAgICAvKFtreGxuXT91YnVudHV8ZGViaWFufHN1c2V8b3BlbnN1c2V8Z2VudG9vfGFyY2goPz0gbGludXgpfHNsYWNrd2FyZXxmZWRvcmF8bWFuZHJpdmF8Y2VudG9zfHBjbGludXhvc3xyZWQgP2hhdHx6ZW53YWxrfGxpbnB1c3xyYXNwYmlhbnxwbGFuIDl8bWluaXh8cmlzYyBvc3xjb250aWtpfGRlZXBpbnxtYW5qYXJvfGVsZW1lbnRhcnkgb3N8c2FiYXlvbnxsaW5zcGlyZSkoPzogZ251XFwvbGludXgpPyg/OiBlbnRlcnByaXNlKT8oPzpbLSBdbGludXgpPyg/Oi1nbnUpP1stXFwvIF0/KD8hY2hyb218cGFja2FnZSkoWy1cXHdcXC5dKikvaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVWJ1bnR1L0RlYmlhbi9TVVNFL0dlbnRvby9BcmNoL1NsYWNrd2FyZS9GZWRvcmEvTWFuZHJpdmEvQ2VudE9TL1BDTGludXhPUy9SZWRIYXQvWmVud2Fsay9MaW5wdXMvUmFzcGJpYW4vUGxhbjkvTWluaXgvUklTQ09TL0NvbnRpa2kvRGVlcGluL01hbmphcm8vZWxlbWVudGFyeS9TYWJheW9uL0xpbnNwaXJlXG4gICAgICAgICAgICAvKGh1cmR8bGludXgpID8oW1xcd1xcLl0qKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSHVyZC9MaW51eFxuICAgICAgICAgICAgLyhnbnUpID8oW1xcd1xcLl0qKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdOVVxuICAgICAgICAgICAgL1xcYihbLWZyZW50b3BjZ2hzXXswLDV9YnNkfGRyYWdvbmZseSlbXFwvIF0/KD8hYW1kfFtpeDM0Nl17MSwyfTg2KShbXFx3XFwuXSopL2ksIC8vIEZyZWVCU0QvTmV0QlNEL09wZW5CU0QvUEMtQlNEL0dob3N0QlNEL0RyYWdvbkZseVxuICAgICAgICAgICAgLyhoYWlrdSkgKFxcdyspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFpa3VcbiAgICAgICAgICAgIF0sIFtOQU1FLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgLyhzdW5vcykgPyhbXFx3XFwuXFxkXSopL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTb2xhcmlzXG4gICAgICAgICAgICBdLCBbW05BTUUsICdTb2xhcmlzJ10sIFZFUlNJT05dLCBbXG4gICAgICAgICAgICAvKCg/Om9wZW4pP3NvbGFyaXMpWy1cXC8gXT8oW1xcd1xcLl0qKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNvbGFyaXNcbiAgICAgICAgICAgIC8oYWl4KSAoKFxcZCkoPz1cXC58XFwpfCApW1xcd1xcLl0pKi9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBSVhcbiAgICAgICAgICAgIC9cXGIoYmVvc3xvc1xcLzJ8YW1pZ2Fvc3xtb3JwaG9zfG9wZW52bXN8ZnVjaHNpYXxocC11eHxzZXJlbml0eW9zKS9pLCAvLyBCZU9TL09TMi9BbWlnYU9TL01vcnBoT1MvT3BlblZNUy9GdWNoc2lhL0hQLVVYL1NlcmVuaXR5T1NcbiAgICAgICAgICAgIC8odW5peCkgPyhbXFx3XFwuXSopL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVTklYXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl1cbiAgICAgICAgXVxuICAgIH07XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIENvbnN0cnVjdG9yXG4gICAgLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgdmFyIFVBUGFyc2VyID0gZnVuY3Rpb24gKHVhLCBleHRlbnNpb25zKSB7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB1YSA9PT0gT0JKX1RZUEUpIHtcbiAgICAgICAgICAgIGV4dGVuc2lvbnMgPSB1YTtcbiAgICAgICAgICAgIHVhID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFVBUGFyc2VyKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVQVBhcnNlcih1YSwgZXh0ZW5zaW9ucykuZ2V0UmVzdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX25hdmlnYXRvciA9ICh0eXBlb2Ygd2luZG93ICE9PSBVTkRFRl9UWVBFICYmIHdpbmRvdy5uYXZpZ2F0b3IpID8gd2luZG93Lm5hdmlnYXRvciA6IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIF91YSA9IHVhIHx8ICgoX25hdmlnYXRvciAmJiBfbmF2aWdhdG9yLnVzZXJBZ2VudCkgPyBfbmF2aWdhdG9yLnVzZXJBZ2VudCA6IEVNUFRZKTtcbiAgICAgICAgdmFyIF91YWNoID0gKF9uYXZpZ2F0b3IgJiYgX25hdmlnYXRvci51c2VyQWdlbnREYXRhKSA/IF9uYXZpZ2F0b3IudXNlckFnZW50RGF0YSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIF9yZ3htYXAgPSBleHRlbnNpb25zID8gZXh0ZW5kKHJlZ2V4ZXMsIGV4dGVuc2lvbnMpIDogcmVnZXhlcztcbiAgICAgICAgdmFyIF9pc1NlbGZOYXYgPSBfbmF2aWdhdG9yICYmIF9uYXZpZ2F0b3IudXNlckFnZW50ID09IF91YTtcblxuICAgICAgICB0aGlzLmdldEJyb3dzZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2Jyb3dzZXIgPSB7fTtcbiAgICAgICAgICAgIF9icm93c2VyW05BTUVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgX2Jyb3dzZXJbVkVSU0lPTl0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZ3hNYXBwZXIuY2FsbChfYnJvd3NlciwgX3VhLCBfcmd4bWFwLmJyb3dzZXIpO1xuICAgICAgICAgICAgX2Jyb3dzZXJbTUFKT1JdID0gbWFqb3JpemUoX2Jyb3dzZXJbVkVSU0lPTl0pO1xuICAgICAgICAgICAgLy8gQnJhdmUtc3BlY2lmaWMgZGV0ZWN0aW9uXG4gICAgICAgICAgICBpZiAoX2lzU2VsZk5hdiAmJiBfbmF2aWdhdG9yICYmIF9uYXZpZ2F0b3IuYnJhdmUgJiYgdHlwZW9mIF9uYXZpZ2F0b3IuYnJhdmUuaXNCcmF2ZSA9PSBGVU5DX1RZUEUpIHtcbiAgICAgICAgICAgICAgICBfYnJvd3NlcltOQU1FXSA9ICdCcmF2ZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2Jyb3dzZXI7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0Q1BVID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9jcHUgPSB7fTtcbiAgICAgICAgICAgIF9jcHVbQVJDSElURUNUVVJFXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJneE1hcHBlci5jYWxsKF9jcHUsIF91YSwgX3JneG1hcC5jcHUpO1xuICAgICAgICAgICAgcmV0dXJuIF9jcHU7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0RGV2aWNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9kZXZpY2UgPSB7fTtcbiAgICAgICAgICAgIF9kZXZpY2VbVkVORE9SXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIF9kZXZpY2VbTU9ERUxdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgX2RldmljZVtUWVBFXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJneE1hcHBlci5jYWxsKF9kZXZpY2UsIF91YSwgX3JneG1hcC5kZXZpY2UpO1xuICAgICAgICAgICAgaWYgKF9pc1NlbGZOYXYgJiYgIV9kZXZpY2VbVFlQRV0gJiYgX3VhY2ggJiYgX3VhY2gubW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgX2RldmljZVtUWVBFXSA9IE1PQklMRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlQYWRPUy1zcGVjaWZpYyBkZXRlY3Rpb246IGlkZW50aWZpZWQgYXMgTWFjLCBidXQgaGFzIHNvbWUgaU9TLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgICAgaWYgKF9pc1NlbGZOYXYgJiYgX2RldmljZVtNT0RFTF0gPT0gJ01hY2ludG9zaCcgJiYgX25hdmlnYXRvciAmJiB0eXBlb2YgX25hdmlnYXRvci5zdGFuZGFsb25lICE9PSBVTkRFRl9UWVBFICYmIF9uYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgJiYgX25hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDIpIHtcbiAgICAgICAgICAgICAgICBfZGV2aWNlW01PREVMXSA9ICdpUGFkJztcbiAgICAgICAgICAgICAgICBfZGV2aWNlW1RZUEVdID0gVEFCTEVUO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9kZXZpY2U7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0RW5naW5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9lbmdpbmUgPSB7fTtcbiAgICAgICAgICAgIF9lbmdpbmVbTkFNRV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBfZW5naW5lW1ZFUlNJT05dID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmd4TWFwcGVyLmNhbGwoX2VuZ2luZSwgX3VhLCBfcmd4bWFwLmVuZ2luZSk7XG4gICAgICAgICAgICByZXR1cm4gX2VuZ2luZTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXRPUyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfb3MgPSB7fTtcbiAgICAgICAgICAgIF9vc1tOQU1FXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIF9vc1tWRVJTSU9OXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJneE1hcHBlci5jYWxsKF9vcywgX3VhLCBfcmd4bWFwLm9zKTtcbiAgICAgICAgICAgIGlmIChfaXNTZWxmTmF2ICYmICFfb3NbTkFNRV0gJiYgX3VhY2ggJiYgX3VhY2gucGxhdGZvcm0gIT0gJ1Vua25vd24nKSB7XG4gICAgICAgICAgICAgICAgX29zW05BTUVdID0gX3VhY2gucGxhdGZvcm0gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL2Nocm9tZSBvcy9pLCBDSFJPTUlVTV9PUylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9tYWNvcy9pLCBNQUNfT1MpOyAgICAgICAgICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9vcztcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXRSZXN1bHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHVhICAgICAgOiB0aGlzLmdldFVBKCksXG4gICAgICAgICAgICAgICAgYnJvd3NlciA6IHRoaXMuZ2V0QnJvd3NlcigpLFxuICAgICAgICAgICAgICAgIGVuZ2luZSAgOiB0aGlzLmdldEVuZ2luZSgpLFxuICAgICAgICAgICAgICAgIG9zICAgICAgOiB0aGlzLmdldE9TKCksXG4gICAgICAgICAgICAgICAgZGV2aWNlICA6IHRoaXMuZ2V0RGV2aWNlKCksXG4gICAgICAgICAgICAgICAgY3B1ICAgICA6IHRoaXMuZ2V0Q1BVKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0VUEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3VhO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNldFVBID0gZnVuY3Rpb24gKHVhKSB7XG4gICAgICAgICAgICBfdWEgPSAodHlwZW9mIHVhID09PSBTVFJfVFlQRSAmJiB1YS5sZW5ndGggPiBVQV9NQVhfTEVOR1RIKSA/IHRyaW0odWEsIFVBX01BWF9MRU5HVEgpIDogdWE7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zZXRVQShfdWEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgVUFQYXJzZXIuVkVSU0lPTiA9IExJQlZFUlNJT047XG4gICAgVUFQYXJzZXIuQlJPV1NFUiA9ICBlbnVtZXJpemUoW05BTUUsIFZFUlNJT04sIE1BSk9SXSk7XG4gICAgVUFQYXJzZXIuQ1BVID0gZW51bWVyaXplKFtBUkNISVRFQ1RVUkVdKTtcbiAgICBVQVBhcnNlci5ERVZJQ0UgPSBlbnVtZXJpemUoW01PREVMLCBWRU5ET1IsIFRZUEUsIENPTlNPTEUsIE1PQklMRSwgU01BUlRUViwgVEFCTEVULCBXRUFSQUJMRSwgRU1CRURERURdKTtcbiAgICBVQVBhcnNlci5FTkdJTkUgPSBVQVBhcnNlci5PUyA9IGVudW1lcml6ZShbTkFNRSwgVkVSU0lPTl0pO1xuXG4gICAgLy8vLy8vLy8vLy9cbiAgICAvLyBFeHBvcnRcbiAgICAvLy8vLy8vLy8vXG5cbiAgICAvLyBjaGVjayBqcyBlbnZpcm9ubWVudFxuICAgIGlmICh0eXBlb2YoZXhwb3J0cykgIT09IFVOREVGX1RZUEUpIHtcbiAgICAgICAgLy8gbm9kZWpzIGVudlxuICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gVU5ERUZfVFlQRSAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICAgICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gVUFQYXJzZXI7XG4gICAgICAgIH1cbiAgICAgICAgZXhwb3J0cy5VQVBhcnNlciA9IFVBUGFyc2VyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHJlcXVpcmVqcyBlbnYgKG9wdGlvbmFsKVxuICAgICAgICBpZiAodHlwZW9mKGRlZmluZSkgPT09IEZVTkNfVFlQRSAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgICAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBVQVBhcnNlcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFVOREVGX1RZUEUpIHtcbiAgICAgICAgICAgIC8vIGJyb3dzZXIgZW52XG4gICAgICAgICAgICB3aW5kb3cuVUFQYXJzZXIgPSBVQVBhcnNlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGpRdWVyeS9aZXB0byBzcGVjaWZpYyAob3B0aW9uYWwpXG4gICAgLy8gTm90ZTpcbiAgICAvLyAgIEluIEFNRCBlbnYgdGhlIGdsb2JhbCBzY29wZSBzaG91bGQgYmUga2VwdCBjbGVhbiwgYnV0IGpRdWVyeSBpcyBhbiBleGNlcHRpb24uXG4gICAgLy8gICBqUXVlcnkgYWx3YXlzIGV4cG9ydHMgdG8gZ2xvYmFsIHNjb3BlLCB1bmxlc3MgalF1ZXJ5Lm5vQ29uZmxpY3QodHJ1ZSkgaXMgdXNlZCxcbiAgICAvLyAgIGFuZCB3ZSBzaG91bGQgY2F0Y2ggdGhhdC5cbiAgICB2YXIgJCA9IHR5cGVvZiB3aW5kb3cgIT09IFVOREVGX1RZUEUgJiYgKHdpbmRvdy5qUXVlcnkgfHwgd2luZG93LlplcHRvKTtcbiAgICBpZiAoJCAmJiAhJC51YSkge1xuICAgICAgICB2YXIgcGFyc2VyID0gbmV3IFVBUGFyc2VyKCk7XG4gICAgICAgICQudWEgPSBwYXJzZXIuZ2V0UmVzdWx0KCk7XG4gICAgICAgICQudWEuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5nZXRVQSgpO1xuICAgICAgICB9O1xuICAgICAgICAkLnVhLnNldCA9IGZ1bmN0aW9uICh1YSkge1xuICAgICAgICAgICAgcGFyc2VyLnNldFVBKHVhKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBwYXJzZXIuZ2V0UmVzdWx0KCk7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICQudWFbcHJvcF0gPSByZXN1bHRbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG59KSh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyA/IHdpbmRvdyA6IHRoaXMpO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmFtZE8gPSB7fTsiLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsInZhciBzY3JpcHRVcmw7XG5pZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5nLmltcG9ydFNjcmlwdHMpIHNjcmlwdFVybCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5sb2NhdGlvbiArIFwiXCI7XG52YXIgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7XG5pZiAoIXNjcmlwdFVybCAmJiBkb2N1bWVudCkge1xuXHRpZiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ1NDUklQVCcpXG5cdFx0c2NyaXB0VXJsID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkge1xuXHRcdFx0dmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR3aGlsZSAoaSA+IC0xICYmICghc2NyaXB0VXJsIHx8ICEvXmh0dHAocz8pOi8udGVzdChzY3JpcHRVcmwpKSkgc2NyaXB0VXJsID0gc2NyaXB0c1tpLS1dLnNyYztcblx0XHR9XG5cdH1cbn1cbi8vIFdoZW4gc3VwcG9ydGluZyBicm93c2VycyB3aGVyZSBhbiBhdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIHlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0LnB1YmxpY1BhdGggbWFudWFsbHkgdmlhIGNvbmZpZ3VyYXRpb25cbi8vIG9yIHBhc3MgYW4gZW1wdHkgc3RyaW5nIChcIlwiKSBhbmQgc2V0IHRoZSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyB2YXJpYWJsZSBmcm9tIHlvdXIgY29kZSB0byB1c2UgeW91ciBvd24gbG9naWMuXG5pZiAoIXNjcmlwdFVybCkgdGhyb3cgbmV3IEVycm9yKFwiQXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXJcIik7XG5zY3JpcHRVcmwgPSBzY3JpcHRVcmwucmVwbGFjZSgvIy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcPy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcL1teXFwvXSskLywgXCIvXCIpO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gc2NyaXB0VXJsOyIsIl9fd2VicGFja19yZXF1aXJlX18uYiA9IGRvY3VtZW50LmJhc2VVUkkgfHwgc2VsZi5sb2NhdGlvbi5ocmVmO1xuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGFuZCBsb2FkaW5nIGNodW5rc1xuLy8gdW5kZWZpbmVkID0gY2h1bmsgbm90IGxvYWRlZCwgbnVsbCA9IGNodW5rIHByZWxvYWRlZC9wcmVmZXRjaGVkXG4vLyBbcmVzb2x2ZSwgcmVqZWN0LCBQcm9taXNlXSA9IGNodW5rIGxvYWRpbmcsIDAgPSBjaHVuayBsb2FkZWRcbnZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG5cdDc5MjogMFxufTtcblxuLy8gbm8gY2h1bmsgb24gZGVtYW5kIGxvYWRpbmdcblxuLy8gbm8gcHJlZmV0Y2hpbmdcblxuLy8gbm8gcHJlbG9hZGVkXG5cbi8vIG5vIEhNUlxuXG4vLyBubyBITVIgbWFuaWZlc3RcblxuLy8gbm8gb24gY2h1bmtzIGxvYWRlZFxuXG4vLyBubyBqc29ucCBmdW5jdGlvbiIsIl9fd2VicGFja19yZXF1aXJlX18ubmMgPSB1bmRlZmluZWQ7IiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcclxuICAgIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxyXG4gICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcclxuICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xyXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XHJcbiAgICB2YXIgXywgZG9uZSA9IGZhbHNlO1xyXG4gICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgY29udGV4dCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xyXG4gICAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnB1c2goXyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xyXG4gICAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcclxuICAgIGRvbmUgPSB0cnVlO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcclxuICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xyXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xyXG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcclxuICAgIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xyXG4gICAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcclxufVxyXG4iLCJpbXBvcnQgeyBfX2V4dGVuZHMgfSBmcm9tIFwidHNsaWJcIjtcbi8qKlxuICogRW51bSBmb3IgdHlwZXMgb2YgYm90cy5cbiAqIFNwZWNpZmljIHR5cGVzIG9mIGJvdHMgY29tZSBmaXJzdCwgZm9sbG93ZWQgYnkgYXV0b21hdGlvbiB0ZWNobm9sb2dpZXMuXG4gKlxuICogQHJlYWRvbmx5XG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgdmFyIEJvdEtpbmQgPSB7XG4gICAgLy8gT2JqZWN0IGlzIHVzZWQgaW5zdGVhZCBvZiBUeXBlc2NyaXB0IGVudW0gdG8gYXZvaWQgZW1pdHRpbmcgSUlGRSB3aGljaCBtaWdodCBiZSBhZmZlY3RlZCBieSBmdXJ0aGVyIHRyZWUtc2hha2luZy5cbiAgICAvLyBTZWUgZXhhbXBsZSBvZiBjb21waWxlZCBlbnVtcyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3EvNDczNjM5OTYpXG4gICAgQXdlc29taXVtOiAnYXdlc29taXVtJyxcbiAgICBDZWY6ICdjZWYnLFxuICAgIENlZlNoYXJwOiAnY2Vmc2hhcnAnLFxuICAgIENvYWNoSlM6ICdjb2FjaGpzJyxcbiAgICBFbGVjdHJvbjogJ2VsZWN0cm9uJyxcbiAgICBGTWluZXI6ICdmbWluZXInLFxuICAgIEdlYjogJ2dlYicsXG4gICAgTmlnaHRtYXJlSlM6ICduaWdodG1hcmVqcycsXG4gICAgUGhhbnRvbWFzOiAncGhhbnRvbWFzJyxcbiAgICBQaGFudG9tSlM6ICdwaGFudG9tanMnLFxuICAgIFJoaW5vOiAncmhpbm8nLFxuICAgIFNlbGVuaXVtOiAnc2VsZW5pdW0nLFxuICAgIFNlcXVlbnR1bTogJ3NlcXVlbnR1bScsXG4gICAgU2xpbWVySlM6ICdzbGltZXJqcycsXG4gICAgV2ViRHJpdmVySU86ICd3ZWJkcml2ZXJpbycsXG4gICAgV2ViRHJpdmVyOiAnd2ViZHJpdmVyJyxcbiAgICBIZWFkbGVzc0Nocm9tZTogJ2hlYWRsZXNzX2Nocm9tZScsXG4gICAgVW5rbm93bjogJ3Vua25vd24nLFxufTtcbi8qKlxuICogQm90IGRldGVjdGlvbiBlcnJvci5cbiAqL1xudmFyIEJvdGRFcnJvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQm90ZEVycm9yLCBfc3VwZXIpO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgQm90ZEVycm9yLlxuICAgICAqXG4gICAgICogQGNsYXNzXG4gICAgICovXG4gICAgZnVuY3Rpb24gQm90ZEVycm9yKHN0YXRlLCBtZXNzYWdlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIF90aGlzLm5hbWUgPSAnQm90ZEVycm9yJztcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKF90aGlzLCBCb3RkRXJyb3IucHJvdG90eXBlKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gQm90ZEVycm9yO1xufShFcnJvcikpO1xuZXhwb3J0IHsgQm90ZEVycm9yIH07XG4iLCJpbXBvcnQgeyBfX2F3YWl0ZXIsIF9fZ2VuZXJhdG9yIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBCb3RkRXJyb3IsIEJvdEtpbmQsIH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0KGNvbXBvbmVudHMsIGRldGVjdG9ycykge1xuICAgIHZhciBkZXRlY3Rpb25zID0ge307XG4gICAgdmFyIGZpbmFsRGV0ZWN0aW9uID0ge1xuICAgICAgICBib3Q6IGZhbHNlLFxuICAgIH07XG4gICAgZm9yICh2YXIgZGV0ZWN0b3JOYW1lIGluIGRldGVjdG9ycykge1xuICAgICAgICB2YXIgZGV0ZWN0b3IgPSBkZXRlY3RvcnNbZGV0ZWN0b3JOYW1lXTtcbiAgICAgICAgdmFyIGRldGVjdG9yUmVzID0gZGV0ZWN0b3IoY29tcG9uZW50cyk7XG4gICAgICAgIHZhciBkZXRlY3Rpb24gPSB7IGJvdDogZmFsc2UgfTtcbiAgICAgICAgaWYgKHR5cGVvZiBkZXRlY3RvclJlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGRldGVjdGlvbiA9IHsgYm90OiB0cnVlLCBib3RLaW5kOiBkZXRlY3RvclJlcyB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRldGVjdG9yUmVzKSB7XG4gICAgICAgICAgICBkZXRlY3Rpb24gPSB7IGJvdDogdHJ1ZSwgYm90S2luZDogQm90S2luZC5Vbmtub3duIH07XG4gICAgICAgIH1cbiAgICAgICAgZGV0ZWN0aW9uc1tkZXRlY3Rvck5hbWVdID0gZGV0ZWN0aW9uO1xuICAgICAgICBpZiAoZGV0ZWN0aW9uLmJvdCkge1xuICAgICAgICAgICAgZmluYWxEZXRlY3Rpb24gPSBkZXRlY3Rpb247XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtkZXRlY3Rpb25zLCBmaW5hbERldGVjdGlvbl07XG59XG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdChzb3VyY2VzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY29tcG9uZW50cywgc291cmNlc0tleXM7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlc0tleXMgPSBPYmplY3Qua2V5cyhzb3VyY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgUHJvbWlzZS5hbGwoc291cmNlc0tleXMubWFwKGZ1bmN0aW9uIChzb3VyY2VLZXkpIHsgcmV0dXJuIF9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzLCBfYSwgX2IsIGVycm9yXzE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9jO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfZC5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IHNvdXJjZXNbc291cmNlS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZC5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2QudHJ5cy5wdXNoKFsxLCAzLCAsIDRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYSA9IGNvbXBvbmVudHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2IgPSBzb3VyY2VLZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCByZXMoKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2FbX2JdID0gKF9jLnZhbHVlID0gX2Quc2VudCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYy5zdGF0ZSA9IDAgLyogU3RhdGUuU3VjY2VzcyAqLyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yXzEgPSBfZC5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yXzEgaW5zdGFuY2VvZiBCb3RkRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50c1tzb3VyY2VLZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGVycm9yXzEuc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogXCJcIi5jb25jYXQoZXJyb3JfMS5uYW1lLCBcIjogXCIpLmNvbmNhdChlcnJvcl8xLm1lc3NhZ2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50c1tzb3VyY2VLZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IC0zIC8qIFN0YXRlLlVuZXhwZWN0ZWRCZWhhdmlvdXIgKi8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JfMSBpbnN0YW5jZW9mIEVycm9yID8gXCJcIi5jb25jYXQoZXJyb3JfMS5uYW1lLCBcIjogXCIpLmNvbmNhdChlcnJvcl8xLm1lc3NhZ2UpIDogU3RyaW5nKGVycm9yXzEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTsgfSkpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGNvbXBvbmVudHNdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBhcnJheUluY2x1ZGVzKGFyciwgdmFsdWUpIHtcbiAgICByZXR1cm4gYXJyLmluZGV4T2YodmFsdWUpICE9PSAtMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzdHJJbmNsdWRlcyhzdHIsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0ci5pbmRleE9mKHZhbHVlKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gYXJyYXlGaW5kKGFycmF5LCBjYWxsYmFjaykge1xuICAgIGlmICgnZmluZCcgaW4gYXJyYXkpXG4gICAgICAgIHJldHVybiBhcnJheS5maW5kKGNhbGxiYWNrKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChjYWxsYmFjayhhcnJheVtpXSwgaSwgYXJyYXkpKVxuICAgICAgICAgICAgcmV0dXJuIGFycmF5W2ldO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIiwiaW1wb3J0IHsgYXJyYXlGaW5kLCBhcnJheUluY2x1ZGVzIH0gZnJvbSAnLi9wb255ZmlsbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9iamVjdFByb3BzKG9iaikge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGluY2x1ZGVzKGFycikge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAga2V5c1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKGFycmF5SW5jbHVkZXMoYXJyLCBrZXkpKVxuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbWF0Y2ggPSBhcnJheUZpbmQoYXJyLCBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIGtleS50ZXN0KHZhbHVlKTsgfSk7XG4gICAgICAgICAgICBpZiAobWF0Y2ggIT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgfTtcbiAgICBmb3IgKHZhciBfYSA9IDAsIGtleXNfMSA9IGtleXM7IF9hIDwga2V5c18xLmxlbmd0aDsgX2ErKykge1xuICAgICAgICB2YXIga2V5ID0ga2V5c18xW19hXTtcbiAgICAgICAgdmFyIHN0YXRlXzEgPSBfbG9vcF8xKGtleSk7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGVfMSA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZV8xLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gY291bnRUcnV0aHkodmFsdWVzKSB7XG4gICAgcmV0dXJuIHZhbHVlcy5yZWR1Y2UoZnVuY3Rpb24gKHN1bSwgdmFsdWUpIHsgcmV0dXJuIHN1bSArICh2YWx1ZSA/IDEgOiAwKTsgfSwgMCk7XG59XG4iLCJpbXBvcnQgeyBkZXRlY3RBcHBWZXJzaW9uIH0gZnJvbSAnLi9hcHBfdmVyc2lvbic7XG5pbXBvcnQgeyBkZXRlY3REb2N1bWVudEF0dHJpYnV0ZXMgfSBmcm9tICcuL2RvY3VtZW50X2VsZW1lbnRfa2V5cyc7XG5pbXBvcnQgeyBkZXRlY3RFcnJvclRyYWNlIH0gZnJvbSAnLi9lcnJvcl90cmFjZSc7XG5pbXBvcnQgeyBkZXRlY3RFdmFsTGVuZ3RoSW5jb25zaXN0ZW5jeSB9IGZyb20gJy4vZXZhbF9sZW5ndGgnO1xuaW1wb3J0IHsgZGV0ZWN0RnVuY3Rpb25CaW5kIH0gZnJvbSAnLi9mdW5jdGlvbl9iaW5kJztcbmltcG9ydCB7IGRldGVjdExhbmd1YWdlc0xlbmd0aEluY29uc2lzdGVuY3kgfSBmcm9tICcuL2xhbmd1YWdlc19pbmNvbnNpc3RlbmN5JztcbmltcG9ydCB7IGRldGVjdE1pbWVUeXBlc0NvbnNpc3RlbnQgfSBmcm9tICcuL21pbWVfdHlwZXNfY29uc2lzdGVuY2UnO1xuaW1wb3J0IHsgZGV0ZWN0Tm90aWZpY2F0aW9uUGVybWlzc2lvbnMgfSBmcm9tICcuL25vdGlmaWNhdGlvbl9wZXJtaXNzaW9ucyc7XG5pbXBvcnQgeyBkZXRlY3RQbHVnaW5zQXJyYXkgfSBmcm9tICcuL3BsdWdpbnNfYXJyYXknO1xuaW1wb3J0IHsgZGV0ZWN0UGx1Z2luc0xlbmd0aEluY29uc2lzdGVuY3kgfSBmcm9tICcuL3BsdWdpbnNfaW5jb25zaXN0ZW5jeSc7XG5pbXBvcnQgeyBkZXRlY3RQcm9jZXNzIH0gZnJvbSAnLi9wcm9jZXNzJztcbmltcG9ydCB7IGRldGVjdFByb2R1Y3RTdWIgfSBmcm9tICcuL3Byb2R1Y3Rfc3ViJztcbmltcG9ydCB7IGRldGVjdFVzZXJBZ2VudCB9IGZyb20gJy4vdXNlcl9hZ2VudCc7XG5pbXBvcnQgeyBkZXRlY3RXZWJEcml2ZXIgfSBmcm9tICcuL3dlYmRyaXZlcic7XG5pbXBvcnQgeyBkZXRlY3RXZWJHTCB9IGZyb20gJy4vd2ViZ2wnO1xuaW1wb3J0IHsgZGV0ZWN0V2luZG93RXh0ZXJuYWwgfSBmcm9tICcuL3dpbmRvd19leHRlcm5hbCc7XG5pbXBvcnQgeyBkZXRlY3RXaW5kb3dTaXplIH0gZnJvbSAnLi93aW5kb3dfc2l6ZSc7XG5pbXBvcnQgeyBkZXRlY3REaXN0aW5jdGl2ZVByb3BlcnRpZXMgfSBmcm9tICcuL2Rpc3RpbmN0aXZlX3Byb3BlcnRpZXMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcbmV4cG9ydCB2YXIgZGV0ZWN0b3JzID0ge1xuICAgIGRldGVjdEFwcFZlcnNpb246IGRldGVjdEFwcFZlcnNpb24sXG4gICAgZGV0ZWN0RG9jdW1lbnRBdHRyaWJ1dGVzOiBkZXRlY3REb2N1bWVudEF0dHJpYnV0ZXMsXG4gICAgZGV0ZWN0RXJyb3JUcmFjZTogZGV0ZWN0RXJyb3JUcmFjZSxcbiAgICBkZXRlY3RFdmFsTGVuZ3RoSW5jb25zaXN0ZW5jeTogZGV0ZWN0RXZhbExlbmd0aEluY29uc2lzdGVuY3ksXG4gICAgZGV0ZWN0RnVuY3Rpb25CaW5kOiBkZXRlY3RGdW5jdGlvbkJpbmQsXG4gICAgZGV0ZWN0TGFuZ3VhZ2VzTGVuZ3RoSW5jb25zaXN0ZW5jeTogZGV0ZWN0TGFuZ3VhZ2VzTGVuZ3RoSW5jb25zaXN0ZW5jeSxcbiAgICBkZXRlY3ROb3RpZmljYXRpb25QZXJtaXNzaW9uczogZGV0ZWN0Tm90aWZpY2F0aW9uUGVybWlzc2lvbnMsXG4gICAgZGV0ZWN0UGx1Z2luc0FycmF5OiBkZXRlY3RQbHVnaW5zQXJyYXksXG4gICAgZGV0ZWN0UGx1Z2luc0xlbmd0aEluY29uc2lzdGVuY3k6IGRldGVjdFBsdWdpbnNMZW5ndGhJbmNvbnNpc3RlbmN5LFxuICAgIGRldGVjdFByb2Nlc3M6IGRldGVjdFByb2Nlc3MsXG4gICAgZGV0ZWN0VXNlckFnZW50OiBkZXRlY3RVc2VyQWdlbnQsXG4gICAgZGV0ZWN0V2ViRHJpdmVyOiBkZXRlY3RXZWJEcml2ZXIsXG4gICAgZGV0ZWN0V2ViR0w6IGRldGVjdFdlYkdMLFxuICAgIGRldGVjdFdpbmRvd0V4dGVybmFsOiBkZXRlY3RXaW5kb3dFeHRlcm5hbCxcbiAgICBkZXRlY3RXaW5kb3dTaXplOiBkZXRlY3RXaW5kb3dTaXplLFxuICAgIGRldGVjdE1pbWVUeXBlc0NvbnNpc3RlbnQ6IGRldGVjdE1pbWVUeXBlc0NvbnNpc3RlbnQsXG4gICAgZGV0ZWN0UHJvZHVjdFN1YjogZGV0ZWN0UHJvZHVjdFN1YixcbiAgICBkZXRlY3REaXN0aW5jdGl2ZVByb3BlcnRpZXM6IGRldGVjdERpc3RpbmN0aXZlUHJvcGVydGllcyxcbn07XG4iLCJpbXBvcnQgeyBCb3RLaW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEFwcFZlcnNpb24oX2EpIHtcbiAgICB2YXIgYXBwVmVyc2lvbiA9IF9hLmFwcFZlcnNpb247XG4gICAgaWYgKGFwcFZlcnNpb24uc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmICgvaGVhZGxlc3MvaS50ZXN0KGFwcFZlcnNpb24udmFsdWUpKVxuICAgICAgICByZXR1cm4gQm90S2luZC5IZWFkbGVzc0Nocm9tZTtcbiAgICBpZiAoL2VsZWN0cm9uL2kudGVzdChhcHBWZXJzaW9uLnZhbHVlKSlcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuRWxlY3Ryb247XG4gICAgaWYgKC9zbGltZXJqcy9pLnRlc3QoYXBwVmVyc2lvbi52YWx1ZSkpXG4gICAgICAgIHJldHVybiBCb3RLaW5kLlNsaW1lckpTO1xufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGluY2x1ZGVzIH0gZnJvbSAnLi4vdXRpbHMvbWlzYyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0RG9jdW1lbnRBdHRyaWJ1dGVzKF9hKSB7XG4gICAgdmFyIGRvY3VtZW50RWxlbWVudEtleXMgPSBfYS5kb2N1bWVudEVsZW1lbnRLZXlzO1xuICAgIGlmIChkb2N1bWVudEVsZW1lbnRLZXlzLnN0YXRlICE9PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8pXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaW5jbHVkZXMoZG9jdW1lbnRFbGVtZW50S2V5cy52YWx1ZSwgJ3NlbGVuaXVtJywgJ3dlYmRyaXZlcicsICdkcml2ZXInKSkge1xuICAgICAgICByZXR1cm4gQm90S2luZC5TZWxlbml1bTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBCb3RLaW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEVycm9yVHJhY2UoX2EpIHtcbiAgICB2YXIgZXJyb3JUcmFjZSA9IF9hLmVycm9yVHJhY2U7XG4gICAgaWYgKGVycm9yVHJhY2Uuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmICgvUGhhbnRvbUpTL2kudGVzdChlcnJvclRyYWNlLnZhbHVlKSlcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuUGhhbnRvbUpTO1xufVxuIiwiaW1wb3J0IHsgYXJyYXlJbmNsdWRlcyB9IGZyb20gJy4uL3V0aWxzL3BvbnlmaWxscyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0RXZhbExlbmd0aEluY29uc2lzdGVuY3koX2EpIHtcbiAgICB2YXIgZXZhbExlbmd0aCA9IF9hLmV2YWxMZW5ndGgsIGJyb3dzZXJLaW5kID0gX2EuYnJvd3NlcktpbmQsIGJyb3dzZXJFbmdpbmVLaW5kID0gX2EuYnJvd3NlckVuZ2luZUtpbmQ7XG4gICAgaWYgKGV2YWxMZW5ndGguc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLyB8fFxuICAgICAgICBicm93c2VyS2luZC5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovIHx8XG4gICAgICAgIGJyb3dzZXJFbmdpbmVLaW5kLnN0YXRlICE9PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8pXG4gICAgICAgIHJldHVybjtcbiAgICB2YXIgbGVuZ3RoID0gZXZhbExlbmd0aC52YWx1ZTtcbiAgICBpZiAoYnJvd3NlckVuZ2luZUtpbmQudmFsdWUgPT09IFwidW5rbm93blwiIC8qIEJyb3dzZXJFbmdpbmVLaW5kLlVua25vd24gKi8pXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKChsZW5ndGggPT09IDM3ICYmICFhcnJheUluY2x1ZGVzKFtcIndlYmtpdFwiIC8qIEJyb3dzZXJFbmdpbmVLaW5kLldlYmtpdCAqLywgXCJnZWNrb1wiIC8qIEJyb3dzZXJFbmdpbmVLaW5kLkdlY2tvICovXSwgYnJvd3NlckVuZ2luZUtpbmQudmFsdWUpKSB8fFxuICAgICAgICAobGVuZ3RoID09PSAzOSAmJiAhYXJyYXlJbmNsdWRlcyhbXCJpbnRlcm5ldF9leHBsb3JlclwiIC8qIEJyb3dzZXJLaW5kLklFICovXSwgYnJvd3NlcktpbmQudmFsdWUpKSB8fFxuICAgICAgICAobGVuZ3RoID09PSAzMyAmJiAhYXJyYXlJbmNsdWRlcyhbXCJjaHJvbWl1bVwiIC8qIEJyb3dzZXJFbmdpbmVLaW5kLkNocm9taXVtICovXSwgYnJvd3NlckVuZ2luZUtpbmQudmFsdWUpKSk7XG59XG4iLCJpbXBvcnQgeyBCb3RLaW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEZ1bmN0aW9uQmluZChfYSkge1xuICAgIHZhciBmdW5jdGlvbkJpbmQgPSBfYS5mdW5jdGlvbkJpbmQ7XG4gICAgaWYgKGZ1bmN0aW9uQmluZC5zdGF0ZSA9PT0gLTIgLyogU3RhdGUuTm90RnVuY3Rpb24gKi8pXG4gICAgICAgIHJldHVybiBCb3RLaW5kLlBoYW50b21KUztcbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0TGFuZ3VhZ2VzTGVuZ3RoSW5jb25zaXN0ZW5jeShfYSkge1xuICAgIHZhciBsYW5ndWFnZXMgPSBfYS5sYW5ndWFnZXM7XG4gICAgaWYgKGxhbmd1YWdlcy5zdGF0ZSA9PT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovICYmIGxhbmd1YWdlcy52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuSGVhZGxlc3NDaHJvbWU7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3ROb3RpZmljYXRpb25QZXJtaXNzaW9ucyhfYSkge1xuICAgIHZhciBub3RpZmljYXRpb25QZXJtaXNzaW9ucyA9IF9hLm5vdGlmaWNhdGlvblBlcm1pc3Npb25zLCBicm93c2VyS2luZCA9IF9hLmJyb3dzZXJLaW5kO1xuICAgIGlmIChicm93c2VyS2luZC5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovIHx8IGJyb3dzZXJLaW5kLnZhbHVlICE9PSBcImNocm9tZVwiIC8qIEJyb3dzZXJLaW5kLkNocm9tZSAqLylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChub3RpZmljYXRpb25QZXJtaXNzaW9ucy5zdGF0ZSA9PT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovICYmIG5vdGlmaWNhdGlvblBlcm1pc3Npb25zLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBCb3RLaW5kLkhlYWRsZXNzQ2hyb21lO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0UGx1Z2luc0FycmF5KF9hKSB7XG4gICAgdmFyIHBsdWdpbnNBcnJheSA9IF9hLnBsdWdpbnNBcnJheTtcbiAgICBpZiAocGx1Z2luc0FycmF5LnN0YXRlID09PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8gJiYgIXBsdWdpbnNBcnJheS52YWx1ZSlcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuSGVhZGxlc3NDaHJvbWU7XG59XG4iLCJpbXBvcnQgeyBCb3RLaW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdFBsdWdpbnNMZW5ndGhJbmNvbnNpc3RlbmN5KF9hKSB7XG4gICAgdmFyIHBsdWdpbnNMZW5ndGggPSBfYS5wbHVnaW5zTGVuZ3RoLCBhbmRyb2lkID0gX2EuYW5kcm9pZCwgYnJvd3NlcktpbmQgPSBfYS5icm93c2VyS2luZCwgYnJvd3NlckVuZ2luZUtpbmQgPSBfYS5icm93c2VyRW5naW5lS2luZDtcbiAgICBpZiAocGx1Z2luc0xlbmd0aC5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovIHx8XG4gICAgICAgIGFuZHJvaWQuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLyB8fFxuICAgICAgICBicm93c2VyS2luZC5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovIHx8XG4gICAgICAgIGJyb3dzZXJFbmdpbmVLaW5kLnN0YXRlICE9PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8pXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoYnJvd3NlcktpbmQudmFsdWUgIT09IFwiY2hyb21lXCIgLyogQnJvd3NlcktpbmQuQ2hyb21lICovIHx8XG4gICAgICAgIGFuZHJvaWQudmFsdWUgfHxcbiAgICAgICAgYnJvd3NlckVuZ2luZUtpbmQudmFsdWUgIT09IFwiY2hyb21pdW1cIiAvKiBCcm93c2VyRW5naW5lS2luZC5DaHJvbWl1bSAqLylcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChwbHVnaW5zTGVuZ3RoLnZhbHVlID09PSAwKVxuICAgICAgICByZXR1cm4gQm90S2luZC5IZWFkbGVzc0Nocm9tZTtcbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0UHJvY2VzcyhfYSkge1xuICAgIHZhciBfYjtcbiAgICB2YXIgcHJvY2VzcyA9IF9hLnByb2Nlc3M7XG4gICAgaWYgKHByb2Nlc3Muc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChwcm9jZXNzLnZhbHVlLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgKChfYiA9IHByb2Nlc3MudmFsdWUudmVyc2lvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5lbGVjdHJvbikgIT0gbnVsbClcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuRWxlY3Ryb247XG59XG4iLCJpbXBvcnQgeyBCb3RLaW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdFVzZXJBZ2VudChfYSkge1xuICAgIHZhciB1c2VyQWdlbnQgPSBfYS51c2VyQWdlbnQ7XG4gICAgaWYgKHVzZXJBZ2VudC5zdGF0ZSAhPT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKC9QaGFudG9tSlMvaS50ZXN0KHVzZXJBZ2VudC52YWx1ZSkpXG4gICAgICAgIHJldHVybiBCb3RLaW5kLlBoYW50b21KUztcbiAgICBpZiAoL0hlYWRsZXNzL2kudGVzdCh1c2VyQWdlbnQudmFsdWUpKVxuICAgICAgICByZXR1cm4gQm90S2luZC5IZWFkbGVzc0Nocm9tZTtcbiAgICBpZiAoL0VsZWN0cm9uL2kudGVzdCh1c2VyQWdlbnQudmFsdWUpKVxuICAgICAgICByZXR1cm4gQm90S2luZC5FbGVjdHJvbjtcbiAgICBpZiAoL3NsaW1lcmpzL2kudGVzdCh1c2VyQWdlbnQudmFsdWUpKVxuICAgICAgICByZXR1cm4gQm90S2luZC5TbGltZXJKUztcbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0V2ViRHJpdmVyKF9hKSB7XG4gICAgdmFyIHdlYkRyaXZlciA9IF9hLndlYkRyaXZlcjtcbiAgICBpZiAod2ViRHJpdmVyLnN0YXRlID09PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8gJiYgd2ViRHJpdmVyLnZhbHVlKVxuICAgICAgICByZXR1cm4gQm90S2luZC5IZWFkbGVzc0Nocm9tZTtcbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0V2ViR0woX2EpIHtcbiAgICB2YXIgd2ViR0wgPSBfYS53ZWJHTDtcbiAgICBpZiAod2ViR0wuc3RhdGUgPT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLykge1xuICAgICAgICB2YXIgX2IgPSB3ZWJHTC52YWx1ZSwgdmVuZG9yID0gX2IudmVuZG9yLCByZW5kZXJlciA9IF9iLnJlbmRlcmVyO1xuICAgICAgICBpZiAodmVuZG9yID09ICdCcmlhbiBQYXVsJyAmJiByZW5kZXJlciA9PSAnTWVzYSBPZmZTY3JlZW4nKSB7XG4gICAgICAgICAgICByZXR1cm4gQm90S2luZC5IZWFkbGVzc0Nocm9tZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0V2luZG93RXh0ZXJuYWwoX2EpIHtcbiAgICB2YXIgd2luZG93RXh0ZXJuYWwgPSBfYS53aW5kb3dFeHRlcm5hbDtcbiAgICBpZiAod2luZG93RXh0ZXJuYWwuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmICgvU2VxdWVudHVtL2kudGVzdCh3aW5kb3dFeHRlcm5hbC52YWx1ZSkpXG4gICAgICAgIHJldHVybiBCb3RLaW5kLlNlcXVlbnR1bTtcbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0V2luZG93U2l6ZShfYSkge1xuICAgIHZhciB3aW5kb3dTaXplID0gX2Eud2luZG93U2l6ZSwgZG9jdW1lbnRGb2N1cyA9IF9hLmRvY3VtZW50Rm9jdXM7XG4gICAgaWYgKHdpbmRvd1NpemUuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLyB8fCBkb2N1bWVudEZvY3VzLnN0YXRlICE9PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8pXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgX2IgPSB3aW5kb3dTaXplLnZhbHVlLCBvdXRlcldpZHRoID0gX2Iub3V0ZXJXaWR0aCwgb3V0ZXJIZWlnaHQgPSBfYi5vdXRlckhlaWdodDtcbiAgICAvLyBXaGVuIGEgcGFnZSBpcyBvcGVuZWQgaW4gYSBuZXcgdGFiIHdpdGhvdXQgZm9jdXNpbmcgaXQgcmlnaHQgYXdheSwgdGhlIHdpbmRvdyBvdXRlciBzaXplIGlzIDB4MFxuICAgIGlmICghZG9jdW1lbnRGb2N1cy52YWx1ZSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChvdXRlcldpZHRoID09PSAwICYmIG91dGVySGVpZ2h0ID09PSAwKVxuICAgICAgICByZXR1cm4gQm90S2luZC5IZWFkbGVzc0Nocm9tZTtcbn1cbiIsImltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0TWltZVR5cGVzQ29uc2lzdGVudChfYSkge1xuICAgIHZhciBtaW1lVHlwZXNDb25zaXN0ZW50ID0gX2EubWltZVR5cGVzQ29uc2lzdGVudDtcbiAgICBpZiAobWltZVR5cGVzQ29uc2lzdGVudC5zdGF0ZSA9PT0gMCAvKiBTdGF0ZS5TdWNjZXNzICovICYmICFtaW1lVHlwZXNDb25zaXN0ZW50LnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBCb3RLaW5kLlVua25vd247XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQm90S2luZCB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RQcm9kdWN0U3ViKF9hKSB7XG4gICAgdmFyIHByb2R1Y3RTdWIgPSBfYS5wcm9kdWN0U3ViLCBicm93c2VyS2luZCA9IF9hLmJyb3dzZXJLaW5kO1xuICAgIGlmIChwcm9kdWN0U3ViLnN0YXRlICE9PSAwIC8qIFN0YXRlLlN1Y2Nlc3MgKi8gfHwgYnJvd3NlcktpbmQuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmICgoYnJvd3NlcktpbmQudmFsdWUgPT09IFwiY2hyb21lXCIgLyogQnJvd3NlcktpbmQuQ2hyb21lICovIHx8XG4gICAgICAgIGJyb3dzZXJLaW5kLnZhbHVlID09PSBcInNhZmFyaVwiIC8qIEJyb3dzZXJLaW5kLlNhZmFyaSAqLyB8fFxuICAgICAgICBicm93c2VyS2luZC52YWx1ZSA9PT0gXCJvcGVyYVwiIC8qIEJyb3dzZXJLaW5kLk9wZXJhICovIHx8XG4gICAgICAgIGJyb3dzZXJLaW5kLnZhbHVlID09PSBcIndlY2hhdFwiIC8qIEJyb3dzZXJLaW5kLldlQ2hhdCAqLykgJiZcbiAgICAgICAgcHJvZHVjdFN1Yi52YWx1ZSAhPT0gJzIwMDMwMTA3JylcbiAgICAgICAgcmV0dXJuIEJvdEtpbmQuVW5rbm93bjtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBkZXRlY3REaXN0aW5jdGl2ZVByb3BlcnRpZXMoX2EpIHtcbiAgICB2YXIgZGlzdGluY3RpdmVQcm9wcyA9IF9hLmRpc3RpbmN0aXZlUHJvcHM7XG4gICAgaWYgKGRpc3RpbmN0aXZlUHJvcHMuc3RhdGUgIT09IDAgLyogU3RhdGUuU3VjY2VzcyAqLylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHZhciB2YWx1ZSA9IGRpc3RpbmN0aXZlUHJvcHMudmFsdWU7XG4gICAgdmFyIGJvdDtcbiAgICBmb3IgKGJvdCBpbiB2YWx1ZSlcbiAgICAgICAgaWYgKHZhbHVlW2JvdF0pXG4gICAgICAgICAgICByZXR1cm4gYm90O1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgY291bnRUcnV0aHkgfSBmcm9tICcuL21pc2MnO1xuaW1wb3J0IHsgc3RySW5jbHVkZXMgfSBmcm9tICcuL3BvbnlmaWxscyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0QnJvd3NlckVuZ2luZUtpbmQoKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICAvLyBCYXNlZCBvbiByZXNlYXJjaCBpbiBPY3RvYmVyIDIwMjAuIFRlc3RlZCB0byBkZXRlY3QgQ2hyb21pdW0gNDItODYuXG4gICAgdmFyIHcgPSB3aW5kb3c7XG4gICAgdmFyIG4gPSBuYXZpZ2F0b3I7XG4gICAgaWYgKGNvdW50VHJ1dGh5KFtcbiAgICAgICAgJ3dlYmtpdFBlcnNpc3RlbnRTdG9yYWdlJyBpbiBuLFxuICAgICAgICAnd2Via2l0VGVtcG9yYXJ5U3RvcmFnZScgaW4gbixcbiAgICAgICAgbi52ZW5kb3IuaW5kZXhPZignR29vZ2xlJykgPT09IDAsXG4gICAgICAgICd3ZWJraXRSZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMJyBpbiB3LFxuICAgICAgICAnQmF0dGVyeU1hbmFnZXInIGluIHcsXG4gICAgICAgICd3ZWJraXRNZWRpYVN0cmVhbScgaW4gdyxcbiAgICAgICAgJ3dlYmtpdFNwZWVjaEdyYW1tYXInIGluIHcsXG4gICAgXSkgPj0gNSkge1xuICAgICAgICByZXR1cm4gXCJjaHJvbWl1bVwiIC8qIEJyb3dzZXJFbmdpbmVLaW5kLkNocm9taXVtICovO1xuICAgIH1cbiAgICBpZiAoY291bnRUcnV0aHkoW1xuICAgICAgICAnQXBwbGVQYXlFcnJvcicgaW4gdyxcbiAgICAgICAgJ0NTU1ByaW1pdGl2ZVZhbHVlJyBpbiB3LFxuICAgICAgICAnQ291bnRlcicgaW4gdyxcbiAgICAgICAgbi52ZW5kb3IuaW5kZXhPZignQXBwbGUnKSA9PT0gMCxcbiAgICAgICAgJ2dldFN0b3JhZ2VVcGRhdGVzJyBpbiBuLFxuICAgICAgICAnV2ViS2l0TWVkaWFLZXlzJyBpbiB3LFxuICAgIF0pID49IDQpIHtcbiAgICAgICAgcmV0dXJuIFwid2Via2l0XCIgLyogQnJvd3NlckVuZ2luZUtpbmQuV2Via2l0ICovO1xuICAgIH1cbiAgICBpZiAoY291bnRUcnV0aHkoW1xuICAgICAgICAnYnVpbGRJRCcgaW4gbmF2aWdhdG9yLFxuICAgICAgICAnTW96QXBwZWFyYW5jZScgaW4gKChfYiA9IChfYSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0eWxlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB7fSksXG4gICAgICAgICdvbm1vemZ1bGxzY3JlZW5jaGFuZ2UnIGluIHcsXG4gICAgICAgICdtb3pJbm5lclNjcmVlblgnIGluIHcsXG4gICAgICAgICdDU1NNb3pEb2N1bWVudFJ1bGUnIGluIHcsXG4gICAgICAgICdDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW0nIGluIHcsXG4gICAgXSkgPj0gNCkge1xuICAgICAgICByZXR1cm4gXCJnZWNrb1wiIC8qIEJyb3dzZXJFbmdpbmVLaW5kLkdlY2tvICovO1xuICAgIH1cbiAgICByZXR1cm4gXCJ1bmtub3duXCIgLyogQnJvd3NlckVuZ2luZUtpbmQuVW5rbm93biAqLztcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRCcm93c2VyS2luZCgpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIHVzZXJBZ2VudCA9IChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChzdHJJbmNsdWRlcyh1c2VyQWdlbnQsICdlZGcvJykpIHtcbiAgICAgICAgcmV0dXJuIFwiZWRnZVwiIC8qIEJyb3dzZXJLaW5kLkVkZ2UgKi87XG4gICAgfVxuICAgIGVsc2UgaWYgKHN0ckluY2x1ZGVzKHVzZXJBZ2VudCwgJ3RyaWRlbnQnKSB8fCBzdHJJbmNsdWRlcyh1c2VyQWdlbnQsICdtc2llJykpIHtcbiAgICAgICAgcmV0dXJuIFwiaW50ZXJuZXRfZXhwbG9yZXJcIiAvKiBCcm93c2VyS2luZC5JRSAqLztcbiAgICB9XG4gICAgZWxzZSBpZiAoc3RySW5jbHVkZXModXNlckFnZW50LCAnd2VjaGF0JykpIHtcbiAgICAgICAgcmV0dXJuIFwid2VjaGF0XCIgLyogQnJvd3NlcktpbmQuV2VDaGF0ICovO1xuICAgIH1cbiAgICBlbHNlIGlmIChzdHJJbmNsdWRlcyh1c2VyQWdlbnQsICdmaXJlZm94JykpIHtcbiAgICAgICAgcmV0dXJuIFwiZmlyZWZveFwiIC8qIEJyb3dzZXJLaW5kLkZpcmVmb3ggKi87XG4gICAgfVxuICAgIGVsc2UgaWYgKHN0ckluY2x1ZGVzKHVzZXJBZ2VudCwgJ29wZXJhJykgfHwgc3RySW5jbHVkZXModXNlckFnZW50LCAnb3ByJykpIHtcbiAgICAgICAgcmV0dXJuIFwib3BlcmFcIiAvKiBCcm93c2VyS2luZC5PcGVyYSAqLztcbiAgICB9XG4gICAgZWxzZSBpZiAoc3RySW5jbHVkZXModXNlckFnZW50LCAnY2hyb21lJykpIHtcbiAgICAgICAgcmV0dXJuIFwiY2hyb21lXCIgLyogQnJvd3NlcktpbmQuQ2hyb21lICovO1xuICAgIH1cbiAgICBlbHNlIGlmIChzdHJJbmNsdWRlcyh1c2VyQWdlbnQsICdzYWZhcmknKSkge1xuICAgICAgICByZXR1cm4gXCJzYWZhcmlcIiAvKiBCcm93c2VyS2luZC5TYWZhcmkgKi87XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJ1bmtub3duXCIgLyogQnJvd3NlcktpbmQuVW5rbm93biAqLztcbiAgICB9XG59XG4vLyBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9maW5nZXJwcmludGpzL2ZpbmdlcnByaW50anMvYmxvYi9tYXN0ZXIvc3JjL3V0aWxzL2Jyb3dzZXIudHMjTDIyM1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW5kcm9pZCgpIHtcbiAgICB2YXIgYnJvd3NlckVuZ2luZUtpbmQgPSBnZXRCcm93c2VyRW5naW5lS2luZCgpO1xuICAgIHZhciBpc0l0Q2hyb21pdW0gPSBicm93c2VyRW5naW5lS2luZCA9PT0gXCJjaHJvbWl1bVwiIC8qIEJyb3dzZXJFbmdpbmVLaW5kLkNocm9taXVtICovO1xuICAgIHZhciBpc0l0R2Vja28gPSBicm93c2VyRW5naW5lS2luZCA9PT0gXCJnZWNrb1wiIC8qIEJyb3dzZXJFbmdpbmVLaW5kLkdlY2tvICovO1xuICAgIHZhciB3ID0gd2luZG93O1xuICAgIHZhciBuID0gbmF2aWdhdG9yO1xuICAgIHZhciBjID0gJ2Nvbm5lY3Rpb24nO1xuICAgIC8vIENocm9tZSByZW1vdmVzIGFsbCB3b3JkcyBcIkFuZHJvaWRcIiBmcm9tIGBuYXZpZ2F0b3JgIHdoZW4gZGVza3RvcCB2ZXJzaW9uIGlzIHJlcXVlc3RlZFxuICAgIC8vIEZpcmVmb3gga2VlcHMgXCJBbmRyb2lkXCIgaW4gYG5hdmlnYXRvci5hcHBWZXJzaW9uYCB3aGVuIGRlc2t0b3AgdmVyc2lvbiBpcyByZXF1ZXN0ZWRcbiAgICBpZiAoaXNJdENocm9taXVtKSB7XG4gICAgICAgIHJldHVybiAoY291bnRUcnV0aHkoW1xuICAgICAgICAgICAgISgnU2hhcmVkV29ya2VyJyBpbiB3KSxcbiAgICAgICAgICAgIC8vIGB0eXBlY2hhbmdlYCBpcyBkZXByZWNhdGVkLCBidXQgaXQncyBzdGlsbCBwcmVzZW50IG9uIEFuZHJvaWQgKHRlc3RlZCBvbiBDaHJvbWUgTW9iaWxlIDExNylcbiAgICAgICAgICAgIC8vIFJlbW92YWwgcHJvcG9zYWwgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Njk5ODkyXG4gICAgICAgICAgICAvLyBOb3RlOiB0aGlzIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlIG9uIENocm9tZU9TLCBzbyBhZGRpdGlvbmFsIGRldGVjdG9ycyBhcmUgcmVxdWlyZWQgdG8gYXZvaWQgZmFsc2UtcG9zaXRpdmVzXG4gICAgICAgICAgICBuW2NdICYmICdvbnR5cGVjaGFuZ2UnIGluIG5bY10sXG4gICAgICAgICAgICAhKCdzaW5rSWQnIGluIG5ldyBBdWRpbygpKSxcbiAgICAgICAgXSkgPj0gMik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzSXRHZWNrbykge1xuICAgICAgICByZXR1cm4gY291bnRUcnV0aHkoWydvbm9yaWVudGF0aW9uY2hhbmdlJyBpbiB3LCAnb3JpZW50YXRpb24nIGluIHcsIC9hbmRyb2lkL2kudGVzdChuLmFwcFZlcnNpb24pXSkgPj0gMjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIE9ubHkgMiBicm93c2VyIGVuZ2luZXMgYXJlIHByZXNlbnRlZCBvbiBBbmRyb2lkLlxuICAgICAgICAvLyBBY3R1YWxseSwgdGhlcmUgaXMgYWxzbyBBbmRyb2lkIDQuMSBicm93c2VyLCBidXQgaXQncyBub3Qgd29ydGggZGV0ZWN0aW5nIGl0IGF0IHRoZSBtb21lbnQuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4vLyBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9maW5nZXJwcmludGpzL2ZpbmdlcnByaW50anMvYmxvYi8xMDlmOGVmODAyMTY5ZGYzZmExYzVkMWJhYTRiN2JjMGFiYmMxZDkxL3NyYy91dGlscy9icm93c2VyLnRzI0wxMDJDMS1MMTE4QzJcbmV4cG9ydCBmdW5jdGlvbiBpc0Rlc2t0b3BXZWJLaXQoKSB7XG4gICAgLy8gQ2hlY2tlZCBpbiBTYWZhcmkgYW5kIER1Y2tEdWNrR29cbiAgICB2YXIgdyA9IHdpbmRvdztcbiAgICB2YXIgSFRNTEVsZW1lbnQgPSB3LkhUTUxFbGVtZW50LCBEb2N1bWVudCA9IHcuRG9jdW1lbnQ7XG4gICAgcmV0dXJuIChjb3VudFRydXRoeShbXG4gICAgICAgICdzYWZhcmknIGluIHcsXG4gICAgICAgICEoJ29uZ2VzdHVyZWVuZCcgaW4gdyksXG4gICAgICAgICEoJ1RvdWNoRXZlbnQnIGluIHcpLFxuICAgICAgICAhKCdvcmllbnRhdGlvbicgaW4gdyksXG4gICAgICAgIEhUTUxFbGVtZW50ICYmICEoJ2F1dG9jYXBpdGFsaXplJyBpbiBIVE1MRWxlbWVudC5wcm90b3R5cGUpLFxuICAgICAgICBEb2N1bWVudCAmJiAncG9pbnRlckxvY2tFbGVtZW50JyBpbiBEb2N1bWVudC5wcm90b3R5cGUsXG4gICAgXSkgPj0gNCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TW96QXBwZWFyYW5jZVN1cHBvcnQoKSB7XG4gICAgaWYgKHdpbmRvdy5DU1MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0xIC8qIFN0YXRlLlVuZGVmaW5lZCAqLywgJ3dpbmRvdy5DU1MgaXMgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHJldHVybiBDU1Muc3VwcG9ydHMoJy1tb3otYXBwZWFyYW5jZScsICdhdXRvJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRGb2N1cygpIHtcbiAgICBpZiAoZG9jdW1lbnQuaGFzRm9jdXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBkb2N1bWVudC5oYXNGb2N1cygpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2hyb21pdW04Nk9yTmV3ZXIoKSB7XG4gICAgLy8gQ2hlY2tlZCBpbiBDaHJvbWUgODUgdnMgQ2hyb21lIDg2IGJvdGggb24gZGVza3RvcCBhbmQgQW5kcm9pZC4gQ2hlY2tlZCBpbiBtYWNPUyBDaHJvbWUgMTI4LCBBbmRyb2lkIENocm9tZSAxMjcuXG4gICAgdmFyIHcgPSB3aW5kb3c7XG4gICAgcmV0dXJuIChjb3VudFRydXRoeShbXG4gICAgICAgICEoJ01lZGlhU2V0dGluZ3NSYW5nZScgaW4gdyksXG4gICAgICAgICdSVENFbmNvZGVkQXVkaW9GcmFtZScgaW4gdyxcbiAgICAgICAgJycgKyB3LkludGwgPT09ICdbb2JqZWN0IEludGxdJyxcbiAgICAgICAgJycgKyB3LlJlZmxlY3QgPT09ICdbb2JqZWN0IFJlZmxlY3RdJyxcbiAgICBdKSA+PSAzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0lQYWQoKSB7XG4gICAgLy8gQ2hlY2tlZCBvbjpcbiAgICAvLyBTYWZhcmkgb24gaVBhZE9TIChib3RoIG1vYmlsZSBhbmQgZGVza3RvcCBtb2Rlcyk6IDgsIDExLTE4XG4gICAgLy8gQ2hyb21lIG9uIGlQYWRPUyAoYm90aCBtb2JpbGUgYW5kIGRlc2t0b3AgbW9kZXMpOiAxMS0xOFxuICAgIC8vIFNhZmFyaSBvbiBpT1MgKGJvdGggbW9iaWxlIGFuZCBkZXNrdG9wIG1vZGVzKTogOS0xOFxuICAgIC8vIENocm9tZSBvbiBpT1MgKGJvdGggbW9iaWxlIGFuZCBkZXNrdG9wIG1vZGVzKTogOS0xOFxuICAgIC8vIEJlZm9yZSBpT1MgMTMuIFNhZmFyaSB0YW1wZXJzIHRoZSB2YWx1ZSBpbiBcInJlcXVlc3QgZGVza3RvcCBzaXRlXCIgbW9kZSBzaW5jZSBpT1MgMTMuXG4gICAgaWYgKG5hdmlnYXRvci5wbGF0Zm9ybSA9PT0gJ2lQYWQnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB2YXIgcyA9IHNjcmVlbjtcbiAgICB2YXIgc2NyZWVuUmF0aW8gPSBzLndpZHRoIC8gcy5oZWlnaHQ7XG4gICAgcmV0dXJuIChjb3VudFRydXRoeShbXG4gICAgICAgIC8vIFNpbmNlIGlPUyAxMy4gRG9lc24ndCB3b3JrIGluIENocm9tZSBvbiBpUGFkT1MgPDE1LCBidXQgd29ya3MgaW4gZGVza3RvcCBtb2RlLlxuICAgICAgICAnTWVkaWFTb3VyY2UnIGluIHdpbmRvdyxcbiAgICAgICAgLy8gU2luY2UgaU9TIDEyLiBEb2Vzbid0IHdvcmsgaW4gQ2hyb21lIG9uIGlQYWRPUy5cbiAgICAgICAgISFFbGVtZW50LnByb3RvdHlwZS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbixcbiAgICAgICAgLy8gaVBob25lIDRTIHRoYXQgcnVucyBpT1MgOSBtYXRjaGVzIHRoaXMsIGJ1dCBpdCBpcyBub3Qgc3VwcG9ydGVkXG4gICAgICAgIC8vIERvZXNuJ3Qgd29yayBpbiBpbmNvZ25pdG8gbW9kZSBvZiBTYWZhcmkg4omlMTcgd2l0aCBzcGxpdCBzY3JlZW4gYmVjYXVzZSBvZiB0cmFja2luZyBwcmV2ZW50aW9uXG4gICAgICAgIHNjcmVlblJhdGlvID4gMC42NSAmJiBzY3JlZW5SYXRpbyA8IDEuNTMsXG4gICAgXSkgPj0gMik7XG59XG4iLCJpbXBvcnQgZ2V0QXBwVmVyc2lvbiBmcm9tICcuL2FwcF92ZXJzaW9uJztcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnRLZXlzIGZyb20gJy4vZG9jdW1lbnRfZWxlbWVudF9rZXlzJztcbmltcG9ydCBnZXRFcnJvclRyYWNlIGZyb20gJy4vZXJyb3JfdHJhY2UnO1xuaW1wb3J0IGdldEV2YWxMZW5ndGggZnJvbSAnLi9ldmFsX2xlbmd0aCc7XG5pbXBvcnQgZ2V0RnVuY3Rpb25CaW5kIGZyb20gJy4vZnVuY3Rpb25fYmluZCc7XG5pbXBvcnQgZ2V0TGFuZ3VhZ2VzIGZyb20gJy4vbGFuZ3VhZ2VzJztcbmltcG9ydCBhcmVNaW1lVHlwZXNDb25zaXN0ZW50IGZyb20gJy4vbWltZV90eXBlc19jb25zaXN0ZW5jZSc7XG5pbXBvcnQgZ2V0Tm90aWZpY2F0aW9uUGVybWlzc2lvbnMgZnJvbSAnLi9ub3RpZmljYXRpb25fcGVybWlzc2lvbnMnO1xuaW1wb3J0IGdldFBsdWdpbnNBcnJheSBmcm9tICcuL3BsdWdpbnNfYXJyYXknO1xuaW1wb3J0IGdldFBsdWdpbnNMZW5ndGggZnJvbSAnLi9wbHVnaW5zX2xlbmd0aCc7XG5pbXBvcnQgZ2V0UHJvY2VzcyBmcm9tICcuL3Byb2Nlc3MnO1xuaW1wb3J0IGdldFByb2R1Y3RTdWIgZnJvbSAnLi9wcm9kdWN0X3N1Yic7XG5pbXBvcnQgZ2V0UlRUIGZyb20gJy4vcnR0JztcbmltcG9ydCBnZXRVc2VyQWdlbnQgZnJvbSAnLi91c2VyX2FnZW50JztcbmltcG9ydCBnZXRXZWJEcml2ZXIgZnJvbSAnLi93ZWJkcml2ZXInO1xuaW1wb3J0IGdldFdlYkdMIGZyb20gJy4vd2ViZ2wnO1xuaW1wb3J0IGdldFdpbmRvd0V4dGVybmFsIGZyb20gJy4vd2luZG93X2V4dGVybmFsJztcbmltcG9ydCBnZXRXaW5kb3dTaXplIGZyb20gJy4vd2luZG93X3NpemUnO1xuaW1wb3J0IGNoZWNrRGlzdGluY3RpdmVQcm9wZXJ0aWVzIGZyb20gJy4vZGlzdGluY3RpdmVfcHJvcGVydGllcyc7XG5pbXBvcnQgeyBnZXRCcm93c2VyRW5naW5lS2luZCwgZ2V0QnJvd3NlcktpbmQsIGdldERvY3VtZW50Rm9jdXMsIGlzQW5kcm9pZCB9IGZyb20gJy4uL3V0aWxzL2Jyb3dzZXInO1xuZXhwb3J0IHZhciBzb3VyY2VzID0ge1xuICAgIGFuZHJvaWQ6IGlzQW5kcm9pZCxcbiAgICBicm93c2VyS2luZDogZ2V0QnJvd3NlcktpbmQsXG4gICAgYnJvd3NlckVuZ2luZUtpbmQ6IGdldEJyb3dzZXJFbmdpbmVLaW5kLFxuICAgIGRvY3VtZW50Rm9jdXM6IGdldERvY3VtZW50Rm9jdXMsXG4gICAgdXNlckFnZW50OiBnZXRVc2VyQWdlbnQsXG4gICAgYXBwVmVyc2lvbjogZ2V0QXBwVmVyc2lvbixcbiAgICBydHQ6IGdldFJUVCxcbiAgICB3aW5kb3dTaXplOiBnZXRXaW5kb3dTaXplLFxuICAgIHBsdWdpbnNMZW5ndGg6IGdldFBsdWdpbnNMZW5ndGgsXG4gICAgcGx1Z2luc0FycmF5OiBnZXRQbHVnaW5zQXJyYXksXG4gICAgZXJyb3JUcmFjZTogZ2V0RXJyb3JUcmFjZSxcbiAgICBwcm9kdWN0U3ViOiBnZXRQcm9kdWN0U3ViLFxuICAgIHdpbmRvd0V4dGVybmFsOiBnZXRXaW5kb3dFeHRlcm5hbCxcbiAgICBtaW1lVHlwZXNDb25zaXN0ZW50OiBhcmVNaW1lVHlwZXNDb25zaXN0ZW50LFxuICAgIGV2YWxMZW5ndGg6IGdldEV2YWxMZW5ndGgsXG4gICAgd2ViR0w6IGdldFdlYkdMLFxuICAgIHdlYkRyaXZlcjogZ2V0V2ViRHJpdmVyLFxuICAgIGxhbmd1YWdlczogZ2V0TGFuZ3VhZ2VzLFxuICAgIG5vdGlmaWNhdGlvblBlcm1pc3Npb25zOiBnZXROb3RpZmljYXRpb25QZXJtaXNzaW9ucyxcbiAgICBkb2N1bWVudEVsZW1lbnRLZXlzOiBnZXREb2N1bWVudEVsZW1lbnRLZXlzLFxuICAgIGZ1bmN0aW9uQmluZDogZ2V0RnVuY3Rpb25CaW5kLFxuICAgIHByb2Nlc3M6IGdldFByb2Nlc3MsXG4gICAgZGlzdGluY3RpdmVQcm9wczogY2hlY2tEaXN0aW5jdGl2ZVByb3BlcnRpZXMsXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VXNlckFnZW50KCkge1xuICAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50O1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QXBwVmVyc2lvbigpIHtcbiAgICB2YXIgYXBwVmVyc2lvbiA9IG5hdmlnYXRvci5hcHBWZXJzaW9uO1xuICAgIGlmIChhcHBWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0xIC8qIFN0YXRlLlVuZGVmaW5lZCAqLywgJ25hdmlnYXRvci5hcHBWZXJzaW9uIGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICByZXR1cm4gYXBwVmVyc2lvbjtcbn1cbiIsImltcG9ydCB7IEJvdGRFcnJvciB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFJUVCgpIHtcbiAgICBpZiAobmF2aWdhdG9yLmNvbm5lY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0xIC8qIFN0YXRlLlVuZGVmaW5lZCAqLywgJ25hdmlnYXRvci5jb25uZWN0aW9uIGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICBpZiAobmF2aWdhdG9yLmNvbm5lY3Rpb24ucnR0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICduYXZpZ2F0b3IuY29ubmVjdGlvbi5ydHQgaXMgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHJldHVybiBuYXZpZ2F0b3IuY29ubmVjdGlvbi5ydHQ7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTaXplKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG91dGVyV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBvdXRlckhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgICAgICBpbm5lcldpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCxcbiAgICAgICAgaW5uZXJIZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCxcbiAgICB9O1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UGx1Z2luc0xlbmd0aCgpIHtcbiAgICBpZiAobmF2aWdhdG9yLnBsdWdpbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0xIC8qIFN0YXRlLlVuZGVmaW5lZCAqLywgJ25hdmlnYXRvci5wbHVnaW5zIGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICBpZiAobmF2aWdhdG9yLnBsdWdpbnMubGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMyAvKiBTdGF0ZS5VbmV4cGVjdGVkQmVoYXZpb3VyICovLCAnbmF2aWdhdG9yLnBsdWdpbnMubGVuZ3RoIGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICByZXR1cm4gbmF2aWdhdG9yLnBsdWdpbnMubGVuZ3RoO1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UGx1Z2luc0FycmF5KCkge1xuICAgIGlmIChuYXZpZ2F0b3IucGx1Z2lucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTEgLyogU3RhdGUuVW5kZWZpbmVkICovLCAnbmF2aWdhdG9yLnBsdWdpbnMgaXMgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIGlmICh3aW5kb3cuUGx1Z2luQXJyYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0xIC8qIFN0YXRlLlVuZGVmaW5lZCAqLywgJ3dpbmRvdy5QbHVnaW5BcnJheSBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hdmlnYXRvci5wbHVnaW5zIGluc3RhbmNlb2YgUGx1Z2luQXJyYXk7XG59XG4iLCJpbXBvcnQgeyBCb3RkRXJyb3IgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRFcnJvclRyYWNlKCkge1xuICAgIHRyeSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBudWxsWzBdKCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvclsnc3RhY2snXSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3Iuc3RhY2sudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0zIC8qIFN0YXRlLlVuZXhwZWN0ZWRCZWhhdmlvdXIgKi8sICdlcnJvclRyYWNlIHNpZ25hbCB1bmV4cGVjdGVkIGJlaGF2aW91cicpO1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UHJvZHVjdFN1YigpIHtcbiAgICB2YXIgcHJvZHVjdFN1YiA9IG5hdmlnYXRvci5wcm9kdWN0U3ViO1xuICAgIGlmIChwcm9kdWN0U3ViID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICduYXZpZ2F0b3IucHJvZHVjdFN1YiBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHByb2R1Y3RTdWI7XG59XG4iLCJpbXBvcnQgeyBCb3RkRXJyb3IgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dFeHRlcm5hbCgpIHtcbiAgICBpZiAod2luZG93LmV4dGVybmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICd3aW5kb3cuZXh0ZXJuYWwgaXMgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHZhciBleHRlcm5hbCA9IHdpbmRvdy5leHRlcm5hbDtcbiAgICBpZiAodHlwZW9mIGV4dGVybmFsLnRvU3RyaW5nICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTIgLyogU3RhdGUuTm90RnVuY3Rpb24gKi8sICd3aW5kb3cuZXh0ZXJuYWwudG9TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4dGVybmFsLnRvU3RyaW5nKCk7XG59XG4iLCJpbXBvcnQgeyBCb3RkRXJyb3IgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhcmVNaW1lVHlwZXNDb25zaXN0ZW50KCkge1xuICAgIGlmIChuYXZpZ2F0b3IubWltZVR5cGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICduYXZpZ2F0b3IubWltZVR5cGVzIGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICB2YXIgbWltZVR5cGVzID0gbmF2aWdhdG9yLm1pbWVUeXBlcztcbiAgICB2YXIgaXNDb25zaXN0ZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG1pbWVUeXBlcykgPT09IE1pbWVUeXBlQXJyYXkucHJvdG90eXBlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWltZVR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlzQ29uc2lzdGVudCAmJiAoaXNDb25zaXN0ZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG1pbWVUeXBlc1tpXSkgPT09IE1pbWVUeXBlLnByb3RvdHlwZSk7XG4gICAgfVxuICAgIHJldHVybiBpc0NvbnNpc3RlbnQ7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRFdmFsTGVuZ3RoKCkge1xuICAgIHJldHVybiBldmFsLnRvU3RyaW5nKCkubGVuZ3RoO1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2ViR0woKSB7XG4gICAgdmFyIGNhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBpZiAodHlwZW9mIGNhbnZhc0VsZW1lbnQuZ2V0Q29udGV4dCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgQm90ZEVycm9yKC0yIC8qIFN0YXRlLk5vdEZ1bmN0aW9uICovLCAnSFRNTENhbnZhc0VsZW1lbnQuZ2V0Q29udGV4dCBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgIH1cbiAgICB2YXIgd2ViR0xDb250ZXh0ID0gY2FudmFzRWxlbWVudC5nZXRDb250ZXh0KCd3ZWJnbCcpO1xuICAgIGlmICh3ZWJHTENvbnRleHQgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtNCAvKiBTdGF0ZS5OdWxsICovLCAnV2ViR0xSZW5kZXJpbmdDb250ZXh0IGlzIG51bGwnKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3ZWJHTENvbnRleHQuZ2V0UGFyYW1ldGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTIgLyogU3RhdGUuTm90RnVuY3Rpb24gKi8sICdXZWJHTFJlbmRlcmluZ0NvbnRleHQuZ2V0UGFyYW1ldGVyIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgfVxuICAgIHZhciB2ZW5kb3IgPSB3ZWJHTENvbnRleHQuZ2V0UGFyYW1ldGVyKHdlYkdMQ29udGV4dC5WRU5ET1IpO1xuICAgIHZhciByZW5kZXJlciA9IHdlYkdMQ29udGV4dC5nZXRQYXJhbWV0ZXIod2ViR0xDb250ZXh0LlJFTkRFUkVSKTtcbiAgICByZXR1cm4geyB2ZW5kb3I6IHZlbmRvciwgcmVuZGVyZXI6IHJlbmRlcmVyIH07XG59XG4iLCJpbXBvcnQgeyBCb3RkRXJyb3IgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXZWJEcml2ZXIoKSB7XG4gICAgaWYgKG5hdmlnYXRvci53ZWJkcml2ZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTEgLyogU3RhdGUuVW5kZWZpbmVkICovLCAnbmF2aWdhdG9yLndlYmRyaXZlciBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hdmlnYXRvci53ZWJkcml2ZXI7XG59XG4iLCJpbXBvcnQgeyBnZXRCcm93c2VyRW5naW5lS2luZCwgaXNDaHJvbWl1bTg2T3JOZXdlciB9IGZyb20gJy4uL3V0aWxzL2Jyb3dzZXInO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGFuZ3VhZ2VzKCkge1xuICAgIHZhciBuID0gbmF2aWdhdG9yO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgbGFuZ3VhZ2UgPSBuLmxhbmd1YWdlIHx8IG4udXNlckxhbmd1YWdlIHx8IG4uYnJvd3Nlckxhbmd1YWdlIHx8IG4uc3lzdGVtTGFuZ3VhZ2U7XG4gICAgaWYgKGxhbmd1YWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goW2xhbmd1YWdlXSk7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KG4ubGFuZ3VhZ2VzKSkge1xuICAgICAgICB2YXIgYnJvd3NlckVuZ2luZSA9IGdldEJyb3dzZXJFbmdpbmVLaW5kKCk7XG4gICAgICAgIC8vIFN0YXJ0aW5nIGZyb20gQ2hyb21pdW0gODYsIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgdmFsdWUgaW4gYG5hdmlnYXRvci5sYW5ndWFnZWAgaW4gSW5jb2duaXRvIG1vZGU6XG4gICAgICAgIC8vIHRoZSB2YWx1ZSBvZiBgbmF2aWdhdG9yLmxhbmd1YWdlYC4gVGhlcmVmb3JlLCB0aGUgdmFsdWUgaXMgaWdub3JlZCBpbiB0aGlzIGJyb3dzZXIuXG4gICAgICAgIGlmICghKGJyb3dzZXJFbmdpbmUgPT09IFwiY2hyb21pdW1cIiAvKiBCcm93c2VyRW5naW5lS2luZC5DaHJvbWl1bSAqLyAmJiBpc0Nocm9taXVtODZPck5ld2VyKCkpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuLmxhbmd1YWdlcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIG4ubGFuZ3VhZ2VzID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgbGFuZ3VhZ2VzID0gbi5sYW5ndWFnZXM7XG4gICAgICAgIGlmIChsYW5ndWFnZXMpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGxhbmd1YWdlcy5zcGxpdCgnLCcpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IHsgX19hd2FpdGVyLCBfX2dlbmVyYXRvciB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9uUGVybWlzc2lvbnMoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGVybWlzc2lvbnMsIHBlcm1pc3Npb25TdGF0dXMsIGVfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5Ob3RpZmljYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICd3aW5kb3cuTm90aWZpY2F0aW9uIGlzIHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYXZpZ2F0b3IucGVybWlzc2lvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEJvdGRFcnJvcigtMSAvKiBTdGF0ZS5VbmRlZmluZWQgKi8sICduYXZpZ2F0b3IucGVybWlzc2lvbnMgaXMgdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgPSBuYXZpZ2F0b3IucGVybWlzc2lvbnM7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGVybWlzc2lvbnMucXVlcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTIgLyogU3RhdGUuTm90RnVuY3Rpb24gKi8sICduYXZpZ2F0b3IucGVybWlzc2lvbnMucXVlcnkgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzEsIDMsICwgNF0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBwZXJtaXNzaW9ucy5xdWVyeSh7IG5hbWU6ICdub3RpZmljYXRpb25zJyB9KV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uU3RhdHVzID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgd2luZG93Lk5vdGlmaWNhdGlvbi5wZXJtaXNzaW9uID09PSAnZGVuaWVkJyAmJiBwZXJtaXNzaW9uU3RhdHVzLnN0YXRlID09PSAncHJvbXB0J107XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBlXzEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTMgLyogU3RhdGUuVW5leHBlY3RlZEJlaGF2aW91ciAqLywgJ25vdGlmaWNhdGlvblBlcm1pc3Npb25zIHNpZ25hbCB1bmV4cGVjdGVkIGJlaGF2aW91cicpO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IEJvdGRFcnJvciB9IGZyb20gJy4uL3R5cGVzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudEtleXMoKSB7XG4gICAgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTEgLyogU3RhdGUuVW5kZWZpbmVkICovLCAnZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZU5hbWVzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTIgLyogU3RhdGUuTm90RnVuY3Rpb24gKi8sICdkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIGRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGVOYW1lcygpO1xufVxuIiwiaW1wb3J0IHsgQm90ZEVycm9yIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RnVuY3Rpb25CaW5kKCkge1xuICAgIGlmIChGdW5jdGlvbi5wcm90b3R5cGUuYmluZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTIgLyogU3RhdGUuTm90RnVuY3Rpb24gKi8sICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLnRvU3RyaW5nKCk7XG59XG4iLCJpbXBvcnQgeyBCb3RkRXJyb3IgfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRQcm9jZXNzKCkge1xuICAgIHZhciBwcm9jZXNzID0gd2luZG93LnByb2Nlc3M7XG4gICAgdmFyIGVycm9yUHJlZml4ID0gJ3dpbmRvdy5wcm9jZXNzIGlzJztcbiAgICBpZiAocHJvY2VzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTEgLyogU3RhdGUuVW5kZWZpbmVkICovLCBcIlwiLmNvbmNhdChlcnJvclByZWZpeCwgXCIgdW5kZWZpbmVkXCIpKTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBCb3RkRXJyb3IoLTMgLyogU3RhdGUuVW5leHBlY3RlZEJlaGF2aW91ciAqLywgXCJcIi5jb25jYXQoZXJyb3JQcmVmaXgsIFwiIG5vdCBhbiBvYmplY3RcIikpO1xuICAgIH1cbiAgICByZXR1cm4gcHJvY2Vzcztcbn1cbiIsImltcG9ydCB7IF9fc3ByZWFkQXJyYXkgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IEJvdEtpbmQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRPYmplY3RQcm9wcywgaW5jbHVkZXMgfSBmcm9tICcuLi91dGlscy9taXNjJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNoZWNrRGlzdGluY3RpdmVQcm9wZXJ0aWVzKCkge1xuICAgIHZhciBfYTtcbiAgICAvLyBUaGUgb3JkZXIgaW4gdGhlIGZvbGxvd2luZyBsaXN0IG1hdHRlcnMsIGJlY2F1c2Ugc3BlY2lmaWMgdHlwZXMgb2YgYm90cyBjb21lIGZpcnN0LCBmb2xsb3dlZCBieSBhdXRvbWF0aW9uIHRlY2hub2xvZ2llcy5cbiAgICB2YXIgZGlzdGluY3RpdmVQcm9wc0xpc3QgPSAoX2EgPSB7fSxcbiAgICAgICAgX2FbQm90S2luZC5Bd2Vzb21pdW1dID0ge1xuICAgICAgICAgICAgd2luZG93OiBbJ2F3ZXNvbWl1bSddLFxuICAgICAgICB9LFxuICAgICAgICBfYVtCb3RLaW5kLkNlZl0gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnUnVuUGVyZlRlc3QnXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5DZWZTaGFycF0gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnQ2VmU2hhcnAnXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5Db2FjaEpTXSA9IHtcbiAgICAgICAgICAgIHdpbmRvdzogWydlbWl0J10sXG4gICAgICAgIH0sXG4gICAgICAgIF9hW0JvdEtpbmQuRk1pbmVyXSA9IHtcbiAgICAgICAgICAgIHdpbmRvdzogWydmbWdldF90YXJnZXRzJ10sXG4gICAgICAgIH0sXG4gICAgICAgIF9hW0JvdEtpbmQuR2ViXSA9IHtcbiAgICAgICAgICAgIHdpbmRvdzogWydnZWInXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5OaWdodG1hcmVKU10gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnX19uaWdodG1hcmUnLCAnbmlnaHRtYXJlJ10sXG4gICAgICAgIH0sXG4gICAgICAgIF9hW0JvdEtpbmQuUGhhbnRvbWFzXSA9IHtcbiAgICAgICAgICAgIHdpbmRvdzogWydfX3BoYW50b21hcyddLFxuICAgICAgICB9LFxuICAgICAgICBfYVtCb3RLaW5kLlBoYW50b21KU10gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnY2FsbFBoYW50b20nLCAnX3BoYW50b20nXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5SaGlub10gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnc3Bhd24nXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5TZWxlbml1bV0gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnX1NlbGVuaXVtX0lERV9SZWNvcmRlcicsICdfc2VsZW5pdW0nLCAnY2FsbGVkU2VsZW5pdW0nLCAvXihbYS16XSl7M31fLipfKEFycmF5fFByb21pc2V8U3ltYm9sKSQvXSxcbiAgICAgICAgICAgIGRvY3VtZW50OiBbJ19fc2VsZW5pdW1fZXZhbHVhdGUnLCAnc2VsZW5pdW0tZXZhbHVhdGUnLCAnX19zZWxlbml1bV91bndyYXBwZWQnXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5XZWJEcml2ZXJJT10gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnd2Rpb0VsZWN0cm9uJ10sXG4gICAgICAgIH0sXG4gICAgICAgIF9hW0JvdEtpbmQuV2ViRHJpdmVyXSA9IHtcbiAgICAgICAgICAgIHdpbmRvdzogW1xuICAgICAgICAgICAgICAgICd3ZWJkcml2ZXInLFxuICAgICAgICAgICAgICAgICdfX3dlYmRyaXZlckZ1bmMnLFxuICAgICAgICAgICAgICAgICdfX2xhc3RXYXRpckFsZXJ0JyxcbiAgICAgICAgICAgICAgICAnX19sYXN0V2F0aXJDb25maXJtJyxcbiAgICAgICAgICAgICAgICAnX19sYXN0V2F0aXJQcm9tcHQnLFxuICAgICAgICAgICAgICAgICdfV0VCRFJJVkVSX0VMRU1fQ0FDSEUnLFxuICAgICAgICAgICAgICAgICdDaHJvbWVEcml2ZXJ3JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBkb2N1bWVudDogW1xuICAgICAgICAgICAgICAgICdfX3dlYmRyaXZlcl9zY3JpcHRfZm4nLFxuICAgICAgICAgICAgICAgICdfX2RyaXZlcl9ldmFsdWF0ZScsXG4gICAgICAgICAgICAgICAgJ19fd2ViZHJpdmVyX2V2YWx1YXRlJyxcbiAgICAgICAgICAgICAgICAnX19meGRyaXZlcl9ldmFsdWF0ZScsXG4gICAgICAgICAgICAgICAgJ19fZHJpdmVyX3Vud3JhcHBlZCcsXG4gICAgICAgICAgICAgICAgJ19fd2ViZHJpdmVyX3Vud3JhcHBlZCcsXG4gICAgICAgICAgICAgICAgJ19fZnhkcml2ZXJfdW53cmFwcGVkJyxcbiAgICAgICAgICAgICAgICAnX193ZWJkcml2ZXJfc2NyaXB0X2ZuJyxcbiAgICAgICAgICAgICAgICAnX193ZWJkcml2ZXJfc2NyaXB0X2Z1bmMnLFxuICAgICAgICAgICAgICAgICdfX3dlYmRyaXZlcl9zY3JpcHRfZnVuY3Rpb24nLFxuICAgICAgICAgICAgICAgICckY2RjX2FzZGpmbGFzdXRvcGZodmNaTG1jZicsXG4gICAgICAgICAgICAgICAgJyRjZGNfYXNkamZsYXN1dG9wZmh2Y1pMbWNmbF8nLFxuICAgICAgICAgICAgICAgICckY2hyb21lX2FzeW5jU2NyaXB0SW5mbycsXG4gICAgICAgICAgICAgICAgJ19fJHdlYmRyaXZlckFzeW5jRXhlY3V0b3InLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgX2FbQm90S2luZC5IZWFkbGVzc0Nocm9tZV0gPSB7XG4gICAgICAgICAgICB3aW5kb3c6IFsnZG9tQXV0b21hdGlvbicsICdkb21BdXRvbWF0aW9uQ29udHJvbGxlciddLFxuICAgICAgICB9LFxuICAgICAgICBfYSk7XG4gICAgdmFyIGJvdE5hbWU7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciB3aW5kb3dQcm9wcyA9IGdldE9iamVjdFByb3BzKHdpbmRvdyk7XG4gICAgdmFyIGRvY3VtZW50UHJvcHMgPSBbXTtcbiAgICBpZiAod2luZG93LmRvY3VtZW50ICE9PSB1bmRlZmluZWQpXG4gICAgICAgIGRvY3VtZW50UHJvcHMgPSBnZXRPYmplY3RQcm9wcyh3aW5kb3cuZG9jdW1lbnQpO1xuICAgIGZvciAoYm90TmFtZSBpbiBkaXN0aW5jdGl2ZVByb3BzTGlzdCkge1xuICAgICAgICB2YXIgcHJvcHMgPSBkaXN0aW5jdGl2ZVByb3BzTGlzdFtib3ROYW1lXTtcbiAgICAgICAgaWYgKHByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHZhciB3aW5kb3dDb250YWlucyA9IHByb3BzLndpbmRvdyA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBpbmNsdWRlcy5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW3dpbmRvd1Byb3BzXSwgcHJvcHMud2luZG93LCBmYWxzZSkpO1xuICAgICAgICAgICAgdmFyIGRvY3VtZW50Q29udGFpbnMgPSBwcm9wcy5kb2N1bWVudCA9PT0gdW5kZWZpbmVkIHx8ICFkb2N1bWVudFByb3BzLmxlbmd0aCA/IGZhbHNlIDogaW5jbHVkZXMuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtkb2N1bWVudFByb3BzXSwgcHJvcHMuZG9jdW1lbnQsIGZhbHNlKSk7XG4gICAgICAgICAgICByZXN1bHRbYm90TmFtZV0gPSB3aW5kb3dDb250YWlucyB8fCBkb2N1bWVudENvbnRhaW5zO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgeyBfX2F3YWl0ZXIsIF9fZ2VuZXJhdG9yIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBjb2xsZWN0LCBkZXRlY3QgfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQgeyBkZXRlY3RvcnMgfSBmcm9tICcuL2RldGVjdG9ycyc7XG5pbXBvcnQgeyBzb3VyY2VzIH0gZnJvbSAnLi9zb3VyY2VzJztcbi8qKlxuICogQ2xhc3MgcmVwcmVzZW50aW5nIGEgYm90IGRldGVjdG9yLlxuICpcbiAqIEBjbGFzc1xuICogQGltcGxlbWVudHMge0JvdERldGVjdG9ySW50ZXJmYWNlfVxuICovXG52YXIgQm90RGV0ZWN0b3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQm90RGV0ZWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5kZXRlY3Rpb25zID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBCb3REZXRlY3Rvci5wcm90b3R5cGUuZ2V0Q29tcG9uZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50cztcbiAgICB9O1xuICAgIEJvdERldGVjdG9yLnByb3RvdHlwZS5nZXREZXRlY3Rpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXRlY3Rpb25zO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQGluaGVyaXRkb2NcbiAgICAgKi9cbiAgICBCb3REZXRlY3Rvci5wcm90b3R5cGUuZGV0ZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jb21wb25lbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJvdERldGVjdG9yLmRldGVjdCBjYW4ndCBiZSBjYWxsZWQgYmVmb3JlIEJvdERldGVjdG9yLmNvbGxlY3RcIik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9hID0gZGV0ZWN0KHRoaXMuY29tcG9uZW50cywgZGV0ZWN0b3JzKSwgZGV0ZWN0aW9ucyA9IF9hWzBdLCBmaW5hbERldGVjdGlvbiA9IF9hWzFdO1xuICAgICAgICB0aGlzLmRldGVjdGlvbnMgPSBkZXRlY3Rpb25zO1xuICAgICAgICByZXR1cm4gZmluYWxEZXRlY3Rpb247XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdGRvY1xuICAgICAqL1xuICAgIEJvdERldGVjdG9yLnByb3RvdHlwZS5jb2xsZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYSA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBjb2xsZWN0KHNvdXJjZXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2EuY29tcG9uZW50cyA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLmNvbXBvbmVudHNdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBCb3REZXRlY3Rvcjtcbn0oKSk7XG5leHBvcnQgZGVmYXVsdCBCb3REZXRlY3RvcjtcbiIsImltcG9ydCB7IF9fYXdhaXRlciwgX19nZW5lcmF0b3IgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xuaW1wb3J0IEJvdERldGVjdG9yIGZyb20gJy4vZGV0ZWN0b3InO1xuaW1wb3J0IHsgc291cmNlcyB9IGZyb20gJy4vc291cmNlcyc7XG5pbXBvcnQgeyBkZXRlY3RvcnMgfSBmcm9tICcuL2RldGVjdG9ycyc7XG5pbXBvcnQgeyBCb3RkRXJyb3IsIEJvdEtpbmQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGNvbGxlY3QsIGRldGVjdCB9IGZyb20gJy4vYXBpJztcbi8qKlxuICogU2VuZHMgYW4gdW5wZXJzb25hbGl6ZWQgQUpBWCByZXF1ZXN0IHRvIGNvbGxlY3QgaW5zdGFsbGF0aW9uIHN0YXRpc3RpY3NcbiAqL1xuZnVuY3Rpb24gbW9uaXRvcigpIHtcbiAgICAvLyBUaGUgRmluZ2VycHJpbnRKUyBDRE4gKGh0dHBzOi8vZ2l0aHViLmNvbS9maW5nZXJwcmludGpzL2NkbikgcmVwbGFjZXMgYHdpbmRvdy5fX2ZwanNfZF9tYCB3aXRoIGB0cnVlYFxuICAgIGlmICh3aW5kb3cuX19mcGpzX2RfbSB8fCBNYXRoLnJhbmRvbSgpID49IDAuMDAxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgcmVxdWVzdC5vcGVuKCdnZXQnLCBcImh0dHBzOi8vbTEub3BlbmZwY2RuLmlvL2JvdGQvdlwiLmNvbmNhdCh2ZXJzaW9uLCBcIi9ucG0tbW9uaXRvcmluZ1wiKSwgdHJ1ZSk7XG4gICAgICAgIHJlcXVlc3Quc2VuZCgpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gY29uc29sZS5lcnJvciBpcyBvayBoZXJlIGJlY2F1c2UgaXQncyBhbiB1bmV4cGVjdGVkIGVycm9yIGhhbmRsZXJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGxvYWQoX2EpIHtcbiAgICB2YXIgX2IgPSBfYSA9PT0gdm9pZCAwID8ge30gOiBfYSwgX2MgPSBfYi5tb25pdG9yaW5nLCBtb25pdG9yaW5nID0gX2MgPT09IHZvaWQgMCA/IHRydWUgOiBfYztcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkZXRlY3RvcjtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfZCkge1xuICAgICAgICAgICAgc3dpdGNoIChfZC5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vbml0b3JpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbml0b3IoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkZXRlY3RvciA9IG5ldyBCb3REZXRlY3RvcigpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBkZXRlY3Rvci5jb2xsZWN0KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2Quc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZGV0ZWN0b3JdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IHsgbG9hZDogbG9hZCB9O1xuLy8gVGhlIGV4cG9ydHMgYmVsb3cgYXJlIGZvciBwcml2YXRlIHVzYWdlLiBUaGV5IG1heSBjaGFuZ2UgdW5leHBlY3RlZGx5LiBVc2UgdGhlbSBhdCB5b3VyIG93biByaXNrLlxuLyoqIE5vdCBkb2N1bWVudGVkLCBvdXQgb2YgU2VtYW50aWMgVmVyc2lvbmluZywgdXNhZ2UgaXMgYXQgeW91ciBvd24gcmlzayAqL1xuZXhwb3J0IHsgc291cmNlcywgZGV0ZWN0b3JzLCBjb2xsZWN0LCBkZXRlY3QsIEJvdGRFcnJvciwgQm90S2luZCwgfTtcbiIsImltcG9ydCB7IFVBUGFyc2VyIH0gZnJvbSAndWEtcGFyc2VyLWpzJztcbi8qXG4gKiBTb21ldGltZXMgdGVzdHMgbmVlZCB0byBrbm93IHdoYXQgYnJvd3NlciB0aGV5IHJ1biBpbiB0byBtYWtlIHByb3BlciBhc3NlcnRpb25zLlxuICogS2FybWEgZG9lc24ndCBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24uXG4gKiBUaGUgYnJvd3NlciBkZXRlY3QgZnVuY3Rpb25zIGluIHRoZSBgc3JjYCBkaXJlY3RvcnkgY2FuJ3QgYmUgdXNlZCBiZWNhdXNlIHRoZXkgYXJlIG9iamVjdHMgb2YgdGVzdGluZy5cbiAqIFRoZXJlZm9yZSBhIHBvcHVsYXIgdGhpcmQgcGFydHkgbGlicmFyeSBpcyB1c2VkIHRvIGRldGVjdCBicm93c2VyLlxuICogVGhlIGxpYnJhcnkgaXNuJ3QgdXNlZCBpbiB0aGUgbWFpbiBjb2RlIGJlY2F1c2Ugc29tZSB2aXNpdG9ycyB0YW1wZXIgdXNlciBhZ2VudCB3aGlsZSB0aGUgdGVzdCBlbnZpcm9ubWVudHMgZG9uJ3QuXG4gKlxuICogV2Ugc2hvdWxkIGZpbmQgYSB3YXkgdG8gcGFzcyBicm93c2VyIHNldHRpbmdzIGZyb20gdGhlIEthcm1hIGNvbmZpZ3VyYXRpb24gdG8gdGhlIHRlc3RzLFxuICogb3RoZXJ3aXNlIHdlIGNhbid0IGRpc3Rpbmd1aXNoIGluY29nbml0byBicm93c2VycyBmcm9tIHJlZ3VsYXIgYnJvd3NlcnMsIEJyYXZlIGZyb20gQ2hyb21lLCBldGMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Nocm9taXVtKCkge1xuICAgIHJldHVybiBuZXcgVUFQYXJzZXIoKS5nZXRFbmdpbmUoKS5uYW1lID09PSAnQmxpbmsnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSGVhZGxlc3NDaHJvbWUoKSB7XG4gICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoJ0hlYWRsZXNzQ2hyb21lJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNHZWNrbygpIHtcbiAgICByZXR1cm4gbmV3IFVBUGFyc2VyKCkuZ2V0RW5naW5lKCkubmFtZSA9PT0gJ0dlY2tvJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1dlYktpdCgpIHtcbiAgICByZXR1cm4gbmV3IFVBUGFyc2VyKCkuZ2V0RW5naW5lKCkubmFtZSA9PT0gJ1dlYktpdCc7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNNb2JpbGUoKSB7XG4gICAgcmV0dXJuIG5ldyBVQVBhcnNlcigpLmdldERldmljZSgpLnR5cGUgPT09ICdtb2JpbGUnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTWFjT1MoKSB7XG4gICAgcmV0dXJuIG5ldyBVQVBhcnNlcigpLmdldE9TKCkubmFtZSA9PT0gJ01hYyBPUyc7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0T3NNYWpvclZlcnNpb24oKSB7XG4gICAgdmFyIHZlcnNpb24gPSBuZXcgVUFQYXJzZXIoKS5nZXRPUygpLnZlcnNpb247XG4gICAgaWYgKHZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQodmVyc2lvbi5zcGxpdCgnLicpWzBdKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRCcm93c2VyTWFqb3JWZXJzaW9uKCkge1xuICAgIHZhciB2ZXJzaW9uID0gbmV3IFVBUGFyc2VyKCkuZ2V0QnJvd3NlcigpLnZlcnNpb247XG4gICAgaWYgKHZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQodmVyc2lvbi5zcGxpdCgnLicpWzBdKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRCcm93c2VyVmVyc2lvbigpIHtcbiAgICB2YXIgdmVyc2lvbiA9IG5ldyBVQVBhcnNlcigpLmdldEJyb3dzZXIoKS52ZXJzaW9uO1xuICAgIGlmICh2ZXJzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWFqb3I6IHBhcnNlSW50KHZlcnNpb24uc3BsaXQoJy4nKVswXSksXG4gICAgICAgIG1pbm9yOiBwYXJzZUludCh2ZXJzaW9uLnNwbGl0KCcuJylbMV0pLFxuICAgIH07XG59XG4iLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIG9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG4gICAgXG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgeyBfX2F3YWl0ZXIsIF9fZ2VuZXJhdG9yIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBsb2FkIH0gZnJvbSAnLi4vc3JjJztcbmltcG9ydCB7IGdldEJyb3dzZXJFbmdpbmVLaW5kLCBnZXRCcm93c2VyS2luZCwgZ2V0RG9jdW1lbnRGb2N1cywgZ2V0TW96QXBwZWFyYW5jZVN1cHBvcnQsIGlzQW5kcm9pZCwgaXNEZXNrdG9wV2ViS2l0LCBpc0lQYWQsIH0gZnJvbSAnLi4vc3JjL3V0aWxzL2Jyb3dzZXInO1xuaW1wb3J0IHsgZ2V0QnJvd3NlclZlcnNpb24gfSBmcm9tICcuLi90ZXN0cy91dGlscyc7XG5pbXBvcnQgJy4vc3R5bGUuY3NzJztcbnZhciBfcmVzdWx0ID0gdW5kZWZpbmVkO1xudmFyIHJ1bkRldGVjdGlvbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHQwLCBpbnN0YW5jZSwgY29sbGVjdGlvblRpbWUsIGRldGVjdGlvblJlc3VsdCwgZGV0ZWN0aW9uVGltZSwgY29tcG9uZW50cywgZGV0ZWN0aW9ucywgZGVidWdEYXRhLCBlXzE7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9jKSB7XG4gICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBfYy50cnlzLnB1c2goWzAsIDIsICwgM10pO1xuICAgICAgICAgICAgICAgIHQwID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgbG9hZCgpXTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IF9jLnNlbnQoKTtcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpIC0gdDA7XG4gICAgICAgICAgICAgICAgZGV0ZWN0aW9uUmVzdWx0ID0gaW5zdGFuY2UuZGV0ZWN0KCk7XG4gICAgICAgICAgICAgICAgZGV0ZWN0aW9uVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpIC0gdDA7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cyA9IChfYSA9IGluc3RhbmNlLmdldENvbXBvbmVudHMoKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge307XG4gICAgICAgICAgICAgICAgZGV0ZWN0aW9ucyA9IChfYiA9IGluc3RhbmNlLmdldERldGVjdGlvbnMoKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDoge307XG4gICAgICAgICAgICAgICAgZGVidWdEYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICBicm93c2VyRW5naW5lS2luZDogZ2V0QnJvd3NlckVuZ2luZUtpbmQoKSxcbiAgICAgICAgICAgICAgICAgICAgYnJvd3NlcktpbmQ6IGdldEJyb3dzZXJLaW5kKCksXG4gICAgICAgICAgICAgICAgICAgIGJyb3dzZXJWZXJzaW9uOiBnZXRCcm93c2VyVmVyc2lvbigpLFxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudEZvY3VzOiBnZXREb2N1bWVudEZvY3VzKCksXG4gICAgICAgICAgICAgICAgICAgIG1vekFwcGVhcmFuY2VTdXBwb3J0OiBnZXRNb3pBcHBlYXJhbmNlU3VwcG9ydCgpLFxuICAgICAgICAgICAgICAgICAgICBpc0FuZHJvaWQ6IGlzQW5kcm9pZCgpLFxuICAgICAgICAgICAgICAgICAgICBpc0Rlc2t0b3BXZWJLaXQ6IGlzRGVza3RvcFdlYktpdCgpLFxuICAgICAgICAgICAgICAgICAgICBpc0lQYWQ6IGlzSVBhZCgpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRXJyb3I6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblRpbWU6IGNvbGxlY3Rpb25UaW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0aW9uVGltZTogZGV0ZWN0aW9uVGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdGlvblJlc3VsdDogZGV0ZWN0aW9uUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0ZWRCb3Q6IChkZXRlY3Rpb25SZXN1bHQgPT09IG51bGwgfHwgZGV0ZWN0aW9uUmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZXRlY3Rpb25SZXN1bHQuYm90KSA/IGRldGVjdGlvblJlc3VsdC5ib3RLaW5kIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGVkRGF0YTogY29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdG9yc1Jlc3VsdHM6IGRldGVjdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z0RhdGE6IGRlYnVnRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgZV8xID0gX2Muc2VudCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7IGlzRXJyb3I6IHRydWUsIGVycm9yOiBlXzEgfV07XG4gICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgfVxuICAgIH0pO1xufSk7IH07XG52YXIgcmVuZGVyRGV0ZWN0aW9uUmVzdWx0ID0gZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgIHZhciByZXN1bHRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQnKTtcbiAgICB2YXIgcmVzdWx0VGV4dEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdC10ZXh0Jyk7XG4gICAgdmFyIGNvbGxlY3Rpb25UaW1lRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29sbGVjdGlvbi10aW1lJyk7XG4gICAgdmFyIGRldGVjdGlvblRpbWVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZXRlY3Rpb24tdGltZScpO1xuICAgIHZhciBkZXRlY3Rpb25SZXN1bHRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZXRlY3Rpb24tcmVzdWx0Jyk7XG4gICAgdmFyIGRldGVjdG9yc0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RldGVjdG9ycycpO1xuICAgIHZhciBkZWJ1Z0RhdGEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVidWctZGF0YScpO1xuICAgIHZhciBjb2xsZWN0ZWREYXRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbGxlY3RlZC1kYXRhJyk7XG4gICAgdmFyIGVycm9yQ29udGFpbmVyRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXJyb3ItY29udGFpbmVyJyk7XG4gICAgdmFyIGVycm9yTWVzc2FnZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Vycm9yLW1lc3NhZ2UnKTtcbiAgICByZXN1bHRFbC5jbGFzc0xpc3QucmVtb3ZlKCdyZXN1bHQtZGV0ZWN0ZWQnLCAncmVzdWx0LWVycm9yJyk7XG4gICAgaWYgKHJlc3VsdC5pc0Vycm9yKSB7XG4gICAgICAgIHJlc3VsdFRleHRFbC5pbm5lckhUTUwgPSAnQW4gZXJyb3Igb2NjdXJlZCc7XG4gICAgICAgIHJlc3VsdEVsLmNsYXNzTGlzdC5hZGQoJ3Jlc3VsdC1lcnJvcicpO1xuICAgICAgICBlcnJvckNvbnRhaW5lckVsLmNsYXNzTGlzdC5hZGQoJ2Vycm9yLWNvbnRhaW5lci12aXNpYmxlJyk7XG4gICAgICAgIGVycm9yTWVzc2FnZUVsLnRleHRDb250ZW50ID0gcmVzdWx0LmVycm9yLm1lc3NhZ2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXJyb3JDb250YWluZXJFbC5jbGFzc0xpc3QucmVtb3ZlKCdlcnJvci1jb250YWluZXItdmlzaWJsZScpO1xuICAgIGlmIChyZXN1bHQuZGV0ZWN0ZWRCb3QgIT0gbnVsbCkge1xuICAgICAgICByZXN1bHRUZXh0RWwuaW5uZXJIVE1MID0gXCJcIi5jb25jYXQocmVzdWx0LmRldGVjdGVkQm90LCBcIiBkZXRlY3RlZC5cIik7XG4gICAgICAgIHJlc3VsdEVsLmNsYXNzTGlzdC5hZGQoJ3Jlc3VsdC1kZXRlY3RlZCcpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0VGV4dEVsLmlubmVySFRNTCA9ICdZb3UgYXJlIG5vdCBhIGJvdC4nO1xuICAgIH1cbiAgICBjb2xsZWN0aW9uVGltZUVsLnRleHRDb250ZW50ID0gXCJcIi5jb25jYXQocmVzdWx0LmNvbGxlY3Rpb25UaW1lLnRvRml4ZWQoMiksIFwibXNcIik7XG4gICAgZGV0ZWN0aW9uVGltZUVsLnRleHRDb250ZW50ID0gXCJcIi5jb25jYXQocmVzdWx0LmRldGVjdGlvblRpbWUudG9GaXhlZCgyKSwgXCJtc1wiKTtcbiAgICBkZXRlY3Rpb25SZXN1bHRFbC50ZXh0Q29udGVudCA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdC5kZXRlY3Rpb25SZXN1bHQsIG51bGwsIDQpO1xuICAgIGRldGVjdG9yc0VsLnRleHRDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkocmVzdWx0LmRldGVjdG9yc1Jlc3VsdHMsIG51bGwsIDQpO1xuICAgIGRlYnVnRGF0YS50ZXh0Q29udGVudCA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdC5kZWJ1Z0RhdGEsIG51bGwsIDQpO1xuICAgIGNvbGxlY3RlZERhdGEudGV4dENvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShyZXN1bHQuY29sbGVjdGVkRGF0YSwgbnVsbCwgNCk7XG59O1xudmFyIHJ1bkFuZFJlbmRlciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgcnVuRGV0ZWN0aW9uKCldO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICBfcmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIHJlbmRlckRldGVjdGlvblJlc3VsdChyZXN1bHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgfVxuICAgIH0pO1xufSk7IH07XG53aW5kb3cub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBkZXRlY3RCdXR0b25FbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZXRlY3QtYnV0dG9uJyk7XG4gICAgdmFyIGNvcHlMb2dzQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvcHktbG9ncy1idXR0b24nKTtcbiAgICBkZXRlY3RCdXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcnVuQW5kUmVuZGVyKCk7XG4gICAgfSk7XG4gICAgY29weUxvZ3NCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KEpTT04uc3RyaW5naWZ5KF9yZXN1bHQpKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFsZXJ0KCdCb3REIGxvZ3MgY29waWVkIHRvIGNsaXBib2FyZCcpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBydW5BbmRSZW5kZXIoKTtcbn07XG4iXSwibmFtZXMiOlsiX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzBfX18iLCJVUkwiLCJfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMV9fXyIsIl9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8yX19fIiwiX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzNfX18iLCJfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfNF9fXyIsIl9fX0NTU19MT0FERVJfRVhQT1JUX19fIiwiX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMF9fXyIsIl9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzFfX18iLCJfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8yX19fIiwiX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfM19fXyIsIl9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzRfX18iLCJwdXNoIiwibW9kdWxlIiwiaWQiLCJleHBvcnRzIiwiY3NzV2l0aE1hcHBpbmdUb1N0cmluZyIsImxpc3QiLCJ0b1N0cmluZyIsInRoaXMiLCJtYXAiLCJpdGVtIiwiY29udGVudCIsIm5lZWRMYXllciIsImNvbmNhdCIsImxlbmd0aCIsImpvaW4iLCJpIiwibW9kdWxlcyIsIm1lZGlhIiwiZGVkdXBlIiwic3VwcG9ydHMiLCJsYXllciIsInVuZGVmaW5lZCIsImFscmVhZHlJbXBvcnRlZE1vZHVsZXMiLCJrIiwiX2siLCJ1cmwiLCJvcHRpb25zIiwiU3RyaW5nIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJ0ZXN0Iiwic2xpY2UiLCJoYXNoIiwibmVlZFF1b3RlcyIsInJlcGxhY2UiLCJjc3NNYXBwaW5nIiwiYnRvYSIsImJhc2U2NCIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsImRhdGEiLCJzb3VyY2VNYXBwaW5nIiwic291cmNlVVJMcyIsInNvdXJjZXMiLCJzb3VyY2UiLCJzb3VyY2VSb290Iiwic3R5bGVzSW5ET00iLCJnZXRJbmRleEJ5SWRlbnRpZmllciIsImlkZW50aWZpZXIiLCJyZXN1bHQiLCJtb2R1bGVzVG9Eb20iLCJpZENvdW50TWFwIiwiaWRlbnRpZmllcnMiLCJiYXNlIiwiY291bnQiLCJpbmRleEJ5SWRlbnRpZmllciIsIm9iaiIsImNzcyIsInNvdXJjZU1hcCIsInJlZmVyZW5jZXMiLCJ1cGRhdGVyIiwiYWRkRWxlbWVudFN0eWxlIiwiYnlJbmRleCIsInNwbGljZSIsImFwaSIsImRvbUFQSSIsInVwZGF0ZSIsIm5ld09iaiIsInJlbW92ZSIsImxhc3RJZGVudGlmaWVycyIsIm5ld0xpc3QiLCJpbmRleCIsIm5ld0xhc3RJZGVudGlmaWVycyIsIl9pIiwiX2luZGV4IiwibWVtbyIsImluc2VydCIsInN0eWxlIiwidGFyZ2V0Iiwic3R5bGVUYXJnZXQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJ3aW5kb3ciLCJIVE1MSUZyYW1lRWxlbWVudCIsImNvbnRlbnREb2N1bWVudCIsImhlYWQiLCJlIiwiZ2V0VGFyZ2V0IiwiRXJyb3IiLCJhcHBlbmRDaGlsZCIsImVsZW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlcyIsImF0dHJpYnV0ZXMiLCJzdHlsZUVsZW1lbnQiLCJub25jZSIsInNldEF0dHJpYnV0ZSIsImluc2VydFN0eWxlRWxlbWVudCIsInN0eWxlVGFnVHJhbnNmb3JtIiwiYXBwbHkiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJyZW1vdmVTdHlsZUVsZW1lbnQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImZpcnN0Q2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsIkZVTkNfVFlQRSIsIlVOREVGX1RZUEUiLCJPQkpfVFlQRSIsIlNUUl9UWVBFIiwiTUFKT1IiLCJNT0RFTCIsIk5BTUUiLCJUWVBFIiwiVkVORE9SIiwiVkVSU0lPTiIsIkFSQ0hJVEVDVFVSRSIsIkNPTlNPTEUiLCJNT0JJTEUiLCJUQUJMRVQiLCJTTUFSVFRWIiwiV0VBUkFCTEUiLCJFTUJFRERFRCIsIkFNQVpPTiIsIkFQUExFIiwiQVNVUyIsIkJMQUNLQkVSUlkiLCJCUk9XU0VSIiwiQ0hST01FIiwiRklSRUZPWCIsIkdPT0dMRSIsIkhVQVdFSSIsIkxHIiwiTUlDUk9TT0ZUIiwiTU9UT1JPTEEiLCJPUEVSQSIsIlNBTVNVTkciLCJTSEFSUCIsIlNPTlkiLCJYSUFPTUkiLCJaRUJSQSIsIkZBQ0VCT09LIiwiQ0hST01JVU1fT1MiLCJNQUNfT1MiLCJlbnVtZXJpemUiLCJhcnIiLCJlbnVtcyIsInRvVXBwZXJDYXNlIiwiaGFzIiwic3RyMSIsInN0cjIiLCJsb3dlcml6ZSIsImluZGV4T2YiLCJzdHIiLCJ0b0xvd2VyQ2FzZSIsInRyaW0iLCJsZW4iLCJzdWJzdHJpbmciLCJyZ3hNYXBwZXIiLCJ1YSIsImFycmF5cyIsImoiLCJwIiwicSIsIm1hdGNoZXMiLCJtYXRjaCIsInJlZ2V4IiwicHJvcHMiLCJleGVjIiwiY2FsbCIsInN0ck1hcHBlciIsIndpbmRvd3NWZXJzaW9uTWFwIiwicmVnZXhlcyIsImJyb3dzZXIiLCJjcHUiLCJkZXZpY2UiLCJlbmdpbmUiLCJFREdFIiwib3MiLCJVQVBhcnNlciIsImV4dGVuc2lvbnMiLCJnZXRSZXN1bHQiLCJfbmF2aWdhdG9yIiwibmF2aWdhdG9yIiwiX3VhIiwidXNlckFnZW50IiwiX3VhY2giLCJ1c2VyQWdlbnREYXRhIiwiX3JneG1hcCIsIm1lcmdlZFJlZ2V4ZXMiLCJleHRlbmQiLCJfaXNTZWxmTmF2IiwiZ2V0QnJvd3NlciIsInZlcnNpb24iLCJfYnJvd3NlciIsInNwbGl0IiwiYnJhdmUiLCJpc0JyYXZlIiwiZ2V0Q1BVIiwiX2NwdSIsImdldERldmljZSIsIl9kZXZpY2UiLCJtb2JpbGUiLCJzdGFuZGFsb25lIiwibWF4VG91Y2hQb2ludHMiLCJnZXRFbmdpbmUiLCJfZW5naW5lIiwiZ2V0T1MiLCJfb3MiLCJwbGF0Zm9ybSIsImdldFVBIiwic2V0VUEiLCJDUFUiLCJERVZJQ0UiLCJFTkdJTkUiLCJPUyIsIiQiLCJqUXVlcnkiLCJaZXB0byIsInBhcnNlciIsImdldCIsInNldCIsInByb3AiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwibSIsImFtZE8iLCJuIiwiZ2V0dGVyIiwiZCIsImEiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImciLCJnbG9iYWxUaGlzIiwiRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInNjcmlwdFVybCIsImltcG9ydFNjcmlwdHMiLCJsb2NhdGlvbiIsImN1cnJlbnRTY3JpcHQiLCJ0YWdOYW1lIiwic3JjIiwic2NyaXB0cyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiYiIsImJhc2VVUkkiLCJzZWxmIiwiaHJlZiIsIm5jIiwiZXh0ZW5kU3RhdGljcyIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiQXJyYXkiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInZhbHVlIiwic3RlcCIsIm5leHQiLCJyZWplY3RlZCIsImRvbmUiLCJ0aGVuIiwiX19nZW5lcmF0b3IiLCJib2R5IiwiZiIsInkiLCJ0IiwiXyIsImxhYmVsIiwic2VudCIsInRyeXMiLCJvcHMiLCJ2ZXJiIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJ2Iiwib3AiLCJUeXBlRXJyb3IiLCJwb3AiLCJfX3NwcmVhZEFycmF5IiwidG8iLCJmcm9tIiwicGFjayIsImFyZ3VtZW50cyIsImFyIiwibCIsImNyZWF0ZSIsIkJvdEtpbmQiLCJCb3RkRXJyb3IiLCJfc3VwZXIiLCJzdGF0ZSIsIm1lc3NhZ2UiLCJfdGhpcyIsIm5hbWUiLCJfXyIsImNvbnN0cnVjdG9yIiwiX19leHRlbmRzIiwiY29sbGVjdCIsImNvbXBvbmVudHMiLCJzb3VyY2VzS2V5cyIsIl9hIiwia2V5cyIsImFsbCIsInNvdXJjZUtleSIsInJlcyIsIl9iIiwiZXJyb3JfMSIsIl9jIiwiX2QiLCJlcnJvciIsImFycmF5SW5jbHVkZXMiLCJzdHJJbmNsdWRlcyIsImdldE9iamVjdFByb3BzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImluY2x1ZGVzIiwiX2xvb3BfMSIsImFycmF5IiwiY2FsbGJhY2siLCJmaW5kIiwiYXJyYXlGaW5kIiwia2V5c18xIiwic3RhdGVfMSIsImNvdW50VHJ1dGh5IiwidmFsdWVzIiwicmVkdWNlIiwic3VtIiwiZGV0ZWN0b3JzIiwiZGV0ZWN0QXBwVmVyc2lvbiIsImFwcFZlcnNpb24iLCJkZXRlY3REb2N1bWVudEF0dHJpYnV0ZXMiLCJkb2N1bWVudEVsZW1lbnRLZXlzIiwiZGV0ZWN0RXJyb3JUcmFjZSIsImVycm9yVHJhY2UiLCJkZXRlY3RFdmFsTGVuZ3RoSW5jb25zaXN0ZW5jeSIsImV2YWxMZW5ndGgiLCJicm93c2VyS2luZCIsImJyb3dzZXJFbmdpbmVLaW5kIiwiZGV0ZWN0RnVuY3Rpb25CaW5kIiwiZnVuY3Rpb25CaW5kIiwiZGV0ZWN0TGFuZ3VhZ2VzTGVuZ3RoSW5jb25zaXN0ZW5jeSIsImxhbmd1YWdlcyIsImRldGVjdE5vdGlmaWNhdGlvblBlcm1pc3Npb25zIiwibm90aWZpY2F0aW9uUGVybWlzc2lvbnMiLCJkZXRlY3RQbHVnaW5zQXJyYXkiLCJwbHVnaW5zQXJyYXkiLCJkZXRlY3RQbHVnaW5zTGVuZ3RoSW5jb25zaXN0ZW5jeSIsInBsdWdpbnNMZW5ndGgiLCJhbmRyb2lkIiwiZGV0ZWN0UHJvY2VzcyIsInByb2Nlc3MiLCJ0eXBlIiwidmVyc2lvbnMiLCJlbGVjdHJvbiIsImRldGVjdFVzZXJBZ2VudCIsImRldGVjdFdlYkRyaXZlciIsIndlYkRyaXZlciIsImRldGVjdFdlYkdMIiwid2ViR0wiLCJ2ZW5kb3IiLCJyZW5kZXJlciIsImRldGVjdFdpbmRvd0V4dGVybmFsIiwid2luZG93RXh0ZXJuYWwiLCJkZXRlY3RXaW5kb3dTaXplIiwid2luZG93U2l6ZSIsImRvY3VtZW50Rm9jdXMiLCJvdXRlcldpZHRoIiwib3V0ZXJIZWlnaHQiLCJkZXRlY3RNaW1lVHlwZXNDb25zaXN0ZW50IiwibWltZVR5cGVzQ29uc2lzdGVudCIsImRldGVjdFByb2R1Y3RTdWIiLCJwcm9kdWN0U3ViIiwiZGV0ZWN0RGlzdGluY3RpdmVQcm9wZXJ0aWVzIiwiZGlzdGluY3RpdmVQcm9wcyIsImJvdCIsImdldEJyb3dzZXJFbmdpbmVLaW5kIiwidyIsImRvY3VtZW50RWxlbWVudCIsImdldEJyb3dzZXJLaW5kIiwiaXNBbmRyb2lkIiwiaXNJdEdlY2tvIiwiYyIsIkF1ZGlvIiwiZ2V0TW96QXBwZWFyYW5jZVN1cHBvcnQiLCJDU1MiLCJnZXREb2N1bWVudEZvY3VzIiwiaGFzRm9jdXMiLCJpc0lQYWQiLCJzIiwic2NyZWVuIiwic2NyZWVuUmF0aW8iLCJ3aWR0aCIsImhlaWdodCIsIkVsZW1lbnQiLCJ3ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbiIsInJ0dCIsImNvbm5lY3Rpb24iLCJpbm5lcldpZHRoIiwiaW5uZXJIZWlnaHQiLCJwbHVnaW5zIiwiUGx1Z2luQXJyYXkiLCJzdGFjayIsImV4dGVybmFsIiwibWltZVR5cGVzIiwiaXNDb25zaXN0ZW50IiwiZ2V0UHJvdG90eXBlT2YiLCJNaW1lVHlwZUFycmF5IiwiTWltZVR5cGUiLCJldmFsIiwiY2FudmFzRWxlbWVudCIsImdldENvbnRleHQiLCJ3ZWJHTENvbnRleHQiLCJnZXRQYXJhbWV0ZXIiLCJSRU5ERVJFUiIsIndlYmRyaXZlciIsImxhbmd1YWdlIiwidXNlckxhbmd1YWdlIiwiYnJvd3Nlckxhbmd1YWdlIiwic3lzdGVtTGFuZ3VhZ2UiLCJpc0FycmF5IiwiSW50bCIsIlJlZmxlY3QiLCJwZXJtaXNzaW9ucyIsInBlcm1pc3Npb25TdGF0dXMiLCJOb3RpZmljYXRpb24iLCJxdWVyeSIsInBlcm1pc3Npb24iLCJnZXRBdHRyaWJ1dGVOYW1lcyIsImJpbmQiLCJlcnJvclByZWZpeCIsImJvdE5hbWUiLCJkaXN0aW5jdGl2ZVByb3BzTGlzdCIsIndpbmRvd1Byb3BzIiwiZG9jdW1lbnRQcm9wcyIsIndpbmRvd0NvbnRhaW5zIiwiZG9jdW1lbnRDb250YWlucyIsIkJvdERldGVjdG9yIiwiZGV0ZWN0aW9ucyIsImdldENvbXBvbmVudHMiLCJnZXREZXRlY3Rpb25zIiwiZGV0ZWN0IiwiZmluYWxEZXRlY3Rpb24iLCJkZXRlY3Rvck5hbWUiLCJkZXRlY3RvclJlcyIsImRldGVjdG9yIiwiZGV0ZWN0aW9uIiwiYm90S2luZCIsImxvYWQiLCJtb25pdG9yaW5nIiwiX19mcGpzX2RfbSIsIk1hdGgiLCJyYW5kb20iLCJyZXF1ZXN0IiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwic2VuZCIsImNvbnNvbGUiLCJtb25pdG9yIiwiZ2V0QnJvd3NlclZlcnNpb24iLCJtYWpvciIsInBhcnNlSW50IiwibWlub3IiLCJsb2NhbHMiLCJfcmVzdWx0IiwicnVuQW5kUmVuZGVyIiwidDAiLCJpbnN0YW5jZSIsImNvbGxlY3Rpb25UaW1lIiwiZGV0ZWN0aW9uUmVzdWx0IiwiZGV0ZWN0aW9uVGltZSIsImRlYnVnRGF0YSIsInBlcmZvcm1hbmNlIiwibm93IiwiYnJvd3NlclZlcnNpb24iLCJtb3pBcHBlYXJhbmNlU3VwcG9ydCIsImlzRGVza3RvcFdlYktpdCIsIkhUTUxFbGVtZW50IiwiRG9jdW1lbnQiLCJpc0Vycm9yIiwiZGV0ZWN0ZWRCb3QiLCJjb2xsZWN0ZWREYXRhIiwiZGV0ZWN0b3JzUmVzdWx0cyIsInJlc3VsdEVsIiwiZ2V0RWxlbWVudEJ5SWQiLCJyZXN1bHRUZXh0RWwiLCJjb2xsZWN0aW9uVGltZUVsIiwiZGV0ZWN0aW9uVGltZUVsIiwiZGV0ZWN0aW9uUmVzdWx0RWwiLCJkZXRlY3RvcnNFbCIsImVycm9yQ29udGFpbmVyRWwiLCJlcnJvck1lc3NhZ2VFbCIsImNsYXNzTGlzdCIsImlubmVySFRNTCIsImFkZCIsInRleHRDb250ZW50IiwidG9GaXhlZCIsInJlbmRlckRldGVjdGlvblJlc3VsdCIsIm9ubG9hZCIsImRldGVjdEJ1dHRvbkVsIiwiY29weUxvZ3NCdXR0b24iLCJhZGRFdmVudExpc3RlbmVyIiwiY2xpcGJvYXJkIiwid3JpdGVUZXh0IiwiYWxlcnQiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file