You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

17 lines
1.4 MiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"use strict";var t=require("obsidian");
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */function e(t,e,n,r){return new(n||(n=Promise))((function(a,i){function l(t){try{u(r.next(t))}catch(t){i(t)}}function o(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(l,o)}u((r=r.apply(t,e||[])).next())}))}function n(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function r(t){let e=t,r=t;function a(t,e,n,a){for(null==n&&(n=0),null==a&&(a=t.length);n<a;){const i=n+a>>>1;r(t[i],e)<0?n=i+1:a=i}return n}return 1===t.length&&(e=(e,n)=>t(e)-n,r=function(t){return(e,r)=>n(t(e),r)}(t)),{left:a,center:function(t,n,r,i){null==r&&(r=0),null==i&&(i=t.length);const l=a(t,n,r,i-1);return l>r&&e(t[l-1],n)>-e(t[l],n)?l-1:l},right:function(t,e,n,a){for(null==n&&(n=0),null==a&&(a=t.length);n<a;){const i=n+a>>>1;r(t[i],e)>0?a=i:n=i+1}return n}}}const a=r(n).right;r((function(t){return null===t?NaN:+t})).center;var i=a;function l(t,e,n){return t(n={path:e,exports:{},require:function(t,e){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==e&&n.path)}},n.exports),n.exports}var o=Math.sqrt(50),u=Math.sqrt(10),s=Math.sqrt(2);function f(t,e,n){var r=(e-t)/Math.max(0,n),a=Math.floor(Math.log(r)/Math.LN10),i=r/Math.pow(10,a);return a>=0?(i>=o?10:i>=u?5:i>=s?2:1)*Math.pow(10,a):-Math.pow(10,-a)/(i>=o?10:i>=u?5:i>=s?2:1)}function c(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),a=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),i=r/a;return i>=o?a*=10:i>=u?a*=5:i>=s&&(a*=2),e<t?-a:a}function h(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n<e||void 0===n&&e>=e)&&(n=e);else{let r=-1;for(let a of t)null!=(a=e(a,++r,t))&&(n<a||void 0===n&&a>=a)&&(n=a)}return n}function d(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n>e||void 0===n&&e>=e)&&(n=e);else{let r=-1;for(let a of t)null!=(a=e(a,++r,t))&&(n>a||void 0===n&&a>=a)&&(n=a)}return n}function g(t,e,r=0,a=t.length-1,i=n){for(;a>r;){if(a-r>600){const n=a-r+1,l=e-r+1,o=Math.log(n),u=.5*Math.exp(2*o/3),s=.5*Math.sqrt(o*u*(n-u)/n)*(l-n/2<0?-1:1);g(t,e,Math.max(r,Math.floor(e-l*u/n+s)),Math.min(a,Math.floor(e+(n-l)*u/n+s)),i)}const n=t[e];let l=r,o=a;for(p(t,r,e),i(t[a],n)>0&&p(t,r,a);l<o;){for(p(t,l,o),++l,--o;i(t[l],n)<0;)++l;for(;i(t[o],n)>0;)--o}0===i(t[r],n)?p(t,r,o):(++o,p(t,o,a)),o<=e&&(r=o+1),e<=o&&(a=o-1)}return t}function p(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function y(t,e,n){if(t=Float64Array.from(function*(t,e){if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(yield e);else{let n=-1;for(let r of t)null!=(r=e(r,++n,t))&&(r=+r)>=r&&(yield r)}}(t,n)),r=t.length){if((e=+e)<=0||r<2)return d(t);if(e>=1)return h(t);var r,a=(r-1)*e,i=Math.floor(a),l=h(g(t,i).subarray(0,i+1));return l+(d(t.subarray(i+1))-l)*(a-i)}}function m(t,e,n){t=+t,e=+e,n=(a=arguments.length)<2?(e=t,t=0,1):a<3?1:+n;for(var r=-1,a=0|Math.max(0,Math.ceil((e-t)/n)),i=new Array(a);++r<a;)i[r]=t+r*n;return i}function v(t,e){let n=0;if(void 0===e)for(let e of t)(e=+e)&&(n+=e);else{let r=-1;for(let a of t)(a=+e(a,++r,t))&&(n+=a)}return n}var w=Array.prototype.slice;function x(t){return t}function A(t){return"translate("+t+",0)"}function b(t){return"translate(0,"+t+")"}function D(t){return e=>+t(e)}function k(t,e){return e=Math.max(0,t.bandwidth()-2*e)/2,t.round()&&(e=Math.round(e)),n=>+t(n)+e}function M(){return!this.__axis}function T(t,e){var n=[],r=null,a=null,i=6,l=6,o=3,u="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,s=1===t||4===t?-1:1,f=4===t||2===t?"x":"y",c=1===t||3===t?A:b;function h(h){var d=null==r?e.ticks?e.ticks.apply(e,n):e.domain():r,g=null==a?e.tickFormat?e.tickFormat.apply(e,n):x:a,p=Math.max(i,0)+o,y=e.range(),m=+y[0]+u,v=+y[y.length-1]+u,w=(e.bandwidth?k:D)(e.copy(),u),A=h.selection?h.selection():h,b=A.selectAll(".domain").data([null]),T=A.selectAll(".tick").data(d,e).order(),C=T.exit(),F=T.enter().append("g").attr("class","tick"),_=T.select("line"),S=T.select("text");b=b.merge(b.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),T=T.merge(F),_=_.merge(F.append("line").attr("stroke","currentColor").attr(f+"2",s*i)),S=S.merge(F.append("text").attr("fill","currentColor").attr(f,s*p).attr("dy",1===t?"0em":3===t?"0.71em":"0.32em")),h!==A&&(b=b.transition(h),T=T.transition(h),_=_.transition(h),S=S.transition(h),C=C.transition(h).attr("opacity",1e-6).attr("transform",(function(t){return isFinite(t=w(t))?c(t+u):this.getAttribute("transform")})),F.attr("opacity",1e-6).attr("transform",(function(t){var e=this.parentNode.__axis;return c((e&&isFinite(e=e(t))?e:w(t))+u)}))),C.remove(),b.attr("d",4===t||2===t?l?"M"+s*l+","+m+"H"+u+"V"+v+"H"+s*l:"M"+u+","+m+"V"+v:l?"M"+m+","+s*l+"V"+u+"H"+v+"V"+s*l:"M"+m+","+u+"H"+v),T.attr("opacity",1).attr("transform",(function(t){return c(w(t)+u)})),_.attr(f+"2",s*i),S.attr(f,s*p).text(g),A.filter(M).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",2===t?"start":4===t?"end":"middle"),A.each((function(){this.__axis=w}))}return h.scale=function(t){return arguments.length?(e=t,h):e},h.ticks=function(){return n=w.call(arguments),h},h.tickArguments=function(t){return arguments.length?(n=null==t?[]:w.call(t),h):n.slice()},h.tickValues=function(t){return arguments.length?(r=null==t?null:w.call(t),h):r&&r.slice()},h.tickFormat=function(t){return arguments.length?(a=t,h):a},h.tickSize=function(t){return arguments.length?(i=l=+t,h):i},h.tickSizeInner=function(t){return arguments.length?(i=+t,h):i},h.tickSizeOuter=function(t){return arguments.length?(l=+t,h):l},h.tickPadding=function(t){return arguments.length?(o=+t,h):o},h.offset=function(t){return arguments.length?(u=+t,h):u},h}function C(t){return T(3,t)}function F(t){return T(4,t)}var _={value:()=>{}};function S(){for(var t,e=0,n=arguments.length,r={};e<n;++e){if(!(t=arguments[e]+"")||t in r||/[\s.]/.test(t))throw new Error("illegal type: "+t);r[t]=[]}return new E(r)}function E(t){this._=t}function B(t,e){return t.trim().split(/^|\s+/).map((function(t){var n="",r=t.indexOf(".");if(r>=0&&(n=t.slice(r+1),t=t.slice(0,r)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function N(t,e){for(var n,r=0,a=t.length;r<a;++r)if((n=t[r]).name===e)return n.value}function L(t,e,n){for(var r=0,a=t.length;r<a;++r)if(t[r].name===e){t[r]=_,t=t.slice(0,r).concat(t.slice(r+1));break}return null!=n&&t.push({name:e,value:n}),t}E.prototype=S.prototype={constructor:E,on:function(t,e){var n,r=this._,a=B(t+"",r),i=-1,l=a.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++i<l;)if(n=(t=a[i]).type)r[n]=L(r[n],t.name,e);else if(null==e)for(n in r)r[n]=L(r[n],t.name,null);return this}for(;++i<l;)if((n=(t=a[i]).type)&&(n=N(r[n],t.name)))return n},copy:function(){var t={},e=this._;for(var n in e)t[n]=e[n].slice();return new E(t)},call:function(t,e){if((n=arguments.length-2)>0)for(var n,r,a=new Array(n),i=0;i<n;++i)a[i]=arguments[i+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(i=0,n=(r=this._[t]).length;i<n;++i)r[i].value.apply(e,a)},apply:function(t,e,n){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],a=0,i=r.length;a<i;++a)r[a].value.apply(e,n)}};var V="http://www.w3.org/1999/xhtml",I={svg:"http://www.w3.org/2000/svg",xhtml:V,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function Y(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),I.hasOwnProperty(e)?{space:I[e],local:t}:t}function P(t){return function(){var e=this.ownerDocument,n=this.namespaceURI;return n===V&&e.documentElement.namespaceURI===V?e.createElement(t):e.createElementNS(n,t)}}function z(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function O(t){var e=Y(t);return(e.local?z:P)(e)}function U(){}function R(t){return null==t?U:function(){return this.querySelector(t)}}function W(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function $(){return[]}function H(t){return null==t?$:function(){return this.querySelectorAll(t)}}function j(t){return function(){return this.matches(t)}}function X(t){return function(e){return e.matches(t)}}var q=Array.prototype.find;function G(){return this.firstElementChild}var Q=Array.prototype.filter;function Z(){return this.children}function J(t){return new Array(t.length)}function K(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function tt(t){return function(){return t}}function et(t,e,n,r,a,i){for(var l,o=0,u=e.length,s=i.length;o<s;++o)(l=e[o])?(l.__data__=i[o],r[o]=l):n[o]=new K(t,i[o]);for(;o<u;++o)(l=e[o])&&(a[o]=l)}function nt(t,e,n,r,a,i,l){var o,u,s,f=new Map,c=e.length,h=i.length,d=new Array(c);for(o=0;o<c;++o)(u=e[o])&&(d[o]=s=l.call(u,u.__data__,o,e)+"",f.has(s)?a[o]=u:f.set(s,u));for(o=0;o<h;++o)s=l.call(t,i[o],o,i)+"",(u=f.get(s))?(r[o]=u,u.__data__=i[o],f.delete(s)):n[o]=new K(t,i[o]);for(o=0;o<c;++o)(u=e[o])&&f.get(d[o])===u&&(a[o]=u)}function rt(t){return t.__data__}function at(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function it(t){return function(){this.removeAttribute(t)}}function lt(t){return function(){this.removeAttributeNS(t.space,t.local)}}function ot(t,e){return function(){this.setAttribute(t,e)}}function ut(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function st(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function ft(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}function ct(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function ht(t){return function(){this.style.removeProperty(t)}}function dt(t,e,n){return function(){this.style.setProperty(t,e,n)}}function gt(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function pt(t,e){return t.style.getPropertyValue(e)||ct(t).getComputedStyle(t,null).getPropertyValue(e)}function yt(t){return function(){delete this[t]}}function mt(t,e){return function(){this[t]=e}}function vt(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function wt(t){return t.trim().split(/^|\s+/)}function xt(t){return t.classList||new At(t)}function At(t){this._node=t,this._names=wt(t.getAttribute("class")||"")}function bt(t,e){for(var n=xt(t),r=-1,a=e.length;++r<a;)n.add(e[r])}function Dt(t,e){for(var n=xt(t),r=-1,a=e.length;++r<a;)n.remove(e[r])}function kt(t){return function(){bt(this,t)}}function Mt(t){return function(){Dt(this,t)}}function Tt(t,e){return function(){(e.apply(this,arguments)?bt:Dt)(this,t)}}function Ct(){this.textContent=""}function Ft(t){return function(){this.textContent=t}}function _t(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function St(){this.innerHTML=""}function Et(t){return function(){this.innerHTML=t}}function Bt(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function Nt(){this.nextSibling&&this.parentNode.appendChild(this)}function Lt(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function Vt(){return null}function It(){var t=this.parentNode;t&&t.removeChild(this)}function Yt(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function Pt(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function zt(t){return t.trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");return n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}function Ot(t){return function(){var e=this.__on;if(e){for(var n,r=0,a=-1,i=e.length;r<i;++r)n=e[r],t.type&&n.type!==t.type||n.name!==t.name?e[++a]=n:this.removeEventListener(n.type,n.listener,n.options);++a?e.length=a:delete this.__on}}}function Ut(t,e,n){return function(){var r,a=this.__on,i=function(t){return function(e){t.call(this,e,this.__data__)}}(e);if(a)for(var l=0,o=a.length;l<o;++l)if((r=a[l]).type===t.type&&r.name===t.name)return this.removeEventListener(r.type,r.listener,r.options),this.addEventListener(r.type,r.listener=i,r.options=n),void(r.value=e);this.addEventListener(t.type,i,n),r={type:t.type,name:t.name,value:e,listener:i,options:n},a?a.push(r):this.__on=[r]}}function Rt(t,e,n){var r=ct(t),a=r.CustomEvent;"function"==typeof a?a=new a(e,n):(a=r.document.createEvent("Event"),n?(a.initEvent(e,n.bubbles,n.cancelable),a.detail=n.detail):a.initEvent(e,!1,!1)),t.dispatchEvent(a)}function Wt(t,e){return function(){return Rt(this,t,e)}}function $t(t,e){return function(){return Rt(this,t,e.apply(this,arguments))}}K.prototype={constructor:K,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}},At.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var Ht=[null];function jt(t,e){this._groups=t,this._parents=e}function Xt(){return new jt([[document.documentElement]],Ht)}function qt(t){return"string"==typeof t?new jt([[document.querySelector(t)]],[document.documentElement]):new jt([[t]],Ht)}function Gt(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function Qt(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function Zt(){}jt.prototype=Xt.prototype={constructor:jt,select:function(t){"function"!=typeof t&&(t=R(t));for(var e=this._groups,n=e.length,r=new Array(n),a=0;a<n;++a)for(var i,l,o=e[a],u=o.length,s=r[a]=new Array(u),f=0;f<u;++f)(i=o[f])&&(l=t.call(i,i.__data__,f,o))&&("__data__"in i&&(l.__data__=i.__data__),s[f]=l);return new jt(r,this._parents)},selectAll:function(t){t="function"==typeof t?function(t){return function(){var e=t.apply(this,arguments);return null==e?[]:W(e)}}(t):H(t);for(var e=this._groups,n=e.length,r=[],a=[],i=0;i<n;++i)for(var l,o=e[i],u=o.length,s=0;s<u;++s)(l=o[s])&&(r.push(t.call(l,l.__data__,s,o)),a.push(l));return new jt(r,a)},selectChild:function(t){return this.select(null==t?G:function(t){return function(){return q.call(this.children,t)}}("function"==typeof t?t:X(t)))},selectChildren:function(t){return this.selectAll(null==t?Z:function(t){return function(){return Q.call(this.children,t)}}("function"==typeof t?t:X(t)))},filter:function(t){"function"!=typeof t&&(t=j(t));for(var e=this._groups,n=e.length,r=new Array(n),a=0;a<n;++a)for(var i,l=e[a],o=l.length,u=r[a]=[],s=0;s<o;++s)(i=l[s])&&t.call(i,i.__data__,s,l)&&u.push(i);return new jt(r,this._parents)},data:function(t,e){if(!arguments.length)return Array.from(this,rt);var n=e?nt:et,r=this._parents,a=this._groups;"function"!=typeof t&&(t=tt(t));for(var i=a.length,l=new Array(i),o=new Array(i),u=new Array(i),s=0;s<i;++s){var f=r[s],c=a[s],h=c.length,d=W(t.call(f,f&&f.__data__,s,r)),g=d.length,p=o[s]=new Array(g),y=l[s]=new Array(g),m=u[s]=new Array(h);n(f,c,p,y,m,d,e);for(var v,w,x=0,A=0;x<g;++x)if(v=p[x]){for(x>=A&&(A=x+1);!(w=y[A])&&++A<g;);v._next=w||null}}return(l=new jt(l,r))._enter=o,l._exit=u,l},enter:function(){return new jt(this._enter||this._groups.map(J),this._parents)},exit:function(){return new jt(this._exit||this._groups.map(J),this._parents)},join:function(t,e,n){var r=this.enter(),a=this,i=this.exit();return r="function"==typeof t?t(r):r.append(t+""),null!=e&&(a=e(a)),null==n?i.remove():n(i),r&&a?r.merge(a).order():a},merge:function(t){if(!(t instanceof jt))throw new Error("invalid merge");for(var e=this._groups,n=t._groups,r=e.length,a=n.length,i=Math.min(r,a),l=new Array(r),o=0;o<i;++o)for(var u,s=e[o],f=n[o],c=s.length,h=l[o]=new Array(c),d=0;d<c;++d)(u=s[d]||f[d])&&(h[d]=u);for(;o<r;++o)l[o]=e[o];return new jt(l,this._parents)},selection:function(){return this},order:function(){for(var t=this._groups,e=-1,n=t.length;++e<n;)for(var r,a=t[e],i=a.length-1,l=a[i];--i>=0;)(r=a[i])&&(l&&4^r.compareDocumentPosition(l)&&l.parentNode.insertBefore(r,l),l=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=at);for(var n=this._groups,r=n.length,a=new Array(r),i=0;i<r;++i){for(var l,o=n[i],u=o.length,s=a[i]=new Array(u),f=0;f<u;++f)(l=o[f])&&(s[f]=l);s.sort(e)}return new jt(a,this._parents).order()},call:function(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this},nodes:function(){return Array.from(this)},node:function(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var r=t[e],a=0,i=r.length;a<i;++a){var l=r[a];if(l)return l}return null},size:function(){let t=0;for(const e of this)++t;return t},empty:function(){return!this.node()},each:function(t){for(var e=this._groups,n=0,r=e.length;n<r;++n)for(var a,i=e[n],l=0,o=i.length;l<o;++l)(a=i[l])&&t.call(a,a.__data__,l,i);return this},attr:function(t,e){var n=Y(t);if(arguments.length<2){var r=this.node();return n.local?r.getAttributeNS(n.space,n.local):r.getAttribute(n)}return this.each((null==e?n.local?lt:it:"function"==typeof e?n.local?ft:st:n.local?ut:ot)(n,e))},style:function(t,e,n){return arguments.length>1?this.each((null==e?ht:"function"==typeof e?gt:dt)(t,e,null==n?"":n)):pt(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?yt:"function"==typeof e?vt:mt)(t,e)):this.node()[t]},classed:function(t,e){var n=wt(t+"");if(arguments.length<2){for(var r=xt(this.node()),a=-1,i=n.length;++a<i;)if(!r.contains(n[a]))return!1;return!0}return this.each(("function"==typeof e?Tt:e?kt:Mt)(n,e))},text:function(t){return arguments.length?this.each(null==t?Ct:("function"==typeof t?_t:Ft)(t)):this.node().textContent},html:function(t){return arguments.length?this.each(null==t?St:("function"==typeof t?Bt:Et)(t)):this.node().innerHTML},raise:function(){return this.each(Nt)},lower:function(){return this.each(Lt)},append:function(t){var e="function"==typeof t?t:O(t);return this.select((function(){return this.appendChild(e.apply(this,arguments))}))},insert:function(t,e){var n="function"==typeof t?t:O(t),r=null==e?Vt:"function"==typeof e?e:R(e);return this.select((function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)}))},remove:function(){return this.each(It)},clone:function(t){return this.select(t?Pt:Yt)},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},on:function(t,e,n){var r,a,i=zt(t+""),l=i.length;if(!(arguments.length<2)){for(o=e?Ut:Ot,r=0;r<l;++r)this.each(o(i[r],e,n));return this}var o=this.node().__on;if(o)for(var u,s=0,f=o.length;s<f;++s)for(r=0,u=o[s];r<l;++r)if((a=i[r]).type===u.type&&a.name===u.name)return u.value},dispatch:function(t,e){return this.each(("function"==typeof e?$t:Wt)(t,e))},[Symbol.iterator]:function*(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var r,a=t[e],i=0,l=a.length;i<l;++i)(r=a[i])&&(yield r)}};var Jt=1/.7,Kt="\\s*([+-]?\\d+)\\s*",te="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",ee="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",ne=/^#([0-9a-f]{3,8})$/,re=new RegExp("^rgb\\("+[Kt,Kt,Kt]+"\\)$"),ae=new RegExp("^rgb\\("+[ee,ee,ee]+"\\)$"),ie=new RegExp("^rgba\\("+[Kt,Kt,Kt,te]+"\\)$"),le=new RegExp("^rgba\\("+[ee,ee,ee,te]+"\\)$"),oe=new RegExp("^hsl\\("+[te,ee,ee]+"\\)$"),ue=new RegExp("^hsla\\("+[te,ee,ee,te]+"\\)$"),se={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function fe(){return this.rgb().formatHex()}function ce(){return this.rgb().formatRgb()}function he(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=ne.exec(t))?(n=e[1].length,e=parseInt(e[1],16),6===n?de(e):3===n?new me(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?ge(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?ge(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=re.exec(t))?new me(e[1],e[2],e[3],1):(e=ae.exec(t))?new me(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=ie.exec(t))?ge(e[1],e[2],e[3],e[4]):(e=le.exec(t))?ge(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=oe.exec(t))?Ae(e[1],e[2]/100,e[3]/100,1):(e=ue.exec(t))?Ae(e[1],e[2]/100,e[3]/100,e[4]):se.hasOwnProperty(t)?de(se[t]):"transparent"===t?new me(NaN,NaN,NaN,0):null}function de(t){return new me(t>>16&255,t>>8&255,255&t,1)}function ge(t,e,n,r){return r<=0&&(t=e=n=NaN),new me(t,e,n,r)}function pe(t){return t instanceof Zt||(t=he(t)),t?new me((t=t.rgb()).r,t.g,t.b,t.opacity):new me}function ye(t,e,n,r){return 1===arguments.length?pe(t):new me(t,e,n,null==r?1:r)}function me(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function ve(){return"#"+xe(this.r)+xe(this.g)+xe(this.b)}function we(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function xe(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function Ae(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new De(t,e,n,r)}function be(t){if(t instanceof De)return new De(t.h,t.s,t.l,t.opacity);if(t instanceof Zt||(t=he(t)),!t)return new De;if(t instanceof De)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,a=Math.min(e,n,r),i=Math.max(e,n,r),l=NaN,o=i-a,u=(i+a)/2;return o?(l=e===i?(n-r)/o+6*(n<r):n===i?(r-e)/o+2:(e-n)/o+4,o/=u<.5?i+a:2-i-a,l*=60):o=u>0&&u<1?0:l,new De(l,o,u,t.opacity)}function De(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function ke(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}Gt(Zt,he,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:fe,formatHex:fe,formatHsl:function(){return be(this).formatHsl()},formatRgb:ce,toString:ce}),Gt(me,ye,Qt(Zt,{brighter:function(t){return t=null==t?Jt:Math.pow(Jt,t),new me(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new me(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:ve,formatHex:ve,formatRgb:we,toString:we})),Gt(De,(function(t,e,n,r){return 1===arguments.length?be(t):new De(t,e,n,null==r?1:r)}),Qt(Zt,{brighter:function(t){return t=null==t?Jt:Math.pow(Jt,t),new De(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new De(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,a=2*n-r;return new me(ke(t>=240?t-240:t+120,a,r),ke(t,a,r),ke(t<120?t+240:t-120,a,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));const Me=Math.PI/180,Te=180/Math.PI,Ce=4/29,Fe=6/29,_e=3*Fe*Fe;function Se(t){if(t instanceof Be)return new Be(t.l,t.a,t.b,t.opacity);if(t instanceof Pe)return ze(t);t instanceof me||(t=pe(t));var e,n,r=Ie(t.r),a=Ie(t.g),i=Ie(t.b),l=Ne((.2225045*r+.7168786*a+.0606169*i)/1);return r===a&&a===i?e=n=l:(e=Ne((.4360747*r+.3850649*a+.1430804*i)/.96422),n=Ne((.0139322*r+.0971045*a+.7141733*i)/.82521)),new Be(116*l-16,500*(e-l),200*(l-n),t.opacity)}function Ee(t,e,n,r){return 1===arguments.length?Se(t):new Be(t,e,n,null==r?1:r)}function Be(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function Ne(t){return t>.008856451679035631?Math.pow(t,1/3):t/_e+Ce}function Le(t){return t>Fe?t*t*t:_e*(t-Ce)}function Ve(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Ie(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Ye(t){if(t instanceof Pe)return new Pe(t.h,t.c,t.l,t.opacity);if(t instanceof Be||(t=Se(t)),0===t.a&&0===t.b)return new Pe(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*Te;return new Pe(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function Pe(t,e,n,r){this.h=+t,this.c=+e,this.l=+n,this.opacity=+r}function ze(t){if(isNaN(t.h))return new Be(t.l,0,0,t.opacity);var e=t.h*Me;return new Be(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}Gt(Be,Ee,Qt(Zt,{brighter:function(t){return new Be(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new Be(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return new me(Ve(3.1338561*(e=.96422*Le(e))-1.6168667*(t=1*Le(t))-.4906146*(n=.82521*Le(n))),Ve(-.9787684*e+1.9161415*t+.033454*n),Ve(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}})),Gt(Pe,(function(t,e,n,r){return 1===arguments.length?Ye(t):new Pe(t,e,n,null==r?1:r)}),Qt(Zt,{brighter:function(t){return new Pe(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new Pe(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return ze(this).rgb()}}));var Oe,Ue,Re=0,We=0,$e=0,He=0,je=0,Xe=0,qe="object"==typeof performance&&performance.now?performance:Date,Ge="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function Qe(){return je||(Ge(Ze),je=qe.now()+Xe)}function Ze(){je=0}function Je(){this._call=this._time=this._next=null}function Ke(t,e,n){var r=new Je;return r.restart(t,e,n),r}function tn(){je=(He=qe.now())+Xe,Re=We=0;try{!function(){Qe(),++Re;for(var t,e=Oe;e;)(t=je-e._time)>=0&&e._call.call(null,t),e=e._next;--Re}()}finally{Re=0,function(){var t,e,n=Oe,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:Oe=e);Ue=t,nn(r)}(),je=0}}function en(){var t=qe.now(),e=t-He;e>1e3&&(Xe-=e,He=t)}function nn(t){Re||(We&&(We=clearTimeout(We)),t-je>24?(t<1/0&&(We=setTimeout(tn,t-qe.now()-Xe)),$e&&($e=clearInterval($e))):($e||(He=qe.now(),$e=setInterval(en,1e3)),Re=1,Ge(tn)))}function rn(t,e,n){var r=new Je;return e=null==e?0:+e,r.restart((n=>{r.stop(),t(n+e)}),e,n),r}Je.prototype=Ke.prototype={constructor:Je,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?Qe():+n)+(null==e?0:+e),this._next||Ue===this||(Ue?Ue._next=this:Oe=this,Ue=this),this._call=t,this._time=n,nn()},stop:function(){this._call&&(this._call=null,this._time=1/0,nn())}};var an=S("start","end","cancel","interrupt"),ln=[];function on(t,e,n,r,a,i){var l=t.__transition;if(l){if(n in l)return}else t.__transition={};!function(t,e,n){var r,a=t.__transition;function i(t){n.state=1,n.timer.restart(l,n.delay,n.time),n.delay<=t&&l(t-n.delay)}function l(i){var s,f,c,h;if(1!==n.state)return u();for(s in a)if((h=a[s]).name===n.name){if(3===h.state)return rn(l);4===h.state?(h.state=6,h.timer.stop(),h.on.call("interrupt",t,t.__data__,h.index,h.group),delete a[s]):+s<e&&(h.state=6,h.timer.stop(),h.on.call("cancel",t,t.__data__,h.index,h.group),delete a[s])}if(rn((function(){3===n.state&&(n.state=4,n.timer.restart(o,n.delay,n.time),o(i))})),n.state=2,n.on.call("start",t,t.__data__,n.index,n.group),2===n.state){for(n.state=3,r=new Array(c=n.tween.length),s=0,f=-1;s<c;++s)(h=n.tween[s].value.call(t,t.__data__,n.index,n.group))&&(r[++f]=h);r.length=f+1}}function o(e){for(var a=e<n.duration?n.ease.call(null,e/n.duration):(n.timer.restart(u),n.state=5,1),i=-1,l=r.length;++i<l;)r[i].call(t,a);5===n.state&&(n.on.call("end",t,t.__data__,n.index,n.group),u())}function u(){for(var r in n.state=6,n.timer.stop(),delete a[e],a)return;delete t.__transition}a[e]=n,n.timer=Ke(i,0,n.time)}(t,n,{name:e,index:r,group:a,on:an,tween:ln,time:i.time,delay:i.delay,duration:i.duration,ease:i.ease,timer:null,state:0})}function un(t,e){var n=fn(t,e);if(n.state>0)throw new Error("too late; already scheduled");return n}function sn(t,e){var n=fn(t,e);if(n.state>3)throw new Error("too late; already running");return n}function fn(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}var cn=t=>()=>t;function hn(t){return 1==(t=+t)?dn:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):cn(isNaN(e)?n:e)}}function dn(t,e){var n=e-t;return n?function(t,e){return function(n){return t+n*e}}(t,n):cn(isNaN(t)?e:t)}var gn=function t(e){var n=hn(e);function r(t,e){var r=n((t=ye(t)).r,(e=ye(e)).r),a=n(t.g,e.g),i=n(t.b,e.b),l=dn(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=a(e),t.b=i(e),t.opacity=l(e),t+""}}return r.gamma=t,r}(1);function pn(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}var yn=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,mn=new RegExp(yn.source,"g");function vn(t,e){var n,r,a,i=yn.lastIndex=mn.lastIndex=0,l=-1,o=[],u=[];for(t+="",e+="";(n=yn.exec(t))&&(r=mn.exec(e));)(a=r.index)>i&&(a=e.slice(i,a),o[l]?o[l]+=a:o[++l]=a),(n=n[0])===(r=r[0])?o[l]?o[l]+=r:o[++l]=r:(o[++l]=null,u.push({i:l,x:pn(n,r)})),i=mn.lastIndex;return i<e.length&&(a=e.slice(i),o[l]?o[l]+=a:o[++l]=a),o.length<2?u[0]?function(t){return function(e){return t(e)+""}}(u[0].x):function(t){return function(){return t}}(e):(e=u.length,function(t){for(var n,r=0;r<e;++r)o[(n=u[r]).i]=n.x(t);return o.join("")})}var wn,xn=180/Math.PI,An={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function bn(t,e,n,r,a,i){var l,o,u;return(l=Math.sqrt(t*t+e*e))&&(t/=l,e/=l),(u=t*n+e*r)&&(n-=t*u,r-=e*u),(o=Math.sqrt(n*n+r*r))&&(n/=o,r/=o,u/=o),t*r<e*n&&(t=-t,e=-e,u=-u,l=-l),{translateX:a,translateY:i,rotate:Math.atan2(e,t)*xn,skewX:Math.atan(u)*xn,scaleX:l,scaleY:o}}function Dn(t,e,n,r){function a(t){return t.length?t.pop()+" ":""}return function(i,l){var o=[],u=[];return i=t(i),l=t(l),function(t,r,a,i,l,o){if(t!==a||r!==i){var u=l.push("translate(",null,e,null,n);o.push({i:u-4,x:pn(t,a)},{i:u-2,x:pn(r,i)})}else(a||i)&&l.push("translate("+a+e+i+n)}(i.translateX,i.translateY,l.translateX,l.translateY,o,u),function(t,e,n,i){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),i.push({i:n.push(a(n)+"rotate(",null,r)-2,x:pn(t,e)})):e&&n.push(a(n)+"rotate("+e+r)}(i.rotate,l.rotate,o,u),function(t,e,n,i){t!==e?i.push({i:n.push(a(n)+"skewX(",null,r)-2,x:pn(t,e)}):e&&n.push(a(n)+"skewX("+e+r)}(i.skewX,l.skewX,o,u),function(t,e,n,r,i,l){if(t!==n||e!==r){var o=i.push(a(i)+"scale(",null,",",null,")");l.push({i:o-4,x:pn(t,n)},{i:o-2,x:pn(e,r)})}else 1===n&&1===r||i.push(a(i)+"scale("+n+","+r+")")}(i.scaleX,i.scaleY,l.scaleX,l.scaleY,o,u),i=l=null,function(t){for(var e,n=-1,r=u.length;++n<r;)o[(e=u[n]).i]=e.x(t);return o.join("")}}}var kn=Dn((function(t){const e=new("function"==typeof DOMMatrix?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?An:bn(e.a,e.b,e.c,e.d,e.e,e.f)}),"px, ","px)","deg)"),Mn=Dn((function(t){return null==t?An:(wn||(wn=document.createElementNS("http://www.w3.org/2000/svg","g")),wn.setAttribute("transform",t),(t=wn.transform.baseVal.consolidate())?bn((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):An)}),", ",")",")");function Tn(t,e){var n,r;return function(){var a=sn(this,t),i=a.tween;if(i!==n)for(var l=0,o=(r=n=i).length;l<o;++l)if(r[l].name===e){(r=r.slice()).splice(l,1);break}a.tween=r}}function Cn(t,e,n){var r,a;if("function"!=typeof n)throw new Error;return function(){var i=sn(this,t),l=i.tween;if(l!==r){a=(r=l).slice();for(var o={name:e,value:n},u=0,s=a.length;u<s;++u)if(a[u].name===e){a[u]=o;break}u===s&&a.push(o)}i.tween=a}}function Fn(t,e,n){var r=t._id;return t.each((function(){var t=sn(this,r);(t.value||(t.value={}))[e]=n.apply(this,arguments)})),function(t){return fn(t,r).value[e]}}function _n(t,e){var n;return("number"==typeof e?pn:e instanceof he?gn:(n=he(e))?(e=n,gn):vn)(t,e)}function Sn(t){return function(){this.removeAttribute(t)}}function En(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Bn(t,e,n){var r,a,i=n+"";return function(){var l=this.getAttribute(t);return l===i?null:l===r?a:a=e(r=l,n)}}function Nn(t,e,n){var r,a,i=n+"";return function(){var l=this.getAttributeNS(t.space,t.local);return l===i?null:l===r?a:a=e(r=l,n)}}function Ln(t,e,n){var r,a,i;return function(){var l,o,u=n(this);if(null!=u)return(l=this.getAttribute(t))===(o=u+"")?null:l===r&&o===a?i:(a=o,i=e(r=l,u));this.removeAttribute(t)}}function Vn(t,e,n){var r,a,i;return function(){var l,o,u=n(this);if(null!=u)return(l=this.getAttributeNS(t.space,t.local))===(o=u+"")?null:l===r&&o===a?i:(a=o,i=e(r=l,u));this.removeAttributeNS(t.space,t.local)}}function In(t,e){return function(n){this.setAttribute(t,e.call(this,n))}}function Yn(t,e){return function(n){this.setAttributeNS(t.space,t.local,e.call(this,n))}}function Pn(t,e){var n,r;function a(){var a=e.apply(this,arguments);return a!==r&&(n=(r=a)&&Yn(t,a)),n}return a._value=e,a}function zn(t,e){var n,r;function a(){var a=e.apply(this,arguments);return a!==r&&(n=(r=a)&&In(t,a)),n}return a._value=e,a}function On(t,e){return function(){un(this,t).delay=+e.apply(this,arguments)}}function Un(t,e){return e=+e,function(){un(this,t).delay=e}}function Rn(t,e){return function(){sn(this,t).duration=+e.apply(this,arguments)}}function Wn(t,e){return e=+e,function(){sn(this,t).duration=e}}function $n(t,e){if("function"!=typeof e)throw new Error;return function(){sn(this,t).ease=e}}function Hn(t,e,n){var r,a,i=function(t){return(t+"").trim().split(/^|\s+/).every((function(t){var e=t.indexOf(".");return e>=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?un:sn;return function(){var l=i(this,t),o=l.on;o!==r&&(a=(r=o).copy()).on(e,n),l.on=a}}var jn=Xt.prototype.constructor;function Xn(t){return function(){this.style.removeProperty(t)}}function qn(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}function Gn(t,e,n){var r,a;function i(){var i=e.apply(this,arguments);return i!==a&&(r=(a=i)&&qn(t,i,n)),r}return i._value=e,i}function Qn(t){return function(e){this.textContent=t.call(this,e)}}function Zn(t){var e,n;function r(){var r=t.apply(this,arguments);return r!==n&&(e=(n=r)&&Qn(r)),e}return r._value=t,r}var Jn=0;function Kn(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function tr(){return++Jn}var er=Xt.prototype;Kn.prototype={constructor:Kn,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=R(t));for(var r=this._groups,a=r.length,i=new Array(a),l=0;l<a;++l)for(var o,u,s=r[l],f=s.length,c=i[l]=new Array(f),h=0;h<f;++h)(o=s[h])&&(u=t.call(o,o.__data__,h,s))&&("__data__"in o&&(u.__data__=o.__data__),c[h]=u,on(c[h],e,n,h,c,fn(o,n)));return new Kn(i,this._parents,e,n)},selectAll:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=H(t));for(var r=this._groups,a=r.length,i=[],l=[],o=0;o<a;++o)for(var u,s=r[o],f=s.length,c=0;c<f;++c)if(u=s[c]){for(var h,d=t.call(u,u.__data__,c,s),g=fn(u,n),p=0,y=d.length;p<y;++p)(h=d[p])&&on(h,e,n,p,d,g);i.push(d),l.push(u)}return new Kn(i,l,e,n)},filter:function(t){"function"!=typeof t&&(t=j(t));for(var e=this._groups,n=e.length,r=new Array(n),a=0;a<n;++a)for(var i,l=e[a],o=l.length,u=r[a]=[],s=0;s<o;++s)(i=l[s])&&t.call(i,i.__data__,s,l)&&u.push(i);return new Kn(r,this._parents,this._name,this._id)},merge:function(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,n=t._groups,r=e.length,a=n.length,i=Math.min(r,a),l=new Array(r),o=0;o<i;++o)for(var u,s=e[o],f=n[o],c=s.length,h=l[o]=new Array(c),d=0;d<c;++d)(u=s[d]||f[d])&&(h[d]=u);for(;o<r;++o)l[o]=e[o];return new Kn(l,this._parents,this._name,this._id)},selection:function(){return new jn(this._groups,this._parents)},transition:function(){for(var t=this._name,e=this._id,n=tr(),r=this._groups,a=r.length,i=0;i<a;++i)for(var l,o=r[i],u=o.length,s=0;s<u;++s)if(l=o[s]){var f=fn(l,e);on(l,t,n,s,o,{time:f.time+f.delay+f.duration,delay:0,duration:f.duration,ease:f.ease})}return new Kn(r,this._parents,t,n)},call:er.call,nodes:er.nodes,node:er.node,size:er.size,empty:er.empty,each:er.each,on:function(t,e){var n=this._id;return arguments.length<2?fn(this.node(),n).on.on(t):this.each(Hn(n,t,e))},attr:function(t,e){var n=Y(t),r="transform"===n?Mn:_n;return this.attrTween(t,"function"==typeof e?(n.local?Vn:Ln)(n,r,Fn(this,"attr."+t,e)):null==e?(n.local?En:Sn)(n):(n.local?Nn:Bn)(n,r,e))},attrTween:function(t,e){var n="attr."+t;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==e)return this.tween(n,null);if("function"!=typeof e)throw new Error;var r=Y(t);return this.tween(n,(r.local?Pn:zn)(r,e))},style:function(t,e,n){var r="transform"==(t+="")?kn:_n;return null==e?this.styleTween(t,function(t,e){var n,r,a;return function(){var i=pt(this,t),l=(this.style.removeProperty(t),pt(this,t));return i===l?null:i===n&&l===r?a:a=e(n=i,r=l)}}(t,r)).on("end.style."+t,Xn(t)):"function"==typeof e?this.styleTween(t,function(t,e,n){var r,a,i;return function(){var l=pt(this,t),o=n(this),u=o+"";return null==o&&(this.style.removeProperty(t),u=o=pt(this,t)),l===u?null:l===r&&u===a?i:(a=u,i=e(r=l,o))}}(t,r,Fn(this,"style."+t,e))).each(function(t,e){var n,r,a,i,l="style."+e,o="end."+l;return function(){var u=sn(this,t),s=u.on,f=null==u.value[l]?i||(i=Xn(e)):void 0;s===n&&a===f||(r=(n=s).copy()).on(o,a=f),u.on=r}}(this._id,t)):this.styleTween(t,function(t,e,n){var r,a,i=n+"";return function(){var l=pt(this,t);return l===i?null:l===r?a:a=e(r=l,n)}}(t,r,e),n).on("end.style."+t,null)},styleTween:function(t,e,n){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==e)return this.tween(r,null);if("function"!=typeof e)throw new Error;return this.tween(r,Gn(t,e,null==n?"":n))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(Fn(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},textTween:function(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(null==t)return this.tween(e,null);if("function"!=typeof t)throw new Error;return this.tween(e,Zn(t))},remove:function(){return this.on("end.remove",function(t){return function(){var e=this.parentNode;for(var n in this.__transition)if(+n!==t)return;e&&e.removeChild(this)}}(this._id))},tween:function(t,e){var n=this._id;if(t+="",arguments.length<2){for(var r,a=fn(this.node(),n).tween,i=0,l=a.length;i<l;++i)if((r=a[i]).name===t)return r.value;return null}return this.each((null==e?Tn:Cn)(n,t,e))},delay:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?On:Un)(e,t)):fn(this.node(),e).delay},duration:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Rn:Wn)(e,t)):fn(this.node(),e).duration},ease:function(t){var e=this._id;return arguments.length?this.each($n(e,t)):fn(this.node(),e).ease},easeVarying:function(t){if("function"!=typeof t)throw new Error;return this.each(function(t,e){return function(){var n=e.apply(this,arguments);if("function"!=typeof n)throw new Error;sn(this,t).ease=n}}(this._id,t))},end:function(){var t,e,n=this,r=n._id,a=n.size();return new Promise((function(i,l){var o={value:l},u={value:function(){0==--a&&i()}};n.each((function(){var n=sn(this,r),a=n.on;a!==t&&((e=(t=a).copy())._.cancel.push(o),e._.interrupt.push(o),e._.end.push(u)),n.on=e})),0===a&&i()}))},[Symbol.iterator]:er[Symbol.iterator]};var nr={time:null,delay:0,duration:250,ease:function(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}};function rr(t,e){for(var n;!(n=t.__transition)||!(n=n[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return n}Xt.prototype.interrupt=function(t){return this.each((function(){!function(t,e){var n,r,a,i=t.__transition,l=!0;if(i){for(a in e=null==e?null:e+"",i)(n=i[a]).name===e?(r=n.state>2&&n.state<5,n.state=6,n.timer.stop(),n.on.call(r?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete i[a]):l=!1;l&&delete t.__transition}}(this,t)}))},Xt.prototype.transition=function(t){var e,n;t instanceof Kn?(e=t._id,t=t._name):(e=tr(),(n=nr).time=Qe(),t=null==t?null:t+"");for(var r=this._groups,a=r.length,i=0;i<a;++i)for(var l,o=r[i],u=o.length,s=0;s<u;++s)(l=o[s])&&on(l,t,e,s,o,n||rr(l,e));return new Kn(r,this._parents,t,e)};const ar=Math.PI,ir=2*ar,lr=ir-1e-6;function or(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function ur(){return new or}function sr(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function fr(t){return(t=sr(Math.abs(t)))?t[1]:NaN}or.prototype=ur.prototype={constructor:or,moveTo:function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},quadraticCurveTo:function(t,e,n,r){this._+="Q"+ +t+","+ +e+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function(t,e,n,r,a,i){this._+="C"+ +t+","+ +e+","+ +n+","+ +r+","+(this._x1=+a)+","+(this._y1=+i)},arcTo:function(t,e,n,r,a){t=+t,e=+e,n=+n,r=+r,a=+a;var i=this._x1,l=this._y1,o=n-t,u=r-e,s=i-t,f=l-e,c=s*s+f*f;if(a<0)throw new Error("negative radius: "+a);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(c>1e-6)if(Math.abs(f*o-u*s)>1e-6&&a){var h=n-i,d=r-l,g=o*o+u*u,p=h*h+d*d,y=Math.sqrt(g),m=Math.sqrt(c),v=a*Math.tan((ar-Math.acos((g+c-p)/(2*y*m)))/2),w=v/m,x=v/y;Math.abs(w-1)>1e-6&&(this._+="L"+(t+w*s)+","+(e+w*f)),this._+="A"+a+","+a+",0,0,"+ +(f*h>s*d)+","+(this._x1=t+x*o)+","+(this._y1=e+x*u)}else this._+="L"+(this._x1=t)+","+(this._y1=e);else;},arc:function(t,e,n,r,a,i){t=+t,e=+e,i=!!i;var l=(n=+n)*Math.cos(r),o=n*Math.sin(r),u=t+l,s=e+o,f=1^i,c=i?r-a:a-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+u+","+s:(Math.abs(this._x1-u)>1e-6||Math.abs(this._y1-s)>1e-6)&&(this._+="L"+u+","+s),n&&(c<0&&(c=c%ir+ir),c>lr?this._+="A"+n+","+n+",0,1,"+f+","+(t-l)+","+(e-o)+"A"+n+","+n+",0,1,"+f+","+(this._x1=u)+","+(this._y1=s):c>1e-6&&(this._+="A"+n+","+n+",0,"+ +(c>=ar)+","+f+","+(this._x1=t+n*Math.cos(a))+","+(this._y1=e+n*Math.sin(a))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};var cr,hr=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function dr(t){if(!(e=hr.exec(t)))throw new Error("invalid format: "+t);var e;return new gr({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function gr(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function pr(t,e){var n=sr(t,e);if(!n)return t+"";var r=n[0],a=n[1];return a<0?"0."+new Array(-a).join("0")+r:r.length>a+1?r.slice(0,a+1)+"."+r.slice(a+1):r+new Array(a-r.length+2).join("0")}dr.prototype=gr.prototype,gr.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var yr={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>pr(100*t,e),r:pr,s:function(t,e){var n=sr(t,e);if(!n)return t+"";var r=n[0],a=n[1],i=a-(cr=3*Math.max(-8,Math.min(8,Math.floor(a/3))))+1,l=r.length;return i===l?r:i>l?r+new Array(i-l+1).join("0"):i>0?r.slice(0,i)+"."+r.slice(i):"0."+new Array(1-i).join("0")+sr(t,Math.max(0,e+i-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function mr(t){return t}var vr,wr,xr,Ar=Array.prototype.map,br=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Dr(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?mr:(e=Ar.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var a=t.length,i=[],l=0,o=e[0],u=0;a>0&&o>0&&(u+o+1>r&&(o=Math.max(1,r-u)),i.push(t.substring(a-=o,a+o)),!((u+=o+1)>r));)o=e[l=(l+1)%e.length];return i.reverse().join(n)}),a=void 0===t.currency?"":t.currency[0]+"",i=void 0===t.currency?"":t.currency[1]+"",l=void 0===t.decimal?".":t.decimal+"",o=void 0===t.numerals?mr:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(Ar.call(t.numerals,String)),u=void 0===t.percent?"%":t.percent+"",s=void 0===t.minus?"":t.minus+"",f=void 0===t.nan?"NaN":t.nan+"";function c(t){var e=(t=dr(t)).fill,n=t.align,c=t.sign,h=t.symbol,d=t.zero,g=t.width,p=t.comma,y=t.precision,m=t.trim,v=t.type;"n"===v?(p=!0,v="g"):yr[v]||(void 0===y&&(y=12),m=!0,v="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=");var w="$"===h?a:"#"===h&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",x="$"===h?i:/[%p]/.test(v)?u:"",A=yr[v],b=/[defgprs%]/.test(v);function D(t){var a,i,u,h=w,D=x;if("c"===v)D=A(t)+D,t="";else{var k=(t=+t)<0||1/t<0;if(t=isNaN(t)?f:A(Math.abs(t),y),m&&(t=function(t){t:for(var e,n=t.length,r=1,a=-1;r<n;++r)switch(t[r]){case".":a=e=r;break;case"0":0===a&&(a=r),e=r;break;default:if(!+t[r])break t;a>0&&(a=0)}return a>0?t.slice(0,a)+t.slice(e+1):t}(t)),k&&0==+t&&"+"!==c&&(k=!1),h=(k?"("===c?c:s:"-"===c||"("===c?"":c)+h,D=("s"===v?br[8+cr/3]:"")+D+(k&&"("===c?")":""),b)for(a=-1,i=t.length;++a<i;)if(48>(u=t.charCodeAt(a))||u>57){D=(46===u?l+t.slice(a+1):t.slice(a))+D,t=t.slice(0,a);break}}p&&!d&&(t=r(t,1/0));var M=h.length+t.length+D.length,T=M<g?new Array(g-M+1).join(e):"";switch(p&&d&&(t=r(T+t,T.length?g-D.length:1/0),T=""),n){case"<":t=h+t+D+T;break;case"=":t=h+T+t+D;break;case"^":t=T.slice(0,M=T.length>>1)+h+t+D+T.slice(M);break;default:t=T+h+t+D}return o(t)}return y=void 0===y?6:/[gprs]/.test(v)?Math.max(1,Math.min(21,y)):Math.max(0,Math.min(20,y)),D.toString=function(){return t+""},D}return{format:c,formatPrefix:function(t,e){var n=c(((t=dr(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(fr(e)/3))),a=Math.pow(10,-r),i=br[8+r/3];return function(t){return n(a*t)+i}}}}vr=Dr({thousands:",",grouping:[3],currency:["$",""]}),wr=vr.format,xr=vr.formatPrefix;function kr(t,e){var n=e-t;return n?function(t,e){return function(n){return t+n*e}}(t,n):(t=>()=>t)(isNaN(t)?e:t)}function Mr(t,e){var n=kr((t=Ee(t)).l,(e=Ee(e)).l),r=kr(t.a,e.a),a=kr(t.b,e.b),i=kr(t.opacity,e.opacity);return function(e){return t.l=n(e),t.a=r(e),t.b=a(e),t.opacity=i(e),t+""}}function Tr(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}const Cr=Symbol("implicit");function Fr(){var t=new Map,e=[],n=[],r=Cr;function a(a){var i=a+"",l=t.get(i);if(!l){if(r!==Cr)return r;t.set(i,l=e.push(a))}return n[(l-1)%n.length]}return a.domain=function(n){if(!arguments.length)return e.slice();e=[],t=new Map;for(const r of n){const n=r+"";t.has(n)||t.set(n,e.push(r))}return a},a.range=function(t){return arguments.length?(n=Array.from(t),a):n.slice()},a.unknown=function(t){return arguments.length?(r=t,a):r},a.copy=function(){return Fr(e,n).unknown(r)},Tr.apply(a,arguments),a}var _r=t=>()=>t;function Sr(t){return 1==(t=+t)?Er:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):_r(isNaN(e)?n:e)}}function Er(t,e){var n=e-t;return n?function(t,e){return function(n){return t+n*e}}(t,n):_r(isNaN(t)?e:t)}var Br=function t(e){var n=Sr(e);function r(t,e){var r=n((t=ye(t)).r,(e=ye(e)).r),a=n(t.g,e.g),i=n(t.b,e.b),l=Er(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=a(e),t.b=i(e),t.opacity=l(e),t+""}}return r.gamma=t,r}(1);function Nr(t,e){e||(e=[]);var n,r=t?Math.min(e.length,t.length):0,a=e.slice();return function(i){for(n=0;n<r;++n)a[n]=t[n]*(1-i)+e[n]*i;return a}}function Lr(t,e){var n,r=e?e.length:0,a=t?Math.min(r,t.length):0,i=new Array(a),l=new Array(r);for(n=0;n<a;++n)i[n]=Ur(t[n],e[n]);for(;n<r;++n)l[n]=e[n];return function(t){for(n=0;n<a;++n)l[n]=i[n](t);return l}}function Vr(t,e){var n=new Date;return t=+t,e=+e,function(r){return n.setTime(t*(1-r)+e*r),n}}function Ir(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}function Yr(t,e){var n,r={},a={};for(n in null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={}),e)n in t?r[n]=Ur(t[n],e[n]):a[n]=e[n];return function(t){for(n in r)a[n]=r[n](t);return a}}var Pr=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,zr=new RegExp(Pr.source,"g");function Or(t,e){var n,r,a,i=Pr.lastIndex=zr.lastIndex=0,l=-1,o=[],u=[];for(t+="",e+="";(n=Pr.exec(t))&&(r=zr.exec(e));)(a=r.index)>i&&(a=e.slice(i,a),o[l]?o[l]+=a:o[++l]=a),(n=n[0])===(r=r[0])?o[l]?o[l]+=r:o[++l]=r:(o[++l]=null,u.push({i:l,x:Ir(n,r)})),i=zr.lastIndex;return i<e.length&&(a=e.slice(i),o[l]?o[l]+=a:o[++l]=a),o.length<2?u[0]?function(t){return function(e){return t(e)+""}}(u[0].x):function(t){return function(){return t}}(e):(e=u.length,function(t){for(var n,r=0;r<e;++r)o[(n=u[r]).i]=n.x(t);return o.join("")})}function Ur(t,e){var n,r=typeof e;return null==e||"boolean"===r?_r(e):("number"===r?Ir:"string"===r?(n=he(e))?(e=n,Br):Or:e instanceof he?Br:e instanceof Date?Vr:function(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}(e)?Nr:Array.isArray(e)?Lr:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?Yr:Ir)(t,e)}function Rr(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}}function Wr(t){return+t}var $r=[0,1];function Hr(t){return t}function jr(t,e){return(e-=t=+t)?function(n){return(n-t)/e}:function(t){return function(){return t}}(isNaN(e)?NaN:.5)}function Xr(t,e,n){var r=t[0],a=t[1],i=e[0],l=e[1];return a<r?(r=jr(a,r),i=n(l,i)):(r=jr(r,a),i=n(i,l)),function(t){return i(r(t))}}function qr(t,e,n){var r=Math.min(t.length,e.length)-1,a=new Array(r),l=new Array(r),o=-1;for(t[r]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++o<r;)a[o]=jr(t[o],t[o+1]),l[o]=n(e[o],e[o+1]);return function(e){var n=i(t,e,1,r)-1;return l[n](a[n](e))}}function Gr(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function Qr(){var t,e,n,r,a,i,l=$r,o=$r,u=Ur,s=Hr;function f(){var t,e,n,u=Math.min(l.length,o.length);return s!==Hr&&(t=l[0],e=l[u-1],t>e&&(n=t,t=e,e=n),s=function(n){return Math.max(t,Math.min(e,n))}),r=u>2?qr:Xr,a=i=null,c}function c(e){return null==e||isNaN(e=+e)?n:(a||(a=r(l.map(t),o,u)))(t(s(e)))}return c.invert=function(n){return s(e((i||(i=r(o,l.map(t),Ir)))(n)))},c.domain=function(t){return arguments.length?(l=Array.from(t,Wr),f()):l.slice()},c.range=function(t){return arguments.length?(o=Array.from(t),f()):o.slice()},c.rangeRound=function(t){return o=Array.from(t),u=Rr,f()},c.clamp=function(t){return arguments.length?(s=!!t||Hr,f()):s!==Hr},c.interpolate=function(t){return arguments.length?(u=t,f()):u},c.unknown=function(t){return arguments.length?(n=t,c):n},function(n,r){return t=n,e=r,f()}}function Zr(){return Qr()(Hr,Hr)}function Jr(t,e,n,r){var a,i=c(t,e,n);switch((r=dr(null==r?",f":r)).type){case"s":var l=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(a=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(fr(e)/3)))-fr(Math.abs(t)))}(i,l))||(r.precision=a),xr(r,l);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(a=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,fr(e)-fr(t))+1}(i,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=a-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(a=function(t){return Math.max(0,-fr(Math.abs(t)))}(i))||(r.precision=a-2*("%"===r.type))}return wr(r)}function Kr(t){var e=t.domain;return t.ticks=function(t){var n=e();return function(t,e,n){var r,a,i,l,o=-1;if(n=+n,(t=+t)==(e=+e)&&n>0)return[t];if((r=e<t)&&(a=t,t=e,e=a),0===(l=f(t,e,n))||!isFinite(l))return[];if(l>0){let n=Math.round(t/l),r=Math.round(e/l);for(n*l<t&&++n,r*l>e&&--r,i=new Array(a=r-n+1);++o<a;)i[o]=(n+o)*l}else{l=-l;let n=Math.round(t*l),r=Math.round(e*l);for(n/l<t&&++n,r/l>e&&--r,i=new Array(a=r-n+1);++o<a;)i[o]=(n+o)/l}return r&&i.reverse(),i}(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return Jr(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,a,i=e(),l=0,o=i.length-1,u=i[l],s=i[o],c=10;for(s<u&&(a=u,u=s,s=a,a=l,l=o,o=a);c-- >0;){if((a=f(u,s,n))===r)return i[l]=u,i[o]=s,e(i);if(a>0)u=Math.floor(u/a)*a,s=Math.ceil(s/a)*a;else{if(!(a<0))break;u=Math.ceil(u*a)/a,s=Math.floor(s*a)/a}r=a}return t},t}function ta(){var t=Zr();return t.copy=function(){return Gr(t,ta())},Tr.apply(t,arguments),Kr(t)}var ea=new Date,na=new Date;function ra(t,e,n,r){function a(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return a.floor=function(e){return t(e=new Date(+e)),e},a.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},a.round=function(t){var e=a(t),n=a.ceil(t);return t-e<n-t?e:n},a.offset=function(t,n){return e(t=new Date(+t),null==n?1:Math.floor(n)),t},a.range=function(n,r,i){var l,o=[];if(n=a.ceil(n),i=null==i?1:Math.floor(i),!(n<r&&i>0))return o;do{o.push(l=new Date(+n)),e(n,i),t(n)}while(l<n&&n<r);return o},a.filter=function(n){return ra((function(e){if(e>=e)for(;t(e),!n(e);)e.setTime(e-1)}),(function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););}))},n&&(a.count=function(e,r){return ea.setTime(+e),na.setTime(+r),t(ea),t(na),Math.floor(n(ea,na))},a.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?a.filter(r?function(e){return r(e)%t==0}:function(e){return a.count(0,e)%t==0}):a:null}),a}var aa=ra((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));aa.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?ra((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,n){e.setTime(+e+n*t)}),(function(e,n){return(n-e)/t})):aa:null};var ia=ra((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+1e3*e)}),(function(t,e){return(e-t)/1e3}),(function(t){return t.getUTCSeconds()})),la=ra((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds())}),(function(t,e){t.setTime(+t+6e4*e)}),(function(t,e){return(e-t)/6e4}),(function(t){return t.getMinutes()})),oa=ra((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds()-6e4*t.getMinutes())}),(function(t,e){t.setTime(+t+36e5*e)}),(function(t,e){return(e-t)/36e5}),(function(t){return t.getHours()})),ua=ra((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/864e5),(t=>t.getDate()-1));function sa(t){return ra((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/6048e5}))}var fa=sa(0),ca=sa(1);sa(2),sa(3);var ha=sa(4);sa(5),sa(6);var da=ra((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()})),ga=ra((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));ga.every=function(t){return isFinite(t=Math.floor(t))&&t>0?ra((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,n){e.setFullYear(e.getFullYear()+n*t)})):null},ra((function(t){t.setUTCSeconds(0,0)}),(function(t,e){t.setTime(+t+6e4*e)}),(function(t,e){return(e-t)/6e4}),(function(t){return t.getUTCMinutes()})),ra((function(t){t.setUTCMinutes(0,0,0)}),(function(t,e){t.setTime(+t+36e5*e)}),(function(t,e){return(e-t)/36e5}),(function(t){return t.getUTCHours()}));var pa=ra((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/864e5}),(function(t){return t.getUTCDate()-1}));function ya(t){return ra((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/6048e5}))}var ma=ya(0),va=ya(1);ya(2),ya(3);var wa=ya(4);ya(5),ya(6),ra((function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCMonth(t.getUTCMonth()+e)}),(function(t,e){return e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())}),(function(t){return t.getUTCMonth()}));var xa=ra((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));xa.every=function(t){return isFinite(t=Math.floor(t))&&t>0?ra((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null};const[Aa,ba]=function(t,e,n,a,i,l){const o=[[ia,1,1e3],[ia,5,5e3],[ia,15,15e3],[ia,30,3e4],[l,1,6e4],[l,5,3e5],[l,15,9e5],[l,30,18e5],[i,1,36e5],[i,3,108e5],[i,6,216e5],[i,12,432e5],[a,1,864e5],[a,2,1728e5],[n,1,6048e5],[e,1,2592e6],[e,3,7776e6],[t,1,31536e6]];function u(e,n,a){const i=Math.abs(n-e)/a,l=r((([,,t])=>t)).right(o,i);if(l===o.length)return t.every(c(e/31536e6,n/31536e6,a));if(0===l)return aa.every(Math.max(c(e,n,a),1));const[u,s]=o[i/o[l-1][2]<o[l][2]/i?l-1:l];return u.every(s)}return[function(t,e,n){const r=e<t;r&&([t,e]=[e,t]);const a=n&&"function"==typeof n.range?n:u(t,e,n),i=a?a.range(t,+e+1):[];return r?i.reverse():i},u]}(ga,da,fa,ua,oa,la);function Da(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function ka(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Ma(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}var Ta,Ca,Fa={"-":"",_:" ",0:"0"},_a=/^\s*\d+/,Sa=/^%/,Ea=/[\\^$*+?|[\]().{}]/g;function Ba(t,e,n){var r=t<0?"-":"",a=(r?-t:t)+"",i=a.length;return r+(i<n?new Array(n-i+1).join(e)+a:a)}function Na(t){return t.replace(Ea,"\\$&")}function La(t){return new RegExp("^(?:"+t.map(Na).join("|")+")","i")}function Va(t){return new Map(t.map(((t,e)=>[t.toLowerCase(),e])))}function Ia(t,e,n){var r=_a.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function Ya(t,e,n){var r=_a.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function Pa(t,e,n){var r=_a.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function za(t,e,n){var r=_a.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function Oa(t,e,n){var r=_a.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function Ua(t,e,n){var r=_a.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function Ra(t,e,n){var r=_a.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function Wa(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function $a(t,e,n){var r=_a.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function Ha(t,e,n){var r=_a.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function ja(t,e,n){var r=_a.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function Xa(t,e,n){var r=_a.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function qa(t,e,n){var r=_a.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function Ga(t,e,n){var r=_a.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function Qa(t,e,n){var r=_a.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Za(t,e,n){var r=_a.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Ja(t,e,n){var r=_a.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Ka(t,e,n){var r=Sa.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function ti(t,e,n){var r=_a.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function ei(t,e,n){var r=_a.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function ni(t,e){return Ba(t.getDate(),e,2)}function ri(t,e){return Ba(t.getHours(),e,2)}function ai(t,e){return Ba(t.getHours()%12||12,e,2)}function ii(t,e){return Ba(1+ua.count(ga(t),t),e,3)}function li(t,e){return Ba(t.getMilliseconds(),e,3)}function oi(t,e){return li(t,e)+"000"}function ui(t,e){return Ba(t.getMonth()+1,e,2)}function si(t,e){return Ba(t.getMinutes(),e,2)}function fi(t,e){return Ba(t.getSeconds(),e,2)}function ci(t){var e=t.getDay();return 0===e?7:e}function hi(t,e){return Ba(fa.count(ga(t)-1,t),e,2)}function di(t){var e=t.getDay();return e>=4||0===e?ha(t):ha.ceil(t)}function gi(t,e){return t=di(t),Ba(ha.count(ga(t),t)+(4===ga(t).getDay()),e,2)}function pi(t){return t.getDay()}function yi(t,e){return Ba(ca.count(ga(t)-1,t),e,2)}function mi(t,e){return Ba(t.getFullYear()%100,e,2)}function vi(t,e){return Ba((t=di(t)).getFullYear()%100,e,2)}function wi(t,e){return Ba(t.getFullYear()%1e4,e,4)}function xi(t,e){var n=t.getDay();return Ba((t=n>=4||0===n?ha(t):ha.ceil(t)).getFullYear()%1e4,e,4)}function Ai(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Ba(e/60|0,"0",2)+Ba(e%60,"0",2)}function bi(t,e){return Ba(t.getUTCDate(),e,2)}function Di(t,e){return Ba(t.getUTCHours(),e,2)}function ki(t,e){return Ba(t.getUTCHours()%12||12,e,2)}function Mi(t,e){return Ba(1+pa.count(xa(t),t),e,3)}function Ti(t,e){return Ba(t.getUTCMilliseconds(),e,3)}function Ci(t,e){return Ti(t,e)+"000"}function Fi(t,e){return Ba(t.getUTCMonth()+1,e,2)}function _i(t,e){return Ba(t.getUTCMinutes(),e,2)}function Si(t,e){return Ba(t.getUTCSeconds(),e,2)}function Ei(t){var e=t.getUTCDay();return 0===e?7:e}function Bi(t,e){return Ba(ma.count(xa(t)-1,t),e,2)}function Ni(t){var e=t.getUTCDay();return e>=4||0===e?wa(t):wa.ceil(t)}function Li(t,e){return t=Ni(t),Ba(wa.count(xa(t),t)+(4===xa(t).getUTCDay()),e,2)}function Vi(t){return t.getUTCDay()}function Ii(t,e){return Ba(va.count(xa(t)-1,t),e,2)}function Yi(t,e){return Ba(t.getUTCFullYear()%100,e,2)}function Pi(t,e){return Ba((t=Ni(t)).getUTCFullYear()%100,e,2)}function zi(t,e){return Ba(t.getUTCFullYear()%1e4,e,4)}function Oi(t,e){var n=t.getUTCDay();return Ba((t=n>=4||0===n?wa(t):wa.ceil(t)).getUTCFullYear()%1e4,e,4)}function Ui(){return"+0000"}function Ri(){return"%"}function Wi(t){return+t}function $i(t){return Math.floor(+t/1e3)}function Hi(t){return new Date(t)}function ji(t){return t instanceof Date?+t:+new Date(+t)}function Xi(t,e,n,r,a,i,l,o,u,s){var f=Zr(),c=f.invert,h=f.domain,d=s(".%L"),g=s(":%S"),p=s("%I:%M"),y=s("%I %p"),m=s("%a %d"),v=s("%b %d"),w=s("%B"),x=s("%Y");function A(t){return(u(t)<t?d:o(t)<t?g:l(t)<t?p:i(t)<t?y:r(t)<t?a(t)<t?m:v:n(t)<t?w:x)(t)}return f.invert=function(t){return new Date(c(t))},f.domain=function(t){return arguments.length?h(Array.from(t,ji)):h().map(Hi)},f.ticks=function(e){var n=h();return t(n[0],n[n.length-1],null==e?10:e)},f.tickFormat=function(t,e){return null==e?A:s(e)},f.nice=function(t){var n=h();return t&&"function"==typeof t.range||(t=e(n[0],n[n.length-1],null==t?10:t)),t?h(function(t,e){var n,r=0,a=(t=t.slice()).length-1,i=t[r],l=t[a];return l<i&&(n=r,r=a,a=n,n=i,i=l,l=n),t[r]=e.floor(i),t[a]=e.ceil(l),t}(n,t)):f},f.copy=function(){return Gr(f,Xi(t,e,n,r,a,i,l,o,u,s))},f}!function(t){Ta=function(t){var e=t.dateTime,n=t.date,r=t.time,a=t.periods,i=t.days,l=t.shortDays,o=t.months,u=t.shortMonths,s=La(a),f=Va(a),c=La(i),h=Va(i),d=La(l),g=Va(l),p=La(o),y=Va(o),m=La(u),v=Va(u),w={a:function(t){return l[t.getDay()]},A:function(t){return i[t.getDay()]},b:function(t){return u[t.getMonth()]},B:function(t){return o[t.getMonth()]},c:null,d:ni,e:ni,f:oi,g:vi,G:xi,H:ri,I:ai,j:ii,L:li,m:ui,M:si,p:function(t){return a[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:Wi,s:$i,S:fi,u:ci,U:hi,V:gi,w:pi,W:yi,x:null,X:null,y:mi,Y:wi,Z:Ai,"%":Ri},x={a:function(t){return l[t.getUTCDay()]},A:function(t){return i[t.getUTCDay()]},b:function(t){return u[t.getUTCMonth()]},B:function(t){return o[t.getUTCMonth()]},c:null,d:bi,e:bi,f:Ci,g:Pi,G:Oi,H:Di,I:ki,j:Mi,L:Ti,m:Fi,M:_i,p:function(t){return a[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:Wi,s:$i,S:Si,u:Ei,U:Bi,V:Li,w:Vi,W:Ii,x:null,X:null,y:Yi,Y:zi,Z:Ui,"%":Ri},A={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=g.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(t,e,n){var r=c.exec(e.slice(n));return r?(t.w=h.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(t,e,n){var r=m.exec(e.slice(n));return r?(t.m=v.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(t,e,n){var r=p.exec(e.slice(n));return r?(t.m=y.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(t,n,r){return k(t,e,n,r)},d:ja,e:ja,f:Ja,g:Ra,G:Ua,H:qa,I:qa,j:Xa,L:Za,m:Ha,M:Ga,p:function(t,e,n){var r=s.exec(e.slice(n));return r?(t.p=f.get(r[0].toLowerCase()),n+r[0].length):-1},q:$a,Q:ti,s:ei,S:Qa,u:Ya,U:Pa,V:za,w:Ia,W:Oa,x:function(t,e,r){return k(t,n,e,r)},X:function(t,e,n){return k(t,r,e,n)},y:Ra,Y:Ua,Z:Wa,"%":Ka};function b(t,e){return function(n){var r,a,i,l=[],o=-1,u=0,s=t.length;for(n instanceof Date||(n=new Date(+n));++o<s;)37===t.charCodeAt(o)&&(l.push(t.slice(u,o)),null!=(a=Fa[r=t.charAt(++o)])?r=t.charAt(++o):a="e"===r?" ":"0",(i=e[r])&&(r=i(n,a)),l.push(r),u=o+1);return l.push(t.slice(u,o)),l.join("")}}function D(t,e){return function(n){var r,a,i=Ma(1900,void 0,1);if(k(i,t,n+="",0)!=n.length)return null;if("Q"in i)return new Date(i.Q);if("s"in i)return new Date(1e3*i.s+("L"in i?i.L:0));if(e&&!("Z"in i)&&(i.Z=0),"p"in i&&(i.H=i.H%12+12*i.p),void 0===i.m&&(i.m="q"in i?i.q:0),"V"in i){if(i.V<1||i.V>53)return null;"w"in i||(i.w=1),"Z"in i?(a=(r=ka(Ma(i.y,0,1))).getUTCDay(),r=a>4||0===a?va.ceil(r):va(r),r=pa.offset(r,7*(i.V-1)),i.y=r.getUTCFullYear(),i.m=r.getUTCMonth(),i.d=r.getUTCDate()+(i.w+6)%7):(a=(r=Da(Ma(i.y,0,1))).getDay(),r=a>4||0===a?ca.ceil(r):ca(r),r=ua.offset(r,7*(i.V-1)),i.y=r.getFullYear(),i.m=r.getMonth(),i.d=r.getDate()+(i.w+6)%7)}else("W"in i||"U"in i)&&("w"in i||(i.w="u"in i?i.u%7:"W"in i?1:0),a="Z"in i?ka(Ma(i.y,0,1)).getUTCDay():Da(Ma(i.y,0,1)).getDay(),i.m=0,i.d="W"in i?(i.w+6)%7+7*i.W-(a+5)%7:i.w+7*i.U-(a+6)%7);return"Z"in i?(i.H+=i.Z/100|0,i.M+=i.Z%100,ka(i)):Da(i)}}function k(t,e,n,r){for(var a,i,l=0,o=e.length,u=n.length;l<o;){if(r>=u)return-1;if(37===(a=e.charCodeAt(l++))){if(a=e.charAt(l++),!(i=A[a in Fa?e.charAt(l++):a])||(r=i(t,n,r))<0)return-1}else if(a!=n.charCodeAt(r++))return-1}return r}return w.x=b(n,w),w.X=b(r,w),w.c=b(e,w),x.x=b(n,x),x.X=b(r,x),x.c=b(e,x),{format:function(t){var e=b(t+="",w);return e.toString=function(){return t},e},parse:function(t){var e=D(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=b(t+="",x);return e.toString=function(){return t},e},utcParse:function(t){var e=D(t+="",!0);return e.toString=function(){return t},e}}}(t),Ca=Ta.format}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var qi,Gi=(qi=function(t){var e=t.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),a=t[r],i=t[r+1],l=r>0?t[r-1]:2*a-i,o=r<e-1?t[r+2]:2*i-a;return function(t,e,n,r,a){var i=t*t,l=i*t;return((1-3*t+3*i-l)*e+(4-6*i+3*l)*n+(1+3*t+3*i-3*l)*r+l*a)/6}((n-r/e)*e,l,a,i,o)}},function(t){var e,n,r=t.length,a=new Array(r),i=new Array(r),l=new Array(r);for(e=0;e<r;++e)n=ye(t[e]),a[e]=n.r||0,i[e]=n.g||0,l[e]=n.b||0;return a=qi(a),i=qi(i),l=qi(l),n.opacity=1,function(t){return n.r=a(t),n.g=i(t),n.b=l(t),n+""}}),Qi=new Array(3).concat("fc8d59ffffbf99d594","d7191cfdae61abdda42b83ba","d7191cfdae61ffffbfabdda42b83ba","d53e4ffc8d59fee08be6f59899d5943288bd","d53e4ffc8d59fee08bffffbfe6f59899d5943288bd","d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd","d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd","9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2","9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2").map((function(t){for(var e=t.length/6|0,n=new Array(e),r=0;r<e;)n[r]="#"+t.slice(6*r,6*++r);return n}));function Zi(t){return function(){return t}}(t=>{Gi(t[t.length-1])})(Qi);var Ji,Ki,tl,el=Math.abs,nl=Math.atan2,rl=Math.cos,al=Math.max,il=Math.min,ll=Math.sin,ol=Math.sqrt,ul=Math.PI,sl=ul/2,fl=2*ul;function cl(t){return t>1?0:t<-1?ul:Math.acos(t)}function hl(t){return t>=1?sl:t<=-1?-sl:Math.asin(t)}function dl(t){return t.innerRadius}function gl(t){return t.outerRadius}function pl(t){return t.startAngle}function yl(t){return t.endAngle}function ml(t){return t&&t.padAngle}function vl(t,e,n,r,a,i,l,o){var u=n-t,s=r-e,f=l-a,c=o-i,h=c*u-f*s;if(!(h*h<1e-12))return[t+(h=(f*(e-i)-c*(t-a))/h)*u,e+h*s]}function wl(t,e,n,r,a,i,l){var o=t-n,u=e-r,s=(l?i:-i)/ol(o*o+u*u),f=s*u,c=-s*o,h=t+f,d=e+c,g=n+f,p=r+c,y=(h+g)/2,m=(d+p)/2,v=g-h,w=p-d,x=v*v+w*w,A=a-i,b=h*p-g*d,D=(w<0?-1:1)*ol(al(0,A*A*x-b*b)),k=(b*w-v*D)/x,M=(-b*v-w*D)/x,T=(b*w+v*D)/x,C=(-b*v+w*D)/x,F=k-y,_=M-m,S=T-y,E=C-m;return F*F+_*_>S*S+E*E&&(k=T,M=C),{cx:k,cy:M,x01:-f,y01:-c,x11:k*(a/A-1),y11:M*(a/A-1)}}function xl(){var t=dl,e=gl,n=Zi(0),r=null,a=pl,i=yl,l=ml,o=null;function u(){var u,s,f=+t.apply(this,arguments),c=+e.apply(this,arguments),h=a.apply(this,arguments)-sl,d=i.apply(this,arguments)-sl,g=el(d-h),p=d>h;if(o||(o=u=ur()),c<f&&(s=c,c=f,f=s),c>1e-12)if(g>fl-1e-12)o.moveTo(c*rl(h),c*ll(h)),o.arc(0,0,c,h,d,!p),f>1e-12&&(o.moveTo(f*rl(d),f*ll(d)),o.arc(0,0,f,d,h,p));else{var y,m,v=h,w=d,x=h,A=d,b=g,D=g,k=l.apply(this,arguments)/2,M=k>1e-12&&(r?+r.apply(this,arguments):ol(f*f+c*c)),T=il(el(c-f)/2,+n.apply(this,arguments)),C=T,F=T;if(M>1e-12){var _=hl(M/f*ll(k)),S=hl(M/c*ll(k));(b-=2*_)>1e-12?(x+=_*=p?1:-1,A-=_):(b=0,x=A=(h+d)/2),(D-=2*S)>1e-12?(v+=S*=p?1:-1,w-=S):(D=0,v=w=(h+d)/2)}var E=c*rl(v),B=c*ll(v),N=f*rl(A),L=f*ll(A);if(T>1e-12){var V,I=c*rl(w),Y=c*ll(w),P=f*rl(x),z=f*ll(x);if(g<ul&&(V=vl(E,B,P,z,I,Y,N,L))){var O=E-V[0],U=B-V[1],R=I-V[0],W=Y-V[1],$=1/ll(cl((O*R+U*W)/(ol(O*O+U*U)*ol(R*R+W*W)))/2),H=ol(V[0]*V[0]+V[1]*V[1]);C=il(T,(f-H)/($-1)),F=il(T,(c-H)/($+1))}}D>1e-12?F>1e-12?(y=wl(P,z,E,B,c,F,p),m=wl(I,Y,N,L,c,F,p),o.moveTo(y.cx+y.x01,y.cy+y.y01),F<T?o.arc(y.cx,y.cy,F,nl(y.y01,y.x01),nl(m.y01,m.x01),!p):(o.arc(y.cx,y.cy,F,nl(y.y01,y.x01),nl(y.y11,y.x11),!p),o.arc(0,0,c,nl(y.cy+y.y11,y.cx+y.x11),nl(m.cy+m.y11,m.cx+m.x11),!p),o.arc(m.cx,m.cy,F,nl(m.y11,m.x11),nl(m.y01,m.x01),!p))):(o.moveTo(E,B),o.arc(0,0,c,v,w,!p)):o.moveTo(E,B),f>1e-12&&b>1e-12?C>1e-12?(y=wl(N,L,I,Y,f,-C,p),m=wl(E,B,P,z,f,-C,p),o.lineTo(y.cx+y.x01,y.cy+y.y01),C<T?o.arc(y.cx,y.cy,C,nl(y.y01,y.x01),nl(m.y01,m.x01),!p):(o.arc(y.cx,y.cy,C,nl(y.y01,y.x01),nl(y.y11,y.x11),!p),o.arc(0,0,f,nl(y.cy+y.y11,y.cx+y.x11),nl(m.cy+m.y11,m.cx+m.x11),p),o.arc(m.cx,m.cy,C,nl(m.y11,m.x11),nl(m.y01,m.x01),!p))):o.arc(0,0,f,A,x,p):o.lineTo(N,L)}else o.moveTo(0,0);if(o.closePath(),u)return o=null,u+""||null}return u.centroid=function(){var n=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+a.apply(this,arguments)+ +i.apply(this,arguments))/2-ul/2;return[rl(r)*n,ll(r)*n]},u.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:Zi(+e),u):t},u.outerRadius=function(t){return arguments.length?(e="function"==typeof t?t:Zi(+t),u):e},u.cornerRadius=function(t){return arguments.length?(n="function"==typeof t?t:Zi(+t),u):n},u.padRadius=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:Zi(+t),u):r},u.startAngle=function(t){return arguments.length?(a="function"==typeof t?t:Zi(+t),u):a},u.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:Zi(+t),u):i},u.padAngle=function(t){return arguments.length?(l="function"==typeof t?t:Zi(+t),u):l},u.context=function(t){return arguments.length?(o=null==t?null:t,u):o},u}function Al(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function bl(t){this._context=t}function Dl(t){return new bl(t)}function kl(t){return t[0]}function Ml(t){return t[1]}function Tl(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function Cl(t){return t}bl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}},function(t){t[t.Tag=0]="Tag",t[t.Frontmatter=1]="Frontmatter",t[t.Wiki=2]="Wiki",t[t.WikiLink=3]="WikiLink",t[t.WikiDisplay=4]="WikiDisplay",t[t.Text=5]="Text",t[t.dvField=6]="dvField",t[t.Table=7]="Table",t[t.FileMeta=8]="FileMeta",t[t.Task=9]="Task",t[t.TaskDone=10]="TaskDone",t[t.TaskNotDone=11]="TaskNotDone"}(Ji||(Ji={})),function(t){t[t.Line=0]="Line",t[t.Bar=1]="Bar",t[t.Pie=2]="Pie",t[t.Radar=3]="Radar",t[t.Summary=4]="Summary",t[t.Table=5]="Table",t[t.Month=6]="Month",t[t.Heatmap=7]="Heatmap",t[t.Bullet=8]="Bullet",t[t.Unknown=9]="Unknown"}(Ki||(Ki={})),function(t){t[t.Number=0]="Number",t[t.Int=1]="Int",t[t.Date=2]="Date",t[t.Time=3]="Time",t[t.DateTime=4]="DateTime",t[t.String=5]="String"}(tl||(tl={}));class Fl{constructor(t,e){this.date=t,this.value=e}}class _l{constructor(t,e,n){if(this.type=e,this.target=n,this.separator="",this.id=t,this.accessor=-1,this.accessor1=-1,this.accessor2=-1,this.valueType=tl.Number,this.usedAsXDataset=!1,this.numTargets=0,e===Ji.Table){let t,e=new RegExp("\\[(?<accessor>[0-9]+)\\]\\[(?<accessor1>[0-9]+)\\](\\[(?<accessor2>[0-9]+)\\])?","gm");for(;t=e.exec(n);)if(void 0!==t.groups.accessor){let r=parseFloat(t.groups.accessor);if(Number.isNumber(r)&&void 0!==t.groups.accessor1){let a=parseFloat(t.groups.accessor1);if(Number.isNumber(a)){let i;void 0!==t.groups.accessor2&&(i=parseFloat(t.groups.accessor2)),this.accessor=r,this.accessor1=a,Number.isNumber(i)&&(this.accessor2=i),this.parentTarget=n.replace(e,"")}break}}}else{let t,e=new RegExp("\\[(?<accessor>[0-9]+)\\]","gm");for(;t=e.exec(n);)if(void 0!==t.groups.accessor){let r=parseFloat(t.groups.accessor);Number.isNumber(r)&&(this.accessor=r,this.parentTarget=n.replace(e,""));break}}}equalTo(t){return this.type===t.type&&this.target===t.target}getType(){return this.type}getTarget(){return this.target}getParentTarget(){return this.parentTarget}getId(){return this.id}getAccessor(t=0){switch(t){case 0:return this.accessor;case 1:return this.accessor1;case 2:return this.accessor2}return null}setSeparator(t){this.separator=t}getSeparator(t=!1){return""===this.separator?t?",":"/":this.separator}addNumTargets(t=1){this.numTargets=this.numTargets+t}getNumTargets(){return this.numTargets}}class Sl{constructor(t,e){this.currentIndex=0,this.name="untitled",this.query=e,this.values=[],this.parent=t,this.id=-1,this.yMin=null,this.yMax=null,this.startDate=null,this.endDate=null,this.numTargets=0,this.lineInfo=null,this.barInfo=null,this.isTmpDataset=!1,this.valueType=null==e?void 0:e.valueType;for(let e=0;e<t.getDates().length;e++)this.values.push(null)}cloneToTmpDataset(){if(!this.isTmpDataset){let t=new Sl(this.parent,null);return t.name="tmp",t.values=[...this.values],t.yMin=this.yMin,t.yMax=this.yMax,t.startDate=this.startDate.clone(),t.endDate=this.endDate.clone(),t.numTargets=this.numTargets,t.isTmpDataset=!0,t.valueType=this.valueType,t}return this}getName(){return this.name}setName(t){this.name=t}getId(){return this.id}setId(t){this.id=t}addNumTargets(t){this.numTargets=this.numTargets+t}getNumTargets(){return this.numTargets}getValue(t,e=0){let n=this.parent.getIndexOfDate(t)+Math.floor(e);return n>=0&&n<this.values.length?this.values[n]:null}setValue(t,e){let n=this.parent.getIndexOfDate(t);n>=0&&n<this.values.length&&(this.values[n]=e,(null===this.yMin||e<this.yMin)&&(this.yMin=e),(null===this.yMax||e>this.yMax)&&(this.yMax=e),(null===this.startDate||t<this.startDate)&&(this.startDate=t.clone()),(null===this.endDate||t>this.endDate)&&(this.endDate=t.clone()))}recalculateMinMax(){this.yMin=Math.min(...this.values),this.yMax=Math.max(...this.values)}getYMin(){return this.yMin}getYMax(){return this.yMax}getStartDate(){return this.startDate}getEndDate(){return this.endDate}shift(t,e){let n=!1;for(let r=0;r<this.values.length;r++)null!==this.values[r]&&(null===e||this.values[r]>=e)&&(this.values[r]=this.values[r]+t,n=!0);n&&(this.yMin=this.yMin+t,this.yMax=this.yMax+t)}setPenalty(t){for(let e=0;e<this.values.length;e++)null===this.values[e]&&(this.values[e]=t,t<this.yMin&&(this.yMin=t),t>this.yMax&&(this.yMax=t))}getQuery(){return this.query}accumulateValues(){let t=0;for(let e=0;e<this.values.length;e++)null!==this.values[e]&&(t+=this.values[e]),this.values[e]=t,t<this.yMin&&(this.yMin=t),t>this.yMax&&(this.yMax=t)}getValues(){return this.values}getLength(){return this.values.length}getLengthNotNull(){let t=0;for(let e=0;e<this.values.length;e++)null!==this.values[e]&&t++;return t}next(){if(this.currentIndex<this.values.length){let t=this.currentIndex++;return{done:!1,value:new Fl(this.parent.getDates()[t],this.values[t])}}return this.currentIndex=0,{done:!0,value:null}}[Symbol.iterator](){return this}}class El{constructor(t,e){this.currentIndex=0,this.dates=[],this.datasets=[];const n=t.creationData().format.toString();for(let r=t.clone();r<=e;r.add(1,"days")){let t=window.moment(r.format(n),n,!0);this.dates.push(t)}}createDataset(t,e){let n=new Sl(this,t);return n.setId(t.getId()),e&&n.setName(e.datasetName[t.getId()]),this.datasets.push(n),n}getIndexOfDate(t){const e=t.creationData().format.toString();for(let n=0;n<this.dates.length;n++)if(this.dates[n].format(e)===t.format(e))return n;return-1}getDatasetByQuery(t){for(let e of this.datasets)if(e.getQuery().equalTo(t))return e;return null}getDatasetById(t){for(let e of this.datasets)if(e.getId()===t)return e;return null}getXDatasetIds(){let t=[];for(let e of this.datasets)if(e.getQuery().usedAsXDataset){let n=e.getQuery().getId();t.includes(n)||-1===n||t.push(n)}return t}getDates(){return this.dates}getNames(){let t=[];for(let e of this.datasets)t.push(e.getName());return t}next(){return this.currentIndex<this.datasets.length?{done:!1,value:this.datasets[this.currentIndex++]}:(this.currentIndex=0,{done:!0,value:null})}[Symbol.iterator](){return this}}class Bl{constructor(t){this.queries=t,this.xDataset=[],this.folder="/",this.file=[],this.specifiedFilesOnly=!1,this.fileContainsLinkedFiles=[],this.fileMultiplierAfterLink="",this.dateFormat="YYYY-MM-DD",this.dateFormatPrefix="",this.dateFormatSuffix="",this.startDate=null,this.endDate=null,this.datasetName=[],this.constValue=[1],this.ignoreAttachedValue=[],this.ignoreZeroValue=[],this.accum=[],this.penalty=[],this.valueShift=[],this.shiftOnlyValueLargerThan=[],this.valueType=[],this.textValueMap={},this.dataAreaSize=new Rl(300,300),this.margin=new Wl(10,10,10,10),this.fixedScale=1,this.fitPanelWidth=!1,this.output=[],this.line=[],this.bar=[],this.pie=[],this.summary=[],this.month=[],this.heatmap=[],this.bullet=[],this.customDataset=[],this.datasets=null}getQueryById(t){for(let e of this.queries)if(e.getId()===t)return e}}class Nl{constructor(){this.id=-1,this.name="",this.xData=[],this.yData=[]}}class Ll{constructor(){this.title="",this.xAxisLabel="Date",this.xAxisColor="",this.xAxisLabelColor="",this.yAxisLabel=[],this.yAxisColor=[],this.yAxisLabelColor=[],this.yAxisUnit=[],this.xAxisTickInterval=null,this.yAxisTickInterval=[],this.xAxisTickLabelFormat=null,this.yAxisTickLabelFormat=[],this.yMin=[],this.yMax=[],this.reverseYAxis=[],this.allowInspectData=!0,this.showLegend=!1,this.legendPosition="",this.legendOrientation="",this.legendBgColor="",this.legendBorderColor=""}GetGraphType(){return Ki.Unknown}}class Vl extends Ll{constructor(){super(),this.lineColor=[],this.lineWidth=[],this.showLine=[],this.showPoint=[],this.pointColor=[],this.pointBorderColor=[],this.pointBorderWidth=[],this.pointSize=[],this.fillGap=[],this.yAxisLocation=[]}GetGraphType(){return Ki.Line}}class Il extends Ll{constructor(){super(),this.barColor=[],this.yAxisLocation=[]}GetGraphType(){return Ki.Bar}}class Yl{constructor(){this.title="",this.data=[],this.dataColor=[],this.dataName=[],this.label=[],this.hideLabelLessThan=.03,this.extLabel=[],this.showExtLabelOnlyIfNoLabel=!1,this.ratioInnerRadius=0,this.showLegend=!1,this.legendPosition="",this.legendOrientation="",this.legendBgColor="",this.legendBorderColor=""}GetGraphType(){return Ki.Pie}}class Pl{constructor(){this.template="",this.style=""}GetGraphType(){return Ki.Summary}}class zl{constructor(){this.mode="circle",this.dataset=[],this.startWeekOn="Sun",this.threshold=[],this.yMin=[],this.yMax=[],this.color=null,this.dimNotInMonth=!0,this.initMonth="",this.showSelectedValue=!0,this.headerYearColor=null,this.headerMonthColor=null,this.dividingLineColor=null,this.showCircle=!0,this.showStreak=!0,this.showTodayRing=!0,this.showSelectedRing=!0,this.circleColor=null,this.circleColorByValue=!1,this.todayRingColor="",this.selectedRingColor="firebrick",this.showAnnotation=!0,this.annotation=[],this.showAnnotationOfAllTargets=!0,this.selectedDate="",this.selectedDataset=null}GetGraphType(){return Ki.Month}}class Ol{constructor(){this.dataset="0",this.startWeekOn="Sun",this.orientation="vertical",this.yMin=null,this.yMax=null,this.color=null}GetGraphType(){return Ki.Heatmap}}class Ul{constructor(){this.title="",this.dataset="0",this.orientation="horizontal",this.value="",this.valueUnit="",this.valueColor="#69b3a2",this.range=[],this.rangeColor=[],this.showMarker=!1,this.markerValue=0,this.markerColor=""}GetGraphType(){return Ki.Bullet}}class Rl{constructor(t,e){this.width=t,this.height=e}}class Wl{constructor(t,e,n,r){this.top=t,this.right=e,this.bottom=n,this.left=r}}class $l{constructor(t){if(this.translateX=0,this.translateY=0,"string"==typeof t){let e=t.match(/translate\(\s*(?<x>[\d\.\/-]+)\s*,\s*(?<y>[\d\.\/-]+)\s*\)/).groups;e&&(this.translateX=parseFloat(e.x),this.translateY=parseFloat(e.y))}}}class Hl{constructor(t,e){this.filePath=t,this.tableIndex=e,this.xDataset=null,this.yDatasets=[]}}class jl{constructor(){this.fileTotal=0,this.fileAvailable=0,this.fileOutOfDateRange=0,this.fileNotInFormat=0,this.errorMessage="",this.minDate=window.moment(""),this.maxDate=window.moment(""),this.gotAnyValidXValue=!1,this.gotAnyValidYValue=!1}}const Xl=function(){const t=["HH","H","hh","h"],e=["mm","m"],n=["ss","s",""];let r=[];for(let a of t)for(let t of e)for(let e of n){let n=`${a}:${t}`;""!==e&&(n+=`:${e}`),a.contains("h")&&(n+=" a"),r.push(n)}return r}();function ql(t,e,n){if(!e&&!n)return t;let r=t;if(r.startsWith("^")&&(r=r.slice(1)),e){let t=new RegExp("^("+e+")","gm");t.test(r)&&(r=r.replace(t,""))}if(n){let t=new RegExp("("+n+")$","gm");t.test(r)&&(r=r.replace(t,""))}return r}function Gl(t,e){let n=e;t.length>4&&t.startsWith("[[")&&t.endsWith("]]")&&(t=t.substring(2,t.length-2)),"iso-8601"===e.toLowerCase()&&(n=window.moment.ISO_8601);let r=window.moment(t,n,!0);return r=r.startOf("day"),r}function Ql(t,e,n=!0){if(!t||!e||0===e.length)return[null,t];let r=null;const a="^(?<value>[0-9]+)("+e.join("|")+")$",i=new RegExp(a,"gm");let l=i.exec(t);return l&&void 0!==l.groups&&void 0!==l.groups.value&&(r=parseFloat(l.groups.value),Number.isNumber(r)&&!Number.isNaN(r))?(n&&(t=t.replace(i,"")),[r,t]):[null,t]}function Zl(t){if(!t)return null;let e=window.moment.duration(0),n=!1,r=!1;t.startsWith("+")&&(r=!1,t=t.substring(1)),t.startsWith("-")&&(r=!0,t=t.substring(1));let a=null;[a,t]=Ql(t,["year","years","Y","y"]),null!==a&&(r&&(a*=-1),e.add(a,"years"),n=!0);let i=null;[i,t]=Ql(t,["month","months","M"]),null!==i&&(r&&(i*=-1),e.add(i,"months"),n=!0);let l=null;[l,t]=Ql(t,["week","weeks","W","w"]),null!==l&&(r&&(l*=-1),e.add(l,"weeks"),n=!0);let o=null;[o,t]=Ql(t,["day","days","D","d"]),null!==o&&(r&&(o*=-1),e.add(o,"days"),n=!0);let u=null;[u,t]=Ql(t,["hour","hours","H","h"]),null!==u&&(r&&(u*=-1),e.add(u,"hours"),n=!0);let s=null;[s,t]=Ql(t,["minute","minutes","m"]),null!==s&&(r&&(s*=-1),e.add(s,"minutes"),n=!0);let f=null;return[f,t]=Ql(t,["second","seconds","S","s"]),null!==f&&(r&&(f*=-1),e.add(f,"seconds"),n=!0),n?e:null}function Jl(t,e){let n=null,r=Zl(t);return r&&window.moment.isDuration(r)&&(n=eo(e),n=n.add(r),n&&n.isValid()),n}function Kl(t,e){return null==t?null:"iso-8601"===e.toLowerCase()?t.format():t.format(e)}function to(t,e){return Gl(Kl(window.moment(t),e),e)}function eo(t){return Gl(Kl(window.moment(),t),t)}function no(t,e){for(var n=(e=e.replace(/^\./,"")).split("."),r=0,a=n.length;r<a;++r){var i=n[r];if(!(i in t))return null;t=t[i]}return"string"==typeof t||Array.isArray(t)?t:"number"==typeof t?t.toString():null}function ro(t,e){const n=Array.from(t),r=n.findIndex((t=>t!==e)),a=n.reverse().findIndex((t=>t!==e));return-1===r&&-1===a?t:t.substring(r,t.length-a)}function ao(t){if(null===t)return null;let e=new RegExp('<img[^>]*?alt\\s*=\\s*[""\']?(?<emoji>[^\'"" >]+?)[ \'""][^>]*?>',"g");return t.replace(e,((...t)=>{let e=t[t.length-1];return e&&e.emoji?e.emoji.trim():""}))}function io(t,e=null){let n=null,r=tl.Number;if("string"==typeof t)if(t.includes(":")){let e=!1;t.startsWith("-")&&(e=!0,t=t.substring(1));let a=window.moment(t,Xl,!0);a.isValid()&&(n=a.diff(window.moment("00:00","HH:mm",!0),"seconds"),e&&(n*=-1),r=tl.Time)}else if(e){const r=Object.keys(e);for(let n of r)if("string"==typeof n){let r=new RegExp(n,"gm");if(r.test(t)&&Number.isNumber(e[n])){let a=e[n].toString();t=t.replace(r,a);break}}n=parseFloat(t),Number.isNaN(n)&&(n=null)}else n=parseFloat(t),Number.isNaN(n)&&(n=null);else"number"==typeof t&&(n=t);return{type:r,value:n}}function lo(t,e="",n=""){var r=qt("body").append("svg");let a=r.append("text").text(t).attr("x",-99999).attr("y",-99999);e&&a.attr("class",e),n&&a.attr("transform","rotate("+n+")");var i=r.node().getBBox();return r.remove(),{width:i.width,height:i.height}}function oo(t,e,n){let r=(0|parseFloat(t.attr("width")))+e,a=(0|parseFloat(t.attr("height")))+n;t.attr("width",r),t.attr("height",a)}function uo(t,e,n){let r=new $l(t.attr("transform"));t.attr("transform","translate("+(r.translateX+e)+","+(r.translateY+n)+")")}function so(t){return t=(t=(t=t.replace(/(^\\s\*)|(\\s\*$)/gi,"")).replace(/\[ \]{2,}/gi," ")).replace(/\\n /,"\\n")}var fo=l((function(t,e){!function(n){var r="Compound",a="MemberExpression",i="Literal",l=function(t,e){var n=new Error(t+" at character "+e);throw n.index=e,n.description=t,n},o=!0,u={"-":o,"!":o,"~":o,"+":o},s={"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10},f={$:o,_:o},c=function(t){var e,n=0;for(var r in t)(e=r.length)>n&&t.hasOwnProperty(r)&&(n=e);return n},h=c(u),d=c(s),g={true:!0,false:!1,null:null},p=function(t){return s[t]||0},y=function(t,e,n){return{type:"||"===t||"&&"===t?"LogicalExpression":"BinaryExpression",operator:t,left:e,right:n}},m=function(t){return t>=48&&t<=57},v=function(t){return t>=65&&t<=90||t>=97&&t<=122||t>=128&&!s[String.fromCharCode(t)]||f.hasOwnProperty(String.fromCharCode(t))},w=function(t){return t>=65&&t<=90||t>=97&&t<=122||t>=48&&t<=57||t>=128&&!s[String.fromCharCode(t)]||f.hasOwnProperty(String.fromCharCode(t))},x=function(t){for(var e,n,o=0,f=t.charAt,c=t.charCodeAt,x=function(e){return f.call(t,e)},A=function(e){return c.call(t,e)},b=t.length,D=function(){for(var t=A(o);32===t||9===t||10===t||13===t;)t=A(++o)},k=function(){var t,e,n=T();return D(),63!==A(o)?n:(o++,(t=k())||l("Expected expression",o),D(),58===A(o)?(o++,(e=k())||l("Expected expression",o),{type:"ConditionalExpression",test:n,consequent:t,alternate:e}):void l("Expected :",o))},M=function(){D();for(var e=t.substr(o,d),n=e.length;n>0;){if(s.hasOwnProperty(e)&&(!v(A(o))||o+e.length<t.length&&!w(A(o+e.length))))return o+=n,e;e=e.substr(0,--n)}return!1},T=function(){var t,e,n,r,a,i,u,s,f;if(i=C(),!(e=M()))return i;for(a={value:e,prec:p(e)},(u=C())||l("Expected expression after "+e,o),r=[i,a,u];(e=M())&&0!==(n=p(e));){for(a={value:e,prec:n},f=e;r.length>2&&n<=r[r.length-2].prec;)u=r.pop(),e=r.pop().value,i=r.pop(),t=y(e,i,u),r.push(t);(t=C())||l("Expected expression after "+f,o),r.push(a,t)}for(t=r[s=r.length-1];s>1;)t=y(r[s-1].value,r[s-2],t),s-=2;return t},C=function(){var e,n,r,i;if(D(),e=A(o),m(e)||46===e)return F();if(39===e||34===e)i=_();else if(91===e)i=N();else{for(r=(n=t.substr(o,h)).length;r>0;){if(u.hasOwnProperty(n)&&(!v(A(o))||o+n.length<t.length&&!w(A(o+n.length))))return o+=r,{type:"UnaryExpression",operator:n,argument:C(),prefix:!0};n=n.substr(0,--r)}v(e)?i=S():40===e&&(i=B())}if(!i)return!1;for(D(),e=A(o);46===e||91===e||40===e;)o++,46===e?(D(),i={type:a,computed:!1,object:i,property:S()}):91===e?(i={type:a,computed:!0,object:i,property:k()},D(),93!==(e=A(o))&&l("Unclosed [",o),o++):40===e&&(i={type:"CallExpression",arguments:E(41),callee:i}),D(),e=A(o);return i},F=function(){for(var t,e,n="";m(A(o));)n+=x(o++);if(46===A(o))for(n+=x(o++);m(A(o));)n+=x(o++);if("e"===(t=x(o))||"E"===t){for(n+=x(o++),"+"!==(t=x(o))&&"-"!==t||(n+=x(o++));m(A(o));)n+=x(o++);m(A(o-1))||l("Expected exponent ("+n+x(o)+")",o)}return e=A(o),v(e)?l("Variable names cannot start with a number ("+n+x(o)+")",o):46===e&&l("Unexpected period",o),{type:i,value:parseFloat(n),raw:n}},_=function(){for(var t,e="",n=x(o++),r=!1;o<b;){if((t=x(o++))===n){r=!0;break}if("\\"===t)switch(t=x(o++)){case"n":e+="\n";break;case"r":e+="\r";break;case"t":e+="\t";break;case"b":e+="\b";break;case"f":e+="\f";break;case"v":e+="\v";break;default:e+=t}else e+=t}return r||l('Unclosed quote after "'+e+'"',o),{type:i,value:e,raw:n+e+n}},S=function(){var e,n=A(o),r=o;for(v(n)?o++:l("Unexpected "+x(o),o);o<b&&(n=A(o),w(n));)o++;return e=t.slice(r,o),g.hasOwnProperty(e)?{type:i,value:g[e],raw:e}:"this"===e?{type:"ThisExpression"}:{type:"Identifier",name:e}},E=function(t){for(var e,n,a=[],i=!1,u=0;o<b;){if(D(),(e=A(o))===t){i=!0,o++,41===t&&u&&u>=a.length&&l("Unexpected token "+String.fromCharCode(t),o);break}if(44===e){if(o++,++u!==a.length)if(41===t)l("Unexpected token ,",o);else if(93===t)for(var s=a.length;s<u;s++)a.push(null)}else(n=k())&&n.type!==r||l("Expected comma",o),a.push(n)}return i||l("Expected "+String.fromCharCode(t),o),a},B=function(){o++;var t=k();if(D(),41===A(o))return o++,t;l("Unclosed (",o)},N=function(){return o++,{type:"ArrayExpression",elements:E(93)}},L=[];o<b;)59===(e=A(o))||44===e?o++:(n=k())?L.push(n):o<b&&l('Unexpected "'+x(o)+'"',o);return 1===L.length?L[0]:{type:r,body:L}};x.version="0.4.0",x.toString=function(){return"JavaScript Expression Parser (JSEP) v"+x.version},x.addUnaryOp=function(t){return h=Math.max(t.length,h),u[t]=o,this},x.addBinaryOp=function(t,e){return d=Math.max(t.length,d),s[t]=e,this},x.addIdentifierChar=function(t){return f[t]=o,this},x.addLiteral=function(t,e){return g[t]=e,this},x.removeUnaryOp=function(t){return delete u[t],t.length===h&&(h=c(u)),this},x.removeAllUnaryOps=function(){return u={},h=0,this},x.removeIdentifierChar=function(t){return delete f[t],this},x.removeBinaryOp=function(t){return delete s[t],t.length===d&&(d=c(s)),this},x.removeAllBinaryOps=function(){return s={},d=0,this},x.removeLiteral=function(t){return delete g[t],this},x.removeAllLiterals=function(){return g={},this},t.exports?e=t.exports=x:e.parse=x}()})),co=l((function(t,e){!function(){var t={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[+-]/};function n(t){return a(l(t),arguments)}function r(t,e){return n.apply(null,[t].concat(e||[]))}function a(e,r){var a,i,l,o,u,s,f,c,h,d=1,g=e.length,p="";for(i=0;i<g;i++)if("string"==typeof e[i])p+=e[i];else if("object"==typeof e[i]){if((o=e[i]).keys)for(a=r[d],l=0;l<o.keys.length;l++){if(null==a)throw new Error(n('[sprintf] Cannot access property "%s" of undefined value "%s"',o.keys[l],o.keys[l-1]));a=a[o.keys[l]]}else a=o.param_no?r[o.param_no]:r[d++];if(t.not_type.test(o.type)&&t.not_primitive.test(o.type)&&a instanceof Function&&(a=a()),t.numeric_arg.test(o.type)&&"number"!=typeof a&&isNaN(a))throw new TypeError(n("[sprintf] expecting number but found %T",a));switch(t.number.test(o.type)&&(c=a>=0),o.type){case"b":a=parseInt(a,10).toString(2);break;case"c":a=String.fromCharCode(parseInt(a,10));break;case"d":case"i":a=parseInt(a,10);break;case"j":a=JSON.stringify(a,null,o.width?parseInt(o.width):0);break;case"e":a=o.precision?parseFloat(a).toExponential(o.precision):parseFloat(a).toExponential();break;case"f":a=o.precision?parseFloat(a).toFixed(o.precision):parseFloat(a);break;case"g":a=o.precision?String(Number(a.toPrecision(o.precision))):parseFloat(a);break;case"o":a=(parseInt(a,10)>>>0).toString(8);break;case"s":a=String(a),a=o.precision?a.substring(0,o.precision):a;break;case"t":a=String(!!a),a=o.precision?a.substring(0,o.precision):a;break;case"T":a=Object.prototype.toString.call(a).slice(8,-1).toLowerCase(),a=o.precision?a.substring(0,o.precision):a;break;case"u":a=parseInt(a,10)>>>0;break;case"v":a=a.valueOf(),a=o.precision?a.substring(0,o.precision):a;break;case"x":a=(parseInt(a,10)>>>0).toString(16);break;case"X":a=(parseInt(a,10)>>>0).toString(16).toUpperCase()}t.json.test(o.type)?p+=a:(!t.number.test(o.type)||c&&!o.sign?h="":(h=c?"+":"-",a=a.toString().replace(t.sign,"")),s=o.pad_char?"0"===o.pad_char?"0":o.pad_char.charAt(1):" ",f=o.width-(h+a).length,u=o.width&&f>0?s.repeat(f):"",p+=o.align?h+a+u:"0"===s?h+u+a:u+h+a)}return p}var i=Object.create(null);function l(e){if(i[e])return i[e];for(var n,r=e,a=[],l=0;r;){if(null!==(n=t.text.exec(r)))a.push(n[0]);else if(null!==(n=t.modulo.exec(r)))a.push("%");else{if(null===(n=t.placeholder.exec(r)))throw new SyntaxError("[sprintf] unexpected placeholder");if(n[2]){l|=1;var o=[],u=n[2],s=[];if(null===(s=t.key.exec(u)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(o.push(s[1]);""!==(u=u.substring(s[0].length));)if(null!==(s=t.key_access.exec(u)))o.push(s[1]);else{if(null===(s=t.index_access.exec(u)))throw new SyntaxError("[sprintf] failed to parse named argument key");o.push(s[1])}n[2]=o}else l|=2;if(3===l)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");a.push({placeholder:n[0],param_no:n[1],keys:n[2],sign:n[3],pad_char:n[4],align:n[5],width:n[6],precision:n[7],type:n[8]})}r=r.substring(n[0].length)}return i[e]=a}e.sprintf=n,e.vsprintf=r,"undefined"!=typeof window&&(window.sprintf=n,window.vsprintf=r)}()}));function ho(t){if("number"==typeof t){if(0===t)return!1}else if(t instanceof Sl&&t.getValues().some((function(t){return 0===t})))return!1;return!0}const go={min:function(t,e){return d(t.getValues())},minDate:function(t,e){let n=d(t.getValues());if(Number.isNumber(n)){let e=Array.from(t);for(let t of e.reverse())if(null!==t.value&&t.value===n)return t.date}return"Error: min not found"},max:function(t,e){return h(t.getValues())},maxDate:function(t,e){let n=h(t.getValues());if(Number.isNumber(n)){let e=Array.from(t);for(let t of e.reverse())if(null!==t.value&&t.value===n)return t.date}return"Error: max not found"},startDate:function(t,e){if(t){let e=t.getStartDate();if(e&&e.isValid())return e}return e.startDate},endDate:function(t,e){if(t){let e=t.getEndDate();if(e&&e.isValid())return e}return e.endDate},sum:function(t,e){return v(t.getValues())},count:function(t,e){return"Error: deprecated function 'count'"},numTargets:function(t,e){return t.getNumTargets()},days:function(t,e){return"Error: deprecated function 'days'"},numDays:function(t,e){return t.getLength()},numDaysHavingData:function(t,e){return t.getLengthNotNull()},maxStreak:function(t,e){let n=0,r=0;for(let e of t)null!==e.value?n++:n=0,n>=r&&(r=n);return r},maxStreakStart:function(t,e){let n=0,r=0,a=null,i=null;if(t)for(let e of t)null!==e.value?(0===n&&(a=e.date),n++):n=0,n>=r&&(r=n,i=a);return i},maxStreakEnd:function(t,e){let n=0,r=0,a=null,i=null;if(t){let e=Array.from(t);for(let t=0;t<e.length;t++){let l=e[t],o=null;t<e.length-1&&(o=e[t+1]),null!==l.value?(n++,null===(null==o?void 0:o.value)&&(a=l.date)):n=0,n>=r&&(r=n,i=a)}}return i},maxBreaks:function(t,e){let n=0,r=0;for(let e of t)null===e.value?n++:n=0,n>r&&(r=n);return r},maxBreaksStart:function(t,e){let n=0,r=0,a=null,i=null;if(t)for(let e of t)null===e.value?(0===n&&(a=e.date),n++):n=0,n>=r&&(r=n,i=a);return i},maxBreaksEnd:function(t,e){let n=0,r=0,a=null,i=null;if(t){let e=Array.from(t);for(let t=0;t<e.length;t++){let l=e[t],o=null;t<e.length-1&&(o=e[t+1]),null===l.value?(n++,null!==(null==o?void 0:o.value)&&(a=l.date)):n=0,n>=r&&(r=n,i=a)}}return i},lastStreak:function(t,e){return"Error: deprecated function 'lastStreak'"},currentStreak:function(t,e){let n=0;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){if(null===e[t].value)break;n++}}return n},currentStreakStart:function(t,e){let n=null;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){let r=e[t];if(t<e.length-1&&(n=e[t+1].date),null===r.value)break}}return null===n?"Error: absense":n},currentStreakEnd:function(t,e){let n=0,r=null;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){let a=e[t];if(null===a.value)break;0===n&&(r=a.date),n++}}return null===r?"Error: absense":r},currentBreaks:function(t,e){let n=0;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){if(null!==e[t].value)break;n++}}return n},currentBreaksStart:function(t,e){let n=null;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){let r=e[t];if(t<e.length-1&&(n=e[t+1].date),null!==r.value)break}}return null===n?"Error: absense":n},currentBreaksEnd:function(t,e){let n=0,r=null;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){let a=e[t];if(null!==a.value)break;0===n&&(r=a.date),n++}}return null===r?"Error: absense":r},average:function(t,e){let n=t.getLengthNotNull();return ho(n)?v(t.getValues())/n:"Error: divide by zero in expression"},median:function(t,e){return y(t.getValues(),.5,n);var n},variance:function(t,e){return function(t,e){let n,r=0,a=0,i=0;if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(n=e-a,a+=n/++r,i+=n*(e-a));else{let l=-1;for(let o of t)null!=(o=e(o,++l,t))&&(o=+o)>=o&&(n=o-a,a+=n/++r,i+=n*(o-a))}if(r>1)return i/(r-1)}(t.getValues())}},po={"-":function(t){if("number"==typeof t)return-1*t;if(t instanceof Sl){let e=t.cloneToTmpDataset();return e.getValues().forEach((function(t,e,n){null!==n[e]&&(n[e]=-1*t)})),e.recalculateMinMax(),e}return"Error: unknown operation for '-'"},"+":function(t){if("number"==typeof t)return t;if(t instanceof Sl){return t.cloneToTmpDataset()}return"Error: unknown operation for '+'"}},yo={"+":function(t,e){if("number"==typeof t&&"number"==typeof e)return t+e;if("number"==typeof t&&e instanceof Sl){let n=e.cloneToTmpDataset();return n.getValues().forEach((function(e,n,r){null!==r[n]?r[n]=t+e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof Sl&&"number"==typeof e){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t+e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof Sl&&e instanceof Sl){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t+e.getValues()[n]:r[n]=null})),n.recalculateMinMax(),n}return"Error: unknown operation for '+'"},"-":function(t,e){if("number"==typeof t&&"number"==typeof e)return t-e;if("number"==typeof t&&e instanceof Sl){let n=e.cloneToTmpDataset();return n.getValues().forEach((function(e,n,r){null!==r[n]?r[n]=t-e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof Sl&&"number"==typeof e){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t-e:r[n]=null})),n}if(t instanceof Sl&&e instanceof Sl){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t-e.getValues()[n]:r[n]=null})),n.recalculateMinMax(),n}return"Error: unknown operation for '-'"},"*":function(t,e){if("number"==typeof t&&"number"==typeof e)return t*e;if("number"==typeof t&&e instanceof Sl){let n=e.cloneToTmpDataset();return n.getValues().forEach((function(e,n,r){null!==r[n]?r[n]=t*e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof Sl&&"number"==typeof e){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t*e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof Sl&&e instanceof Sl){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t*e.getValues()[n]:r[n]=null})),n.recalculateMinMax(),n}return"Error: unknown operation for '*'"},"/":function(t,e){if(!ho(e))return"Error: divide by zero in expression";if("number"==typeof t&&"number"==typeof e)return t/e;if("number"==typeof t&&e instanceof Sl){let n=e.cloneToTmpDataset();return n.getValues().forEach((function(e,n,r){null!==r[n]?r[n]=t/e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof Sl&&"number"==typeof e){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t/e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof Sl&&e instanceof Sl){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t/e.getValues()[n]:r[n]=null})),n.recalculateMinMax(),n}return"Error: unknown operation for '/'"},"%":function(t,e){if(!ho(e))return"Error: divide by zero in expression";if("number"==typeof t&&"number"==typeof e)return t%e;if("number"==typeof t&&e instanceof Sl){let n=e.cloneToTmpDataset();return n.getValues().forEach((function(e,n,r){null!==r[n]?r[n]=t%e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof Sl&&"number"==typeof e){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t%e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof Sl&&e instanceof Sl){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t%e.getValues()[n]:r[n]=null})),n.recalculateMinMax(),n}return"Error: unknown operation for '%'"}},mo={normalize:function(t,e,n){let r=t.getYMin(),a=t.getYMax();if(null!==r&&null!==a&&a>r){let e=t.cloneToTmpDataset();return e.getValues().forEach((function(t,e,n){n[e]=(t-r)/(a-r)})),e.recalculateMinMax(),e}return"Error: invalid data range for function 'normalize'"},setMissingValues:function(t,e,n){if(e&&e.length>0){let n=e[0],r=t.cloneToTmpDataset();return Number.isNumber(n)&&!Number.isNaN(n)?(r.getValues().forEach((function(t,e,r){null===t&&(r[e]=n)})),r.recalculateMinMax(),r):"Error: invalid arguments for function 'setMissingValues'"}return"Error: invalid arguments for function 'setMissingValues"}};function vo(t,e){switch(t.type){case"Literal":return t.value;case"Identifier":let n=t.name;return n in go||n in mo?`Error: deprecated template variable '${n}', use '${n}()' instead`:`Error: unknown function name '${n}'`;case"UnaryExpression":let r=t,a=vo(r.argument,e);return"string"==typeof a?a:po[r.operator](a);case"BinaryExpression":let i=t,l=vo(i.left,e),o=vo(i.right,e),u=function(t,e){return"string"==typeof t?t:"string"==typeof e?e:"number"==typeof t||window.moment.isMoment(t)||t instanceof Sl?"number"==typeof e||window.moment.isMoment(e)||e instanceof Sl?"":"Error: invalide operant type":"Error: invalid operant type"}(l,o);return"string"==typeof u&&u.startsWith("Error:")?u:yo[i.operator](l,o);case"CallExpression":let s=t,f=s.callee.name,c=function(t,e){return t.map((function(t){return vo(t,e)}))}(s.arguments,e);if("string"==typeof c)return c;if("dataset"===f){if(1===c.length){let t=c[0];if("string"==typeof t)return t;if("number"!=typeof t)return"Error: function 'dataset' only accepts id in number";let n=function(t,e){return e.datasets.getDatasetById(t)}(t,e);return n||`Error: no dataset found for id '${t}'`}}else{if(f in go){if(0===c.length){let t=null;for(let n of e.datasets)t||n.getQuery().usedAsXDataset||(t=n);return t?go[f](t,e):`No available dataset found for function ${f}`}if(1===c.length){let t=c[0];return"string"==typeof t?t:t instanceof Sl?go[f](t,e):`Error: function '${f}' only accepts Dataset`}return`Error: Too many arguments for function ${f}`}if(f in mo){if(1===c.length){if("string"==typeof c[0])return c[0];if(c[0]instanceof Sl){let t=c[0];return mo[f](t,null,e)}return`Error: function ${f} only accept Dataset`}if(c.length>1){if("string"==typeof c[0])return c[0];if(c[0]instanceof Sl){let t=c[0];return mo[f](t,c.filter((function(t,e,n){return e>0})),e)}return`Error: function ${f} only accept Dataset`}return`Error: Too many arguments for function ${f}`}}return`Error: unknown function name '${f}'`}return"Error: unknown expression"}function wo(t,e){let n,r=[],a=new RegExp("{{(?<expr>[\\w+\\-*\\/0-9\\s()\\[\\]%.,]+)(::(?<format>[\\w+\\-*\\/0-9\\s()\\[\\]%.:]+))?}}","gm");for(;n=a.exec(t);){let t=n[0];if(!r.some((e=>e.source===t))&&(void 0!==n.groups&&void 0!==n.groups.expr)){let a=n.groups.expr,i=null;try{i=fo(a)}catch(t){return"Error:"+t.message}if(!i)return"Error: failed to parse expression";const l=vo(i,e);if("string"==typeof l)return l;if("number"==typeof l||window.moment.isMoment(l)){let e=null;void 0!==n.groups.format&&(e=n.groups.format),r.push({source:t,value:l,format:e})}}}return r}function xo(t,e){let n=wo(t,e);if("string"==typeof n)return n;let r=n;for(let n of r){let r=n.source,a=n.value,i=n.format,l="";"number"==typeof a?l=i?co.sprintf("%"+i,a):a.toFixed(1):window.moment.isMoment(a)&&(l=Kl(a,i||e.dateFormat)),l&&(t=t.split(r).join(l))}return t}function Ao(t,e){if(t=t.trim(),/^([\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)$/.test(t))return parseFloat(t);let n=wo(t,e);if("string"==typeof n)return n;let r=n;return r.length>0?r[0].value:"Error: failed to resolve values"}function bo(t,e,n,r){let a="",i=.5*n.dataAreaSize.width,l=.7*i,o=l*r.ratioInnerRadius,u=[];for(let t of r.data){let e=Ao(t,n);if("string"==typeof e){a=e;break}"number"==typeof e&&u.push(e)}if(""!==a)return a;let s=[];for(let t of r.label){let e=xo(t,n);if(e.startsWith("Error")){a=e;break}s.push(e)}if(""!==a)return a;let f=r.hideLabelLessThan,c=s.map((function(t){return lo(t,"tracker-tick-label")})),h=[];for(let t of r.extLabel){let e=xo(t,n);if(e.startsWith("Error")){a=e;break}h.push(e)}if(""!==a)return a;let d=h.map((function(t){return lo(t,"tracker-pie-label")})),g=r.showExtLabelOnlyIfNoLabel,p=Fr().range(r.dataColor),y=e.dataArea.append("g");y.attr("transform",(function(){return"translate("+.5*n.dataAreaSize.width+","+.5*n.dataAreaSize.height+")"}));let m=function(){var t=Cl,e=Tl,n=null,r=Zi(0),a=Zi(fl),i=Zi(0);function l(l){var o,u,s,f,c,h=(l=Al(l)).length,d=0,g=new Array(h),p=new Array(h),y=+r.apply(this,arguments),m=Math.min(fl,Math.max(-fl,a.apply(this,arguments)-y)),v=Math.min(Math.abs(m)/h,i.apply(this,arguments)),w=v*(m<0?-1:1);for(o=0;o<h;++o)(c=p[g[o]=o]=+t(l[o],o,l))>0&&(d+=c);for(null!=e?g.sort((function(t,n){return e(p[t],p[n])})):null!=n&&g.sort((function(t,e){return n(l[t],l[e])})),o=0,s=d?(m-h*w)/d:0;o<h;++o,y=f)u=g[o],f=y+((c=p[u])>0?c*s:0)+w,p[u]={data:l[u],index:o,value:c,startAngle:y,endAngle:f,padAngle:v};return p}return l.value=function(e){return arguments.length?(t="function"==typeof e?e:Zi(+e),l):t},l.sortValues=function(t){return arguments.length?(e=t,n=null,l):e},l.sort=function(t){return arguments.length?(n=t,e=null,l):n},l.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:Zi(+t),l):r},l.endAngle=function(t){return arguments.length?(a="function"==typeof t?t:Zi(+t),l):a},l.padAngle=function(t){return arguments.length?(i="function"==typeof t?t:Zi(+t),l):i},l}(),v=m(u),w=y.selectAll("sector").data(v).enter().append("g").attr("class","sector"),x=xl().innerRadius(o).outerRadius(l);var A=xl().innerRadius(.9*i).outerRadius(.9*i);function b(t){return(t.endAngle-t.startAngle)/(2*Math.PI)<f}function D(t){return t.startAngle+(t.endAngle-t.startAngle)/2}function k(t,e){let n=c[e].width,r=d[e].width;b(t);let a=D(t),l=x.centroid(t),o=A.centroid(t),u=A.centroid(t),f=Math.sqrt(Math.pow(o[0]-l[0],2)+Math.pow(o[1]-l[1],2));return""!==s[e]&&(l[0]=l[0]+(o[0]-l[0])*n/f,l[1]=l[1]+(o[1]-l[1])*n/f,u[0]=(.99*i-r-3)*(a<Math.PI?1:-1)),f=Math.sqrt(Math.pow(o[0]-l[0],2)+Math.pow(o[1]-l[1],2)),f>Math.sqrt(Math.pow(u[0]-l[0],2)+Math.pow(u[1]-l[1],2))?[l,u]:[l,o,u]}w.append("path").attr("fill",(function(t,e){return p(e.toString())})).attr("d",x),y.selectAll("label").data(m(u)).enter().append("text").text((function(t,e){return b(t)?"":s[e]})).attr("transform",(function(t){return"translate("+x.centroid(t)[0]+","+x.centroid(t)[1]+")"})).style("text-anchor","middle").attr("class","tracker-pie-label"),y.selectAll("extLabel").data(v).enter().append("text").text((function(t,e){return g?""===s[e]||b(t)?h[e]:"":h[e]})).attr("transform",(function(t,e){let n=A.centroid(t),r=D(t);return n[0]=(.99*i-d[e].width)*(r<Math.PI?1:-1),"translate("+n[0]+","+n[1]+")"})).style("text-anchor",(function(t){return D(t)<Math.PI?"start":"end"})).attr("class","tracker-pie-label"),y.selectAll("line").data(v).enter().append("polyline").attr("stroke","black").style("fill","none").attr("stroke-width",1).attr("points",(function(t,e){if(g){if((""===s[e]||b(t))&&""!==h[e])return k(t,e)}else if(""!==h[e])return k(t,e)})).attr("class","tracker-axis")}function Do(t,e,n){if(!e||!n)return;let r={};r=function(t,e,n,r){qt(e).select("#svg").remove();for(var a=Object.getOwnPropertyNames(t),i=0;i<a.length;i++)delete t[a[i]];let l=qt(e).append("svg").attr("id","svg").attr("width",n.dataAreaSize.width+n.margin.left+n.margin.right).attr("height",n.dataAreaSize.height+n.margin.top+n.margin.bottom);t.svg=l;let o=l.append("g").attr("id","graphArea").attr("transform","translate("+n.margin.left+","+n.margin.top+")").attr("width",n.dataAreaSize.width+n.margin.right).attr("height",n.dataAreaSize.height+n.margin.bottom);t.graphArea=o;let u=o.append("g").attr("id","dataArea").attr("width",n.dataAreaSize.width).attr("height",n.dataAreaSize.height);return t.dataArea=u,t}(r,t,e);let a=Qi[n.dataColor.length];for(let t=0;t<n.dataColor.length;t++)null===n.dataColor[t]&&(n.dataColor[t]=a[t]);!function(t,e,n,r){if(!n||!r)return;if(!r.title)return;let a=lo(r.title,"tracker-title"),i=e.graphArea.append("text").text(r.title).attr("id","title").attr("transform","translate("+n.dataAreaSize.width/2+","+a.height/2+")").attr("height",a.height).attr("class","tracker-title");e.title=i,oo(e.svg,0,a.height),oo(e.graphArea,0,a.height),uo(e.dataArea,0,a.height)}(0,r,e,n),bo(0,r,e,n),n.showLegend&&function(t,e,n,r){let a=e.svg;e.graphArea;let i=e.dataArea,l=e.title,o=0;l&&(o=parseFloat(l.attr("height")));let u=r.dataName,s=u.map((function(t){return lo(t,"tracker-legend-label")})),f=0,c=0;for(let t=0;t<u.length;t++)s[t].width>c&&(c=s[t].width,f=t);let h=c/u[f].length,d=s[f].height,g=u.length,p=2*h,y=d,m=2*h,w=0,x=0;"vertical"===r.legendOrientation?(w=3*p+m+c,x=(g+1)*y):"horizontal"===r.legendOrientation&&(w=(2*p+m)*g+p+v(s,(function(t,e){return t.width})),x=y+d);let A=0,b=0;if("top"===r.legendPosition)A=n.dataAreaSize.width/2-w/2,b=o,oo(a,0,x+y),uo(i,0,x+y);else if("bottom"===r.legendPosition)A=n.dataAreaSize.width/2-w/2,b=o+n.dataAreaSize.height+y,oo(a,0,x+y);else if("left"===r.legendPosition)A=0,b=o+n.dataAreaSize.height/2-x/2,oo(a,w+p,0),uo(i,w+p,0);else{if("right"!==r.legendPosition)return;A=n.dataAreaSize.width+p,b=o+n.dataAreaSize.height/2-x/2,oo(a,w+p,0)}let D=e.graphArea.append("g").attr("id","legend").attr("transform","translate("+A+","+b+")"),k=D.append("rect").attr("class","tracker-legend").attr("width",w).attr("height",x);r.legendBgColor&&k.style("fill",r.legendBgColor),r.legendBorderColor&&k.style("stroke",r.legendBorderColor);let M=p,T=d,C=M+p+m,F=T;if("vertical"===r.legendOrientation)D.selectAll("markers").data(u).enter().append("circle").attr("cx",M+m/2).attr("cy",(function(t,e){return T+e*y})).attr("r",(function(t,e){return 5})).style("fill",(function(t,e){return r.dataColor[e]})),D.selectAll("labels").data(u).enter().append("text").attr("x",C).attr("y",(function(t,e){return F+e*y})).text((function(t,e){return t})).style("alignment-baseline","middle").attr("class","tracker-legend-label").style("fill",(function(t,e){return r.dataColor[e]}));else if("horizontal"===r.legendOrientation){let t=0;t=0,D.selectAll("markers").data(u).enter().append("circle").attr("cx",(function(e,n){return 0===n?t=M+m/2:t+=s[n].width+p+m+p,t})).attr("cy",T).attr("r",(function(t,e){return 5})).style("fill",(function(t,e){return r.dataColor[e]})),t=0,D.selectAll("labels").data(u).enter().append("text").attr("x",(function(e,n){return 0===n?t=C:t+=s[n].width+p+m+p,t})).attr("y",F).text((function(t,e){return t})).style("alignment-baseline","middle").attr("class","tracker-legend-label").style("fill",(function(t,e){return r.dataColor[e]}))}}(0,r,e,n),function(t,e,n){let r=qt(t),a=e.svg,i=parseFloat(a.attr("width")),l=parseFloat(a.attr("height"));a.attr("width",null).attr("height",null).attr("viewBox",`0 0 ${i} ${l}`).attr("preserveAspectRatio","xMidYMid meet"),n.fitPanelWidth?r.style("width","100%"):(r.style("width",(i*n.fixedScale).toString()+"px"),r.style("height",(l*n.fixedScale).toString()+"px"))}(t,r,e)}function ko(t,e,n){if(!e||!n)return;let r="";n.template,r=n.template;let a=xo(r,e);if(a.startsWith("Error:"))return a;if(r=a,""!==r){let e=qt(t).append("div");if(r.includes("\n")||r.includes("\\n")){let t=r.split(/(\n|\\n)/);for(let n of t)"\n"!==n&&"\\n"!==n&&e.append("div").text(n)}else e.text(r);""!==n.style&&e.attr("style",n.style)}}let Mo=!1;function To(t,e){let n=e.dataset;if(0===n.length)return!1;let r=null;if(null===e.selectedDataset){for(let e of n)if(r=t.datasets.getDatasetById(e),r&&!r.getQuery().usedAsXDataset)break;if(r)return e.selectedDataset=r.getId(),!0}else{let a=e.selectedDataset,i=n.findIndex((t=>t===a));if(i>=0){if(i===e.dataset.length-1){for(let e of n)if(r=t.datasets.getDatasetById(e),r&&!r.getQuery().usedAsXDataset)break;return!!r&&(e.selectedDataset=r.getId(),!0)}{i++;let a=n[i];if(r=t.datasets.getDatasetById(a),e.selectedDataset=a,r&&!r.getQuery().usedAsXDataset)return!0;To(t,e)}}}return!1}function Co(t,e,n,r){qt(e).select("#svg").remove();for(var a=Object.getOwnPropertyNames(t),i=0;i<a.length;i++)delete t[a[i]];let l=qt(e).append("svg").attr("id","svg").attr("width",n.dataAreaSize.width+n.margin.left+n.margin.right).attr("height",n.dataAreaSize.height+n.margin.top+n.margin.bottom);t.svg=l;let o=l.append("g").attr("id","graphArea").attr("transform","translate("+n.margin.left+","+n.margin.top+")").attr("width",n.dataAreaSize.width+n.margin.right).attr("height",n.dataAreaSize.height+n.margin.bottom);t.graphArea=o;let u=o.append("g").attr("id","dataArea").attr("width",n.dataAreaSize.width).attr("height",n.dataAreaSize.height);return t.dataArea=u,t}function Fo(t,e){let n=t.svg.selectAll("circle");for(let t of n){let e=qt(t).attr("id");e&&e.startsWith("tracker-selected-circle-")&&qt(t).style("stroke","none")}e.selectedDate="",t.monitor.text("")}function _o(t,e,n,r,a){if(!n||!r)return;let i=r.selectedDataset;if(null===i)return;let l=n.datasets.getDatasetById(i);if(!l)return;let o=l.getName();a.month(),a.daysInMonth(),a.year();let u=lo("30","tracker-month-label"),s=2.8*Math.max(u.width,u.height),f=a.format("YYYY"),c=a.format("MMM"),h=lo(f,"tracker-month-header-year"),d=lo(c,"tracker-month-header-month"),g=0,p=e.graphArea.append("g"),y=null;r.headerMonthColor?y=r.headerMonthColor:r.color&&(y=r.color);let m=p.append("text").text(c).attr("id","titleMonth").attr("transform","translate("+s/4+","+d.height+")").attr("class","tracker-month-header-month").style("cursor","default").on("click",(function(t){Fo(e,r)}));y&&m.style("fill",y),g+=d.height;let v=null;r.headerYearColor?v=r.headerYearColor:r.color&&(v=r.color);let w=p.append("text").text(f).attr("id","titleYear").attr("transform","translate("+s/4+","+(g+h.height)+")").attr("class","tracker-month-header-year").style("cursor","default").attr("font-weight","bold").on("click",(function(t){Fo(e,r)}));v&&w.style("fill",v),g+=h.height;let x=lo(o,"tracker-month-title-rotator");if("circle"===r.mode||"annotation"===r.mode&&!r.showAnnotationOfAllTargets){let i=p.append("text").text(o).attr("transform","translate("+3.5*s+","+x.height+")").attr("class","tracker-month-title-rotator").style("cursor","pointer").on("click",(function(i){To(n,r)&&(Fo(e,r),Eo(t,e,n,r,a))}));e.rotator=i}let A=lo("0.0000","tracker-month-title-monitor"),b=p.append("text").text("").attr("id","monitor").attr("class","tracker-month-title-monitor").attr("transform","translate("+3.5*s+","+(x.height+A.height)+")").style("cursor","pointer").style("fill",r.selectedRingColor);e.monitor=b;let D=lo("<","tracker-month-title-arrow");p.append("text").text("<").attr("id","arrowLeft").attr("transform","translate("+5.5*s+","+(g/2+D.height/2)+")").attr("class","tracker-month-title-arrow").on("click",(function(i){Fo(e,r),r.selectedDate="";let l=a.clone().add(-1,"month");Eo(t,e,n,r,l)})).style("cursor","pointer"),p.append("text").text(">").attr("id","arrowLeft").attr("transform","translate("+6.5*s+","+(g/2+D.height/2)+")").attr("class","tracker-month-title-arrow").on("click",(function(i){Fo(e,r);let l=a.clone().add(1,"month");Eo(t,e,n,r,l)})).style("cursor","pointer"),p.append("text").text("◦").attr("id","arrowToday").attr("transform","translate("+6*s+","+(g/2+D.height/2)+")").attr("class","tracker-month-title-arrow").on("click",(function(a){Fo(e,r);let i=eo(n.dateFormat);Eo(t,e,n,r,i)})).style("cursor","pointer"),g+=8;let k=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];"mon"===r.startWeekOn.toLowerCase()&&k.push(k.shift());let M=lo(k[0],"tracker-month-weekday");e.graphArea.selectAll("weekDays").data(k).enter().append("text").text((function(t){return t})).attr("transform",(function(t,e){return"translate("+(e+.5)*s+","+(g+M.height)+")"})).attr("class","tracker-month-weekday").attr("text-anchor","middle").style("cursor","default").on("click",(function(t){Fo(e,r)})),g+=M.height+8;let T=null;r.dividingLineColor?T=r.dividingLineColor:r.color&&(T=r.color);let C=e.graphArea.append("rect").attr("x",0).attr("y",g).attr("width",6.5*s+M.width).attr("height",1).attr("class","tracker-month-dividing-line");T&&C.style("fill",T),g+=1,p.attr("height",g),e.header=p,uo(e.dataArea,0,g)}function So(t,e,n,r,a){if(!n||!r)return;let i=r.mode;if("circle"!==i&&"annotation"!==i)return"Unknown month view mode";let l=r.selectedDataset;if(null===l)return;let o=n.datasets.getDatasetById(l);if(!o)return;let u=r.dataset.findIndex((t=>t===l));l<0&&(u=0);let s=r.threshold[u];a.month(),a.daysInMonth();let f=lo("30","tracker-month-label"),c=2.8*Math.max(f.width,f.height),g=c/2.8*1.8/2,p=(c-2*g)/2,y=d(o.getValues());null!==r.yMin[u]&&(y=r.yMin[u]);let m=h(o.getValues());null!==r.yMax[u]&&(m=r.yMax[u]);let v=!0;(null===m||null===y||m<=y)&&(v=!1);const w=a.clone().startOf("month");let x=w.clone().subtract(w.day(),"days");"mon"===r.startWeekOn.toLowerCase()&&(x=x.add(1,"days"));const A=a.clone().endOf("month");let b=A.clone().add(7-A.day()-1,"days");"mon"===r.startWeekOn.toLowerCase()&&(b=b.add(1,"days"));const D=o.getStartDate(),k=o.getEndDate();let M=r.showAnnotation,T=r.annotation,C=T[u],F=r.showAnnotationOfAllTargets,_=[],S=0,E=0,B=0;for(let t=x.clone();t<=b;t.add(1,"days")){t=Gl(Kl(t,n.dateFormat),n.dateFormat),"2021-09-13"===t.format("YYYY-MM-DD")&&(Mo=!1),"mon"===r.startWeekOn.toLowerCase()?(S=t.day()-1,S<0&&(S=6),E=Math.floor(B/7)):(S=t.day(),E=Math.floor(B/7));let e=!0;(t.diff(w)<0||t.diff(A)>0)&&(e=!1);let a=!0;D&&k&&t.diff(D)>=0&&t.diff(k)<=0&&(a=!1);const i=o.getValue(t);Mo&&(console.log(o),console.log(Kl(t,n.dateFormat)),console.log(i));let l=!1;r.circleColorByValue?(v||null!==i&&i>s)&&(l=!0):null!==i&&i>s&&(l=!0);let u=null;r.circleColorByValue&&v&&null!==i&&(u=(i-y)/(m-y)),Mo&&(console.log(y),console.log(m),console.log(u));let f=o.getValue(t,1),c=o.getValue(t,-1),h=!1;null!==i&&i>s&&null!==c&&c>s&&(h=!0);let d=!1;null!==i&&i>s&&null!==f&&f>s&&(d=!0),Mo&&(console.log(`preValue: ${c}, curValue: ${i}, nextValue: ${f}`),console.log(r.threshold),console.log(`streakIn: ${h}, streakOut: ${d}`));let g="";if(M)if(F)for(let e of r.dataset){let a=r.dataset.findIndex((t=>t===e));if(a>=0){let i=n.datasets.getDatasetById(e).getValue(t),l=r.threshold[a];null!==i&&i>l&&(g+=T[a])}}else i>s&&(g=C);_.push({date:Kl(t,n.dateFormat),value:i,scaledValue:u,dayInMonth:t.date(),isInThisMonth:e,isOutOfDataRange:a,row:E,col:S,showCircle:l,streakIn:h,streakOut:d,annotation:g}),B++,Mo&&(Mo=!1)}let N=(S+1)*c,L=ta().domain([-.5,6.5]).range([0,N]);if("circle"===i&&r.showCircle&&r.showStreak){let t="#69b3a2";r.circleColor?t=r.circleColor:r.color&&(t=r.color),e.dataArea.selectAll("streakIn").data(_.filter((function(t){return t.streakIn}))).enter().append("rect").attr("x",(function(t){return L(t.col)-g-p})).attr("y",(function(t){return L(t.row)-1.5})).attr("width",p).attr("height",3).style("fill",(function(e){return e.showCircle?r.circleColorByValue?null!==e.scaledValue?Mr("white",t)(.8*e.scaledValue+.2):"none":t:"none"})).style("opacity",(function(t){return t.isOutOfDataRange||r.dimNotInMonth&&!t.isInThisMonth?.2:1})),e.dataArea.selectAll("streakOut").data(_.filter((function(t){return t.streakOut}))).enter().append("rect").attr("x",(function(t){return L(t.col)+g})).attr("y",(function(t){return L(t.row)-1.5})).attr("width",p).attr("height",3).style("fill",(function(e){return e.showCircle?r.circleColorByValue?null!==e.scaledValue?Mr("white",t)(.8*e.scaledValue+.2):"none":t:"none"})).style("opacity",(function(t){return t.isOutOfDataRange||r.dimNotInMonth&&!t.isInThisMonth?.2:1}))}let V="#69b3a2";r.circleColor?V=r.circleColor:r.color&&(V=r.color),"circle"===i&&r.showCircle&&e.dataArea.selectAll("dot").data(_).enter().append("circle").attr("r",g).attr("cx",(function(t){return L(t.col)})).attr("cy",(function(t){return L(t.row)})).style("fill",(function(t){if(t.showCircle){if(!r.circleColorByValue)return V;if(null!==t.scaledValue){return Mr("white",V)(.8*t.scaledValue+.2)}return"none"}return"none"})).style("opacity",(function(t){return t.isOutOfDataRange||r.dimNotInMonth&&!t.isInThisMonth?.2:1})).style("cursor","default");let I=Kl(window.moment(),n.dateFormat);if("circle"===i&&r.showTodayRing){let t=e.dataArea.selectAll("todayRing").data(_.filter((function(t){return t.date===I}))).enter().append("circle").attr("r",.9*g).attr("cx",(function(t){return L(t.col)})).attr("cy",(function(t){return L(t.row)})).attr("class","tracker-month-today-circle").style("cursor","default");""!==r.todayRingColor?t.style("stroke",r.todayRingColor):t.style("stroke","white")}"circle"===i&&r.showSelectedRing&&e.dataArea.selectAll("selectedRing").data(_).enter().append("circle").attr("r",g).attr("cx",(function(t){return L(t.col)})).attr("cy",(function(t){return L(t.row)})).attr("id",(function(t){return"tracker-selected-circle-"+t.date})).attr("class","tracker-month-selected-circle").style("cursor","default").style("stroke","none"),e.dataArea.selectAll("dayLabel").data(_).enter().append("text").text((function(t){return t.dayInMonth.toString()})).attr("transform",(function(t){return"translate("+L(t.col)+","+(L(t.row)+f.height/4)+")"})).style("fill-opacity",(function(t){return t.isOutOfDataRange||r.dimNotInMonth&&!t.isInThisMonth?.2:1})).attr("date",(function(t){return t.date})).attr("value",(function(t){return t.value})).attr("valueType",(function(t){return tl[o.valueType]})).attr("class","tracker-month-label").on("click",(function(t){Fo(e,r);let n=qt(this).attr("date");if(r.selectedDate=n,r.showSelectedRing&&e.dataArea.select("#tracker-selected-circle-"+n).style("stroke",r.selectedRingColor),r.showSelectedValue){let t=qt(this).attr("value"),n="";if("Time"===qt(this).attr("valueType")){n=window.moment("00:00","HH:mm",!0).add(parseFloat(t),"seconds").format("HH:mm")}else n=t;e.monitor.text(n)}})).style("cursor","pointer"),"annotation"===i&&M&&e.dataArea.selectAll("dayAnnotation").data(_).enter().append("text").text((function(t){return t.annotation})).attr("transform",(function(t){let e=L(t.col),n=L(t.row)+f.height/4;return t.annotation&&(n+=g),"translate("+e+","+n+")"})).attr("class","tracker-month-annotation");let Y=parseFloat(e.svg.attr("width")),P=parseFloat(e.svg.attr("height")),z=parseFloat(e.graphArea.attr("width")),O=parseFloat(e.graphArea.attr("height")),U=7*c+parseFloat(e.header.attr("height")),R=7*c;U>P&&oo(e.svg,0,U-P),R>Y&&oo(e.svg,R-Y,0),U>O&&oo(e.graphArea,0,U-O),R>z&&oo(e.svg,R-z,0)}function Eo(t,e,n,r,a){n&&Bo&&(_o(t,e=Co(e,t,n),n,r,a),So(0,e,n,r,a))}function Bo(t,e,n){if(!e||!Bo)return;n.dataset;let r=0;for(let t of e.datasets)t.getQuery().usedAsXDataset||r++;if(0===r)return"No available dataset found";if(To(e,n),null===n.selectedDataset)return"No available dataset found";let a={};a=Co(a,t,e);let i=null;if(n.initMonth){if(i=Jl(n.initMonth,e.dateFormat),!i){let t=window.moment(n.initMonth,"YYYY-MM",!0);if(!t.isValid())return"Invalid initMonth";i=t}}else i=e.datasets.getDates().last();i&&(_o(t,a,e,n,i),So(0,a,e,n,i),function(t,e,n){let r=qt(t),a=e.svg,i=parseFloat(a.attr("width")),l=parseFloat(a.attr("height"));a.attr("width",null).attr("height",null).attr("viewBox",`0 0 ${i} ${l}`).attr("preserveAspectRatio","xMidYMid meet"),n.fitPanelWidth?r.style("width","100%"):(r.style("width",(i*n.fixedScale).toString()+"px"),r.style("height",(l*n.fixedScale).toString()+"px"))}(t,a,e))}function No(t,e,n){if(e&&No)return"Under construction"}function Lo(t,e,n){if(!e||!n)return;let r=parseFloat(n.dataset);e.datasets.getDatasetById(r),"horizontal"===n.orientation?e.dataAreaSize={width:250,height:24}:"vertical"===n.orientation&&(e.dataAreaSize={width:24,height:250});let a=function(t,e,n){let r={};if(!e||!n)return;let a=qt(t).append("svg").attr("id","svg").attr("width",e.dataAreaSize.width+e.margin.left+e.margin.right).attr("height",e.dataAreaSize.height+e.margin.top+e.margin.bottom);r.svg=a;let i=a.append("g").attr("id","graphArea").attr("transform","translate("+e.margin.left+","+e.margin.top+")").attr("width",e.dataAreaSize.width+e.margin.right).attr("height",e.dataAreaSize.height+e.margin.bottom);r.graphArea=i;let l=i.append("g").attr("id","dataArea").attr("width",e.dataAreaSize.width).attr("height",e.dataAreaSize.height);return r.dataArea=l,r}(t,e,n),i=function(t,e,n,r){if(!e||!n)return;let a=n.range,i=a[a.length-1],l=[0,i],o=n.valueUnit,u=function(t){return o&&o.endsWith("%")?Jr(0,i,7)(t)+" %":Jr(0,i,7)(t)},s=lo(u(i),"tracker-tick-label");if("horizontal"===n.orientation){let n=ta();n.domain(l).range([0,e.dataAreaSize.width]),t.scale=n;let r=C(n);r.tickFormat(u);let a=t.dataArea.append("g").attr("id","axis").attr("transform","translate(0,"+e.dataAreaSize.height+")").call(r).attr("class","tracker-axis");t.axis=a,a.selectAll("path").style("stroke","none"),a.selectAll("line"),a.selectAll("text").attr("class","tracker-tick-label"),a.attr("width",e.dataAreaSize.width+s.width),a.attr("height",6+s.height),oo(t.svg,+s.width,6+s.height),oo(t.graphArea,+s.width,6+s.height)}else if("vertical"===n.orientation){let n=ta();n.domain(l).range([e.dataAreaSize.height,0]),t.scale=n;let r=F(n);r.tickFormat(u);let a=t.dataArea.append("g").attr("id","axis").attr("x",0).attr("y",0).call(r).attr("class","tracker-axis");t.axis=a,a.selectAll("path").style("stroke","none"),a.selectAll("line"),a.selectAll("text").attr("class","tracker-tick-label"),a.attr("width",6+s.width),a.attr("height",e.dataAreaSize.width),oo(t.svg,6+s.width,0),oo(t.graphArea,6+s.width,0),uo(t.dataArea,6+s.width,0)}}(a,e,n);if("string"==typeof i)return i;!function(t,e,n){if(!e||!n)return;if(n.title){let r=lo(n.title,"tracker-title-small");if("horizontal"===n.orientation){let a=t.graphArea.append("text").text(n.title).attr("id","title").attr("x",r.width/2).attr("y",e.dataAreaSize.height/2).attr("height",r.height).attr("class","tracker-title-small");t.title=a,oo(t.svg,r.width+6,0),oo(t.graphArea,r.width+6,0),uo(t.dataArea,r.width+6,0)}else if("vertical"===n.orientation){let a=e.dataAreaSize.width/2;r.width>e.dataAreaSize.width&&(oo(t.svg,r.width-e.dataAreaSize.width,0),oo(t.graphArea,r.width-e.dataAreaSize.width,0),uo(t.dataArea,r.width/2-e.dataAreaSize.width/2,0),a=r.width/2);let i=parseFloat(t.axis.attr("width")),l=t.graphArea.append("text").text(n.title).attr("id","title").attr("x",a+i).attr("y",r.height/2).attr("height",r.height).attr("class","tracker-title-small");t.title=l,oo(t.svg,0,r.height+6),oo(t.graphArea,0,r.height+6),uo(t.dataArea,0,r.height+6)}}if(n.valueUnit){let r=lo(n.valueUnit,"tracker-tick-label");if("horizontal"===n.orientation){let a=t.dataArea.append("text").text(n.valueUnit).attr("id","unit").attr("x",-1*(r.width+6)).attr("y",e.dataAreaSize.height+6).attr("height",r.height).attr("class","tracker-tick-label");t.unit=a}else if("vertical"===n.orientation){let a=t.dataArea.append("text").text(n.valueUnit).attr("id","unit").attr("x",e.dataAreaSize.width/2-r.width/2).attr("y",-(r.height/2+6)).attr("height",r.height).attr("class","tracker-tick-label");t.unit=a,oo(t.svg,0,r.height+6),oo(t.graphArea,0,r.height+6),uo(t.dataArea,0,r.height+6)}}}(a,e,n),function(t,e,n,r){if(!e||!n)return;let a=t.scale,i=n.range,l=n.rangeColor,o=[],u=0;for(let t=0;t<i.length;t++)o.push({start:u,end:i[t],color:l[t]}),u=i[t];"horizontal"===n.orientation?t.dataArea.selectAll("backPanel").data(o).enter().append("rect").attr("x",(function(t,e){return Math.floor(a(t.start))})).attr("y",(function(t){return 0})).attr("width",(function(t,e){return Math.ceil(a(t.end-t.start))})).attr("height",e.dataAreaSize.height).style("fill",(function(t){return t.color})):"vertical"===n.orientation&&t.dataArea.selectAll("backPanel").data(o).enter().append("rect").attr("x",(function(t,e){return 0})).attr("y",(function(t){return Math.floor(a(t.end))})).attr("width",e.dataAreaSize.width).attr("height",(function(t){return e.dataAreaSize.height-Math.floor(a(t.end-t.start))})).style("fill",(function(t){return t.color}))}(a,e,n);let l=function(t,e,n,r){let a="";if(!e||!n)return;let i=Ao(n.value,e);if("string"==typeof i)return i;let l=i;if(Number.isNaN(l))return a="Invalid input value: "+i,a;let o=n.valueColor,u=t.scale;if("horizontal"===n.orientation){let n=e.dataAreaSize.height/3;t.dataArea.append("rect").attr("x",u(0)).attr("y",n).attr("width",Math.floor(u(l))).attr("height",n).style("fill",o)}else if("vertical"===n.orientation){let n=e.dataAreaSize.width/3;t.dataArea.append("rect").attr("x",n).attr("y",Math.floor(u(l))).attr("width",n).attr("height",e.dataAreaSize.height-Math.floor(u(l))).style("fill",o)}}(a,e,n);if("string"==typeof l)return l;!function(t,e,n,r){if(!e||!n)return;if(!n.showMarker)return;let a=n.markerValue,i=n.markerColor,l=t.scale;if("horizontal"===n.orientation){let n=2*e.dataAreaSize.height/3;t.dataArea.append("rect").attr("x",l(a)-1.5).attr("y",n/4).attr("width",3).attr("height",n).style("fill",i)}else if("vertical"===n.orientation){let n=2*e.dataAreaSize.width/3;t.dataArea.append("rect").attr("x",n/4).attr("y",l(a)-1.5).attr("width",n).attr("height",3).style("fill",i)}}(a,e,n),function(t,e,n){let r=qt(t),a=e.svg,i=parseFloat(a.attr("width")),l=parseFloat(a.attr("height"));a.attr("width",null).attr("height",null).attr("viewBox",`0 0 ${i} ${l}`).attr("preserveAspectRatio","xMidYMid meet"),n.fitPanelWidth?r.style("width","100%"):(r.style("width",(i*n.fixedScale).toString()+"px"),r.style("height",(l*n.fixedScale).toString()+"px"))}(t,a,e)}function Vo(t,e,n){if(!e||!n)return;let r=e.datasets,a=function(t,e){let n,r;if(void 0===e)for(const e of t)null!=e&&(void 0===n?e>=e&&(n=r=e):(n>e&&(n=e),r<e&&(r=e)));else{let a=-1;for(let i of t)null!=(i=e(i,++a,t))&&(void 0===n?i>=i&&(n=r=i):(n>i&&(n=i),r<i&&(r=i)))}return[n,r]}(r.getDates()),i=function(){return Tr.apply(Xi(Aa,ba,ga,da,fa,ua,oa,la,ia,Ca).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}().domain(a).range([0,e.dataAreaSize.width]);t.xScale=i;let l=Zl(n.xAxisTickInterval),[o,u]=function(t,e){let n=[],r=null;if(e){let r=t[0],a=t[t.length-1];n=ua.range(r.toDate(),a.toDate(),e.asDays())}else{let e=t.length;r=e<=15?ua:e<=60?ua.every(4):e<=105?fa:e<=450?da:e<=900?da.every(2):ga}return[n,r]}(r.getDates(),l),s=function(t,e){if(e){function t(t){return Kl(window.moment(t),e)}return t}{let e=null,n=t.length;return e=Ca(n<=15||n<=60||n<=105?"%y-%m-%d":n<=450||n<=900?"%y %b":"%Y"),e}}(r.getDates(),n.xAxisTickLabelFormat),f=C(i);o&&0!==o.length?f.tickValues(o):u&&f.ticks(u),s&&f.tickFormat(s);let c=t.dataArea.append("g").attr("id","xAxis").attr("transform","translate(0,"+e.dataAreaSize.height+")").call(f).attr("class","tracker-axis");n.xAxisColor&&c.style("stroke",n.xAxisColor),t.xAxis=c;let h=lo("99-99-99"),d=c.selectAll("text").attr("x",-1*h.height*Math.cos(65/180*Math.PI)).attr("y",0).attr("transform","rotate(-65)").style("text-anchor","end").attr("class","tracker-tick-label");n.xAxisColor&&d.style("fill",n.xAxisColor);let g=h.width*Math.sin(65/180*Math.PI),p=c.append("text").text(n.xAxisLabel).attr("transform","translate("+e.dataAreaSize.width/2+","+(6+g)+")").attr("class","tracker-axis-label");n.xAxisLabelColor&&p.style("fill",n.xAxisLabelColor),c.attr("height",6+g),oo(t.svg,0,6+g),oo(t.graphArea,0,6+g)}function Io(t,e,n,r,a){if(!e||!n)return;let i=e.datasets;if(0===a.length)return;if("left"!==r&&"right"!==r)return;let l=null,o=null,u=null,s=!1;for(let t of a){let e=i.getDatasetById(t);if(!e.getQuery().usedAsXDataset)if((null===l||e.getYMin()<l)&&(l=e.getYMin()),(null===o||e.getYMax()>o)&&(o=e.getYMax()),s=e.valueType===tl.Time,null===u)u=s;else if(s!==u)return"Not all values in time format"}let f=null;"left"===r?f=n.yMin[0]:"right"===r&&(f=n.yMin[1]);let c=!1;"number"!=typeof f?f=l:c=!0;let h=null;"left"===r?h=n.yMax[0]:"right"===r&&(h=n.yMax[1]);let d=!1;if("number"!=typeof h?h=o:d=!0,h<f){let t=f;f=h,h=t;let e=c;c=d,d=e}let g,p,y=h-f,v=ta();g=c?f:f-.2*y,p=d?h:h+.2*y,n.GetGraphType()===Ki.Bar&&(p<0&&(p=0),g>0&&(g=0));let w=[g,p];("left"===r&&n.reverseYAxis[0]||"right"===r&&n.reverseYAxis[1])&&(w=[p,g]),v.domain(w).range([e.dataAreaSize.height,0]),"left"===r?t.leftYScale=v:"right"===r&&(t.rightYScale=v);let x="";"left"===r?x=n.yAxisColor[0]:"right"===r&&(x=n.yAxisColor[1]);let A="";"left"===r?A=n.yAxisLabelColor[0]:"right"===r&&(A=n.yAxisLabelColor[1]);let b="";"left"===r?b=n.yAxisLabel[0]:"right"===r&&(b=n.yAxisLabel[1]);let D="",k=null,M=null;"left"===r?(D=n.yAxisUnit[0],k=n.yAxisTickInterval[0],M=n.yAxisTickLabelFormat[0]):"right"===r&&(D=n.yAxisUnit[1],k=n.yAxisTickInterval[1],M=n.yAxisTickLabelFormat[1]);let C,_=null;if(s?_=Zl(k):(_=parseFloat(k),Number.isNumber(_)&&!Number.isNaN(_)||(_=null)),"left"===r?C=F(v):"right"===r&&(C=T(2,v)),C){let t=function(t,e,n,r=!1){if(r){if(n){function t(t){return window.moment("00:00","HH:mm",!0).add(t,"seconds").format(n)}return t}{function n(n){const r=Math.abs(e-t);let a=window.moment("00:00","HH:mm",!0).add(n,"seconds").format("HH:mm");if(r>43200){let r=(n-t)/3600%2;(n<t||n>e||r<1)&&(a="")}return a}return n}}if(n){function t(t){return co.sprintf("%"+n,t)}return t}return Jr(t,e,10)}(g,p,M,s);t&&C.tickFormat(t);let e=function(t,e,n,r=!1){const a=Math.abs(e-t);let i=[];r?i=n&&window.moment.isDuration(n)?m(t,e,Math.abs(n.asSeconds())):a>18e3?m(t=3600*Math.floor(t/3600),e=3600*Math.ceil(e/3600),3600):m(t=1800*Math.floor(t/1800),e=1800*Math.ceil(e/1800),1800):n&&"number"==typeof n&&(i=m(t,e,n));return 0===i.length?null:i}(g,p,_,s);e&&C.tickValues(e)}let S=t.dataArea.append("g").attr("id","yAxis").call(C).attr("class","tracker-axis");"right"==r&&S.attr("transform","translate("+e.dataAreaSize.width+" ,0)"),"left"===r?t.leftYAxis=S:"right"===r&&(t.rightYAxis=S);let E=S.selectAll("path");x&&E.style("stroke",x);let B=S.selectAll("line");x&&B.style("stroke",x);let N=S.selectAll("text").attr("class","tracker-tick-label");x&&N.style("fill",x);let L=0;for(let t of N)if(t.textContent){let e=lo(t.textContent,"tracker-axis-label");e.width>L&&(L=e.width)}""!==D&&(b+=" ("+D+")");let V=lo(b),I=S.append("text").text(b).attr("transform","rotate(-90)").attr("x",-1*e.dataAreaSize.height/2).attr("class","tracker-axis-label");"left"===r?I.attr("y",-6-L-V.height/2):I.attr("y",6+L+V.height),A&&I.style("fill",A);let Y=V.height+L+6;S.attr("width",Y),oo(t.svg,Y,0),oo(t.graphArea,Y,0),"left"===r&&(uo(t.dataArea,Y,0),t.title&&uo(t.title,Y,0))}function Yo(t,e,n,r,a){if(!e||!n)return;let i=null;if("left"===a?i=t.leftYScale:"right"===a&&(i=t.rightYScale),n.showLine[r.getId()]){let e=function(t,e){var n=Zi(!0),r=null,a=Dl,i=null;function l(l){var o,u,s,f=(l=Al(l)).length,c=!1;for(null==r&&(i=a(s=ur())),o=0;o<=f;++o)!(o<f&&n(u=l[o],o,l))===c&&((c=!c)?i.lineStart():i.lineEnd()),c&&i.point(+t(u,o,l),+e(u,o,l));if(s)return i=null,s+""||null}return t="function"==typeof t?t:void 0===t?kl:Zi(t),e="function"==typeof e?e:void 0===e?Ml:Zi(e),l.x=function(e){return arguments.length?(t="function"==typeof e?e:Zi(+e),l):t},l.y=function(t){return arguments.length?(e="function"==typeof t?t:Zi(+t),l):e},l.defined=function(t){return arguments.length?(n="function"==typeof t?t:Zi(!!t),l):n},l.curve=function(t){return arguments.length?(a=t,null!=r&&(i=a(r)),l):a},l.context=function(t){return arguments.length?(null==t?r=i=null:i=a(r=t),l):r},l}().defined((function(t){return null!==t.value})).x((function(e){return t.xScale(e.date)})).y((function(t){return i(t.value)})),a=t.dataArea.append("path").attr("class","tracker-line").style("stroke-width",n.lineWidth[r.getId()]);n.fillGap[r.getId()]?a.datum(Array.from(r).filter((function(t){return null!==t.value}))).attr("d",e):a.datum(r).attr("d",e),n.lineColor[r.getId()]&&a.style("stroke",n.lineColor[r.getId()])}}function Po(t,e,n,r,a){if(!e||!n)return;let i=null;if("left"===a?i=t.leftYScale:"right"===a&&(i=t.rightYScale),n.showPoint[r.getId()]){let a=t.dataArea.selectAll("dot").data(Array.from(r).filter((function(t){return null!==t.value}))).enter().append("circle").attr("r",n.pointSize[r.getId()]).attr("cx",(function(e){return t.xScale(e.date)})).attr("cy",(function(t){return i(t.value)})).attr("date",(function(t){return Ca("%y-%m-%d")(t.date)})).attr("value",(function(t){if(null!==t.value)return Number.isInteger(t.value)?t.value.toFixed(0):t.value.toFixed(2)})).attr("valueType",tl[r.valueType]).attr("class","tracker-dot");n.pointColor[r.getId()]&&(a.style("fill",n.pointColor[r.getId()]),n.pointBorderColor[r.getId()]&&n.pointBorderWidth[r.getId()]>0&&(a.style("stroke",n.pointBorderColor[r.getId()]),a.style("stroke-width",n.pointBorderWidth[r.getId()]))),n.allowInspectData&&function(t,e,n){let r=e.dataArea.append("svg").style("opacity",0),a=r.append("rect").attr("x",0).attr("y",0),i=r.append("text"),l=i.append("tspan").attr("class","tracker-tooltip-label"),o=i.append("tspan").attr("class","tracker-tooltip-label"),u=3,s=3;t.on("mouseenter",(function(t){const[e,f]=function(t,e){if(t=function(t){let e;for(;e=t.sourceEvent;)t=e;return t}(t),void 0===e&&(e=t.currentTarget),e){var n=e.ownerSVGElement||e;if(n.createSVGPoint){var r=n.createSVGPoint();return r.x=t.clientX,r.y=t.clientY,[(r=r.matrixTransform(e.getScreenCTM().inverse())).x,r.y]}if(e.getBoundingClientRect){var a=e.getBoundingClientRect();return[t.clientX-a.left-e.clientLeft,t.clientY-a.top-e.clientTop]}}return[t.pageX,t.pageY]}(t);let c=0,h=0,d="date: "+qt(this).attr("date"),g=lo(d,"tracker-tooltip-label");l.text(d),g.width>c&&(c=g.width),h+=g.height,l.attr("x",u).attr("y",h);let p="value: ",y=qt(this).attr("valueType"),m=qt(this).attr("value");if("Time"===y){p+=window.moment("00:00","HH:mm",!0).add(parseFloat(m),"seconds").format("HH:mm"),o.text(p)}else p+=m,o.text(p);let v=lo(p,"tracker-tooltip-label");v.width>c&&(c=v.width),h+=s+v.height,o.attr("x",u).attr("y",h),c+=2*u,h+=2*s,i.attr("width",c).attr("height",h),a.attr("width",c).attr("height",h).attr("class","tracker-tooltip");let w=e,x=f,A=12,b=12;w=e+A+c>n.dataAreaSize.width?e-c-A:e+A,x=f-b-h<0?f+b:f-b-h,r.attr("x",w).attr("y",x),r.transition().duration(200).style("opacity",1)})).on("mouseleave",(function(){r.transition().duration(500).style("opacity",0)}))}(a,t,e)}}function zo(t,e,n,r,a,i,l){if(!e||!n)return;let o=e.dataAreaSize.width/r.getLength(),u=o;o-1>0&&(u=o-1),u/=l;let s=null;"left"===a?s=t.leftYScale:"right"===a&&(s=t.rightYScale);let f=t.dataArea.selectAll("bar").data(Array.from(r).filter((function(t){return null!==t.value}))).enter().append("rect").attr("x",(function(e,n){if(0===n){let n=i+1-l/2;if(n<1)return t.xScale(e.date)-o/2+i*u+n*u}return t.xScale(e.date)-o/2+i*u})).attr("y",(function(t){return s(Math.max(t.value,0))})).attr("width",(function(t,e){if(0===e){let t=i+1-l/2;return t<0?0:t<1?u*t:u}if(e===r.getLength()-1){let t=1-(i+1-l/2);return t<0?0:t<1?u*t:u}return u})).attr("height",(function(t){if(null!==t.value)return Math.abs(s(t.value)-s(0))})).attr("class","tracker-bar");n.barColor[r.getId()]&&f.style("fill",n.barColor[r.getId()])}function Oo(t,e,n){let r=t.svg;t.graphArea;let a=t.dataArea,i=t.title,l=t.xAxis,o=t.leftYAxis,u=t.rightYAxis,s=0;i&&(s=parseFloat(i.attr("height")));let f=parseFloat(l.attr("height")),c=0;o&&(c=parseFloat(o.attr("width")));let h=0;u&&(h=parseFloat(u.attr("width")));let d=e.datasets,g=d.getXDatasetIds(),p=d.getNames(),y=p.map((function(t){return lo(t,"tracker-legend-label")})),m=0,w=0;for(let t=0;t<p.length;t++)g.includes(t)||y[t].width>w&&(w=y[t].width,m=t);let x=w/p[m].length,A=y[m].height,b=p.length-g.length,D=2*x,k=A,M=2*x,T=0,C=0;"vertical"===n.legendOrientation?(T=3*D+M+w,C=(b+1)*k):"horizontal"===n.legendOrientation&&(T=(2*D+M)*b+D+v(y,(function(t,e){return g.includes(e)?0:t.width})),C=k+A);let F=0,_=0;if("top"===n.legendPosition)F=c+e.dataAreaSize.width/2-T/2,_=s,oo(r,0,C+k),uo(a,0,C+k);else if("bottom"===n.legendPosition)F=c+e.dataAreaSize.width/2-T/2,_=s+e.dataAreaSize.height+f+k,oo(r,0,C+k);else if("left"===n.legendPosition)F=0,_=s+e.dataAreaSize.height/2-C/2,oo(r,T+D,0),uo(a,T+D,0);else{if("right"!==n.legendPosition)return;F=e.dataAreaSize.width+c+h+D,_=s+e.dataAreaSize.height/2-C/2,oo(r,T+D,0)}let S=t.graphArea.append("g").attr("id","legend").attr("transform","translate("+F+","+_+")"),E=S.append("rect").attr("class","tracker-legend").attr("width",T).attr("height",C);n.legendBgColor&&E.style("fill",n.legendBgColor),n.legendBorderColor&&E.style("stroke",n.legendBorderColor);let B=D,N=A,L=B+D+M,V=N;if("vertical"===n.legendOrientation){n.GetGraphType()===Ki.Line?(S.selectAll("markers").data(p).enter().append("line").attr("x1",B).attr("x2",B+M).attr("y1",(function(t,e){let n=g.filter((t=>t<e)).length;return N+(e-=n)*k})).attr("y2",(function(t,e){let n=g.filter((t=>t<e)).length;return N+(e-=n)*k})).style("stroke",(function(t,e){if(!g.includes(e))return n.lineColor[e]})),S.selectAll("markers").data(p).enter().append("circle").attr("cx",B+M/2).attr("cy",(function(t,e){let n=g.filter((t=>t<e)).length;return N+(e-=n)*k})).attr("r",(function(t,e){if(!g.includes(e))return n.showPoint[e]?n.pointSize[e]:0})).style("fill",(function(t,e){if(!g.includes(e))return n.pointColor[e]}))):n.GetGraphType()===Ki.Bar&&S.selectAll("markers").data(p).enter().append("rect").attr("x",B).attr("y",(function(t,e){let n=g.filter((t=>t<e)).length;return N+(e-=n)*k-A/2})).attr("width",M).attr("height",A).style("fill",(function(t,e){if(!g.includes(e))return n.barColor[e]}));let t=S.selectAll("labels").data(p).enter().append("text").attr("x",L).attr("y",(function(t,e){let n=g.filter((t=>t<e)).length;return V+(e-=n)*k})).text((function(t,e){return g.includes(e)?"":t})).style("alignment-baseline","middle").attr("class","tracker-legend-label");n.GetGraphType()===Ki.Line?t.style("fill",(function(t,e){if(!g.includes(e))return n.lineColor[e]})):n.GetGraphType()===Ki.Bar&&t.style("fill",(function(t,e){if(!g.includes(e))return n.barColor[e]}))}else if("horizontal"===n.legendOrientation){n.GetGraphType()===Ki.Line?(S.selectAll("markers").data(p).enter().append("line").attr("x1",(function(t,e){let n=D;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=M+D+r.width+D}return n})).attr("x2",(function(t,e){let n=D+M;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=D+r.width+D+M}return n})).attr("y1",N).attr("y2",N).style("stroke",(function(t,e){if(!g.includes(e))return n.lineColor[e]})),S.selectAll("markers").data(p).enter().append("circle").attr("cx",(function(t,e){let n=D+M/2;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=M/2+D+r.width+D+M/2}return n})).attr("cy",N).attr("r",(function(t,e){if(!g.includes(e))return n.showPoint[e]?n.pointSize[e]:0})).style("fill",(function(t,e){if(!g.includes(e))return n.pointColor[e]}))):n.GetGraphType()===Ki.Bar&&S.selectAll("markers").data(p.filter(((t,e)=>!g.includes(e)))).enter().append("rect").attr("x",(function(t,e){let n=D;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=M+D+r.width+D}return n})).attr("y",N-A/2).attr("width",M).attr("height",A).style("fill",(function(t,e){if(!g.includes(e))return n.barColor[e]}));let t=S.selectAll("labels").data(p).enter().append("text").attr("x",(function(t,e){let n=D+M+D;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=r.width+D+M+D}return n})).attr("y",V).text((function(t,e){return g.includes(e)?"":t})).style("alignment-baseline","middle").attr("class","tracker-legend-label");n.GetGraphType()===Ki.Line?t.style("fill",(function(t,e){if(!g.includes(e))return n.lineColor[e]})):n.GetGraphType()===Ki.Bar&&t.style("fill",(function(t,e){if(!g.includes(e))return n.barColor[e]}))}}function Uo(t,e,n){if(!e||!n)return;if(!n.title)return;let r=lo(n.title,"tracker-title"),a=t.graphArea.append("text").text(n.title).attr("id","title").attr("transform","translate("+e.dataAreaSize.width/2+","+r.height/2+")").attr("height",r.height).attr("class","tracker-title");t.title=a,oo(t.svg,0,r.height),oo(t.graphArea,0,r.height),uo(t.dataArea,0,r.height)}function Ro(t,e,n){let r=qt(t),a=e.svg,i=parseFloat(a.attr("width")),l=parseFloat(a.attr("height"));a.attr("width",null).attr("height",null).attr("viewBox",`0 0 ${i} ${l}`).attr("preserveAspectRatio","xMidYMid meet"),n.fitPanelWidth?r.style("width","100%"):(r.style("width",(i*n.fixedScale).toString()+"px"),r.style("height",(l*n.fixedScale).toString()+"px"))}function Wo(t,e){let n={},r=qt(t).append("svg").attr("id","svg").attr("width",e.dataAreaSize.width+e.margin.left+e.margin.right).attr("height",e.dataAreaSize.height+e.margin.top+e.margin.bottom);n.svg=r;let a=r.append("g").attr("id","graphArea").attr("transform","translate("+e.margin.left+","+e.margin.top+")").attr("width",e.dataAreaSize.width+e.margin.right).attr("height",e.dataAreaSize.height+e.margin.bottom);n.graphArea=a;let i=a.append("g").attr("id","dataArea").attr("width",e.dataAreaSize.width).attr("height",e.dataAreaSize.height);return n.dataArea=i,n}function $o(t,e,n){if(!e||!n)return;let r=Wo(t,e);Uo(r,e,n),Vo(r,e,n);let a=[],i=[],l=e.datasets.getXDatasetIds();for(let t=0;t<n.yAxisLocation.length;t++){if(l.includes(t))continue;let e=n.yAxisLocation[t];"left"===e.toLowerCase()?a.push(t):"right"===e.toLocaleLowerCase()&&i.push(t)}let o=Io(r,e,n,"left",a);if("string"==typeof o)return o;if(r.leftYAxis&&r.leftYScale)for(let t of a){let a=e.datasets.getDatasetById(t);a.getQuery().usedAsXDataset||(Yo(r,e,n,a,"left"),Po(r,e,n,a,"left"))}let u=Io(r,e,n,"right",i);if("string"==typeof u)return u;if(r.rightYAxis&&r.rightYScale)for(let t of i){let a=e.datasets.getDatasetById(t);a.getQuery().usedAsXDataset||(Yo(r,e,n,a,"right"),Po(r,e,n,a,"right"))}n.showLegend&&Oo(r,e,n),Ro(t,r,e)}function Ho(t,e,n){if(!e||!n)return;let r=Wo(t,e);Uo(r,e,n),Vo(r,e,n);let a=[],i=[],l=e.datasets.getXDatasetIds();for(let t=0;t<n.yAxisLocation.length;t++){if(l.includes(t))continue;let e=n.yAxisLocation[t];"left"===e.toLowerCase()?a.push(t):"right"===e.toLocaleLowerCase()&&i.push(t)}let o=Io(r,e,n,"left",a);if("string"==typeof o)return o;let u=a.length+i.length,s=0;if(r.leftYAxis&&r.leftYScale)for(let t of a){let a=e.datasets.getDatasetById(t);a.getQuery().usedAsXDataset||(zo(r,e,n,a,"left",s,u),s++)}let f=Io(r,e,n,"right",i);if("string"==typeof f)return f;if(r.rightYAxis&&r.rightYScale)for(let t of i){let a=e.datasets.getDatasetById(t);a.getQuery().usedAsXDataset||(zo(r,e,n,a,"right",s,u),s++)}n.showLegend&&Oo(r,e,n),Ro(t,r,e)}function jo(t){switch(t=t.trim().toLowerCase()){case"true":case"1":case"on":case"yes":return!0;case"false":case"0":case"off":case"no":return!1}return null}function Xo(t){return"tag"===t.toLowerCase()||"text"===t.toLowerCase()||"frontmatter"===t.toLowerCase()||"wiki"===t.toLowerCase()||"wiki.link"===t.toLowerCase()||"wiki.display"===t.toLowerCase()||"dvfield"===t.toLowerCase()||"table"===t.toLowerCase()||"filemeta"===t.toLowerCase()||"task"===t.toLowerCase()||"task.all"===t.toLowerCase()||"task.done"===t.toLowerCase()||"task.notdone"===t.toLowerCase()}function qo(t){return"left"===t||"right"===t||"none"===t}function Go(t){return!0}function Qo(t){const e="::::::tracker::::::";let n=t.split("\\,").join(e).split(",");for(let t=0;t<n.length;t++)n[t]=n[t].split(e).join(",");return n}function Zo(t,e,n,r,a){let i=[],l="",o=0;for(;n>i.length;)i.push(r);if(null==e);else if("object"==typeof e&&null!==e){if(Array.isArray(e)){if(e.length>n)return l="Too many inputs for parameter '"+t+"'",l;if(0===e.length)return l="Empty array not allowd for "+t,l;for(let n=0;n<i.length;n++)if(n<e.length){let a=e[n],u=null;if(n>0&&(u=e[n-1].trim()),"string"==typeof a){if(a=a.trim(),""!==a){l="Invalid inputs for "+t;break}i[n]=null!==u?u:r}else{if("boolean"!=typeof a){l="Invalid inputs for "+t;break}i[n]=a,o++}}else{let t=e[e.length-1];i[n]=o>0?t:r}}}else if("string"==typeof e){let a=Qo(e);if(a.length>1){if(a.length>n)return l="Too many inputs for parameter '"+t+"'",l;for(let e=0;e<i.length;e++)if(e<a.length){let n=a[e].trim(),u=null;if(e>0&&(u=jo(a[e-1].trim())),""===n)i[e]=null!==u?u:r;else{let r=jo(n);if(null===r){l="Invalid inputs for "+t;break}i[e]=r,o++}}else{let t=jo(a[a.length-1].trim());i[e]=o>0&&null!==t?t:r}}else if(""===e);else{let n=jo(e);if(null!==n){i[0]=n,o++;for(let t=1;t<i.length;t++)i[t]=n}else l="Invalid inputs for "+t}}else if("boolean"==typeof e){i[0]=e,o++;for(let t=1;t<i.length;t++)i[t]=e}else l="Invalid inputs for "+t;return a||0!==o||(l="No valid input for "+t),""!==l?l:i}function Jo(t,e,n,r,a){let i=[],l="",o=0;for(;n>i.length;)i.push(r);if(null==e);else if("object"==typeof e&&null!==e){if(Array.isArray(e)){if(e.length>n)return l="Too many inputs for parameter '"+t+"'",l;if(0===e.length)return l="Empty array not allowd for "+t,l;for(let n=0;n<i.length;n++)if(n<e.length){let a=e[n],u=null;if(n>0&&(u=e[n-1].trim()),"string"==typeof a){if(a=a.trim(),""!==a){l="Invalid inputs for "+t;break}i[n]=null!==u?u:r}else{if("number"!=typeof a){l="Invalid inputs for "+t;break}i[n]=a,o++}}else{let t=e[e.length-1];i[n]=o>0?t:r}}}else if("string"==typeof e){let a=Qo(e);if(a.length>1){if(a.length>n)return l="Too many inputs for parameter '"+t+"'",l;for(let n=0;n<i.length;n++)if(n<a.length){let e=a[n].trim(),u=null;if(n>0&&(u=io(a[n-1].trim()).value),""===e)null!==u&&Number.isNumber(u)?i[n]=u:i[n]=r;else{let r=io(e).value;if(null===r){l="Invalid inputs for "+t;break}i[n]=r,o++}}else{let t=io(a[e.length-1].trim()).value;i[n]=o>0&&null!==t?t:r}}else if(""===e);else{let n=io(e).value;if(null!==n){i[0]=n,o++;for(let t=1;t<i.length;t++)i[t]=n}else l="Invalid inputs for "+t}}else if("number"==typeof e)if(Number.isNumber(e)){i[0]=e,o++;for(let t=1;t<i.length;t++)i[t]=e}else l="Invalid inputs for "+t;else l="Invalid inputs for "+t;return a||0!==o||(l="No valid input for "+t),""!==l?l:i}function Ko(t,e){return"string"==typeof t?ao(t):"number"==typeof t?t.toString():e}function tu(t,e,n,r,a,i){let l=[],o="",u=0;for(;n>l.length;)l.push(r);if(null==e);else if("object"==typeof e&&null!==e){if(Array.isArray(e)){if(e.length>n)return o="Too many inputs for parameter '"+t+"'",o;if(0===e.length)return o="Empty array not allowd for "+t,o;for(let n=0;n<l.length;n++)if(n<e.length){let i=e[n],s=null;if(n>0&&(s=e[n-1].trim()),"string"!=typeof i){o="Invalid inputs for "+t;break}if(i=i.trim(),""===i)l[n]=null!==s?s:r;else if(a){if(!a(i)){o="Invalid inputs for "+t;break}l[n]=i,u++}else l[n]=i,u++}else{let t=e[e.length-1].trim();l[n]=u>0?t:r}}}else if("string"==typeof e){let i=Qo(e);if(i.length>1){if(i.length>n)return o="Too many inputs for parameter '"+t+"'",o;for(let e=0;e<l.length;e++)if(e<i.length){let n=i[e].trim(),s=null;if(e>0&&(s=i[e-1].trim()),""===n)l[e]=null!==s?s:r;else if(a){if(!a(n)){o="Invalid inputs for "+t;break}l[e]=n,u++}else l[e]=n,u++}else{let t=i[i.length-1].trim();l[e]=u>0?t:r}}else if(""===e);else if(a)if(a(e)){l[0]=e,u++;for(let t=1;t<l.length;t++)l[t]=e}else o="Invalid inputs for "+t;else{l[0]=e,u++;for(let t=1;t<l.length;t++)l[t]=e}}else if("number"==typeof e){let n=e.toString();if(a)if(a(n)){l[0]=n,u++;for(let t=1;t<l.length;t++)l[t]=n}else o="Invalid inputs for "+t;else{l[0]=n,u++;for(let t=1;t<l.length;t++)l[t]=n}}else o="Invalid inputs for "+t;if(i||0!==u||(o="No valid input for "+t),""!==o)return o;for(let t=0;t<l.length;t++)l[t]=ao(l[t]);return l}function eu(t,e){let n=[];if(null==e)return n;if("object"==typeof e){if(Array.isArray(e))for(let r of e)if("string"==typeof r){let e=parseFloat(r);if(!Number.isNumber(e)){return`Parameter '${t}' accepts only numbers`}n.push(e)}}else if("string"==typeof e){let r=Qo(e);if(r.length>1)for(let e of r){let r=parseFloat(e.trim());if(Number.isNaN(r)){return`Parameter '${t}' accepts only numbers`}n.push(r)}else{if(""===e){return`Empty ${t} is not allowed.`}{let r=parseFloat(e);if(!Number.isNumber(r)){return`Parameter '${t}' accepts only numbers`}n.push(r)}}}else{if("number"!=typeof e){return`Invalid ${t}`}n.push(e)}return n}function nu(t,e){let n=[];if(null==e)return n;if("object"==typeof e){if(Array.isArray(e))for(let t of e)"string"==typeof t&&n.push(t.trim())}else{if("string"!=typeof e){return`Invalid ${t}`}{let r=Qo(e);if(r.length>1)for(let t of r)n.push(t.trim());else{if(""===e){return`Empty ${t} is not allowed.`}n.push(e)}}}for(let t=0;t<n.length;t++)n[t]=ao(n[t]);return n}function ru(t,e){t&&(e.title=Ko(null==t?void 0:t.title,e.title),e.xAxisLabel=Ko(null==t?void 0:t.xAxisLabel,e.xAxisLabel),e.xAxisColor=Ko(null==t?void 0:t.xAxisColor,e.xAxisColor),e.xAxisLabelColor=Ko(null==t?void 0:t.xAxisLabelColor,e.xAxisLabelColor),"boolean"==typeof t.allowInspectData&&(e.allowInspectData=t.allowInspectData),"boolean"==typeof t.showLegend&&(e.showLegend=t.showLegend),"string"==typeof t.legendPosition?e.legendPosition=t.legendPosition:e.legendPosition="bottom","string"==typeof t.legendOrientation?e.legendOrientation=t.legendOrientation:"top"===e.legendPosition||"bottom"===e.legendPosition?e.legendOrientation="horizontal":"left"===e.legendPosition||"right"===e.legendPosition?e.legendOrientation="vertical":e.legendOrientation="horizontal",e.legendBgColor=Ko(null==t?void 0:t.legendBgColor,e.legendBgColor),e.legendBorderColor=Ko(null==t?void 0:t.legendBorderColor,e.legendBorderColor));let n=tu("yAxisLabel",null==t?void 0:t.yAxisLabel,2,"Value",null,!0);if("string"==typeof n)return n;if(n.length>2)return"yAxisLabel accepts not more than two values for left and right y-axes";e.yAxisLabel=n;let r=tu("yAxisColor",null==t?void 0:t.yAxisColor,2,"",Go,!0);if("string"==typeof r)return r;if(r.length>2)return"yAxisColor accepts not more than two values for left and right y-axes";e.yAxisColor=r;let a=tu("yAxisLabelColor",null==t?void 0:t.yAxisLabelColor,2,"",Go,!0);if("string"==typeof a)return a;if(a.length>2)return"yAxisLabelColor accepts not more than two values for left and right y-axes";e.yAxisLabelColor=a;let i=tu("yAxisUnit",null==t?void 0:t.yAxisUnit,2,"",null,!0);if("string"==typeof i)return i;if(i.length>2)return"yAxisUnit accepts not more than two values for left and right y-axes";e.yAxisUnit=i,e.xAxisTickInterval=Ko(null==t?void 0:t.xAxisTickInterval,e.xAxisTickInterval);let l=tu("yAxisTickInterval",null==t?void 0:t.yAxisTickInterval,2,null,null,!0);if("string"==typeof l)return l;if(l.length>2)return"yAxisTickInterval accepts not more than two values for left and right y-axes";e.yAxisTickInterval=l,e.xAxisTickLabelFormat=Ko(null==t?void 0:t.xAxisTickLabelFormat,e.xAxisTickLabelFormat);let o=tu("yAxisTickLabelFormat",null==t?void 0:t.yAxisTickLabelFormat,2,null,null,!0);if("string"==typeof o)return o;if(o.length>2)return"yAxisTickLabelFormat accepts not more than two values for left and right y-axes";e.yAxisTickLabelFormat=o;let u=Jo("yMin",null==t?void 0:t.yMin,2,null,!0);if("string"==typeof u)return u;if(u.length>2)return"yMin accepts not more than two values for left and right y-axes";e.yMin=u;let s=Jo("yMax",null==t?void 0:t.yMax,2,null,!0);if("string"==typeof s)return s;if(s.length>2)return"yMax accepts not more than two values for left and right y-axes";e.yMax=s;let f=Zo("reverseYAxis",null==t?void 0:t.reverseYAxis,2,!1,!0);return"string"==typeof f?f:f.length>2?"reverseYAxis accepts not more than two values for left and right y-axes":void(e.reverseYAxis=f)}function au(t){let e=[];if(null!==t){const n=Object.keys(t);for(let t of n)e.push(t.toString())}return e}function iu(t,e){return Gl(ql(t.basename,e.dateFormatPrefix,e.dateFormatSuffix),e.dateFormat)}function lu(t,e,n){let r=window.moment(""),a=t.frontmatter;if(a&&no(a,e.getTarget())){let t=no(a,e.getTarget());"string"==typeof t&&(t=ql(t,n.dateFormatPrefix,n.dateFormatSuffix),r=Gl(t,n.dateFormat))}return r}function ou(t,e,n){let r,a=window.moment(""),i=new RegExp(e,"gm");for(;r=i.exec(t);)if(void 0!==r.groups&&void 0!==r.groups.value){let t=r.groups.value.trim();if(t=ql(t,n.dateFormatPrefix,n.dateFormatSuffix),a=Gl(t,n.dateFormat),a.isValid())return a}return a}function uu(t,e,n){window.moment("");let r=e.getTarget();return e.getParentTarget()&&(r=e.getParentTarget()),ou(t,"(^|\\s)#"+r+"(\\/[\\w-]+)*(:(?<value>[\\d\\.\\/-]*)[a-zA-Z]*)?([\\.!,\\?;~-]*)?(\\s|$)",n)}function su(t,e,n){return window.moment(""),ou(t,e.getTarget(),n)}function fu(t,e,n){window.moment("");let r=e.getTarget();return e.getParentTarget()&&(r=e.getParentTarget()),r=r.replace("-","[\\s\\-]"),ou(t,"(^| |\\t)\\*{0,2}"+r+"\\*{0,2}(::[ |\\t]*(?<value>[\\d\\.\\/\\-\\w,@; \\t:]*))(\\r\\?\\n|\\r|$)",n)}function cu(e,n,r){let a=window.moment("");if(e&&e instanceof t.TFile){let t=n.getTarget();if("cDate"===t){a=to(e.stat.ctime,r.dateFormat)}else if("mDate"===t){a=to(e.stat.mtime,r.dateFormat)}else"name"===t&&(a=iu(e,r))}return a}function hu(t,e,n){window.moment("");let r=e.getType(),a=e.getTarget();return a=r===Ji.Task?"\\[[\\sx]\\]\\s"+a:r===Ji.TaskDone?"\\[x\\]\\s"+a:r===Ji.TaskNotDone?"\\[\\s\\]\\s"+a:"\\[[\\sx]\\]\\s"+a,ou(t,a,n)}function du(t,e,n,r){if(t.has(e)){t.get(e).push({query:n,value:r})}else{let a=new Array;a.push({query:n,value:r}),t.set(e,a)}}function gu(t,e,n,r,a,i){let l,o=new RegExp(e,"gm"),u=0,s=!1;for(;l=o.exec(t);)if(i.ignoreAttachedValue[n.getId()])u+=i.constValue[n.getId()],s=!0,n.addNumTargets();else if(void 0!==l.groups&&void 0!==l.groups.value){let t=l.groups.value.trim().split(n.getSeparator());if(!t)continue;if(1===t.length){let e=io(t[0].trim(),i.textValueMap);null!==e.value&&(e.type===tl.Time?(u=e.value,s=!0,n.valueType=tl.Time,n.addNumTargets()):i.ignoreZeroValue[n.getId()]&&0===e.value||(u+=e.value,s=!0,n.addNumTargets()))}else if(t.length>n.getAccessor()&&n.getAccessor()>=0){let e=io(t[n.getAccessor()].trim(),i.textValueMap);null!==e.value&&(e.type===tl.Time?(u=e.value,s=!0,n.valueType=tl.Time,n.addNumTargets()):(u+=e.value,s=!0,n.addNumTargets()))}}else u+=i.constValue[n.getId()],s=!0,n.addNumTargets();if(s){return du(r,a.get(i.xDataset[n.getId()]),n,u),!0}return!1}function pu(e,n,r,a,i,l){if(e&&e instanceof t.TFile){let t=r.getTarget(),o=l.get(a.xDataset[r.getId()]);if("cDate"===t){let t=e.stat.ctime;return r.valueType=tl.Date,r.addNumTargets(),du(i,o,r,t),!0}if("mDate"===t){let t=e.stat.mtime;return r.valueType=tl.Date,r.addNumTargets(),du(i,o,r,t),!0}if("size"===t){let t=e.stat.size;return r.addNumTargets(),du(i,o,r,t),!0}if("numWords"===t){return du(i,o,r,function(t){t=so(t);var e=new RegExp(["(?:[0-9]+(?:(?:,|\\.)[0-9]+)*|[\\-"+/A-Za-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC/.source+"])+",/[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u4E00-\u9FD5]{1}/.source].join("|"),"g");return(t.match(e)||[]).length}(n)),!0}if("numChars"===t){let t=n.length;return r.addNumTargets(),du(i,o,r,t),!0}if("numSentences"===t){let t=function(t){return(((t=so(t))||"").match(/[^.。!?\s][^.。!?]*(?:[.!?](?!['"“”「」『』]?\s|$)[^.。!?]*)*[.。!?]?['"”」』]?(?=\s||$)/gm)||[]).length}(n);return r.addNumTargets(),du(i,o,r,t),!0}if("name"===t){let t=0,n=!1,l=io(e.basename,a.textValueMap);null!==l.value&&(l.type===tl.Time?(t=l.value,n=!0,r.valueType=tl.Time,r.addNumTargets()):a.ignoreZeroValue[r.getId()]&&0===l.value||(t+=l.value,n=!0,r.addNumTargets()));let u=null;if(n&&(u=t),null!==u)return du(i,o,r,u),!0}}return!1}const yu={folder:"/",dateFormat:"YYYY-MM-DD"};class mu extends t.PluginSettingTab{constructor(t,e){super(t,e),this.plugin=e}display(){let{containerEl:n}=this;n.empty(),new t.Setting(n).setName("Default folder location").setDesc("Files in this folder will be parsed and used as input data of the tracker plugin.\nYou can also override it using 'folder' argument in the tracker codeblock.").addText((t=>t.setPlaceholder("Folder Path").setValue(this.plugin.settings.folder).onChange((t=>e(this,void 0,void 0,(function*(){this.plugin.settings.folder=t,yield this.plugin.saveSettings()})))))),new t.Setting(n).setName("Default date format").setDesc("This format is used to parse the date in your diary title.\nYou can also override it using 'dateFormat' argument in the tracker codeblock.").addText((t=>t.setPlaceholder("YYYY-MM-DD").setValue(this.plugin.settings.dateFormat).onChange((t=>e(this,void 0,void 0,(function*(){this.plugin.settings.dateFormat=t,yield this.plugin.saveSettings()}))))))}}class vu extends t.Plugin{onload(){return e(this,void 0,void 0,(function*(){console.log("loading obsidian-tracker plugin"),yield this.loadSettings(),this.addSettingTab(new mu(this.app,this)),this.registerMarkdownCodeBlockProcessor("tracker",this.postprocessor.bind(this)),this.addCommand({id:"add-line-chart-tracker",name:"Add Line Chart Tracker",callback:()=>this.addCodeBlock(Ki.Line)}),this.addCommand({id:"add-bar-chart-tracker",name:"Add Bar Chart Tracker",callback:()=>this.addCodeBlock(Ki.Bar)}),this.addCommand({id:"add-summary-tracker",name:"Add Summary Tracker",callback:()=>this.addCodeBlock(Ki.Summary)})}))}loadSettings(){return e(this,void 0,void 0,(function*(){this.settings=Object.assign({},yu,yield this.loadData())}))}saveSettings(){return e(this,void 0,void 0,(function*(){yield this.saveData(this.settings)}))}renderErrorMessage(t,e,n){!function(t,e){qt(t).select("#svg").remove(),qt(t).append("div").text(e).style("background-color","white").style("margin-bottom","20px").style("padding","10px").style("color","red")}(e,t),n.appendChild(e)}onunload(){console.log("unloading obsidian-tracker plugin")}getFilesInFolder(e,n=!0){let r=[];for(let a of e.children)a instanceof t.TFile?"md"===a.extension&&r.push(a):a instanceof t.TFolder&&n&&(r=r.concat(this.getFilesInFolder(a)));return r}getFiles(n,r,a=!0){return e(this,void 0,void 0,(function*(){if(!n)return;let e=r.folder,a=r.specifiedFilesOnly,i=r.file,l=r.fileContainsLinkedFiles,o=r.fileMultiplierAfterLink;if(!a){let r=this.app.vault.getAbstractFileByPath(t.normalizePath(e));if(r&&r instanceof t.TFolder){let t=this.getFilesInFolder(r);for(let e of t)n.push(e)}}for(let e of i){let r=e;r.endsWith(".md")||(r+=".md"),r=t.normalizePath(r);let a=this.app.vault.getAbstractFileByPath(r);a&&a instanceof t.TFile&&n.push(a)}let u=1,s=!0;""===o?s=!1:/^[0-9]+$/.test(o)?(u=parseFloat(o),s=!1):/\?<value>/.test(o)||(s=!1);for(let e of l){e.endsWith(".md")||(e+=".md");let a=this.app.vault.getAbstractFileByPath(t.normalizePath(e));if(a&&a instanceof t.TFile){let i=this.app.metadataCache.getFileCache(a),l=(yield this.app.vault.adapter.read(a.path)).split(/\r\n|[\n\v\f\r\x85\u2028\u2029]/);if(!(null==i?void 0:i.links))continue;for(let a of i.links){if(!a)continue;let i=this.app.metadataCache.getFirstLinkpathDest(a.link,e);if(i&&i instanceof t.TFile){if(s){let t=a.position.end.line;if(t>=0&&t<l.length){let e=l[t].split(a.original);if(2===e.length){let t,n=e[1].trim(),a=new RegExp(o,"gm");for(;t=a.exec(n);)if(void 0!==t.groups&&void 0!==t.groups.value){let e=io(t.groups.value.trim(),r.textValueMap);if(null!==e.value){u=e.value;break}}}}}for(let t=0;t<u;t++)n.push(i)}}}}}))}postprocessor(n,r,a){return e(this,void 0,void 0,(function*(){const a=document.createElement("div");let i=n.trim(),l=this.app.vault.getConfig("tabSize"),o=Array(l).fill(" ").join("");i=i.replace(/\t/gm,o);let u=function(e,n){let r;try{r=t.parseYaml(e)}catch(t){let e="Error parsing YAML";return console.log(t),e}if(!r)return"Error parsing YAML";let a=au(r),i="";if(!a.includes("searchTarget"))return"Parameter 'searchTarget' not found in YAML";let l=[];if("object"==typeof r.searchTarget&&null!==r.searchTarget){if(Array.isArray(r.searchTarget))for(let t of r.searchTarget)if("string"==typeof t){if(""===t){i="Empty search target is not allowed.";break}l.push(t)}}else if("string"==typeof r.searchTarget){let t=Qo(r.searchTarget);if(t.length>1)for(let e of t){if(e=e.trim(),""===e){i="Empty search target is not allowed.";break}l.push(e)}else""===r.searchTarget?i="Empty search target is not allowed.":l.push(r.searchTarget)}else i="Invalid search target (searchTarget)";for(let t=0;t<l.length;t++)l[t]=ao(l[t]);if(""!==i)return i;let o=l.length;if(!a.includes("searchType"))return"Parameter 'searchType' not found in YAML";let u=[],s=tu("searchType",r.searchType,o,"",Xo,!1);if("string"==typeof s)return s;for(let t of s)switch(t.toLowerCase()){case"tag":u.push(Ji.Tag);break;case"frontmatter":u.push(Ji.Frontmatter);break;case"wiki":u.push(Ji.Wiki);break;case"wiki.link":u.push(Ji.WikiLink);break;case"wiki.display":u.push(Ji.WikiDisplay);break;case"text":u.push(Ji.Text);break;case"dvfield":u.push(Ji.dvField);break;case"table":u.push(Ji.Table);break;case"filemeta":u.push(Ji.FileMeta);break;case"task":case"task.all":u.push(Ji.Task);break;case"task.done":u.push(Ji.TaskDone);break;case"task.notdone":u.push(Ji.TaskNotDone)}if(u.includes(Ji.Table)&&u.filter((t=>t!==Ji.Table)).length>0)return"searchType 'table' doestn't work with other types for now";let f=[],c=tu("separator",r.separator,o,"",null,!0);if("string"==typeof c)return c;f=c.map((t=>"comma"===t||"\\,"===t?",":t));let h=Jo("xDataset",r.xDataset,o,-1,!0);if("string"==typeof h)return h;let d=h.map((t=>t<0||t>=o?-1:t)),g=[];for(let t=0;t<l.length;t++){let e=new _l(g.length,u[t],l[t]);e.setSeparator(f[t]),d.includes(t)&&(e.usedAsXDataset=!0),g.push(e)}let p=new Bl(g),y=au(p),m=["searchType","searchTarget","separator"],v=[],w=[],x=[],A=[],b=[],D=[],k=[];for(let t of a)/^line[0-9]*$/.test(t)&&(v.push(t),m.push(t)),/^bar[0-9]*$/.test(t)&&(w.push(t),m.push(t)),/^pie[0-9]*$/.test(t)&&(x.push(t),m.push(t)),/^summary[0-9]*$/.test(t)&&(A.push(t),m.push(t)),/^bullet[0-9]*$/.test(t)&&(k.push(t),m.push(t)),/^month[0-9]*$/.test(t)&&(b.push(t),m.push(t)),/^heatmap[0-9]*$/.test(t)&&(D.push(t),m.push(t));let M=[];for(let t of a)if(/^dataset[0-9]*$/.test(t)){let e=-1,n=t.replace("dataset","");if(e=""===n?0:parseFloat(n),g.some((t=>t.getId()===e)))return i="Duplicated dataset id for key '"+t+"'",i;M.push(t),m.push(t)}for(let t of a)if(!y.includes(t)&&!m.includes(t))return i="'"+t+"' is not an available key",i;if(0===v.length+w.length+x.length+A.length+k.length+b.length+D.length)return"No output parameter provided, please place line, bar, pie, month, bullet, or summary.";p.folder=Ko(null==r?void 0:r.folder,n.settings.folder),""===p.folder.trim()&&(p.folder=n.settings.folder);let T=n.app.vault.getAbstractFileByPath(t.normalizePath(p.folder));if(!(T&&T instanceof t.TFolder))return"Folder '"+p.folder+"' doesn't exist";if("string"==typeof r.file){let t=nu("file",r.file);if("string"==typeof t)return t;p.file=t}if("boolean"==typeof r.specifiedFilesOnly&&(p.specifiedFilesOnly=r.specifiedFilesOnly),"string"==typeof r.fileContainsLinkedFiles){let t=nu("fileContainsLinkedFiles",r.fileContainsLinkedFiles);if("string"==typeof t)return t;p.fileContainsLinkedFiles=t}p.fileMultiplierAfterLink=Ko(null==r?void 0:r.fileMultiplierAfterLink,p.fileMultiplierAfterLink);const C=r.dateFormat;if("string"==typeof r.dateFormat?""===r.dateFormat?p.dateFormat=n.settings.dateFormat:p.dateFormat=C:p.dateFormat=n.settings.dateFormat,p.dateFormatPrefix=Ko(null==r?void 0:r.dateFormatPrefix,p.dateFormatPrefix),p.dateFormatSuffix=Ko(null==r?void 0:r.dateFormatSuffix,p.dateFormatSuffix),"string"==typeof r.startDate){if(/^([\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)m$/.test(r.startDate))return"'m' for 'minute' is too small for parameter startDate, please use 'd' for 'day' or 'M' for month";let t=ql(r.startDate,p.dateFormatPrefix,p.dateFormatSuffix),e=null,n=!1;if(e=Jl(t,p.dateFormat),e?n=!0:(e=Gl(t,p.dateFormat),e.isValid()&&(n=!0)),!n||null===e)return"Invalid startDate, the format of startDate may not match your dateFormat "+p.dateFormat;p.startDate=e}if("string"==typeof r.endDate){if(/^([\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)m$/.test(r.endDate))return"'m' for 'minute' is too small for parameter endDate, please use 'd' for 'day' or 'M' for month";let t=ql(r.endDate,p.dateFormatPrefix,p.dateFormatSuffix),e=null,n=!1;if(e=Jl(t,p.dateFormat),e?n=!0:(e=Gl(t,p.dateFormat),e.isValid()&&(n=!0)),!n||null===e)return"Invalid endDate, the format of endDate may not match your dateFormat "+p.dateFormat;p.endDate=e}if(null!==p.startDate&&p.startDate.isValid()&&null!==p.endDate&&p.endDate.isValid()&&p.endDate<p.startDate)return"Invalid date range (startDate larger than endDate)";p.xDataset=d;let F=tu("datasetName",r.datasetName,o,"untitled",null,!0);if("string"==typeof F)return F;let _=0;for(let t=0;t<F.length;t++)p.xDataset.includes(t)||"untitled"===F[t]&&(F[t]="untitled"+_.toString(),_++);if(new Set(F).size!==F.length)return"Not enough dataset names or duplicated names";p.datasetName=F;let S=Jo("constValue",r.constValue,o,1,!0);if("string"==typeof S)return S;p.constValue=S;let E=Zo("ignoreAttachedValue",r.ignoreAttachedValue,o,!1,!0);if("string"==typeof E)return E;p.ignoreAttachedValue=E;let B=Zo("ignoreZeroValue",r.ignoreZeroValue,o,!1,!0);if("string"==typeof B)return B;p.ignoreZeroValue=B;let N=Zo("accum",r.accum,o,!1,!0);if("string"==typeof N)return N;p.accum=N;let L=Jo("penalty",r.penalty,o,null,!0);if("string"==typeof L)return L;p.penalty=L;let V=Jo("valueShift",r.valueShift,o,0,!0);if("string"==typeof V)return V;p.valueShift=V;let I=Jo("shiftOnlyValueLargerThan",r.shiftOnlyValueLargerThan,o,null,!0);if("string"==typeof I)return I;if(p.shiftOnlyValueLargerThan=I,void 0!==r.textValueMap){let t=au(r.textValueMap);for(let e of t){let t=e.trim();p.textValueMap[t]=r.textValueMap[t]}}"number"==typeof r.fixedScale&&(p.fixedScale=r.fixedScale),"boolean"==typeof r.fitPanelWidth&&(p.fitPanelWidth=r.fitPanelWidth);let Y=Jo("margin",r.margin,4,10,!0);if("string"==typeof Y)return Y;if(Y.length>4)return"margin accepts not more than four values for top, right, bottom, and left margins.";p.margin=new Wl(Y[0],Y[1],Y[2],Y[3]);for(let t of M){let e=new Nl,n=r[t],a=au(e),l=au(n);for(let t of l)if(!a.includes(t))return i="'"+t+"' is not an available key",i;let o=-1,u=t.replace("dataset","");o=""===u?0:parseFloat(u),e.id=o,e.name=Ko(null==n?void 0:n.name,e.name);let s=nu("xData",null==n?void 0:n.xData);if("string"==typeof s)return s;e.xData=s;let f=e.xData.length,c=nu("yData",null==n?void 0:n.yData);if("string"==typeof c)return c;if(e.yData=c,e.yData.length!==f)return"Number of elements in xData and yData not matched";p.customDataset.push(e)}for(let t of v){let e=new Vl,n=r[t],a=au(e),l=au(n);for(let t of l)if(!a.includes(t))return i="'"+t+"' is not an available key",i;let u=ru(n,e);if("string"==typeof u)return u;let s=tu("lineColor",null==n?void 0:n.lineColor,o,"",Go,!0);if("string"==typeof s)return s;e.lineColor=s;let f=Jo("lineWidth",null==n?void 0:n.lineWidth,o,1.5,!0);if("string"==typeof f)return f;e.lineWidth=f;let c=Zo("showLine",null==n?void 0:n.showLine,o,!0,!0);if("string"==typeof c)return c;e.showLine=c;let h=Zo("showPoint",null==n?void 0:n.showPoint,o,!0,!0);if("string"==typeof h)return h;e.showPoint=h;let d=tu("pointColor",null==n?void 0:n.pointColor,o,"#69b3a2",Go,!0);if("string"==typeof d)return d;e.pointColor=d;let g=tu("pointBorderColor",null==n?void 0:n.pointBorderColor,o,"#69b3a2",Go,!0);if("string"==typeof g)return g;e.pointBorderColor=g;let y=Jo("pointBorderWidth",null==n?void 0:n.pointBorderWidth,o,0,!0);if("string"==typeof y)return y;e.pointBorderWidth=y;let m=Jo("pointSize",null==n?void 0:n.pointSize,o,3,!0);if("string"==typeof m)return m;e.pointSize=m;let v=Zo("fillGap",null==n?void 0:n.fillGap,o,!1,!0);if("string"==typeof v)return v;e.fillGap=v;let w=tu("yAxisLocation",null==n?void 0:n.yAxisLocation,o,"left",qo,!0);if("string"==typeof w)return w;e.yAxisLocation=w,p.line.push(e)}for(let t of w){let e=new Il,n=r[t],a=au(e),l=au(n);for(let t of l)if(!a.includes(t))return i="'"+t+"' is not an available key",i;let u=ru(n,e);if("string"==typeof u)return u;let s=tu("barColor",null==n?void 0:n.barColor,o,"",Go,!0);if("string"==typeof s)return s;e.barColor=s;let f=tu("yAxisLocation",null==n?void 0:n.yAxisLocation,o,"left",qo,!0);if("string"==typeof f)return f;e.yAxisLocation=f,p.bar.push(e)}for(let t of x){let e=new Yl,n=r[t],a=au(e),l=au(n);for(let t of l)if(!a.includes(t))return i="'"+t+"' is not an available key",i;e.title=Ko(null==n?void 0:n.title,e.title);let o=nu("data",null==n?void 0:n.data);if("string"==typeof o)return o;e.data=o;let u=e.data.length,s=tu("dataColor",null==n?void 0:n.dataColor,u,null,Go,!0);if("string"==typeof s)return s;e.dataColor=s;let f=tu("dataName",null==n?void 0:n.dataName,u,"",null,!0);if("string"==typeof f)return f;e.dataName=f;let c=tu("label",null==n?void 0:n.label,u,"",null,!0);if("string"==typeof c)return c;e.label=c,"number"==typeof(null==n?void 0:n.hideLabelLessThan)&&(e.hideLabelLessThan=n.hideLabelLessThan);let h=tu("extLabel",null==n?void 0:n.extLabel,u,"",null,!0);if("string"==typeof h)return h;e.extLabel=h,"boolean"==typeof(null==n?void 0:n.showExtLabelOnlyIfNoLabel)&&(e.showExtLabelOnlyIfNoLabel=n.showExtLabelOnlyIfNoLabel),"number"==typeof(null==n?void 0:n.ratioInnerRadius)&&(e.ratioInnerRadius=n.ratioInnerRadius),"boolean"==typeof(null==n?void 0:n.showLegend)&&(e.showLegend=n.showLegend),e.legendPosition=Ko(null==n?void 0:n.legendPosition,"right");let d="horizontal";d="top"===e.legendPosition||"bottom"===e.legendPosition?"horizontal":"left"===e.legendPosition||"right"===e.legendPosition?"vertical":"horizontal",e.legendOrientation=Ko(null==n?void 0:n.legendOrientation,d),e.legendBgColor=Ko(null==n?void 0:n.legendBgColor,e.legendBgColor),e.legendBorderColor=Ko(null==n?void 0:n.legendBorderColor,e.legendBorderColor),p.pie.push(e)}for(let t of A){let e=new Pl,n=r[t],a=au(e),l=au(n);for(let t of l)if(!a.includes(t))return i="'"+t+"' is not an available key",i;e.template=Ko(null==n?void 0:n.template,e.template),e.style=Ko(null==n?void 0:n.style,e.style),p.summary.push(e)}for(let t of b){let e=new zl,n=r[t],a=au(e),l=au(n);for(let t of l)if(!a.includes(t))return i="'"+t+"' is not an available key",i;e.mode=Ko(null==n?void 0:n.mode,e.mode);let o=eu("dataset",null==n?void 0:n.dataset);if("string"==typeof o)return o;if(0===o.length)for(let t of g)o.push(t.getId());e.dataset=o;let u=e.dataset.length;e.startWeekOn=Ko(null==n?void 0:n.startWeekOn,e.startWeekOn),"boolean"==typeof(null==n?void 0:n.showCircle)&&(e.showCircle=n.showCircle);let s=eu("threshold",null==n?void 0:n.threshold);if("string"==typeof s)return s;if(e.threshold=s,0===e.threshold.length)for(let t=0;t<u;t++)e.threshold.push(0);if(e.threshold.length!==e.dataset.length)return"The number of inputs of threshold and dataset not matched";let f=eu("yMin",null==n?void 0:n.yMin);if("string"==typeof f)return f;if(e.yMin=f,0===e.yMin.length)for(let t=0;t<u;t++)e.yMin.push(null);if(e.yMin.length!==e.dataset.length)return"The number of inputs of yMin and dataset not matched";let c=eu("yMax",null==n?void 0:n.yMax);if("string"==typeof c)return c;if(e.yMax=c,0===e.yMax.length)for(let t=0;t<u;t++)e.yMax.push(null);if(e.yMax.length!==e.dataset.length)return"The number of inputs of yMin and dataset not matched";e.color=Ko(null==n?void 0:n.color,e.color),"boolean"==typeof(null==n?void 0:n.dimNotInMonth)&&(e.dimNotInMonth=n.dimNotInMonth),"boolean"==typeof(null==n?void 0:n.showStreak)&&(e.showStreak=n.showStreak),"boolean"==typeof(null==n?void 0:n.showTodayRing)&&(e.showTodayRing=n.showTodayRing),"boolean"==typeof(null==n?void 0:n.showSelectedValue)&&(e.showSelectedValue=n.showSelectedValue),"boolean"==typeof(null==n?void 0:n.showSelectedRing)&&(e.showSelectedRing=n.showSelectedRing),e.circleColor=Ko(null==n?void 0:n.circleColor,e.circleColor),"boolean"==typeof(null==n?void 0:n.circleColorByValue)&&(e.circleColorByValue=n.circleColorByValue),e.headerYearColor=Ko(null==n?void 0:n.headerYearColor,e.headerYearColor),e.headerMonthColor=Ko(null==n?void 0:n.headerMonthColor,e.headerMonthColor),e.dividingLineColor=Ko(null==n?void 0:n.dividingLineColor,e.dividingLineColor),e.todayRingColor=Ko(null==n?void 0:n.todayRingColor,e.todayRingColor),e.selectedRingColor=Ko(null==n?void 0:n.selectedRingColor,e.selectedRingColor),e.initMonth=Ko(null==n?void 0:n.initMonth,e.initMonth),"boolean"==typeof(null==n?void 0:n.showAnnotation)&&(e.showAnnotation=n.showAnnotation);let h=nu("annotation",null==n?void 0:n.annotation);if("string"==typeof h)return h;if(e.annotation=h,0===e.annotation.length)for(let t=0;t<u;t++)e.annotation.push(null);if(e.annotation.length!==e.dataset.length)return"The number of inputs of annotation and dataset not matched";"boolean"==typeof(null==n?void 0:n.showAnnotationOfAllTargets)&&(e.showAnnotationOfAllTargets=n.showAnnotationOfAllTargets),p.month.push(e)}for(let t of D){let e=new Ol,n=r[t],a=au(e),l=au(n);for(let t of l)if(!a.includes(t))return i="'"+t+"' is not an available key",i;p.heatmap.push(e)}for(let t of k){let e=new Ul,n=r[t],a=au(e),l=au(n);for(let t of l)if(!a.includes(t))return i="'"+t+"' is not an available key",i;e.title=Ko(null==n?void 0:n.title,e.title),e.dataset=Ko(null==n?void 0:n.dataset,e.dataset),e.orientation=Ko(null==n?void 0:n.orientation,e.orientation);let o=eu("range",null==n?void 0:n.range);if("string"==typeof o)return o;let u=o;if(1===u.length){if(u[0]<0)return i="Negative range value is not allowed",i}else{if(!(u.length>1))return i="Empty range is not allowed",i;{let t=u[0];if(t<0)return i="Negative range value is not allowed",i;for(let e=1;e<u.length;e++)if(u[e]<=t)return i="Values in parameter 'range' should be monotonically increasing",i}}e.range=u;let s=u.length,f=tu("rangeColor",null==n?void 0:n.rangeColor,s,"",Go,!0);if("string"==typeof f)return f;e.rangeColor=f,e.value=Ko(null==n?void 0:n.value,e.value),e.valueUnit=Ko(null==n?void 0:n.valueUnit,e.valueUnit),e.valueColor=Ko(null==n?void 0:n.valueColor,e.valueColor),"boolean"==typeof(null==n?void 0:n.showMarker)&&(e.showMarker=n.showMarker),"number"==typeof(null==n?void 0:n.markerValue)&&(e.markerValue=n.markerValue),e.markerColor=Ko(null==n?void 0:n.markerColor,e.markerColor),p.bullet.push(e)}return p}(i,this);if("string"==typeof u)return this.renderErrorMessage(u,a,r);let s=u,f=[];try{yield this.getFiles(f,s)}catch(t){return this.renderErrorMessage(t.message,a,r)}if(0===f.length)return this.renderErrorMessage("No markdown files found in folder",a,r);let c=new Map,h=new jl;h.fileTotal=f.length;const d=f.map((t=>e(this,void 0,void 0,(function*(){let n=null;s.queries.some((t=>{let e=t.getType();return t.getTarget(),e===Ji.Frontmatter||e===Ji.Tag||e===Ji.Wiki||e===Ji.WikiLink||e===Ji.WikiDisplay}))&&(n=this.app.metadataCache.getFileCache(t));let r=null;s.queries.some((t=>{let e=t.getType(),n=t.getTarget();return e===Ji.Tag||e===Ji.Text||e===Ji.dvField||e===Ji.Task||e===Ji.TaskDone||e===Ji.TaskNotDone||e===Ji.FileMeta&&("numWords"===n||"numChars"===n||"numSentences"===n)}))&&(r=yield this.app.vault.adapter.read(t.path));let a=new Map,i=!1;for(let e of s.xDataset)if(!a.has(e)){let l=window.moment("");if(-1===e)l=iu(t,s);else{let a=s.queries[e];switch(a.getType()){case Ji.Frontmatter:l=lu(n,a,s);break;case Ji.Tag:l=uu(r,a,s);break;case Ji.Text:l=su(r,a,s);break;case Ji.dvField:l=fu(r,a,s);break;case Ji.FileMeta:l=cu(t,a,s);break;case Ji.Task:case Ji.TaskDone:case Ji.TaskNotDone:l=hu(r,a,s)}}l.isValid()?(null!==s.startDate&&l<s.startDate&&(i=!0,h.fileOutOfDateRange++),null!==s.endDate&&l>s.endDate&&(i=!0,h.fileOutOfDateRange++)):(i=!0,h.fileNotInFormat++),i||(h.gotAnyValidXValue||(h.gotAnyValidXValue=!0),a.set(e,Kl(l,s.dateFormat)),h.fileAvailable++,1==h.fileAvailable?(h.minDate=l.clone(),h.maxDate=l.clone()):(l<h.minDate&&(h.minDate=l.clone()),l>h.maxDate&&(h.maxDate=l.clone())))}if(i)return;const l=s.queries.filter((t=>t.getType()!==Ji.Table&&!t.usedAsXDataset)).map((i=>e(this,void 0,void 0,(function*(){if(n&&i.getType()===Ji.Tag){let t=function(t,e,n,r,a){let i=t.frontmatter,l=[];if(i&&i.tags){let t=0,o=!1;if(Array.isArray(i.tags))l=l.concat(i.tags);else if("string"==typeof i.tags){let t=i.tags.split(e.getSeparator(!0));for(let e of t){let t=e.trim();""!==t&&l.push(t)}}for(let i of l){if(i===e.getTarget())t+=n.constValue[e.getId()],o=!0,e.addNumTargets();else{if(!i.startsWith(e.getTarget()+"/"))continue;t+=n.constValue[e.getId()],o=!0,e.addNumTargets()}let l=null;return o&&(l=t),du(r,a.get(n.xDataset[e.getId()]),e,l),!0}}return!1}(n,i,s,c,a);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(n&&i.getType()===Ji.Frontmatter&&"tags"!==i.getTarget()){let t=function(t,e,n,r,a){let i=t.frontmatter;if(i){let t=no(i,e.getTarget());if(t){let i=io(t,n.textValueMap);if(null!==i.value)return i.type===tl.Time&&(e.valueType=tl.Time),e.addNumTargets(),du(r,a.get(n.xDataset[e.getId()]),e,i.value),!0}else if(e.getParentTarget()&&no(i,e.getParentTarget())){let t=no(i,e.getParentTarget()),l=null;if(Array.isArray(t)?l=t.map((t=>t.toString())):"string"==typeof t&&(l=t.split(e.getSeparator())),l&&l.length>e.getAccessor()&&e.getAccessor()>=0){let t=io(l[e.getAccessor()].trim(),n.textValueMap);if(null!==t.value)return t.type===tl.Time&&(e.valueType=tl.Time),e.addNumTargets(),du(r,a.get(n.xDataset[e.getId()]),e,t.value),!0}}}return!1}(n,i,s,c,a);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(n&&(i.getType()===Ji.Wiki||i.getType()===Ji.WikiLink||i.getType()===Ji.WikiDisplay)){let t=function(t,e,n,r,a){let i=t.links;if(!i)return!1;let l=e.getTarget(),o=e.getType(),u="",s=l;for(let t of i){if(!t)continue;let e="";o===Ji.Wiki?e=t.displayText?t.displayText:t.link:o===Ji.WikiLink?e=t.link:o===Ji.WikiDisplay?t.displayText&&(e=t.displayText):e=t.displayText?t.displayText:t.link,e=e.trim(),u+=e+"\n"}return gu(u,s,e,r,a,n)}(n,i,s,c,a);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(r&&i.getType()===Ji.Tag){let t=function(t,e,n,r,a){let i=e.getTarget();return e.getParentTarget()&&(i=e.getParentTarget()),i.length>1&&i.startsWith("#")&&(i=i.substring(1)),gu(t,"(^|\\s)#"+i+"(\\/[\\w-]+)*(:(?<value>[\\d\\.\\/-]*)[a-zA-Z]*)?([\\.!,\\?;~-]*)?(\\s|$)",e,r,a,n)}(r,i,s,c,a);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(r&&i.getType()===Ji.Text){let t=function(t,e,n,r,a){return gu(t,e.getTarget(),e,r,a,n)}(r,i,s,c,a);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(i.getType()===Ji.FileMeta){let e=pu(t,r,i,s,c,a);h.gotAnyValidYValue||(h.gotAnyValidYValue=e)}if(r&&i.getType()===Ji.dvField){let t=function(t,e,n,r,a){let i=e.getTarget();return e.getParentTarget()&&(i=e.getParentTarget()),i=i.replace("-","[\\s\\-]"),gu(t,"(^| |\\t)\\*{0,2}"+i+"\\*{0,2}(::[ |\\t]*(?<value>[\\d\\.\\/\\-,@; \\t:\\w$€£¥¢₹₨₱₩฿₫₪α-ωΑ-Ω©®℗™℠一-鿿㐀-䶿 、-〿]*))(\\r\\?\\n|\\r|$)",e,r,a,n)}(r,i,s,c,a);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(r&&(i.getType()===Ji.Task||i.getType()===Ji.TaskDone||i.getType()===Ji.TaskNotDone)){let t=function(t,e,n,r,a){let i=e.getType(),l=e.getTarget();return l=i===Ji.Task?"\\[[\\sx]\\]\\s"+l:i===Ji.TaskDone?"\\[x\\]\\s"+l:i===Ji.TaskNotDone?"\\[\\s\\]\\s"+l:"\\[[\\sx]\\]\\s"+l,gu(t,l,e,r,a,n)}(r,i,s,c,a);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}}))));yield Promise.all(l)}))));if(yield Promise.all(d),yield this.collectDataFromTable(c,s,h),h.errorMessage)return this.renderErrorMessage(h.errorMessage,a,r);let g="";if(h.minDate.isValid()&&h.maxDate.isValid()&&0!==h.fileAvailable&&h.gotAnyValidXValue||(g="No valid date as X value found in notes",h.fileOutOfDateRange>0&&(g+=`\n${h.fileOutOfDateRange} files are out of the date range.`),h.fileNotInFormat&&(g+=`\n${h.fileNotInFormat} files are not in the right format.`)),null===s.startDate&&null===s.endDate?(s.startDate=h.minDate.clone(),s.endDate=h.maxDate.clone()):null!==s.startDate&&null===s.endDate?s.startDate<h.maxDate?s.endDate=h.maxDate.clone():g="Invalid date range":null!==s.endDate&&null===s.startDate?s.endDate>h.minDate?s.startDate=h.minDate.clone():g="Invalid date range":(s.startDate<h.minDate&&s.endDate<h.minDate||s.startDate>h.maxDate&&s.endDate>h.maxDate)&&(g="Invalid date range"),g)return this.renderErrorMessage(g,a,r);if(!h.gotAnyValidYValue)return this.renderErrorMessage("No valid Y value found in notes",a,r);let p=new El(s.startDate,s.endDate);for(let t of s.queries){let e=p.createDataset(t,s);e.addNumTargets(t.getNumTargets());for(let n=s.startDate.clone();n<=s.endDate;n.add(1,"days"))if(c.has(Kl(n,s.dateFormat))){let r=c.get(Kl(n,s.dateFormat)).filter((function(e){return e.query.equalTo(t)}));if(r.length>0){let t=null;for(let e=0;e<r.length;e++){let n=r[e].value;Number.isNumber(n)&&!Number.isNaN(n)&&(null===t?t=n:t+=n)}null!==t&&e.setValue(n,t)}}}s.datasets=p;let y=function(t,e){for(let t of e.datasets){if(t.getQuery().usedAsXDataset)continue;let n=e.valueShift[t.getId()];null!==n&&0!==n&&t.shift(n,e.shiftOnlyValueLargerThan[t.getId()]),null!==e.penalty[t.getId()]&&t.setPenalty(e.penalty[t.getId()]),e.accum[t.getId()]&&t.accumulateValues()}for(let n of e.line){let r=$o(t,e,n);if("string"==typeof r)return r}for(let n of e.bar){let r=Ho(t,e,n);if("string"==typeof r)return r}for(let n of e.pie){let r=Do(t,e,n);if("string"==typeof r)return r}for(let n of e.summary){let r=ko(t,e,n);if("string"==typeof r)return r}for(let n of e.bullet){let r=Lo(t,e,n);if("string"==typeof r)return r}for(let n of e.month){let r=Bo(t,e,n);if("string"==typeof r)return r}for(let t of e.heatmap){let t=No(0,e);if("string"==typeof t)return t}}(a,s);if("string"==typeof y)return this.renderErrorMessage(y,a,r);r.appendChild(a)}))}collectDataFromTable(n,r,a){return e(this,void 0,void 0,(function*(){let e=r.queries.filter((t=>t.getType()===Ji.Table)),i=[],l=!1;for(let n of e){let e=n.getParentTarget(),r=this.app.vault.getAbstractFileByPath(t.normalizePath(e+".md"));if(!(r&&r instanceof t.TFile)){l=!0;break}let a=n.getAccessor(),o=n.usedAsXDataset,u=i.find((t=>t.filePath===e&&t.tableIndex===a));if(u)o?u.xDataset=n:u.yDatasets.push(n);else{let t=new Hl(e,a);o?t.xDataset=n:t.yDatasets.push(n),i.push(t)}}if(l)a.errorMessage="File containing tables not found";else for(let e of i){let i=e.xDataset;if(!i)continue;let l=e.yDatasets,o=i.getParentTarget(),u=i.getAccessor(),s="";o+=".md";let f=this.app.vault.getAbstractFileByPath(t.normalizePath(o));if(!(f&&f instanceof t.TFile))continue;{a.fileAvailable++;let t,e=yield this.app.vault.adapter.read(f.path),n=new RegExp("((\\r?\\n){2}|^)([^\\r\\n]*\\|[^\\r\\n]*(\\r?\\n)?)+(?=(\\r?\\n){2}|$)","gm"),r=0;for(;t=n.exec(e);){if(r===u){s=t[0];break}r++}}let c=s.split(/\r?\n/);c=c.filter((t=>""!==t));let h=0,d=0;if(c.length>=2){let t=c.shift().trim();t=ro(t,"|"),h=t.split("|").length;let e=c.shift().trim();e=ro(e,"|");let n=e.split("|");for(let t of n)if(!t.includes("-"))break;d=c.length}if(0==d)continue;let g=i.getAccessor(1);if(g>=h)continue;let p=[];for(let t of c){let e=ro(t.trim(),"|").split("|");if(g<e.length){let t=Gl(e[g].trim(),r.dateFormat);t.isValid()?(p.push(t),a.minDate.isValid()||a.maxDate.isValid()?(t<a.minDate&&(a.minDate=t.clone()),t>a.maxDate&&(a.maxDate=t.clone())):(a.minDate=t.clone(),a.maxDate=t.clone())):p.push(null)}else p.push(null)}if(p.every((t=>null===t)))return void(a.errorMessage="No valid date as X value found in table");a.gotAnyValidXValue||(a.gotAnyValidXValue=!0);for(let t of l){let e=t.getAccessor(1);if(e>=h)continue;let i=0;for(let l of c){let o=ro(l.trim(),"|").split("|");if(e<o.length){let l=o[e].trim().split(t.getSeparator());if(!l)continue;if(1===l.length){let e=io(l[0],r.textValueMap);if(null!==e.value){e.type===tl.Time&&(t.valueType=tl.Time);let l=e.value;i<p.length&&p[i]&&(a.gotAnyValidYValue||(a.gotAnyValidYValue=!0),du(n,Kl(p[i],r.dateFormat),t,l))}}else if(l.length>t.getAccessor(2)&&t.getAccessor(2)>=0){let e=null,o=io(l[t.getAccessor(2)].trim(),r.textValueMap);null!==o.value&&(o.type===tl.Time&&(t.valueType=tl.Time),e=o.value,i<p.length&&p[i]&&(a.gotAnyValidYValue||(a.gotAnyValidYValue=!0),du(n,Kl(p[i],r.dateFormat),t,e)))}}i++}}}}))}getEditor(){return this.app.workspace.getActiveViewOfType(t.MarkdownView).editor}addCodeBlock(e){if(!(this.app.workspace.activeLeaf.view instanceof t.MarkdownView))return;let n="";switch(e){case Ki.Line:n='``` tracker\nsearchType: tag\nsearchTarget: tagName\nfolder: /\nstartDate:\nendDate:\nline:\n title: "Line Chart"\n xAxisLabel: Date\n yAxisLabel: Value\n```';break;case Ki.Bar:n='``` tracker\nsearchType: tag\nsearchTarget: tagName\nfolder: /\nstartDate:\nendDate:\nbar:\n title: "Bar Chart"\n xAxisLabel: Date\n yAxisLabel: Value\n```';break;case Ki.Summary:n='``` tracker\nsearchType: tag\nsearchTarget: tagName\nfolder: /\nstartDate:\nendDate:\nsummary:\n template: "Average value of tagName is {{average}}"\n style: "color:white;"\n```'}""!==n&&this.insertToNextLine(n)}insertToNextLine(t){let e=this.getEditor();if(e){let n=e.getCursor(),r=n.line,a=e.getLine(r);return n.ch=a.length,e.setSelection(n),e.replaceSelection("\n"+t),!0}return!1}}module.exports=vu;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYXNjZW5kaW5nLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9iaXNlY3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0LmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9udW1iZXIuanMiLCJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3RpY2tzLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tYXguanMiLCJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21pbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcXVpY2tzZWxlY3QuanMiLCJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3F1YW50aWxlLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9yYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvc3VtLmpzIiwibm9kZV9tb2R1bGVzL2QzLWF4aXMvc3JjL2FycmF5LmpzIiwibm9kZV9tb2R1bGVzL2QzLWF4aXMvc3JjL2lkZW50aXR5LmpzIiwibm9kZV9tb2R1bGVzL2QzLWF4aXMvc3JjL2F4aXMuanMiLCJub2RlX21vZHVsZXMvZDMtZGlzcGF0Y2gvc3JjL2Rpc3BhdGNoLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbmFtZXNwYWNlcy5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NyZWF0b3IuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2FycmF5LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0b3JBbGwuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9tYXRjaGVyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdENoaWxkLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdENoaWxkcmVuLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NwYXJzZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lbnRlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NvbnN0YW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdGEuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc29ydC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9hdHRyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvd2luZG93LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3N0eWxlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3Byb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2NsYXNzZWQuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vdGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9odG1sLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JhaXNlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2xvd2VyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luc2VydC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9yZW1vdmUuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xvbmUuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb24uanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanMiLCJub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2RlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY29sb3IuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdEFsbC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZXhpdC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9qb2luLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL21lcmdlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL29yZGVyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2NhbGwuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbm9kZXMuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zaXplLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VtcHR5LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VhY2guanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vYXBwZW5kLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdHVtLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2l0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9tYXRoLmpzIiwibm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9sYWIuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL3RpbWVyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lb3V0LmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2NoZWR1bGUuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbnN0YW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb2xvci5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcmdiLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXIuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL2RlY29tcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vaW5kZXguanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90d2Vlbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2ludGVycG9sYXRlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vYXR0ci5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHJUd2Vlbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2RlbGF5LmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZHVyYXRpb24uanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vb24uanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zZWxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zdHlsZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3N0eWxlVHdlZW4uanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90ZXh0VHdlZW4uanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdEFsbC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2ZpbHRlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL21lcmdlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHJhbnNpdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHQuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9yZW1vdmUuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlVmFyeWluZy5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2VuZC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vdHJhbnNpdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9jdWJpYy5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL2ludGVycnVwdC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9pbnRlcnJ1cHQuanMiLCJub2RlX21vZHVsZXMvZDMtcGF0aC9zcmMvcGF0aC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdERlY2ltYWwuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9leHBvbmVudC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFNwZWNpZmllci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFByZWZpeEF1dG8uanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRSb3VuZGVkLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0VHlwZXMuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9pZGVudGl0eS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2xvY2FsZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2RlZmF1bHRMb2NhbGUuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRHcm91cC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdE51bWVyYWxzLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0VHJpbS5qcyIsIm5vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbG9yLmpzIiwibm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY29uc3RhbnQuanMiLCJub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9sYWIuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luaXQuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL29yZGluYWwuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb25zdGFudC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbG9yLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNjYWxlL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcmdiLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNjYWxlL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbnVtYmVyQXJyYXkuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9hcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2RhdGUuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXIuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9vYmplY3QuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy92YWx1ZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JvdW5kLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9udW1iZXIuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnRpbnVvdXMuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnN0YW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy90aWNrRm9ybWF0LmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uUHJlZml4LmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uUm91bmQuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25GaXhlZC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbGluZWFyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2ludGVydmFsLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21pbGxpc2Vjb25kLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3NlY29uZC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9kdXJhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9taW51dGUuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaG91ci5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9kYXkuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvd2Vlay5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9tb250aC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy95ZWFyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y01pbnV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNIb3VyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y0RheS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNXZWVrLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y01vbnRoLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y1llYXIuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdGlja3MuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2xvY2FsZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGltZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbmljZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9yZ2IuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXMuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvU3BlY3RyYWwuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jb2xvcnMuanMiLCJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2NvbnN0YW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvcmFtcC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvbWF0aC5qcyIsInNyYy9kYXRhLnRzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcmMuanMiLCJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2FycmF5LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9saW5lYXIuanMiLCJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BvaW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9kZXNjZW5kaW5nLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9pZGVudGl0eS5qcyIsInNyYy9oZWxwZXIudHMiLCJub2RlX21vZHVsZXMvanNlcC9idWlsZC9qc2VwLmpzIiwibm9kZV9tb2R1bGVzL3NwcmludGYtanMvc3JjL3NwcmludGYuanMiLCJzcmMvZXhwci50cyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVkaWFuLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy92YXJpYW5jZS5qcyIsInNyYy9waWUudHMiLCJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BpZS5qcyIsInNyYy9zdW1tYXJ5LnRzIiwic3JjL21vbnRoLnRzIiwic3JjL2hlYXRtYXAudHMiLCJzcmMvYnVsbGV0LnRzIiwic3JjL3JlbmRlcmluZy50cyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvZXh0ZW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9saW5lLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvcG9pbnRlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NvdXJjZUV2ZW50LmpzIiwic3JjL3BhcnNpbmcudHMiLCJzcmMvY29sbGVjdGluZy50cyIsInNyYy9zZXR0aW5ncy50cyIsInNyYy9tYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihmKSB7XG4gIGxldCBkZWx0YSA9IGY7XG4gIGxldCBjb21wYXJlID0gZjtcblxuICBpZiAoZi5sZW5ndGggPT09IDEpIHtcbiAgICBkZWx0YSA9IChkLCB4KSA9PiBmKGQpIC0geDtcbiAgICBjb21wYXJlID0gYXNjZW5kaW5nQ29tcGFyYXRvcihmKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxlZnQoYSwgeCwgbG8sIGhpKSB7XG4gICAgaWYgKGxvID09IG51bGwpIGxvID0gMDtcbiAgICBpZiAoaGkgPT0gbnVsbCkgaGkgPSBhLmxlbmd0aDtcbiAgICB3aGlsZSAobG8gPCBoaSkge1xuICAgICAgY29uc3QgbWlkID0gKGxvICsgaGkpID4+PiAxO1xuICAgICAgaWYgKGNvbXBhcmUoYVttaWRdLCB4KSA8IDApIGxvID0gbWlkICsgMTtcbiAgICAgIGVsc2UgaGkgPSBtaWQ7XG4gICAgfVxuICAgIHJldHVybiBsbztcbiAgfVxuXG4gIGZ1bmN0aW9uIHJpZ2h0KGEsIHgsIGxvLCBoaSkge1xuICAgIGlmIChsbyA9PSBudWxsKSBsbyA9IDA7XG4gICAgaWYgKGhpID09IG51bGwpIGhpID0gYS5sZW5ndGg7XG4gICAgd2hpbGUgKGxvIDwgaGkpIHtcbiAgICAgIGNvbnN0IG1pZCA9IChsbyArIGhpKSA+Pj4gMTtcbiAgICAgIGlmIChjb21wYXJlKGFbbWlkXSwgeCkgPiAwKSBoaSA9IG1pZDtcbiAgICAgIGVsc2UgbG8gPSBtaWQgKyAxO1xuICAgIH1cbiAgICByZXR1cm4gbG87XG4gIH1cblxuICBmdW5jdGlvbiBjZW50ZXIoYSwgeCwgbG8sIGhpKSB7XG4gICAgaWYgKGxvID09IG51bGwpIGxvID0gMDtcbiAgICBpZiAoaGkgPT0gbnVsbCkgaGkgPSBhLmxlbmd0aDtcbiAgICBjb25zdCBpID0gbGVmdChhLCB4LCBsbywgaGkgLSAxKTtcbiAgICByZXR1cm4gaSA+IGxvICYmIGRlbHRhKGFbaSAtIDFdLCB4KSA+IC1kZWx0YShhW2ldLCB4KSA/IGkgLSAxIDogaTtcbiAgfVxuXG4gIHJldHVybiB7bGVmdCwgY2VudGVyLCByaWdodH07XG59XG5cbmZ1bmN0aW9uIGFzY2VuZGluZ0NvbXBhcmF0b3IoZikge1xuICByZXR1cm4gKGQsIHgpID0+IGFzY2VuZGluZyhmKGQpLCB4KTtcbn1cbiIsImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nLmpzXCI7XG5pbXBvcnQgYmlzZWN0b3IgZnJvbSBcIi4vYmlzZWN0b3IuanNcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbmNvbnN0IGFzY2VuZGluZ0Jpc2VjdCA9IGJpc2VjdG9yKGFzY2VuZGluZyk7XG5leHBvcnQgY29uc3QgYmlzZWN0UmlnaHQgPSBhc2NlbmRpbmdCaXNlY3QucmlnaHQ7XG5leHBvcnQgY29uc3QgYmlzZWN0TGVmdCA9IGFzY2VuZGluZ0Jpc2VjdC5sZWZ0O1xuZXhwb3J0IGNvbnN0IGJpc2VjdENlbnRlciA9IGJpc2VjdG9yKG51bWJlcikuY2VudGVyO1xuZXhwb3J0IGRlZmF1bHQgYmlzZWN0UmlnaHQ7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4ID09PSBudWxsID8gTmFOIDogK3g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogbnVtYmVycyh2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgKHZhbHVlID0gK3ZhbHVlKSA+PSB2YWx1ZSkge1xuICAgICAgICB5aWVsZCB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkgIT0gbnVsbCAmJiAodmFsdWUgPSArdmFsdWUpID49IHZhbHVlKSB7XG4gICAgICAgIHlpZWxkIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwidmFyIGUxMCA9IE1hdGguc3FydCg1MCksXG4gICAgZTUgPSBNYXRoLnNxcnQoMTApLFxuICAgIGUyID0gTWF0aC5zcXJ0KDIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHJldmVyc2UsXG4gICAgICBpID0gLTEsXG4gICAgICBuLFxuICAgICAgdGlja3MsXG4gICAgICBzdGVwO1xuXG4gIHN0b3AgPSArc3RvcCwgc3RhcnQgPSArc3RhcnQsIGNvdW50ID0gK2NvdW50O1xuICBpZiAoc3RhcnQgPT09IHN0b3AgJiYgY291bnQgPiAwKSByZXR1cm4gW3N0YXJ0XTtcbiAgaWYgKHJldmVyc2UgPSBzdG9wIDwgc3RhcnQpIG4gPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gbjtcbiAgaWYgKChzdGVwID0gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpKSA9PT0gMCB8fCAhaXNGaW5pdGUoc3RlcCkpIHJldHVybiBbXTtcblxuICBpZiAoc3RlcCA+IDApIHtcbiAgICBsZXQgcjAgPSBNYXRoLnJvdW5kKHN0YXJ0IC8gc3RlcCksIHIxID0gTWF0aC5yb3VuZChzdG9wIC8gc3RlcCk7XG4gICAgaWYgKHIwICogc3RlcCA8IHN0YXJ0KSArK3IwO1xuICAgIGlmIChyMSAqIHN0ZXAgPiBzdG9wKSAtLXIxO1xuICAgIHRpY2tzID0gbmV3IEFycmF5KG4gPSByMSAtIHIwICsgMSk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHRpY2tzW2ldID0gKHIwICsgaSkgKiBzdGVwO1xuICB9IGVsc2Uge1xuICAgIHN0ZXAgPSAtc3RlcDtcbiAgICBsZXQgcjAgPSBNYXRoLnJvdW5kKHN0YXJ0ICogc3RlcCksIHIxID0gTWF0aC5yb3VuZChzdG9wICogc3RlcCk7XG4gICAgaWYgKHIwIC8gc3RlcCA8IHN0YXJ0KSArK3IwO1xuICAgIGlmIChyMSAvIHN0ZXAgPiBzdG9wKSAtLXIxO1xuICAgIHRpY2tzID0gbmV3IEFycmF5KG4gPSByMSAtIHIwICsgMSk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHRpY2tzW2ldID0gKHIwICsgaSkgLyBzdGVwO1xuICB9XG5cbiAgaWYgKHJldmVyc2UpIHRpY2tzLnJldmVyc2UoKTtcblxuICByZXR1cm4gdGlja3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICB2YXIgc3RlcCA9IChzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMCwgY291bnQpLFxuICAgICAgcG93ZXIgPSBNYXRoLmZsb29yKE1hdGgubG9nKHN0ZXApIC8gTWF0aC5MTjEwKSxcbiAgICAgIGVycm9yID0gc3RlcCAvIE1hdGgucG93KDEwLCBwb3dlcik7XG4gIHJldHVybiBwb3dlciA+PSAwXG4gICAgICA/IChlcnJvciA+PSBlMTAgPyAxMCA6IGVycm9yID49IGU1ID8gNSA6IGVycm9yID49IGUyID8gMiA6IDEpICogTWF0aC5wb3coMTAsIHBvd2VyKVxuICAgICAgOiAtTWF0aC5wb3coMTAsIC1wb3dlcikgLyAoZXJyb3IgPj0gZTEwID8gMTAgOiBlcnJvciA+PSBlNSA/IDUgOiBlcnJvciA+PSBlMiA/IDIgOiAxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICB2YXIgc3RlcDAgPSBNYXRoLmFicyhzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMCwgY291bnQpLFxuICAgICAgc3RlcDEgPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihNYXRoLmxvZyhzdGVwMCkgLyBNYXRoLkxOMTApKSxcbiAgICAgIGVycm9yID0gc3RlcDAgLyBzdGVwMTtcbiAgaWYgKGVycm9yID49IGUxMCkgc3RlcDEgKj0gMTA7XG4gIGVsc2UgaWYgKGVycm9yID49IGU1KSBzdGVwMSAqPSA1O1xuICBlbHNlIGlmIChlcnJvciA+PSBlMikgc3RlcDEgKj0gMjtcbiAgcmV0dXJuIHN0b3AgPCBzdGFydCA/IC1zdGVwMSA6IHN0ZXAxO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWF4KHZhbHVlcywgdmFsdWVvZikge1xuICBsZXQgbWF4O1xuICBpZiAodmFsdWVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsXG4gICAgICAgICAgJiYgKG1heCA8IHZhbHVlIHx8IChtYXggPT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA+PSB2YWx1ZSkpKSB7XG4gICAgICAgIG1heCA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgaW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlLCArK2luZGV4LCB2YWx1ZXMpKSAhPSBudWxsXG4gICAgICAgICAgJiYgKG1heCA8IHZhbHVlIHx8IChtYXggPT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA+PSB2YWx1ZSkpKSB7XG4gICAgICAgIG1heCA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbWF4O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWluKHZhbHVlcywgdmFsdWVvZikge1xuICBsZXQgbWluO1xuICBpZiAodmFsdWVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsXG4gICAgICAgICAgJiYgKG1pbiA+IHZhbHVlIHx8IChtaW4gPT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA+PSB2YWx1ZSkpKSB7XG4gICAgICAgIG1pbiA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgaW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlLCArK2luZGV4LCB2YWx1ZXMpKSAhPSBudWxsXG4gICAgICAgICAgJiYgKG1pbiA+IHZhbHVlIHx8IChtaW4gPT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA+PSB2YWx1ZSkpKSB7XG4gICAgICAgIG1pbiA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbWluO1xufVxuIiwiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmcuanNcIjtcblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL21vdXJuZXIvcXVpY2tzZWxlY3Rcbi8vIElTQyBsaWNlbnNlLCBDb3B5cmlnaHQgMjAxOCBWbGFkaW1pciBBZ2Fmb25raW4uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWlja3NlbGVjdChhcnJheSwgaywgbGVmdCA9IDAsIHJpZ2h0ID0gYXJyYXkubGVuZ3RoIC0gMSwgY29tcGFyZSA9IGFzY2VuZGluZykge1xuICB3aGlsZSAocmlnaHQgPiBsZWZ0KSB7XG4gICAgaWYgKHJpZ2h0IC0gbGVmdCA+IDYwMCkge1xuICAgICAgY29uc3QgbiA9IHJpZ2h0IC0gbGVmdCArIDE7XG4gICAgICBjb25zdCBtID0gayAtIGxlZnQgKyAxO1xuICAgICAgY29uc3QgeiA9IE1hdGgubG9nKG4pO1xuICAgICAgY29uc3QgcyA9IDAuNSAqIE1hdGguZXhwKDIgKiB6IC8gMyk7XG4gICAgICBjb25zdCBzZCA9IDAuNSAqIE1hdGguc3FydCh6ICogcyAqIChuIC0gcykgLyBuKSAqIChtIC0gbiAvIDIgPCAwID8gLTEgOiAxKTtcbiAgICAgIGNvbnN0IG5ld0xlZnQgPSBNYXRoLm1heChsZWZ0LCBNYXRoLmZsb29yKGsgLSBtICogcyAvIG4gKyBzZCkpO1xuICAgICAgY29uc3QgbmV3UmlnaHQgPSBNYXRoLm1pbihyaWdodCwgTWF0aC5mbG9vcihrICsgKG4gLSBtKSAqIHMgLyBuICsgc2QpKTtcbiAgICAgIHF1aWNrc2VsZWN0KGFycmF5LCBrLCBuZXdMZWZ0LCBuZXdSaWdodCwgY29tcGFyZSk7XG4gICAgfVxuXG4gICAgY29uc3QgdCA9IGFycmF5W2tdO1xuICAgIGxldCBpID0gbGVmdDtcbiAgICBsZXQgaiA9IHJpZ2h0O1xuXG4gICAgc3dhcChhcnJheSwgbGVmdCwgayk7XG4gICAgaWYgKGNvbXBhcmUoYXJyYXlbcmlnaHRdLCB0KSA+IDApIHN3YXAoYXJyYXksIGxlZnQsIHJpZ2h0KTtcblxuICAgIHdoaWxlIChpIDwgaikge1xuICAgICAgc3dhcChhcnJheSwgaSwgaiksICsraSwgLS1qO1xuICAgICAgd2hpbGUgKGNvbXBhcmUoYXJyYXlbaV0sIHQpIDwgMCkgKytpO1xuICAgICAgd2hpbGUgKGNvbXBhcmUoYXJyYXlbal0sIHQpID4gMCkgLS1qO1xuICAgIH1cblxuICAgIGlmIChjb21wYXJlKGFycmF5W2xlZnRdLCB0KSA9PT0gMCkgc3dhcChhcnJheSwgbGVmdCwgaik7XG4gICAgZWxzZSArK2osIHN3YXAoYXJyYXksIGosIHJpZ2h0KTtcblxuICAgIGlmIChqIDw9IGspIGxlZnQgPSBqICsgMTtcbiAgICBpZiAoayA8PSBqKSByaWdodCA9IGogLSAxO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gc3dhcChhcnJheSwgaSwgaikge1xuICBjb25zdCB0ID0gYXJyYXlbaV07XG4gIGFycmF5W2ldID0gYXJyYXlbal07XG4gIGFycmF5W2pdID0gdDtcbn1cbiIsImltcG9ydCBtYXggZnJvbSBcIi4vbWF4LmpzXCI7XG5pbXBvcnQgbWluIGZyb20gXCIuL21pbi5qc1wiO1xuaW1wb3J0IHF1aWNrc2VsZWN0IGZyb20gXCIuL3F1aWNrc2VsZWN0LmpzXCI7XG5pbXBvcnQgbnVtYmVyLCB7bnVtYmVyc30gZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHF1YW50aWxlKHZhbHVlcywgcCwgdmFsdWVvZikge1xuICB2YWx1ZXMgPSBGbG9hdDY0QXJyYXkuZnJvbShudW1iZXJzKHZhbHVlcywgdmFsdWVvZikpO1xuICBpZiAoIShuID0gdmFsdWVzLmxlbmd0aCkpIHJldHVybjtcbiAgaWYgKChwID0gK3ApIDw9IDAgfHwgbiA8IDIpIHJldHVybiBtaW4odmFsdWVzKTtcbiAgaWYgKHAgPj0gMSkgcmV0dXJuIG1heCh2YWx1ZXMpO1xuICB2YXIgbixcbiAgICAgIGkgPSAobiAtIDEpICogcCxcbiAgICAgIGkwID0gTWF0aC5mbG9vcihpKSxcbiAgICAgIHZhbHVlMCA9IG1heChxdWlja3NlbGVjdCh2YWx1ZXMsIGkwKS5zdWJhcnJheSgwLCBpMCArIDEpKSxcbiAgICAgIHZhbHVlMSA9IG1pbih2YWx1ZXMuc3ViYXJyYXkoaTAgKyAxKSk7XG4gIHJldHVybiB2YWx1ZTAgKyAodmFsdWUxIC0gdmFsdWUwKSAqIChpIC0gaTApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVhbnRpbGVTb3J0ZWQodmFsdWVzLCBwLCB2YWx1ZW9mID0gbnVtYmVyKSB7XG4gIGlmICghKG4gPSB2YWx1ZXMubGVuZ3RoKSkgcmV0dXJuO1xuICBpZiAoKHAgPSArcCkgPD0gMCB8fCBuIDwgMikgcmV0dXJuICt2YWx1ZW9mKHZhbHVlc1swXSwgMCwgdmFsdWVzKTtcbiAgaWYgKHAgPj0gMSkgcmV0dXJuICt2YWx1ZW9mKHZhbHVlc1tuIC0gMV0sIG4gLSAxLCB2YWx1ZXMpO1xuICB2YXIgbixcbiAgICAgIGkgPSAobiAtIDEpICogcCxcbiAgICAgIGkwID0gTWF0aC5mbG9vcihpKSxcbiAgICAgIHZhbHVlMCA9ICt2YWx1ZW9mKHZhbHVlc1tpMF0sIGkwLCB2YWx1ZXMpLFxuICAgICAgdmFsdWUxID0gK3ZhbHVlb2YodmFsdWVzW2kwICsgMV0sIGkwICsgMSwgdmFsdWVzKTtcbiAgcmV0dXJuIHZhbHVlMCArICh2YWx1ZTEgLSB2YWx1ZTApICogKGkgLSBpMCk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuICBzdGFydCA9ICtzdGFydCwgc3RvcCA9ICtzdG9wLCBzdGVwID0gKG4gPSBhcmd1bWVudHMubGVuZ3RoKSA8IDIgPyAoc3RvcCA9IHN0YXJ0LCBzdGFydCA9IDAsIDEpIDogbiA8IDMgPyAxIDogK3N0ZXA7XG5cbiAgdmFyIGkgPSAtMSxcbiAgICAgIG4gPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSkgfCAwLFxuICAgICAgcmFuZ2UgPSBuZXcgQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICByYW5nZVtpXSA9IHN0YXJ0ICsgaSAqIHN0ZXA7XG4gIH1cblxuICByZXR1cm4gcmFuZ2U7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdW0odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBzdW0gPSAwO1xuICBpZiAodmFsdWVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgPSArdmFsdWUpIHtcbiAgICAgICAgc3VtICs9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgaW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICh2YWx1ZSA9ICt2YWx1ZW9mKHZhbHVlLCArK2luZGV4LCB2YWx1ZXMpKSB7XG4gICAgICAgIHN1bSArPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN1bTtcbn1cbiIsImV4cG9ydCB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4O1xufVxuIiwiaW1wb3J0IHtzbGljZX0gZnJvbSBcIi4vYXJyYXkuanNcIjtcbmltcG9ydCBpZGVudGl0eSBmcm9tIFwiLi9pZGVudGl0eS5qc1wiO1xuXG52YXIgdG9wID0gMSxcbiAgICByaWdodCA9IDIsXG4gICAgYm90dG9tID0gMyxcbiAgICBsZWZ0ID0gNCxcbiAgICBlcHNpbG9uID0gMWUtNjtcblxuZnVuY3Rpb24gdHJhbnNsYXRlWCh4KSB7XG4gIHJldHVybiBcInRyYW5zbGF0ZShcIiArIHggKyBcIiwwKVwiO1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVZKHkpIHtcbiAgcmV0dXJuIFwidHJhbnNsYXRlKDAsXCIgKyB5ICsgXCIpXCI7XG59XG5cbmZ1bmN0aW9uIG51bWJlcihzY2FsZSkge1xuICByZXR1cm4gZCA9PiArc2NhbGUoZCk7XG59XG5cbmZ1bmN0aW9uIGNlbnRlcihzY2FsZSwgb2Zmc2V0KSB7XG4gIG9mZnNldCA9IE1hdGgubWF4KDAsIHNjYWxlLmJhbmR3aWR0aCgpIC0gb2Zmc2V0ICogMikgLyAyO1xuICBpZiAoc2NhbGUucm91bmQoKSkgb2Zmc2V0ID0gTWF0aC5yb3VuZChvZmZzZXQpO1xuICByZXR1cm4gZCA9PiArc2NhbGUoZCkgKyBvZmZzZXQ7XG59XG5cbmZ1bmN0aW9uIGVudGVyaW5nKCkge1xuICByZXR1cm4gIXRoaXMuX19heGlzO1xufVxuXG5mdW5jdGlvbiBheGlzKG9yaWVudCwgc2NhbGUpIHtcbiAgdmFyIHRpY2tBcmd1bWVudHMgPSBbXSxcbiAgICAgIHRpY2tWYWx1ZXMgPSBudWxsLFxuICAgICAgdGlja0Zvcm1hdCA9IG51bGwsXG4gICAgICB0aWNrU2l6ZUlubmVyID0gNixcbiAgICAgIHRpY2tTaXplT3V0ZXIgPSA2LFxuICAgICAgdGlja1BhZGRpbmcgPSAzLFxuICAgICAgb2Zmc2V0ID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA+IDEgPyAwIDogMC41LFxuICAgICAgayA9IG9yaWVudCA9PT0gdG9wIHx8IG9yaWVudCA9PT0gbGVmdCA/IC0xIDogMSxcbiAgICAgIHggPSBvcmllbnQgPT09IGxlZnQgfHwgb3JpZW50ID09PSByaWdodCA/IFwieFwiIDogXCJ5XCIsXG4gICAgICB0cmFuc2Zvcm0gPSBvcmllbnQgPT09IHRvcCB8fCBvcmllbnQgPT09IGJvdHRvbSA/IHRyYW5zbGF0ZVggOiB0cmFuc2xhdGVZO1xuXG4gIGZ1bmN0aW9uIGF4aXMoY29udGV4dCkge1xuICAgIHZhciB2YWx1ZXMgPSB0aWNrVmFsdWVzID09IG51bGwgPyAoc2NhbGUudGlja3MgPyBzY2FsZS50aWNrcy5hcHBseShzY2FsZSwgdGlja0FyZ3VtZW50cykgOiBzY2FsZS5kb21haW4oKSkgOiB0aWNrVmFsdWVzLFxuICAgICAgICBmb3JtYXQgPSB0aWNrRm9ybWF0ID09IG51bGwgPyAoc2NhbGUudGlja0Zvcm1hdCA/IHNjYWxlLnRpY2tGb3JtYXQuYXBwbHkoc2NhbGUsIHRpY2tBcmd1bWVudHMpIDogaWRlbnRpdHkpIDogdGlja0Zvcm1hdCxcbiAgICAgICAgc3BhY2luZyA9IE1hdGgubWF4KHRpY2tTaXplSW5uZXIsIDApICsgdGlja1BhZGRpbmcsXG4gICAgICAgIHJhbmdlID0gc2NhbGUucmFuZ2UoKSxcbiAgICAgICAgcmFuZ2UwID0gK3JhbmdlWzBdICsgb2Zmc2V0LFxuICAgICAgICByYW5nZTEgPSArcmFuZ2VbcmFuZ2UubGVuZ3RoIC0gMV0gKyBvZmZzZXQsXG4gICAgICAgIHBvc2l0aW9uID0gKHNjYWxlLmJhbmR3aWR0aCA/IGNlbnRlciA6IG51bWJlcikoc2NhbGUuY29weSgpLCBvZmZzZXQpLFxuICAgICAgICBzZWxlY3Rpb24gPSBjb250ZXh0LnNlbGVjdGlvbiA/IGNvbnRleHQuc2VsZWN0aW9uKCkgOiBjb250ZXh0LFxuICAgICAgICBwYXRoID0gc2VsZWN0aW9uLnNlbGVjdEFsbChcIi5kb21haW5cIikuZGF0YShbbnVsbF0pLFxuICAgICAgICB0aWNrID0gc2VsZWN0aW9uLnNlbGVjdEFsbChcIi50aWNrXCIpLmRhdGEodmFsdWVzLCBzY2FsZSkub3JkZXIoKSxcbiAgICAgICAgdGlja0V4aXQgPSB0aWNrLmV4aXQoKSxcbiAgICAgICAgdGlja0VudGVyID0gdGljay5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwidGlja1wiKSxcbiAgICAgICAgbGluZSA9IHRpY2suc2VsZWN0KFwibGluZVwiKSxcbiAgICAgICAgdGV4dCA9IHRpY2suc2VsZWN0KFwidGV4dFwiKTtcblxuICAgIHBhdGggPSBwYXRoLm1lcmdlKHBhdGguZW50ZXIoKS5pbnNlcnQoXCJwYXRoXCIsIFwiLnRpY2tcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImRvbWFpblwiKVxuICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcImN1cnJlbnRDb2xvclwiKSk7XG5cbiAgICB0aWNrID0gdGljay5tZXJnZSh0aWNrRW50ZXIpO1xuXG4gICAgbGluZSA9IGxpbmUubWVyZ2UodGlja0VudGVyLmFwcGVuZChcImxpbmVcIilcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJjdXJyZW50Q29sb3JcIilcbiAgICAgICAgLmF0dHIoeCArIFwiMlwiLCBrICogdGlja1NpemVJbm5lcikpO1xuXG4gICAgdGV4dCA9IHRleHQubWVyZ2UodGlja0VudGVyLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwiY3VycmVudENvbG9yXCIpXG4gICAgICAgIC5hdHRyKHgsIGsgKiBzcGFjaW5nKVxuICAgICAgICAuYXR0cihcImR5XCIsIG9yaWVudCA9PT0gdG9wID8gXCIwZW1cIiA6IG9yaWVudCA9PT0gYm90dG9tID8gXCIwLjcxZW1cIiA6IFwiMC4zMmVtXCIpKTtcblxuICAgIGlmIChjb250ZXh0ICE9PSBzZWxlY3Rpb24pIHtcbiAgICAgIHBhdGggPSBwYXRoLnRyYW5zaXRpb24oY29udGV4dCk7XG4gICAgICB0aWNrID0gdGljay50cmFuc2l0aW9uKGNvbnRleHQpO1xuICAgICAgbGluZSA9IGxpbmUudHJhbnNpdGlvbihjb250ZXh0KTtcbiAgICAgIHRleHQgPSB0ZXh0LnRyYW5zaXRpb24oY29udGV4dCk7XG5cbiAgICAgIHRpY2tFeGl0ID0gdGlja0V4aXQudHJhbnNpdGlvbihjb250ZXh0KVxuICAgICAgICAgIC5hdHRyKFwib3BhY2l0eVwiLCBlcHNpbG9uKVxuICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGlzRmluaXRlKGQgPSBwb3NpdGlvbihkKSkgPyB0cmFuc2Zvcm0oZCArIG9mZnNldCkgOiB0aGlzLmdldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiKTsgfSk7XG5cbiAgICAgIHRpY2tFbnRlclxuICAgICAgICAgIC5hdHRyKFwib3BhY2l0eVwiLCBlcHNpbG9uKVxuICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uKGQpIHsgdmFyIHAgPSB0aGlzLnBhcmVudE5vZGUuX19heGlzOyByZXR1cm4gdHJhbnNmb3JtKChwICYmIGlzRmluaXRlKHAgPSBwKGQpKSA/IHAgOiBwb3NpdGlvbihkKSkgKyBvZmZzZXQpOyB9KTtcbiAgICB9XG5cbiAgICB0aWNrRXhpdC5yZW1vdmUoKTtcblxuICAgIHBhdGhcbiAgICAgICAgLmF0dHIoXCJkXCIsIG9yaWVudCA9PT0gbGVmdCB8fCBvcmllbnQgPT09IHJpZ2h0XG4gICAgICAgICAgICA/ICh0aWNrU2l6ZU91dGVyID8gXCJNXCIgKyBrICogdGlja1NpemVPdXRlciArIFwiLFwiICsgcmFuZ2UwICsgXCJIXCIgKyBvZmZzZXQgKyBcIlZcIiArIHJhbmdlMSArIFwiSFwiICsgayAqIHRpY2tTaXplT3V0ZXIgOiBcIk1cIiArIG9mZnNldCArIFwiLFwiICsgcmFuZ2UwICsgXCJWXCIgKyByYW5nZTEpXG4gICAgICAgICAgICA6ICh0aWNrU2l6ZU91dGVyID8gXCJNXCIgKyByYW5nZTAgKyBcIixcIiArIGsgKiB0aWNrU2l6ZU91dGVyICsgXCJWXCIgKyBvZmZzZXQgKyBcIkhcIiArIHJhbmdlMSArIFwiVlwiICsgayAqIHRpY2tTaXplT3V0ZXIgOiBcIk1cIiArIHJhbmdlMCArIFwiLFwiICsgb2Zmc2V0ICsgXCJIXCIgKyByYW5nZTEpKTtcblxuICAgIHRpY2tcbiAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIDEpXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIHRyYW5zZm9ybShwb3NpdGlvbihkKSArIG9mZnNldCk7IH0pO1xuXG4gICAgbGluZVxuICAgICAgICAuYXR0cih4ICsgXCIyXCIsIGsgKiB0aWNrU2l6ZUlubmVyKTtcblxuICAgIHRleHRcbiAgICAgICAgLmF0dHIoeCwgayAqIHNwYWNpbmcpXG4gICAgICAgIC50ZXh0KGZvcm1hdCk7XG5cbiAgICBzZWxlY3Rpb24uZmlsdGVyKGVudGVyaW5nKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCJub25lXCIpXG4gICAgICAgIC5hdHRyKFwiZm9udC1zaXplXCIsIDEwKVxuICAgICAgICAuYXR0cihcImZvbnQtZmFtaWx5XCIsIFwic2Fucy1zZXJpZlwiKVxuICAgICAgICAuYXR0cihcInRleHQtYW5jaG9yXCIsIG9yaWVudCA9PT0gcmlnaHQgPyBcInN0YXJ0XCIgOiBvcmllbnQgPT09IGxlZnQgPyBcImVuZFwiIDogXCJtaWRkbGVcIik7XG5cbiAgICBzZWxlY3Rpb25cbiAgICAgICAgLmVhY2goZnVuY3Rpb24oKSB7IHRoaXMuX19heGlzID0gcG9zaXRpb247IH0pO1xuICB9XG5cbiAgYXhpcy5zY2FsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzY2FsZSA9IF8sIGF4aXMpIDogc2NhbGU7XG4gIH07XG5cbiAgYXhpcy50aWNrcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aWNrQXJndW1lbnRzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpLCBheGlzO1xuICB9O1xuXG4gIGF4aXMudGlja0FyZ3VtZW50cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrQXJndW1lbnRzID0gXyA9PSBudWxsID8gW10gOiBzbGljZS5jYWxsKF8pLCBheGlzKSA6IHRpY2tBcmd1bWVudHMuc2xpY2UoKTtcbiAgfTtcblxuICBheGlzLnRpY2tWYWx1ZXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja1ZhbHVlcyA9IF8gPT0gbnVsbCA/IG51bGwgOiBzbGljZS5jYWxsKF8pLCBheGlzKSA6IHRpY2tWYWx1ZXMgJiYgdGlja1ZhbHVlcy5zbGljZSgpO1xuICB9O1xuXG4gIGF4aXMudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrRm9ybWF0ID0gXywgYXhpcykgOiB0aWNrRm9ybWF0O1xuICB9O1xuXG4gIGF4aXMudGlja1NpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja1NpemVJbm5lciA9IHRpY2tTaXplT3V0ZXIgPSArXywgYXhpcykgOiB0aWNrU2l6ZUlubmVyO1xuICB9O1xuXG4gIGF4aXMudGlja1NpemVJbm5lciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZUlubmVyID0gK18sIGF4aXMpIDogdGlja1NpemVJbm5lcjtcbiAgfTtcblxuICBheGlzLnRpY2tTaXplT3V0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja1NpemVPdXRlciA9ICtfLCBheGlzKSA6IHRpY2tTaXplT3V0ZXI7XG4gIH07XG5cbiAgYXhpcy50aWNrUGFkZGluZyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrUGFkZGluZyA9ICtfLCBheGlzKSA6IHRpY2tQYWRkaW5nO1xuICB9O1xuXG4gIGF4aXMub2Zmc2V0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKG9mZnNldCA9ICtfLCBheGlzKSA6IG9mZnNldDtcbiAgfTtcblxuICByZXR1cm4gYXhpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNUb3Aoc2NhbGUpIHtcbiAgcmV0dXJuIGF4aXModG9wLCBzY2FsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlzUmlnaHQoc2NhbGUpIHtcbiAgcmV0dXJuIGF4aXMocmlnaHQsIHNjYWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNCb3R0b20oc2NhbGUpIHtcbiAgcmV0dXJuIGF4aXMoYm90dG9tLCBzY2FsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlzTGVmdChzY2FsZSkge1xuICByZXR1cm4gYXhpcyhsZWZ0LCBzY2FsZSk7XG59XG4iLCJ2YXIgbm9vcCA9IHt2YWx1ZTogKCkgPT4ge319O1xuXG5mdW5jdGlvbiBkaXNwYXRjaCgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSBhcmd1bWVudHMubGVuZ3RoLCBfID0ge30sIHQ7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoISh0ID0gYXJndW1lbnRzW2ldICsgXCJcIikgfHwgKHQgaW4gXykgfHwgL1tcXHMuXS8udGVzdCh0KSkgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCB0eXBlOiBcIiArIHQpO1xuICAgIF9bdF0gPSBbXTtcbiAgfVxuICByZXR1cm4gbmV3IERpc3BhdGNoKF8pO1xufVxuXG5mdW5jdGlvbiBEaXNwYXRjaChfKSB7XG4gIHRoaXMuXyA9IF87XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcywgdHlwZXMpIHtcbiAgcmV0dXJuIHR5cGVuYW1lcy50cmltKCkuc3BsaXQoL158XFxzKy8pLm1hcChmdW5jdGlvbih0KSB7XG4gICAgdmFyIG5hbWUgPSBcIlwiLCBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSBuYW1lID0gdC5zbGljZShpICsgMSksIHQgPSB0LnNsaWNlKDAsIGkpO1xuICAgIGlmICh0ICYmICF0eXBlcy5oYXNPd25Qcm9wZXJ0eSh0KSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHQpO1xuICAgIHJldHVybiB7dHlwZTogdCwgbmFtZTogbmFtZX07XG4gIH0pO1xufVxuXG5EaXNwYXRjaC5wcm90b3R5cGUgPSBkaXNwYXRjaC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBEaXNwYXRjaCxcbiAgb246IGZ1bmN0aW9uKHR5cGVuYW1lLCBjYWxsYmFjaykge1xuICAgIHZhciBfID0gdGhpcy5fLFxuICAgICAgICBUID0gcGFyc2VUeXBlbmFtZXModHlwZW5hbWUgKyBcIlwiLCBfKSxcbiAgICAgICAgdCxcbiAgICAgICAgaSA9IC0xLFxuICAgICAgICBuID0gVC5sZW5ndGg7XG5cbiAgICAvLyBJZiBubyBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZXR1cm4gdGhlIGNhbGxiYWNrIG9mIHRoZSBnaXZlbiB0eXBlIGFuZCBuYW1lLlxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICgodCA9ICh0eXBlbmFtZSA9IFRbaV0pLnR5cGUpICYmICh0ID0gZ2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUpKSkgcmV0dXJuIHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgYSB0eXBlIHdhcyBzcGVjaWZpZWQsIHNldCB0aGUgY2FsbGJhY2sgZm9yIHRoZSBnaXZlbiB0eXBlIGFuZCBuYW1lLlxuICAgIC8vIE90aGVyd2lzZSwgaWYgYSBudWxsIGNhbGxiYWNrIHdhcyBzcGVjaWZpZWQsIHJlbW92ZSBjYWxsYmFja3Mgb2YgdGhlIGdpdmVuIG5hbWUuXG4gICAgaWYgKGNhbGxiYWNrICE9IG51bGwgJiYgdHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgY2FsbGJhY2s6IFwiICsgY2FsbGJhY2spO1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAodCA9ICh0eXBlbmFtZSA9IFRbaV0pLnR5cGUpIF9bdF0gPSBzZXQoX1t0XSwgdHlwZW5hbWUubmFtZSwgY2FsbGJhY2spO1xuICAgICAgZWxzZSBpZiAoY2FsbGJhY2sgPT0gbnVsbCkgZm9yICh0IGluIF8pIF9bdF0gPSBzZXQoX1t0XSwgdHlwZW5hbWUubmFtZSwgbnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGNvcHk6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBjb3B5ID0ge30sIF8gPSB0aGlzLl87XG4gICAgZm9yICh2YXIgdCBpbiBfKSBjb3B5W3RdID0gX1t0XS5zbGljZSgpO1xuICAgIHJldHVybiBuZXcgRGlzcGF0Y2goY29weSk7XG4gIH0sXG4gIGNhbGw6IGZ1bmN0aW9uKHR5cGUsIHRoYXQpIHtcbiAgICBpZiAoKG4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMikgPiAwKSBmb3IgKHZhciBhcmdzID0gbmV3IEFycmF5KG4pLCBpID0gMCwgbiwgdDsgaSA8IG47ICsraSkgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMl07XG4gICAgaWYgKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodHlwZSkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0eXBlKTtcbiAgICBmb3IgKHQgPSB0aGlzLl9bdHlwZV0sIGkgPSAwLCBuID0gdC5sZW5ndGg7IGkgPCBuOyArK2kpIHRbaV0udmFsdWUuYXBwbHkodGhhdCwgYXJncyk7XG4gIH0sXG4gIGFwcGx5OiBmdW5jdGlvbih0eXBlLCB0aGF0LCBhcmdzKSB7XG4gICAgaWYgKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodHlwZSkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0eXBlKTtcbiAgICBmb3IgKHZhciB0ID0gdGhpcy5fW3R5cGVdLCBpID0gMCwgbiA9IHQubGVuZ3RoOyBpIDwgbjsgKytpKSB0W2ldLnZhbHVlLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBnZXQodHlwZSwgbmFtZSkge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IHR5cGUubGVuZ3RoLCBjOyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKChjID0gdHlwZVtpXSkubmFtZSA9PT0gbmFtZSkge1xuICAgICAgcmV0dXJuIGMudmFsdWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldCh0eXBlLCBuYW1lLCBjYWxsYmFjaykge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IHR5cGUubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKHR5cGVbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgdHlwZVtpXSA9IG5vb3AsIHR5cGUgPSB0eXBlLnNsaWNlKDAsIGkpLmNvbmNhdCh0eXBlLnNsaWNlKGkgKyAxKSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGNhbGxiYWNrICE9IG51bGwpIHR5cGUucHVzaCh7bmFtZTogbmFtZSwgdmFsdWU6IGNhbGxiYWNrfSk7XG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBkaXNwYXRjaDtcbiIsImV4cG9ydCB2YXIgeGh0bWwgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBzdmc6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgeGh0bWw6IHhodG1sLFxuICB4bGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gIHhtbDogXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy9cIlxufTtcbiIsImltcG9ydCBuYW1lc3BhY2VzIGZyb20gXCIuL25hbWVzcGFjZXMuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgcHJlZml4ID0gbmFtZSArPSBcIlwiLCBpID0gcHJlZml4LmluZGV4T2YoXCI6XCIpO1xuICBpZiAoaSA+PSAwICYmIChwcmVmaXggPSBuYW1lLnNsaWNlKDAsIGkpKSAhPT0gXCJ4bWxuc1wiKSBuYW1lID0gbmFtZS5zbGljZShpICsgMSk7XG4gIHJldHVybiBuYW1lc3BhY2VzLmhhc093blByb3BlcnR5KHByZWZpeCkgPyB7c3BhY2U6IG5hbWVzcGFjZXNbcHJlZml4XSwgbG9jYWw6IG5hbWV9IDogbmFtZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbn1cbiIsImltcG9ydCBuYW1lc3BhY2UgZnJvbSBcIi4vbmFtZXNwYWNlLmpzXCI7XG5pbXBvcnQge3hodG1sfSBmcm9tIFwiLi9uYW1lc3BhY2VzLmpzXCI7XG5cbmZ1bmN0aW9uIGNyZWF0b3JJbmhlcml0KG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBkb2N1bWVudCA9IHRoaXMub3duZXJEb2N1bWVudCxcbiAgICAgICAgdXJpID0gdGhpcy5uYW1lc3BhY2VVUkk7XG4gICAgcmV0dXJuIHVyaSA9PT0geGh0bWwgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0geGh0bWxcbiAgICAgICAgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpXG4gICAgICAgIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHVyaSwgbmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0b3JGaXhlZChmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiAoZnVsbG5hbWUubG9jYWxcbiAgICAgID8gY3JlYXRvckZpeGVkXG4gICAgICA6IGNyZWF0b3JJbmhlcml0KShmdWxsbmFtZSk7XG59XG4iLCJmdW5jdGlvbiBub25lKCkge31cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHNlbGVjdG9yID09IG51bGwgPyBub25lIDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJvYmplY3RcIiAmJiBcImxlbmd0aFwiIGluIHhcbiAgICA/IHggLy8gQXJyYXksIFR5cGVkQXJyYXksIE5vZGVMaXN0LCBhcnJheS1saWtlXG4gICAgOiBBcnJheS5mcm9tKHgpOyAvLyBNYXAsIFNldCwgaXRlcmFibGUsIHN0cmluZywgb3IgYW55dGhpbmcgZWxzZVxufVxuIiwiZnVuY3Rpb24gZW1wdHkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHNlbGVjdG9yID09IG51bGwgPyBlbXB0eSA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm1hdGNoZXMoc2VsZWN0b3IpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hpbGRNYXRjaGVyKHNlbGVjdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUubWF0Y2hlcyhzZWxlY3Rvcik7XG4gIH07XG59XG5cbiIsImltcG9ydCB7Y2hpbGRNYXRjaGVyfSBmcm9tIFwiLi4vbWF0Y2hlci5qc1wiO1xuXG52YXIgZmluZCA9IEFycmF5LnByb3RvdHlwZS5maW5kO1xuXG5mdW5jdGlvbiBjaGlsZEZpbmQobWF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmaW5kLmNhbGwodGhpcy5jaGlsZHJlbiwgbWF0Y2gpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjaGlsZEZpcnN0KCkge1xuICByZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KG1hdGNoID09IG51bGwgPyBjaGlsZEZpcnN0XG4gICAgICA6IGNoaWxkRmluZCh0eXBlb2YgbWF0Y2ggPT09IFwiZnVuY3Rpb25cIiA/IG1hdGNoIDogY2hpbGRNYXRjaGVyKG1hdGNoKSkpO1xufVxuIiwiaW1wb3J0IHtjaGlsZE1hdGNoZXJ9IGZyb20gXCIuLi9tYXRjaGVyLmpzXCI7XG5cbnZhciBmaWx0ZXIgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyO1xuXG5mdW5jdGlvbiBjaGlsZHJlbigpIHtcbiAgcmV0dXJuIHRoaXMuY2hpbGRyZW47XG59XG5cbmZ1bmN0aW9uIGNoaWxkcmVuRmlsdGVyKG1hdGNoKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcy5jaGlsZHJlbiwgbWF0Y2gpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3RBbGwobWF0Y2ggPT0gbnVsbCA/IGNoaWxkcmVuXG4gICAgICA6IGNoaWxkcmVuRmlsdGVyKHR5cGVvZiBtYXRjaCA9PT0gXCJmdW5jdGlvblwiID8gbWF0Y2ggOiBjaGlsZE1hdGNoZXIobWF0Y2gpKSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih1cGRhdGUpIHtcbiAgcmV0dXJuIG5ldyBBcnJheSh1cGRhdGUubGVuZ3RoKTtcbn1cbiIsImltcG9ydCBzcGFyc2UgZnJvbSBcIi4vc3BhcnNlLmpzXCI7XG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2VudGVyIHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFbnRlck5vZGUocGFyZW50LCBkYXR1bSkge1xuICB0aGlzLm93bmVyRG9jdW1lbnQgPSBwYXJlbnQub3duZXJEb2N1bWVudDtcbiAgdGhpcy5uYW1lc3BhY2VVUkkgPSBwYXJlbnQubmFtZXNwYWNlVVJJO1xuICB0aGlzLl9uZXh0ID0gbnVsbDtcbiAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICB0aGlzLl9fZGF0YV9fID0gZGF0dW07XG59XG5cbkVudGVyTm9kZS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBFbnRlck5vZGUsXG4gIGFwcGVuZENoaWxkOiBmdW5jdGlvbihjaGlsZCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgdGhpcy5fbmV4dCk7IH0sXG4gIGluc2VydEJlZm9yZTogZnVuY3Rpb24oY2hpbGQsIG5leHQpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIG5leHQpOyB9LFxuICBxdWVyeVNlbGVjdG9yOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOyB9LFxuICBxdWVyeVNlbGVjdG9yQWxsOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOyB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCB7RW50ZXJOb2RlfSBmcm9tIFwiLi9lbnRlci5qc1wiO1xuaW1wb3J0IGFycmF5IGZyb20gXCIuLi9hcnJheS5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuLi9jb25zdGFudC5qc1wiO1xuXG5mdW5jdGlvbiBiaW5kSW5kZXgocGFyZW50LCBncm91cCwgZW50ZXIsIHVwZGF0ZSwgZXhpdCwgZGF0YSkge1xuICB2YXIgaSA9IDAsXG4gICAgICBub2RlLFxuICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG5cbiAgLy8gUHV0IGFueSBub24tbnVsbCBub2RlcyB0aGF0IGZpdCBpbnRvIHVwZGF0ZS5cbiAgLy8gUHV0IGFueSBudWxsIG5vZGVzIGludG8gZW50ZXIuXG4gIC8vIFB1dCBhbnkgcmVtYWluaW5nIGRhdGEgaW50byBlbnRlci5cbiAgZm9yICg7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBub2RlLl9fZGF0YV9fID0gZGF0YVtpXTtcbiAgICAgIHVwZGF0ZVtpXSA9IG5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVudGVyW2ldID0gbmV3IEVudGVyTm9kZShwYXJlbnQsIGRhdGFbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFB1dCBhbnkgbm9uLW51bGwgbm9kZXMgdGhhdCBkb27igJl0IGZpdCBpbnRvIGV4aXQuXG4gIGZvciAoOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBiaW5kS2V5KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEsIGtleSkge1xuICB2YXIgaSxcbiAgICAgIG5vZGUsXG4gICAgICBub2RlQnlLZXlWYWx1ZSA9IG5ldyBNYXAsXG4gICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aCxcbiAgICAgIGtleVZhbHVlcyA9IG5ldyBBcnJheShncm91cExlbmd0aCksXG4gICAgICBrZXlWYWx1ZTtcblxuICAvLyBDb21wdXRlIHRoZSBrZXkgZm9yIGVhY2ggbm9kZS5cbiAgLy8gSWYgbXVsdGlwbGUgbm9kZXMgaGF2ZSB0aGUgc2FtZSBrZXksIHRoZSBkdXBsaWNhdGVzIGFyZSBhZGRlZCB0byBleGl0LlxuICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIGtleVZhbHVlc1tpXSA9IGtleVZhbHVlID0ga2V5LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApICsgXCJcIjtcbiAgICAgIGlmIChub2RlQnlLZXlWYWx1ZS5oYXMoa2V5VmFsdWUpKSB7XG4gICAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZUJ5S2V5VmFsdWUuc2V0KGtleVZhbHVlLCBub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBrZXkgZm9yIGVhY2ggZGF0dW0uXG4gIC8vIElmIHRoZXJlIGEgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBrZXksIGpvaW4gYW5kIGFkZCBpdCB0byB1cGRhdGUuXG4gIC8vIElmIHRoZXJlIGlzIG5vdCAob3IgdGhlIGtleSBpcyBhIGR1cGxpY2F0ZSksIGFkZCBpdCB0byBlbnRlci5cbiAgZm9yIChpID0gMDsgaSA8IGRhdGFMZW5ndGg7ICsraSkge1xuICAgIGtleVZhbHVlID0ga2V5LmNhbGwocGFyZW50LCBkYXRhW2ldLCBpLCBkYXRhKSArIFwiXCI7XG4gICAgaWYgKG5vZGUgPSBub2RlQnlLZXlWYWx1ZS5nZXQoa2V5VmFsdWUpKSB7XG4gICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICBub2RlQnlLZXlWYWx1ZS5kZWxldGUoa2V5VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgYW55IHJlbWFpbmluZyBub2RlcyB0aGF0IHdlcmUgbm90IGJvdW5kIHRvIGRhdGEgdG8gZXhpdC5cbiAgZm9yIChpID0gMDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKG5vZGVCeUtleVZhbHVlLmdldChrZXlWYWx1ZXNbaV0pID09PSBub2RlKSkge1xuICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRhdHVtKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuX19kYXRhX187XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLCBkYXR1bSk7XG5cbiAgdmFyIGJpbmQgPSBrZXkgPyBiaW5kS2V5IDogYmluZEluZGV4LFxuICAgICAgcGFyZW50cyA9IHRoaXMuX3BhcmVudHMsXG4gICAgICBncm91cHMgPSB0aGlzLl9ncm91cHM7XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB2YWx1ZSA9IGNvbnN0YW50KHZhbHVlKTtcblxuICBmb3IgKHZhciBtID0gZ3JvdXBzLmxlbmd0aCwgdXBkYXRlID0gbmV3IEFycmF5KG0pLCBlbnRlciA9IG5ldyBBcnJheShtKSwgZXhpdCA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICB2YXIgcGFyZW50ID0gcGFyZW50c1tqXSxcbiAgICAgICAgZ3JvdXAgPSBncm91cHNbal0sXG4gICAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgICBkYXRhID0gYXJyYXkodmFsdWUuY2FsbChwYXJlbnQsIHBhcmVudCAmJiBwYXJlbnQuX19kYXRhX18sIGosIHBhcmVudHMpKSxcbiAgICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoLFxuICAgICAgICBlbnRlckdyb3VwID0gZW50ZXJbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgIHVwZGF0ZUdyb3VwID0gdXBkYXRlW2pdID0gbmV3IEFycmF5KGRhdGFMZW5ndGgpLFxuICAgICAgICBleGl0R3JvdXAgPSBleGl0W2pdID0gbmV3IEFycmF5KGdyb3VwTGVuZ3RoKTtcblxuICAgIGJpbmQocGFyZW50LCBncm91cCwgZW50ZXJHcm91cCwgdXBkYXRlR3JvdXAsIGV4aXRHcm91cCwgZGF0YSwga2V5KTtcblxuICAgIC8vIE5vdyBjb25uZWN0IHRoZSBlbnRlciBub2RlcyB0byB0aGVpciBmb2xsb3dpbmcgdXBkYXRlIG5vZGUsIHN1Y2ggdGhhdFxuICAgIC8vIGFwcGVuZENoaWxkIGNhbiBpbnNlcnQgdGhlIG1hdGVyaWFsaXplZCBlbnRlciBub2RlIGJlZm9yZSB0aGlzIG5vZGUsXG4gICAgLy8gcmF0aGVyIHRoYW4gYXQgdGhlIGVuZCBvZiB0aGUgcGFyZW50IG5vZGUuXG4gICAgZm9yICh2YXIgaTAgPSAwLCBpMSA9IDAsIHByZXZpb3VzLCBuZXh0OyBpMCA8IGRhdGFMZW5ndGg7ICsraTApIHtcbiAgICAgIGlmIChwcmV2aW91cyA9IGVudGVyR3JvdXBbaTBdKSB7XG4gICAgICAgIGlmIChpMCA+PSBpMSkgaTEgPSBpMCArIDE7XG4gICAgICAgIHdoaWxlICghKG5leHQgPSB1cGRhdGVHcm91cFtpMV0pICYmICsraTEgPCBkYXRhTGVuZ3RoKTtcbiAgICAgICAgcHJldmlvdXMuX25leHQgPSBuZXh0IHx8IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlID0gbmV3IFNlbGVjdGlvbih1cGRhdGUsIHBhcmVudHMpO1xuICB1cGRhdGUuX2VudGVyID0gZW50ZXI7XG4gIHVwZGF0ZS5fZXhpdCA9IGV4aXQ7XG4gIHJldHVybiB1cGRhdGU7XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29tcGFyZSkge1xuICBpZiAoIWNvbXBhcmUpIGNvbXBhcmUgPSBhc2NlbmRpbmc7XG5cbiAgZnVuY3Rpb24gY29tcGFyZU5vZGUoYSwgYikge1xuICAgIHJldHVybiBhICYmIGIgPyBjb21wYXJlKGEuX19kYXRhX18sIGIuX19kYXRhX18pIDogIWEgLSAhYjtcbiAgfVxuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHNvcnRncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHNvcnRncm91cCA9IHNvcnRncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIHNvcnRncm91cFtpXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvcnRncm91cC5zb3J0KGNvbXBhcmVOb2RlKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHNvcnRncm91cHMsIHRoaXMuX3BhcmVudHMpLm9yZGVyKCk7XG59XG5cbmZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKSB7XG4gIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogYSA+PSBiID8gMCA6IE5hTjtcbn1cbiIsImltcG9ydCBuYW1lc3BhY2UgZnJvbSBcIi4uL25hbWVzcGFjZS5qc1wiO1xuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlTlMoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50KG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudE5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIHZhbHVlKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgZWxzZSB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uTlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIHYpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLm5vZGUoKTtcbiAgICByZXR1cm4gZnVsbG5hbWUubG9jYWxcbiAgICAgICAgPyBub2RlLmdldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbClcbiAgICAgICAgOiBub2RlLmdldEF0dHJpYnV0ZShmdWxsbmFtZSk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJSZW1vdmVOUyA6IGF0dHJSZW1vdmUpIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJGdW5jdGlvbk5TIDogYXR0ckZ1bmN0aW9uKVxuICAgICAgOiAoZnVsbG5hbWUubG9jYWwgPyBhdHRyQ29uc3RhbnROUyA6IGF0dHJDb25zdGFudCkpKShmdWxsbmFtZSwgdmFsdWUpKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUpIHtcbiAgcmV0dXJuIChub2RlLm93bmVyRG9jdW1lbnQgJiYgbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSAvLyBub2RlIGlzIGEgTm9kZVxuICAgICAgfHwgKG5vZGUuZG9jdW1lbnQgJiYgbm9kZSkgLy8gbm9kZSBpcyBhIFdpbmRvd1xuICAgICAgfHwgbm9kZS5kZWZhdWx0VmlldzsgLy8gbm9kZSBpcyBhIERvY3VtZW50XG59XG4iLCJpbXBvcnQgZGVmYXVsdFZpZXcgZnJvbSBcIi4uL3dpbmRvdy5qc1wiO1xuXG5mdW5jdGlvbiBzdHlsZVJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUNvbnN0YW50KG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gICAgZWxzZSB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHYsIHByaW9yaXR5KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMVxuICAgICAgPyB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgICAgICAgID8gc3R5bGVSZW1vdmUgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgPyBzdHlsZUZ1bmN0aW9uXG4gICAgICAgICAgICA6IHN0eWxlQ29uc3RhbnQpKG5hbWUsIHZhbHVlLCBwcmlvcml0eSA9PSBudWxsID8gXCJcIiA6IHByaW9yaXR5KSlcbiAgICAgIDogc3R5bGVWYWx1ZSh0aGlzLm5vZGUoKSwgbmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHlsZVZhbHVlKG5vZGUsIG5hbWUpIHtcbiAgcmV0dXJuIG5vZGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKVxuICAgICAgfHwgZGVmYXVsdFZpZXcobm9kZSkuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpO1xufVxuIiwiZnVuY3Rpb24gcHJvcGVydHlSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgZGVsZXRlIHRoaXNbbmFtZV07XG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5Q29uc3RhbnQobmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXNbbmFtZV0gPSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvcGVydHlGdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIGRlbGV0ZSB0aGlzW25hbWVdO1xuICAgIGVsc2UgdGhpc1tuYW1lXSA9IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMVxuICAgICAgPyB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgICAgICA/IHByb3BlcnR5UmVtb3ZlIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IHByb3BlcnR5RnVuY3Rpb25cbiAgICAgICAgICA6IHByb3BlcnR5Q29uc3RhbnQpKG5hbWUsIHZhbHVlKSlcbiAgICAgIDogdGhpcy5ub2RlKClbbmFtZV07XG59XG4iLCJmdW5jdGlvbiBjbGFzc0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnRyaW0oKS5zcGxpdCgvXnxcXHMrLyk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzTGlzdChub2RlKSB7XG4gIHJldHVybiBub2RlLmNsYXNzTGlzdCB8fCBuZXcgQ2xhc3NMaXN0KG5vZGUpO1xufVxuXG5mdW5jdGlvbiBDbGFzc0xpc3Qobm9kZSkge1xuICB0aGlzLl9ub2RlID0gbm9kZTtcbiAgdGhpcy5fbmFtZXMgPSBjbGFzc0FycmF5KG5vZGUuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgfHwgXCJcIik7XG59XG5cbkNsYXNzTGlzdC5wcm90b3R5cGUgPSB7XG4gIGFkZDogZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBpID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcbiAgICBpZiAoaSA8IDApIHtcbiAgICAgIHRoaXMuX25hbWVzLnB1c2gobmFtZSk7XG4gICAgICB0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHRoaXMuX25hbWVzLmpvaW4oXCIgXCIpKTtcbiAgICB9XG4gIH0sXG4gIHJlbW92ZTogZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBpID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcbiAgICBpZiAoaSA+PSAwKSB7XG4gICAgICB0aGlzLl9uYW1lcy5zcGxpY2UoaSwgMSk7XG4gICAgICB0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHRoaXMuX25hbWVzLmpvaW4oXCIgXCIpKTtcbiAgICB9XG4gIH0sXG4gIGNvbnRhaW5zOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSkgPj0gMDtcbiAgfVxufTtcblxuZnVuY3Rpb24gY2xhc3NlZEFkZChub2RlLCBuYW1lcykge1xuICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbGlzdC5hZGQobmFtZXNbaV0pO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkUmVtb3ZlKG5vZGUsIG5hbWVzKSB7XG4gIHZhciBsaXN0ID0gY2xhc3NMaXN0KG5vZGUpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gIHdoaWxlICgrK2kgPCBuKSBsaXN0LnJlbW92ZShuYW1lc1tpXSk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRUcnVlKG5hbWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBjbGFzc2VkQWRkKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZEZhbHNlKG5hbWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBjbGFzc2VkUmVtb3ZlKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZEZ1bmN0aW9uKG5hbWVzLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgKHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgPyBjbGFzc2VkQWRkIDogY2xhc3NlZFJlbW92ZSkodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgbmFtZXMgPSBjbGFzc0FycmF5KG5hbWUgKyBcIlwiKTtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgbGlzdCA9IGNsYXNzTGlzdCh0aGlzLm5vZGUoKSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgaWYgKCFsaXN0LmNvbnRhaW5zKG5hbWVzW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gY2xhc3NlZEZ1bmN0aW9uIDogdmFsdWVcbiAgICAgID8gY2xhc3NlZFRydWVcbiAgICAgIDogY2xhc3NlZEZhbHNlKShuYW1lcywgdmFsdWUpKTtcbn1cbiIsImZ1bmN0aW9uIHRleHRSZW1vdmUoKSB7XG4gIHRoaXMudGV4dENvbnRlbnQgPSBcIlwiO1xufVxuXG5mdW5jdGlvbiB0ZXh0Q29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdGV4dEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHYgPT0gbnVsbCA/IFwiXCIgOiB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2godmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gdGV4dFJlbW92ZSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gdGV4dEZ1bmN0aW9uXG4gICAgICAgICAgOiB0ZXh0Q29uc3RhbnQpKHZhbHVlKSlcbiAgICAgIDogdGhpcy5ub2RlKCkudGV4dENvbnRlbnQ7XG59XG4iLCJmdW5jdGlvbiBodG1sUmVtb3ZlKCkge1xuICB0aGlzLmlubmVySFRNTCA9IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGh0bWxDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pbm5lckhUTUwgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaHRtbEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdGhpcy5pbm5lckhUTUwgPSB2ID09IG51bGwgPyBcIlwiIDogdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKHZhbHVlID09IG51bGxcbiAgICAgICAgICA/IGh0bWxSZW1vdmUgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGh0bWxGdW5jdGlvblxuICAgICAgICAgIDogaHRtbENvbnN0YW50KSh2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpLmlubmVySFRNTDtcbn1cbiIsImZ1bmN0aW9uIHJhaXNlKCkge1xuICBpZiAodGhpcy5uZXh0U2libGluZykgdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChyYWlzZSk7XG59XG4iLCJmdW5jdGlvbiBsb3dlcigpIHtcbiAgaWYgKHRoaXMucHJldmlvdXNTaWJsaW5nKSB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsIHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gobG93ZXIpO1xufVxuIiwiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4uL2NyZWF0b3IuanNcIjtcbmltcG9ydCBzZWxlY3RvciBmcm9tIFwiLi4vc2VsZWN0b3IuanNcIjtcblxuZnVuY3Rpb24gY29uc3RhbnROdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgYmVmb3JlKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSksXG4gICAgICBzZWxlY3QgPSBiZWZvcmUgPT0gbnVsbCA/IGNvbnN0YW50TnVsbCA6IHR5cGVvZiBiZWZvcmUgPT09IFwiZnVuY3Rpb25cIiA/IGJlZm9yZSA6IHNlbGVjdG9yKGJlZm9yZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHNlbGVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IG51bGwpO1xuICB9KTtcbn1cbiIsImZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChyZW1vdmUpO1xufVxuIiwiZnVuY3Rpb24gc2VsZWN0aW9uX2Nsb25lU2hhbGxvdygpIHtcbiAgdmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUoZmFsc2UpLCBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gIHJldHVybiBwYXJlbnQgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNsb25lLCB0aGlzLm5leHRTaWJsaW5nKSA6IGNsb25lO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmVEZWVwKCkge1xuICB2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZSh0cnVlKSwgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICByZXR1cm4gcGFyZW50ID8gcGFyZW50Lmluc2VydEJlZm9yZShjbG9uZSwgdGhpcy5uZXh0U2libGluZykgOiBjbG9uZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZGVlcCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZGVlcCA/IHNlbGVjdGlvbl9jbG9uZURlZXAgOiBzZWxlY3Rpb25fY2xvbmVTaGFsbG93KTtcbn1cbiIsImZ1bmN0aW9uIGNvbnRleHRMaXN0ZW5lcihsaXN0ZW5lcikge1xuICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIGV2ZW50LCB0aGlzLl9fZGF0YV9fKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUeXBlbmFtZXModHlwZW5hbWVzKSB7XG4gIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xuICAgIHZhciBuYW1lID0gXCJcIiwgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgbmFtZSA9IHQuc2xpY2UoaSArIDEpLCB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICByZXR1cm4ge3R5cGU6IHQsIG5hbWU6IG5hbWV9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb25SZW1vdmUodHlwZW5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvbiA9IHRoaXMuX19vbjtcbiAgICBpZiAoIW9uKSByZXR1cm47XG4gICAgZm9yICh2YXIgaiA9IDAsIGkgPSAtMSwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xuICAgICAgaWYgKG8gPSBvbltqXSwgKCF0eXBlbmFtZS50eXBlIHx8IG8udHlwZSA9PT0gdHlwZW5hbWUudHlwZSkgJiYgby5uYW1lID09PSB0eXBlbmFtZS5uYW1lKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIsIG8ub3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvblsrK2ldID0gbztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCsraSkgb24ubGVuZ3RoID0gaTtcbiAgICBlbHNlIGRlbGV0ZSB0aGlzLl9fb247XG4gIH07XG59XG5cbmZ1bmN0aW9uIG9uQWRkKHR5cGVuYW1lLCB2YWx1ZSwgb3B0aW9ucykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG9uID0gdGhpcy5fX29uLCBvLCBsaXN0ZW5lciA9IGNvbnRleHRMaXN0ZW5lcih2YWx1ZSk7XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgICAgaWYgKChvID0gb25bal0pLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUgJiYgby5uYW1lID09PSB0eXBlbmFtZS5uYW1lKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIsIG8ub3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIgPSBsaXN0ZW5lciwgby5vcHRpb25zID0gb3B0aW9ucyk7XG4gICAgICAgIG8udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIodHlwZW5hbWUudHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICAgIG8gPSB7dHlwZTogdHlwZW5hbWUudHlwZSwgbmFtZTogdHlwZW5hbWUubmFtZSwgdmFsdWU6IHZhbHVlLCBsaXN0ZW5lcjogbGlzdGVuZXIsIG9wdGlvbnM6IG9wdGlvbnN9O1xuICAgIGlmICghb24pIHRoaXMuX19vbiA9IFtvXTtcbiAgICBlbHNlIG9uLnB1c2gobyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHR5cGVuYW1lLCB2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgdHlwZW5hbWVzID0gcGFyc2VUeXBlbmFtZXModHlwZW5hbWUgKyBcIlwiKSwgaSwgbiA9IHR5cGVuYW1lcy5sZW5ndGgsIHQ7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIG9uID0gdGhpcy5ub2RlKCkuX19vbjtcbiAgICBpZiAob24pIGZvciAodmFyIGogPSAwLCBtID0gb24ubGVuZ3RoLCBvOyBqIDwgbTsgKytqKSB7XG4gICAgICBmb3IgKGkgPSAwLCBvID0gb25bal07IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKCh0ID0gdHlwZW5hbWVzW2ldKS50eXBlID09PSBvLnR5cGUgJiYgdC5uYW1lID09PSBvLm5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gby52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBvbiA9IHZhbHVlID8gb25BZGQgOiBvblJlbW92ZTtcbiAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgdGhpcy5lYWNoKG9uKHR5cGVuYW1lc1tpXSwgdmFsdWUsIG9wdGlvbnMpKTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJpbXBvcnQgZGVmYXVsdFZpZXcgZnJvbSBcIi4uL3dpbmRvdy5qc1wiO1xuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50KG5vZGUsIHR5cGUsIHBhcmFtcykge1xuICB2YXIgd2luZG93ID0gZGVmYXVsdFZpZXcobm9kZSksXG4gICAgICBldmVudCA9IHdpbmRvdy5DdXN0b21FdmVudDtcblxuICBpZiAodHlwZW9mIGV2ZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBldmVudCA9IG5ldyBldmVudCh0eXBlLCBwYXJhbXMpO1xuICB9IGVsc2Uge1xuICAgIGV2ZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gICAgaWYgKHBhcmFtcykgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIHBhcmFtcy5idWJibGVzLCBwYXJhbXMuY2FuY2VsYWJsZSksIGV2ZW50LmRldGFpbCA9IHBhcmFtcy5kZXRhaWw7XG4gICAgZWxzZSBldmVudC5pbml0RXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQ29uc3RhbnQodHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2hFdmVudCh0aGlzLCB0eXBlLCBwYXJhbXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEZ1bmN0aW9uKHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHBhcmFtcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGRpc3BhdGNoRnVuY3Rpb25cbiAgICAgIDogZGlzcGF0Y2hDb25zdGFudCkodHlwZSwgcGFyYW1zKSk7XG59XG4iLCJpbXBvcnQgc2VsZWN0aW9uX3NlbGVjdCBmcm9tIFwiLi9zZWxlY3QuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2VsZWN0QWxsIGZyb20gXCIuL3NlbGVjdEFsbC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3RDaGlsZCBmcm9tIFwiLi9zZWxlY3RDaGlsZC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3RDaGlsZHJlbiBmcm9tIFwiLi9zZWxlY3RDaGlsZHJlbi5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9maWx0ZXIgZnJvbSBcIi4vZmlsdGVyLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2RhdGEgZnJvbSBcIi4vZGF0YS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9lbnRlciBmcm9tIFwiLi9lbnRlci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9leGl0IGZyb20gXCIuL2V4aXQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fam9pbiBmcm9tIFwiLi9qb2luLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX21lcmdlIGZyb20gXCIuL21lcmdlLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX29yZGVyIGZyb20gXCIuL29yZGVyLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NvcnQgZnJvbSBcIi4vc29ydC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9jYWxsIGZyb20gXCIuL2NhbGwuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbm9kZXMgZnJvbSBcIi4vbm9kZXMuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbm9kZSBmcm9tIFwiLi9ub2RlLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NpemUgZnJvbSBcIi4vc2l6ZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9lbXB0eSBmcm9tIFwiLi9lbXB0eS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9lYWNoIGZyb20gXCIuL2VhY2guanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fYXR0ciBmcm9tIFwiLi9hdHRyLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3N0eWxlIGZyb20gXCIuL3N0eWxlLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3Byb3BlcnR5IGZyb20gXCIuL3Byb3BlcnR5LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2NsYXNzZWQgZnJvbSBcIi4vY2xhc3NlZC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl90ZXh0IGZyb20gXCIuL3RleHQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25faHRtbCBmcm9tIFwiLi9odG1sLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3JhaXNlIGZyb20gXCIuL3JhaXNlLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2xvd2VyIGZyb20gXCIuL2xvd2VyLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2FwcGVuZCBmcm9tIFwiLi9hcHBlbmQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25faW5zZXJ0IGZyb20gXCIuL2luc2VydC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9yZW1vdmUgZnJvbSBcIi4vcmVtb3ZlLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2Nsb25lIGZyb20gXCIuL2Nsb25lLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2RhdHVtIGZyb20gXCIuL2RhdHVtLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX29uIGZyb20gXCIuL29uLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2Rpc3BhdGNoIGZyb20gXCIuL2Rpc3BhdGNoLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2l0ZXJhdG9yIGZyb20gXCIuL2l0ZXJhdG9yLmpzXCI7XG5cbmV4cG9ydCB2YXIgcm9vdCA9IFtudWxsXTtcblxuZXhwb3J0IGZ1bmN0aW9uIFNlbGVjdGlvbihncm91cHMsIHBhcmVudHMpIHtcbiAgdGhpcy5fZ3JvdXBzID0gZ3JvdXBzO1xuICB0aGlzLl9wYXJlbnRzID0gcGFyZW50cztcbn1cblxuZnVuY3Rpb24gc2VsZWN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLCByb290KTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0aW9uX3NlbGVjdGlvbigpIHtcbiAgcmV0dXJuIHRoaXM7XG59XG5cblNlbGVjdGlvbi5wcm90b3R5cGUgPSBzZWxlY3Rpb24ucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogU2VsZWN0aW9uLFxuICBzZWxlY3Q6IHNlbGVjdGlvbl9zZWxlY3QsXG4gIHNlbGVjdEFsbDogc2VsZWN0aW9uX3NlbGVjdEFsbCxcbiAgc2VsZWN0Q2hpbGQ6IHNlbGVjdGlvbl9zZWxlY3RDaGlsZCxcbiAgc2VsZWN0Q2hpbGRyZW46IHNlbGVjdGlvbl9zZWxlY3RDaGlsZHJlbixcbiAgZmlsdGVyOiBzZWxlY3Rpb25fZmlsdGVyLFxuICBkYXRhOiBzZWxlY3Rpb25fZGF0YSxcbiAgZW50ZXI6IHNlbGVjdGlvbl9lbnRlcixcbiAgZXhpdDogc2VsZWN0aW9uX2V4aXQsXG4gIGpvaW46IHNlbGVjdGlvbl9qb2luLFxuICBtZXJnZTogc2VsZWN0aW9uX21lcmdlLFxuICBzZWxlY3Rpb246IHNlbGVjdGlvbl9zZWxlY3Rpb24sXG4gIG9yZGVyOiBzZWxlY3Rpb25fb3JkZXIsXG4gIHNvcnQ6IHNlbGVjdGlvbl9zb3J0LFxuICBjYWxsOiBzZWxlY3Rpb25fY2FsbCxcbiAgbm9kZXM6IHNlbGVjdGlvbl9ub2RlcyxcbiAgbm9kZTogc2VsZWN0aW9uX25vZGUsXG4gIHNpemU6IHNlbGVjdGlvbl9zaXplLFxuICBlbXB0eTogc2VsZWN0aW9uX2VtcHR5LFxuICBlYWNoOiBzZWxlY3Rpb25fZWFjaCxcbiAgYXR0cjogc2VsZWN0aW9uX2F0dHIsXG4gIHN0eWxlOiBzZWxlY3Rpb25fc3R5bGUsXG4gIHByb3BlcnR5OiBzZWxlY3Rpb25fcHJvcGVydHksXG4gIGNsYXNzZWQ6IHNlbGVjdGlvbl9jbGFzc2VkLFxuICB0ZXh0OiBzZWxlY3Rpb25fdGV4dCxcbiAgaHRtbDogc2VsZWN0aW9uX2h0bWwsXG4gIHJhaXNlOiBzZWxlY3Rpb25fcmFpc2UsXG4gIGxvd2VyOiBzZWxlY3Rpb25fbG93ZXIsXG4gIGFwcGVuZDogc2VsZWN0aW9uX2FwcGVuZCxcbiAgaW5zZXJ0OiBzZWxlY3Rpb25faW5zZXJ0LFxuICByZW1vdmU6IHNlbGVjdGlvbl9yZW1vdmUsXG4gIGNsb25lOiBzZWxlY3Rpb25fY2xvbmUsXG4gIGRhdHVtOiBzZWxlY3Rpb25fZGF0dW0sXG4gIG9uOiBzZWxlY3Rpb25fb24sXG4gIGRpc3BhdGNoOiBzZWxlY3Rpb25fZGlzcGF0Y2gsXG4gIFtTeW1ib2wuaXRlcmF0b3JdOiBzZWxlY3Rpb25faXRlcmF0b3Jcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHNlbGVjdGlvbjtcbiIsImltcG9ydCB7U2VsZWN0aW9uLCByb290fSBmcm9tIFwiLi9zZWxlY3Rpb24vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBuZXcgU2VsZWN0aW9uKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcildXSwgW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pXG4gICAgICA6IG5ldyBTZWxlY3Rpb24oW1tzZWxlY3Rvcl1dLCByb290KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnN0cnVjdG9yLCBmYWN0b3J5LCBwcm90b3R5cGUpIHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gZmFjdG9yeS5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gIHByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKHBhcmVudCwgZGVmaW5pdGlvbikge1xuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShwYXJlbnQucHJvdG90eXBlKTtcbiAgZm9yICh2YXIga2V5IGluIGRlZmluaXRpb24pIHByb3RvdHlwZVtrZXldID0gZGVmaW5pdGlvbltrZXldO1xuICByZXR1cm4gcHJvdG90eXBlO1xufVxuIiwiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBDb2xvcigpIHt9XG5cbmV4cG9ydCB2YXIgZGFya2VyID0gMC43O1xuZXhwb3J0IHZhciBicmlnaHRlciA9IDEgLyBkYXJrZXI7XG5cbnZhciByZUkgPSBcIlxcXFxzKihbKy1dP1xcXFxkKylcXFxccypcIixcbiAgICByZU4gPSBcIlxcXFxzKihbKy1dP1xcXFxkKlxcXFwuP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KVxcXFxzKlwiLFxuICAgIHJlUCA9IFwiXFxcXHMqKFsrLV0/XFxcXGQqXFxcXC4/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pJVxcXFxzKlwiLFxuICAgIHJlSGV4ID0gL14jKFswLTlhLWZdezMsOH0pJC8sXG4gICAgcmVSZ2JJbnRlZ2VyID0gbmV3IFJlZ0V4cChcIl5yZ2JcXFxcKFwiICsgW3JlSSwgcmVJLCByZUldICsgXCJcXFxcKSRcIiksXG4gICAgcmVSZ2JQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5yZ2JcXFxcKFwiICsgW3JlUCwgcmVQLCByZVBdICsgXCJcXFxcKSRcIiksXG4gICAgcmVSZ2JhSW50ZWdlciA9IG5ldyBSZWdFeHAoXCJecmdiYVxcXFwoXCIgKyBbcmVJLCByZUksIHJlSSwgcmVOXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlUmdiYVBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXnJnYmFcXFxcKFwiICsgW3JlUCwgcmVQLCByZVAsIHJlTl0gKyBcIlxcXFwpJFwiKSxcbiAgICByZUhzbFBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXmhzbFxcXFwoXCIgKyBbcmVOLCByZVAsIHJlUF0gKyBcIlxcXFwpJFwiKSxcbiAgICByZUhzbGFQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5oc2xhXFxcXChcIiArIFtyZU4sIHJlUCwgcmVQLCByZU5dICsgXCJcXFxcKSRcIik7XG5cbnZhciBuYW1lZCA9IHtcbiAgYWxpY2VibHVlOiAweGYwZjhmZixcbiAgYW50aXF1ZXdoaXRlOiAweGZhZWJkNyxcbiAgYXF1YTogMHgwMGZmZmYsXG4gIGFxdWFtYXJpbmU6IDB4N2ZmZmQ0LFxuICBhenVyZTogMHhmMGZmZmYsXG4gIGJlaWdlOiAweGY1ZjVkYyxcbiAgYmlzcXVlOiAweGZmZTRjNCxcbiAgYmxhY2s6IDB4MDAwMDAwLFxuICBibGFuY2hlZGFsbW9uZDogMHhmZmViY2QsXG4gIGJsdWU6IDB4MDAwMGZmLFxuICBibHVldmlvbGV0OiAweDhhMmJlMixcbiAgYnJvd246IDB4YTUyYTJhLFxuICBidXJseXdvb2Q6IDB4ZGViODg3LFxuICBjYWRldGJsdWU6IDB4NWY5ZWEwLFxuICBjaGFydHJldXNlOiAweDdmZmYwMCxcbiAgY2hvY29sYXRlOiAweGQyNjkxZSxcbiAgY29yYWw6IDB4ZmY3ZjUwLFxuICBjb3JuZmxvd2VyYmx1ZTogMHg2NDk1ZWQsXG4gIGNvcm5zaWxrOiAweGZmZjhkYyxcbiAgY3JpbXNvbjogMHhkYzE0M2MsXG4gIGN5YW46IDB4MDBmZmZmLFxuICBkYXJrYmx1ZTogMHgwMDAwOGIsXG4gIGRhcmtjeWFuOiAweDAwOGI4YixcbiAgZGFya2dvbGRlbnJvZDogMHhiODg2MGIsXG4gIGRhcmtncmF5OiAweGE5YTlhOSxcbiAgZGFya2dyZWVuOiAweDAwNjQwMCxcbiAgZGFya2dyZXk6IDB4YTlhOWE5LFxuICBkYXJra2hha2k6IDB4YmRiNzZiLFxuICBkYXJrbWFnZW50YTogMHg4YjAwOGIsXG4gIGRhcmtvbGl2ZWdyZWVuOiAweDU1NmIyZixcbiAgZGFya29yYW5nZTogMHhmZjhjMDAsXG4gIGRhcmtvcmNoaWQ6IDB4OTkzMmNjLFxuICBkYXJrcmVkOiAweDhiMDAwMCxcbiAgZGFya3NhbG1vbjogMHhlOTk2N2EsXG4gIGRhcmtzZWFncmVlbjogMHg4ZmJjOGYsXG4gIGRhcmtzbGF0ZWJsdWU6IDB4NDgzZDhiLFxuICBkYXJrc2xhdGVncmF5OiAweDJmNGY0ZixcbiAgZGFya3NsYXRlZ3JleTogMHgyZjRmNGYsXG4gIGRhcmt0dXJxdW9pc2U6IDB4MDBjZWQxLFxuICBkYXJrdmlvbGV0OiAweDk0MDBkMyxcbiAgZGVlcHBpbms6IDB4ZmYxNDkzLFxuICBkZWVwc2t5Ymx1ZTogMHgwMGJmZmYsXG4gIGRpbWdyYXk6IDB4Njk2OTY5LFxuICBkaW1ncmV5OiAweDY5Njk2OSxcbiAgZG9kZ2VyYmx1ZTogMHgxZTkwZmYsXG4gIGZpcmVicmljazogMHhiMjIyMjIsXG4gIGZsb3JhbHdoaXRlOiAweGZmZmFmMCxcbiAgZm9yZXN0Z3JlZW46IDB4MjI4YjIyLFxuICBmdWNoc2lhOiAweGZmMDBmZixcbiAgZ2FpbnNib3JvOiAweGRjZGNkYyxcbiAgZ2hvc3R3aGl0ZTogMHhmOGY4ZmYsXG4gIGdvbGQ6IDB4ZmZkNzAwLFxuICBnb2xkZW5yb2Q6IDB4ZGFhNTIwLFxuICBncmF5OiAweDgwODA4MCxcbiAgZ3JlZW46IDB4MDA4MDAwLFxuICBncmVlbnllbGxvdzogMHhhZGZmMmYsXG4gIGdyZXk6IDB4ODA4MDgwLFxuICBob25leWRldzogMHhmMGZmZjAsXG4gIGhvdHBpbms6IDB4ZmY2OWI0LFxuICBpbmRpYW5yZWQ6IDB4Y2Q1YzVjLFxuICBpbmRpZ286IDB4NGIwMDgyLFxuICBpdm9yeTogMHhmZmZmZjAsXG4gIGtoYWtpOiAweGYwZTY4YyxcbiAgbGF2ZW5kZXI6IDB4ZTZlNmZhLFxuICBsYXZlbmRlcmJsdXNoOiAweGZmZjBmNSxcbiAgbGF3bmdyZWVuOiAweDdjZmMwMCxcbiAgbGVtb25jaGlmZm9uOiAweGZmZmFjZCxcbiAgbGlnaHRibHVlOiAweGFkZDhlNixcbiAgbGlnaHRjb3JhbDogMHhmMDgwODAsXG4gIGxpZ2h0Y3lhbjogMHhlMGZmZmYsXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiAweGZhZmFkMixcbiAgbGlnaHRncmF5OiAweGQzZDNkMyxcbiAgbGlnaHRncmVlbjogMHg5MGVlOTAsXG4gIGxpZ2h0Z3JleTogMHhkM2QzZDMsXG4gIGxpZ2h0cGluazogMHhmZmI2YzEsXG4gIGxpZ2h0c2FsbW9uOiAweGZmYTA3YSxcbiAgbGlnaHRzZWFncmVlbjogMHgyMGIyYWEsXG4gIGxpZ2h0c2t5Ymx1ZTogMHg4N2NlZmEsXG4gIGxpZ2h0c2xhdGVncmF5OiAweDc3ODg5OSxcbiAgbGlnaHRzbGF0ZWdyZXk6IDB4Nzc4ODk5LFxuICBsaWdodHN0ZWVsYmx1ZTogMHhiMGM0ZGUsXG4gIGxpZ2h0eWVsbG93OiAweGZmZmZlMCxcbiAgbGltZTogMHgwMGZmMDAsXG4gIGxpbWVncmVlbjogMHgzMmNkMzIsXG4gIGxpbmVuOiAweGZhZjBlNixcbiAgbWFnZW50YTogMHhmZjAwZmYsXG4gIG1hcm9vbjogMHg4MDAwMDAsXG4gIG1lZGl1bWFxdWFtYXJpbmU6IDB4NjZjZGFhLFxuICBtZWRpdW1ibHVlOiAweDAwMDBjZCxcbiAgbWVkaXVtb3JjaGlkOiAweGJhNTVkMyxcbiAgbWVkaXVtcHVycGxlOiAweDkzNzBkYixcbiAgbWVkaXVtc2VhZ3JlZW46IDB4M2NiMzcxLFxuICBtZWRpdW1zbGF0ZWJsdWU6IDB4N2I2OGVlLFxuICBtZWRpdW1zcHJpbmdncmVlbjogMHgwMGZhOWEsXG4gIG1lZGl1bXR1cnF1b2lzZTogMHg0OGQxY2MsXG4gIG1lZGl1bXZpb2xldHJlZDogMHhjNzE1ODUsXG4gIG1pZG5pZ2h0Ymx1ZTogMHgxOTE5NzAsXG4gIG1pbnRjcmVhbTogMHhmNWZmZmEsXG4gIG1pc3R5cm9zZTogMHhmZmU0ZTEsXG4gIG1vY2Nhc2luOiAweGZmZTRiNSxcbiAgbmF2YWpvd2hpdGU6IDB4ZmZkZWFkLFxuICBuYXZ5OiAweDAwMDA4MCxcbiAgb2xkbGFjZTogMHhmZGY1ZTYsXG4gIG9saXZlOiAweDgwODAwMCxcbiAgb2xpdmVkcmFiOiAweDZiOGUyMyxcbiAgb3JhbmdlOiAweGZmYTUwMCxcbiAgb3JhbmdlcmVkOiAweGZmNDUwMCxcbiAgb3JjaGlkOiAweGRhNzBkNixcbiAgcGFsZWdvbGRlbnJvZDogMHhlZWU4YWEsXG4gIHBhbGVncmVlbjogMHg5OGZiOTgsXG4gIHBhbGV0dXJxdW9pc2U6IDB4YWZlZWVlLFxuICBwYWxldmlvbGV0cmVkOiAweGRiNzA5MyxcbiAgcGFwYXlhd2hpcDogMHhmZmVmZDUsXG4gIHBlYWNocHVmZjogMHhmZmRhYjksXG4gIHBlcnU6IDB4Y2Q4NTNmLFxuICBwaW5rOiAweGZmYzBjYixcbiAgcGx1bTogMHhkZGEwZGQsXG4gIHBvd2RlcmJsdWU6IDB4YjBlMGU2LFxuICBwdXJwbGU6IDB4ODAwMDgwLFxuICByZWJlY2NhcHVycGxlOiAweDY2MzM5OSxcbiAgcmVkOiAweGZmMDAwMCxcbiAgcm9zeWJyb3duOiAweGJjOGY4ZixcbiAgcm95YWxibHVlOiAweDQxNjllMSxcbiAgc2FkZGxlYnJvd246IDB4OGI0NTEzLFxuICBzYWxtb246IDB4ZmE4MDcyLFxuICBzYW5keWJyb3duOiAweGY0YTQ2MCxcbiAgc2VhZ3JlZW46IDB4MmU4YjU3LFxuICBzZWFzaGVsbDogMHhmZmY1ZWUsXG4gIHNpZW5uYTogMHhhMDUyMmQsXG4gIHNpbHZlcjogMHhjMGMwYzAsXG4gIHNreWJsdWU6IDB4ODdjZWViLFxuICBzbGF0ZWJsdWU6IDB4NmE1YWNkLFxuICBzbGF0ZWdyYXk6IDB4NzA4MDkwLFxuICBzbGF0ZWdyZXk6IDB4NzA4MDkwLFxuICBzbm93OiAweGZmZmFmYSxcbiAgc3ByaW5nZ3JlZW46IDB4MDBmZjdmLFxuICBzdGVlbGJsdWU6IDB4NDY4MmI0LFxuICB0YW46IDB4ZDJiNDhjLFxuICB0ZWFsOiAweDAwODA4MCxcbiAgdGhpc3RsZTogMHhkOGJmZDgsXG4gIHRvbWF0bzogMHhmZjYzNDcsXG4gIHR1cnF1b2lzZTogMHg0MGUwZDAsXG4gIHZpb2xldDogMHhlZTgyZWUsXG4gIHdoZWF0OiAweGY1ZGViMyxcbiAgd2hpdGU6IDB4ZmZmZmZmLFxuICB3aGl0ZXNtb2tlOiAweGY1ZjVmNSxcbiAgeWVsbG93OiAweGZmZmYwMCxcbiAgeWVsbG93Z3JlZW46IDB4OWFjZDMyXG59O1xuXG5kZWZpbmUoQ29sb3IsIGNvbG9yLCB7XG4gIGNvcHk6IGZ1bmN0aW9uKGNoYW5uZWxzKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsIHRoaXMsIGNoYW5uZWxzKTtcbiAgfSxcbiAgZGlzcGxheWFibGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCk7XG4gIH0sXG4gIGhleDogY29sb3JfZm9ybWF0SGV4LCAvLyBEZXByZWNhdGVkISBVc2UgY29sb3IuZm9ybWF0SGV4LlxuICBmb3JtYXRIZXg6IGNvbG9yX2Zvcm1hdEhleCxcbiAgZm9ybWF0SHNsOiBjb2xvcl9mb3JtYXRIc2wsXG4gIGZvcm1hdFJnYjogY29sb3JfZm9ybWF0UmdiLFxuICB0b1N0cmluZzogY29sb3JfZm9ybWF0UmdiXG59KTtcblxuZnVuY3Rpb24gY29sb3JfZm9ybWF0SGV4KCkge1xuICByZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKTtcbn1cblxuZnVuY3Rpb24gY29sb3JfZm9ybWF0SHNsKCkge1xuICByZXR1cm4gaHNsQ29udmVydCh0aGlzKS5mb3JtYXRIc2woKTtcbn1cblxuZnVuY3Rpb24gY29sb3JfZm9ybWF0UmdiKCkge1xuICByZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sb3IoZm9ybWF0KSB7XG4gIHZhciBtLCBsO1xuICBmb3JtYXQgPSAoZm9ybWF0ICsgXCJcIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAobSA9IHJlSGV4LmV4ZWMoZm9ybWF0KSkgPyAobCA9IG1bMV0ubGVuZ3RoLCBtID0gcGFyc2VJbnQobVsxXSwgMTYpLCBsID09PSA2ID8gcmdibihtKSAvLyAjZmYwMDAwXG4gICAgICA6IGwgPT09IDMgPyBuZXcgUmdiKChtID4+IDggJiAweGYpIHwgKG0gPj4gNCAmIDB4ZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgobSAmIDB4ZikgPDwgNCkgfCAobSAmIDB4ZiksIDEpIC8vICNmMDBcbiAgICAgIDogbCA9PT0gOCA/IHJnYmEobSA+PiAyNCAmIDB4ZmYsIG0gPj4gMTYgJiAweGZmLCBtID4+IDggJiAweGZmLCAobSAmIDB4ZmYpIC8gMHhmZikgLy8gI2ZmMDAwMDAwXG4gICAgICA6IGwgPT09IDQgPyByZ2JhKChtID4+IDEyICYgMHhmKSB8IChtID4+IDggJiAweGYwKSwgKG0gPj4gOCAmIDB4ZikgfCAobSA+PiA0ICYgMHhmMCksIChtID4+IDQgJiAweGYpIHwgKG0gJiAweGYwKSwgKCgobSAmIDB4ZikgPDwgNCkgfCAobSAmIDB4ZikpIC8gMHhmZikgLy8gI2YwMDBcbiAgICAgIDogbnVsbCkgLy8gaW52YWxpZCBoZXhcbiAgICAgIDogKG0gPSByZVJnYkludGVnZXIuZXhlYyhmb3JtYXQpKSA/IG5ldyBSZ2IobVsxXSwgbVsyXSwgbVszXSwgMSkgLy8gcmdiKDI1NSwgMCwgMClcbiAgICAgIDogKG0gPSByZVJnYlBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IG5ldyBSZ2IobVsxXSAqIDI1NSAvIDEwMCwgbVsyXSAqIDI1NSAvIDEwMCwgbVszXSAqIDI1NSAvIDEwMCwgMSkgLy8gcmdiKDEwMCUsIDAlLCAwJSlcbiAgICAgIDogKG0gPSByZVJnYmFJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0sIG1bMl0sIG1bM10sIG1bNF0pIC8vIHJnYmEoMjU1LCAwLCAwLCAxKVxuICAgICAgOiAobSA9IHJlUmdiYVBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IHJnYmEobVsxXSAqIDI1NSAvIDEwMCwgbVsyXSAqIDI1NSAvIDEwMCwgbVszXSAqIDI1NSAvIDEwMCwgbVs0XSkgLy8gcmdiKDEwMCUsIDAlLCAwJSwgMSlcbiAgICAgIDogKG0gPSByZUhzbFBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IGhzbGEobVsxXSwgbVsyXSAvIDEwMCwgbVszXSAvIDEwMCwgMSkgLy8gaHNsKDEyMCwgNTAlLCA1MCUpXG4gICAgICA6IChtID0gcmVIc2xhUGVyY2VudC5leGVjKGZvcm1hdCkpID8gaHNsYShtWzFdLCBtWzJdIC8gMTAwLCBtWzNdIC8gMTAwLCBtWzRdKSAvLyBoc2xhKDEyMCwgNTAlLCA1MCUsIDEpXG4gICAgICA6IG5hbWVkLmhhc093blByb3BlcnR5KGZvcm1hdCkgPyByZ2JuKG5hbWVkW2Zvcm1hdF0pIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICA6IGZvcm1hdCA9PT0gXCJ0cmFuc3BhcmVudFwiID8gbmV3IFJnYihOYU4sIE5hTiwgTmFOLCAwKVxuICAgICAgOiBudWxsO1xufVxuXG5mdW5jdGlvbiByZ2JuKG4pIHtcbiAgcmV0dXJuIG5ldyBSZ2IobiA+PiAxNiAmIDB4ZmYsIG4gPj4gOCAmIDB4ZmYsIG4gJiAweGZmLCAxKTtcbn1cblxuZnVuY3Rpb24gcmdiYShyLCBnLCBiLCBhKSB7XG4gIGlmIChhIDw9IDApIHIgPSBnID0gYiA9IE5hTjtcbiAgcmV0dXJuIG5ldyBSZ2IociwgZywgYiwgYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZ2JDb252ZXJ0KG8pIHtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgUmdiO1xuICBvID0gby5yZ2IoKTtcbiAgcmV0dXJuIG5ldyBSZ2Ioby5yLCBvLmcsIG8uYiwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJnYihyLCBnLCBiLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gcmdiQ29udmVydChyKSA6IG5ldyBSZ2IociwgZywgYiwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmdiKHIsIGcsIGIsIG9wYWNpdHkpIHtcbiAgdGhpcy5yID0gK3I7XG4gIHRoaXMuZyA9ICtnO1xuICB0aGlzLmIgPSArYjtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShSZ2IsIHJnYiwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgUmdiKHRoaXMuciAqIGssIHRoaXMuZyAqIGssIHRoaXMuYiAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIGRhcmtlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBkYXJrZXIgOiBNYXRoLnBvdyhkYXJrZXIsIGspO1xuICAgIHJldHVybiBuZXcgUmdiKHRoaXMuciAqIGssIHRoaXMuZyAqIGssIHRoaXMuYiAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKC0wLjUgPD0gdGhpcy5yICYmIHRoaXMuciA8IDI1NS41KVxuICAgICAgICAmJiAoLTAuNSA8PSB0aGlzLmcgJiYgdGhpcy5nIDwgMjU1LjUpXG4gICAgICAgICYmICgtMC41IDw9IHRoaXMuYiAmJiB0aGlzLmIgPCAyNTUuNSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5vcGFjaXR5ICYmIHRoaXMub3BhY2l0eSA8PSAxKTtcbiAgfSxcbiAgaGV4OiByZ2JfZm9ybWF0SGV4LCAvLyBEZXByZWNhdGVkISBVc2UgY29sb3IuZm9ybWF0SGV4LlxuICBmb3JtYXRIZXg6IHJnYl9mb3JtYXRIZXgsXG4gIGZvcm1hdFJnYjogcmdiX2Zvcm1hdFJnYixcbiAgdG9TdHJpbmc6IHJnYl9mb3JtYXRSZ2Jcbn0pKTtcblxuZnVuY3Rpb24gcmdiX2Zvcm1hdEhleCgpIHtcbiAgcmV0dXJuIFwiI1wiICsgaGV4KHRoaXMucikgKyBoZXgodGhpcy5nKSArIGhleCh0aGlzLmIpO1xufVxuXG5mdW5jdGlvbiByZ2JfZm9ybWF0UmdiKCkge1xuICB2YXIgYSA9IHRoaXMub3BhY2l0eTsgYSA9IGlzTmFOKGEpID8gMSA6IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGEpKTtcbiAgcmV0dXJuIChhID09PSAxID8gXCJyZ2IoXCIgOiBcInJnYmEoXCIpXG4gICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLnIpIHx8IDApKSArIFwiLCBcIlxuICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5nKSB8fCAwKSkgKyBcIiwgXCJcbiAgICAgICsgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHRoaXMuYikgfHwgMCkpXG4gICAgICArIChhID09PSAxID8gXCIpXCIgOiBcIiwgXCIgKyBhICsgXCIpXCIpO1xufVxuXG5mdW5jdGlvbiBoZXgodmFsdWUpIHtcbiAgdmFsdWUgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodmFsdWUpIHx8IDApKTtcbiAgcmV0dXJuICh2YWx1ZSA8IDE2ID8gXCIwXCIgOiBcIlwiKSArIHZhbHVlLnRvU3RyaW5nKDE2KTtcbn1cblxuZnVuY3Rpb24gaHNsYShoLCBzLCBsLCBhKSB7XG4gIGlmIChhIDw9IDApIGggPSBzID0gbCA9IE5hTjtcbiAgZWxzZSBpZiAobCA8PSAwIHx8IGwgPj0gMSkgaCA9IHMgPSBOYU47XG4gIGVsc2UgaWYgKHMgPD0gMCkgaCA9IE5hTjtcbiAgcmV0dXJuIG5ldyBIc2woaCwgcywgbCwgYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoc2xDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIc2wpIHJldHVybiBuZXcgSHNsKG8uaCwgby5zLCBvLmwsIG8ub3BhY2l0eSk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBDb2xvcikpIG8gPSBjb2xvcihvKTtcbiAgaWYgKCFvKSByZXR1cm4gbmV3IEhzbDtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIc2wpIHJldHVybiBvO1xuICBvID0gby5yZ2IoKTtcbiAgdmFyIHIgPSBvLnIgLyAyNTUsXG4gICAgICBnID0gby5nIC8gMjU1LFxuICAgICAgYiA9IG8uYiAvIDI1NSxcbiAgICAgIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpLFxuICAgICAgbWF4ID0gTWF0aC5tYXgociwgZywgYiksXG4gICAgICBoID0gTmFOLFxuICAgICAgcyA9IG1heCAtIG1pbixcbiAgICAgIGwgPSAobWF4ICsgbWluKSAvIDI7XG4gIGlmIChzKSB7XG4gICAgaWYgKHIgPT09IG1heCkgaCA9IChnIC0gYikgLyBzICsgKGcgPCBiKSAqIDY7XG4gICAgZWxzZSBpZiAoZyA9PT0gbWF4KSBoID0gKGIgLSByKSAvIHMgKyAyO1xuICAgIGVsc2UgaCA9IChyIC0gZykgLyBzICsgNDtcbiAgICBzIC89IGwgPCAwLjUgPyBtYXggKyBtaW4gOiAyIC0gbWF4IC0gbWluO1xuICAgIGggKj0gNjA7XG4gIH0gZWxzZSB7XG4gICAgcyA9IGwgPiAwICYmIGwgPCAxID8gMCA6IGg7XG4gIH1cbiAgcmV0dXJuIG5ldyBIc2woaCwgcywgbCwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhzbChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gaHNsQ29udmVydChoKSA6IG5ldyBIc2woaCwgcywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5mdW5jdGlvbiBIc2woaCwgcywgbCwgb3BhY2l0eSkge1xuICB0aGlzLmggPSAraDtcbiAgdGhpcy5zID0gK3M7XG4gIHRoaXMubCA9ICtsO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKEhzbCwgaHNsLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgcmV0dXJuIG5ldyBIc2wodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIGRhcmtlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBkYXJrZXIgOiBNYXRoLnBvdyhkYXJrZXIsIGspO1xuICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBoID0gdGhpcy5oICUgMzYwICsgKHRoaXMuaCA8IDApICogMzYwLFxuICAgICAgICBzID0gaXNOYU4oaCkgfHwgaXNOYU4odGhpcy5zKSA/IDAgOiB0aGlzLnMsXG4gICAgICAgIGwgPSB0aGlzLmwsXG4gICAgICAgIG0yID0gbCArIChsIDwgMC41ID8gbCA6IDEgLSBsKSAqIHMsXG4gICAgICAgIG0xID0gMiAqIGwgLSBtMjtcbiAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgIGhzbDJyZ2IoaCA+PSAyNDAgPyBoIC0gMjQwIDogaCArIDEyMCwgbTEsIG0yKSxcbiAgICAgIGhzbDJyZ2IoaCwgbTEsIG0yKSxcbiAgICAgIGhzbDJyZ2IoaCA8IDEyMCA/IGggKyAyNDAgOiBoIC0gMTIwLCBtMSwgbTIpLFxuICAgICAgdGhpcy5vcGFjaXR5XG4gICAgKTtcbiAgfSxcbiAgZGlzcGxheWFibGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAoMCA8PSB0aGlzLnMgJiYgdGhpcy5zIDw9IDEgfHwgaXNOYU4odGhpcy5zKSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5sICYmIHRoaXMubCA8PSAxKVxuICAgICAgICAmJiAoMCA8PSB0aGlzLm9wYWNpdHkgJiYgdGhpcy5vcGFjaXR5IDw9IDEpO1xuICB9LFxuICBmb3JtYXRIc2w6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhID0gdGhpcy5vcGFjaXR5OyBhID0gaXNOYU4oYSkgPyAxIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgYSkpO1xuICAgIHJldHVybiAoYSA9PT0gMSA/IFwiaHNsKFwiIDogXCJoc2xhKFwiKVxuICAgICAgICArICh0aGlzLmggfHwgMCkgKyBcIiwgXCJcbiAgICAgICAgKyAodGhpcy5zIHx8IDApICogMTAwICsgXCIlLCBcIlxuICAgICAgICArICh0aGlzLmwgfHwgMCkgKiAxMDAgKyBcIiVcIlxuICAgICAgICArIChhID09PSAxID8gXCIpXCIgOiBcIiwgXCIgKyBhICsgXCIpXCIpO1xuICB9XG59KSk7XG5cbi8qIEZyb20gRnZEIDEzLjM3LCBDU1MgQ29sb3IgTW9kdWxlIExldmVsIDMgKi9cbmZ1bmN0aW9uIGhzbDJyZ2IoaCwgbTEsIG0yKSB7XG4gIHJldHVybiAoaCA8IDYwID8gbTEgKyAobTIgLSBtMSkgKiBoIC8gNjBcbiAgICAgIDogaCA8IDE4MCA/IG0yXG4gICAgICA6IGggPCAyNDAgPyBtMSArIChtMiAtIG0xKSAqICgyNDAgLSBoKSAvIDYwXG4gICAgICA6IG0xKSAqIDI1NTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHNlbGVjdG9yIGZyb20gXCIuLi9zZWxlY3Rvci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3Ioc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBzdWJub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChzdWJub2RlID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSkge1xuICAgICAgICBpZiAoXCJfX2RhdGFfX1wiIGluIG5vZGUpIHN1Ym5vZGUuX19kYXRhX18gPSBub2RlLl9fZGF0YV9fO1xuICAgICAgICBzdWJncm91cFtpXSA9IHN1Ym5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IGFycmF5IGZyb20gXCIuLi9hcnJheS5qc1wiO1xuaW1wb3J0IHNlbGVjdG9yQWxsIGZyb20gXCIuLi9zZWxlY3RvckFsbC5qc1wiO1xuXG5mdW5jdGlvbiBhcnJheUFsbChzZWxlY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBncm91cCA9IHNlbGVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiBncm91cCA9PSBudWxsID8gW10gOiBhcnJheShncm91cCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCA9PT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBhcnJheUFsbChzZWxlY3QpO1xuICBlbHNlIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc3ViZ3JvdXBzLnB1c2goc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgcGFyZW50cyk7XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCBtYXRjaGVyIGZyb20gXCIuLi9tYXRjaGVyLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggIT09IFwiZnVuY3Rpb25cIikgbWF0Y2ggPSBtYXRjaGVyKG1hdGNoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gW10sIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgbWF0Y2guY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpIHtcbiAgICAgICAgc3ViZ3JvdXAucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2UuanNcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZXhpdCB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob25lbnRlciwgb251cGRhdGUsIG9uZXhpdCkge1xuICB2YXIgZW50ZXIgPSB0aGlzLmVudGVyKCksIHVwZGF0ZSA9IHRoaXMsIGV4aXQgPSB0aGlzLmV4aXQoKTtcbiAgZW50ZXIgPSB0eXBlb2Ygb25lbnRlciA9PT0gXCJmdW5jdGlvblwiID8gb25lbnRlcihlbnRlcikgOiBlbnRlci5hcHBlbmQob25lbnRlciArIFwiXCIpO1xuICBpZiAob251cGRhdGUgIT0gbnVsbCkgdXBkYXRlID0gb251cGRhdGUodXBkYXRlKTtcbiAgaWYgKG9uZXhpdCA9PSBudWxsKSBleGl0LnJlbW92ZSgpOyBlbHNlIG9uZXhpdChleGl0KTtcbiAgcmV0dXJuIGVudGVyICYmIHVwZGF0ZSA/IGVudGVyLm1lcmdlKHVwZGF0ZSkub3JkZXIoKSA6IHVwZGF0ZTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rpb24pIHtcbiAgaWYgKCEoc2VsZWN0aW9uIGluc3RhbmNlb2YgU2VsZWN0aW9uKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBtZXJnZVwiKTtcblxuICBmb3IgKHZhciBncm91cHMwID0gdGhpcy5fZ3JvdXBzLCBncm91cHMxID0gc2VsZWN0aW9uLl9ncm91cHMsIG0wID0gZ3JvdXBzMC5sZW5ndGgsIG0xID0gZ3JvdXBzMS5sZW5ndGgsIG0gPSBNYXRoLm1pbihtMCwgbTEpLCBtZXJnZXMgPSBuZXcgQXJyYXkobTApLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwMCA9IGdyb3VwczBbal0sIGdyb3VwMSA9IGdyb3VwczFbal0sIG4gPSBncm91cDAubGVuZ3RoLCBtZXJnZSA9IG1lcmdlc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXAwW2ldIHx8IGdyb3VwMVtpXSkge1xuICAgICAgICBtZXJnZVtpXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yICg7IGogPCBtMDsgKytqKSB7XG4gICAgbWVyZ2VzW2pdID0gZ3JvdXBzMFtqXTtcbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKG1lcmdlcywgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAtMSwgbSA9IGdyb3Vwcy5sZW5ndGg7ICsraiA8IG07KSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSBncm91cC5sZW5ndGggLSAxLCBuZXh0ID0gZ3JvdXBbaV0sIG5vZGU7IC0taSA+PSAwOykge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBpZiAobmV4dCAmJiBub2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG5leHQpIF4gNCkgbmV4dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCBuZXh0KTtcbiAgICAgICAgbmV4dCA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzWzBdO1xuICBhcmd1bWVudHNbMF0gPSB0aGlzO1xuICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IDAsIG0gPSBncm91cHMubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICB2YXIgbm9kZSA9IGdyb3VwW2ldO1xuICAgICAgaWYgKG5vZGUpIHJldHVybiBub2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIGxldCBzaXplID0gMDtcbiAgZm9yIChjb25zdCBub2RlIG9mIHRoaXMpICsrc2l6ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICByZXR1cm4gc2l6ZTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gIXRoaXMubm9kZSgpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZTsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkgY2FsbGJhY2suY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJpbXBvcnQgY3JlYXRvciBmcm9tIFwiLi4vY3JlYXRvci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChjcmVhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH0pO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5wcm9wZXJ0eShcIl9fZGF0YV9fXCIsIHZhbHVlKVxuICAgICAgOiB0aGlzLm5vZGUoKS5fX2RhdGFfXztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKigpIHtcbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHlpZWxkIG5vZGU7XG4gICAgfVxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcmFkaWFucyA9IE1hdGguUEkgLyAxODA7XG5leHBvcnQgY29uc3QgZGVncmVlcyA9IDE4MCAvIE1hdGguUEk7XG4iLCJpbXBvcnQgZGVmaW5lLCB7ZXh0ZW5kfSBmcm9tIFwiLi9kZWZpbmUuanNcIjtcbmltcG9ydCB7Q29sb3IsIHJnYkNvbnZlcnQsIFJnYn0gZnJvbSBcIi4vY29sb3IuanNcIjtcbmltcG9ydCB7ZGVncmVlcywgcmFkaWFuc30gZnJvbSBcIi4vbWF0aC5qc1wiO1xuXG4vLyBodHRwczovL29ic2VydmFibGVocS5jb20vQG1ib3N0b2NrL2xhYi1hbmQtcmdiXG5jb25zdCBLID0gMTgsXG4gICAgWG4gPSAwLjk2NDIyLFxuICAgIFluID0gMSxcbiAgICBabiA9IDAuODI1MjEsXG4gICAgdDAgPSA0IC8gMjksXG4gICAgdDEgPSA2IC8gMjksXG4gICAgdDIgPSAzICogdDEgKiB0MSxcbiAgICB0MyA9IHQxICogdDEgKiB0MTtcblxuZnVuY3Rpb24gbGFiQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgTGFiKSByZXR1cm4gbmV3IExhYihvLmwsIG8uYSwgby5iLCBvLm9wYWNpdHkpO1xuICBpZiAobyBpbnN0YW5jZW9mIEhjbCkgcmV0dXJuIGhjbDJsYWIobyk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBSZ2IpKSBvID0gcmdiQ29udmVydChvKTtcbiAgdmFyIHIgPSByZ2IybHJnYihvLnIpLFxuICAgICAgZyA9IHJnYjJscmdiKG8uZyksXG4gICAgICBiID0gcmdiMmxyZ2Ioby5iKSxcbiAgICAgIHkgPSB4eXoybGFiKCgwLjIyMjUwNDUgKiByICsgMC43MTY4Nzg2ICogZyArIDAuMDYwNjE2OSAqIGIpIC8gWW4pLCB4LCB6O1xuICBpZiAociA9PT0gZyAmJiBnID09PSBiKSB4ID0geiA9IHk7IGVsc2Uge1xuICAgIHggPSB4eXoybGFiKCgwLjQzNjA3NDcgKiByICsgMC4zODUwNjQ5ICogZyArIDAuMTQzMDgwNCAqIGIpIC8gWG4pO1xuICAgIHogPSB4eXoybGFiKCgwLjAxMzkzMjIgKiByICsgMC4wOTcxMDQ1ICogZyArIDAuNzE0MTczMyAqIGIpIC8gWm4pO1xuICB9XG4gIHJldHVybiBuZXcgTGFiKDExNiAqIHkgLSAxNiwgNTAwICogKHggLSB5KSwgMjAwICogKHkgLSB6KSwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdyYXkobCwgb3BhY2l0eSkge1xuICByZXR1cm4gbmV3IExhYihsLCAwLCAwLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxhYihsLCBhLCBiLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gbGFiQ29udmVydChsKSA6IG5ldyBMYWIobCwgYSwgYiwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTGFiKGwsIGEsIGIsIG9wYWNpdHkpIHtcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMuYSA9ICthO1xuICB0aGlzLmIgPSArYjtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShMYWIsIGxhYiwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIG5ldyBMYWIodGhpcy5sICsgSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgLSBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5hLCB0aGlzLmIsIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHkgPSAodGhpcy5sICsgMTYpIC8gMTE2LFxuICAgICAgICB4ID0gaXNOYU4odGhpcy5hKSA/IHkgOiB5ICsgdGhpcy5hIC8gNTAwLFxuICAgICAgICB6ID0gaXNOYU4odGhpcy5iKSA/IHkgOiB5IC0gdGhpcy5iIC8gMjAwO1xuICAgIHggPSBYbiAqIGxhYjJ4eXooeCk7XG4gICAgeSA9IFluICogbGFiMnh5eih5KTtcbiAgICB6ID0gWm4gKiBsYWIyeHl6KHopO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgbHJnYjJyZ2IoIDMuMTMzODU2MSAqIHggLSAxLjYxNjg2NjcgKiB5IC0gMC40OTA2MTQ2ICogeiksXG4gICAgICBscmdiMnJnYigtMC45Nzg3Njg0ICogeCArIDEuOTE2MTQxNSAqIHkgKyAwLjAzMzQ1NDAgKiB6KSxcbiAgICAgIGxyZ2IycmdiKCAwLjA3MTk0NTMgKiB4IC0gMC4yMjg5OTE0ICogeSArIDEuNDA1MjQyNyAqIHopLFxuICAgICAgdGhpcy5vcGFjaXR5XG4gICAgKTtcbiAgfVxufSkpO1xuXG5mdW5jdGlvbiB4eXoybGFiKHQpIHtcbiAgcmV0dXJuIHQgPiB0MyA/IE1hdGgucG93KHQsIDEgLyAzKSA6IHQgLyB0MiArIHQwO1xufVxuXG5mdW5jdGlvbiBsYWIyeHl6KHQpIHtcbiAgcmV0dXJuIHQgPiB0MSA/IHQgKiB0ICogdCA6IHQyICogKHQgLSB0MCk7XG59XG5cbmZ1bmN0aW9uIGxyZ2IycmdiKHgpIHtcbiAgcmV0dXJuIDI1NSAqICh4IDw9IDAuMDAzMTMwOCA/IDEyLjkyICogeCA6IDEuMDU1ICogTWF0aC5wb3coeCwgMSAvIDIuNCkgLSAwLjA1NSk7XG59XG5cbmZ1bmN0aW9uIHJnYjJscmdiKHgpIHtcbiAgcmV0dXJuICh4IC89IDI1NSkgPD0gMC4wNDA0NSA/IHggLyAxMi45MiA6IE1hdGgucG93KCh4ICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG59XG5cbmZ1bmN0aW9uIGhjbENvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIEhjbCkgcmV0dXJuIG5ldyBIY2woby5oLCBvLmMsIG8ubCwgby5vcGFjaXR5KTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIExhYikpIG8gPSBsYWJDb252ZXJ0KG8pO1xuICBpZiAoby5hID09PSAwICYmIG8uYiA9PT0gMCkgcmV0dXJuIG5ldyBIY2woTmFOLCAwIDwgby5sICYmIG8ubCA8IDEwMCA/IDAgOiBOYU4sIG8ubCwgby5vcGFjaXR5KTtcbiAgdmFyIGggPSBNYXRoLmF0YW4yKG8uYiwgby5hKSAqIGRlZ3JlZXM7XG4gIHJldHVybiBuZXcgSGNsKGggPCAwID8gaCArIDM2MCA6IGgsIE1hdGguc3FydChvLmEgKiBvLmEgKyBvLmIgKiBvLmIpLCBvLmwsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsY2gobCwgYywgaCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhjbENvbnZlcnQobCkgOiBuZXcgSGNsKGgsIGMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhjbChoLCBjLCBsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gaGNsQ29udmVydChoKSA6IG5ldyBIY2woaCwgYywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gSGNsKGgsIGMsIGwsIG9wYWNpdHkpIHtcbiAgdGhpcy5oID0gK2g7XG4gIHRoaXMuYyA9ICtjO1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmZ1bmN0aW9uIGhjbDJsYWIobykge1xuICBpZiAoaXNOYU4oby5oKSkgcmV0dXJuIG5ldyBMYWIoby5sLCAwLCAwLCBvLm9wYWNpdHkpO1xuICB2YXIgaCA9IG8uaCAqIHJhZGlhbnM7XG4gIHJldHVybiBuZXcgTGFiKG8ubCwgTWF0aC5jb3MoaCkgKiBvLmMsIE1hdGguc2luKGgpICogby5jLCBvLm9wYWNpdHkpO1xufVxuXG5kZWZpbmUoSGNsLCBoY2wsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIHJldHVybiBuZXcgSGNsKHRoaXMuaCwgdGhpcy5jLCB0aGlzLmwgKyBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIG5ldyBIY2wodGhpcy5oLCB0aGlzLmMsIHRoaXMubCAtIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBoY2wybGFiKHRoaXMpLnJnYigpO1xuICB9XG59KSk7XG4iLCJ2YXIgZnJhbWUgPSAwLCAvLyBpcyBhbiBhbmltYXRpb24gZnJhbWUgcGVuZGluZz9cbiAgICB0aW1lb3V0ID0gMCwgLy8gaXMgYSB0aW1lb3V0IHBlbmRpbmc/XG4gICAgaW50ZXJ2YWwgPSAwLCAvLyBhcmUgYW55IHRpbWVycyBhY3RpdmU/XG4gICAgcG9rZURlbGF5ID0gMTAwMCwgLy8gaG93IGZyZXF1ZW50bHkgd2UgY2hlY2sgZm9yIGNsb2NrIHNrZXdcbiAgICB0YXNrSGVhZCxcbiAgICB0YXNrVGFpbCxcbiAgICBjbG9ja0xhc3QgPSAwLFxuICAgIGNsb2NrTm93ID0gMCxcbiAgICBjbG9ja1NrZXcgPSAwLFxuICAgIGNsb2NrID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSBcIm9iamVjdFwiICYmIHBlcmZvcm1hbmNlLm5vdyA/IHBlcmZvcm1hbmNlIDogRGF0ZSxcbiAgICBzZXRGcmFtZSA9IHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpIDogZnVuY3Rpb24oZikgeyBzZXRUaW1lb3V0KGYsIDE3KTsgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vdygpIHtcbiAgcmV0dXJuIGNsb2NrTm93IHx8IChzZXRGcmFtZShjbGVhck5vdyksIGNsb2NrTm93ID0gY2xvY2subm93KCkgKyBjbG9ja1NrZXcpO1xufVxuXG5mdW5jdGlvbiBjbGVhck5vdygpIHtcbiAgY2xvY2tOb3cgPSAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVGltZXIoKSB7XG4gIHRoaXMuX2NhbGwgPVxuICB0aGlzLl90aW1lID1cbiAgdGhpcy5fbmV4dCA9IG51bGw7XG59XG5cblRpbWVyLnByb3RvdHlwZSA9IHRpbWVyLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRpbWVyLFxuICByZXN0YXJ0OiBmdW5jdGlvbihjYWxsYmFjaywgZGVsYXksIHRpbWUpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgICB0aW1lID0gKHRpbWUgPT0gbnVsbCA/IG5vdygpIDogK3RpbWUpICsgKGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5KTtcbiAgICBpZiAoIXRoaXMuX25leHQgJiYgdGFza1RhaWwgIT09IHRoaXMpIHtcbiAgICAgIGlmICh0YXNrVGFpbCkgdGFza1RhaWwuX25leHQgPSB0aGlzO1xuICAgICAgZWxzZSB0YXNrSGVhZCA9IHRoaXM7XG4gICAgICB0YXNrVGFpbCA9IHRoaXM7XG4gICAgfVxuICAgIHRoaXMuX2NhbGwgPSBjYWxsYmFjaztcbiAgICB0aGlzLl90aW1lID0gdGltZTtcbiAgICBzbGVlcCgpO1xuICB9LFxuICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fY2FsbCkge1xuICAgICAgdGhpcy5fY2FsbCA9IG51bGw7XG4gICAgICB0aGlzLl90aW1lID0gSW5maW5pdHk7XG4gICAgICBzbGVlcCgpO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVyKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICB2YXIgdCA9IG5ldyBUaW1lcjtcbiAgdC5yZXN0YXJ0KGNhbGxiYWNrLCBkZWxheSwgdGltZSk7XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGltZXJGbHVzaCgpIHtcbiAgbm93KCk7IC8vIEdldCB0aGUgY3VycmVudCB0aW1lLCBpZiBub3QgYWxyZWFkeSBzZXQuXG4gICsrZnJhbWU7IC8vIFByZXRlbmQgd2XigJl2ZSBzZXQgYW4gYWxhcm0sIGlmIHdlIGhhdmVu4oCZdCBhbHJlYWR5LlxuICB2YXIgdCA9IHRhc2tIZWFkLCBlO1xuICB3aGlsZSAodCkge1xuICAgIGlmICgoZSA9IGNsb2NrTm93IC0gdC5fdGltZSkgPj0gMCkgdC5fY2FsbC5jYWxsKG51bGwsIGUpO1xuICAgIHQgPSB0Ll9uZXh0O1xuICB9XG4gIC0tZnJhbWU7XG59XG5cbmZ1bmN0aW9uIHdha2UoKSB7XG4gIGNsb2NrTm93ID0gKGNsb2NrTGFzdCA9IGNsb2NrLm5vdygpKSArIGNsb2NrU2tldztcbiAgZnJhbWUgPSB0aW1lb3V0ID0gMDtcbiAgdHJ5IHtcbiAgICB0aW1lckZsdXNoKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZnJhbWUgPSAwO1xuICAgIG5hcCgpO1xuICAgIGNsb2NrTm93ID0gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb2tlKCkge1xuICB2YXIgbm93ID0gY2xvY2subm93KCksIGRlbGF5ID0gbm93IC0gY2xvY2tMYXN0O1xuICBpZiAoZGVsYXkgPiBwb2tlRGVsYXkpIGNsb2NrU2tldyAtPSBkZWxheSwgY2xvY2tMYXN0ID0gbm93O1xufVxuXG5mdW5jdGlvbiBuYXAoKSB7XG4gIHZhciB0MCwgdDEgPSB0YXNrSGVhZCwgdDIsIHRpbWUgPSBJbmZpbml0eTtcbiAgd2hpbGUgKHQxKSB7XG4gICAgaWYgKHQxLl9jYWxsKSB7XG4gICAgICBpZiAodGltZSA+IHQxLl90aW1lKSB0aW1lID0gdDEuX3RpbWU7XG4gICAgICB0MCA9IHQxLCB0MSA9IHQxLl9uZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0MiA9IHQxLl9uZXh0LCB0MS5fbmV4dCA9IG51bGw7XG4gICAgICB0MSA9IHQwID8gdDAuX25leHQgPSB0MiA6IHRhc2tIZWFkID0gdDI7XG4gICAgfVxuICB9XG4gIHRhc2tUYWlsID0gdDA7XG4gIHNsZWVwKHRpbWUpO1xufVxuXG5mdW5jdGlvbiBzbGVlcCh0aW1lKSB7XG4gIGlmIChmcmFtZSkgcmV0dXJuOyAvLyBTb29uZXN0IGFsYXJtIGFscmVhZHkgc2V0LCBvciB3aWxsIGJlLlxuICBpZiAodGltZW91dCkgdGltZW91dCA9IGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgdmFyIGRlbGF5ID0gdGltZSAtIGNsb2NrTm93OyAvLyBTdHJpY3RseSBsZXNzIHRoYW4gaWYgd2UgcmVjb21wdXRlZCBjbG9ja05vdy5cbiAgaWYgKGRlbGF5ID4gMjQpIHtcbiAgICBpZiAodGltZSA8IEluZmluaXR5KSB0aW1lb3V0ID0gc2V0VGltZW91dCh3YWtlLCB0aW1lIC0gY2xvY2subm93KCkgLSBjbG9ja1NrZXcpO1xuICAgIGlmIChpbnRlcnZhbCkgaW50ZXJ2YWwgPSBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWludGVydmFsKSBjbG9ja0xhc3QgPSBjbG9jay5ub3coKSwgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChwb2tlLCBwb2tlRGVsYXkpO1xuICAgIGZyYW1lID0gMSwgc2V0RnJhbWUod2FrZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7VGltZXJ9IGZyb20gXCIuL3RpbWVyLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICB2YXIgdCA9IG5ldyBUaW1lcjtcbiAgZGVsYXkgPSBkZWxheSA9PSBudWxsID8gMCA6ICtkZWxheTtcbiAgdC5yZXN0YXJ0KGVsYXBzZWQgPT4ge1xuICAgIHQuc3RvcCgpO1xuICAgIGNhbGxiYWNrKGVsYXBzZWQgKyBkZWxheSk7XG4gIH0sIGRlbGF5LCB0aW1lKTtcbiAgcmV0dXJuIHQ7XG59XG4iLCJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7dGltZXIsIHRpbWVvdXR9IGZyb20gXCJkMy10aW1lclwiO1xuXG52YXIgZW1wdHlPbiA9IGRpc3BhdGNoKFwic3RhcnRcIiwgXCJlbmRcIiwgXCJjYW5jZWxcIiwgXCJpbnRlcnJ1cHRcIik7XG52YXIgZW1wdHlUd2VlbiA9IFtdO1xuXG5leHBvcnQgdmFyIENSRUFURUQgPSAwO1xuZXhwb3J0IHZhciBTQ0hFRFVMRUQgPSAxO1xuZXhwb3J0IHZhciBTVEFSVElORyA9IDI7XG5leHBvcnQgdmFyIFNUQVJURUQgPSAzO1xuZXhwb3J0IHZhciBSVU5OSU5HID0gNDtcbmV4cG9ydCB2YXIgRU5ESU5HID0gNTtcbmV4cG9ydCB2YXIgRU5ERUQgPSA2O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCBuYW1lLCBpZCwgaW5kZXgsIGdyb3VwLCB0aW1pbmcpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uO1xuICBpZiAoIXNjaGVkdWxlcykgbm9kZS5fX3RyYW5zaXRpb24gPSB7fTtcbiAgZWxzZSBpZiAoaWQgaW4gc2NoZWR1bGVzKSByZXR1cm47XG4gIGNyZWF0ZShub2RlLCBpZCwge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgaW5kZXg6IGluZGV4LCAvLyBGb3IgY29udGV4dCBkdXJpbmcgY2FsbGJhY2suXG4gICAgZ3JvdXA6IGdyb3VwLCAvLyBGb3IgY29udGV4dCBkdXJpbmcgY2FsbGJhY2suXG4gICAgb246IGVtcHR5T24sXG4gICAgdHdlZW46IGVtcHR5VHdlZW4sXG4gICAgdGltZTogdGltaW5nLnRpbWUsXG4gICAgZGVsYXk6IHRpbWluZy5kZWxheSxcbiAgICBkdXJhdGlvbjogdGltaW5nLmR1cmF0aW9uLFxuICAgIGVhc2U6IHRpbWluZy5lYXNlLFxuICAgIHRpbWVyOiBudWxsLFxuICAgIHN0YXRlOiBDUkVBVEVEXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBnZXQobm9kZSwgaWQpO1xuICBpZiAoc2NoZWR1bGUuc3RhdGUgPiBDUkVBVEVEKSB0aHJvdyBuZXcgRXJyb3IoXCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBnZXQobm9kZSwgaWQpO1xuICBpZiAoc2NoZWR1bGUuc3RhdGUgPiBTVEFSVEVEKSB0aHJvdyBuZXcgRXJyb3IoXCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nXCIpO1xuICByZXR1cm4gc2NoZWR1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXQobm9kZSwgaWQpIHtcbiAgdmFyIHNjaGVkdWxlID0gbm9kZS5fX3RyYW5zaXRpb247XG4gIGlmICghc2NoZWR1bGUgfHwgIShzY2hlZHVsZSA9IHNjaGVkdWxlW2lkXSkpIHRocm93IG5ldyBFcnJvcihcInRyYW5zaXRpb24gbm90IGZvdW5kXCIpO1xuICByZXR1cm4gc2NoZWR1bGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZShub2RlLCBpZCwgc2VsZikge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb24sXG4gICAgICB0d2VlbjtcblxuICAvLyBJbml0aWFsaXplIHRoZSBzZWxmIHRpbWVyIHdoZW4gdGhlIHRyYW5zaXRpb24gaXMgY3JlYXRlZC5cbiAgLy8gTm90ZSB0aGUgYWN0dWFsIGRlbGF5IGlzIG5vdCBrbm93biB1bnRpbCB0aGUgZmlyc3QgY2FsbGJhY2shXG4gIHNjaGVkdWxlc1tpZF0gPSBzZWxmO1xuICBzZWxmLnRpbWVyID0gdGltZXIoc2NoZWR1bGUsIDAsIHNlbGYudGltZSk7XG5cbiAgZnVuY3Rpb24gc2NoZWR1bGUoZWxhcHNlZCkge1xuICAgIHNlbGYuc3RhdGUgPSBTQ0hFRFVMRUQ7XG4gICAgc2VsZi50aW1lci5yZXN0YXJ0KHN0YXJ0LCBzZWxmLmRlbGF5LCBzZWxmLnRpbWUpO1xuXG4gICAgLy8gSWYgdGhlIGVsYXBzZWQgZGVsYXkgaXMgbGVzcyB0aGFuIG91ciBmaXJzdCBzbGVlcCwgc3RhcnQgaW1tZWRpYXRlbHkuXG4gICAgaWYgKHNlbGYuZGVsYXkgPD0gZWxhcHNlZCkgc3RhcnQoZWxhcHNlZCAtIHNlbGYuZGVsYXkpO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnQoZWxhcHNlZCkge1xuICAgIHZhciBpLCBqLCBuLCBvO1xuXG4gICAgLy8gSWYgdGhlIHN0YXRlIGlzIG5vdCBTQ0hFRFVMRUQsIHRoZW4gd2UgcHJldmlvdXNseSBlcnJvcmVkIG9uIHN0YXJ0LlxuICAgIGlmIChzZWxmLnN0YXRlICE9PSBTQ0hFRFVMRUQpIHJldHVybiBzdG9wKCk7XG5cbiAgICBmb3IgKGkgaW4gc2NoZWR1bGVzKSB7XG4gICAgICBvID0gc2NoZWR1bGVzW2ldO1xuICAgICAgaWYgKG8ubmFtZSAhPT0gc2VsZi5uYW1lKSBjb250aW51ZTtcblxuICAgICAgLy8gV2hpbGUgdGhpcyBlbGVtZW50IGFscmVhZHkgaGFzIGEgc3RhcnRpbmcgdHJhbnNpdGlvbiBkdXJpbmcgdGhpcyBmcmFtZSxcbiAgICAgIC8vIGRlZmVyIHN0YXJ0aW5nIGFuIGludGVycnVwdGluZyB0cmFuc2l0aW9uIHVudGlsIHRoYXQgdHJhbnNpdGlvbiBoYXMgYVxuICAgICAgLy8gY2hhbmNlIHRvIHRpY2sgKGFuZCBwb3NzaWJseSBlbmQpOyBzZWUgZDMvZDMtdHJhbnNpdGlvbiM1NCFcbiAgICAgIGlmIChvLnN0YXRlID09PSBTVEFSVEVEKSByZXR1cm4gdGltZW91dChzdGFydCk7XG5cbiAgICAgIC8vIEludGVycnVwdCB0aGUgYWN0aXZlIHRyYW5zaXRpb24sIGlmIGFueS5cbiAgICAgIGlmIChvLnN0YXRlID09PSBSVU5OSU5HKSB7XG4gICAgICAgIG8uc3RhdGUgPSBFTkRFRDtcbiAgICAgICAgby50aW1lci5zdG9wKCk7XG4gICAgICAgIG8ub24uY2FsbChcImludGVycnVwdFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBvLmluZGV4LCBvLmdyb3VwKTtcbiAgICAgICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2FuY2VsIGFueSBwcmUtZW1wdGVkIHRyYW5zaXRpb25zLlxuICAgICAgZWxzZSBpZiAoK2kgPCBpZCkge1xuICAgICAgICBvLnN0YXRlID0gRU5ERUQ7XG4gICAgICAgIG8udGltZXIuc3RvcCgpO1xuICAgICAgICBvLm9uLmNhbGwoXCJjYW5jZWxcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgby5pbmRleCwgby5ncm91cCk7XG4gICAgICAgIGRlbGV0ZSBzY2hlZHVsZXNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVmZXIgdGhlIGZpcnN0IHRpY2sgdG8gZW5kIG9mIHRoZSBjdXJyZW50IGZyYW1lOyBzZWUgZDMvZDMjMTU3Ni5cbiAgICAvLyBOb3RlIHRoZSB0cmFuc2l0aW9uIG1heSBiZSBjYW5jZWxlZCBhZnRlciBzdGFydCBhbmQgYmVmb3JlIHRoZSBmaXJzdCB0aWNrIVxuICAgIC8vIE5vdGUgdGhpcyBtdXN0IGJlIHNjaGVkdWxlZCBiZWZvcmUgdGhlIHN0YXJ0IGV2ZW50OyBzZWUgZDMvZDMtdHJhbnNpdGlvbiMxNiFcbiAgICAvLyBBc3N1bWluZyB0aGlzIGlzIHN1Y2Nlc3NmdWwsIHN1YnNlcXVlbnQgY2FsbGJhY2tzIGdvIHN0cmFpZ2h0IHRvIHRpY2suXG4gICAgdGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIGlmIChzZWxmLnN0YXRlID09PSBTVEFSVEVEKSB7XG4gICAgICAgIHNlbGYuc3RhdGUgPSBSVU5OSU5HO1xuICAgICAgICBzZWxmLnRpbWVyLnJlc3RhcnQodGljaywgc2VsZi5kZWxheSwgc2VsZi50aW1lKTtcbiAgICAgICAgdGljayhlbGFwc2VkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIERpc3BhdGNoIHRoZSBzdGFydCBldmVudC5cbiAgICAvLyBOb3RlIHRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSB0aGUgdHdlZW4gYXJlIGluaXRpYWxpemVkLlxuICAgIHNlbGYuc3RhdGUgPSBTVEFSVElORztcbiAgICBzZWxmLm9uLmNhbGwoXCJzdGFydFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBzZWxmLmluZGV4LCBzZWxmLmdyb3VwKTtcbiAgICBpZiAoc2VsZi5zdGF0ZSAhPT0gU1RBUlRJTkcpIHJldHVybjsgLy8gaW50ZXJydXB0ZWRcbiAgICBzZWxmLnN0YXRlID0gU1RBUlRFRDtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIHR3ZWVuLCBkZWxldGluZyBudWxsIHR3ZWVuLlxuICAgIHR3ZWVuID0gbmV3IEFycmF5KG4gPSBzZWxmLnR3ZWVuLmxlbmd0aCk7XG4gICAgZm9yIChpID0gMCwgaiA9IC0xOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobyA9IHNlbGYudHdlZW5baV0udmFsdWUuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBzZWxmLmluZGV4LCBzZWxmLmdyb3VwKSkge1xuICAgICAgICB0d2VlblsrK2pdID0gbztcbiAgICAgIH1cbiAgICB9XG4gICAgdHdlZW4ubGVuZ3RoID0gaiArIDE7XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrKGVsYXBzZWQpIHtcbiAgICB2YXIgdCA9IGVsYXBzZWQgPCBzZWxmLmR1cmF0aW9uID8gc2VsZi5lYXNlLmNhbGwobnVsbCwgZWxhcHNlZCAvIHNlbGYuZHVyYXRpb24pIDogKHNlbGYudGltZXIucmVzdGFydChzdG9wKSwgc2VsZi5zdGF0ZSA9IEVORElORywgMSksXG4gICAgICAgIGkgPSAtMSxcbiAgICAgICAgbiA9IHR3ZWVuLmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICB0d2VlbltpXS5jYWxsKG5vZGUsIHQpO1xuICAgIH1cblxuICAgIC8vIERpc3BhdGNoIHRoZSBlbmQgZXZlbnQuXG4gICAgaWYgKHNlbGYuc3RhdGUgPT09IEVORElORykge1xuICAgICAgc2VsZi5vbi5jYWxsKFwiZW5kXCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApO1xuICAgICAgc3RvcCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgc2VsZi5zdGF0ZSA9IEVOREVEO1xuICAgIHNlbGYudGltZXIuc3RvcCgpO1xuICAgIGRlbGV0ZSBzY2hlZHVsZXNbaWRdO1xuICAgIGZvciAodmFyIGkgaW4gc2NoZWR1bGVzKSByZXR1cm47IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBkZWxldGUgbm9kZS5fX3RyYW5zaXRpb247XG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IHggPT4gKCkgPT4geDtcbiIsImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuXG5mdW5jdGlvbiBsaW5lYXIoYSwgZCkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICsgdCAqIGQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGV4cG9uZW50aWFsKGEsIGIsIHkpIHtcbiAgcmV0dXJuIGEgPSBNYXRoLnBvdyhhLCB5KSwgYiA9IE1hdGgucG93KGIsIHkpIC0gYSwgeSA9IDEgLyB5LCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucG93KGEgKyB0ICogYiwgeSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBodWUoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkID4gMTgwIHx8IGQgPCAtMTgwID8gZCAtIDM2MCAqIE1hdGgucm91bmQoZCAvIDM2MCkgOiBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2FtbWEoeSkge1xuICByZXR1cm4gKHkgPSAreSkgPT09IDEgPyBub2dhbW1hIDogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBiIC0gYSA/IGV4cG9uZW50aWFsKGEsIGIsIHkpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vZ2FtbWEoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuIiwiaW1wb3J0IHtyZ2IgYXMgY29sb3JSZ2J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGJhc2lzIGZyb20gXCIuL2Jhc2lzLmpzXCI7XG5pbXBvcnQgYmFzaXNDbG9zZWQgZnJvbSBcIi4vYmFzaXNDbG9zZWQuanNcIjtcbmltcG9ydCBub2dhbW1hLCB7Z2FtbWF9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiByZ2JHYW1tYSh5KSB7XG4gIHZhciBjb2xvciA9IGdhbW1hKHkpO1xuXG4gIGZ1bmN0aW9uIHJnYihzdGFydCwgZW5kKSB7XG4gICAgdmFyIHIgPSBjb2xvcigoc3RhcnQgPSBjb2xvclJnYihzdGFydCkpLnIsIChlbmQgPSBjb2xvclJnYihlbmQpKS5yKSxcbiAgICAgICAgZyA9IGNvbG9yKHN0YXJ0LmcsIGVuZC5nKSxcbiAgICAgICAgYiA9IGNvbG9yKHN0YXJ0LmIsIGVuZC5iKSxcbiAgICAgICAgb3BhY2l0eSA9IG5vZ2FtbWEoc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBzdGFydC5yID0gcih0KTtcbiAgICAgIHN0YXJ0LmcgPSBnKHQpO1xuICAgICAgc3RhcnQuYiA9IGIodCk7XG4gICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgfTtcbiAgfVxuXG4gIHJnYi5nYW1tYSA9IHJnYkdhbW1hO1xuXG4gIHJldHVybiByZ2I7XG59KSgxKTtcblxuZnVuY3Rpb24gcmdiU3BsaW5lKHNwbGluZSkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sb3JzKSB7XG4gICAgdmFyIG4gPSBjb2xvcnMubGVuZ3RoLFxuICAgICAgICByID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBnID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBiID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBpLCBjb2xvcjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb2xvciA9IGNvbG9yUmdiKGNvbG9yc1tpXSk7XG4gICAgICByW2ldID0gY29sb3IuciB8fCAwO1xuICAgICAgZ1tpXSA9IGNvbG9yLmcgfHwgMDtcbiAgICAgIGJbaV0gPSBjb2xvci5iIHx8IDA7XG4gICAgfVxuICAgIHIgPSBzcGxpbmUocik7XG4gICAgZyA9IHNwbGluZShnKTtcbiAgICBiID0gc3BsaW5lKGIpO1xuICAgIGNvbG9yLm9wYWNpdHkgPSAxO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBjb2xvci5yID0gcih0KTtcbiAgICAgIGNvbG9yLmcgPSBnKHQpO1xuICAgICAgY29sb3IuYiA9IGIodCk7XG4gICAgICByZXR1cm4gY29sb3IgKyBcIlwiO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgcmdiQmFzaXMgPSByZ2JTcGxpbmUoYmFzaXMpO1xuZXhwb3J0IHZhciByZ2JCYXNpc0Nsb3NlZCA9IHJnYlNwbGluZShiYXNpc0Nsb3NlZCk7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICogKDEgLSB0KSArIGIgKiB0O1xuICB9O1xufVxuIiwiaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXIuanNcIjtcblxudmFyIHJlQSA9IC9bLStdPyg/OlxcZCtcXC4/XFxkKnxcXC4/XFxkKykoPzpbZUVdWy0rXT9cXGQrKT8vZyxcbiAgICByZUIgPSBuZXcgUmVnRXhwKHJlQS5zb3VyY2UsIFwiZ1wiKTtcblxuZnVuY3Rpb24gemVybyhiKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYjtcbiAgfTtcbn1cblxuZnVuY3Rpb24gb25lKGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYih0KSArIFwiXCI7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGJpID0gcmVBLmxhc3RJbmRleCA9IHJlQi5sYXN0SW5kZXggPSAwLCAvLyBzY2FuIGluZGV4IGZvciBuZXh0IG51bWJlciBpbiBiXG4gICAgICBhbSwgLy8gY3VycmVudCBtYXRjaCBpbiBhXG4gICAgICBibSwgLy8gY3VycmVudCBtYXRjaCBpbiBiXG4gICAgICBicywgLy8gc3RyaW5nIHByZWNlZGluZyBjdXJyZW50IG51bWJlciBpbiBiLCBpZiBhbnlcbiAgICAgIGkgPSAtMSwgLy8gaW5kZXggaW4gc1xuICAgICAgcyA9IFtdLCAvLyBzdHJpbmcgY29uc3RhbnRzIGFuZCBwbGFjZWhvbGRlcnNcbiAgICAgIHEgPSBbXTsgLy8gbnVtYmVyIGludGVycG9sYXRvcnNcblxuICAvLyBDb2VyY2UgaW5wdXRzIHRvIHN0cmluZ3MuXG4gIGEgPSBhICsgXCJcIiwgYiA9IGIgKyBcIlwiO1xuXG4gIC8vIEludGVycG9sYXRlIHBhaXJzIG9mIG51bWJlcnMgaW4gYSAmIGIuXG4gIHdoaWxlICgoYW0gPSByZUEuZXhlYyhhKSlcbiAgICAgICYmIChibSA9IHJlQi5leGVjKGIpKSkge1xuICAgIGlmICgoYnMgPSBibS5pbmRleCkgPiBiaSkgeyAvLyBhIHN0cmluZyBwcmVjZWRlcyB0aGUgbmV4dCBudW1iZXIgaW4gYlxuICAgICAgYnMgPSBiLnNsaWNlKGJpLCBicyk7XG4gICAgICBpZiAoc1tpXSkgc1tpXSArPSBiczsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICAgIGVsc2Ugc1srK2ldID0gYnM7XG4gICAgfVxuICAgIGlmICgoYW0gPSBhbVswXSkgPT09IChibSA9IGJtWzBdKSkgeyAvLyBudW1iZXJzIGluIGEgJiBiIG1hdGNoXG4gICAgICBpZiAoc1tpXSkgc1tpXSArPSBibTsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICAgIGVsc2Ugc1srK2ldID0gYm07XG4gICAgfSBlbHNlIHsgLy8gaW50ZXJwb2xhdGUgbm9uLW1hdGNoaW5nIG51bWJlcnNcbiAgICAgIHNbKytpXSA9IG51bGw7XG4gICAgICBxLnB1c2goe2k6IGksIHg6IG51bWJlcihhbSwgYm0pfSk7XG4gICAgfVxuICAgIGJpID0gcmVCLmxhc3RJbmRleDtcbiAgfVxuXG4gIC8vIEFkZCByZW1haW5zIG9mIGIuXG4gIGlmIChiaSA8IGIubGVuZ3RoKSB7XG4gICAgYnMgPSBiLnNsaWNlKGJpKTtcbiAgICBpZiAoc1tpXSkgc1tpXSArPSBiczsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICBlbHNlIHNbKytpXSA9IGJzO1xuICB9XG5cbiAgLy8gU3BlY2lhbCBvcHRpbWl6YXRpb24gZm9yIG9ubHkgYSBzaW5nbGUgbWF0Y2guXG4gIC8vIE90aGVyd2lzZSwgaW50ZXJwb2xhdGUgZWFjaCBvZiB0aGUgbnVtYmVycyBhbmQgcmVqb2luIHRoZSBzdHJpbmcuXG4gIHJldHVybiBzLmxlbmd0aCA8IDIgPyAocVswXVxuICAgICAgPyBvbmUocVswXS54KVxuICAgICAgOiB6ZXJvKGIpKVxuICAgICAgOiAoYiA9IHEubGVuZ3RoLCBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG87IGkgPCBiOyArK2kpIHNbKG8gPSBxW2ldKS5pXSA9IG8ueCh0KTtcbiAgICAgICAgICByZXR1cm4gcy5qb2luKFwiXCIpO1xuICAgICAgICB9KTtcbn1cbiIsInZhciBkZWdyZWVzID0gMTgwIC8gTWF0aC5QSTtcblxuZXhwb3J0IHZhciBpZGVudGl0eSA9IHtcbiAgdHJhbnNsYXRlWDogMCxcbiAgdHJhbnNsYXRlWTogMCxcbiAgcm90YXRlOiAwLFxuICBza2V3WDogMCxcbiAgc2NhbGVYOiAxLFxuICBzY2FsZVk6IDFcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFyIHNjYWxlWCwgc2NhbGVZLCBza2V3WDtcbiAgaWYgKHNjYWxlWCA9IE1hdGguc3FydChhICogYSArIGIgKiBiKSkgYSAvPSBzY2FsZVgsIGIgLz0gc2NhbGVYO1xuICBpZiAoc2tld1ggPSBhICogYyArIGIgKiBkKSBjIC09IGEgKiBza2V3WCwgZCAtPSBiICogc2tld1g7XG4gIGlmIChzY2FsZVkgPSBNYXRoLnNxcnQoYyAqIGMgKyBkICogZCkpIGMgLz0gc2NhbGVZLCBkIC89IHNjYWxlWSwgc2tld1ggLz0gc2NhbGVZO1xuICBpZiAoYSAqIGQgPCBiICogYykgYSA9IC1hLCBiID0gLWIsIHNrZXdYID0gLXNrZXdYLCBzY2FsZVggPSAtc2NhbGVYO1xuICByZXR1cm4ge1xuICAgIHRyYW5zbGF0ZVg6IGUsXG4gICAgdHJhbnNsYXRlWTogZixcbiAgICByb3RhdGU6IE1hdGguYXRhbjIoYiwgYSkgKiBkZWdyZWVzLFxuICAgIHNrZXdYOiBNYXRoLmF0YW4oc2tld1gpICogZGVncmVlcyxcbiAgICBzY2FsZVg6IHNjYWxlWCxcbiAgICBzY2FsZVk6IHNjYWxlWVxuICB9O1xufVxuIiwiaW1wb3J0IGRlY29tcG9zZSwge2lkZW50aXR5fSBmcm9tIFwiLi9kZWNvbXBvc2UuanNcIjtcblxudmFyIHN2Z05vZGU7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDc3ModmFsdWUpIHtcbiAgY29uc3QgbSA9IG5ldyAodHlwZW9mIERPTU1hdHJpeCA9PT0gXCJmdW5jdGlvblwiID8gRE9NTWF0cml4IDogV2ViS2l0Q1NTTWF0cml4KSh2YWx1ZSArIFwiXCIpO1xuICByZXR1cm4gbS5pc0lkZW50aXR5ID8gaWRlbnRpdHkgOiBkZWNvbXBvc2UobS5hLCBtLmIsIG0uYywgbS5kLCBtLmUsIG0uZik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN2Zyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGlkZW50aXR5O1xuICBpZiAoIXN2Z05vZGUpIHN2Z05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImdcIik7XG4gIHN2Z05vZGUuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsIHZhbHVlKTtcbiAgaWYgKCEodmFsdWUgPSBzdmdOb2RlLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpKSByZXR1cm4gaWRlbnRpdHk7XG4gIHZhbHVlID0gdmFsdWUubWF0cml4O1xuICByZXR1cm4gZGVjb21wb3NlKHZhbHVlLmEsIHZhbHVlLmIsIHZhbHVlLmMsIHZhbHVlLmQsIHZhbHVlLmUsIHZhbHVlLmYpO1xufVxuIiwiaW1wb3J0IG51bWJlciBmcm9tIFwiLi4vbnVtYmVyLmpzXCI7XG5pbXBvcnQge3BhcnNlQ3NzLCBwYXJzZVN2Z30gZnJvbSBcIi4vcGFyc2UuanNcIjtcblxuZnVuY3Rpb24gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2UsIHB4Q29tbWEsIHB4UGFyZW4sIGRlZ1BhcmVuKSB7XG5cbiAgZnVuY3Rpb24gcG9wKHMpIHtcbiAgICByZXR1cm4gcy5sZW5ndGggPyBzLnBvcCgpICsgXCIgXCIgOiBcIlwiO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNsYXRlKHhhLCB5YSwgeGIsIHliLCBzLCBxKSB7XG4gICAgaWYgKHhhICE9PSB4YiB8fCB5YSAhPT0geWIpIHtcbiAgICAgIHZhciBpID0gcy5wdXNoKFwidHJhbnNsYXRlKFwiLCBudWxsLCBweENvbW1hLCBudWxsLCBweFBhcmVuKTtcbiAgICAgIHEucHVzaCh7aTogaSAtIDQsIHg6IG51bWJlcih4YSwgeGIpfSwge2k6IGkgLSAyLCB4OiBudW1iZXIoeWEsIHliKX0pO1xuICAgIH0gZWxzZSBpZiAoeGIgfHwgeWIpIHtcbiAgICAgIHMucHVzaChcInRyYW5zbGF0ZShcIiArIHhiICsgcHhDb21tYSArIHliICsgcHhQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcm90YXRlKGEsIGIsIHMsIHEpIHtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgaWYgKGEgLSBiID4gMTgwKSBiICs9IDM2MDsgZWxzZSBpZiAoYiAtIGEgPiAxODApIGEgKz0gMzYwOyAvLyBzaG9ydGVzdCBwYXRoXG4gICAgICBxLnB1c2goe2k6IHMucHVzaChwb3AocykgKyBcInJvdGF0ZShcIiwgbnVsbCwgZGVnUGFyZW4pIC0gMiwgeDogbnVtYmVyKGEsIGIpfSk7XG4gICAgfSBlbHNlIGlmIChiKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJyb3RhdGUoXCIgKyBiICsgZGVnUGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNrZXdYKGEsIGIsIHMsIHEpIHtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgcS5wdXNoKHtpOiBzLnB1c2gocG9wKHMpICsgXCJza2V3WChcIiwgbnVsbCwgZGVnUGFyZW4pIC0gMiwgeDogbnVtYmVyKGEsIGIpfSk7XG4gICAgfSBlbHNlIGlmIChiKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJza2V3WChcIiArIGIgKyBkZWdQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeGEsIHlhLCB4YiwgeWIsIHMsIHEpIHtcbiAgICBpZiAoeGEgIT09IHhiIHx8IHlhICE9PSB5Yikge1xuICAgICAgdmFyIGkgPSBzLnB1c2gocG9wKHMpICsgXCJzY2FsZShcIiwgbnVsbCwgXCIsXCIsIG51bGwsIFwiKVwiKTtcbiAgICAgIHEucHVzaCh7aTogaSAtIDQsIHg6IG51bWJlcih4YSwgeGIpfSwge2k6IGkgLSAyLCB4OiBudW1iZXIoeWEsIHliKX0pO1xuICAgIH0gZWxzZSBpZiAoeGIgIT09IDEgfHwgeWIgIT09IDEpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInNjYWxlKFwiICsgeGIgKyBcIixcIiArIHliICsgXCIpXCIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbihhLCBiKSB7XG4gICAgdmFyIHMgPSBbXSwgLy8gc3RyaW5nIGNvbnN0YW50cyBhbmQgcGxhY2Vob2xkZXJzXG4gICAgICAgIHEgPSBbXTsgLy8gbnVtYmVyIGludGVycG9sYXRvcnNcbiAgICBhID0gcGFyc2UoYSksIGIgPSBwYXJzZShiKTtcbiAgICB0cmFuc2xhdGUoYS50cmFuc2xhdGVYLCBhLnRyYW5zbGF0ZVksIGIudHJhbnNsYXRlWCwgYi50cmFuc2xhdGVZLCBzLCBxKTtcbiAgICByb3RhdGUoYS5yb3RhdGUsIGIucm90YXRlLCBzLCBxKTtcbiAgICBza2V3WChhLnNrZXdYLCBiLnNrZXdYLCBzLCBxKTtcbiAgICBzY2FsZShhLnNjYWxlWCwgYS5zY2FsZVksIGIuc2NhbGVYLCBiLnNjYWxlWSwgcywgcSk7XG4gICAgYSA9IGIgPSBudWxsOyAvLyBnY1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgaSA9IC0xLCBuID0gcS5sZW5ndGgsIG87XG4gICAgICB3aGlsZSAoKytpIDwgbikgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgdmFyIGludGVycG9sYXRlVHJhbnNmb3JtQ3NzID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VDc3MsIFwicHgsIFwiLCBcInB4KVwiLCBcImRlZylcIik7XG5leHBvcnQgdmFyIGludGVycG9sYXRlVHJhbnNmb3JtU3ZnID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VTdmcsIFwiLCBcIiwgXCIpXCIsIFwiKVwiKTtcbiIsImltcG9ydCB7Z2V0LCBzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIHR3ZWVuUmVtb3ZlKGlkLCBuYW1lKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIHR3ZWVuID0gc2NoZWR1bGUudHdlZW47XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIHR3ZWVuIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIHR3ZWVuIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmICh0d2VlbiAhPT0gdHdlZW4wKSB7XG4gICAgICB0d2VlbjEgPSB0d2VlbjAgPSB0d2VlbjtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdHdlZW4xLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAodHdlZW4xW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICB0d2VlbjEgPSB0d2VlbjEuc2xpY2UoKTtcbiAgICAgICAgICB0d2VlbjEuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2NoZWR1bGUudHdlZW4gPSB0d2VlbjE7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHR3ZWVuRnVuY3Rpb24oaWQsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICB0d2VlbiA9IHNjaGVkdWxlLnR3ZWVuO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCB0d2VlbiB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCB0d2VlbiBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAodHdlZW4gIT09IHR3ZWVuMCkge1xuICAgICAgdHdlZW4xID0gKHR3ZWVuMCA9IHR3ZWVuKS5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgdCA9IHtuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWV9LCBpID0gMCwgbiA9IHR3ZWVuMS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKHR3ZWVuMVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgdHdlZW4xW2ldID0gdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGkgPT09IG4pIHR3ZWVuMS5wdXNoKHQpO1xuICAgIH1cblxuICAgIHNjaGVkdWxlLnR3ZWVuID0gdHdlZW4xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICBuYW1lICs9IFwiXCI7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIHR3ZWVuID0gZ2V0KHRoaXMubm9kZSgpLCBpZCkudHdlZW47XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0d2Vlbi5sZW5ndGgsIHQ7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgodCA9IHR3ZWVuW2ldKS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgIHJldHVybiB0LnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGwgPyB0d2VlblJlbW92ZSA6IHR3ZWVuRnVuY3Rpb24pKGlkLCBuYW1lLCB2YWx1ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHdlZW5WYWx1ZSh0cmFuc2l0aW9uLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0cmFuc2l0aW9uLl9pZDtcblxuICB0cmFuc2l0aW9uLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKTtcbiAgICAoc2NoZWR1bGUudmFsdWUgfHwgKHNjaGVkdWxlLnZhbHVlID0ge30pKVtuYW1lXSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIGdldChub2RlLCBpZCkudmFsdWVbbmFtZV07XG4gIH07XG59XG4iLCJpbXBvcnQge2NvbG9yfSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVOdW1iZXIsIGludGVycG9sYXRlUmdiLCBpbnRlcnBvbGF0ZVN0cmluZ30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGM7XG4gIHJldHVybiAodHlwZW9mIGIgPT09IFwibnVtYmVyXCIgPyBpbnRlcnBvbGF0ZU51bWJlclxuICAgICAgOiBiIGluc3RhbmNlb2YgY29sb3IgPyBpbnRlcnBvbGF0ZVJnYlxuICAgICAgOiAoYyA9IGNvbG9yKGIpKSA/IChiID0gYywgaW50ZXJwb2xhdGVSZ2IpXG4gICAgICA6IGludGVycG9sYXRlU3RyaW5nKShhLCBiKTtcbn1cbiIsImltcG9ydCB7aW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmcgYXMgaW50ZXJwb2xhdGVUcmFuc2Zvcm19IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtuYW1lc3BhY2V9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW4uanNcIjtcbmltcG9ydCBpbnRlcnBvbGF0ZSBmcm9tIFwiLi9pbnRlcnBvbGF0ZS5qc1wiO1xuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlTlMoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50KG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCIsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIixcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAsIHZhbHVlMSA9IHZhbHVlKHRoaXMpLCBzdHJpbmcxO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgcmV0dXJuIHZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uTlMoZnVsbG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwLCB2YWx1ZTEgPSB2YWx1ZSh0aGlzKSwgc3RyaW5nMTtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHJldHVybiB2b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpLCBpID0gZnVsbG5hbWUgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdGhpcy5hdHRyVHdlZW4obmFtZSwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pKGZ1bGxuYW1lLCBpLCB0d2VlblZhbHVlKHRoaXMsIFwiYXR0ci5cIiArIG5hbWUsIHZhbHVlKSlcbiAgICAgIDogdmFsdWUgPT0gbnVsbCA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJSZW1vdmVOUyA6IGF0dHJSZW1vdmUpKGZ1bGxuYW1lKVxuICAgICAgOiAoZnVsbG5hbWUubG9jYWwgPyBhdHRyQ29uc3RhbnROUyA6IGF0dHJDb25zdGFudCkoZnVsbG5hbWUsIGksIHZhbHVlKSk7XG59XG4iLCJpbXBvcnQge25hbWVzcGFjZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5mdW5jdGlvbiBhdHRySW50ZXJwb2xhdGUobmFtZSwgaSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIGkuY2FsbCh0aGlzLCB0KSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJJbnRlcnBvbGF0ZU5TKGZ1bGxuYW1lLCBpKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIGkuY2FsbCh0aGlzLCB0KSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJUd2Vlbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICB2YXIgdDAsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0MCA9IChpMCA9IGkpICYmIGF0dHJJbnRlcnBvbGF0ZU5TKGZ1bGxuYW1lLCBpKTtcbiAgICByZXR1cm4gdDA7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZnVuY3Rpb24gYXR0clR3ZWVuKG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0MCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQwID0gKGkwID0gaSkgJiYgYXR0ckludGVycG9sYXRlKG5hbWUsIGkpO1xuICAgIHJldHVybiB0MDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIga2V5ID0gXCJhdHRyLlwiICsgbmFtZTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgKGZ1bGxuYW1lLmxvY2FsID8gYXR0clR3ZWVuTlMgOiBhdHRyVHdlZW4pKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtnZXQsIGluaXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIGRlbGF5RnVuY3Rpb24oaWQsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpbml0KHRoaXMsIGlkKS5kZWxheSA9ICt2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkZWxheUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPSArdmFsdWUsIGZ1bmN0aW9uKCkge1xuICAgIGluaXQodGhpcywgaWQpLmRlbGF5ID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGRlbGF5RnVuY3Rpb25cbiAgICAgICAgICA6IGRlbGF5Q29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmRlbGF5O1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZHVyYXRpb25GdW5jdGlvbihpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZHVyYXRpb24gPSArdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZHVyYXRpb25Db25zdGFudChpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID0gK3ZhbHVlLCBmdW5jdGlvbigpIHtcbiAgICBzZXQodGhpcywgaWQpLmR1cmF0aW9uID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGR1cmF0aW9uRnVuY3Rpb25cbiAgICAgICAgICA6IGR1cmF0aW9uQ29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmR1cmF0aW9uO1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZWFzZSA9IHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2goZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmVhc2U7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0LCBpbml0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBzdGFydChuYW1lKSB7XG4gIHJldHVybiAobmFtZSArIFwiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykuZXZlcnkoZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICByZXR1cm4gIXQgfHwgdCA9PT0gXCJzdGFydFwiO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb25GdW5jdGlvbihpZCwgbmFtZSwgbGlzdGVuZXIpIHtcbiAgdmFyIG9uMCwgb24xLCBzaXQgPSBzdGFydChuYW1lKSA/IGluaXQgOiBzZXQ7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzaXQodGhpcywgaWQpLFxuICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmIChvbiAhPT0gb24wKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKG5hbWUsIGxpc3RlbmVyKTtcblxuICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCBsaXN0ZW5lcikge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDJcbiAgICAgID8gZ2V0KHRoaXMubm9kZSgpLCBpZCkub24ub24obmFtZSlcbiAgICAgIDogdGhpcy5lYWNoKG9uRnVuY3Rpb24oaWQsIG5hbWUsIGxpc3RlbmVyKSk7XG59XG4iLCJpbXBvcnQge3NlbGVjdGlvbn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG52YXIgU2VsZWN0aW9uID0gc2VsZWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2dyb3VwcywgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJpbXBvcnQge2ludGVycG9sYXRlVHJhbnNmb3JtQ3NzIGFzIGludGVycG9sYXRlVHJhbnNmb3JtfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7c3R5bGV9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7c2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuaW1wb3J0IHt0d2VlblZhbHVlfSBmcm9tIFwiLi90d2Vlbi5qc1wiO1xuaW1wb3J0IGludGVycG9sYXRlIGZyb20gXCIuL2ludGVycG9sYXRlLmpzXCI7XG5cbmZ1bmN0aW9uIHN0eWxlTnVsbChuYW1lLCBpbnRlcnBvbGF0ZSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gc3R5bGUodGhpcywgbmFtZSksXG4gICAgICAgIHN0cmluZzEgPSAodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKSwgc3R5bGUodGhpcywgbmFtZSkpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCBzdHJpbmcxMCA9IHN0cmluZzEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZVJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUNvbnN0YW50KG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCIsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHN0eWxlKHRoaXMsIG5hbWUpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUZ1bmN0aW9uKG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gc3R5bGUodGhpcywgbmFtZSksXG4gICAgICAgIHZhbHVlMSA9IHZhbHVlKHRoaXMpLFxuICAgICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIjtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHN0cmluZzEgPSB2YWx1ZTEgPSAodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKSwgc3R5bGUodGhpcywgbmFtZSkpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVNYXliZVJlbW92ZShpZCwgbmFtZSkge1xuICB2YXIgb24wLCBvbjEsIGxpc3RlbmVyMCwga2V5ID0gXCJzdHlsZS5cIiArIG5hbWUsIGV2ZW50ID0gXCJlbmQuXCIgKyBrZXksIHJlbW92ZTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIG9uID0gc2NoZWR1bGUub24sXG4gICAgICAgIGxpc3RlbmVyID0gc2NoZWR1bGUudmFsdWVba2V5XSA9PSBudWxsID8gcmVtb3ZlIHx8IChyZW1vdmUgPSBzdHlsZVJlbW92ZShuYW1lKSkgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIGEgZGlzcGF0Y2ggd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgZGlzcGF0Y2ggYW5kIHdl4oCZcmUgZG9uZSFcbiAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgaWYgKG9uICE9PSBvbjAgfHwgbGlzdGVuZXIwICE9PSBsaXN0ZW5lcikgKG9uMSA9IChvbjAgPSBvbikuY29weSgpKS5vbihldmVudCwgbGlzdGVuZXIwID0gbGlzdGVuZXIpO1xuXG4gICAgc2NoZWR1bGUub24gPSBvbjE7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICB2YXIgaSA9IChuYW1lICs9IFwiXCIpID09PSBcInRyYW5zZm9ybVwiID8gaW50ZXJwb2xhdGVUcmFuc2Zvcm0gOiBpbnRlcnBvbGF0ZTtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyB0aGlzXG4gICAgICAuc3R5bGVUd2VlbihuYW1lLCBzdHlsZU51bGwobmFtZSwgaSkpXG4gICAgICAub24oXCJlbmQuc3R5bGUuXCIgKyBuYW1lLCBzdHlsZVJlbW92ZShuYW1lKSlcbiAgICA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gdGhpc1xuICAgICAgLnN0eWxlVHdlZW4obmFtZSwgc3R5bGVGdW5jdGlvbihuYW1lLCBpLCB0d2VlblZhbHVlKHRoaXMsIFwic3R5bGUuXCIgKyBuYW1lLCB2YWx1ZSkpKVxuICAgICAgLmVhY2goc3R5bGVNYXliZVJlbW92ZSh0aGlzLl9pZCwgbmFtZSkpXG4gICAgOiB0aGlzXG4gICAgICAuc3R5bGVUd2VlbihuYW1lLCBzdHlsZUNvbnN0YW50KG5hbWUsIGksIHZhbHVlKSwgcHJpb3JpdHkpXG4gICAgICAub24oXCJlbmQuc3R5bGUuXCIgKyBuYW1lLCBudWxsKTtcbn1cbiIsImZ1bmN0aW9uIHN0eWxlSW50ZXJwb2xhdGUobmFtZSwgaSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIGkuY2FsbCh0aGlzLCB0KSwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZVR3ZWVuKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICB2YXIgdCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQgPSAoaTAgPSBpKSAmJiBzdHlsZUludGVycG9sYXRlKG5hbWUsIGksIHByaW9yaXR5KTtcbiAgICByZXR1cm4gdDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgdmFyIGtleSA9IFwic3R5bGUuXCIgKyAobmFtZSArPSBcIlwiKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gdGhpcy50d2VlbihrZXksIHN0eWxlVHdlZW4obmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKTtcbn1cbiIsImZ1bmN0aW9uIHRleHRJbnRlcnBvbGF0ZShpKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IGkuY2FsbCh0aGlzLCB0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdGV4dFR3ZWVuKHZhbHVlKSB7XG4gIHZhciB0MCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQwID0gKGkwID0gaSkgJiYgdGV4dEludGVycG9sYXRlKGkpO1xuICAgIHJldHVybiB0MDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIga2V5ID0gXCJ0ZXh0XCI7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkgcmV0dXJuIChrZXkgPSB0aGlzLnR3ZWVuKGtleSkpICYmIGtleS5fdmFsdWU7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdGhpcy50d2VlbihrZXksIG51bGwpO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCB0ZXh0VHdlZW4odmFsdWUpKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9hdHRyIGZyb20gXCIuL2F0dHIuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2F0dHJUd2VlbiBmcm9tIFwiLi9hdHRyVHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2RlbGF5IGZyb20gXCIuL2RlbGF5LmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9kdXJhdGlvbiBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZWFzZSBmcm9tIFwiLi9lYXNlLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9lYXNlVmFyeWluZyBmcm9tIFwiLi9lYXNlVmFyeWluZy5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZmlsdGVyIGZyb20gXCIuL2ZpbHRlci5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fbWVyZ2UgZnJvbSBcIi4vbWVyZ2UuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX29uIGZyb20gXCIuL29uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9yZW1vdmUgZnJvbSBcIi4vcmVtb3ZlLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3QgZnJvbSBcIi4vc2VsZWN0LmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3RBbGwgZnJvbSBcIi4vc2VsZWN0QWxsLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3Rpb24gZnJvbSBcIi4vc2VsZWN0aW9uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zdHlsZSBmcm9tIFwiLi9zdHlsZS5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc3R5bGVUd2VlbiBmcm9tIFwiLi9zdHlsZVR3ZWVuLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90ZXh0IGZyb20gXCIuL3RleHQuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3RleHRUd2VlbiBmcm9tIFwiLi90ZXh0VHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3RyYW5zaXRpb24gZnJvbSBcIi4vdHJhbnNpdGlvbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fdHdlZW4gZnJvbSBcIi4vdHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2VuZCBmcm9tIFwiLi9lbmQuanNcIjtcblxudmFyIGlkID0gMDtcblxuZXhwb3J0IGZ1bmN0aW9uIFRyYW5zaXRpb24oZ3JvdXBzLCBwYXJlbnRzLCBuYW1lLCBpZCkge1xuICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gIHRoaXMuX3BhcmVudHMgPSBwYXJlbnRzO1xuICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgdGhpcy5faWQgPSBpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNpdGlvbihuYW1lKSB7XG4gIHJldHVybiBzZWxlY3Rpb24oKS50cmFuc2l0aW9uKG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV3SWQoKSB7XG4gIHJldHVybiArK2lkO1xufVxuXG52YXIgc2VsZWN0aW9uX3Byb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGU7XG5cblRyYW5zaXRpb24ucHJvdG90eXBlID0gdHJhbnNpdGlvbi5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUcmFuc2l0aW9uLFxuICBzZWxlY3Q6IHRyYW5zaXRpb25fc2VsZWN0LFxuICBzZWxlY3RBbGw6IHRyYW5zaXRpb25fc2VsZWN0QWxsLFxuICBmaWx0ZXI6IHRyYW5zaXRpb25fZmlsdGVyLFxuICBtZXJnZTogdHJhbnNpdGlvbl9tZXJnZSxcbiAgc2VsZWN0aW9uOiB0cmFuc2l0aW9uX3NlbGVjdGlvbixcbiAgdHJhbnNpdGlvbjogdHJhbnNpdGlvbl90cmFuc2l0aW9uLFxuICBjYWxsOiBzZWxlY3Rpb25fcHJvdG90eXBlLmNhbGwsXG4gIG5vZGVzOiBzZWxlY3Rpb25fcHJvdG90eXBlLm5vZGVzLFxuICBub2RlOiBzZWxlY3Rpb25fcHJvdG90eXBlLm5vZGUsXG4gIHNpemU6IHNlbGVjdGlvbl9wcm90b3R5cGUuc2l6ZSxcbiAgZW1wdHk6IHNlbGVjdGlvbl9wcm90b3R5cGUuZW1wdHksXG4gIGVhY2g6IHNlbGVjdGlvbl9wcm90b3R5cGUuZWFjaCxcbiAgb246IHRyYW5zaXRpb25fb24sXG4gIGF0dHI6IHRyYW5zaXRpb25fYXR0cixcbiAgYXR0clR3ZWVuOiB0cmFuc2l0aW9uX2F0dHJUd2VlbixcbiAgc3R5bGU6IHRyYW5zaXRpb25fc3R5bGUsXG4gIHN0eWxlVHdlZW46IHRyYW5zaXRpb25fc3R5bGVUd2VlbixcbiAgdGV4dDogdHJhbnNpdGlvbl90ZXh0LFxuICB0ZXh0VHdlZW46IHRyYW5zaXRpb25fdGV4dFR3ZWVuLFxuICByZW1vdmU6IHRyYW5zaXRpb25fcmVtb3ZlLFxuICB0d2VlbjogdHJhbnNpdGlvbl90d2VlbixcbiAgZGVsYXk6IHRyYW5zaXRpb25fZGVsYXksXG4gIGR1cmF0aW9uOiB0cmFuc2l0aW9uX2R1cmF0aW9uLFxuICBlYXNlOiB0cmFuc2l0aW9uX2Vhc2UsXG4gIGVhc2VWYXJ5aW5nOiB0cmFuc2l0aW9uX2Vhc2VWYXJ5aW5nLFxuICBlbmQ6IHRyYW5zaXRpb25fZW5kLFxuICBbU3ltYm9sLml0ZXJhdG9yXTogc2VsZWN0aW9uX3Byb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdXG59O1xuIiwiaW1wb3J0IHtzZWxlY3Rvcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlLCB7Z2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLl9uYW1lLFxuICAgICAgaWQgPSB0aGlzLl9pZDtcblxuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvcihzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIHN1Ym5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKHN1Ym5vZGUgPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpKSB7XG4gICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgIHN1Ymdyb3VwW2ldID0gc3Vibm9kZTtcbiAgICAgICAgc2NoZWR1bGUoc3ViZ3JvdXBbaV0sIG5hbWUsIGlkLCBpLCBzdWJncm91cCwgZ2V0KG5vZGUsIGlkKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cywgbmFtZSwgaWQpO1xufVxuIiwiaW1wb3J0IHtzZWxlY3RvckFsbH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlLCB7Z2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLl9uYW1lLFxuICAgICAgaWQgPSB0aGlzLl9pZDtcblxuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvckFsbChzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IFtdLCBwYXJlbnRzID0gW10sIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGZvciAodmFyIGNoaWxkcmVuID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApLCBjaGlsZCwgaW5oZXJpdCA9IGdldChub2RlLCBpZCksIGsgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBrIDwgbDsgKytrKSB7XG4gICAgICAgICAgaWYgKGNoaWxkID0gY2hpbGRyZW5ba10pIHtcbiAgICAgICAgICAgIHNjaGVkdWxlKGNoaWxkLCBuYW1lLCBpZCwgaywgY2hpbGRyZW4sIGluaGVyaXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdWJncm91cHMucHVzaChjaGlsZHJlbik7XG4gICAgICAgIHBhcmVudHMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCBwYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLCJpbXBvcnQge21hdGNoZXJ9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgaWYgKHR5cGVvZiBtYXRjaCAhPT0gXCJmdW5jdGlvblwiKSBtYXRjaCA9IG1hdGNoZXIobWF0Y2gpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBbXSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiBtYXRjaC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkge1xuICAgICAgICBzdWJncm91cC5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMsIHRoaXMuX25hbWUsIHRoaXMuX2lkKTtcbn1cbiIsImltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odHJhbnNpdGlvbikge1xuICBpZiAodHJhbnNpdGlvbi5faWQgIT09IHRoaXMuX2lkKSB0aHJvdyBuZXcgRXJyb3I7XG5cbiAgZm9yICh2YXIgZ3JvdXBzMCA9IHRoaXMuX2dyb3VwcywgZ3JvdXBzMSA9IHRyYW5zaXRpb24uX2dyb3VwcywgbTAgPSBncm91cHMwLmxlbmd0aCwgbTEgPSBncm91cHMxLmxlbmd0aCwgbSA9IE1hdGgubWluKG0wLCBtMSksIG1lcmdlcyA9IG5ldyBBcnJheShtMCksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAwID0gZ3JvdXBzMFtqXSwgZ3JvdXAxID0gZ3JvdXBzMVtqXSwgbiA9IGdyb3VwMC5sZW5ndGgsIG1lcmdlID0gbWVyZ2VzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cDBbaV0gfHwgZ3JvdXAxW2ldKSB7XG4gICAgICAgIG1lcmdlW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKDsgaiA8IG0wOyArK2opIHtcbiAgICBtZXJnZXNbal0gPSBncm91cHMwW2pdO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKG1lcmdlcywgdGhpcy5fcGFyZW50cywgdGhpcy5fbmFtZSwgdGhpcy5faWQpO1xufVxuIiwiaW1wb3J0IHtUcmFuc2l0aW9uLCBuZXdJZH0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkMCA9IHRoaXMuX2lkLFxuICAgICAgaWQxID0gbmV3SWQoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICB2YXIgaW5oZXJpdCA9IGdldChub2RlLCBpZDApO1xuICAgICAgICBzY2hlZHVsZShub2RlLCBuYW1lLCBpZDEsIGksIGdyb3VwLCB7XG4gICAgICAgICAgdGltZTogaW5oZXJpdC50aW1lICsgaW5oZXJpdC5kZWxheSArIGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZGVsYXk6IDAsXG4gICAgICAgICAgZHVyYXRpb246IGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZWFzZTogaW5oZXJpdC5lYXNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkMSk7XG59XG4iLCJpbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuLmpzXCI7XG5cbmZ1bmN0aW9uIHRleHRDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTEgPSB2YWx1ZSh0aGlzKTtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWUxID09IG51bGwgPyBcIlwiIDogdmFsdWUxO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdGhpcy50d2VlbihcInRleHRcIiwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gdGV4dEZ1bmN0aW9uKHR3ZWVuVmFsdWUodGhpcywgXCJ0ZXh0XCIsIHZhbHVlKSlcbiAgICAgIDogdGV4dENvbnN0YW50KHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiKSk7XG59XG4iLCJmdW5jdGlvbiByZW1vdmVGdW5jdGlvbihpZCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgICBmb3IgKHZhciBpIGluIHRoaXMuX190cmFuc2l0aW9uKSBpZiAoK2kgIT09IGlkKSByZXR1cm47XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub24oXCJlbmQucmVtb3ZlXCIsIHJlbW92ZUZ1bmN0aW9uKHRoaXMuX2lkKSk7XG59XG4iLCJpbXBvcnQge3NldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZWFzZVZhcnlpbmcoaWQsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHR5cGVvZiB2ICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgICBzZXQodGhpcywgaWQpLmVhc2UgPSB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIHRoaXMuZWFjaChlYXNlVmFyeWluZyh0aGlzLl9pZCwgdmFsdWUpKTtcbn1cbiIsImltcG9ydCB7c2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG9uMCwgb24xLCB0aGF0ID0gdGhpcywgaWQgPSB0aGF0Ll9pZCwgc2l6ZSA9IHRoYXQuc2l6ZSgpO1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIGNhbmNlbCA9IHt2YWx1ZTogcmVqZWN0fSxcbiAgICAgICAgZW5kID0ge3ZhbHVlOiBmdW5jdGlvbigpIHsgaWYgKC0tc2l6ZSA9PT0gMCkgcmVzb2x2ZSgpOyB9fTtcblxuICAgIHRoYXQuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgICAgb24gPSBzY2hlZHVsZS5vbjtcblxuICAgICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgZGlzcGF0Y2ggYW5kIHdl4oCZcmUgZG9uZSFcbiAgICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICAgIGlmIChvbiAhPT0gb24wKSB7XG4gICAgICAgIG9uMSA9IChvbjAgPSBvbikuY29weSgpO1xuICAgICAgICBvbjEuXy5jYW5jZWwucHVzaChjYW5jZWwpO1xuICAgICAgICBvbjEuXy5pbnRlcnJ1cHQucHVzaChjYW5jZWwpO1xuICAgICAgICBvbjEuXy5lbmQucHVzaChlbmQpO1xuICAgICAgfVxuXG4gICAgICBzY2hlZHVsZS5vbiA9IG9uMTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSBzZWxlY3Rpb24gd2FzIGVtcHR5LCByZXNvbHZlIGVuZCBpbW1lZGlhdGVseVxuICAgIGlmIChzaXplID09PSAwKSByZXNvbHZlKCk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHtUcmFuc2l0aW9uLCBuZXdJZH0gZnJvbSBcIi4uL3RyYW5zaXRpb24vaW5kZXguanNcIjtcbmltcG9ydCBzY2hlZHVsZSBmcm9tIFwiLi4vdHJhbnNpdGlvbi9zY2hlZHVsZS5qc1wiO1xuaW1wb3J0IHtlYXNlQ3ViaWNJbk91dH0gZnJvbSBcImQzLWVhc2VcIjtcbmltcG9ydCB7bm93fSBmcm9tIFwiZDMtdGltZXJcIjtcblxudmFyIGRlZmF1bHRUaW1pbmcgPSB7XG4gIHRpbWU6IG51bGwsIC8vIFNldCBvbiB1c2UuXG4gIGRlbGF5OiAwLFxuICBkdXJhdGlvbjogMjUwLFxuICBlYXNlOiBlYXNlQ3ViaWNJbk91dFxufTtcblxuZnVuY3Rpb24gaW5oZXJpdChub2RlLCBpZCkge1xuICB2YXIgdGltaW5nO1xuICB3aGlsZSAoISh0aW1pbmcgPSBub2RlLl9fdHJhbnNpdGlvbikgfHwgISh0aW1pbmcgPSB0aW1pbmdbaWRdKSkge1xuICAgIGlmICghKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHRyYW5zaXRpb24gJHtpZH0gbm90IGZvdW5kYCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aW1pbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGlkLFxuICAgICAgdGltaW5nO1xuXG4gIGlmIChuYW1lIGluc3RhbmNlb2YgVHJhbnNpdGlvbikge1xuICAgIGlkID0gbmFtZS5faWQsIG5hbWUgPSBuYW1lLl9uYW1lO1xuICB9IGVsc2Uge1xuICAgIGlkID0gbmV3SWQoKSwgKHRpbWluZyA9IGRlZmF1bHRUaW1pbmcpLnRpbWUgPSBub3coKSwgbmFtZSA9IG5hbWUgPT0gbnVsbCA/IG51bGwgOiBuYW1lICsgXCJcIjtcbiAgfVxuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIHNjaGVkdWxlKG5vZGUsIG5hbWUsIGlkLCBpLCBncm91cCwgdGltaW5nIHx8IGluaGVyaXQobm9kZSwgaWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gY3ViaWNJbih0KSB7XG4gIHJldHVybiB0ICogdCAqIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdWJpY091dCh0KSB7XG4gIHJldHVybiAtLXQgKiB0ICogdCArIDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdWJpY0luT3V0KHQpIHtcbiAgcmV0dXJuICgodCAqPSAyKSA8PSAxID8gdCAqIHQgKiB0IDogKHQgLT0gMikgKiB0ICogdCArIDIpIC8gMjtcbn1cbiIsImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2ludGVycnVwdCBmcm9tIFwiLi9pbnRlcnJ1cHQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fdHJhbnNpdGlvbiBmcm9tIFwiLi90cmFuc2l0aW9uLmpzXCI7XG5cbnNlbGVjdGlvbi5wcm90b3R5cGUuaW50ZXJydXB0ID0gc2VsZWN0aW9uX2ludGVycnVwdDtcbnNlbGVjdGlvbi5wcm90b3R5cGUudHJhbnNpdGlvbiA9IHNlbGVjdGlvbl90cmFuc2l0aW9uO1xuIiwiaW1wb3J0IGludGVycnVwdCBmcm9tIFwiLi4vaW50ZXJydXB0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICBpbnRlcnJ1cHQodGhpcywgbmFtZSk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHtTVEFSVElORywgRU5ESU5HLCBFTkRFRH0gZnJvbSBcIi4vdHJhbnNpdGlvbi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCBuYW1lKSB7XG4gIHZhciBzY2hlZHVsZXMgPSBub2RlLl9fdHJhbnNpdGlvbixcbiAgICAgIHNjaGVkdWxlLFxuICAgICAgYWN0aXZlLFxuICAgICAgZW1wdHkgPSB0cnVlLFxuICAgICAgaTtcblxuICBpZiAoIXNjaGVkdWxlcykgcmV0dXJuO1xuXG4gIG5hbWUgPSBuYW1lID09IG51bGwgPyBudWxsIDogbmFtZSArIFwiXCI7XG5cbiAgZm9yIChpIGluIHNjaGVkdWxlcykge1xuICAgIGlmICgoc2NoZWR1bGUgPSBzY2hlZHVsZXNbaV0pLm5hbWUgIT09IG5hbWUpIHsgZW1wdHkgPSBmYWxzZTsgY29udGludWU7IH1cbiAgICBhY3RpdmUgPSBzY2hlZHVsZS5zdGF0ZSA+IFNUQVJUSU5HICYmIHNjaGVkdWxlLnN0YXRlIDwgRU5ESU5HO1xuICAgIHNjaGVkdWxlLnN0YXRlID0gRU5ERUQ7XG4gICAgc2NoZWR1bGUudGltZXIuc3RvcCgpO1xuICAgIHNjaGVkdWxlLm9uLmNhbGwoYWN0aXZlID8gXCJpbnRlcnJ1cHRcIiA6IFwiY2FuY2VsXCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNjaGVkdWxlLmluZGV4LCBzY2hlZHVsZS5ncm91cCk7XG4gICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgfVxuXG4gIGlmIChlbXB0eSkgZGVsZXRlIG5vZGUuX190cmFuc2l0aW9uO1xufVxuIiwiY29uc3QgcGkgPSBNYXRoLlBJLFxuICAgIHRhdSA9IDIgKiBwaSxcbiAgICBlcHNpbG9uID0gMWUtNixcbiAgICB0YXVFcHNpbG9uID0gdGF1IC0gZXBzaWxvbjtcblxuZnVuY3Rpb24gUGF0aCgpIHtcbiAgdGhpcy5feDAgPSB0aGlzLl95MCA9IC8vIHN0YXJ0IG9mIGN1cnJlbnQgc3VicGF0aFxuICB0aGlzLl94MSA9IHRoaXMuX3kxID0gbnVsbDsgLy8gZW5kIG9mIGN1cnJlbnQgc3VicGF0aFxuICB0aGlzLl8gPSBcIlwiO1xufVxuXG5mdW5jdGlvbiBwYXRoKCkge1xuICByZXR1cm4gbmV3IFBhdGg7XG59XG5cblBhdGgucHJvdG90eXBlID0gcGF0aC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBQYXRoLFxuICBtb3ZlVG86IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJNXCIgKyAodGhpcy5feDAgPSB0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kwID0gdGhpcy5feTEgPSAreSk7XG4gIH0sXG4gIGNsb3NlUGF0aDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX3gxICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl94MSA9IHRoaXMuX3gwLCB0aGlzLl95MSA9IHRoaXMuX3kwO1xuICAgICAgdGhpcy5fICs9IFwiWlwiO1xuICAgIH1cbiAgfSxcbiAgbGluZVRvOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiTFwiICsgKHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTEgPSAreSk7XG4gIH0sXG4gIHF1YWRyYXRpY0N1cnZlVG86IGZ1bmN0aW9uKHgxLCB5MSwgeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIlFcIiArICgreDEpICsgXCIsXCIgKyAoK3kxKSArIFwiLFwiICsgKHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTEgPSAreSk7XG4gIH0sXG4gIGJlemllckN1cnZlVG86IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCB4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiQ1wiICsgKCt4MSkgKyBcIixcIiArICgreTEpICsgXCIsXCIgKyAoK3gyKSArIFwiLFwiICsgKCt5MikgKyBcIixcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBhcmNUbzogZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIHIpIHtcbiAgICB4MSA9ICt4MSwgeTEgPSAreTEsIHgyID0gK3gyLCB5MiA9ICt5MiwgciA9ICtyO1xuICAgIHZhciB4MCA9IHRoaXMuX3gxLFxuICAgICAgICB5MCA9IHRoaXMuX3kxLFxuICAgICAgICB4MjEgPSB4MiAtIHgxLFxuICAgICAgICB5MjEgPSB5MiAtIHkxLFxuICAgICAgICB4MDEgPSB4MCAtIHgxLFxuICAgICAgICB5MDEgPSB5MCAtIHkxLFxuICAgICAgICBsMDFfMiA9IHgwMSAqIHgwMSArIHkwMSAqIHkwMTtcblxuICAgIC8vIElzIHRoZSByYWRpdXMgbmVnYXRpdmU/IEVycm9yLlxuICAgIGlmIChyIDwgMCkgdGhyb3cgbmV3IEVycm9yKFwibmVnYXRpdmUgcmFkaXVzOiBcIiArIHIpO1xuXG4gICAgLy8gSXMgdGhpcyBwYXRoIGVtcHR5PyBNb3ZlIHRvICh4MSx5MSkuXG4gICAgaWYgKHRoaXMuX3gxID09PSBudWxsKSB7XG4gICAgICB0aGlzLl8gKz0gXCJNXCIgKyAodGhpcy5feDEgPSB4MSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkxKTtcbiAgICB9XG5cbiAgICAvLyBPciwgaXMgKHgxLHkxKSBjb2luY2lkZW50IHdpdGggKHgwLHkwKT8gRG8gbm90aGluZy5cbiAgICBlbHNlIGlmICghKGwwMV8yID4gZXBzaWxvbikpO1xuXG4gICAgLy8gT3IsIGFyZSAoeDAseTApLCAoeDEseTEpIGFuZCAoeDIseTIpIGNvbGxpbmVhcj9cbiAgICAvLyBFcXVpdmFsZW50bHksIGlzICh4MSx5MSkgY29pbmNpZGVudCB3aXRoICh4Mix5Mik/XG4gICAgLy8gT3IsIGlzIHRoZSByYWRpdXMgemVybz8gTGluZSB0byAoeDEseTEpLlxuICAgIGVsc2UgaWYgKCEoTWF0aC5hYnMoeTAxICogeDIxIC0geTIxICogeDAxKSA+IGVwc2lsb24pIHx8ICFyKSB7XG4gICAgICB0aGlzLl8gKz0gXCJMXCIgKyAodGhpcy5feDEgPSB4MSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkxKTtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIGRyYXcgYW4gYXJjIVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHgyMCA9IHgyIC0geDAsXG4gICAgICAgICAgeTIwID0geTIgLSB5MCxcbiAgICAgICAgICBsMjFfMiA9IHgyMSAqIHgyMSArIHkyMSAqIHkyMSxcbiAgICAgICAgICBsMjBfMiA9IHgyMCAqIHgyMCArIHkyMCAqIHkyMCxcbiAgICAgICAgICBsMjEgPSBNYXRoLnNxcnQobDIxXzIpLFxuICAgICAgICAgIGwwMSA9IE1hdGguc3FydChsMDFfMiksXG4gICAgICAgICAgbCA9IHIgKiBNYXRoLnRhbigocGkgLSBNYXRoLmFjb3MoKGwyMV8yICsgbDAxXzIgLSBsMjBfMikgLyAoMiAqIGwyMSAqIGwwMSkpKSAvIDIpLFxuICAgICAgICAgIHQwMSA9IGwgLyBsMDEsXG4gICAgICAgICAgdDIxID0gbCAvIGwyMTtcblxuICAgICAgLy8gSWYgdGhlIHN0YXJ0IHRhbmdlbnQgaXMgbm90IGNvaW5jaWRlbnQgd2l0aCAoeDAseTApLCBsaW5lIHRvLlxuICAgICAgaWYgKE1hdGguYWJzKHQwMSAtIDEpID4gZXBzaWxvbikge1xuICAgICAgICB0aGlzLl8gKz0gXCJMXCIgKyAoeDEgKyB0MDEgKiB4MDEpICsgXCIsXCIgKyAoeTEgKyB0MDEgKiB5MDEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwwLFwiICsgKCsoeTAxICogeDIwID4geDAxICogeTIwKSkgKyBcIixcIiArICh0aGlzLl94MSA9IHgxICsgdDIxICogeDIxKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTEgKyB0MjEgKiB5MjEpO1xuICAgIH1cbiAgfSxcbiAgYXJjOiBmdW5jdGlvbih4LCB5LCByLCBhMCwgYTEsIGNjdykge1xuICAgIHggPSAreCwgeSA9ICt5LCByID0gK3IsIGNjdyA9ICEhY2N3O1xuICAgIHZhciBkeCA9IHIgKiBNYXRoLmNvcyhhMCksXG4gICAgICAgIGR5ID0gciAqIE1hdGguc2luKGEwKSxcbiAgICAgICAgeDAgPSB4ICsgZHgsXG4gICAgICAgIHkwID0geSArIGR5LFxuICAgICAgICBjdyA9IDEgXiBjY3csXG4gICAgICAgIGRhID0gY2N3ID8gYTAgLSBhMSA6IGExIC0gYTA7XG5cbiAgICAvLyBJcyB0aGUgcmFkaXVzIG5lZ2F0aXZlPyBFcnJvci5cbiAgICBpZiAociA8IDApIHRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1czogXCIgKyByKTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDAseTApLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fICs9IFwiTVwiICsgeDAgKyBcIixcIiArIHkwO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDAseTApIG5vdCBjb2luY2lkZW50IHdpdGggdGhlIHByZXZpb3VzIHBvaW50PyBMaW5lIHRvICh4MCx5MCkuXG4gICAgZWxzZSBpZiAoTWF0aC5hYnModGhpcy5feDEgLSB4MCkgPiBlcHNpbG9uIHx8IE1hdGguYWJzKHRoaXMuX3kxIC0geTApID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fICs9IFwiTFwiICsgeDAgKyBcIixcIiArIHkwO1xuICAgIH1cblxuICAgIC8vIElzIHRoaXMgYXJjIGVtcHR5PyBXZeKAmXJlIGRvbmUuXG4gICAgaWYgKCFyKSByZXR1cm47XG5cbiAgICAvLyBEb2VzIHRoZSBhbmdsZSBnbyB0aGUgd3Jvbmcgd2F5PyBGbGlwIHRoZSBkaXJlY3Rpb24uXG4gICAgaWYgKGRhIDwgMCkgZGEgPSBkYSAlIHRhdSArIHRhdTtcblxuICAgIC8vIElzIHRoaXMgYSBjb21wbGV0ZSBjaXJjbGU/IERyYXcgdHdvIGFyY3MgdG8gY29tcGxldGUgdGhlIGNpcmNsZS5cbiAgICBpZiAoZGEgPiB0YXVFcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwxLFwiICsgY3cgKyBcIixcIiArICh4IC0gZHgpICsgXCIsXCIgKyAoeSAtIGR5KSArIFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsMSxcIiArIGN3ICsgXCIsXCIgKyAodGhpcy5feDEgPSB4MCkgKyBcIixcIiArICh0aGlzLl95MSA9IHkwKTtcbiAgICB9XG5cbiAgICAvLyBJcyB0aGlzIGFyYyBub24tZW1wdHk/IERyYXcgYW4gYXJjIVxuICAgIGVsc2UgaWYgKGRhID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fICs9IFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsXCIgKyAoKyhkYSA+PSBwaSkpICsgXCIsXCIgKyBjdyArIFwiLFwiICsgKHRoaXMuX3gxID0geCArIHIgKiBNYXRoLmNvcyhhMSkpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5ICsgciAqIE1hdGguc2luKGExKSk7XG4gICAgfVxuICB9LFxuICByZWN0OiBmdW5jdGlvbih4LCB5LCB3LCBoKSB7XG4gICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gwID0gdGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MCA9IHRoaXMuX3kxID0gK3kpICsgXCJoXCIgKyAoK3cpICsgXCJ2XCIgKyAoK2gpICsgXCJoXCIgKyAoLXcpICsgXCJaXCI7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBwYXRoO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gTWF0aC5hYnMoeCA9IE1hdGgucm91bmQoeCkpID49IDFlMjFcbiAgICAgID8geC50b0xvY2FsZVN0cmluZyhcImVuXCIpLnJlcGxhY2UoLywvZywgXCJcIilcbiAgICAgIDogeC50b1N0cmluZygxMCk7XG59XG5cbi8vIENvbXB1dGVzIHRoZSBkZWNpbWFsIGNvZWZmaWNpZW50IGFuZCBleHBvbmVudCBvZiB0aGUgc3BlY2lmaWVkIG51bWJlciB4IHdpdGhcbi8vIHNpZ25pZmljYW50IGRpZ2l0cyBwLCB3aGVyZSB4IGlzIHBvc2l0aXZlIGFuZCBwIGlzIGluIFsxLCAyMV0gb3IgdW5kZWZpbmVkLlxuLy8gRm9yIGV4YW1wbGUsIGZvcm1hdERlY2ltYWxQYXJ0cygxLjIzKSByZXR1cm5zIFtcIjEyM1wiLCAwXS5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREZWNpbWFsUGFydHMoeCwgcCkge1xuICBpZiAoKGkgPSAoeCA9IHAgPyB4LnRvRXhwb25lbnRpYWwocCAtIDEpIDogeC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoXCJlXCIpKSA8IDApIHJldHVybiBudWxsOyAvLyBOYU4sIMKxSW5maW5pdHlcbiAgdmFyIGksIGNvZWZmaWNpZW50ID0geC5zbGljZSgwLCBpKTtcblxuICAvLyBUaGUgc3RyaW5nIHJldHVybmVkIGJ5IHRvRXhwb25lbnRpYWwgZWl0aGVyIGhhcyB0aGUgZm9ybSBcXGRcXC5cXGQrZVstK11cXGQrXG4gIC8vIChlLmcuLCAxLjJlKzMpIG9yIHRoZSBmb3JtIFxcZGVbLStdXFxkKyAoZS5nLiwgMWUrMykuXG4gIHJldHVybiBbXG4gICAgY29lZmZpY2llbnQubGVuZ3RoID4gMSA/IGNvZWZmaWNpZW50WzBdICsgY29lZmZpY2llbnQuc2xpY2UoMikgOiBjb2VmZmljaWVudCxcbiAgICAreC5zbGljZShpICsgMSlcbiAgXTtcbn1cbiIsImltcG9ydCB7Zm9ybWF0RGVjaW1hbFBhcnRzfSBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHggPSBmb3JtYXREZWNpbWFsUGFydHMoTWF0aC5hYnMoeCkpLCB4ID8geFsxXSA6IE5hTjtcbn1cbiIsIi8vIFtbZmlsbF1hbGlnbl1bc2lnbl1bc3ltYm9sXVswXVt3aWR0aF1bLF1bLnByZWNpc2lvbl1bfl1bdHlwZV1cbnZhciByZSA9IC9eKD86KC4pPyhbPD49Xl0pKT8oWytcXC0oIF0pPyhbJCNdKT8oMCk/KFxcZCspPygsKT8oXFwuXFxkKyk/KH4pPyhbYS16JV0pPyQvaTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcikge1xuICBpZiAoIShtYXRjaCA9IHJlLmV4ZWMoc3BlY2lmaWVyKSkpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZm9ybWF0OiBcIiArIHNwZWNpZmllcik7XG4gIHZhciBtYXRjaDtcbiAgcmV0dXJuIG5ldyBGb3JtYXRTcGVjaWZpZXIoe1xuICAgIGZpbGw6IG1hdGNoWzFdLFxuICAgIGFsaWduOiBtYXRjaFsyXSxcbiAgICBzaWduOiBtYXRjaFszXSxcbiAgICBzeW1ib2w6IG1hdGNoWzRdLFxuICAgIHplcm86IG1hdGNoWzVdLFxuICAgIHdpZHRoOiBtYXRjaFs2XSxcbiAgICBjb21tYTogbWF0Y2hbN10sXG4gICAgcHJlY2lzaW9uOiBtYXRjaFs4XSAmJiBtYXRjaFs4XS5zbGljZSgxKSxcbiAgICB0cmltOiBtYXRjaFs5XSxcbiAgICB0eXBlOiBtYXRjaFsxMF1cbiAgfSk7XG59XG5cbmZvcm1hdFNwZWNpZmllci5wcm90b3R5cGUgPSBGb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlOyAvLyBpbnN0YW5jZW9mXG5cbmV4cG9ydCBmdW5jdGlvbiBGb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSB7XG4gIHRoaXMuZmlsbCA9IHNwZWNpZmllci5maWxsID09PSB1bmRlZmluZWQgPyBcIiBcIiA6IHNwZWNpZmllci5maWxsICsgXCJcIjtcbiAgdGhpcy5hbGlnbiA9IHNwZWNpZmllci5hbGlnbiA9PT0gdW5kZWZpbmVkID8gXCI+XCIgOiBzcGVjaWZpZXIuYWxpZ24gKyBcIlwiO1xuICB0aGlzLnNpZ24gPSBzcGVjaWZpZXIuc2lnbiA9PT0gdW5kZWZpbmVkID8gXCItXCIgOiBzcGVjaWZpZXIuc2lnbiArIFwiXCI7XG4gIHRoaXMuc3ltYm9sID0gc3BlY2lmaWVyLnN5bWJvbCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHNwZWNpZmllci5zeW1ib2wgKyBcIlwiO1xuICB0aGlzLnplcm8gPSAhIXNwZWNpZmllci56ZXJvO1xuICB0aGlzLndpZHRoID0gc3BlY2lmaWVyLndpZHRoID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiArc3BlY2lmaWVyLndpZHRoO1xuICB0aGlzLmNvbW1hID0gISFzcGVjaWZpZXIuY29tbWE7XG4gIHRoaXMucHJlY2lzaW9uID0gc3BlY2lmaWVyLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogK3NwZWNpZmllci5wcmVjaXNpb247XG4gIHRoaXMudHJpbSA9ICEhc3BlY2lmaWVyLnRyaW07XG4gIHRoaXMudHlwZSA9IHNwZWNpZmllci50eXBlID09PSB1bmRlZmluZWQgPyBcIlwiIDogc3BlY2lmaWVyLnR5cGUgKyBcIlwiO1xufVxuXG5Gb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmZpbGxcbiAgICAgICsgdGhpcy5hbGlnblxuICAgICAgKyB0aGlzLnNpZ25cbiAgICAgICsgdGhpcy5zeW1ib2xcbiAgICAgICsgKHRoaXMuemVybyA/IFwiMFwiIDogXCJcIilcbiAgICAgICsgKHRoaXMud2lkdGggPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBNYXRoLm1heCgxLCB0aGlzLndpZHRoIHwgMCkpXG4gICAgICArICh0aGlzLmNvbW1hID8gXCIsXCIgOiBcIlwiKVxuICAgICAgKyAodGhpcy5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBcIi5cIiArIE1hdGgubWF4KDAsIHRoaXMucHJlY2lzaW9uIHwgMCkpXG4gICAgICArICh0aGlzLnRyaW0gPyBcIn5cIiA6IFwiXCIpXG4gICAgICArIHRoaXMudHlwZTtcbn07XG4iLCJpbXBvcnQge2Zvcm1hdERlY2ltYWxQYXJ0c30gZnJvbSBcIi4vZm9ybWF0RGVjaW1hbC5qc1wiO1xuXG5leHBvcnQgdmFyIHByZWZpeEV4cG9uZW50O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCBwKSB7XG4gIHZhciBkID0gZm9ybWF0RGVjaW1hbFBhcnRzKHgsIHApO1xuICBpZiAoIWQpIHJldHVybiB4ICsgXCJcIjtcbiAgdmFyIGNvZWZmaWNpZW50ID0gZFswXSxcbiAgICAgIGV4cG9uZW50ID0gZFsxXSxcbiAgICAgIGkgPSBleHBvbmVudCAtIChwcmVmaXhFeHBvbmVudCA9IE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50IC8gMykpKSAqIDMpICsgMSxcbiAgICAgIG4gPSBjb2VmZmljaWVudC5sZW5ndGg7XG4gIHJldHVybiBpID09PSBuID8gY29lZmZpY2llbnRcbiAgICAgIDogaSA+IG4gPyBjb2VmZmljaWVudCArIG5ldyBBcnJheShpIC0gbiArIDEpLmpvaW4oXCIwXCIpXG4gICAgICA6IGkgPiAwID8gY29lZmZpY2llbnQuc2xpY2UoMCwgaSkgKyBcIi5cIiArIGNvZWZmaWNpZW50LnNsaWNlKGkpXG4gICAgICA6IFwiMC5cIiArIG5ldyBBcnJheSgxIC0gaSkuam9pbihcIjBcIikgKyBmb3JtYXREZWNpbWFsUGFydHMoeCwgTWF0aC5tYXgoMCwgcCArIGkgLSAxKSlbMF07IC8vIGxlc3MgdGhhbiAxeSFcbn1cbiIsImltcG9ydCB7Zm9ybWF0RGVjaW1hbFBhcnRzfSBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHApIHtcbiAgdmFyIGQgPSBmb3JtYXREZWNpbWFsUGFydHMoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdO1xuICByZXR1cm4gZXhwb25lbnQgPCAwID8gXCIwLlwiICsgbmV3IEFycmF5KC1leHBvbmVudCkuam9pbihcIjBcIikgKyBjb2VmZmljaWVudFxuICAgICAgOiBjb2VmZmljaWVudC5sZW5ndGggPiBleHBvbmVudCArIDEgPyBjb2VmZmljaWVudC5zbGljZSgwLCBleHBvbmVudCArIDEpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShleHBvbmVudCArIDEpXG4gICAgICA6IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGV4cG9uZW50IC0gY29lZmZpY2llbnQubGVuZ3RoICsgMikuam9pbihcIjBcIik7XG59XG4iLCJpbXBvcnQgZm9ybWF0RGVjaW1hbCBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5pbXBvcnQgZm9ybWF0UHJlZml4QXV0byBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvLmpzXCI7XG5pbXBvcnQgZm9ybWF0Um91bmRlZCBmcm9tIFwiLi9mb3JtYXRSb3VuZGVkLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXCIlXCI6ICh4LCBwKSA9PiAoeCAqIDEwMCkudG9GaXhlZChwKSxcbiAgXCJiXCI6ICh4KSA9PiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDIpLFxuICBcImNcIjogKHgpID0+IHggKyBcIlwiLFxuICBcImRcIjogZm9ybWF0RGVjaW1hbCxcbiAgXCJlXCI6ICh4LCBwKSA9PiB4LnRvRXhwb25lbnRpYWwocCksXG4gIFwiZlwiOiAoeCwgcCkgPT4geC50b0ZpeGVkKHApLFxuICBcImdcIjogKHgsIHApID0+IHgudG9QcmVjaXNpb24ocCksXG4gIFwib1wiOiAoeCkgPT4gTWF0aC5yb3VuZCh4KS50b1N0cmluZyg4KSxcbiAgXCJwXCI6ICh4LCBwKSA9PiBmb3JtYXRSb3VuZGVkKHggKiAxMDAsIHApLFxuICBcInJcIjogZm9ybWF0Um91bmRlZCxcbiAgXCJzXCI6IGZvcm1hdFByZWZpeEF1dG8sXG4gIFwiWFwiOiAoeCkgPT4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxcbiAgXCJ4XCI6ICh4KSA9PiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDE2KVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHg7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcbmltcG9ydCBmb3JtYXRHcm91cCBmcm9tIFwiLi9mb3JtYXRHcm91cC5qc1wiO1xuaW1wb3J0IGZvcm1hdE51bWVyYWxzIGZyb20gXCIuL2Zvcm1hdE51bWVyYWxzLmpzXCI7XG5pbXBvcnQgZm9ybWF0U3BlY2lmaWVyIGZyb20gXCIuL2Zvcm1hdFNwZWNpZmllci5qc1wiO1xuaW1wb3J0IGZvcm1hdFRyaW0gZnJvbSBcIi4vZm9ybWF0VHJpbS5qc1wiO1xuaW1wb3J0IGZvcm1hdFR5cGVzIGZyb20gXCIuL2Zvcm1hdFR5cGVzLmpzXCI7XG5pbXBvcnQge3ByZWZpeEV4cG9uZW50fSBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvLmpzXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHkuanNcIjtcblxudmFyIG1hcCA9IEFycmF5LnByb3RvdHlwZS5tYXAsXG4gICAgcHJlZml4ZXMgPSBbXCJ5XCIsXCJ6XCIsXCJhXCIsXCJmXCIsXCJwXCIsXCJuXCIsXCLCtVwiLFwibVwiLFwiXCIsXCJrXCIsXCJNXCIsXCJHXCIsXCJUXCIsXCJQXCIsXCJFXCIsXCJaXCIsXCJZXCJdO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihsb2NhbGUpIHtcbiAgdmFyIGdyb3VwID0gbG9jYWxlLmdyb3VwaW5nID09PSB1bmRlZmluZWQgfHwgbG9jYWxlLnRob3VzYW5kcyA9PT0gdW5kZWZpbmVkID8gaWRlbnRpdHkgOiBmb3JtYXRHcm91cChtYXAuY2FsbChsb2NhbGUuZ3JvdXBpbmcsIE51bWJlciksIGxvY2FsZS50aG91c2FuZHMgKyBcIlwiKSxcbiAgICAgIGN1cnJlbmN5UHJlZml4ID0gbG9jYWxlLmN1cnJlbmN5ID09PSB1bmRlZmluZWQgPyBcIlwiIDogbG9jYWxlLmN1cnJlbmN5WzBdICsgXCJcIixcbiAgICAgIGN1cnJlbmN5U3VmZml4ID0gbG9jYWxlLmN1cnJlbmN5ID09PSB1bmRlZmluZWQgPyBcIlwiIDogbG9jYWxlLmN1cnJlbmN5WzFdICsgXCJcIixcbiAgICAgIGRlY2ltYWwgPSBsb2NhbGUuZGVjaW1hbCA9PT0gdW5kZWZpbmVkID8gXCIuXCIgOiBsb2NhbGUuZGVjaW1hbCArIFwiXCIsXG4gICAgICBudW1lcmFscyA9IGxvY2FsZS5udW1lcmFscyA9PT0gdW5kZWZpbmVkID8gaWRlbnRpdHkgOiBmb3JtYXROdW1lcmFscyhtYXAuY2FsbChsb2NhbGUubnVtZXJhbHMsIFN0cmluZykpLFxuICAgICAgcGVyY2VudCA9IGxvY2FsZS5wZXJjZW50ID09PSB1bmRlZmluZWQgPyBcIiVcIiA6IGxvY2FsZS5wZXJjZW50ICsgXCJcIixcbiAgICAgIG1pbnVzID0gbG9jYWxlLm1pbnVzID09PSB1bmRlZmluZWQgPyBcIuKIklwiIDogbG9jYWxlLm1pbnVzICsgXCJcIixcbiAgICAgIG5hbiA9IGxvY2FsZS5uYW4gPT09IHVuZGVmaW5lZCA/IFwiTmFOXCIgOiBsb2NhbGUubmFuICsgXCJcIjtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyKSB7XG4gICAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcik7XG5cbiAgICB2YXIgZmlsbCA9IHNwZWNpZmllci5maWxsLFxuICAgICAgICBhbGlnbiA9IHNwZWNpZmllci5hbGlnbixcbiAgICAgICAgc2lnbiA9IHNwZWNpZmllci5zaWduLFxuICAgICAgICBzeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sLFxuICAgICAgICB6ZXJvID0gc3BlY2lmaWVyLnplcm8sXG4gICAgICAgIHdpZHRoID0gc3BlY2lmaWVyLndpZHRoLFxuICAgICAgICBjb21tYSA9IHNwZWNpZmllci5jb21tYSxcbiAgICAgICAgcHJlY2lzaW9uID0gc3BlY2lmaWVyLnByZWNpc2lvbixcbiAgICAgICAgdHJpbSA9IHNwZWNpZmllci50cmltLFxuICAgICAgICB0eXBlID0gc3BlY2lmaWVyLnR5cGU7XG5cbiAgICAvLyBUaGUgXCJuXCIgdHlwZSBpcyBhbiBhbGlhcyBmb3IgXCIsZ1wiLlxuICAgIGlmICh0eXBlID09PSBcIm5cIikgY29tbWEgPSB0cnVlLCB0eXBlID0gXCJnXCI7XG5cbiAgICAvLyBUaGUgXCJcIiB0eXBlLCBhbmQgYW55IGludmFsaWQgdHlwZSwgaXMgYW4gYWxpYXMgZm9yIFwiLjEyfmdcIi5cbiAgICBlbHNlIGlmICghZm9ybWF0VHlwZXNbdHlwZV0pIHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkICYmIChwcmVjaXNpb24gPSAxMiksIHRyaW0gPSB0cnVlLCB0eXBlID0gXCJnXCI7XG5cbiAgICAvLyBJZiB6ZXJvIGZpbGwgaXMgc3BlY2lmaWVkLCBwYWRkaW5nIGdvZXMgYWZ0ZXIgc2lnbiBhbmQgYmVmb3JlIGRpZ2l0cy5cbiAgICBpZiAoemVybyB8fCAoZmlsbCA9PT0gXCIwXCIgJiYgYWxpZ24gPT09IFwiPVwiKSkgemVybyA9IHRydWUsIGZpbGwgPSBcIjBcIiwgYWxpZ24gPSBcIj1cIjtcblxuICAgIC8vIENvbXB1dGUgdGhlIHByZWZpeCBhbmQgc3VmZml4LlxuICAgIC8vIEZvciBTSS1wcmVmaXgsIHRoZSBzdWZmaXggaXMgbGF6aWx5IGNvbXB1dGVkLlxuICAgIHZhciBwcmVmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lQcmVmaXggOiBzeW1ib2wgPT09IFwiI1wiICYmIC9bYm94WF0vLnRlc3QodHlwZSkgPyBcIjBcIiArIHR5cGUudG9Mb3dlckNhc2UoKSA6IFwiXCIsXG4gICAgICAgIHN1ZmZpeCA9IHN5bWJvbCA9PT0gXCIkXCIgPyBjdXJyZW5jeVN1ZmZpeCA6IC9bJXBdLy50ZXN0KHR5cGUpID8gcGVyY2VudCA6IFwiXCI7XG5cbiAgICAvLyBXaGF0IGZvcm1hdCBmdW5jdGlvbiBzaG91bGQgd2UgdXNlP1xuICAgIC8vIElzIHRoaXMgYW4gaW50ZWdlciB0eXBlP1xuICAgIC8vIENhbiB0aGlzIHR5cGUgZ2VuZXJhdGUgZXhwb25lbnRpYWwgbm90YXRpb24/XG4gICAgdmFyIGZvcm1hdFR5cGUgPSBmb3JtYXRUeXBlc1t0eXBlXSxcbiAgICAgICAgbWF5YmVTdWZmaXggPSAvW2RlZmdwcnMlXS8udGVzdCh0eXBlKTtcblxuICAgIC8vIFNldCB0aGUgZGVmYXVsdCBwcmVjaXNpb24gaWYgbm90IHNwZWNpZmllZCxcbiAgICAvLyBvciBjbGFtcCB0aGUgc3BlY2lmaWVkIHByZWNpc2lvbiB0byB0aGUgc3VwcG9ydGVkIHJhbmdlLlxuICAgIC8vIEZvciBzaWduaWZpY2FudCBwcmVjaXNpb24sIGl0IG11c3QgYmUgaW4gWzEsIDIxXS5cbiAgICAvLyBGb3IgZml4ZWQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFswLCAyMF0uXG4gICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyA2XG4gICAgICAgIDogL1tncHJzXS8udGVzdCh0eXBlKSA/IE1hdGgubWF4KDEsIE1hdGgubWluKDIxLCBwcmVjaXNpb24pKVxuICAgICAgICA6IE1hdGgubWF4KDAsIE1hdGgubWluKDIwLCBwcmVjaXNpb24pKTtcblxuICAgIGZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSkge1xuICAgICAgdmFyIHZhbHVlUHJlZml4ID0gcHJlZml4LFxuICAgICAgICAgIHZhbHVlU3VmZml4ID0gc3VmZml4LFxuICAgICAgICAgIGksIG4sIGM7XG5cbiAgICAgIGlmICh0eXBlID09PSBcImNcIikge1xuICAgICAgICB2YWx1ZVN1ZmZpeCA9IGZvcm1hdFR5cGUodmFsdWUpICsgdmFsdWVTdWZmaXg7XG4gICAgICAgIHZhbHVlID0gXCJcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gK3ZhbHVlO1xuXG4gICAgICAgIC8vIERldGVybWluZSB0aGUgc2lnbi4gLTAgaXMgbm90IGxlc3MgdGhhbiAwLCBidXQgMSAvIC0wIGlzIVxuICAgICAgICB2YXIgdmFsdWVOZWdhdGl2ZSA9IHZhbHVlIDwgMCB8fCAxIC8gdmFsdWUgPCAwO1xuXG4gICAgICAgIC8vIFBlcmZvcm0gdGhlIGluaXRpYWwgZm9ybWF0dGluZy5cbiAgICAgICAgdmFsdWUgPSBpc05hTih2YWx1ZSkgPyBuYW4gOiBmb3JtYXRUeXBlKE1hdGguYWJzKHZhbHVlKSwgcHJlY2lzaW9uKTtcblxuICAgICAgICAvLyBUcmltIGluc2lnbmlmaWNhbnQgemVyb3MuXG4gICAgICAgIGlmICh0cmltKSB2YWx1ZSA9IGZvcm1hdFRyaW0odmFsdWUpO1xuXG4gICAgICAgIC8vIElmIGEgbmVnYXRpdmUgdmFsdWUgcm91bmRzIHRvIHplcm8gYWZ0ZXIgZm9ybWF0dGluZywgYW5kIG5vIGV4cGxpY2l0IHBvc2l0aXZlIHNpZ24gaXMgcmVxdWVzdGVkLCBoaWRlIHRoZSBzaWduLlxuICAgICAgICBpZiAodmFsdWVOZWdhdGl2ZSAmJiArdmFsdWUgPT09IDAgJiYgc2lnbiAhPT0gXCIrXCIpIHZhbHVlTmVnYXRpdmUgPSBmYWxzZTtcblxuICAgICAgICAvLyBDb21wdXRlIHRoZSBwcmVmaXggYW5kIHN1ZmZpeC5cbiAgICAgICAgdmFsdWVQcmVmaXggPSAodmFsdWVOZWdhdGl2ZSA/IChzaWduID09PSBcIihcIiA/IHNpZ24gOiBtaW51cykgOiBzaWduID09PSBcIi1cIiB8fCBzaWduID09PSBcIihcIiA/IFwiXCIgOiBzaWduKSArIHZhbHVlUHJlZml4O1xuICAgICAgICB2YWx1ZVN1ZmZpeCA9ICh0eXBlID09PSBcInNcIiA/IHByZWZpeGVzWzggKyBwcmVmaXhFeHBvbmVudCAvIDNdIDogXCJcIikgKyB2YWx1ZVN1ZmZpeCArICh2YWx1ZU5lZ2F0aXZlICYmIHNpZ24gPT09IFwiKFwiID8gXCIpXCIgOiBcIlwiKTtcblxuICAgICAgICAvLyBCcmVhayB0aGUgZm9ybWF0dGVkIHZhbHVlIGludG8gdGhlIGludGVnZXIg4oCcdmFsdWXigJ0gcGFydCB0aGF0IGNhbiBiZVxuICAgICAgICAvLyBncm91cGVkLCBhbmQgZnJhY3Rpb25hbCBvciBleHBvbmVudGlhbCDigJxzdWZmaXjigJ0gcGFydCB0aGF0IGlzIG5vdC5cbiAgICAgICAgaWYgKG1heWJlU3VmZml4KSB7XG4gICAgICAgICAgaSA9IC0xLCBuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgICAgICBpZiAoYyA9IHZhbHVlLmNoYXJDb2RlQXQoaSksIDQ4ID4gYyB8fCBjID4gNTcpIHtcbiAgICAgICAgICAgICAgdmFsdWVTdWZmaXggPSAoYyA9PT0gNDYgPyBkZWNpbWFsICsgdmFsdWUuc2xpY2UoaSArIDEpIDogdmFsdWUuc2xpY2UoaSkpICsgdmFsdWVTdWZmaXg7XG4gICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgZmlsbCBjaGFyYWN0ZXIgaXMgbm90IFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGJlZm9yZSBwYWRkaW5nLlxuICAgICAgaWYgKGNvbW1hICYmICF6ZXJvKSB2YWx1ZSA9IGdyb3VwKHZhbHVlLCBJbmZpbml0eSk7XG5cbiAgICAgIC8vIENvbXB1dGUgdGhlIHBhZGRpbmcuXG4gICAgICB2YXIgbGVuZ3RoID0gdmFsdWVQcmVmaXgubGVuZ3RoICsgdmFsdWUubGVuZ3RoICsgdmFsdWVTdWZmaXgubGVuZ3RoLFxuICAgICAgICAgIHBhZGRpbmcgPSBsZW5ndGggPCB3aWR0aCA/IG5ldyBBcnJheSh3aWR0aCAtIGxlbmd0aCArIDEpLmpvaW4oZmlsbCkgOiBcIlwiO1xuXG4gICAgICAvLyBJZiB0aGUgZmlsbCBjaGFyYWN0ZXIgaXMgXCIwXCIsIGdyb3VwaW5nIGlzIGFwcGxpZWQgYWZ0ZXIgcGFkZGluZy5cbiAgICAgIGlmIChjb21tYSAmJiB6ZXJvKSB2YWx1ZSA9IGdyb3VwKHBhZGRpbmcgKyB2YWx1ZSwgcGFkZGluZy5sZW5ndGggPyB3aWR0aCAtIHZhbHVlU3VmZml4Lmxlbmd0aCA6IEluZmluaXR5KSwgcGFkZGluZyA9IFwiXCI7XG5cbiAgICAgIC8vIFJlY29uc3RydWN0IHRoZSBmaW5hbCBvdXRwdXQgYmFzZWQgb24gdGhlIGRlc2lyZWQgYWxpZ25tZW50LlxuICAgICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgICBjYXNlIFwiPFwiOiB2YWx1ZSA9IHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeCArIHBhZGRpbmc7IGJyZWFrO1xuICAgICAgICBjYXNlIFwiPVwiOiB2YWx1ZSA9IHZhbHVlUHJlZml4ICsgcGFkZGluZyArIHZhbHVlICsgdmFsdWVTdWZmaXg7IGJyZWFrO1xuICAgICAgICBjYXNlIFwiXlwiOiB2YWx1ZSA9IHBhZGRpbmcuc2xpY2UoMCwgbGVuZ3RoID0gcGFkZGluZy5sZW5ndGggPj4gMSkgKyB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXggKyBwYWRkaW5nLnNsaWNlKGxlbmd0aCk7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiB2YWx1ZSA9IHBhZGRpbmcgKyB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXg7IGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVtZXJhbHModmFsdWUpO1xuICAgIH1cblxuICAgIGZvcm1hdC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHNwZWNpZmllciArIFwiXCI7XG4gICAgfTtcblxuICAgIHJldHVybiBmb3JtYXQ7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRQcmVmaXgoc3BlY2lmaWVyLCB2YWx1ZSkge1xuICAgIHZhciBmID0gbmV3Rm9ybWF0KChzcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSwgc3BlY2lmaWVyLnR5cGUgPSBcImZcIiwgc3BlY2lmaWVyKSksXG4gICAgICAgIGUgPSBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCh2YWx1ZSkgLyAzKSkpICogMyxcbiAgICAgICAgayA9IE1hdGgucG93KDEwLCAtZSksXG4gICAgICAgIHByZWZpeCA9IHByZWZpeGVzWzggKyBlIC8gM107XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZihrICogdmFsdWUpICsgcHJlZml4O1xuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZvcm1hdDogbmV3Rm9ybWF0LFxuICAgIGZvcm1hdFByZWZpeDogZm9ybWF0UHJlZml4XG4gIH07XG59XG4iLCJpbXBvcnQgZm9ybWF0TG9jYWxlIGZyb20gXCIuL2xvY2FsZS5qc1wiO1xuXG52YXIgbG9jYWxlO1xuZXhwb3J0IHZhciBmb3JtYXQ7XG5leHBvcnQgdmFyIGZvcm1hdFByZWZpeDtcblxuZGVmYXVsdExvY2FsZSh7XG4gIHRob3VzYW5kczogXCIsXCIsXG4gIGdyb3VwaW5nOiBbM10sXG4gIGN1cnJlbmN5OiBbXCIkXCIsIFwiXCJdXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVmYXVsdExvY2FsZShkZWZpbml0aW9uKSB7XG4gIGxvY2FsZSA9IGZvcm1hdExvY2FsZShkZWZpbml0aW9uKTtcbiAgZm9ybWF0ID0gbG9jYWxlLmZvcm1hdDtcbiAgZm9ybWF0UHJlZml4ID0gbG9jYWxlLmZvcm1hdFByZWZpeDtcbiAgcmV0dXJuIGxvY2FsZTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGdyb3VwaW5nLCB0aG91c2FuZHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCB3aWR0aCkge1xuICAgIHZhciBpID0gdmFsdWUubGVuZ3RoLFxuICAgICAgICB0ID0gW10sXG4gICAgICAgIGogPSAwLFxuICAgICAgICBnID0gZ3JvdXBpbmdbMF0sXG4gICAgICAgIGxlbmd0aCA9IDA7XG5cbiAgICB3aGlsZSAoaSA+IDAgJiYgZyA+IDApIHtcbiAgICAgIGlmIChsZW5ndGggKyBnICsgMSA+IHdpZHRoKSBnID0gTWF0aC5tYXgoMSwgd2lkdGggLSBsZW5ndGgpO1xuICAgICAgdC5wdXNoKHZhbHVlLnN1YnN0cmluZyhpIC09IGcsIGkgKyBnKSk7XG4gICAgICBpZiAoKGxlbmd0aCArPSBnICsgMSkgPiB3aWR0aCkgYnJlYWs7XG4gICAgICBnID0gZ3JvdXBpbmdbaiA9IChqICsgMSkgJSBncm91cGluZy5sZW5ndGhdO1xuICAgIH1cblxuICAgIHJldHVybiB0LnJldmVyc2UoKS5qb2luKHRob3VzYW5kcyk7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihudW1lcmFscykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvWzAtOV0vZywgZnVuY3Rpb24oaSkge1xuICAgICAgcmV0dXJuIG51bWVyYWxzWytpXTtcbiAgICB9KTtcbiAgfTtcbn1cbiIsIi8vIFRyaW1zIGluc2lnbmlmaWNhbnQgemVyb3MsIGUuZy4sIHJlcGxhY2VzIDEuMjAwMGsgd2l0aCAxLjJrLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocykge1xuICBvdXQ6IGZvciAodmFyIG4gPSBzLmxlbmd0aCwgaSA9IDEsIGkwID0gLTEsIGkxOyBpIDwgbjsgKytpKSB7XG4gICAgc3dpdGNoIChzW2ldKSB7XG4gICAgICBjYXNlIFwiLlwiOiBpMCA9IGkxID0gaTsgYnJlYWs7XG4gICAgICBjYXNlIFwiMFwiOiBpZiAoaTAgPT09IDApIGkwID0gaTsgaTEgPSBpOyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IGlmICghK3NbaV0pIGJyZWFrIG91dDsgaWYgKGkwID4gMCkgaTAgPSAwOyBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGkwID4gMCA/IHMuc2xpY2UoMCwgaTApICsgcy5zbGljZShpMSArIDEpIDogcztcbn1cbiIsImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuXG5mdW5jdGlvbiBsaW5lYXIoYSwgZCkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICsgdCAqIGQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGV4cG9uZW50aWFsKGEsIGIsIHkpIHtcbiAgcmV0dXJuIGEgPSBNYXRoLnBvdyhhLCB5KSwgYiA9IE1hdGgucG93KGIsIHkpIC0gYSwgeSA9IDEgLyB5LCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucG93KGEgKyB0ICogYiwgeSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBodWUoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkID4gMTgwIHx8IGQgPCAtMTgwID8gZCAtIDM2MCAqIE1hdGgucm91bmQoZCAvIDM2MCkgOiBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2FtbWEoeSkge1xuICByZXR1cm4gKHkgPSAreSkgPT09IDEgPyBub2dhbW1hIDogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBiIC0gYSA/IGV4cG9uZW50aWFsKGEsIGIsIHkpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vZ2FtbWEoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgeCA9PiAoKSA9PiB4O1xuIiwiaW1wb3J0IHtsYWIgYXMgY29sb3JMYWJ9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGNvbG9yIGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxhYihzdGFydCwgZW5kKSB7XG4gIHZhciBsID0gY29sb3IoKHN0YXJ0ID0gY29sb3JMYWIoc3RhcnQpKS5sLCAoZW5kID0gY29sb3JMYWIoZW5kKSkubCksXG4gICAgICBhID0gY29sb3Ioc3RhcnQuYSwgZW5kLmEpLFxuICAgICAgYiA9IGNvbG9yKHN0YXJ0LmIsIGVuZC5iKSxcbiAgICAgIG9wYWNpdHkgPSBjb2xvcihzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgc3RhcnQubCA9IGwodCk7XG4gICAgc3RhcnQuYSA9IGEodCk7XG4gICAgc3RhcnQuYiA9IGIodCk7XG4gICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgfTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBpbml0UmFuZ2UoZG9tYWluLCByYW5nZSkge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IGJyZWFrO1xuICAgIGNhc2UgMTogdGhpcy5yYW5nZShkb21haW4pOyBicmVhaztcbiAgICBkZWZhdWx0OiB0aGlzLnJhbmdlKHJhbmdlKS5kb21haW4oZG9tYWluKTsgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0SW50ZXJwb2xhdG9yKGRvbWFpbiwgaW50ZXJwb2xhdG9yKSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogYnJlYWs7XG4gICAgY2FzZSAxOiB7XG4gICAgICBpZiAodHlwZW9mIGRvbWFpbiA9PT0gXCJmdW5jdGlvblwiKSB0aGlzLmludGVycG9sYXRvcihkb21haW4pO1xuICAgICAgZWxzZSB0aGlzLnJhbmdlKGRvbWFpbik7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgdGhpcy5kb21haW4oZG9tYWluKTtcbiAgICAgIGlmICh0eXBlb2YgaW50ZXJwb2xhdG9yID09PSBcImZ1bmN0aW9uXCIpIHRoaXMuaW50ZXJwb2xhdG9yKGludGVycG9sYXRvcik7XG4gICAgICBlbHNlIHRoaXMucmFuZ2UoaW50ZXJwb2xhdG9yKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbiIsImltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5cbmV4cG9ydCBjb25zdCBpbXBsaWNpdCA9IFN5bWJvbChcImltcGxpY2l0XCIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcmRpbmFsKCkge1xuICB2YXIgaW5kZXggPSBuZXcgTWFwKCksXG4gICAgICBkb21haW4gPSBbXSxcbiAgICAgIHJhbmdlID0gW10sXG4gICAgICB1bmtub3duID0gaW1wbGljaXQ7XG5cbiAgZnVuY3Rpb24gc2NhbGUoZCkge1xuICAgIHZhciBrZXkgPSBkICsgXCJcIiwgaSA9IGluZGV4LmdldChrZXkpO1xuICAgIGlmICghaSkge1xuICAgICAgaWYgKHVua25vd24gIT09IGltcGxpY2l0KSByZXR1cm4gdW5rbm93bjtcbiAgICAgIGluZGV4LnNldChrZXksIGkgPSBkb21haW4ucHVzaChkKSk7XG4gICAgfVxuICAgIHJldHVybiByYW5nZVsoaSAtIDEpICUgcmFuZ2UubGVuZ3RoXTtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBkb21haW4uc2xpY2UoKTtcbiAgICBkb21haW4gPSBbXSwgaW5kZXggPSBuZXcgTWFwKCk7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBfKSB7XG4gICAgICBjb25zdCBrZXkgPSB2YWx1ZSArIFwiXCI7XG4gICAgICBpZiAoaW5kZXguaGFzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgaW5kZXguc2V0KGtleSwgZG9tYWluLnB1c2godmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gQXJyYXkuZnJvbShfKSwgc2NhbGUpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gb3JkaW5hbChkb21haW4sIHJhbmdlKS51bmtub3duKHVua25vd24pO1xuICB9O1xuXG4gIGluaXRSYW5nZS5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcblxuICByZXR1cm4gc2NhbGU7XG59XG4iLCJleHBvcnQgZGVmYXVsdCB4ID0+ICgpID0+IHg7XG4iLCJpbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcblxuZnVuY3Rpb24gbGluZWFyKGEsIGQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYSArIHQgKiBkO1xuICB9O1xufVxuXG5mdW5jdGlvbiBleHBvbmVudGlhbChhLCBiLCB5KSB7XG4gIHJldHVybiBhID0gTWF0aC5wb3coYSwgeSksIGIgPSBNYXRoLnBvdyhiLCB5KSAtIGEsIHkgPSAxIC8geSwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBNYXRoLnBvdyhhICsgdCAqIGIsIHkpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHVlKGEsIGIpIHtcbiAgdmFyIGQgPSBiIC0gYTtcbiAgcmV0dXJuIGQgPyBsaW5lYXIoYSwgZCA+IDE4MCB8fCBkIDwgLTE4MCA/IGQgLSAzNjAgKiBNYXRoLnJvdW5kKGQgLyAzNjApIDogZCkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdhbW1hKHkpIHtcbiAgcmV0dXJuICh5ID0gK3kpID09PSAxID8gbm9nYW1tYSA6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYiAtIGEgPyBleHBvbmVudGlhbChhLCBiLCB5KSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub2dhbW1hKGEsIGIpIHtcbiAgdmFyIGQgPSBiIC0gYTtcbiAgcmV0dXJuIGQgPyBsaW5lYXIoYSwgZCkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbn1cbiIsImltcG9ydCB7cmdiIGFzIGNvbG9yUmdifSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCBiYXNpcyBmcm9tIFwiLi9iYXNpcy5qc1wiO1xuaW1wb3J0IGJhc2lzQ2xvc2VkIGZyb20gXCIuL2Jhc2lzQ2xvc2VkLmpzXCI7XG5pbXBvcnQgbm9nYW1tYSwge2dhbW1hfSBmcm9tIFwiLi9jb2xvci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gcmdiR2FtbWEoeSkge1xuICB2YXIgY29sb3IgPSBnYW1tYSh5KTtcblxuICBmdW5jdGlvbiByZ2Ioc3RhcnQsIGVuZCkge1xuICAgIHZhciByID0gY29sb3IoKHN0YXJ0ID0gY29sb3JSZ2Ioc3RhcnQpKS5yLCAoZW5kID0gY29sb3JSZ2IoZW5kKSkuciksXG4gICAgICAgIGcgPSBjb2xvcihzdGFydC5nLCBlbmQuZyksXG4gICAgICAgIGIgPSBjb2xvcihzdGFydC5iLCBlbmQuYiksXG4gICAgICAgIG9wYWNpdHkgPSBub2dhbW1hKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgc3RhcnQuciA9IHIodCk7XG4gICAgICBzdGFydC5nID0gZyh0KTtcbiAgICAgIHN0YXJ0LmIgPSBiKHQpO1xuICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICAgIH07XG4gIH1cblxuICByZ2IuZ2FtbWEgPSByZ2JHYW1tYTtcblxuICByZXR1cm4gcmdiO1xufSkoMSk7XG5cbmZ1bmN0aW9uIHJnYlNwbGluZShzcGxpbmUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbG9ycykge1xuICAgIHZhciBuID0gY29sb3JzLmxlbmd0aCxcbiAgICAgICAgciA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgZyA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgYiA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgaSwgY29sb3I7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgY29sb3IgPSBjb2xvclJnYihjb2xvcnNbaV0pO1xuICAgICAgcltpXSA9IGNvbG9yLnIgfHwgMDtcbiAgICAgIGdbaV0gPSBjb2xvci5nIHx8IDA7XG4gICAgICBiW2ldID0gY29sb3IuYiB8fCAwO1xuICAgIH1cbiAgICByID0gc3BsaW5lKHIpO1xuICAgIGcgPSBzcGxpbmUoZyk7XG4gICAgYiA9IHNwbGluZShiKTtcbiAgICBjb2xvci5vcGFjaXR5ID0gMTtcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgY29sb3IuciA9IHIodCk7XG4gICAgICBjb2xvci5nID0gZyh0KTtcbiAgICAgIGNvbG9yLmIgPSBiKHQpO1xuICAgICAgcmV0dXJuIGNvbG9yICsgXCJcIjtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgdmFyIHJnYkJhc2lzID0gcmdiU3BsaW5lKGJhc2lzKTtcbmV4cG9ydCB2YXIgcmdiQmFzaXNDbG9zZWQgPSByZ2JTcGxpbmUoYmFzaXNDbG9zZWQpO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICBpZiAoIWIpIGIgPSBbXTtcbiAgdmFyIG4gPSBhID8gTWF0aC5taW4oYi5sZW5ndGgsIGEubGVuZ3RoKSA6IDAsXG4gICAgICBjID0gYi5zbGljZSgpLFxuICAgICAgaTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSBjW2ldID0gYVtpXSAqICgxIC0gdCkgKyBiW2ldICogdDtcbiAgICByZXR1cm4gYztcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyQXJyYXkoeCkge1xuICByZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KHgpICYmICEoeCBpbnN0YW5jZW9mIERhdGFWaWV3KTtcbn1cbiIsImltcG9ydCB2YWx1ZSBmcm9tIFwiLi92YWx1ZS5qc1wiO1xuaW1wb3J0IG51bWJlckFycmF5LCB7aXNOdW1iZXJBcnJheX0gZnJvbSBcIi4vbnVtYmVyQXJyYXkuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gKGlzTnVtYmVyQXJyYXkoYikgPyBudW1iZXJBcnJheSA6IGdlbmVyaWNBcnJheSkoYSwgYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmljQXJyYXkoYSwgYikge1xuICB2YXIgbmIgPSBiID8gYi5sZW5ndGggOiAwLFxuICAgICAgbmEgPSBhID8gTWF0aC5taW4obmIsIGEubGVuZ3RoKSA6IDAsXG4gICAgICB4ID0gbmV3IEFycmF5KG5hKSxcbiAgICAgIGMgPSBuZXcgQXJyYXkobmIpLFxuICAgICAgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgeFtpXSA9IHZhbHVlKGFbaV0sIGJbaV0pO1xuICBmb3IgKDsgaSA8IG5iOyArK2kpIGNbaV0gPSBiW2ldO1xuXG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG5hOyArK2kpIGNbaV0gPSB4W2ldKHQpO1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgZCA9IG5ldyBEYXRlO1xuICByZXR1cm4gYSA9ICthLCBiID0gK2IsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gZC5zZXRUaW1lKGEgKiAoMSAtIHQpICsgYiAqIHQpLCBkO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA9ICthLCBiID0gK2IsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYSAqICgxIC0gdCkgKyBiICogdDtcbiAgfTtcbn1cbiIsImltcG9ydCB2YWx1ZSBmcm9tIFwiLi92YWx1ZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBpID0ge30sXG4gICAgICBjID0ge30sXG4gICAgICBrO1xuXG4gIGlmIChhID09PSBudWxsIHx8IHR5cGVvZiBhICE9PSBcIm9iamVjdFwiKSBhID0ge307XG4gIGlmIChiID09PSBudWxsIHx8IHR5cGVvZiBiICE9PSBcIm9iamVjdFwiKSBiID0ge307XG5cbiAgZm9yIChrIGluIGIpIHtcbiAgICBpZiAoayBpbiBhKSB7XG4gICAgICBpW2tdID0gdmFsdWUoYVtrXSwgYltrXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNba10gPSBiW2tdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChrIGluIGkpIGNba10gPSBpW2tdKHQpO1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuIiwiaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXIuanNcIjtcblxudmFyIHJlQSA9IC9bLStdPyg/OlxcZCtcXC4/XFxkKnxcXC4/XFxkKykoPzpbZUVdWy0rXT9cXGQrKT8vZyxcbiAgICByZUIgPSBuZXcgUmVnRXhwKHJlQS5zb3VyY2UsIFwiZ1wiKTtcblxuZnVuY3Rpb24gemVybyhiKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYjtcbiAgfTtcbn1cblxuZnVuY3Rpb24gb25lKGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYih0KSArIFwiXCI7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGJpID0gcmVBLmxhc3RJbmRleCA9IHJlQi5sYXN0SW5kZXggPSAwLCAvLyBzY2FuIGluZGV4IGZvciBuZXh0IG51bWJlciBpbiBiXG4gICAgICBhbSwgLy8gY3VycmVudCBtYXRjaCBpbiBhXG4gICAgICBibSwgLy8gY3VycmVudCBtYXRjaCBpbiBiXG4gICAgICBicywgLy8gc3RyaW5nIHByZWNlZGluZyBjdXJyZW50IG51bWJlciBpbiBiLCBpZiBhbnlcbiAgICAgIGkgPSAtMSwgLy8gaW5kZXggaW4gc1xuICAgICAgcyA9IFtdLCAvLyBzdHJpbmcgY29uc3RhbnRzIGFuZCBwbGFjZWhvbGRlcnNcbiAgICAgIHEgPSBbXTsgLy8gbnVtYmVyIGludGVycG9sYXRvcnNcblxuICAvLyBDb2VyY2UgaW5wdXRzIHRvIHN0cmluZ3MuXG4gIGEgPSBhICsgXCJcIiwgYiA9IGIgKyBcIlwiO1xuXG4gIC8vIEludGVycG9sYXRlIHBhaXJzIG9mIG51bWJlcnMgaW4gYSAmIGIuXG4gIHdoaWxlICgoYW0gPSByZUEuZXhlYyhhKSlcbiAgICAgICYmIChibSA9IHJlQi5leGVjKGIpKSkge1xuICAgIGlmICgoYnMgPSBibS5pbmRleCkgPiBiaSkgeyAvLyBhIHN0cmluZyBwcmVjZWRlcyB0aGUgbmV4dCBudW1iZXIgaW4gYlxuICAgICAgYnMgPSBiLnNsaWNlKGJpLCBicyk7XG4gICAgICBpZiAoc1tpXSkgc1tpXSArPSBiczsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICAgIGVsc2Ugc1srK2ldID0gYnM7XG4gICAgfVxuICAgIGlmICgoYW0gPSBhbVswXSkgPT09IChibSA9IGJtWzBdKSkgeyAvLyBudW1iZXJzIGluIGEgJiBiIG1hdGNoXG4gICAgICBpZiAoc1tpXSkgc1tpXSArPSBibTsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICAgIGVsc2Ugc1srK2ldID0gYm07XG4gICAgfSBlbHNlIHsgLy8gaW50ZXJwb2xhdGUgbm9uLW1hdGNoaW5nIG51bWJlcnNcbiAgICAgIHNbKytpXSA9IG51bGw7XG4gICAgICBxLnB1c2goe2k6IGksIHg6IG51bWJlcihhbSwgYm0pfSk7XG4gICAgfVxuICAgIGJpID0gcmVCLmxhc3RJbmRleDtcbiAgfVxuXG4gIC8vIEFkZCByZW1haW5zIG9mIGIuXG4gIGlmIChiaSA8IGIubGVuZ3RoKSB7XG4gICAgYnMgPSBiLnNsaWNlKGJpKTtcbiAgICBpZiAoc1tpXSkgc1tpXSArPSBiczsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICBlbHNlIHNbKytpXSA9IGJzO1xuICB9XG5cbiAgLy8gU3BlY2lhbCBvcHRpbWl6YXRpb24gZm9yIG9ubHkgYSBzaW5nbGUgbWF0Y2guXG4gIC8vIE90aGVyd2lzZSwgaW50ZXJwb2xhdGUgZWFjaCBvZiB0aGUgbnVtYmVycyBhbmQgcmVqb2luIHRoZSBzdHJpbmcuXG4gIHJldHVybiBzLmxlbmd0aCA8IDIgPyAocVswXVxuICAgICAgPyBvbmUocVswXS54KVxuICAgICAgOiB6ZXJvKGIpKVxuICAgICAgOiAoYiA9IHEubGVuZ3RoLCBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG87IGkgPCBiOyArK2kpIHNbKG8gPSBxW2ldKS5pXSA9IG8ueCh0KTtcbiAgICAgICAgICByZXR1cm4gcy5qb2luKFwiXCIpO1xuICAgICAgICB9KTtcbn1cbiIsImltcG9ydCB7Y29sb3J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IHJnYiBmcm9tIFwiLi9yZ2IuanNcIjtcbmltcG9ydCB7Z2VuZXJpY0FycmF5fSBmcm9tIFwiLi9hcnJheS5qc1wiO1xuaW1wb3J0IGRhdGUgZnJvbSBcIi4vZGF0ZS5qc1wiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXIuanNcIjtcbmltcG9ydCBvYmplY3QgZnJvbSBcIi4vb2JqZWN0LmpzXCI7XG5pbXBvcnQgc3RyaW5nIGZyb20gXCIuL3N0cmluZy5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgbnVtYmVyQXJyYXksIHtpc051bWJlckFycmF5fSBmcm9tIFwiLi9udW1iZXJBcnJheS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciB0ID0gdHlwZW9mIGIsIGM7XG4gIHJldHVybiBiID09IG51bGwgfHwgdCA9PT0gXCJib29sZWFuXCIgPyBjb25zdGFudChiKVxuICAgICAgOiAodCA9PT0gXCJudW1iZXJcIiA/IG51bWJlclxuICAgICAgOiB0ID09PSBcInN0cmluZ1wiID8gKChjID0gY29sb3IoYikpID8gKGIgPSBjLCByZ2IpIDogc3RyaW5nKVxuICAgICAgOiBiIGluc3RhbmNlb2YgY29sb3IgPyByZ2JcbiAgICAgIDogYiBpbnN0YW5jZW9mIERhdGUgPyBkYXRlXG4gICAgICA6IGlzTnVtYmVyQXJyYXkoYikgPyBudW1iZXJBcnJheVxuICAgICAgOiBBcnJheS5pc0FycmF5KGIpID8gZ2VuZXJpY0FycmF5XG4gICAgICA6IHR5cGVvZiBiLnZhbHVlT2YgIT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgYi50b1N0cmluZyAhPT0gXCJmdW5jdGlvblwiIHx8IGlzTmFOKGIpID8gb2JqZWN0XG4gICAgICA6IG51bWJlcikoYSwgYik7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKGEgKiAoMSAtIHQpICsgYiAqIHQpO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgcmV0dXJuICt4O1xufVxuIiwiaW1wb3J0IHtiaXNlY3R9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZSBhcyBpbnRlcnBvbGF0ZVZhbHVlLCBpbnRlcnBvbGF0ZU51bWJlciwgaW50ZXJwb2xhdGVSb3VuZH0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbnZhciB1bml0ID0gWzAsIDFdO1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICByZXR1cm4geDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplKGEsIGIpIHtcbiAgcmV0dXJuIChiIC09IChhID0gK2EpKVxuICAgICAgPyBmdW5jdGlvbih4KSB7IHJldHVybiAoeCAtIGEpIC8gYjsgfVxuICAgICAgOiBjb25zdGFudChpc05hTihiKSA/IE5hTiA6IDAuNSk7XG59XG5cbmZ1bmN0aW9uIGNsYW1wZXIoYSwgYikge1xuICB2YXIgdDtcbiAgaWYgKGEgPiBiKSB0ID0gYSwgYSA9IGIsIGIgPSB0O1xuICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5tYXgoYSwgTWF0aC5taW4oYiwgeCkpOyB9O1xufVxuXG4vLyBub3JtYWxpemUoYSwgYikoeCkgdGFrZXMgYSBkb21haW4gdmFsdWUgeCBpbiBbYSxiXSBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdCBpbiBbMCwxXS5cbi8vIGludGVycG9sYXRlKGEsIGIpKHQpIHRha2VzIGEgcGFyYW1ldGVyIHQgaW4gWzAsMV0gYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmFuZ2UgdmFsdWUgeCBpbiBbYSxiXS5cbmZ1bmN0aW9uIGJpbWFwKGRvbWFpbiwgcmFuZ2UsIGludGVycG9sYXRlKSB7XG4gIHZhciBkMCA9IGRvbWFpblswXSwgZDEgPSBkb21haW5bMV0sIHIwID0gcmFuZ2VbMF0sIHIxID0gcmFuZ2VbMV07XG4gIGlmIChkMSA8IGQwKSBkMCA9IG5vcm1hbGl6ZShkMSwgZDApLCByMCA9IGludGVycG9sYXRlKHIxLCByMCk7XG4gIGVsc2UgZDAgPSBub3JtYWxpemUoZDAsIGQxKSwgcjAgPSBpbnRlcnBvbGF0ZShyMCwgcjEpO1xuICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4gcjAoZDAoeCkpOyB9O1xufVxuXG5mdW5jdGlvbiBwb2x5bWFwKGRvbWFpbiwgcmFuZ2UsIGludGVycG9sYXRlKSB7XG4gIHZhciBqID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKSAtIDEsXG4gICAgICBkID0gbmV3IEFycmF5KGopLFxuICAgICAgciA9IG5ldyBBcnJheShqKSxcbiAgICAgIGkgPSAtMTtcblxuICAvLyBSZXZlcnNlIGRlc2NlbmRpbmcgZG9tYWlucy5cbiAgaWYgKGRvbWFpbltqXSA8IGRvbWFpblswXSkge1xuICAgIGRvbWFpbiA9IGRvbWFpbi5zbGljZSgpLnJldmVyc2UoKTtcbiAgICByYW5nZSA9IHJhbmdlLnNsaWNlKCkucmV2ZXJzZSgpO1xuICB9XG5cbiAgd2hpbGUgKCsraSA8IGopIHtcbiAgICBkW2ldID0gbm9ybWFsaXplKGRvbWFpbltpXSwgZG9tYWluW2kgKyAxXSk7XG4gICAgcltpXSA9IGludGVycG9sYXRlKHJhbmdlW2ldLCByYW5nZVtpICsgMV0pO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHtcbiAgICB2YXIgaSA9IGJpc2VjdChkb21haW4sIHgsIDEsIGopIC0gMTtcbiAgICByZXR1cm4gcltpXShkW2ldKHgpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkoc291cmNlLCB0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldFxuICAgICAgLmRvbWFpbihzb3VyY2UuZG9tYWluKCkpXG4gICAgICAucmFuZ2Uoc291cmNlLnJhbmdlKCkpXG4gICAgICAuaW50ZXJwb2xhdGUoc291cmNlLmludGVycG9sYXRlKCkpXG4gICAgICAuY2xhbXAoc291cmNlLmNsYW1wKCkpXG4gICAgICAudW5rbm93bihzb3VyY2UudW5rbm93bigpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybWVyKCkge1xuICB2YXIgZG9tYWluID0gdW5pdCxcbiAgICAgIHJhbmdlID0gdW5pdCxcbiAgICAgIGludGVycG9sYXRlID0gaW50ZXJwb2xhdGVWYWx1ZSxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHVudHJhbnNmb3JtLFxuICAgICAgdW5rbm93bixcbiAgICAgIGNsYW1wID0gaWRlbnRpdHksXG4gICAgICBwaWVjZXdpc2UsXG4gICAgICBvdXRwdXQsXG4gICAgICBpbnB1dDtcblxuICBmdW5jdGlvbiByZXNjYWxlKCkge1xuICAgIHZhciBuID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKTtcbiAgICBpZiAoY2xhbXAgIT09IGlkZW50aXR5KSBjbGFtcCA9IGNsYW1wZXIoZG9tYWluWzBdLCBkb21haW5bbiAtIDFdKTtcbiAgICBwaWVjZXdpc2UgPSBuID4gMiA/IHBvbHltYXAgOiBiaW1hcDtcbiAgICBvdXRwdXQgPSBpbnB1dCA9IG51bGw7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiB4ID09IG51bGwgfHwgaXNOYU4oeCA9ICt4KSA/IHVua25vd24gOiAob3V0cHV0IHx8IChvdXRwdXQgPSBwaWVjZXdpc2UoZG9tYWluLm1hcCh0cmFuc2Zvcm0pLCByYW5nZSwgaW50ZXJwb2xhdGUpKSkodHJhbnNmb3JtKGNsYW1wKHgpKSk7XG4gIH1cblxuICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIGNsYW1wKHVudHJhbnNmb3JtKChpbnB1dCB8fCAoaW5wdXQgPSBwaWVjZXdpc2UocmFuZ2UsIGRvbWFpbi5tYXAodHJhbnNmb3JtKSwgaW50ZXJwb2xhdGVOdW1iZXIpKSkoeSkpKTtcbiAgfTtcblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluID0gQXJyYXkuZnJvbShfLCBudW1iZXIpLCByZXNjYWxlKCkpIDogZG9tYWluLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBBcnJheS5mcm9tKF8pLCByZXNjYWxlKCkpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZVJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiByYW5nZSA9IEFycmF5LmZyb20oXyksIGludGVycG9sYXRlID0gaW50ZXJwb2xhdGVSb3VuZCwgcmVzY2FsZSgpO1xuICB9O1xuXG4gIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsYW1wID0gXyA/IHRydWUgOiBpZGVudGl0eSwgcmVzY2FsZSgpKSA6IGNsYW1wICE9PSBpZGVudGl0eTtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0ZSA9IF8sIHJlc2NhbGUoKSkgOiBpbnRlcnBvbGF0ZTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbih0LCB1KSB7XG4gICAgdHJhbnNmb3JtID0gdCwgdW50cmFuc2Zvcm0gPSB1O1xuICAgIHJldHVybiByZXNjYWxlKCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRpbnVvdXMoKSB7XG4gIHJldHVybiB0cmFuc2Zvcm1lcigpKGlkZW50aXR5LCBpZGVudGl0eSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb25zdGFudHMoeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJpbXBvcnQge3RpY2tTdGVwfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7Zm9ybWF0LCBmb3JtYXRQcmVmaXgsIGZvcm1hdFNwZWNpZmllciwgcHJlY2lzaW9uRml4ZWQsIHByZWNpc2lvblByZWZpeCwgcHJlY2lzaW9uUm91bmR9IGZyb20gXCJkMy1mb3JtYXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGlja0Zvcm1hdChzdGFydCwgc3RvcCwgY291bnQsIHNwZWNpZmllcikge1xuICB2YXIgc3RlcCA9IHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCksXG4gICAgICBwcmVjaXNpb247XG4gIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIgPT0gbnVsbCA/IFwiLGZcIiA6IHNwZWNpZmllcik7XG4gIHN3aXRjaCAoc3BlY2lmaWVyLnR5cGUpIHtcbiAgICBjYXNlIFwic1wiOiB7XG4gICAgICB2YXIgdmFsdWUgPSBNYXRoLm1heChNYXRoLmFicyhzdGFydCksIE1hdGguYWJzKHN0b3ApKTtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvblByZWZpeChzdGVwLCB2YWx1ZSkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uO1xuICAgICAgcmV0dXJuIGZvcm1hdFByZWZpeChzcGVjaWZpZXIsIHZhbHVlKTtcbiAgICB9XG4gICAgY2FzZSBcIlwiOlxuICAgIGNhc2UgXCJlXCI6XG4gICAgY2FzZSBcImdcIjpcbiAgICBjYXNlIFwicFwiOlxuICAgIGNhc2UgXCJyXCI6IHtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvblJvdW5kKHN0ZXAsIE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb24gLSAoc3BlY2lmaWVyLnR5cGUgPT09IFwiZVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFwiZlwiOlxuICAgIGNhc2UgXCIlXCI6IHtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvbkZpeGVkKHN0ZXApKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCIlXCIpICogMjtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0KHNwZWNpZmllcik7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RlcCwgdmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50KHZhbHVlKSAvIDMpKSkgKiAzIC0gZXhwb25lbnQoTWF0aC5hYnMoc3RlcCkpKTtcbn1cbiIsImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwLCBtYXgpIHtcbiAgc3RlcCA9IE1hdGguYWJzKHN0ZXApLCBtYXggPSBNYXRoLmFicyhtYXgpIC0gc3RlcDtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIGV4cG9uZW50KG1heCkgLSBleHBvbmVudChzdGVwKSkgKyAxO1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXApIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIC1leHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xufVxuIiwiaW1wb3J0IHt0aWNrcywgdGlja0luY3JlbWVudH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQgY29udGludW91cywge2NvcHl9IGZyb20gXCIuL2NvbnRpbnVvdXMuanNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5pbXBvcnQgdGlja0Zvcm1hdCBmcm9tIFwiLi90aWNrRm9ybWF0LmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lYXJpc2goc2NhbGUpIHtcbiAgdmFyIGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcblxuICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gdGlja3MoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCk7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiB0aWNrRm9ybWF0KGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgY291bnQgPT0gbnVsbCA/IDEwIDogY291bnQsIHNwZWNpZmllcik7XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgaWYgKGNvdW50ID09IG51bGwpIGNvdW50ID0gMTA7XG5cbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHZhciBpMCA9IDA7XG4gICAgdmFyIGkxID0gZC5sZW5ndGggLSAxO1xuICAgIHZhciBzdGFydCA9IGRbaTBdO1xuICAgIHZhciBzdG9wID0gZFtpMV07XG4gICAgdmFyIHByZXN0ZXA7XG4gICAgdmFyIHN0ZXA7XG4gICAgdmFyIG1heEl0ZXIgPSAxMDtcblxuICAgIGlmIChzdG9wIDwgc3RhcnQpIHtcbiAgICAgIHN0ZXAgPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gc3RlcDtcbiAgICAgIHN0ZXAgPSBpMCwgaTAgPSBpMSwgaTEgPSBzdGVwO1xuICAgIH1cbiAgICBcbiAgICB3aGlsZSAobWF4SXRlci0tID4gMCkge1xuICAgICAgc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgICAgIGlmIChzdGVwID09PSBwcmVzdGVwKSB7XG4gICAgICAgIGRbaTBdID0gc3RhcnRcbiAgICAgICAgZFtpMV0gPSBzdG9wXG4gICAgICAgIHJldHVybiBkb21haW4oZCk7XG4gICAgICB9IGVsc2UgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcbiAgICAgICAgc3RvcCA9IE1hdGguY2VpbChzdG9wIC8gc3RlcCkgKiBzdGVwO1xuICAgICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xuICAgICAgICBzdGFydCA9IE1hdGguY2VpbChzdGFydCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgICAgc3RvcCA9IE1hdGguZmxvb3Ioc3RvcCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcHJlc3RlcCA9IHN0ZXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGluZWFyKCkge1xuICB2YXIgc2NhbGUgPSBjb250aW51b3VzKCk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBsaW5lYXIoKSk7XG4gIH07XG5cbiAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xuXG4gIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xufVxuIiwidmFyIHQwID0gbmV3IERhdGUsXG4gICAgdDEgPSBuZXcgRGF0ZTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbmV3SW50ZXJ2YWwoZmxvb3JpLCBvZmZzZXRpLCBjb3VudCwgZmllbGQpIHtcblxuICBmdW5jdGlvbiBpbnRlcnZhbChkYXRlKSB7XG4gICAgcmV0dXJuIGZsb29yaShkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMCA/IG5ldyBEYXRlIDogbmV3IERhdGUoK2RhdGUpKSwgZGF0ZTtcbiAgfVxuXG4gIGludGVydmFsLmZsb29yID0gZnVuY3Rpb24oZGF0ZSkge1xuICAgIHJldHVybiBmbG9vcmkoZGF0ZSA9IG5ldyBEYXRlKCtkYXRlKSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwuY2VpbCA9IGZ1bmN0aW9uKGRhdGUpIHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBuZXcgRGF0ZShkYXRlIC0gMSkpLCBvZmZzZXRpKGRhdGUsIDEpLCBmbG9vcmkoZGF0ZSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwucm91bmQgPSBmdW5jdGlvbihkYXRlKSB7XG4gICAgdmFyIGQwID0gaW50ZXJ2YWwoZGF0ZSksXG4gICAgICAgIGQxID0gaW50ZXJ2YWwuY2VpbChkYXRlKTtcbiAgICByZXR1cm4gZGF0ZSAtIGQwIDwgZDEgLSBkYXRlID8gZDAgOiBkMTtcbiAgfTtcblxuICBpbnRlcnZhbC5vZmZzZXQgPSBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgcmV0dXJuIG9mZnNldGkoZGF0ZSA9IG5ldyBEYXRlKCtkYXRlKSwgc3RlcCA9PSBudWxsID8gMSA6IE1hdGguZmxvb3Ioc3RlcCkpLCBkYXRlO1xuICB9O1xuXG4gIGludGVydmFsLnJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgICB2YXIgcmFuZ2UgPSBbXSwgcHJldmlvdXM7XG4gICAgc3RhcnQgPSBpbnRlcnZhbC5jZWlsKHN0YXJ0KTtcbiAgICBzdGVwID0gc3RlcCA9PSBudWxsID8gMSA6IE1hdGguZmxvb3Ioc3RlcCk7XG4gICAgaWYgKCEoc3RhcnQgPCBzdG9wKSB8fCAhKHN0ZXAgPiAwKSkgcmV0dXJuIHJhbmdlOyAvLyBhbHNvIGhhbmRsZXMgSW52YWxpZCBEYXRlXG4gICAgZG8gcmFuZ2UucHVzaChwcmV2aW91cyA9IG5ldyBEYXRlKCtzdGFydCkpLCBvZmZzZXRpKHN0YXJ0LCBzdGVwKSwgZmxvb3JpKHN0YXJ0KTtcbiAgICB3aGlsZSAocHJldmlvdXMgPCBzdGFydCAmJiBzdGFydCA8IHN0b3ApO1xuICAgIHJldHVybiByYW5nZTtcbiAgfTtcblxuICBpbnRlcnZhbC5maWx0ZXIgPSBmdW5jdGlvbih0ZXN0KSB7XG4gICAgcmV0dXJuIG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgIGlmIChkYXRlID49IGRhdGUpIHdoaWxlIChmbG9vcmkoZGF0ZSksICF0ZXN0KGRhdGUpKSBkYXRlLnNldFRpbWUoZGF0ZSAtIDEpO1xuICAgIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICAgIGlmIChkYXRlID49IGRhdGUpIHtcbiAgICAgICAgaWYgKHN0ZXAgPCAwKSB3aGlsZSAoKytzdGVwIDw9IDApIHtcbiAgICAgICAgICB3aGlsZSAob2Zmc2V0aShkYXRlLCAtMSksICF0ZXN0KGRhdGUpKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG4gICAgICAgIH0gZWxzZSB3aGlsZSAoLS1zdGVwID49IDApIHtcbiAgICAgICAgICB3aGlsZSAob2Zmc2V0aShkYXRlLCArMSksICF0ZXN0KGRhdGUpKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBpZiAoY291bnQpIHtcbiAgICBpbnRlcnZhbC5jb3VudCA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHQwLnNldFRpbWUoK3N0YXJ0KSwgdDEuc2V0VGltZSgrZW5kKTtcbiAgICAgIGZsb29yaSh0MCksIGZsb29yaSh0MSk7XG4gICAgICByZXR1cm4gTWF0aC5mbG9vcihjb3VudCh0MCwgdDEpKTtcbiAgICB9O1xuXG4gICAgaW50ZXJ2YWwuZXZlcnkgPSBmdW5jdGlvbihzdGVwKSB7XG4gICAgICBzdGVwID0gTWF0aC5mbG9vcihzdGVwKTtcbiAgICAgIHJldHVybiAhaXNGaW5pdGUoc3RlcCkgfHwgIShzdGVwID4gMCkgPyBudWxsXG4gICAgICAgICAgOiAhKHN0ZXAgPiAxKSA/IGludGVydmFsXG4gICAgICAgICAgOiBpbnRlcnZhbC5maWx0ZXIoZmllbGRcbiAgICAgICAgICAgICAgPyBmdW5jdGlvbihkKSB7IHJldHVybiBmaWVsZChkKSAlIHN0ZXAgPT09IDA7IH1cbiAgICAgICAgICAgICAgOiBmdW5jdGlvbihkKSB7IHJldHVybiBpbnRlcnZhbC5jb3VudCgwLCBkKSAlIHN0ZXAgPT09IDA7IH0pO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gaW50ZXJ2YWw7XG59XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcblxudmFyIG1pbGxpc2Vjb25kID0gaW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gIC8vIG5vb3Bcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQgLSBzdGFydDtcbn0pO1xuXG4vLyBBbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgc2ltcGxlIGNhc2UuXG5taWxsaXNlY29uZC5ldmVyeSA9IGZ1bmN0aW9uKGspIHtcbiAgayA9IE1hdGguZmxvb3Ioayk7XG4gIGlmICghaXNGaW5pdGUoaykgfHwgIShrID4gMCkpIHJldHVybiBudWxsO1xuICBpZiAoIShrID4gMSkpIHJldHVybiBtaWxsaXNlY29uZDtcbiAgcmV0dXJuIGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldFRpbWUoTWF0aC5mbG9vcihkYXRlIC8gaykgKiBrKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBrKTtcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gaztcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBtaWxsaXNlY29uZDtcbmV4cG9ydCB2YXIgbWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmQucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25TZWNvbmR9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciBzZWNvbmQgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VGltZShkYXRlIC0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvblNlY29uZCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25TZWNvbmQ7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ1NlY29uZHMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBzZWNvbmQ7XG5leHBvcnQgdmFyIHNlY29uZHMgPSBzZWNvbmQucmFuZ2U7XG4iLCJleHBvcnQgY29uc3QgZHVyYXRpb25TZWNvbmQgPSAxMDAwO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uTWludXRlID0gZHVyYXRpb25TZWNvbmQgKiA2MDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbkhvdXIgPSBkdXJhdGlvbk1pbnV0ZSAqIDYwO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uRGF5ID0gZHVyYXRpb25Ib3VyICogMjQ7XG5leHBvcnQgY29uc3QgZHVyYXRpb25XZWVrID0gZHVyYXRpb25EYXkgKiA3O1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uTW9udGggPSBkdXJhdGlvbkRheSAqIDMwO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uWWVhciA9IGR1cmF0aW9uRGF5ICogMzY1O1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQge2R1cmF0aW9uTWludXRlLCBkdXJhdGlvblNlY29uZH0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxudmFyIG1pbnV0ZSA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRUaW1lKGRhdGUgLSBkYXRlLmdldE1pbGxpc2Vjb25kcygpIC0gZGF0ZS5nZXRTZWNvbmRzKCkgKiBkdXJhdGlvblNlY29uZCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25NaW51dGU7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldE1pbnV0ZXMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBtaW51dGU7XG5leHBvcnQgdmFyIG1pbnV0ZXMgPSBtaW51dGUucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25Ib3VyLCBkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25TZWNvbmR9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciBob3VyID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSBkYXRlLmdldFNlY29uZHMoKSAqIGR1cmF0aW9uU2Vjb25kIC0gZGF0ZS5nZXRNaW51dGVzKCkgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbkhvdXIpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uSG91cjtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBob3VyO1xuZXhwb3J0IHZhciBob3VycyA9IGhvdXIucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25EYXksIGR1cmF0aW9uTWludXRlfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG52YXIgZGF5ID0gaW50ZXJ2YWwoXG4gIGRhdGUgPT4gZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKSxcbiAgKGRhdGUsIHN0ZXApID0+IGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXApLFxuICAoc3RhcnQsIGVuZCkgPT4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbkRheSxcbiAgZGF0ZSA9PiBkYXRlLmdldERhdGUoKSAtIDFcbik7XG5cbmV4cG9ydCBkZWZhdWx0IGRheTtcbmV4cG9ydCB2YXIgZGF5cyA9IGRheS5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25XZWVrfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG5mdW5jdGlvbiB3ZWVrZGF5KGkpIHtcbiAgcmV0dXJuIGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAoZGF0ZS5nZXREYXkoKSArIDcgLSBpKSAlIDcpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBzdGVwICogNyk7XG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbldlZWs7XG4gIH0pO1xufVxuXG5leHBvcnQgdmFyIHN1bmRheSA9IHdlZWtkYXkoMCk7XG5leHBvcnQgdmFyIG1vbmRheSA9IHdlZWtkYXkoMSk7XG5leHBvcnQgdmFyIHR1ZXNkYXkgPSB3ZWVrZGF5KDIpO1xuZXhwb3J0IHZhciB3ZWRuZXNkYXkgPSB3ZWVrZGF5KDMpO1xuZXhwb3J0IHZhciB0aHVyc2RheSA9IHdlZWtkYXkoNCk7XG5leHBvcnQgdmFyIGZyaWRheSA9IHdlZWtkYXkoNSk7XG5leHBvcnQgdmFyIHNhdHVyZGF5ID0gd2Vla2RheSg2KTtcblxuZXhwb3J0IHZhciBzdW5kYXlzID0gc3VuZGF5LnJhbmdlO1xuZXhwb3J0IHZhciBtb25kYXlzID0gbW9uZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB0dWVzZGF5cyA9IHR1ZXNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHdlZG5lc2RheXMgPSB3ZWRuZXNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHRodXJzZGF5cyA9IHRodXJzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciBmcmlkYXlzID0gZnJpZGF5LnJhbmdlO1xuZXhwb3J0IHZhciBzYXR1cmRheXMgPSBzYXR1cmRheS5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuXG52YXIgbW9udGggPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0RGF0ZSgxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZC5nZXRNb250aCgpIC0gc3RhcnQuZ2V0TW9udGgoKSArIChlbmQuZ2V0RnVsbFllYXIoKSAtIHN0YXJ0LmdldEZ1bGxZZWFyKCkpICogMTI7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldE1vbnRoKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgbW9udGg7XG5leHBvcnQgdmFyIG1vbnRocyA9IG1vbnRoLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbnZhciB5ZWFyID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldE1vbnRoKDAsIDEpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldEZ1bGxZZWFyKCkgLSBzdGFydC5nZXRGdWxsWWVhcigpO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbnllYXIuZXZlcnkgPSBmdW5jdGlvbihrKSB7XG4gIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRGdWxsWWVhcigpIC8gaykgKiBrKTtcbiAgICBkYXRlLnNldE1vbnRoKDAsIDEpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgKiBrKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB5ZWFyO1xuZXhwb3J0IHZhciB5ZWFycyA9IHllYXIucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25NaW51dGV9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciB1dGNNaW51dGUgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDU2Vjb25kcygwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uTWludXRlKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbk1pbnV0ZTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDTWludXRlcygpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y01pbnV0ZTtcbmV4cG9ydCB2YXIgdXRjTWludXRlcyA9IHV0Y01pbnV0ZS5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbkhvdXJ9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciB1dGNIb3VyID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ01pbnV0ZXMoMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbkhvdXIpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uSG91cjtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDSG91cnMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1dGNIb3VyO1xuZXhwb3J0IHZhciB1dGNIb3VycyA9IHV0Y0hvdXIucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25EYXl9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciB1dGNEYXkgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uRGF5O1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENEYXRlKCkgLSAxO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y0RheTtcbmV4cG9ydCB2YXIgdXRjRGF5cyA9IHV0Y0RheS5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbldlZWt9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbmZ1bmN0aW9uIHV0Y1dlZWtkYXkoaSkge1xuICByZXR1cm4gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIChkYXRlLmdldFVUQ0RheSgpICsgNyAtIGkpICUgNyk7XG4gICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXAgKiA3KTtcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25XZWVrO1xuICB9KTtcbn1cblxuZXhwb3J0IHZhciB1dGNTdW5kYXkgPSB1dGNXZWVrZGF5KDApO1xuZXhwb3J0IHZhciB1dGNNb25kYXkgPSB1dGNXZWVrZGF5KDEpO1xuZXhwb3J0IHZhciB1dGNUdWVzZGF5ID0gdXRjV2Vla2RheSgyKTtcbmV4cG9ydCB2YXIgdXRjV2VkbmVzZGF5ID0gdXRjV2Vla2RheSgzKTtcbmV4cG9ydCB2YXIgdXRjVGh1cnNkYXkgPSB1dGNXZWVrZGF5KDQpO1xuZXhwb3J0IHZhciB1dGNGcmlkYXkgPSB1dGNXZWVrZGF5KDUpO1xuZXhwb3J0IHZhciB1dGNTYXR1cmRheSA9IHV0Y1dlZWtkYXkoNik7XG5cbmV4cG9ydCB2YXIgdXRjU3VuZGF5cyA9IHV0Y1N1bmRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjTW9uZGF5cyA9IHV0Y01vbmRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjVHVlc2RheXMgPSB1dGNUdWVzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNXZWRuZXNkYXlzID0gdXRjV2VkbmVzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNUaHVyc2RheXMgPSB1dGNUaHVyc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjRnJpZGF5cyA9IHV0Y0ZyaWRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjU2F0dXJkYXlzID0gdXRjU2F0dXJkYXkucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcblxudmFyIHV0Y01vbnRoID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ0RhdGUoMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDTW9udGgoZGF0ZS5nZXRVVENNb250aCgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0VVRDTW9udGgoKSAtIHN0YXJ0LmdldFVUQ01vbnRoKCkgKyAoZW5kLmdldFVUQ0Z1bGxZZWFyKCkgLSBzdGFydC5nZXRVVENGdWxsWWVhcigpKSAqIDEyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNb250aCgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y01vbnRoO1xuZXhwb3J0IHZhciB1dGNNb250aHMgPSB1dGNNb250aC5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuXG52YXIgdXRjWWVhciA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRVVENNb250aCgwLCAxKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRVVENGdWxsWWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZC5nZXRVVENGdWxsWWVhcigpIC0gc3RhcnQuZ2V0VVRDRnVsbFllYXIoKTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbn0pO1xuXG4vLyBBbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgc2ltcGxlIGNhc2UuXG51dGNZZWFyLmV2ZXJ5ID0gZnVuY3Rpb24oaykge1xuICByZXR1cm4gIWlzRmluaXRlKGsgPSBNYXRoLmZsb29yKGspKSB8fCAhKGsgPiAwKSA/IG51bGwgOiBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSAvIGspICogayk7XG4gICAgZGF0ZS5zZXRVVENNb250aCgwLCAxKTtcbiAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKyBzdGVwICogayk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgdXRjWWVhcjtcbmV4cG9ydCB2YXIgdXRjWWVhcnMgPSB1dGNZZWFyLnJhbmdlO1xuIiwiaW1wb3J0IHtiaXNlY3RvciwgdGlja1N0ZXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtkdXJhdGlvbkRheSwgZHVyYXRpb25Ib3VyLCBkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25Nb250aCwgZHVyYXRpb25TZWNvbmQsIGR1cmF0aW9uV2VlaywgZHVyYXRpb25ZZWFyfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IG1pbGxpc2Vjb25kIGZyb20gXCIuL21pbGxpc2Vjb25kLmpzXCI7XG5pbXBvcnQgc2Vjb25kIGZyb20gXCIuL3NlY29uZC5qc1wiO1xuaW1wb3J0IG1pbnV0ZSBmcm9tIFwiLi9taW51dGUuanNcIjtcbmltcG9ydCBob3VyIGZyb20gXCIuL2hvdXIuanNcIjtcbmltcG9ydCBkYXkgZnJvbSBcIi4vZGF5LmpzXCI7XG5pbXBvcnQge3N1bmRheSBhcyB3ZWVrfSBmcm9tIFwiLi93ZWVrLmpzXCI7XG5pbXBvcnQgbW9udGggZnJvbSBcIi4vbW9udGguanNcIjtcbmltcG9ydCB5ZWFyIGZyb20gXCIuL3llYXIuanNcIjtcbmltcG9ydCB1dGNNaW51dGUgZnJvbSBcIi4vdXRjTWludXRlLmpzXCI7XG5pbXBvcnQgdXRjSG91ciBmcm9tIFwiLi91dGNIb3VyLmpzXCI7XG5pbXBvcnQgdXRjRGF5IGZyb20gXCIuL3V0Y0RheS5qc1wiO1xuaW1wb3J0IHt1dGNTdW5kYXkgYXMgdXRjV2Vla30gZnJvbSBcIi4vdXRjV2Vlay5qc1wiO1xuaW1wb3J0IHV0Y01vbnRoIGZyb20gXCIuL3V0Y01vbnRoLmpzXCI7XG5pbXBvcnQgdXRjWWVhciBmcm9tIFwiLi91dGNZZWFyLmpzXCI7XG5cbmZ1bmN0aW9uIHRpY2tlcih5ZWFyLCBtb250aCwgd2VlaywgZGF5LCBob3VyLCBtaW51dGUpIHtcblxuICBjb25zdCB0aWNrSW50ZXJ2YWxzID0gW1xuICAgIFtzZWNvbmQsICAxLCAgICAgIGR1cmF0aW9uU2Vjb25kXSxcbiAgICBbc2Vjb25kLCAgNSwgIDUgKiBkdXJhdGlvblNlY29uZF0sXG4gICAgW3NlY29uZCwgMTUsIDE1ICogZHVyYXRpb25TZWNvbmRdLFxuICAgIFtzZWNvbmQsIDMwLCAzMCAqIGR1cmF0aW9uU2Vjb25kXSxcbiAgICBbbWludXRlLCAgMSwgICAgICBkdXJhdGlvbk1pbnV0ZV0sXG4gICAgW21pbnV0ZSwgIDUsICA1ICogZHVyYXRpb25NaW51dGVdLFxuICAgIFttaW51dGUsIDE1LCAxNSAqIGR1cmF0aW9uTWludXRlXSxcbiAgICBbbWludXRlLCAzMCwgMzAgKiBkdXJhdGlvbk1pbnV0ZV0sXG4gICAgWyAgaG91ciwgIDEsICAgICAgZHVyYXRpb25Ib3VyICBdLFxuICAgIFsgIGhvdXIsICAzLCAgMyAqIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICBob3VyLCAgNiwgIDYgKiBkdXJhdGlvbkhvdXIgIF0sXG4gICAgWyAgaG91ciwgMTIsIDEyICogZHVyYXRpb25Ib3VyICBdLFxuICAgIFsgICBkYXksICAxLCAgICAgIGR1cmF0aW9uRGF5ICAgXSxcbiAgICBbICAgZGF5LCAgMiwgIDIgKiBkdXJhdGlvbkRheSAgIF0sXG4gICAgWyAgd2VlaywgIDEsICAgICAgZHVyYXRpb25XZWVrICBdLFxuICAgIFsgbW9udGgsICAxLCAgICAgIGR1cmF0aW9uTW9udGggXSxcbiAgICBbIG1vbnRoLCAgMywgIDMgKiBkdXJhdGlvbk1vbnRoIF0sXG4gICAgWyAgeWVhciwgIDEsICAgICAgZHVyYXRpb25ZZWFyICBdXG4gIF07XG5cbiAgZnVuY3Rpb24gdGlja3Moc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gICAgY29uc3QgcmV2ZXJzZSA9IHN0b3AgPCBzdGFydDtcbiAgICBpZiAocmV2ZXJzZSkgW3N0YXJ0LCBzdG9wXSA9IFtzdG9wLCBzdGFydF07XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBjb3VudCAmJiB0eXBlb2YgY291bnQucmFuZ2UgPT09IFwiZnVuY3Rpb25cIiA/IGNvdW50IDogdGlja0ludGVydmFsKHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gICAgY29uc3QgdGlja3MgPSBpbnRlcnZhbCA/IGludGVydmFsLnJhbmdlKHN0YXJ0LCArc3RvcCArIDEpIDogW107IC8vIGluY2x1c2l2ZSBzdG9wXG4gICAgcmV0dXJuIHJldmVyc2UgPyB0aWNrcy5yZXZlcnNlKCkgOiB0aWNrcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpY2tJbnRlcnZhbChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBNYXRoLmFicyhzdG9wIC0gc3RhcnQpIC8gY291bnQ7XG4gICAgY29uc3QgaSA9IGJpc2VjdG9yKChbLCwgc3RlcF0pID0+IHN0ZXApLnJpZ2h0KHRpY2tJbnRlcnZhbHMsIHRhcmdldCk7XG4gICAgaWYgKGkgPT09IHRpY2tJbnRlcnZhbHMubGVuZ3RoKSByZXR1cm4geWVhci5ldmVyeSh0aWNrU3RlcChzdGFydCAvIGR1cmF0aW9uWWVhciwgc3RvcCAvIGR1cmF0aW9uWWVhciwgY291bnQpKTtcbiAgICBpZiAoaSA9PT0gMCkgcmV0dXJuIG1pbGxpc2Vjb25kLmV2ZXJ5KE1hdGgubWF4KHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCksIDEpKTtcbiAgICBjb25zdCBbdCwgc3RlcF0gPSB0aWNrSW50ZXJ2YWxzW3RhcmdldCAvIHRpY2tJbnRlcnZhbHNbaSAtIDFdWzJdIDwgdGlja0ludGVydmFsc1tpXVsyXSAvIHRhcmdldCA/IGkgLSAxIDogaV07XG4gICAgcmV0dXJuIHQuZXZlcnkoc3RlcCk7XG4gIH1cblxuICByZXR1cm4gW3RpY2tzLCB0aWNrSW50ZXJ2YWxdO1xufVxuXG5jb25zdCBbdXRjVGlja3MsIHV0Y1RpY2tJbnRlcnZhbF0gPSB0aWNrZXIodXRjWWVhciwgdXRjTW9udGgsIHV0Y1dlZWssIHV0Y0RheSwgdXRjSG91ciwgdXRjTWludXRlKTtcbmNvbnN0IFt0aW1lVGlja3MsIHRpbWVUaWNrSW50ZXJ2YWxdID0gdGlja2VyKHllYXIsIG1vbnRoLCB3ZWVrLCBkYXksIGhvdXIsIG1pbnV0ZSk7XG5cbmV4cG9ydCB7dXRjVGlja3MsIHV0Y1RpY2tJbnRlcnZhbCwgdGltZVRpY2tzLCB0aW1lVGlja0ludGVydmFsfTtcbiIsImltcG9ydCB7XG4gIHRpbWVEYXksXG4gIHRpbWVTdW5kYXksXG4gIHRpbWVNb25kYXksXG4gIHRpbWVUaHVyc2RheSxcbiAgdGltZVllYXIsXG4gIHV0Y0RheSxcbiAgdXRjU3VuZGF5LFxuICB1dGNNb25kYXksXG4gIHV0Y1RodXJzZGF5LFxuICB1dGNZZWFyXG59IGZyb20gXCJkMy10aW1lXCI7XG5cbmZ1bmN0aW9uIGxvY2FsRGF0ZShkKSB7XG4gIGlmICgwIDw9IGQueSAmJiBkLnkgPCAxMDApIHtcbiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKC0xLCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKTtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKGQueSk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKGQueSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCk7XG59XG5cbmZ1bmN0aW9uIHV0Y0RhdGUoZCkge1xuICBpZiAoMCA8PSBkLnkgJiYgZC55IDwgMTAwKSB7XG4gICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQygtMSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCkpO1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoZC55KTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoZC55LCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKSk7XG59XG5cbmZ1bmN0aW9uIG5ld0RhdGUoeSwgbSwgZCkge1xuICByZXR1cm4ge3k6IHksIG06IG0sIGQ6IGQsIEg6IDAsIE06IDAsIFM6IDAsIEw6IDB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXRMb2NhbGUobG9jYWxlKSB7XG4gIHZhciBsb2NhbGVfZGF0ZVRpbWUgPSBsb2NhbGUuZGF0ZVRpbWUsXG4gICAgICBsb2NhbGVfZGF0ZSA9IGxvY2FsZS5kYXRlLFxuICAgICAgbG9jYWxlX3RpbWUgPSBsb2NhbGUudGltZSxcbiAgICAgIGxvY2FsZV9wZXJpb2RzID0gbG9jYWxlLnBlcmlvZHMsXG4gICAgICBsb2NhbGVfd2Vla2RheXMgPSBsb2NhbGUuZGF5cyxcbiAgICAgIGxvY2FsZV9zaG9ydFdlZWtkYXlzID0gbG9jYWxlLnNob3J0RGF5cyxcbiAgICAgIGxvY2FsZV9tb250aHMgPSBsb2NhbGUubW9udGhzLFxuICAgICAgbG9jYWxlX3Nob3J0TW9udGhzID0gbG9jYWxlLnNob3J0TW9udGhzO1xuXG4gIHZhciBwZXJpb2RSZSA9IGZvcm1hdFJlKGxvY2FsZV9wZXJpb2RzKSxcbiAgICAgIHBlcmlvZExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfcGVyaW9kcyksXG4gICAgICB3ZWVrZGF5UmUgPSBmb3JtYXRSZShsb2NhbGVfd2Vla2RheXMpLFxuICAgICAgd2Vla2RheUxvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfd2Vla2RheXMpLFxuICAgICAgc2hvcnRXZWVrZGF5UmUgPSBmb3JtYXRSZShsb2NhbGVfc2hvcnRXZWVrZGF5cyksXG4gICAgICBzaG9ydFdlZWtkYXlMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3Nob3J0V2Vla2RheXMpLFxuICAgICAgbW9udGhSZSA9IGZvcm1hdFJlKGxvY2FsZV9tb250aHMpLFxuICAgICAgbW9udGhMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX21vbnRocyksXG4gICAgICBzaG9ydE1vbnRoUmUgPSBmb3JtYXRSZShsb2NhbGVfc2hvcnRNb250aHMpLFxuICAgICAgc2hvcnRNb250aExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfc2hvcnRNb250aHMpO1xuXG4gIHZhciBmb3JtYXRzID0ge1xuICAgIFwiYVwiOiBmb3JtYXRTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IGZvcm1hdFdlZWtkYXksXG4gICAgXCJiXCI6IGZvcm1hdFNob3J0TW9udGgsXG4gICAgXCJCXCI6IGZvcm1hdE1vbnRoLFxuICAgIFwiY1wiOiBudWxsLFxuICAgIFwiZFwiOiBmb3JtYXREYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBmb3JtYXREYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBmb3JtYXRNaWNyb3NlY29uZHMsXG4gICAgXCJnXCI6IGZvcm1hdFllYXJJU08sXG4gICAgXCJHXCI6IGZvcm1hdEZ1bGxZZWFySVNPLFxuICAgIFwiSFwiOiBmb3JtYXRIb3VyMjQsXG4gICAgXCJJXCI6IGZvcm1hdEhvdXIxMixcbiAgICBcImpcIjogZm9ybWF0RGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBmb3JtYXRNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IGZvcm1hdE1vbnRoTnVtYmVyLFxuICAgIFwiTVwiOiBmb3JtYXRNaW51dGVzLFxuICAgIFwicFwiOiBmb3JtYXRQZXJpb2QsXG4gICAgXCJxXCI6IGZvcm1hdFF1YXJ0ZXIsXG4gICAgXCJRXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXAsXG4gICAgXCJzXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBmb3JtYXRTZWNvbmRzLFxuICAgIFwidVwiOiBmb3JtYXRXZWVrZGF5TnVtYmVyTW9uZGF5LFxuICAgIFwiVVwiOiBmb3JtYXRXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBmb3JtYXRXZWVrTnVtYmVySVNPLFxuICAgIFwid1wiOiBmb3JtYXRXZWVrZGF5TnVtYmVyU3VuZGF5LFxuICAgIFwiV1wiOiBmb3JtYXRXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBudWxsLFxuICAgIFwiWFwiOiBudWxsLFxuICAgIFwieVwiOiBmb3JtYXRZZWFyLFxuICAgIFwiWVwiOiBmb3JtYXRGdWxsWWVhcixcbiAgICBcIlpcIjogZm9ybWF0Wm9uZSxcbiAgICBcIiVcIjogZm9ybWF0TGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICB2YXIgdXRjRm9ybWF0cyA9IHtcbiAgICBcImFcIjogZm9ybWF0VVRDU2hvcnRXZWVrZGF5LFxuICAgIFwiQVwiOiBmb3JtYXRVVENXZWVrZGF5LFxuICAgIFwiYlwiOiBmb3JtYXRVVENTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBmb3JtYXRVVENNb250aCxcbiAgICBcImNcIjogbnVsbCxcbiAgICBcImRcIjogZm9ybWF0VVRDRGF5T2ZNb250aCxcbiAgICBcImVcIjogZm9ybWF0VVRDRGF5T2ZNb250aCxcbiAgICBcImZcIjogZm9ybWF0VVRDTWljcm9zZWNvbmRzLFxuICAgIFwiZ1wiOiBmb3JtYXRVVENZZWFySVNPLFxuICAgIFwiR1wiOiBmb3JtYXRVVENGdWxsWWVhcklTTyxcbiAgICBcIkhcIjogZm9ybWF0VVRDSG91cjI0LFxuICAgIFwiSVwiOiBmb3JtYXRVVENIb3VyMTIsXG4gICAgXCJqXCI6IGZvcm1hdFVUQ0RheU9mWWVhcixcbiAgICBcIkxcIjogZm9ybWF0VVRDTWlsbGlzZWNvbmRzLFxuICAgIFwibVwiOiBmb3JtYXRVVENNb250aE51bWJlcixcbiAgICBcIk1cIjogZm9ybWF0VVRDTWludXRlcyxcbiAgICBcInBcIjogZm9ybWF0VVRDUGVyaW9kLFxuICAgIFwicVwiOiBmb3JtYXRVVENRdWFydGVyLFxuICAgIFwiUVwiOiBmb3JtYXRVbml4VGltZXN0YW1wLFxuICAgIFwic1wiOiBmb3JtYXRVbml4VGltZXN0YW1wU2Vjb25kcyxcbiAgICBcIlNcIjogZm9ybWF0VVRDU2Vjb25kcyxcbiAgICBcInVcIjogZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheSxcbiAgICBcIlVcIjogZm9ybWF0VVRDV2Vla051bWJlclN1bmRheSxcbiAgICBcIlZcIjogZm9ybWF0VVRDV2Vla051bWJlcklTTyxcbiAgICBcIndcIjogZm9ybWF0VVRDV2Vla2RheU51bWJlclN1bmRheSxcbiAgICBcIldcIjogZm9ybWF0VVRDV2Vla051bWJlck1vbmRheSxcbiAgICBcInhcIjogbnVsbCxcbiAgICBcIlhcIjogbnVsbCxcbiAgICBcInlcIjogZm9ybWF0VVRDWWVhcixcbiAgICBcIllcIjogZm9ybWF0VVRDRnVsbFllYXIsXG4gICAgXCJaXCI6IGZvcm1hdFVUQ1pvbmUsXG4gICAgXCIlXCI6IGZvcm1hdExpdGVyYWxQZXJjZW50XG4gIH07XG5cbiAgdmFyIHBhcnNlcyA9IHtcbiAgICBcImFcIjogcGFyc2VTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IHBhcnNlV2Vla2RheSxcbiAgICBcImJcIjogcGFyc2VTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBwYXJzZU1vbnRoLFxuICAgIFwiY1wiOiBwYXJzZUxvY2FsZURhdGVUaW1lLFxuICAgIFwiZFwiOiBwYXJzZURheU9mTW9udGgsXG4gICAgXCJlXCI6IHBhcnNlRGF5T2ZNb250aCxcbiAgICBcImZcIjogcGFyc2VNaWNyb3NlY29uZHMsXG4gICAgXCJnXCI6IHBhcnNlWWVhcixcbiAgICBcIkdcIjogcGFyc2VGdWxsWWVhcixcbiAgICBcIkhcIjogcGFyc2VIb3VyMjQsXG4gICAgXCJJXCI6IHBhcnNlSG91cjI0LFxuICAgIFwialwiOiBwYXJzZURheU9mWWVhcixcbiAgICBcIkxcIjogcGFyc2VNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IHBhcnNlTW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IHBhcnNlTWludXRlcyxcbiAgICBcInBcIjogcGFyc2VQZXJpb2QsXG4gICAgXCJxXCI6IHBhcnNlUXVhcnRlcixcbiAgICBcIlFcIjogcGFyc2VVbml4VGltZXN0YW1wLFxuICAgIFwic1wiOiBwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBwYXJzZVNlY29uZHMsXG4gICAgXCJ1XCI6IHBhcnNlV2Vla2RheU51bWJlck1vbmRheSxcbiAgICBcIlVcIjogcGFyc2VXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBwYXJzZVdlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IHBhcnNlV2Vla2RheU51bWJlclN1bmRheSxcbiAgICBcIldcIjogcGFyc2VXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBwYXJzZUxvY2FsZURhdGUsXG4gICAgXCJYXCI6IHBhcnNlTG9jYWxlVGltZSxcbiAgICBcInlcIjogcGFyc2VZZWFyLFxuICAgIFwiWVwiOiBwYXJzZUZ1bGxZZWFyLFxuICAgIFwiWlwiOiBwYXJzZVpvbmUsXG4gICAgXCIlXCI6IHBhcnNlTGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICAvLyBUaGVzZSByZWN1cnNpdmUgZGlyZWN0aXZlIGRlZmluaXRpb25zIG11c3QgYmUgZGVmZXJyZWQuXG4gIGZvcm1hdHMueCA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuWCA9IG5ld0Zvcm1hdChsb2NhbGVfdGltZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuYyA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZVRpbWUsIGZvcm1hdHMpO1xuICB1dGNGb3JtYXRzLnggPSBuZXdGb3JtYXQobG9jYWxlX2RhdGUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLlggPSBuZXdGb3JtYXQobG9jYWxlX3RpbWUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLmMgPSBuZXdGb3JtYXQobG9jYWxlX2RhdGVUaW1lLCB1dGNGb3JtYXRzKTtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyLCBmb3JtYXRzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBbXSxcbiAgICAgICAgICBpID0gLTEsXG4gICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgICAgYyxcbiAgICAgICAgICBwYWQsXG4gICAgICAgICAgZm9ybWF0O1xuXG4gICAgICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSk7XG5cbiAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIuY2hhckNvZGVBdChpKSA9PT0gMzcpIHtcbiAgICAgICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgICAgIGlmICgocGFkID0gcGFkc1tjID0gc3BlY2lmaWVyLmNoYXJBdCgrK2kpXSkgIT0gbnVsbCkgYyA9IHNwZWNpZmllci5jaGFyQXQoKytpKTtcbiAgICAgICAgICBlbHNlIHBhZCA9IGMgPT09IFwiZVwiID8gXCIgXCIgOiBcIjBcIjtcbiAgICAgICAgICBpZiAoZm9ybWF0ID0gZm9ybWF0c1tjXSkgYyA9IGZvcm1hdChkYXRlLCBwYWQpO1xuICAgICAgICAgIHN0cmluZy5wdXNoKGMpO1xuICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgcmV0dXJuIHN0cmluZy5qb2luKFwiXCIpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBuZXdQYXJzZShzcGVjaWZpZXIsIFopIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICB2YXIgZCA9IG5ld0RhdGUoMTkwMCwgdW5kZWZpbmVkLCAxKSxcbiAgICAgICAgICBpID0gcGFyc2VTcGVjaWZpZXIoZCwgc3BlY2lmaWVyLCBzdHJpbmcgKz0gXCJcIiwgMCksXG4gICAgICAgICAgd2VlaywgZGF5O1xuICAgICAgaWYgKGkgIT0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIC8vIElmIGEgVU5JWCB0aW1lc3RhbXAgaXMgc3BlY2lmaWVkLCByZXR1cm4gaXQuXG4gICAgICBpZiAoXCJRXCIgaW4gZCkgcmV0dXJuIG5ldyBEYXRlKGQuUSk7XG4gICAgICBpZiAoXCJzXCIgaW4gZCkgcmV0dXJuIG5ldyBEYXRlKGQucyAqIDEwMDAgKyAoXCJMXCIgaW4gZCA/IGQuTCA6IDApKTtcblxuICAgICAgLy8gSWYgdGhpcyBpcyB1dGNQYXJzZSwgbmV2ZXIgdXNlIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAgICAgIGlmIChaICYmICEoXCJaXCIgaW4gZCkpIGQuWiA9IDA7XG5cbiAgICAgIC8vIFRoZSBhbS1wbSBmbGFnIGlzIDAgZm9yIEFNLCBhbmQgMSBmb3IgUE0uXG4gICAgICBpZiAoXCJwXCIgaW4gZCkgZC5IID0gZC5IICUgMTIgKyBkLnAgKiAxMjtcblxuICAgICAgLy8gSWYgdGhlIG1vbnRoIHdhcyBub3Qgc3BlY2lmaWVkLCBpbmhlcml0IGZyb20gdGhlIHF1YXJ0ZXIuXG4gICAgICBpZiAoZC5tID09PSB1bmRlZmluZWQpIGQubSA9IFwicVwiIGluIGQgPyBkLnEgOiAwO1xuXG4gICAgICAvLyBDb252ZXJ0IGRheS1vZi13ZWVrIGFuZCB3ZWVrLW9mLXllYXIgdG8gZGF5LW9mLXllYXIuXG4gICAgICBpZiAoXCJWXCIgaW4gZCkge1xuICAgICAgICBpZiAoZC5WIDwgMSB8fCBkLlYgPiA1MykgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmICghKFwid1wiIGluIGQpKSBkLncgPSAxO1xuICAgICAgICBpZiAoXCJaXCIgaW4gZCkge1xuICAgICAgICAgIHdlZWsgPSB1dGNEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSksIGRheSA9IHdlZWsuZ2V0VVRDRGF5KCk7XG4gICAgICAgICAgd2VlayA9IGRheSA+IDQgfHwgZGF5ID09PSAwID8gdXRjTW9uZGF5LmNlaWwod2VlaykgOiB1dGNNb25kYXkod2Vlayk7XG4gICAgICAgICAgd2VlayA9IHV0Y0RheS5vZmZzZXQod2VlaywgKGQuViAtIDEpICogNyk7XG4gICAgICAgICAgZC55ID0gd2Vlay5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgICAgIGQubSA9IHdlZWsuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICBkLmQgPSB3ZWVrLmdldFVUQ0RhdGUoKSArIChkLncgKyA2KSAlIDc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2VlayA9IGxvY2FsRGF0ZShuZXdEYXRlKGQueSwgMCwgMSkpLCBkYXkgPSB3ZWVrLmdldERheSgpO1xuICAgICAgICAgIHdlZWsgPSBkYXkgPiA0IHx8IGRheSA9PT0gMCA/IHRpbWVNb25kYXkuY2VpbCh3ZWVrKSA6IHRpbWVNb25kYXkod2Vlayk7XG4gICAgICAgICAgd2VlayA9IHRpbWVEYXkub2Zmc2V0KHdlZWssIChkLlYgLSAxKSAqIDcpO1xuICAgICAgICAgIGQueSA9IHdlZWsuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICBkLm0gPSB3ZWVrLmdldE1vbnRoKCk7XG4gICAgICAgICAgZC5kID0gd2Vlay5nZXREYXRlKCkgKyAoZC53ICsgNikgJSA3O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFwiV1wiIGluIGQgfHwgXCJVXCIgaW4gZCkge1xuICAgICAgICBpZiAoIShcIndcIiBpbiBkKSkgZC53ID0gXCJ1XCIgaW4gZCA/IGQudSAlIDcgOiBcIldcIiBpbiBkID8gMSA6IDA7XG4gICAgICAgIGRheSA9IFwiWlwiIGluIGQgPyB1dGNEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSkuZ2V0VVRDRGF5KCkgOiBsb2NhbERhdGUobmV3RGF0ZShkLnksIDAsIDEpKS5nZXREYXkoKTtcbiAgICAgICAgZC5tID0gMDtcbiAgICAgICAgZC5kID0gXCJXXCIgaW4gZCA/IChkLncgKyA2KSAlIDcgKyBkLlcgKiA3IC0gKGRheSArIDUpICUgNyA6IGQudyArIGQuVSAqIDcgLSAoZGF5ICsgNikgJSA3O1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBhIHRpbWUgem9uZSBpcyBzcGVjaWZpZWQsIGFsbCBmaWVsZHMgYXJlIGludGVycHJldGVkIGFzIFVUQyBhbmQgdGhlblxuICAgICAgLy8gb2Zmc2V0IGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIHRpbWUgem9uZS5cbiAgICAgIGlmIChcIlpcIiBpbiBkKSB7XG4gICAgICAgIGQuSCArPSBkLlogLyAxMDAgfCAwO1xuICAgICAgICBkLk0gKz0gZC5aICUgMTAwO1xuICAgICAgICByZXR1cm4gdXRjRGF0ZShkKTtcbiAgICAgIH1cblxuICAgICAgLy8gT3RoZXJ3aXNlLCBhbGwgZmllbGRzIGFyZSBpbiBsb2NhbCB0aW1lLlxuICAgICAgcmV0dXJuIGxvY2FsRGF0ZShkKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTcGVjaWZpZXIoZCwgc3BlY2lmaWVyLCBzdHJpbmcsIGopIHtcbiAgICB2YXIgaSA9IDAsXG4gICAgICAgIG4gPSBzcGVjaWZpZXIubGVuZ3RoLFxuICAgICAgICBtID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgYyxcbiAgICAgICAgcGFyc2U7XG5cbiAgICB3aGlsZSAoaSA8IG4pIHtcbiAgICAgIGlmIChqID49IG0pIHJldHVybiAtMTtcbiAgICAgIGMgPSBzcGVjaWZpZXIuY2hhckNvZGVBdChpKyspO1xuICAgICAgaWYgKGMgPT09IDM3KSB7XG4gICAgICAgIGMgPSBzcGVjaWZpZXIuY2hhckF0KGkrKyk7XG4gICAgICAgIHBhcnNlID0gcGFyc2VzW2MgaW4gcGFkcyA/IHNwZWNpZmllci5jaGFyQXQoaSsrKSA6IGNdO1xuICAgICAgICBpZiAoIXBhcnNlIHx8ICgoaiA9IHBhcnNlKGQsIHN0cmluZywgaikpIDwgMCkpIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSBpZiAoYyAhPSBzdHJpbmcuY2hhckNvZGVBdChqKyspKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gajtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlUGVyaW9kKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gcGVyaW9kUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQucCA9IHBlcmlvZExvb2t1cC5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTaG9ydFdlZWtkYXkoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBzaG9ydFdlZWtkYXlSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC53ID0gc2hvcnRXZWVrZGF5TG9va3VwLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSB3ZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQudyA9IHdlZWtkYXlMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU2hvcnRNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHNob3J0TW9udGhSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5tID0gc2hvcnRNb250aExvb2t1cC5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IG1vbnRoUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQubSA9IG1vbnRoTG9va3VwLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfZGF0ZVRpbWUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV9kYXRlLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfdGltZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0RGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldERheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldE1vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UGVyaW9kKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldEhvdXJzKCkgPj0gMTIpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFF1YXJ0ZXIoZCkge1xuICAgIHJldHVybiAxICsgfn4oZC5nZXRNb250aCgpIC8gMyk7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENTaG9ydFdlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRXZWVrZGF5c1tkLmdldFVUQ0RheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfd2Vla2RheXNbZC5nZXRVVENEYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENTaG9ydE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0TW9udGhzW2QuZ2V0VVRDTW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9tb250aHNbZC5nZXRVVENNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1BlcmlvZChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9wZXJpb2RzWysoZC5nZXRVVENIb3VycygpID49IDEyKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENRdWFydGVyKGQpIHtcbiAgICByZXR1cm4gMSArIH5+KGQuZ2V0VVRDTW9udGgoKSAvIDMpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXQ6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIGYgPSBuZXdGb3JtYXQoc3BlY2lmaWVyICs9IFwiXCIsIGZvcm1hdHMpO1xuICAgICAgZi50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIGY7XG4gICAgfSxcbiAgICBwYXJzZTogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgcCA9IG5ld1BhcnNlKHNwZWNpZmllciArPSBcIlwiLCBmYWxzZSk7XG4gICAgICBwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gcDtcbiAgICB9LFxuICAgIHV0Y0Zvcm1hdDogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgZiA9IG5ld0Zvcm1hdChzcGVjaWZpZXIgKz0gXCJcIiwgdXRjRm9ybWF0cyk7XG4gICAgICBmLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gZjtcbiAgICB9LFxuICAgIHV0Y1BhcnNlOiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBwID0gbmV3UGFyc2Uoc3BlY2lmaWVyICs9IFwiXCIsIHRydWUpO1xuICAgICAgcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9O1xufVxuXG52YXIgcGFkcyA9IHtcIi1cIjogXCJcIiwgXCJfXCI6IFwiIFwiLCBcIjBcIjogXCIwXCJ9LFxuICAgIG51bWJlclJlID0gL15cXHMqXFxkKy8sIC8vIG5vdGU6IGlnbm9yZXMgbmV4dCBkaXJlY3RpdmVcbiAgICBwZXJjZW50UmUgPSAvXiUvLFxuICAgIHJlcXVvdGVSZSA9IC9bXFxcXF4kKis/fFtcXF0oKS57fV0vZztcblxuZnVuY3Rpb24gcGFkKHZhbHVlLCBmaWxsLCB3aWR0aCkge1xuICB2YXIgc2lnbiA9IHZhbHVlIDwgMCA/IFwiLVwiIDogXCJcIixcbiAgICAgIHN0cmluZyA9IChzaWduID8gLXZhbHVlIDogdmFsdWUpICsgXCJcIixcbiAgICAgIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIHJldHVybiBzaWduICsgKGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbihmaWxsKSArIHN0cmluZyA6IHN0cmluZyk7XG59XG5cbmZ1bmN0aW9uIHJlcXVvdGUocykge1xuICByZXR1cm4gcy5yZXBsYWNlKHJlcXVvdGVSZSwgXCJcXFxcJCZcIik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFJlKG5hbWVzKSB7XG4gIHJldHVybiBuZXcgUmVnRXhwKFwiXig/OlwiICsgbmFtZXMubWFwKHJlcXVvdGUpLmpvaW4oXCJ8XCIpICsgXCIpXCIsIFwiaVwiKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TG9va3VwKG5hbWVzKSB7XG4gIHJldHVybiBuZXcgTWFwKG5hbWVzLm1hcCgobmFtZSwgaSkgPT4gW25hbWUudG9Mb3dlckNhc2UoKSwgaV0pKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrZGF5TnVtYmVyU3VuZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gKGQudyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla2RheU51bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IChkLnUgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJTdW5kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5VID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVySVNPKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuViA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla051bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlcgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUZ1bGxZZWFyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA0KSk7XG4gIHJldHVybiBuID8gKGQueSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLnkgPSArblswXSArICgrblswXSA+IDY4ID8gMTkwMCA6IDIwMDApLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWm9uZShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSAvXihaKXwoWystXVxcZFxcZCkoPzo6PyhcXGRcXGQpKT8vLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA2KSk7XG4gIHJldHVybiBuID8gKGQuWiA9IG5bMV0gPyAwIDogLShuWzJdICsgKG5bM10gfHwgXCIwMFwiKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VRdWFydGVyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gKGQucSA9IG5bMF0gKiAzIC0gMywgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1vbnRoTnVtYmVyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQubSA9IG5bMF0gLSAxLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF5T2ZNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLmQgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZURheU9mWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMykpO1xuICByZXR1cm4gbiA/IChkLm0gPSAwLCBkLmQgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUhvdXIyNChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLkggPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pbnV0ZXMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5NID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VTZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuUyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWlsbGlzZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAzKSk7XG4gIHJldHVybiBuID8gKGQuTCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWljcm9zZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA2KSk7XG4gIHJldHVybiBuID8gKGQuTCA9IE1hdGguZmxvb3IoblswXSAvIDEwMDApLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGl0ZXJhbFBlcmNlbnQoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gcGVyY2VudFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gaSArIG5bMF0ubGVuZ3RoIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVW5peFRpbWVzdGFtcChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gIHJldHVybiBuID8gKGQuUSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVW5peFRpbWVzdGFtcFNlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICByZXR1cm4gbiA/IChkLnMgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXlPZk1vbnRoKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldERhdGUoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhvdXIyNChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRIb3VycygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SG91cjEyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEhvdXJzKCkgJSAxMiB8fCAxMiwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERheU9mWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoMSArIHRpbWVEYXkuY291bnQodGltZVllYXIoZCksIGQpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TWlsbGlzZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldE1pbGxpc2Vjb25kcygpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TWljcm9zZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIGZvcm1hdE1pbGxpc2Vjb25kcyhkLCBwKSArIFwiMDAwXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1vbnRoTnVtYmVyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldE1vbnRoKCkgKyAxLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TWludXRlcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNaW51dGVzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRTZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFNlY29uZHMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXkoZCkge1xuICB2YXIgZGF5ID0gZC5nZXREYXkoKTtcbiAgcmV0dXJuIGRheSA9PT0gMCA/IDcgOiBkYXk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJTdW5kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHRpbWVTdW5kYXkuY291bnQodGltZVllYXIoZCkgLSAxLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGRJU08oZCkge1xuICB2YXIgZGF5ID0gZC5nZXREYXkoKTtcbiAgcmV0dXJuIChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdGltZVRodXJzZGF5KGQpIDogdGltZVRodXJzZGF5LmNlaWwoZCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJJU08oZCwgcCkge1xuICBkID0gZElTTyhkKTtcbiAgcmV0dXJuIHBhZCh0aW1lVGh1cnNkYXkuY291bnQodGltZVllYXIoZCksIGQpICsgKHRpbWVZZWFyKGQpLmdldERheSgpID09PSA0KSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXkoZCkge1xuICByZXR1cm4gZC5nZXREYXkoKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlck1vbmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodGltZU1vbmRheS5jb3VudCh0aW1lWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0WWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0WWVhcklTTyhkLCBwKSB7XG4gIGQgPSBkSVNPKGQpO1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZ1bGxZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEZ1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZ1bGxZZWFySVNPKGQsIHApIHtcbiAgdmFyIGRheSA9IGQuZ2V0RGF5KCk7XG4gIGQgPSAoZGF5ID49IDQgfHwgZGF5ID09PSAwKSA/IHRpbWVUaHVyc2RheShkKSA6IHRpbWVUaHVyc2RheS5jZWlsKGQpO1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0Wm9uZShkKSB7XG4gIHZhciB6ID0gZC5nZXRUaW1lem9uZU9mZnNldCgpO1xuICByZXR1cm4gKHogPiAwID8gXCItXCIgOiAoeiAqPSAtMSwgXCIrXCIpKVxuICAgICAgKyBwYWQoeiAvIDYwIHwgMCwgXCIwXCIsIDIpXG4gICAgICArIHBhZCh6ICUgNjAsIFwiMFwiLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRGF5T2ZNb250aChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENEYXRlKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENIb3VyMjQoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDSG91cnMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0hvdXIxMihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENEYXlPZlllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKDEgKyB1dGNEYXkuY291bnQodXRjWWVhcihkKSwgZCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWxsaXNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWNyb3NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gZm9ybWF0VVRDTWlsbGlzZWNvbmRzKGQsIHApICsgXCIwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTW9udGhOdW1iZXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTW9udGgoKSArIDEsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaW51dGVzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01pbnV0ZXMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDU2Vjb25kcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheShkKSB7XG4gIHZhciBkb3cgPSBkLmdldFVUQ0RheSgpO1xuICByZXR1cm4gZG93ID09PSAwID8gNyA6IGRvdztcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlclN1bmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodXRjU3VuZGF5LmNvdW50KHV0Y1llYXIoZCkgLSAxLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIFVUQ2RJU08oZCkge1xuICB2YXIgZGF5ID0gZC5nZXRVVENEYXkoKTtcbiAgcmV0dXJuIChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdXRjVGh1cnNkYXkoZCkgOiB1dGNUaHVyc2RheS5jZWlsKGQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrTnVtYmVySVNPKGQsIHApIHtcbiAgZCA9IFVUQ2RJU08oZCk7XG4gIHJldHVybiBwYWQodXRjVGh1cnNkYXkuY291bnQodXRjWWVhcihkKSwgZCkgKyAodXRjWWVhcihkKS5nZXRVVENEYXkoKSA9PT0gNCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5KGQpIHtcbiAgcmV0dXJuIGQuZ2V0VVRDRGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHV0Y01vbmRheS5jb3VudCh1dGNZZWFyKGQpIC0gMSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENZZWFySVNPKGQsIHApIHtcbiAgZCA9IFVUQ2RJU08oZCk7XG4gIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRnVsbFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRnVsbFllYXJJU08oZCwgcCkge1xuICB2YXIgZGF5ID0gZC5nZXRVVENEYXkoKTtcbiAgZCA9IChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdXRjVGh1cnNkYXkoZCkgOiB1dGNUaHVyc2RheS5jZWlsKGQpO1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDWm9uZSgpIHtcbiAgcmV0dXJuIFwiKzAwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TGl0ZXJhbFBlcmNlbnQoKSB7XG4gIHJldHVybiBcIiVcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VW5peFRpbWVzdGFtcChkKSB7XG4gIHJldHVybiArZDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMoZCkge1xuICByZXR1cm4gTWF0aC5mbG9vcigrZCAvIDEwMDApO1xufVxuIiwiaW1wb3J0IGZvcm1hdExvY2FsZSBmcm9tIFwiLi9sb2NhbGUuanNcIjtcblxudmFyIGxvY2FsZTtcbmV4cG9ydCB2YXIgdGltZUZvcm1hdDtcbmV4cG9ydCB2YXIgdGltZVBhcnNlO1xuZXhwb3J0IHZhciB1dGNGb3JtYXQ7XG5leHBvcnQgdmFyIHV0Y1BhcnNlO1xuXG5kZWZhdWx0TG9jYWxlKHtcbiAgZGF0ZVRpbWU6IFwiJXgsICVYXCIsXG4gIGRhdGU6IFwiJS1tLyUtZC8lWVwiLFxuICB0aW1lOiBcIiUtSTolTTolUyAlcFwiLFxuICBwZXJpb2RzOiBbXCJBTVwiLCBcIlBNXCJdLFxuICBkYXlzOiBbXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiXSxcbiAgc2hvcnREYXlzOiBbXCJTdW5cIiwgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIl0sXG4gIG1vbnRoczogW1wiSmFudWFyeVwiLCBcIkZlYnJ1YXJ5XCIsIFwiTWFyY2hcIiwgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsIFwiQXVndXN0XCIsIFwiU2VwdGVtYmVyXCIsIFwiT2N0b2JlclwiLCBcIk5vdmVtYmVyXCIsIFwiRGVjZW1iZXJcIl0sXG4gIHNob3J0TW9udGhzOiBbXCJKYW5cIiwgXCJGZWJcIiwgXCJNYXJcIiwgXCJBcHJcIiwgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIiwgXCJBdWdcIiwgXCJTZXBcIiwgXCJPY3RcIiwgXCJOb3ZcIiwgXCJEZWNcIl1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWZhdWx0TG9jYWxlKGRlZmluaXRpb24pIHtcbiAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pO1xuICB0aW1lRm9ybWF0ID0gbG9jYWxlLmZvcm1hdDtcbiAgdGltZVBhcnNlID0gbG9jYWxlLnBhcnNlO1xuICB1dGNGb3JtYXQgPSBsb2NhbGUudXRjRm9ybWF0O1xuICB1dGNQYXJzZSA9IGxvY2FsZS51dGNQYXJzZTtcbiAgcmV0dXJuIGxvY2FsZTtcbn1cbiIsImltcG9ydCB7dGltZVllYXIsIHRpbWVNb250aCwgdGltZVdlZWssIHRpbWVEYXksIHRpbWVIb3VyLCB0aW1lTWludXRlLCB0aW1lU2Vjb25kLCB0aW1lVGlja3MsIHRpbWVUaWNrSW50ZXJ2YWx9IGZyb20gXCJkMy10aW1lXCI7XG5pbXBvcnQge3RpbWVGb3JtYXR9IGZyb20gXCJkMy10aW1lLWZvcm1hdFwiO1xuaW1wb3J0IGNvbnRpbnVvdXMsIHtjb3B5fSBmcm9tIFwiLi9jb250aW51b3VzLmpzXCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdC5qc1wiO1xuaW1wb3J0IG5pY2UgZnJvbSBcIi4vbmljZS5qc1wiO1xuXG5mdW5jdGlvbiBkYXRlKHQpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKHQpO1xufVxuXG5mdW5jdGlvbiBudW1iZXIodCkge1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIERhdGUgPyArdCA6ICtuZXcgRGF0ZSgrdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxlbmRhcih0aWNrcywgdGlja0ludGVydmFsLCB5ZWFyLCBtb250aCwgd2VlaywgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZm9ybWF0KSB7XG4gIHZhciBzY2FsZSA9IGNvbnRpbnVvdXMoKSxcbiAgICAgIGludmVydCA9IHNjYWxlLmludmVydCxcbiAgICAgIGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcblxuICB2YXIgZm9ybWF0TWlsbGlzZWNvbmQgPSBmb3JtYXQoXCIuJUxcIiksXG4gICAgICBmb3JtYXRTZWNvbmQgPSBmb3JtYXQoXCI6JVNcIiksXG4gICAgICBmb3JtYXRNaW51dGUgPSBmb3JtYXQoXCIlSTolTVwiKSxcbiAgICAgIGZvcm1hdEhvdXIgPSBmb3JtYXQoXCIlSSAlcFwiKSxcbiAgICAgIGZvcm1hdERheSA9IGZvcm1hdChcIiVhICVkXCIpLFxuICAgICAgZm9ybWF0V2VlayA9IGZvcm1hdChcIiViICVkXCIpLFxuICAgICAgZm9ybWF0TW9udGggPSBmb3JtYXQoXCIlQlwiKSxcbiAgICAgIGZvcm1hdFllYXIgPSBmb3JtYXQoXCIlWVwiKTtcblxuICBmdW5jdGlvbiB0aWNrRm9ybWF0KGRhdGUpIHtcbiAgICByZXR1cm4gKHNlY29uZChkYXRlKSA8IGRhdGUgPyBmb3JtYXRNaWxsaXNlY29uZFxuICAgICAgICA6IG1pbnV0ZShkYXRlKSA8IGRhdGUgPyBmb3JtYXRTZWNvbmRcbiAgICAgICAgOiBob3VyKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdE1pbnV0ZVxuICAgICAgICA6IGRheShkYXRlKSA8IGRhdGUgPyBmb3JtYXRIb3VyXG4gICAgICAgIDogbW9udGgoZGF0ZSkgPCBkYXRlID8gKHdlZWsoZGF0ZSkgPCBkYXRlID8gZm9ybWF0RGF5IDogZm9ybWF0V2VlaylcbiAgICAgICAgOiB5ZWFyKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdE1vbnRoXG4gICAgICAgIDogZm9ybWF0WWVhcikoZGF0ZSk7XG4gIH1cblxuICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGludmVydCh5KSk7XG4gIH07XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gZG9tYWluKEFycmF5LmZyb20oXywgbnVtYmVyKSkgOiBkb21haW4oKS5tYXAoZGF0ZSk7XG4gIH07XG5cbiAgc2NhbGUudGlja3MgPSBmdW5jdGlvbihpbnRlcnZhbCkge1xuICAgIHZhciBkID0gZG9tYWluKCk7XG4gICAgcmV0dXJuIHRpY2tzKGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgaW50ZXJ2YWwgPT0gbnVsbCA/IDEwIDogaW50ZXJ2YWwpO1xuICB9O1xuXG4gIHNjYWxlLnRpY2tGb3JtYXQgPSBmdW5jdGlvbihjb3VudCwgc3BlY2lmaWVyKSB7XG4gICAgcmV0dXJuIHNwZWNpZmllciA9PSBudWxsID8gdGlja0Zvcm1hdCA6IGZvcm1hdChzcGVjaWZpZXIpO1xuICB9O1xuXG4gIHNjYWxlLm5pY2UgPSBmdW5jdGlvbihpbnRlcnZhbCkge1xuICAgIHZhciBkID0gZG9tYWluKCk7XG4gICAgaWYgKCFpbnRlcnZhbCB8fCB0eXBlb2YgaW50ZXJ2YWwucmFuZ2UgIT09IFwiZnVuY3Rpb25cIikgaW50ZXJ2YWwgPSB0aWNrSW50ZXJ2YWwoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBpbnRlcnZhbCA9PSBudWxsID8gMTAgOiBpbnRlcnZhbCk7XG4gICAgcmV0dXJuIGludGVydmFsID8gZG9tYWluKG5pY2UoZCwgaW50ZXJ2YWwpKSA6IHNjYWxlO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgY2FsZW5kYXIodGlja3MsIHRpY2tJbnRlcnZhbCwgeWVhciwgbW9udGgsIHdlZWssIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZvcm1hdCkpO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGltZSgpIHtcbiAgcmV0dXJuIGluaXRSYW5nZS5hcHBseShjYWxlbmRhcih0aW1lVGlja3MsIHRpbWVUaWNrSW50ZXJ2YWwsIHRpbWVZZWFyLCB0aW1lTW9udGgsIHRpbWVXZWVrLCB0aW1lRGF5LCB0aW1lSG91ciwgdGltZU1pbnV0ZSwgdGltZVNlY29uZCwgdGltZUZvcm1hdCkuZG9tYWluKFtuZXcgRGF0ZSgyMDAwLCAwLCAxKSwgbmV3IERhdGUoMjAwMCwgMCwgMildKSwgYXJndW1lbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5pY2UoZG9tYWluLCBpbnRlcnZhbCkge1xuICBkb21haW4gPSBkb21haW4uc2xpY2UoKTtcblxuICB2YXIgaTAgPSAwLFxuICAgICAgaTEgPSBkb21haW4ubGVuZ3RoIC0gMSxcbiAgICAgIHgwID0gZG9tYWluW2kwXSxcbiAgICAgIHgxID0gZG9tYWluW2kxXSxcbiAgICAgIHQ7XG5cbiAgaWYgKHgxIDwgeDApIHtcbiAgICB0ID0gaTAsIGkwID0gaTEsIGkxID0gdDtcbiAgICB0ID0geDAsIHgwID0geDEsIHgxID0gdDtcbiAgfVxuXG4gIGRvbWFpbltpMF0gPSBpbnRlcnZhbC5mbG9vcih4MCk7XG4gIGRvbWFpbltpMV0gPSBpbnRlcnZhbC5jZWlsKHgxKTtcbiAgcmV0dXJuIGRvbWFpbjtcbn1cbiIsImltcG9ydCB7cmdiIGFzIGNvbG9yUmdifSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCBiYXNpcyBmcm9tIFwiLi9iYXNpcy5qc1wiO1xuaW1wb3J0IGJhc2lzQ2xvc2VkIGZyb20gXCIuL2Jhc2lzQ2xvc2VkLmpzXCI7XG5pbXBvcnQgbm9nYW1tYSwge2dhbW1hfSBmcm9tIFwiLi9jb2xvci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gcmdiR2FtbWEoeSkge1xuICB2YXIgY29sb3IgPSBnYW1tYSh5KTtcblxuICBmdW5jdGlvbiByZ2Ioc3RhcnQsIGVuZCkge1xuICAgIHZhciByID0gY29sb3IoKHN0YXJ0ID0gY29sb3JSZ2Ioc3RhcnQpKS5yLCAoZW5kID0gY29sb3JSZ2IoZW5kKSkuciksXG4gICAgICAgIGcgPSBjb2xvcihzdGFydC5nLCBlbmQuZyksXG4gICAgICAgIGIgPSBjb2xvcihzdGFydC5iLCBlbmQuYiksXG4gICAgICAgIG9wYWNpdHkgPSBub2dhbW1hKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgc3RhcnQuciA9IHIodCk7XG4gICAgICBzdGFydC5nID0gZyh0KTtcbiAgICAgIHN0YXJ0LmIgPSBiKHQpO1xuICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICAgIH07XG4gIH1cblxuICByZ2IuZ2FtbWEgPSByZ2JHYW1tYTtcblxuICByZXR1cm4gcmdiO1xufSkoMSk7XG5cbmZ1bmN0aW9uIHJnYlNwbGluZShzcGxpbmUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbG9ycykge1xuICAgIHZhciBuID0gY29sb3JzLmxlbmd0aCxcbiAgICAgICAgciA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgZyA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgYiA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgaSwgY29sb3I7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgY29sb3IgPSBjb2xvclJnYihjb2xvcnNbaV0pO1xuICAgICAgcltpXSA9IGNvbG9yLnIgfHwgMDtcbiAgICAgIGdbaV0gPSBjb2xvci5nIHx8IDA7XG4gICAgICBiW2ldID0gY29sb3IuYiB8fCAwO1xuICAgIH1cbiAgICByID0gc3BsaW5lKHIpO1xuICAgIGcgPSBzcGxpbmUoZyk7XG4gICAgYiA9IHNwbGluZShiKTtcbiAgICBjb2xvci5vcGFjaXR5ID0gMTtcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgY29sb3IuciA9IHIodCk7XG4gICAgICBjb2xvci5nID0gZyh0KTtcbiAgICAgIGNvbG9yLmIgPSBiKHQpO1xuICAgICAgcmV0dXJuIGNvbG9yICsgXCJcIjtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgdmFyIHJnYkJhc2lzID0gcmdiU3BsaW5lKGJhc2lzKTtcbmV4cG9ydCB2YXIgcmdiQmFzaXNDbG9zZWQgPSByZ2JTcGxpbmUoYmFzaXNDbG9zZWQpO1xuIiwiZXhwb3J0IGZ1bmN0aW9uIGJhc2lzKHQxLCB2MCwgdjEsIHYyLCB2Mykge1xuICB2YXIgdDIgPSB0MSAqIHQxLCB0MyA9IHQyICogdDE7XG4gIHJldHVybiAoKDEgLSAzICogdDEgKyAzICogdDIgLSB0MykgKiB2MFxuICAgICAgKyAoNCAtIDYgKiB0MiArIDMgKiB0MykgKiB2MVxuICAgICAgKyAoMSArIDMgKiB0MSArIDMgKiB0MiAtIDMgKiB0MykgKiB2MlxuICAgICAgKyB0MyAqIHYzKSAvIDY7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcykge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGggLSAxO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gdCA8PSAwID8gKHQgPSAwKSA6IHQgPj0gMSA/ICh0ID0gMSwgbiAtIDEpIDogTWF0aC5mbG9vcih0ICogbiksXG4gICAgICAgIHYxID0gdmFsdWVzW2ldLFxuICAgICAgICB2MiA9IHZhbHVlc1tpICsgMV0sXG4gICAgICAgIHYwID0gaSA+IDAgPyB2YWx1ZXNbaSAtIDFdIDogMiAqIHYxIC0gdjIsXG4gICAgICAgIHYzID0gaSA8IG4gLSAxID8gdmFsdWVzW2kgKyAyXSA6IDIgKiB2MiAtIHYxO1xuICAgIHJldHVybiBiYXNpcygodCAtIGkgLyBuKSAqIG4sIHYwLCB2MSwgdjIsIHYzKTtcbiAgfTtcbn1cbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZjOGQ1OWZmZmZiZjk5ZDU5NFwiLFxuICBcImQ3MTkxY2ZkYWU2MWFiZGRhNDJiODNiYVwiLFxuICBcImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZGRhNDJiODNiYVwiLFxuICBcImQ1M2U0ZmZjOGQ1OWZlZTA4YmU2ZjU5ODk5ZDU5NDMyODhiZFwiLFxuICBcImQ1M2U0ZmZjOGQ1OWZlZTA4YmZmZmZiZmU2ZjU5ODk5ZDU5NDMyODhiZFwiLFxuICBcImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZFwiLFxuICBcImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZFwiLFxuICBcIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMlwiLFxuICBcIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgdmFyIG4gPSBzcGVjaWZpZXIubGVuZ3RoIC8gNiB8IDAsIGNvbG9ycyA9IG5ldyBBcnJheShuKSwgaSA9IDA7XG4gIHdoaWxlIChpIDwgbikgY29sb3JzW2ldID0gXCIjXCIgKyBzcGVjaWZpZXIuc2xpY2UoaSAqIDYsICsraSAqIDYpO1xuICByZXR1cm4gY29sb3JzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24gY29uc3RhbnQoKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJpbXBvcnQge2ludGVycG9sYXRlUmdiQmFzaXN9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBzY2hlbWUgPT4gaW50ZXJwb2xhdGVSZ2JCYXNpcyhzY2hlbWVbc2NoZW1lLmxlbmd0aCAtIDFdKTtcbiIsImV4cG9ydCB2YXIgYWJzID0gTWF0aC5hYnM7XG5leHBvcnQgdmFyIGF0YW4yID0gTWF0aC5hdGFuMjtcbmV4cG9ydCB2YXIgY29zID0gTWF0aC5jb3M7XG5leHBvcnQgdmFyIG1heCA9IE1hdGgubWF4O1xuZXhwb3J0IHZhciBtaW4gPSBNYXRoLm1pbjtcbmV4cG9ydCB2YXIgc2luID0gTWF0aC5zaW47XG5leHBvcnQgdmFyIHNxcnQgPSBNYXRoLnNxcnQ7XG5cbmV4cG9ydCB2YXIgZXBzaWxvbiA9IDFlLTEyO1xuZXhwb3J0IHZhciBwaSA9IE1hdGguUEk7XG5leHBvcnQgdmFyIGhhbGZQaSA9IHBpIC8gMjtcbmV4cG9ydCB2YXIgdGF1ID0gMiAqIHBpO1xuXG5leHBvcnQgZnVuY3Rpb24gYWNvcyh4KSB7XG4gIHJldHVybiB4ID4gMSA/IDAgOiB4IDwgLTEgPyBwaSA6IE1hdGguYWNvcyh4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzaW4oeCkge1xuICByZXR1cm4geCA+PSAxID8gaGFsZlBpIDogeCA8PSAtMSA/IC1oYWxmUGkgOiBNYXRoLmFzaW4oeCk7XG59XG4iLCJpbXBvcnQgeyBNb21lbnQgfSBmcm9tIFwibW9tZW50XCI7XHJcblxyXG5leHBvcnQgZW51bSBTZWFyY2hUeXBlIHtcclxuICAgIFRhZyxcclxuICAgIEZyb250bWF0dGVyLFxyXG4gICAgV2lraSxcclxuICAgIFdpa2lMaW5rLFxyXG4gICAgV2lraURpc3BsYXksXHJcbiAgICBUZXh0LFxyXG4gICAgZHZGaWVsZCxcclxuICAgIFRhYmxlLFxyXG4gICAgRmlsZU1ldGEsXHJcbiAgICBUYXNrLFxyXG4gICAgVGFza0RvbmUsXHJcbiAgICBUYXNrTm90RG9uZSxcclxufVxyXG5cclxuZXhwb3J0IGVudW0gR3JhcGhUeXBlIHtcclxuICAgIExpbmUsXHJcbiAgICBCYXIsXHJcbiAgICBQaWUsXHJcbiAgICBSYWRhcixcclxuICAgIFN1bW1hcnksXHJcbiAgICBUYWJsZSxcclxuICAgIE1vbnRoLFxyXG4gICAgSGVhdG1hcCxcclxuICAgIEJ1bGxldCxcclxuICAgIFVua25vd24sXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFZhbHVlVHlwZSB7XHJcbiAgICBOdW1iZXIsXHJcbiAgICBJbnQsXHJcbiAgICBEYXRlLFxyXG4gICAgVGltZSxcclxuICAgIERhdGVUaW1lLFxyXG4gICAgU3RyaW5nLFxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBUZXh0VmFsdWVNYXAgPSB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBudW1iZXI7XHJcbn07XHJcblxyXG5leHBvcnQgY2xhc3MgRGF0YVBvaW50IHtcclxuICAgIGRhdGU6IE1vbWVudDtcclxuICAgIHZhbHVlOiBudW1iZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoZGF0ZTogTW9tZW50LCB2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5kYXRlID0gZGF0ZTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVyeSB7XHJcbiAgICBwcml2YXRlIHR5cGU6IFNlYXJjaFR5cGUgfCBudWxsO1xyXG4gICAgcHJpdmF0ZSB0YXJnZXQ6IHN0cmluZztcclxuICAgIHByaXZhdGUgcGFyZW50VGFyZ2V0OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgcHJpdmF0ZSBzZXBhcmF0b3I6IHN0cmluZzsgLy8gbXVsdGlwbGUgdmFsdWUgc2VwYXJhdG9yXHJcbiAgICBwcml2YXRlIGlkOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGFjY2Vzc29yOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGFjY2Vzc29yMTogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBhY2Nlc3NvcjI6IG51bWJlcjtcclxuICAgIHByaXZhdGUgbnVtVGFyZ2V0czogbnVtYmVyO1xyXG5cclxuICAgIHZhbHVlVHlwZTogVmFsdWVUeXBlO1xyXG4gICAgdXNlZEFzWERhdGFzZXQ6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IoaWQ6IG51bWJlciwgc2VhcmNoVHlwZTogU2VhcmNoVHlwZSwgc2VhcmNoVGFyZ2V0OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnR5cGUgPSBzZWFyY2hUeXBlO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gc2VhcmNoVGFyZ2V0O1xyXG4gICAgICAgIHRoaXMuc2VwYXJhdG9yID0gXCJcIjsgLy8gc2VwYXJhdG9yIHRvIHNlcGFyYXRlIG11bHRpcGxlIHZhbHVlc1xyXG4gICAgICAgIHRoaXMuaWQgPSBpZDtcclxuICAgICAgICB0aGlzLmFjY2Vzc29yID0gLTE7XHJcbiAgICAgICAgdGhpcy5hY2Nlc3NvcjEgPSAtMTtcclxuICAgICAgICB0aGlzLmFjY2Vzc29yMiA9IC0xO1xyXG4gICAgICAgIHRoaXMudmFsdWVUeXBlID0gVmFsdWVUeXBlLk51bWJlcjtcclxuICAgICAgICB0aGlzLnVzZWRBc1hEYXRhc2V0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5udW1UYXJnZXRzID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuVGFibGUpIHtcclxuICAgICAgICAgICAgLy8gc2VhcmNoVGFyZ2V0IC0tPiB7e2ZpbGVQYXRofX1be3t0YWJsZX19XVt7e2NvbHVtbn19XVxyXG4gICAgICAgICAgICBsZXQgc3RyUmVnZXggPVxyXG4gICAgICAgICAgICAgICAgXCJcXFxcWyg/PGFjY2Vzc29yPlswLTldKylcXFxcXVxcXFxbKD88YWNjZXNzb3IxPlswLTldKylcXFxcXShcXFxcWyg/PGFjY2Vzc29yMj5bMC05XSspXFxcXF0pP1wiO1xyXG4gICAgICAgICAgICBsZXQgcmVnZXggPSBuZXcgUmVnRXhwKHN0clJlZ2V4LCBcImdtXCIpO1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2g7XHJcbiAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHNlYXJjaFRhcmdldCkpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1hdGNoLmdyb3Vwcy5hY2Nlc3NvciAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhY2Nlc3NvciA9IHBhcnNlRmxvYXQobWF0Y2guZ3JvdXBzLmFjY2Vzc29yKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKGFjY2Vzc29yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1hdGNoLmdyb3Vwcy5hY2Nlc3NvcjEgIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhY2Nlc3NvcjEgPSBwYXJzZUZsb2F0KG1hdGNoLmdyb3Vwcy5hY2Nlc3NvcjEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc051bWJlcihhY2Nlc3NvcjEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFjY2Vzc29yMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBtYXRjaC5ncm91cHMuYWNjZXNzb3IyICE9PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInVuZGVmaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc29yMiA9IHBhcnNlRmxvYXQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaC5ncm91cHMuYWNjZXNzb3IyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjY2Vzc29yID0gYWNjZXNzb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3NvcjEgPSBhY2Nlc3NvcjE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc051bWJlcihhY2Nlc3NvcjIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWNjZXNzb3IyID0gYWNjZXNzb3IyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudFRhcmdldCA9IHNlYXJjaFRhcmdldC5yZXBsYWNlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBzdHJSZWdleCA9IFwiXFxcXFsoPzxhY2Nlc3Nvcj5bMC05XSspXFxcXF1cIjtcclxuICAgICAgICAgICAgbGV0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnbVwiKTtcclxuICAgICAgICAgICAgbGV0IG1hdGNoO1xyXG4gICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhzZWFyY2hUYXJnZXQpKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXRjaC5ncm91cHMuYWNjZXNzb3IgIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYWNjZXNzb3IgPSBwYXJzZUZsb2F0KG1hdGNoLmdyb3Vwcy5hY2Nlc3Nvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc051bWJlcihhY2Nlc3NvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3NvciA9IGFjY2Vzc29yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudFRhcmdldCA9IHNlYXJjaFRhcmdldC5yZXBsYWNlKHJlZ2V4LCBcIlwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVxdWFsVG8ob3RoZXI6IFF1ZXJ5KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gb3RoZXIudHlwZSAmJiB0aGlzLnRhcmdldCA9PT0gb3RoZXIudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFR5cGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VGFyZ2V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRhcmdldDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UGFyZW50VGFyZ2V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudFRhcmdldDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFjY2Vzc29yKGluZGV4ID0gMCkge1xyXG4gICAgICAgIHN3aXRjaCAoaW5kZXgpIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWNjZXNzb3I7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFjY2Vzc29yMTtcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWNjZXNzb3IyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFNlcGFyYXRvcihzZXA6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc2VwYXJhdG9yID0gc2VwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTZXBhcmF0b3IoaXNGb3JGcm9udG1hdHRlclRhZ3M6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGlmICh0aGlzLnNlcGFyYXRvciA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICBpZiAoaXNGb3JGcm9udG1hdHRlclRhZ3MpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIixcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gXCIvXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcGFyYXRvcjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkTnVtVGFyZ2V0cyhudW06IG51bWJlciA9IDEpIHtcclxuICAgICAgICB0aGlzLm51bVRhcmdldHMgPSB0aGlzLm51bVRhcmdldHMgKyBudW07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE51bVRhcmdldHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubnVtVGFyZ2V0cztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBRdWVyeVZhbHVlUGFpciB7XHJcbiAgICBxdWVyeTogUXVlcnk7XHJcbiAgICB2YWx1ZTogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRGF0YXNldCBpbXBsZW1lbnRzIEl0ZXJhYmxlSXRlcmF0b3I8RGF0YVBvaW50PiB7XHJcbiAgICAvLyBBcnJheSBvZiBEYXRhUG9pbnRzXHJcbiAgICBwcml2YXRlIG5hbWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgcXVlcnk6IFF1ZXJ5O1xyXG4gICAgcHJpdmF0ZSB2YWx1ZXM6IG51bWJlcltdO1xyXG4gICAgcHJpdmF0ZSBwYXJlbnQ6IERhdGFzZXRzO1xyXG4gICAgcHJpdmF0ZSBpZDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSB5TWluOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIHlNYXg6IG51bWJlcjtcclxuICAgIHByaXZhdGUgc3RhcnREYXRlOiBNb21lbnQ7XHJcbiAgICBwcml2YXRlIGVuZERhdGU6IE1vbWVudDtcclxuICAgIHByaXZhdGUgbnVtVGFyZ2V0czogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBsaW5lSW5mbzogTGluZUluZm87XHJcbiAgICBwcml2YXRlIGJhckluZm86IEJhckluZm87XHJcblxyXG4gICAgcHJpdmF0ZSBpc1RtcERhdGFzZXQ6IGJvb2xlYW47XHJcblxyXG4gICAgdmFsdWVUeXBlOiBWYWx1ZVR5cGU7XHJcblxyXG4gICAgcHJpdmF0ZSBjdXJyZW50SW5kZXggPSAwOyAvLyBJdGVyYWJsZUl0ZXJhdG9yXHJcblxyXG4gICAgY29uc3RydWN0b3IocGFyZW50OiBEYXRhc2V0cywgcXVlcnk6IFF1ZXJ5KSB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJ1bnRpdGxlZFwiO1xyXG4gICAgICAgIHRoaXMucXVlcnkgPSBxdWVyeTtcclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xyXG4gICAgICAgIHRoaXMuaWQgPSAtMTtcclxuICAgICAgICB0aGlzLnlNaW4gPSBudWxsO1xyXG4gICAgICAgIHRoaXMueU1heCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zdGFydERhdGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZW5kRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5udW1UYXJnZXRzID0gMDtcclxuICAgICAgICB0aGlzLmxpbmVJbmZvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmJhckluZm8gPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLmlzVG1wRGF0YXNldCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlVHlwZSA9IHF1ZXJ5Py52YWx1ZVR5cGU7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHBhcmVudC5nZXREYXRlcygpLmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaChudWxsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb25lVG9UbXBEYXRhc2V0KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc1RtcERhdGFzZXQpIHtcclxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSBuZXcgRGF0YXNldCh0aGlzLnBhcmVudCwgbnVsbCk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQubmFtZSA9IFwidG1wXCI7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQudmFsdWVzID0gWy4uLnRoaXMudmFsdWVzXTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC55TWluID0gdGhpcy55TWluO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LnlNYXggPSB0aGlzLnlNYXg7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQuc3RhcnREYXRlID0gdGhpcy5zdGFydERhdGUuY2xvbmUoKTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5lbmREYXRlID0gdGhpcy5lbmREYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQubnVtVGFyZ2V0cyA9IHRoaXMubnVtVGFyZ2V0cztcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5pc1RtcERhdGFzZXQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LnZhbHVlVHlwZSA9IHRoaXMudmFsdWVUeXBlO1xyXG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7IC8vIGFscmVhZHkgdG1wIGRhdGFzZXRcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXROYW1lKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldElkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRJZChpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGROdW1UYXJnZXRzKG51bTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5udW1UYXJnZXRzID0gdGhpcy5udW1UYXJnZXRzICsgbnVtO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXROdW1UYXJnZXRzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm51bVRhcmdldHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFZhbHVlKGRhdGU6IE1vbWVudCwgZGF5U2hpZnQ6IG51bWJlciA9IDApIHtcclxuICAgICAgICBsZXQgaW5kID0gdGhpcy5wYXJlbnQuZ2V0SW5kZXhPZkRhdGUoZGF0ZSkgKyBNYXRoLmZsb29yKGRheVNoaWZ0KTtcclxuICAgICAgICBpZiAoaW5kID49IDAgJiYgaW5kIDwgdGhpcy52YWx1ZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1tpbmRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0VmFsdWUoZGF0ZTogTW9tZW50LCB2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IGluZCA9IHRoaXMucGFyZW50LmdldEluZGV4T2ZEYXRlKGRhdGUpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGluZCk7XHJcblxyXG4gICAgICAgIGlmIChpbmQgPj0gMCAmJiBpbmQgPCB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgLy8gU2V0IHZhbHVlXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZF0gPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB5TWluIGFuZCB5TWF4XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnlNaW4gPT09IG51bGwgfHwgdmFsdWUgPCB0aGlzLnlNaW4pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMueU1pbiA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnlNYXggPT09IG51bGwgfHwgdmFsdWUgPiB0aGlzLnlNYXgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMueU1heCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBVcGRhdGUgc3RhcnREYXRlIGFuZCBlbmREYXRlXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXJ0RGF0ZSA9PT0gbnVsbCB8fCBkYXRlIDwgdGhpcy5zdGFydERhdGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlID0gZGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVuZERhdGUgPT09IG51bGwgfHwgZGF0ZSA+IHRoaXMuZW5kRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmREYXRlID0gZGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWNhbGN1bGF0ZU1pbk1heCgpIHtcclxuICAgICAgICB0aGlzLnlNaW4gPSBNYXRoLm1pbiguLi50aGlzLnZhbHVlcyk7XHJcbiAgICAgICAgdGhpcy55TWF4ID0gTWF0aC5tYXgoLi4udGhpcy52YWx1ZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRZTWluKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnlNaW47XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFlNYXgoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMueU1heDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U3RhcnREYXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0RGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RW5kRGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbmREYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaGlmdChzaGlmdEFtb3VudDogbnVtYmVyLCBkb0xhcmdlcnRoYW46IG51bWJlcikge1xyXG4gICAgICAgIGxldCBhbnlTaGlmdGVkID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgdGhpcy52YWx1ZXMubGVuZ3RoOyBpbmQrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZXNbaW5kXSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRvTGFyZ2VydGhhbiA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZF0gPSB0aGlzLnZhbHVlc1tpbmRdICsgc2hpZnRBbW91bnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYW55U2hpZnRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlc1tpbmRdID49IGRvTGFyZ2VydGhhbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRdID0gdGhpcy52YWx1ZXNbaW5kXSArIHNoaWZ0QW1vdW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbnlTaGlmdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFueVNoaWZ0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy55TWluID0gdGhpcy55TWluICsgc2hpZnRBbW91bnQ7XHJcbiAgICAgICAgICAgIHRoaXMueU1heCA9IHRoaXMueU1heCArIHNoaWZ0QW1vdW50O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0UGVuYWx0eShwZW5hbHR5OiBudW1iZXIpIHtcclxuICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCB0aGlzLnZhbHVlcy5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlc1tpbmRdID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRdID0gcGVuYWx0eTtcclxuICAgICAgICAgICAgICAgIGlmIChwZW5hbHR5IDwgdGhpcy55TWluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55TWluID0gcGVuYWx0eTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwZW5hbHR5ID4gdGhpcy55TWF4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55TWF4ID0gcGVuYWx0eTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UXVlcnkoKTogUXVlcnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhY2N1bXVsYXRlVmFsdWVzKCkge1xyXG4gICAgICAgIGxldCBhY2N1bVZhbHVlID0gMC4wO1xyXG4gICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHRoaXMudmFsdWVzLmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzW2luZF0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGFjY3VtVmFsdWUgKz0gdGhpcy52YWx1ZXNbaW5kXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRdID0gYWNjdW1WYWx1ZTtcclxuICAgICAgICAgICAgaWYgKGFjY3VtVmFsdWUgPCB0aGlzLnlNaW4pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMueU1pbiA9IGFjY3VtVmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGFjY3VtVmFsdWUgPiB0aGlzLnlNYXgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMueU1heCA9IGFjY3VtVmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFZhbHVlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldExlbmd0aCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRMZW5ndGhOb3ROdWxsKCkge1xyXG4gICAgICAgIGxldCBjb3VudE5vdE51bGwgPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHRoaXMudmFsdWVzLmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzW2luZF0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGNvdW50Tm90TnVsbCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb3VudE5vdE51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgbmV4dCgpOiBJdGVyYXRvclJlc3VsdDxEYXRhUG9pbnQ+IHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPCB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IGluZCA9IHRoaXMuY3VycmVudEluZGV4Kys7XHJcbiAgICAgICAgICAgIGxldCBkYXRhUG9pbnQgPSBuZXcgRGF0YVBvaW50KFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuZ2V0RGF0ZXMoKVtpbmRdLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kXVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgZG9uZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogZGF0YVBvaW50LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGRvbmU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxEYXRhUG9pbnQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIERhdGFzZXRzIGltcGxlbWVudHMgSXRlcmFibGVJdGVyYXRvcjxEYXRhc2V0PiB7XHJcbiAgICAvLyBJdGVyYWJsZSBvZiBEYXRhc2V0XHJcbiAgICBwcml2YXRlIGRhdGVzOiBNb21lbnRbXTtcclxuICAgIHByaXZhdGUgZGF0YXNldHM6IERhdGFzZXRbXTtcclxuXHJcbiAgICBwcml2YXRlIGN1cnJlbnRJbmRleCA9IDA7IC8vIEl0ZXJhYmxlSXRlcmF0b3JcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihzdGFydERhdGU6IE1vbWVudCwgZW5kRGF0ZTogTW9tZW50KSB7XHJcbiAgICAgICAgdGhpcy5kYXRlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuZGF0YXNldHMgPSBbXTtcclxuXHJcbiAgICAgICAgbGV0IGNEYXRhID0gc3RhcnREYXRlLmNyZWF0aW9uRGF0YSgpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGNEYXRhKTtcclxuICAgICAgICBjb25zdCBkYXRlRm9ybWF0ID0gY0RhdGEuZm9ybWF0LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgZm9yIChcclxuICAgICAgICAgICAgbGV0IGN1ckRhdGUgPSBzdGFydERhdGUuY2xvbmUoKTtcclxuICAgICAgICAgICAgY3VyRGF0ZSA8PSBlbmREYXRlO1xyXG4gICAgICAgICAgICBjdXJEYXRlLmFkZCgxLCBcImRheXNcIilcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgbGV0IG5ld0RhdGUgPSB3aW5kb3cubW9tZW50KFxyXG4gICAgICAgICAgICAgICAgY3VyRGF0ZS5mb3JtYXQoZGF0ZUZvcm1hdCksXHJcbiAgICAgICAgICAgICAgICBkYXRlRm9ybWF0LFxyXG4gICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGVzLnB1c2gobmV3RGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZGF0ZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVEYXRhc2V0KHF1ZXJ5OiBRdWVyeSwgcmVuZGVySW5mbzogUmVuZGVySW5mbykge1xyXG4gICAgICAgIGxldCBkYXRhc2V0ID0gbmV3IERhdGFzZXQodGhpcywgcXVlcnkpO1xyXG4gICAgICAgIGRhdGFzZXQuc2V0SWQocXVlcnkuZ2V0SWQoKSk7XHJcbiAgICAgICAgaWYgKHJlbmRlckluZm8pIHtcclxuICAgICAgICAgICAgZGF0YXNldC5zZXROYW1lKHJlbmRlckluZm8uZGF0YXNldE5hbWVbcXVlcnkuZ2V0SWQoKV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kYXRhc2V0cy5wdXNoKGRhdGFzZXQpO1xyXG5cclxuICAgICAgICByZXR1cm4gZGF0YXNldDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SW5kZXhPZkRhdGUoZGF0ZTogTW9tZW50KSB7XHJcbiAgICAgICAgbGV0IGNEYXRhID0gZGF0ZS5jcmVhdGlvbkRhdGEoKTtcclxuICAgICAgICBjb25zdCBkYXRlRm9ybWF0ID0gY0RhdGEuZm9ybWF0LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgdGhpcy5kYXRlcy5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZXNbaW5kXS5mb3JtYXQoZGF0ZUZvcm1hdCkgPT09IGRhdGUuZm9ybWF0KGRhdGVGb3JtYXQpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldERhdGFzZXRCeVF1ZXJ5KHF1ZXJ5OiBRdWVyeSkge1xyXG4gICAgICAgIGZvciAobGV0IGRhdGFzZXQgb2YgdGhpcy5kYXRhc2V0cykge1xyXG4gICAgICAgICAgICBpZiAoZGF0YXNldC5nZXRRdWVyeSgpLmVxdWFsVG8ocXVlcnkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YXNldDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RGF0YXNldEJ5SWQoaWQ6IG51bWJlcikge1xyXG4gICAgICAgIGZvciAobGV0IGRhdGFzZXQgb2YgdGhpcy5kYXRhc2V0cykge1xyXG4gICAgICAgICAgICBpZiAoZGF0YXNldC5nZXRJZCgpID09PSBpZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFzZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRYRGF0YXNldElkcygpIHtcclxuICAgICAgICBsZXQgaWRzOiBBcnJheTxudW1iZXI+ID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgZGF0YXNldCBvZiB0aGlzLmRhdGFzZXRzKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhc2V0LmdldFF1ZXJ5KCkudXNlZEFzWERhdGFzZXQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBpZCA9IGRhdGFzZXQuZ2V0UXVlcnkoKS5nZXRJZCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpZHMuaW5jbHVkZXMoaWQpICYmIGlkICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkcy5wdXNoKGlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaWRzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXREYXRlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRlcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TmFtZXMoKSB7XHJcbiAgICAgICAgbGV0IG5hbWVzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgZGF0YXNldCBvZiB0aGlzLmRhdGFzZXRzKSB7XHJcbiAgICAgICAgICAgIG5hbWVzLnB1c2goZGF0YXNldC5nZXROYW1lKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmFtZXM7XHJcbiAgICB9XHJcblxyXG4gICAgbmV4dCgpOiBJdGVyYXRvclJlc3VsdDxEYXRhc2V0PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZGV4IDwgdGhpcy5kYXRhc2V0cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGRvbmU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YXNldHNbdGhpcy5jdXJyZW50SW5kZXgrK10sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgZG9uZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPERhdGFzZXQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJlbmRlckluZm8ge1xyXG4gICAgLy8gSW5wdXRcclxuICAgIHF1ZXJpZXM6IFF1ZXJ5W107XHJcbiAgICB4RGF0YXNldDogbnVtYmVyW107XHJcbiAgICBmb2xkZXI6IHN0cmluZztcclxuICAgIGZpbGU6IHN0cmluZ1tdO1xyXG4gICAgc3BlY2lmaWVkRmlsZXNPbmx5OiBib29sZWFuO1xyXG4gICAgZmlsZUNvbnRhaW5zTGlua2VkRmlsZXM6IHN0cmluZ1tdO1xyXG4gICAgZmlsZU11bHRpcGxpZXJBZnRlckxpbms6IHN0cmluZztcclxuICAgIGRhdGVGb3JtYXQ6IHN0cmluZztcclxuICAgIGRhdGVGb3JtYXRQcmVmaXg6IHN0cmluZztcclxuICAgIGRhdGVGb3JtYXRTdWZmaXg6IHN0cmluZztcclxuICAgIHN0YXJ0RGF0ZTogTW9tZW50IHwgbnVsbDtcclxuICAgIGVuZERhdGU6IE1vbWVudCB8IG51bGw7XHJcbiAgICBkYXRhc2V0TmFtZTogc3RyaW5nW107XHJcbiAgICBjb25zdFZhbHVlOiBudW1iZXJbXTtcclxuICAgIGlnbm9yZUF0dGFjaGVkVmFsdWU6IGJvb2xlYW5bXTtcclxuICAgIGlnbm9yZVplcm9WYWx1ZTogYm9vbGVhbltdO1xyXG4gICAgYWNjdW06IGJvb2xlYW5bXTtcclxuICAgIHBlbmFsdHk6IG51bWJlcltdO1xyXG4gICAgdmFsdWVTaGlmdDogbnVtYmVyW107XHJcbiAgICBzaGlmdE9ubHlWYWx1ZUxhcmdlclRoYW46IG51bWJlcltdO1xyXG4gICAgdmFsdWVUeXBlOiBzdHJpbmdbXTsgLy8gbnVtYmVyL2Zsb2F0LCBpbnQsIHN0cmluZywgYm9vbGVhbiwgZGF0ZSwgdGltZSwgZGF0ZXRpbWVcclxuICAgIHRleHRWYWx1ZU1hcDogVGV4dFZhbHVlTWFwO1xyXG5cclxuICAgIGRhdGFBcmVhU2l6ZTogU2l6ZTtcclxuICAgIG1hcmdpbjogTWFyZ2luO1xyXG5cclxuICAgIGZpeGVkU2NhbGU6IG51bWJlcjtcclxuICAgIGZpdFBhbmVsV2lkdGg6IGJvb2xlYW47XHJcblxyXG4gICAgb3V0cHV0OiBhbnlbXTtcclxuICAgIGxpbmU6IExpbmVJbmZvW107XHJcbiAgICBiYXI6IEJhckluZm9bXTtcclxuICAgIHBpZTogUGllSW5mb1tdO1xyXG4gICAgc3VtbWFyeTogU3VtbWFyeUluZm9bXTtcclxuICAgIG1vbnRoOiBNb250aEluZm9bXTtcclxuICAgIGhlYXRtYXA6IEhlYXRtYXBJbmZvW107XHJcbiAgICBidWxsZXQ6IEJ1bGxldEluZm9bXTtcclxuICAgIGN1c3RvbURhdGFzZXQ6IEN1c3RvbURhdGFzZXRJbmZvW107XHJcblxyXG4gICAgcHVibGljIGRhdGFzZXRzOiBEYXRhc2V0cyB8IG51bGw7XHJcblxyXG4gICAgY29uc3RydWN0b3IocXVlcmllczogUXVlcnlbXSkge1xyXG4gICAgICAgIHRoaXMucXVlcmllcyA9IHF1ZXJpZXM7XHJcbiAgICAgICAgdGhpcy54RGF0YXNldCA9IFtdOyAvLyB1c2UgZmlsZSBuYW1lXHJcbiAgICAgICAgdGhpcy5mb2xkZXIgPSBcIi9cIjtcclxuICAgICAgICB0aGlzLmZpbGUgPSBbXTsgLy8gZXh0cmEgZmlsZXMgdG8gdXNlXHJcbiAgICAgICAgdGhpcy5zcGVjaWZpZWRGaWxlc09ubHkgPSBmYWxzZTsgLy8gaWYgdHJ1ZSwgdXNlIGZpbGVzIHNwZWNpZmllZCBvbmx5XHJcbiAgICAgICAgdGhpcy5maWxlQ29udGFpbnNMaW5rZWRGaWxlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuZmlsZU11bHRpcGxpZXJBZnRlckxpbmsgPSBcIlwiOyAvLyByZWdleCBwYXR0ZXJuIHRvIGV4dHJhY3QgbXVsdGlwbGllciBhZnRlciBsaW5rXHJcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0ID0gXCJZWVlZLU1NLUREXCI7XHJcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0UHJlZml4ID0gXCJcIjtcclxuICAgICAgICB0aGlzLmRhdGVGb3JtYXRTdWZmaXggPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuc3RhcnREYXRlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmVuZERhdGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZGF0YXNldE5hbWUgPSBbXTsgLy8gdW50aXRsZWRcclxuICAgICAgICB0aGlzLmNvbnN0VmFsdWUgPSBbMS4wXTtcclxuICAgICAgICB0aGlzLmlnbm9yZUF0dGFjaGVkVmFsdWUgPSBbXTsgLy8gZmFsc2VcclxuICAgICAgICB0aGlzLmlnbm9yZVplcm9WYWx1ZSA9IFtdOyAvLyBmYWxzZVxyXG4gICAgICAgIHRoaXMuYWNjdW0gPSBbXTsgLy8gZmFsc2UsIGFjY3VtIHZhbHVlcyBzdGFydCBmcm9tIHplcm8gb3ZlciBkYXlzXHJcbiAgICAgICAgdGhpcy5wZW5hbHR5ID0gW107IC8vIG51bGwsIHVzZSB0aGlzIHZhbHVlIGluc3RlYWQgb2YgbnVsbCB2YWx1ZVxyXG4gICAgICAgIHRoaXMudmFsdWVTaGlmdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuID0gW107XHJcbiAgICAgICAgdGhpcy52YWx1ZVR5cGUgPSBbXTtcclxuICAgICAgICB0aGlzLnRleHRWYWx1ZU1hcCA9IHt9O1xyXG5cclxuICAgICAgICB0aGlzLmRhdGFBcmVhU2l6ZSA9IG5ldyBTaXplKDMwMCwgMzAwKTtcclxuICAgICAgICB0aGlzLm1hcmdpbiA9IG5ldyBNYXJnaW4oMTAsIDEwLCAxMCwgMTApOyAvLyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRcclxuXHJcbiAgICAgICAgdGhpcy5maXhlZFNjYWxlID0gMS4wO1xyXG4gICAgICAgIHRoaXMuZml0UGFuZWxXaWR0aCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLm91dHB1dCA9IFtdO1xyXG4gICAgICAgIHRoaXMubGluZSA9IFtdO1xyXG4gICAgICAgIHRoaXMuYmFyID0gW107XHJcbiAgICAgICAgdGhpcy5waWUgPSBbXTtcclxuICAgICAgICB0aGlzLnN1bW1hcnkgPSBbXTtcclxuICAgICAgICB0aGlzLm1vbnRoID0gW107XHJcbiAgICAgICAgdGhpcy5oZWF0bWFwID0gW107XHJcbiAgICAgICAgdGhpcy5idWxsZXQgPSBbXTtcclxuICAgICAgICB0aGlzLmN1c3RvbURhdGFzZXQgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhc2V0cyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFF1ZXJ5QnlJZChpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgZm9yIChsZXQgcXVlcnkgb2YgdGhpcy5xdWVyaWVzKSB7XHJcbiAgICAgICAgICAgIGlmIChxdWVyeS5nZXRJZCgpID09PSBpZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tRGF0YXNldEluZm8ge1xyXG4gICAgaWQ6IG51bWJlcjtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIHhEYXRhOiBzdHJpbmdbXTtcclxuICAgIHlEYXRhOiBzdHJpbmdbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmlkID0gLTE7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJcIjtcclxuICAgICAgICB0aGlzLnhEYXRhID0gW107XHJcbiAgICAgICAgdGhpcy55RGF0YSA9IFtdO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElHcmFwaCB7XHJcbiAgICBHZXRHcmFwaFR5cGUoKTogR3JhcGhUeXBlO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElMZWdlbmQge1xyXG4gICAgc2hvd0xlZ2VuZDogYm9vbGVhbjtcclxuICAgIGxlZ2VuZFBvc2l0aW9uOiBzdHJpbmc7XHJcbiAgICBsZWdlbmRPcmllbnRhdGlvbjogc3RyaW5nO1xyXG4gICAgbGVnZW5kQmdDb2xvcjogc3RyaW5nO1xyXG4gICAgbGVnZW5kQm9yZGVyQ29sb3I6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENvbW1vbkNoYXJ0SW5mbyBpbXBsZW1lbnRzIElHcmFwaCwgSUxlZ2VuZCB7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgeEF4aXNMYWJlbDogc3RyaW5nO1xyXG4gICAgeEF4aXNDb2xvcjogc3RyaW5nO1xyXG4gICAgeEF4aXNMYWJlbENvbG9yOiBzdHJpbmc7XHJcbiAgICB5QXhpc0xhYmVsOiBzdHJpbmdbXTtcclxuICAgIHlBeGlzQ29sb3I6IHN0cmluZ1tdO1xyXG4gICAgeUF4aXNMYWJlbENvbG9yOiBzdHJpbmdbXTtcclxuICAgIHlBeGlzVW5pdDogc3RyaW5nW107XHJcbiAgICB4QXhpc1RpY2tJbnRlcnZhbDogc3RyaW5nO1xyXG4gICAgeUF4aXNUaWNrSW50ZXJ2YWw6IHN0cmluZ1tdO1xyXG4gICAgeEF4aXNUaWNrTGFiZWxGb3JtYXQ6IHN0cmluZztcclxuICAgIHlBeGlzVGlja0xhYmVsRm9ybWF0OiBzdHJpbmdbXTtcclxuICAgIHlNaW46IG51bWJlcltdO1xyXG4gICAgeU1heDogbnVtYmVyW107XHJcbiAgICByZXZlcnNlWUF4aXM6IGJvb2xlYW5bXTtcclxuICAgIGFsbG93SW5zcGVjdERhdGE6IGJvb2xlYW47XHJcblxyXG4gICAgLy8gSUxlZ2VuZFxyXG4gICAgc2hvd0xlZ2VuZDogYm9vbGVhbjtcclxuICAgIGxlZ2VuZFBvc2l0aW9uOiBzdHJpbmc7XHJcbiAgICBsZWdlbmRPcmllbnRhdGlvbjogc3RyaW5nO1xyXG4gICAgbGVnZW5kQmdDb2xvcjogc3RyaW5nO1xyXG4gICAgbGVnZW5kQm9yZGVyQ29sb3I6IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnRpdGxlID0gXCJcIjtcclxuICAgICAgICB0aGlzLnhBeGlzTGFiZWwgPSBcIkRhdGVcIjtcclxuICAgICAgICB0aGlzLnhBeGlzQ29sb3IgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMueEF4aXNMYWJlbENvbG9yID0gXCJcIjtcclxuICAgICAgICB0aGlzLnlBeGlzTGFiZWwgPSBbXTsgLy8gXCJWYWx1ZVwiLCAyIGVsZW1lbnRzXHJcbiAgICAgICAgdGhpcy55QXhpc0NvbG9yID0gW107IC8vIFwiXCIsIDIgZWxlbWVudHNcclxuICAgICAgICB0aGlzLnlBeGlzTGFiZWxDb2xvciA9IFtdOyAvLyBcIlwiLCAyIGVsZW1lbnRzXHJcbiAgICAgICAgdGhpcy55QXhpc1VuaXQgPSBbXTsgLy8gXCJcIiwgMiBlbGVtZW50c1xyXG4gICAgICAgIHRoaXMueEF4aXNUaWNrSW50ZXJ2YWwgPSBudWxsOyAvLyB0aGUgc3RyaW5nIHdpbGwgYmUgY29udmVydGVkIHRvIER1cmF0aW9uIChhIG1vbnRoIGlzIG5vdCBuZXNzY2VzYXJ5IHRvIDMwIGRheXMpXHJcbiAgICAgICAgdGhpcy55QXhpc1RpY2tJbnRlcnZhbCA9IFtdOyAvLyBudWxsLCAyIGVsZW1lbnRzXHJcbiAgICAgICAgdGhpcy54QXhpc1RpY2tMYWJlbEZvcm1hdCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy55QXhpc1RpY2tMYWJlbEZvcm1hdCA9IFtdOyAvLyBudWxsLCAyIGVsZW1lbnRzXHJcbiAgICAgICAgdGhpcy55TWluID0gW107IC8vIG51bGwsIDIgZWxlbWVudHNcclxuICAgICAgICB0aGlzLnlNYXggPSBbXTsgLy8gbnVsbCwgMiBlbGVtZW50c1xyXG4gICAgICAgIHRoaXMucmV2ZXJzZVlBeGlzID0gW107IC8vIGZhbHNlLCAyIGVsZW1lbnRzXHJcbiAgICAgICAgdGhpcy5hbGxvd0luc3BlY3REYXRhID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gSUxlZ2VuZFxyXG4gICAgICAgIHRoaXMuc2hvd0xlZ2VuZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubGVnZW5kUG9zaXRpb24gPSBcIlwiOyAvLyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHRcclxuICAgICAgICB0aGlzLmxlZ2VuZE9yaWVudGF0aW9uID0gXCJcIjsgLy8gaG9yaXpvbnRhbCwgdmVydGljYWxcclxuICAgICAgICB0aGlzLmxlZ2VuZEJnQ29sb3IgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMubGVnZW5kQm9yZGVyQ29sb3IgPSBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBHZXRHcmFwaFR5cGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIEdyYXBoVHlwZS5Vbmtub3duO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTGluZUluZm8gZXh0ZW5kcyBDb21tb25DaGFydEluZm8ge1xyXG4gICAgbGluZUNvbG9yOiBzdHJpbmdbXTtcclxuICAgIGxpbmVXaWR0aDogbnVtYmVyW107XHJcbiAgICBzaG93TGluZTogYm9vbGVhbltdO1xyXG4gICAgc2hvd1BvaW50OiBib29sZWFuW107XHJcbiAgICBwb2ludENvbG9yOiBzdHJpbmdbXTtcclxuICAgIHBvaW50Qm9yZGVyQ29sb3I6IHN0cmluZ1tdO1xyXG4gICAgcG9pbnRCb3JkZXJXaWR0aDogbnVtYmVyW107XHJcbiAgICBwb2ludFNpemU6IG51bWJlcltdO1xyXG4gICAgZmlsbEdhcDogYm9vbGVhbltdO1xyXG4gICAgeUF4aXNMb2NhdGlvbjogc3RyaW5nW107XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmxpbmVDb2xvciA9IFtdOyAvLyBcIlwiXHJcbiAgICAgICAgdGhpcy5saW5lV2lkdGggPSBbXTsgLy8gMS41XHJcbiAgICAgICAgdGhpcy5zaG93TGluZSA9IFtdOyAvLyB0cnVlXHJcbiAgICAgICAgdGhpcy5zaG93UG9pbnQgPSBbXTsgLy8gdHJ1ZVxyXG4gICAgICAgIHRoaXMucG9pbnRDb2xvciA9IFtdOyAvLyAjNjliM2EyXHJcbiAgICAgICAgdGhpcy5wb2ludEJvcmRlckNvbG9yID0gW107XHJcbiAgICAgICAgdGhpcy5wb2ludEJvcmRlcldpZHRoID0gW107IC8vIDAuMFxyXG4gICAgICAgIHRoaXMucG9pbnRTaXplID0gW107IC8vIDMuMFxyXG4gICAgICAgIHRoaXMuZmlsbEdhcCA9IFtdOyAvLyBmYWxzZVxyXG4gICAgICAgIHRoaXMueUF4aXNMb2NhdGlvbiA9IFtdOyAvLyBsZWZ0LCBmb3IgZWFjaCB0YXJnZXRcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgR2V0R3JhcGhUeXBlKCkge1xyXG4gICAgICAgIHJldHVybiBHcmFwaFR5cGUuTGluZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEJhckluZm8gZXh0ZW5kcyBDb21tb25DaGFydEluZm8ge1xyXG4gICAgYmFyQ29sb3I6IHN0cmluZ1tdO1xyXG4gICAgeUF4aXNMb2NhdGlvbjogc3RyaW5nW107XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmJhckNvbG9yID0gW107IC8vICM2OWIzYTJcclxuICAgICAgICB0aGlzLnlBeGlzTG9jYXRpb24gPSBbXTsgLy8gbGVmdCwgZm9yIGVhY2ggdGFyZ2V0XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIEdldEdyYXBoVHlwZSgpIHtcclxuICAgICAgICByZXR1cm4gR3JhcGhUeXBlLkJhcjtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFBpZUluZm8gaW1wbGVtZW50cyBJR3JhcGgsIElMZWdlbmQge1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIGRhdGE6IHN0cmluZ1tdO1xyXG4gICAgZGF0YUNvbG9yOiBzdHJpbmdbXTtcclxuICAgIGRhdGFOYW1lOiBzdHJpbmdbXTtcclxuICAgIGxhYmVsOiBzdHJpbmdbXTtcclxuICAgIGhpZGVMYWJlbExlc3NUaGFuOiBudW1iZXI7XHJcbiAgICBzaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsOiBib29sZWFuO1xyXG4gICAgZXh0TGFiZWw6IHN0cmluZ1tdO1xyXG5cclxuICAgIHJhdGlvSW5uZXJSYWRpdXM6IG51bWJlcjtcclxuXHJcbiAgICAvLyBJTGVnZW5kXHJcbiAgICBzaG93TGVnZW5kOiBib29sZWFuO1xyXG4gICAgbGVnZW5kUG9zaXRpb246IHN0cmluZztcclxuICAgIGxlZ2VuZE9yaWVudGF0aW9uOiBzdHJpbmc7XHJcbiAgICBsZWdlbmRCZ0NvbG9yOiBzdHJpbmc7XHJcbiAgICBsZWdlbmRCb3JkZXJDb2xvcjogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IFtdO1xyXG4gICAgICAgIHRoaXMuZGF0YUNvbG9yID0gW107XHJcbiAgICAgICAgdGhpcy5kYXRhTmFtZSA9IFtdO1xyXG4gICAgICAgIHRoaXMubGFiZWwgPSBbXTtcclxuICAgICAgICB0aGlzLmhpZGVMYWJlbExlc3NUaGFuID0gMC4wMztcclxuICAgICAgICB0aGlzLmV4dExhYmVsID0gW107XHJcbiAgICAgICAgdGhpcy5zaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yYXRpb0lubmVyUmFkaXVzID0gMC4wO1xyXG5cclxuICAgICAgICAvLyBJTGVnZW5kXHJcbiAgICAgICAgdGhpcy5zaG93TGVnZW5kID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sZWdlbmRQb3NpdGlvbiA9IFwiXCI7IC8vIHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodFxyXG4gICAgICAgIHRoaXMubGVnZW5kT3JpZW50YXRpb24gPSBcIlwiOyAvLyBob3Jpem9udGFsLCB2ZXJ0aWNhbFxyXG4gICAgICAgIHRoaXMubGVnZW5kQmdDb2xvciA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5sZWdlbmRCb3JkZXJDb2xvciA9IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIEdldEdyYXBoVHlwZSgpIHtcclxuICAgICAgICByZXR1cm4gR3JhcGhUeXBlLlBpZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1bW1hcnlJbmZvIGltcGxlbWVudHMgSUdyYXBoIHtcclxuICAgIHRlbXBsYXRlOiBzdHJpbmc7XHJcbiAgICBzdHlsZTogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuc3R5bGUgPSBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBHZXRHcmFwaFR5cGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIEdyYXBoVHlwZS5TdW1tYXJ5O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTW9udGhJbmZvIGltcGxlbWVudHMgSUdyYXBoIHtcclxuICAgIG1vZGU6IHN0cmluZztcclxuICAgIGRhdGFzZXQ6IG51bWJlcltdO1xyXG4gICAgc3RhcnRXZWVrT246IHN0cmluZztcclxuICAgIHRocmVzaG9sZDogbnVtYmVyW107XHJcbiAgICB5TWluOiBudW1iZXJbXTtcclxuICAgIHlNYXg6IG51bWJlcltdO1xyXG4gICAgY29sb3I6IHN0cmluZztcclxuICAgIGRpbU5vdEluTW9udGg6IGJvb2xlYW47XHJcbiAgICBpbml0TW9udGg6IHN0cmluZzsgLy8gWVlZWS1NTVxyXG4gICAgc2hvd1NlbGVjdGVkVmFsdWU6IGJvb2xlYW47XHJcblxyXG4gICAgLy8gaGVhZGVyXHJcbiAgICBoZWFkZXJZZWFyQ29sb3I6IHN0cmluZztcclxuICAgIGhlYWRlck1vbnRoQ29sb3I6IHN0cmluZztcclxuICAgIGRpdmlkaW5nTGluZUNvbG9yOiBzdHJpbmc7XHJcblxyXG4gICAgLy8gY2lyY2xlcyBhbmQgcmluZ3NcclxuICAgIHNob3dDaXJjbGU6IGJvb2xlYW47XHJcbiAgICBzaG93U3RyZWFrOiBib29sZWFuO1xyXG4gICAgc2hvd1RvZGF5UmluZzogYm9vbGVhbjtcclxuICAgIHNob3dTZWxlY3RlZFJpbmc6IGJvb2xlYW47XHJcbiAgICBjaXJjbGVDb2xvcjogc3RyaW5nO1xyXG4gICAgY2lyY2xlQ29sb3JCeVZhbHVlOiBib29sZWFuO1xyXG4gICAgdG9kYXlSaW5nQ29sb3I6IHN0cmluZztcclxuICAgIHNlbGVjdGVkUmluZ0NvbG9yOiBzdHJpbmc7XHJcblxyXG4gICAgLy8gYW5ub3RhdGlvbnNcclxuICAgIHNob3dBbm5vdGF0aW9uOiBib29sZWFuO1xyXG4gICAgYW5ub3RhdGlvbjogc3RyaW5nW107XHJcbiAgICBzaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0czogYm9vbGVhbjtcclxuXHJcbiAgICAvLyBpbnRlcm5hbFxyXG4gICAgc2VsZWN0ZWREYXRlOiBzdHJpbmc7XHJcbiAgICBzZWxlY3RlZERhdGFzZXQ6IG51bWJlcjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLm1vZGUgPSBcImNpcmNsZVwiOyAvLyBjaXJjbGUsIGFubm90YXRpb25cclxuICAgICAgICB0aGlzLmRhdGFzZXQgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXJ0V2Vla09uID0gXCJTdW5cIjtcclxuICAgICAgICB0aGlzLnRocmVzaG9sZCA9IFtdOyAvLyBpZiB2YWx1ZSA+IHRocmVzaG9sZCwgd2lsbCBzaG93IGRvdFxyXG4gICAgICAgIHRoaXMueU1pbiA9IFtdO1xyXG4gICAgICAgIHRoaXMueU1heCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY29sb3IgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZGltTm90SW5Nb250aCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pbml0TW9udGggPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuc2hvd1NlbGVjdGVkVmFsdWUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyBoZWFkZXJcclxuICAgICAgICB0aGlzLmhlYWRlclllYXJDb2xvciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJNb250aENvbG9yID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRpdmlkaW5nTGluZUNvbG9yID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gY2lyY2xlcyBhbmQgcmluZ3NcclxuICAgICAgICB0aGlzLnNob3dDaXJjbGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd1N0cmVhayA9IHRydWU7IC8vIGEgc3RyZWFrIGNvbm5lY3RzIG5laWdib3IgZG90c1xyXG4gICAgICAgIHRoaXMuc2hvd1RvZGF5UmluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93U2VsZWN0ZWRSaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNpcmNsZUNvbG9yID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNpcmNsZUNvbG9yQnlWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudG9kYXlSaW5nQ29sb3IgPSBcIlwiOyAvLyB3aGl0ZVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSaW5nQ29sb3IgPSBcImZpcmVicmlja1wiO1xyXG5cclxuICAgICAgICAvLyBhbm5vdGF0aW9uc1xyXG4gICAgICAgIHRoaXMuc2hvd0Fubm90YXRpb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYW5ub3RhdGlvbiA9IFtdOyAvLyBhbm5vdGF0aW9uIGZvciBlYWNoIGRhdGFzZXQsIGFjY2VwdCBleHByZXNzaW9uIHRodXMgdmFsdWVcclxuICAgICAgICB0aGlzLnNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gaW50ZXJuYWxcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IFwiXCI7IC8vIHNlbGVjdGVkIGRhdGVcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YXNldCA9IG51bGw7IC8vIHNlbGVjdGVkIGluZGV4IG9mIGRhdGFzZXRcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgR2V0R3JhcGhUeXBlKCkge1xyXG4gICAgICAgIHJldHVybiBHcmFwaFR5cGUuTW9udGg7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBIZWF0bWFwSW5mbyBpbXBsZW1lbnRzIElHcmFwaCB7XHJcbiAgICBkYXRhc2V0OiBzdHJpbmc7XHJcbiAgICBzdGFydFdlZWtPbjogc3RyaW5nO1xyXG4gICAgb3JpZW50YXRpb246IHN0cmluZztcclxuICAgIHlNaW46IG51bWJlcjtcclxuICAgIHlNYXg6IG51bWJlcjtcclxuICAgIGNvbG9yOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhc2V0ID0gXCIwXCI7XHJcbiAgICAgICAgdGhpcy5zdGFydFdlZWtPbiA9IFwiU3VuXCI7XHJcbiAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9IFwidmVydGljYWxcIjtcclxuICAgICAgICB0aGlzLnlNaW4gPSBudWxsO1xyXG4gICAgICAgIHRoaXMueU1heCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb2xvciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIEdldEdyYXBoVHlwZSgpIHtcclxuICAgICAgICByZXR1cm4gR3JhcGhUeXBlLkhlYXRtYXA7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBCdWxsZXRJbmZvIGltcGxlbWVudHMgSUdyYXBoIHtcclxuICAgIHRpdGxlOiBzdHJpbmc7XHJcbiAgICBkYXRhc2V0OiBzdHJpbmc7XHJcbiAgICBvcmllbnRhdGlvbjogc3RyaW5nO1xyXG4gICAgdmFsdWU6IHN0cmluZztcclxuICAgIHZhbHVlVW5pdDogc3RyaW5nO1xyXG4gICAgdmFsdWVDb2xvcjogc3RyaW5nO1xyXG4gICAgcmFuZ2U6IG51bWJlcltdO1xyXG4gICAgcmFuZ2VDb2xvcjogc3RyaW5nW107XHJcbiAgICBzaG93TWFya2VyOiBib29sZWFuO1xyXG4gICAgbWFya2VyVmFsdWU6IG51bWJlcjtcclxuICAgIG1hcmtlckNvbG9yOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy50aXRsZSA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5kYXRhc2V0ID0gXCIwXCI7IC8vIGRhdGFzZXQgaWQgb3IgbmFtZVxyXG4gICAgICAgIHRoaXMub3JpZW50YXRpb24gPSBcImhvcml6b250YWxcIjsgLy8gb3IgdmVydGljYWxcclxuICAgICAgICB0aGlzLnZhbHVlID0gXCJcIjsgLy8gQ2FuIHBvc3Nlc3MgdGVtcGxhdGUgdmFyaWFsYmVcclxuICAgICAgICB0aGlzLnZhbHVlVW5pdCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy52YWx1ZUNvbG9yID0gXCIjNjliM2EyXCI7XHJcbiAgICAgICAgdGhpcy5yYW5nZSA9IFtdO1xyXG4gICAgICAgIHRoaXMucmFuZ2VDb2xvciA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2hvd01hcmtlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWFya2VyVmFsdWUgPSAwO1xyXG4gICAgICAgIHRoaXMubWFya2VyQ29sb3IgPSBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBHZXRHcmFwaFR5cGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIEdyYXBoVHlwZS5CdWxsZXQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTaXplIHtcclxuICAgIHdpZHRoOiBudW1iZXI7XHJcbiAgICBoZWlnaHQ6IG51bWJlcjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih3OiBudW1iZXIsIGg6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB3O1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE1hcmdpbiB7XHJcbiAgICB0b3A6IG51bWJlcjtcclxuICAgIHJpZ2h0OiBudW1iZXI7XHJcbiAgICBib3R0b206IG51bWJlcjtcclxuICAgIGxlZnQ6IG51bWJlcjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0b3A6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgYm90dG9tOiBudW1iZXIsIGxlZnQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMudG9wID0gdG9wO1xyXG4gICAgICAgIHRoaXMucmlnaHQgPSByaWdodDtcclxuICAgICAgICB0aGlzLmJvdHRvbSA9IGJvdHRvbTtcclxuICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVHJhbnNmb3JtIHtcclxuICAgIHRyYW5zbGF0ZVg6IG51bWJlcjtcclxuICAgIHRyYW5zbGF0ZVk6IG51bWJlcjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0cmFuc2Zvcm06IGFueSkge1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlWCA9IDA7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVZID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgbGV0IGdyb3VwcyA9IHRyYW5zZm9ybS5tYXRjaChcclxuICAgICAgICAgICAgICAgIC90cmFuc2xhdGVcXChcXHMqKD88eD5bXFxkXFwuXFwvLV0rKVxccyosXFxzKig/PHk+W1xcZFxcLlxcLy1dKylcXHMqXFwpL1xyXG4gICAgICAgICAgICApLmdyb3VwcztcclxuICAgICAgICAgICAgaWYgKGdyb3Vwcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVYID0gcGFyc2VGbG9hdChncm91cHMueCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVkgPSBwYXJzZUZsb2F0KGdyb3Vwcy55KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQ2hhcnRFbGVtZW50cyA9IHtcclxuICAgIFtrZXk6IHN0cmluZ106IGFueTtcclxufTtcclxuXHJcbmV4cG9ydCBjbGFzcyBUYWJsZURhdGEge1xyXG4gICAgZmlsZVBhdGg6IHN0cmluZztcclxuICAgIHRhYmxlSW5kZXg6IG51bWJlcjtcclxuICAgIHhEYXRhc2V0OiBRdWVyeSB8IG51bGw7XHJcbiAgICB5RGF0YXNldHM6IEFycmF5PFF1ZXJ5PjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihmaWxlUGF0aDogc3RyaW5nLCB0YWJsZUluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmZpbGVQYXRoID0gZmlsZVBhdGg7XHJcbiAgICAgICAgdGhpcy50YWJsZUluZGV4ID0gdGFibGVJbmRleDtcclxuICAgICAgICB0aGlzLnhEYXRhc2V0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnlEYXRhc2V0cyA9IFtdOyAvLyBhcnJheSBvZiBxdWVyeVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGluZ1Byb2Nlc3NJbmZvIHtcclxuICAgIGZpbGVUb3RhbDogbnVtYmVyOyAvLyB0b3RhbCBudW1iZXIgb2YgZmlsZXNcclxuICAgIGZpbGVBdmFpbGFibGU6IG51bWJlcjsgLy8gdG90YWwgYXZhaWxhYmxlIGNvdW50XHJcbiAgICBmaWxlT3V0T2ZEYXRlUmFuZ2U6IG51bWJlcjtcclxuICAgIGZpbGVOb3RJbkZvcm1hdDogbnVtYmVyO1xyXG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XHJcbiAgICBtaW5EYXRlOiBNb21lbnQ7XHJcbiAgICBtYXhEYXRlOiBNb21lbnQ7XHJcbiAgICBnb3RBbnlWYWxpZFhWYWx1ZTogYm9vbGVhbjtcclxuICAgIGdvdEFueVZhbGlkWVZhbHVlOiBib29sZWFuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZmlsZVRvdGFsID0gMDtcclxuICAgICAgICB0aGlzLmZpbGVBdmFpbGFibGUgPSAwO1xyXG4gICAgICAgIHRoaXMuZmlsZU91dE9mRGF0ZVJhbmdlID0gMDtcclxuICAgICAgICB0aGlzLmZpbGVOb3RJbkZvcm1hdCA9IDA7XHJcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMubWluRGF0ZSA9IHdpbmRvdy5tb21lbnQoXCJcIik7IC8vIGludmFsaWQgZGF0ZVxyXG4gICAgICAgIHRoaXMubWF4RGF0ZSA9IHdpbmRvdy5tb21lbnQoXCJcIik7IC8vIGludmFsaWQgZGF0ZVxyXG4gICAgICAgIHRoaXMuZ290QW55VmFsaWRYVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdvdEFueVZhbGlkWVZhbHVlID0gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFhWYWx1ZU1hcCA9IE1hcDxudW1iZXIsIHN0cmluZz47XHJcbmV4cG9ydCB0eXBlIERhdGFNYXAgPSBNYXA8c3RyaW5nLCBBcnJheTxRdWVyeVZhbHVlUGFpcj4+O1xyXG4iLCJpbXBvcnQge3BhdGh9IGZyb20gXCJkMy1wYXRoXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCB7YWJzLCBhY29zLCBhc2luLCBhdGFuMiwgY29zLCBlcHNpbG9uLCBoYWxmUGksIG1heCwgbWluLCBwaSwgc2luLCBzcXJ0LCB0YXV9IGZyb20gXCIuL21hdGguanNcIjtcblxuZnVuY3Rpb24gYXJjSW5uZXJSYWRpdXMoZCkge1xuICByZXR1cm4gZC5pbm5lclJhZGl1cztcbn1cblxuZnVuY3Rpb24gYXJjT3V0ZXJSYWRpdXMoZCkge1xuICByZXR1cm4gZC5vdXRlclJhZGl1cztcbn1cblxuZnVuY3Rpb24gYXJjU3RhcnRBbmdsZShkKSB7XG4gIHJldHVybiBkLnN0YXJ0QW5nbGU7XG59XG5cbmZ1bmN0aW9uIGFyY0VuZEFuZ2xlKGQpIHtcbiAgcmV0dXJuIGQuZW5kQW5nbGU7XG59XG5cbmZ1bmN0aW9uIGFyY1BhZEFuZ2xlKGQpIHtcbiAgcmV0dXJuIGQgJiYgZC5wYWRBbmdsZTsgLy8gTm90ZTogb3B0aW9uYWwhXG59XG5cbmZ1bmN0aW9uIGludGVyc2VjdCh4MCwgeTAsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpIHtcbiAgdmFyIHgxMCA9IHgxIC0geDAsIHkxMCA9IHkxIC0geTAsXG4gICAgICB4MzIgPSB4MyAtIHgyLCB5MzIgPSB5MyAtIHkyLFxuICAgICAgdCA9IHkzMiAqIHgxMCAtIHgzMiAqIHkxMDtcbiAgaWYgKHQgKiB0IDwgZXBzaWxvbikgcmV0dXJuO1xuICB0ID0gKHgzMiAqICh5MCAtIHkyKSAtIHkzMiAqICh4MCAtIHgyKSkgLyB0O1xuICByZXR1cm4gW3gwICsgdCAqIHgxMCwgeTAgKyB0ICogeTEwXTtcbn1cblxuLy8gQ29tcHV0ZSBwZXJwZW5kaWN1bGFyIG9mZnNldCBsaW5lIG9mIGxlbmd0aCByYy5cbi8vIGh0dHA6Ly9tYXRod29ybGQud29sZnJhbS5jb20vQ2lyY2xlLUxpbmVJbnRlcnNlY3Rpb24uaHRtbFxuZnVuY3Rpb24gY29ybmVyVGFuZ2VudHMoeDAsIHkwLCB4MSwgeTEsIHIxLCByYywgY3cpIHtcbiAgdmFyIHgwMSA9IHgwIC0geDEsXG4gICAgICB5MDEgPSB5MCAtIHkxLFxuICAgICAgbG8gPSAoY3cgPyByYyA6IC1yYykgLyBzcXJ0KHgwMSAqIHgwMSArIHkwMSAqIHkwMSksXG4gICAgICBveCA9IGxvICogeTAxLFxuICAgICAgb3kgPSAtbG8gKiB4MDEsXG4gICAgICB4MTEgPSB4MCArIG94LFxuICAgICAgeTExID0geTAgKyBveSxcbiAgICAgIHgxMCA9IHgxICsgb3gsXG4gICAgICB5MTAgPSB5MSArIG95LFxuICAgICAgeDAwID0gKHgxMSArIHgxMCkgLyAyLFxuICAgICAgeTAwID0gKHkxMSArIHkxMCkgLyAyLFxuICAgICAgZHggPSB4MTAgLSB4MTEsXG4gICAgICBkeSA9IHkxMCAtIHkxMSxcbiAgICAgIGQyID0gZHggKiBkeCArIGR5ICogZHksXG4gICAgICByID0gcjEgLSByYyxcbiAgICAgIEQgPSB4MTEgKiB5MTAgLSB4MTAgKiB5MTEsXG4gICAgICBkID0gKGR5IDwgMCA/IC0xIDogMSkgKiBzcXJ0KG1heCgwLCByICogciAqIGQyIC0gRCAqIEQpKSxcbiAgICAgIGN4MCA9IChEICogZHkgLSBkeCAqIGQpIC8gZDIsXG4gICAgICBjeTAgPSAoLUQgKiBkeCAtIGR5ICogZCkgLyBkMixcbiAgICAgIGN4MSA9IChEICogZHkgKyBkeCAqIGQpIC8gZDIsXG4gICAgICBjeTEgPSAoLUQgKiBkeCArIGR5ICogZCkgLyBkMixcbiAgICAgIGR4MCA9IGN4MCAtIHgwMCxcbiAgICAgIGR5MCA9IGN5MCAtIHkwMCxcbiAgICAgIGR4MSA9IGN4MSAtIHgwMCxcbiAgICAgIGR5MSA9IGN5MSAtIHkwMDtcblxuICAvLyBQaWNrIHRoZSBjbG9zZXIgb2YgdGhlIHR3byBpbnRlcnNlY3Rpb24gcG9pbnRzLlxuICAvLyBUT0RPIElzIHRoZXJlIGEgZmFzdGVyIHdheSB0byBkZXRlcm1pbmUgd2hpY2ggaW50ZXJzZWN0aW9uIHRvIHVzZT9cbiAgaWYgKGR4MCAqIGR4MCArIGR5MCAqIGR5MCA+IGR4MSAqIGR4MSArIGR5MSAqIGR5MSkgY3gwID0gY3gxLCBjeTAgPSBjeTE7XG5cbiAgcmV0dXJuIHtcbiAgICBjeDogY3gwLFxuICAgIGN5OiBjeTAsXG4gICAgeDAxOiAtb3gsXG4gICAgeTAxOiAtb3ksXG4gICAgeDExOiBjeDAgKiAocjEgLyByIC0gMSksXG4gICAgeTExOiBjeTAgKiAocjEgLyByIC0gMSlcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBpbm5lclJhZGl1cyA9IGFyY0lubmVyUmFkaXVzLFxuICAgICAgb3V0ZXJSYWRpdXMgPSBhcmNPdXRlclJhZGl1cyxcbiAgICAgIGNvcm5lclJhZGl1cyA9IGNvbnN0YW50KDApLFxuICAgICAgcGFkUmFkaXVzID0gbnVsbCxcbiAgICAgIHN0YXJ0QW5nbGUgPSBhcmNTdGFydEFuZ2xlLFxuICAgICAgZW5kQW5nbGUgPSBhcmNFbmRBbmdsZSxcbiAgICAgIHBhZEFuZ2xlID0gYXJjUGFkQW5nbGUsXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICBmdW5jdGlvbiBhcmMoKSB7XG4gICAgdmFyIGJ1ZmZlcixcbiAgICAgICAgcixcbiAgICAgICAgcjAgPSAraW5uZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgcjEgPSArb3V0ZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgYTAgPSBzdGFydEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgLSBoYWxmUGksXG4gICAgICAgIGExID0gZW5kQW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSAtIGhhbGZQaSxcbiAgICAgICAgZGEgPSBhYnMoYTEgLSBhMCksXG4gICAgICAgIGN3ID0gYTEgPiBhMDtcblxuICAgIGlmICghY29udGV4dCkgY29udGV4dCA9IGJ1ZmZlciA9IHBhdGgoKTtcblxuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBvdXRlciByYWRpdXMgaXMgYWx3YXlzIGxhcmdlciB0aGFuIHRoZSBpbm5lciByYWRpdXMuXG4gICAgaWYgKHIxIDwgcjApIHIgPSByMSwgcjEgPSByMCwgcjAgPSByO1xuXG4gICAgLy8gSXMgaXQgYSBwb2ludD9cbiAgICBpZiAoIShyMSA+IGVwc2lsb24pKSBjb250ZXh0Lm1vdmVUbygwLCAwKTtcblxuICAgIC8vIE9yIGlzIGl0IGEgY2lyY2xlIG9yIGFubnVsdXM/XG4gICAgZWxzZSBpZiAoZGEgPiB0YXUgLSBlcHNpbG9uKSB7XG4gICAgICBjb250ZXh0Lm1vdmVUbyhyMSAqIGNvcyhhMCksIHIxICogc2luKGEwKSk7XG4gICAgICBjb250ZXh0LmFyYygwLCAwLCByMSwgYTAsIGExLCAhY3cpO1xuICAgICAgaWYgKHIwID4gZXBzaWxvbikge1xuICAgICAgICBjb250ZXh0Lm1vdmVUbyhyMCAqIGNvcyhhMSksIHIwICogc2luKGExKSk7XG4gICAgICAgIGNvbnRleHQuYXJjKDAsIDAsIHIwLCBhMSwgYTAsIGN3KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPciBpcyBpdCBhIGNpcmN1bGFyIG9yIGFubnVsYXIgc2VjdG9yP1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGEwMSA9IGEwLFxuICAgICAgICAgIGExMSA9IGExLFxuICAgICAgICAgIGEwMCA9IGEwLFxuICAgICAgICAgIGExMCA9IGExLFxuICAgICAgICAgIGRhMCA9IGRhLFxuICAgICAgICAgIGRhMSA9IGRhLFxuICAgICAgICAgIGFwID0gcGFkQW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSAvIDIsXG4gICAgICAgICAgcnAgPSAoYXAgPiBlcHNpbG9uKSAmJiAocGFkUmFkaXVzID8gK3BhZFJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogc3FydChyMCAqIHIwICsgcjEgKiByMSkpLFxuICAgICAgICAgIHJjID0gbWluKGFicyhyMSAtIHIwKSAvIDIsICtjb3JuZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSksXG4gICAgICAgICAgcmMwID0gcmMsXG4gICAgICAgICAgcmMxID0gcmMsXG4gICAgICAgICAgdDAsXG4gICAgICAgICAgdDE7XG5cbiAgICAgIC8vIEFwcGx5IHBhZGRpbmc/IE5vdGUgdGhhdCBzaW5jZSByMSDiiaUgcjAsIGRhMSDiiaUgZGEwLlxuICAgICAgaWYgKHJwID4gZXBzaWxvbikge1xuICAgICAgICB2YXIgcDAgPSBhc2luKHJwIC8gcjAgKiBzaW4oYXApKSxcbiAgICAgICAgICAgIHAxID0gYXNpbihycCAvIHIxICogc2luKGFwKSk7XG4gICAgICAgIGlmICgoZGEwIC09IHAwICogMikgPiBlcHNpbG9uKSBwMCAqPSAoY3cgPyAxIDogLTEpLCBhMDAgKz0gcDAsIGExMCAtPSBwMDtcbiAgICAgICAgZWxzZSBkYTAgPSAwLCBhMDAgPSBhMTAgPSAoYTAgKyBhMSkgLyAyO1xuICAgICAgICBpZiAoKGRhMSAtPSBwMSAqIDIpID4gZXBzaWxvbikgcDEgKj0gKGN3ID8gMSA6IC0xKSwgYTAxICs9IHAxLCBhMTEgLT0gcDE7XG4gICAgICAgIGVsc2UgZGExID0gMCwgYTAxID0gYTExID0gKGEwICsgYTEpIC8gMjtcbiAgICAgIH1cblxuICAgICAgdmFyIHgwMSA9IHIxICogY29zKGEwMSksXG4gICAgICAgICAgeTAxID0gcjEgKiBzaW4oYTAxKSxcbiAgICAgICAgICB4MTAgPSByMCAqIGNvcyhhMTApLFxuICAgICAgICAgIHkxMCA9IHIwICogc2luKGExMCk7XG5cbiAgICAgIC8vIEFwcGx5IHJvdW5kZWQgY29ybmVycz9cbiAgICAgIGlmIChyYyA+IGVwc2lsb24pIHtcbiAgICAgICAgdmFyIHgxMSA9IHIxICogY29zKGExMSksXG4gICAgICAgICAgICB5MTEgPSByMSAqIHNpbihhMTEpLFxuICAgICAgICAgICAgeDAwID0gcjAgKiBjb3MoYTAwKSxcbiAgICAgICAgICAgIHkwMCA9IHIwICogc2luKGEwMCksXG4gICAgICAgICAgICBvYztcblxuICAgICAgICAvLyBSZXN0cmljdCB0aGUgY29ybmVyIHJhZGl1cyBhY2NvcmRpbmcgdG8gdGhlIHNlY3RvciBhbmdsZS5cbiAgICAgICAgaWYgKGRhIDwgcGkgJiYgKG9jID0gaW50ZXJzZWN0KHgwMSwgeTAxLCB4MDAsIHkwMCwgeDExLCB5MTEsIHgxMCwgeTEwKSkpIHtcbiAgICAgICAgICB2YXIgYXggPSB4MDEgLSBvY1swXSxcbiAgICAgICAgICAgICAgYXkgPSB5MDEgLSBvY1sxXSxcbiAgICAgICAgICAgICAgYnggPSB4MTEgLSBvY1swXSxcbiAgICAgICAgICAgICAgYnkgPSB5MTEgLSBvY1sxXSxcbiAgICAgICAgICAgICAga2MgPSAxIC8gc2luKGFjb3MoKGF4ICogYnggKyBheSAqIGJ5KSAvIChzcXJ0KGF4ICogYXggKyBheSAqIGF5KSAqIHNxcnQoYnggKiBieCArIGJ5ICogYnkpKSkgLyAyKSxcbiAgICAgICAgICAgICAgbGMgPSBzcXJ0KG9jWzBdICogb2NbMF0gKyBvY1sxXSAqIG9jWzFdKTtcbiAgICAgICAgICByYzAgPSBtaW4ocmMsIChyMCAtIGxjKSAvIChrYyAtIDEpKTtcbiAgICAgICAgICByYzEgPSBtaW4ocmMsIChyMSAtIGxjKSAvIChrYyArIDEpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJcyB0aGUgc2VjdG9yIGNvbGxhcHNlZCB0byBhIGxpbmU/XG4gICAgICBpZiAoIShkYTEgPiBlcHNpbG9uKSkgY29udGV4dC5tb3ZlVG8oeDAxLCB5MDEpO1xuXG4gICAgICAvLyBEb2VzIHRoZSBzZWN0b3LigJlzIG91dGVyIHJpbmcgaGF2ZSByb3VuZGVkIGNvcm5lcnM/XG4gICAgICBlbHNlIGlmIChyYzEgPiBlcHNpbG9uKSB7XG4gICAgICAgIHQwID0gY29ybmVyVGFuZ2VudHMoeDAwLCB5MDAsIHgwMSwgeTAxLCByMSwgcmMxLCBjdyk7XG4gICAgICAgIHQxID0gY29ybmVyVGFuZ2VudHMoeDExLCB5MTEsIHgxMCwgeTEwLCByMSwgcmMxLCBjdyk7XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8odDAuY3ggKyB0MC54MDEsIHQwLmN5ICsgdDAueTAxKTtcblxuICAgICAgICAvLyBIYXZlIHRoZSBjb3JuZXJzIG1lcmdlZD9cbiAgICAgICAgaWYgKHJjMSA8IHJjKSBjb250ZXh0LmFyYyh0MC5jeCwgdDAuY3ksIHJjMSwgYXRhbjIodDAueTAxLCB0MC54MDEpLCBhdGFuMih0MS55MDEsIHQxLngwMSksICFjdyk7XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBkcmF3IHRoZSB0d28gY29ybmVycyBhbmQgdGhlIHJpbmcuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnRleHQuYXJjKHQwLmN4LCB0MC5jeSwgcmMxLCBhdGFuMih0MC55MDEsIHQwLngwMSksIGF0YW4yKHQwLnkxMSwgdDAueDExKSwgIWN3KTtcbiAgICAgICAgICBjb250ZXh0LmFyYygwLCAwLCByMSwgYXRhbjIodDAuY3kgKyB0MC55MTEsIHQwLmN4ICsgdDAueDExKSwgYXRhbjIodDEuY3kgKyB0MS55MTEsIHQxLmN4ICsgdDEueDExKSwgIWN3KTtcbiAgICAgICAgICBjb250ZXh0LmFyYyh0MS5jeCwgdDEuY3ksIHJjMSwgYXRhbjIodDEueTExLCB0MS54MTEpLCBhdGFuMih0MS55MDEsIHQxLngwMSksICFjdyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gT3IgaXMgdGhlIG91dGVyIHJpbmcganVzdCBhIGNpcmN1bGFyIGFyYz9cbiAgICAgIGVsc2UgY29udGV4dC5tb3ZlVG8oeDAxLCB5MDEpLCBjb250ZXh0LmFyYygwLCAwLCByMSwgYTAxLCBhMTEsICFjdyk7XG5cbiAgICAgIC8vIElzIHRoZXJlIG5vIGlubmVyIHJpbmcsIGFuZCBpdOKAmXMgYSBjaXJjdWxhciBzZWN0b3I/XG4gICAgICAvLyBPciBwZXJoYXBzIGl04oCZcyBhbiBhbm51bGFyIHNlY3RvciBjb2xsYXBzZWQgZHVlIHRvIHBhZGRpbmc/XG4gICAgICBpZiAoIShyMCA+IGVwc2lsb24pIHx8ICEoZGEwID4gZXBzaWxvbikpIGNvbnRleHQubGluZVRvKHgxMCwgeTEwKTtcblxuICAgICAgLy8gRG9lcyB0aGUgc2VjdG9y4oCZcyBpbm5lciByaW5nIChvciBwb2ludCkgaGF2ZSByb3VuZGVkIGNvcm5lcnM/XG4gICAgICBlbHNlIGlmIChyYzAgPiBlcHNpbG9uKSB7XG4gICAgICAgIHQwID0gY29ybmVyVGFuZ2VudHMoeDEwLCB5MTAsIHgxMSwgeTExLCByMCwgLXJjMCwgY3cpO1xuICAgICAgICB0MSA9IGNvcm5lclRhbmdlbnRzKHgwMSwgeTAxLCB4MDAsIHkwMCwgcjAsIC1yYzAsIGN3KTtcblxuICAgICAgICBjb250ZXh0LmxpbmVUbyh0MC5jeCArIHQwLngwMSwgdDAuY3kgKyB0MC55MDEpO1xuXG4gICAgICAgIC8vIEhhdmUgdGhlIGNvcm5lcnMgbWVyZ2VkP1xuICAgICAgICBpZiAocmMwIDwgcmMpIGNvbnRleHQuYXJjKHQwLmN4LCB0MC5jeSwgcmMwLCBhdGFuMih0MC55MDEsIHQwLngwMSksIGF0YW4yKHQxLnkwMSwgdDEueDAxKSwgIWN3KTtcblxuICAgICAgICAvLyBPdGhlcndpc2UsIGRyYXcgdGhlIHR3byBjb3JuZXJzIGFuZCB0aGUgcmluZy5cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29udGV4dC5hcmModDAuY3gsIHQwLmN5LCByYzAsIGF0YW4yKHQwLnkwMSwgdDAueDAxKSwgYXRhbjIodDAueTExLCB0MC54MTEpLCAhY3cpO1xuICAgICAgICAgIGNvbnRleHQuYXJjKDAsIDAsIHIwLCBhdGFuMih0MC5jeSArIHQwLnkxMSwgdDAuY3ggKyB0MC54MTEpLCBhdGFuMih0MS5jeSArIHQxLnkxMSwgdDEuY3ggKyB0MS54MTEpLCBjdyk7XG4gICAgICAgICAgY29udGV4dC5hcmModDEuY3gsIHQxLmN5LCByYzAsIGF0YW4yKHQxLnkxMSwgdDEueDExKSwgYXRhbjIodDEueTAxLCB0MS54MDEpLCAhY3cpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE9yIGlzIHRoZSBpbm5lciByaW5nIGp1c3QgYSBjaXJjdWxhciBhcmM/XG4gICAgICBlbHNlIGNvbnRleHQuYXJjKDAsIDAsIHIwLCBhMTAsIGEwMCwgY3cpO1xuICAgIH1cblxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gY29udGV4dCA9IG51bGwsIGJ1ZmZlciArIFwiXCIgfHwgbnVsbDtcbiAgfVxuXG4gIGFyYy5jZW50cm9pZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gKCtpbm5lclJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpICsgK291dGVyUmFkaXVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIC8gMixcbiAgICAgICAgYSA9ICgrc3RhcnRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpICsgK2VuZEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIC8gMiAtIHBpIC8gMjtcbiAgICByZXR1cm4gW2NvcyhhKSAqIHIsIHNpbihhKSAqIHJdO1xuICB9O1xuXG4gIGFyYy5pbm5lclJhZGl1cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbm5lclJhZGl1cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogaW5uZXJSYWRpdXM7XG4gIH07XG5cbiAgYXJjLm91dGVyUmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKG91dGVyUmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBvdXRlclJhZGl1cztcbiAgfTtcblxuICBhcmMuY29ybmVyUmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNvcm5lclJhZGl1cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogY29ybmVyUmFkaXVzO1xuICB9O1xuXG4gIGFyYy5wYWRSYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkUmFkaXVzID0gXyA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogcGFkUmFkaXVzO1xuICB9O1xuXG4gIGFyYy5zdGFydEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0YXJ0QW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IHN0YXJ0QW5nbGU7XG4gIH07XG5cbiAgYXJjLmVuZEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGVuZEFuZ2xlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBlbmRBbmdsZTtcbiAgfTtcblxuICBhcmMucGFkQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkQW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IHBhZEFuZ2xlO1xuICB9O1xuXG4gIGFyYy5jb250ZXh0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKChjb250ZXh0ID0gXyA9PSBudWxsID8gbnVsbCA6IF8pLCBhcmMpIDogY29udGV4dDtcbiAgfTtcblxuICByZXR1cm4gYXJjO1xufVxuIiwiZXhwb3J0IHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwib2JqZWN0XCIgJiYgXCJsZW5ndGhcIiBpbiB4XG4gICAgPyB4IC8vIEFycmF5LCBUeXBlZEFycmF5LCBOb2RlTGlzdCwgYXJyYXktbGlrZVxuICAgIDogQXJyYXkuZnJvbSh4KTsgLy8gTWFwLCBTZXQsIGl0ZXJhYmxlLCBzdHJpbmcsIG9yIGFueXRoaW5nIGVsc2Vcbn1cbiIsImZ1bmN0aW9uIExpbmVhcihjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5MaW5lYXIucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IC8vIHByb2NlZWRcbiAgICAgIGRlZmF1bHQ6IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpOyBicmVhaztcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBMaW5lYXIoY29udGV4dCk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24geChwKSB7XG4gIHJldHVybiBwWzBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24geShwKSB7XG4gIHJldHVybiBwWzFdO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYiA8IGEgPyAtMSA6IGIgPiBhID8gMSA6IGIgPj0gYSA/IDAgOiBOYU47XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkKSB7XG4gIHJldHVybiBkO1xufVxuIiwiaW1wb3J0IHsgUmVuZGVySW5mbywgU2l6ZSwgVGV4dFZhbHVlTWFwLCBUcmFuc2Zvcm0gfSBmcm9tIFwiLi9kYXRhXCI7XHJcbmltcG9ydCB7IFRGaWxlLCBURm9sZGVyLCBub3JtYWxpemVQYXRoIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IFZhbHVlVHlwZSB9IGZyb20gXCIuL2RhdGFcIjtcclxuaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XHJcbmltcG9ydCB7IE1vbWVudCwgRHVyYXRpb24gfSBmcm9tIFwibW9tZW50XCI7XHJcblxyXG4vLyBkYXRlIGFuZCB0aW1lXHJcbmZ1bmN0aW9uIG1ha2VUaW1lRm9ybWF0KCkge1xyXG4gICAgLy9ISDogMi1kaWdpdHMgaG91cnMgKDI0IGhvdXIgdGltZSkgZnJvbSAwIHRvIDIzLCBIOiwgMi1kaWdpdHMgaG91cnMgKDI0IGhvdXIgdGltZSkgZnJvbSAwIHRvIDIzIHdpdGhvdXQgbGVhZGluZyAwXHJcbiAgICAvLyBoaDogMi1kaWdpdHMgaG91cnMgKDEyIGhvdXIgdGltZSksIGg6IDItZGlnaXRzIGhvdXJzICgxMiBob3VyIHRpbWUpIHdpdGhvdXQgbGVhZGluZyAwXHJcbiAgICAvLyBhL0E6IGFtIG9yIHBtXHJcbiAgICBjb25zdCBmbXRIb3VycyA9IFtcIkhIXCIsIFwiSFwiLCBcImhoXCIsIFwiaFwiXTtcclxuICAgIC8vbW06IDItZGlnaXRzIG1pbnV0ZXMsIG06IDItZGlnaXRzIG1pbnV0ZXMgd2l0aG91dCBsZWFkaW5nIHplcm9cclxuICAgIGNvbnN0IGZtdE1pbnMgPSBbXCJtbVwiLCBcIm1cIl07XHJcbiAgICAvLyBzczogMi1kaWdpdHMgc2Vjb25kcywgczogMi1kaWdpdHMgc2Vjb25kcyB3aXRob3V0IGxlYWRpbmcgemVyb1xyXG4gICAgLy8gY2FuIGJlIGVtcHR5XHJcbiAgICBjb25zdCBmbXRTZWNzID0gW1wic3NcIiwgXCJzXCIsIFwiXCJdO1xyXG5cclxuICAgIGxldCB0aW1lRm9ybWF0ID0gW107XHJcbiAgICBmb3IgKGxldCBmbXRIb3VyIG9mIGZtdEhvdXJzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgZm10TWluIG9mIGZtdE1pbnMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgZm10U2VjIG9mIGZtdFNlY3MpIHtcclxuICAgICAgICAgICAgICAgIGxldCBmbXQgPSBgJHtmbXRIb3VyfToke2ZtdE1pbn1gO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZtdFNlYyAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGZtdCArPSBgOiR7Zm10U2VjfWA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZm10SG91ci5jb250YWlucyhcImhcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICBmbXQgKz0gXCIgYVwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGltZUZvcm1hdC5wdXNoKGZtdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvL2NvbnNvbGUubG9nKHRpbWVGb3JtYXQpO1xyXG4gICAgcmV0dXJuIHRpbWVGb3JtYXQ7XHJcbn1cclxuY29uc3QgdGltZUZvcm1hdCA9IG1ha2VUaW1lRm9ybWF0KCk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZVN0cmluZ0Zyb21JbnB1dFN0cmluZyhcclxuICAgIGlucHV0U3RyaW5nOiBzdHJpbmcsXHJcbiAgICBkYXRlRm9ybWF0UHJlZml4OiBzdHJpbmcsXHJcbiAgICBkYXRlRm9ybWF0U3VmZml4OiBzdHJpbmdcclxuKSB7XHJcbiAgICBpZiAoIWRhdGVGb3JtYXRQcmVmaXggJiYgIWRhdGVGb3JtYXRTdWZmaXgpIHJldHVybiBpbnB1dFN0cmluZztcclxuXHJcbiAgICBsZXQgZGF0ZVN0cmluZyA9IGlucHV0U3RyaW5nO1xyXG4gICAgaWYgKGRhdGVTdHJpbmcuc3RhcnRzV2l0aChcIl5cIikpIHtcclxuICAgICAgICBkYXRlU3RyaW5nID0gZGF0ZVN0cmluZy5zbGljZSgxKTtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKGRhdGVTdHJpbmcpO1xyXG5cclxuICAgIGlmIChkYXRlRm9ybWF0UHJlZml4KSB7XHJcbiAgICAgICAgbGV0IHN0clJlZ2V4ID0gXCJeKFwiICsgZGF0ZUZvcm1hdFByZWZpeCArIFwiKVwiO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHN0clJlZ2V4KTtcclxuICAgICAgICBsZXQgcmVnZXggPSBuZXcgUmVnRXhwKHN0clJlZ2V4LCBcImdtXCIpO1xyXG4gICAgICAgIGlmIChyZWdleC50ZXN0KGRhdGVTdHJpbmcpKSB7XHJcbiAgICAgICAgICAgIGRhdGVTdHJpbmcgPSBkYXRlU3RyaW5nLnJlcGxhY2UocmVnZXgsIFwiXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKGRhdGVTdHJpbmcpO1xyXG5cclxuICAgIGlmIChkYXRlRm9ybWF0U3VmZml4KSB7XHJcbiAgICAgICAgbGV0IHN0clJlZ2V4ID0gXCIoXCIgKyBkYXRlRm9ybWF0U3VmZml4ICsgXCIpJFwiO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHN0clJlZ2V4KTtcclxuICAgICAgICBsZXQgcmVnZXggPSBuZXcgUmVnRXhwKHN0clJlZ2V4LCBcImdtXCIpO1xyXG4gICAgICAgIGlmIChyZWdleC50ZXN0KGRhdGVTdHJpbmcpKSB7XHJcbiAgICAgICAgICAgIGRhdGVTdHJpbmcgPSBkYXRlU3RyaW5nLnJlcGxhY2UocmVnZXgsIFwiXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKGRhdGVTdHJpbmcpO1xyXG5cclxuICAgIHJldHVybiBkYXRlU3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RyVG9EYXRlKHN0ckRhdGU6IHN0cmluZywgZGF0ZUZvcm1hdDogc3RyaW5nKTogTW9tZW50IHtcclxuICAgIGxldCBmb3JtYXQ6IGFueSA9IGRhdGVGb3JtYXQ7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAgIHN0ckRhdGUubGVuZ3RoID4gNCAmJlxyXG4gICAgICAgIHN0ckRhdGUuc3RhcnRzV2l0aChcIltbXCIpICYmXHJcbiAgICAgICAgc3RyRGF0ZS5lbmRzV2l0aChcIl1dXCIpXHJcbiAgICApIHtcclxuICAgICAgICBzdHJEYXRlID0gc3RyRGF0ZS5zdWJzdHJpbmcoMiwgc3RyRGF0ZS5sZW5ndGggLSAyKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGF0ZUZvcm1hdC50b0xvd2VyQ2FzZSgpID09PSBcImlzby04NjAxXCIpIHtcclxuICAgICAgICBmb3JtYXQgPSB3aW5kb3cubW9tZW50LklTT184NjAxO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChzdHJEYXRlLCBmb3JtYXQsIHRydWUpO1xyXG5cclxuICAgIC8vIHN0aXAgdGltZVxyXG4gICAgZGF0ZSA9IGRhdGUuc3RhcnRPZihcImRheVwiKTtcclxuXHJcbiAgICByZXR1cm4gZGF0ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gZXh0cmFjdFZhbHVlRnJvbUR1cmF0aW9uU3RyaW5nKFxyXG4gICAgc3RyRHVyYXRpb246IHN0cmluZyxcclxuICAgIHVuaXRzOiBBcnJheTxzdHJpbmc+LFxyXG4gICAgcmVtb3ZlUGF0dGVybjogYm9vbGVhbiA9IHRydWVcclxuKTogW251bWJlciwgc3RyaW5nXSB7XHJcbiAgICBpZiAoIXN0ckR1cmF0aW9uIHx8ICF1bml0cyB8fCB1bml0cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gW251bGwsIHN0ckR1cmF0aW9uXTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdmFsdWUgPSBudWxsO1xyXG4gICAgY29uc3Qgc3RyUmVnZXggPSBcIl4oPzx2YWx1ZT5bMC05XSspKFwiICsgdW5pdHMuam9pbihcInxcIikgKyBcIikkXCI7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhzdHJSZWdleCk7XHJcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoc3RyUmVnZXgsIFwiZ21cIik7XHJcbiAgICBsZXQgbWF0Y2ggPSByZWdleC5leGVjKHN0ckR1cmF0aW9uKTtcclxuICAgIGlmIChcclxuICAgICAgICBtYXRjaCAmJlxyXG4gICAgICAgIHR5cGVvZiBtYXRjaC5ncm91cHMgIT09IFwidW5kZWZpbmVkXCIgJiZcclxuICAgICAgICB0eXBlb2YgbWF0Y2guZ3JvdXBzLnZhbHVlICE9PSBcInVuZGVmaW5lZFwiXHJcbiAgICApIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtYXRjaCk7XHJcbiAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KG1hdGNoLmdyb3Vwcy52YWx1ZSk7XHJcbiAgICAgICAgaWYgKE51bWJlci5pc051bWJlcih2YWx1ZSkgJiYgIU51bWJlci5pc05hTih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgaWYgKHJlbW92ZVBhdHRlcm4pIHtcclxuICAgICAgICAgICAgICAgIHN0ckR1cmF0aW9uID0gc3RyRHVyYXRpb24ucmVwbGFjZShyZWdleCwgXCJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codmFsdWUpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhzdHJEdXJhdGlvbik7XHJcbiAgICAgICAgICAgIHJldHVybiBbdmFsdWUsIHN0ckR1cmF0aW9uXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFtudWxsLCBzdHJEdXJhdGlvbl07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uU3RyaW5nKHN0ckR1cmF0aW9uOiBzdHJpbmcpIHtcclxuICAgIC8vZHVyYXRpb24gc3RyaW5nIGZvcm1hdDpcclxuICAgIC8veWVhciAoeWVhcnMsIHksIFkpLFxyXG4gICAgLy9tb250aCAobW9udGhzLCBNKSwgLy8gbSB3aWxsIGNvbmZsaWN0IHdpdGggbWludXRlISEhXHJcbiAgICAvL3dlZWsgKHdlZWtzLCB3LCBXKSxcclxuICAgIC8vZGF5IChkYXlzLCBkLCBEKSxcclxuICAgIC8vaG91ciAoaG91cnMsIGgsIEgpLFxyXG4gICAgLy9taW51dGUgKG1pbnV0ZXMsIG0pLCAvLyBNIHdpbGwgY29uZmxpY3Qgd2l0aCBtb250aCEhIVxyXG4gICAgLy9zZWNvbmQgKHNlY29uZHMsIHMsIFMpXHJcbiAgICBpZiAoIXN0ckR1cmF0aW9uKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBsZXQgZHVyYXRpb246IER1cmF0aW9uID0gd2luZG93Lm1vbWVudC5kdXJhdGlvbigwKTtcclxuICAgIGxldCBoYXNWYWx1ZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBuZWdhdGl2ZVZhbHVlID0gZmFsc2U7XHJcbiAgICBpZiAoc3RyRHVyYXRpb24uc3RhcnRzV2l0aChcIitcIikpIHtcclxuICAgICAgICBuZWdhdGl2ZVZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgc3RyRHVyYXRpb24gPSBzdHJEdXJhdGlvbi5zdWJzdHJpbmcoMSk7XHJcbiAgICB9XHJcbiAgICBpZiAoc3RyRHVyYXRpb24uc3RhcnRzV2l0aChcIi1cIikpIHtcclxuICAgICAgICBuZWdhdGl2ZVZhbHVlID0gdHJ1ZTtcclxuICAgICAgICBzdHJEdXJhdGlvbiA9IHN0ckR1cmF0aW9uLnN1YnN0cmluZygxKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgeWVhclZhbHVlID0gbnVsbDtcclxuICAgIFt5ZWFyVmFsdWUsIHN0ckR1cmF0aW9uXSA9IGV4dHJhY3RWYWx1ZUZyb21EdXJhdGlvblN0cmluZyhzdHJEdXJhdGlvbiwgW1xyXG4gICAgICAgIFwieWVhclwiLFxyXG4gICAgICAgIFwieWVhcnNcIixcclxuICAgICAgICBcIllcIixcclxuICAgICAgICBcInlcIixcclxuICAgIF0pO1xyXG4gICAgaWYgKHllYXJWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChuZWdhdGl2ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgIHllYXJWYWx1ZSAqPSAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZHVyYXRpb24uYWRkKHllYXJWYWx1ZSwgXCJ5ZWFyc1wiKTtcclxuICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG1vbnRoVmFsdWUgPSBudWxsO1xyXG4gICAgW21vbnRoVmFsdWUsIHN0ckR1cmF0aW9uXSA9IGV4dHJhY3RWYWx1ZUZyb21EdXJhdGlvblN0cmluZyhzdHJEdXJhdGlvbiwgW1xyXG4gICAgICAgIFwibW9udGhcIixcclxuICAgICAgICBcIm1vbnRoc1wiLFxyXG4gICAgICAgIFwiTVwiLFxyXG4gICAgXSk7XHJcbiAgICBpZiAobW9udGhWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChuZWdhdGl2ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgIG1vbnRoVmFsdWUgKj0gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGR1cmF0aW9uLmFkZChtb250aFZhbHVlLCBcIm1vbnRoc1wiKTtcclxuICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHdlZWtWYWx1ZSA9IG51bGw7XHJcbiAgICBbd2Vla1ZhbHVlLCBzdHJEdXJhdGlvbl0gPSBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoc3RyRHVyYXRpb24sIFtcclxuICAgICAgICBcIndlZWtcIixcclxuICAgICAgICBcIndlZWtzXCIsXHJcbiAgICAgICAgXCJXXCIsXHJcbiAgICAgICAgXCJ3XCIsXHJcbiAgICBdKTtcclxuICAgIGlmICh3ZWVrVmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICBpZiAobmVnYXRpdmVWYWx1ZSkge1xyXG4gICAgICAgICAgICB3ZWVrVmFsdWUgKj0gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGR1cmF0aW9uLmFkZCh3ZWVrVmFsdWUsIFwid2Vla3NcIik7XHJcbiAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkYXlWYWx1ZSA9IG51bGw7XHJcbiAgICBbZGF5VmFsdWUsIHN0ckR1cmF0aW9uXSA9IGV4dHJhY3RWYWx1ZUZyb21EdXJhdGlvblN0cmluZyhzdHJEdXJhdGlvbiwgW1xyXG4gICAgICAgIFwiZGF5XCIsXHJcbiAgICAgICAgXCJkYXlzXCIsXHJcbiAgICAgICAgXCJEXCIsXHJcbiAgICAgICAgXCJkXCIsXHJcbiAgICBdKTtcclxuICAgIGlmIChkYXlWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChuZWdhdGl2ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgIGRheVZhbHVlICo9IC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkdXJhdGlvbi5hZGQoZGF5VmFsdWUsIFwiZGF5c1wiKTtcclxuICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhvdXJWYWx1ZSA9IG51bGw7XHJcbiAgICBbaG91clZhbHVlLCBzdHJEdXJhdGlvbl0gPSBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoc3RyRHVyYXRpb24sIFtcclxuICAgICAgICBcImhvdXJcIixcclxuICAgICAgICBcImhvdXJzXCIsXHJcbiAgICAgICAgXCJIXCIsXHJcbiAgICAgICAgXCJoXCIsXHJcbiAgICBdKTtcclxuICAgIGlmIChob3VyVmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICBpZiAobmVnYXRpdmVWYWx1ZSkge1xyXG4gICAgICAgICAgICBob3VyVmFsdWUgKj0gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGR1cmF0aW9uLmFkZChob3VyVmFsdWUsIFwiaG91cnNcIik7XHJcbiAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBtaW51dGVWYWx1ZSA9IG51bGw7XHJcbiAgICBbbWludXRlVmFsdWUsIHN0ckR1cmF0aW9uXSA9IGV4dHJhY3RWYWx1ZUZyb21EdXJhdGlvblN0cmluZyhzdHJEdXJhdGlvbiwgW1xyXG4gICAgICAgIFwibWludXRlXCIsXHJcbiAgICAgICAgXCJtaW51dGVzXCIsXHJcbiAgICAgICAgXCJtXCIsXHJcbiAgICBdKTtcclxuICAgIGlmIChtaW51dGVWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChuZWdhdGl2ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgIG1pbnV0ZVZhbHVlICo9IC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkdXJhdGlvbi5hZGQobWludXRlVmFsdWUsIFwibWludXRlc1wiKTtcclxuICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHNlY29uZFZhbHVlID0gbnVsbDtcclxuICAgIFtzZWNvbmRWYWx1ZSwgc3RyRHVyYXRpb25dID0gZXh0cmFjdFZhbHVlRnJvbUR1cmF0aW9uU3RyaW5nKHN0ckR1cmF0aW9uLCBbXHJcbiAgICAgICAgXCJzZWNvbmRcIixcclxuICAgICAgICBcInNlY29uZHNcIixcclxuICAgICAgICBcIlNcIixcclxuICAgICAgICBcInNcIixcclxuICAgIF0pO1xyXG4gICAgaWYgKHNlY29uZFZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKG5lZ2F0aXZlVmFsdWUpIHtcclxuICAgICAgICAgICAgc2Vjb25kVmFsdWUgKj0gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGR1cmF0aW9uLmFkZChzZWNvbmRWYWx1ZSwgXCJzZWNvbmRzXCIpO1xyXG4gICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWhhc1ZhbHVlKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiBkdXJhdGlvbjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVCeUR1cmF0aW9uVG9Ub2RheShcclxuICAgIHJlbERhdGVTdHJpbmc6IHN0cmluZyxcclxuICAgIGRhdGVGb3JtYXQ6IHN0cmluZ1xyXG4pOiBNb21lbnQge1xyXG4gICAgbGV0IGRhdGUgPSBudWxsO1xyXG4gICAgbGV0IGR1cmF0aW9uID0gcGFyc2VEdXJhdGlvblN0cmluZyhyZWxEYXRlU3RyaW5nKTtcclxuICAgIGlmIChkdXJhdGlvbiAmJiB3aW5kb3cubW9tZW50LmlzRHVyYXRpb24oZHVyYXRpb24pKSB7XHJcbiAgICAgICAgZGF0ZSA9IGdldERhdGVUb2RheShkYXRlRm9ybWF0KTtcclxuICAgICAgICBkYXRlID0gZGF0ZS5hZGQoZHVyYXRpb24pO1xyXG5cclxuICAgICAgICBpZiAoZGF0ZSAmJiBkYXRlLmlzVmFsaWQoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkYXRlVG9TdHIoZGF0ZTogTW9tZW50LCBkYXRlRm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHR5cGVvZiBkYXRlID09PSBcInVuZGVmaW5lZFwiIHx8IGRhdGUgPT09IG51bGwpIHJldHVybiBudWxsO1xyXG5cclxuICAgIGlmIChkYXRlRm9ybWF0LnRvTG93ZXJDYXNlKCkgPT09IFwiaXNvLTg2MDFcIikge1xyXG4gICAgICAgIHJldHVybiBkYXRlLmZvcm1hdCgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGUuZm9ybWF0KGRhdGVGb3JtYXQpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZUZyb21Vbml4VGltZShcclxuICAgIHVuaXhUaW1lOiBudW1iZXIsXHJcbiAgICBkYXRlRm9ybWF0OiBzdHJpbmdcclxuKTogTW9tZW50IHtcclxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudCh1bml4VGltZSk7XHJcbiAgICBsZXQgc3RyRGF0ZSA9IGRhdGVUb1N0cihkYXRlLCBkYXRlRm9ybWF0KTtcclxuICAgIHJldHVybiBzdHJUb0RhdGUoc3RyRGF0ZSwgZGF0ZUZvcm1hdCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlVG9kYXkoZGF0ZUZvcm1hdDogc3RyaW5nKSB7XHJcbiAgICBsZXQgdG9kYXkgPSB3aW5kb3cubW9tZW50KCk7XHJcbiAgICBsZXQgc3RyVG9kYXkgPSBkYXRlVG9TdHIodG9kYXksIGRhdGVGb3JtYXQpO1xyXG4gICAgcmV0dXJuIHN0clRvRGF0ZShzdHJUb2RheSwgZGF0ZUZvcm1hdCk7XHJcbn1cclxuXHJcbi8vIGh0dHA6Ly9qc2ZpZGRsZS5uZXQvYWxuaXRhay9oRXN5cy9cclxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBWYWx1ZShvYmo6IGFueSwgc3RyOiBzdHJpbmcpIHtcclxuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9eXFwuLywgXCJcIik7XHJcbiAgICB2YXIgYSA9IHN0ci5zcGxpdChcIi5cIik7XHJcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IGEubGVuZ3RoOyBpIDwgbjsgKytpKSB7XHJcbiAgICAgICAgdmFyIGsgPSBhW2ldO1xyXG4gICAgICAgIGlmIChrIGluIG9iaikge1xyXG4gICAgICAgICAgICBvYmogPSBvYmpba107XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheShvYmopKSB7XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgIHJldHVybiBvYmoudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG59XHJcblxyXG4vLyBTdHJpbmcgaGVscGVyc1xyXG5leHBvcnQgZnVuY3Rpb24gdHJpbUJ5Q2hhcihzdHI6IHN0cmluZywgY2hhcjogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBhcnIgPSBBcnJheS5mcm9tKHN0cik7XHJcbiAgICBjb25zdCBmaXJzdCA9IGFyci5maW5kSW5kZXgoKGMpID0+IGMgIT09IGNoYXIpO1xyXG4gICAgY29uc3QgbGFzdCA9IGFyci5yZXZlcnNlKCkuZmluZEluZGV4KChjKSA9PiBjICE9PSBjaGFyKTtcclxuICAgIHJldHVybiBmaXJzdCA9PT0gLTEgJiYgbGFzdCA9PT0gLTFcclxuICAgICAgICA/IHN0clxyXG4gICAgICAgIDogc3RyLnN1YnN0cmluZyhmaXJzdCwgc3RyLmxlbmd0aCAtIGxhc3QpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUltZ1RhZ0J5QWx0KGlucHV0OiBzdHJpbmcpIHtcclxuICAgIGlmIChpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgLy8gPGltZ1tePl0qP2FsdFxccyo9XFxzKltcIlwiJ10/KD88ZW1vamk+W14nXCJcIiA+XSs/KVsgJ1wiXCJdW14+XSo/PlxyXG4gICAgbGV0IHN0clJlZ2V4ID1cclxuICAgICAgICAnPGltZ1tePl0qP2FsdFxcXFxzKj1cXFxccypbXCJcIlxcJ10/KD88ZW1vamk+W15cXCdcIlwiID5dKz8pWyBcXCdcIlwiXVtePl0qPz4nO1xyXG4gICAgLy8gY29uc29sZS5sb2coc3RyUmVnZXgpO1xyXG4gICAgbGV0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnXCIpO1xyXG5cclxuICAgIGxldCBvdXRwdXQgPSBpbnB1dC5yZXBsYWNlKHJlZ2V4LCAoLi4uYXJncykgPT4ge1xyXG4gICAgICAgIGxldCBncm91cHMgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgaWYgKGdyb3VwcyAmJiBncm91cHMuZW1vamkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdyb3Vwcy5lbW9qaS50cmltKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxufVxyXG4vLyBQYXJzaW5nXHJcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZsb2F0RnJvbUFueShcclxuICAgIHRvUGFyc2U6IGFueSxcclxuICAgIHRleHRWYWx1ZU1hcDogVGV4dFZhbHVlTWFwID0gbnVsbFxyXG4pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwicGFyc2VGbG9hdEZyb21BbnlcIik7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0b1BhcnNlKTtcclxuXHJcbiAgICBsZXQgdmFsdWUgPSBudWxsO1xyXG4gICAgbGV0IHZhbHVlVHlwZSA9IFZhbHVlVHlwZS5OdW1iZXI7XHJcbiAgICBpZiAodHlwZW9mIHRvUGFyc2UgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAvLyB0aW1lIHZhbHVlXHJcbiAgICAgICAgaWYgKHRvUGFyc2UuaW5jbHVkZXMoXCI6XCIpKSB7XHJcbiAgICAgICAgICAgIGxldCBuZWdhdGl2ZVZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0b1BhcnNlLnN0YXJ0c1dpdGgoXCItXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBuZWdhdGl2ZVZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRvUGFyc2UgPSB0b1BhcnNlLnN1YnN0cmluZygxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgdGltZVZhbHVlID0gd2luZG93Lm1vbWVudCh0b1BhcnNlLCB0aW1lRm9ybWF0LCB0cnVlKTtcclxuICAgICAgICAgICAgaWYgKHRpbWVWYWx1ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdGltZVZhbHVlLmRpZmYoXHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lm1vbWVudChcIjAwOjAwXCIsIFwiSEg6bW1cIiwgdHJ1ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgXCJzZWNvbmRzXCJcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmVWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gLTEgKiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhbHVlVHlwZSA9IFZhbHVlVHlwZS5UaW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRleHRWYWx1ZU1hcCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGFueU1hdGNoID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGV4dFZhbHVlTWFwKSBhcyBBcnJheTxrZXlvZiBzdHJpbmc+O1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVnZXggPSBuZXcgUmVnRXhwKGtleSwgXCJnbVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2codG9QYXJzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4LnRlc3QodG9QYXJzZSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlci5pc051bWJlcih0ZXh0VmFsdWVNYXBba2V5XSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RyUmVwbGFjZWRWYWx1ZSA9IHRleHRWYWx1ZU1hcFtrZXldLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1BhcnNlID0gdG9QYXJzZS5yZXBsYWNlKHJlZ2V4LCBzdHJSZXBsYWNlZFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRvUGFyc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55TWF0Y2ggPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHRvUGFyc2UpO1xyXG4gICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodG9QYXJzZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRvUGFyc2UgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICB2YWx1ZSA9IHRvUGFyc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHsgdHlwZTogdmFsdWVUeXBlLCB2YWx1ZTogdmFsdWUgfTtcclxufVxyXG5cclxuLy8gQ2hhcnQgaGVscGVyc1xyXG5leHBvcnQgZnVuY3Rpb24gbWVhc3VyZVRleHRTaXplKFxyXG4gICAgdGV4dDogc3RyaW5nLFxyXG4gICAgc3R5bGVDbGFzczogc3RyaW5nID0gXCJcIixcclxuICAgIHJvdGF0ZTogc3RyaW5nID0gXCJcIlxyXG4pOiBTaXplIHtcclxuICAgIHZhciBjb250YWluZXIgPSBkMy5zZWxlY3QoXCJib2R5XCIpLmFwcGVuZChcInN2Z1wiKTtcclxuICAgIGxldCB0ZXh0QmxvY2sgPSBjb250YWluZXJcclxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAgIC50ZXh0KHRleHQpXHJcbiAgICAgICAgLmF0dHIoXCJ4XCIsIC05OTk5OSlcclxuICAgICAgICAuYXR0cihcInlcIiwgLTk5OTk5KTtcclxuICAgIGlmIChzdHlsZUNsYXNzKSB7XHJcbiAgICAgICAgdGV4dEJsb2NrLmF0dHIoXCJjbGFzc1wiLCBzdHlsZUNsYXNzKTtcclxuICAgIH1cclxuICAgIGlmIChyb3RhdGUpIHtcclxuICAgICAgICB0ZXh0QmxvY2suYXR0cihcInRyYW5zZm9ybVwiLCBcInJvdGF0ZShcIiArIHJvdGF0ZSArIFwiKVwiKTtcclxuICAgIH1cclxuICAgIHZhciBzaXplID0gY29udGFpbmVyLm5vZGUoKS5nZXRCQm94KCk7XHJcbiAgICBjb250YWluZXIucmVtb3ZlKCk7XHJcbiAgICByZXR1cm4geyB3aWR0aDogc2l6ZS53aWR0aCwgaGVpZ2h0OiBzaXplLmhlaWdodCB9O1xyXG59XHJcblxyXG4vLyBkb21cclxuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZEFyZWEoYXJlYTogYW55LCBhZGRXOiBudW1iZXIsIGFkZEg6IG51bWJlcikge1xyXG4gICAgbGV0IG9yaVdpZHRoID0gcGFyc2VGbG9hdChhcmVhLmF0dHIoXCJ3aWR0aFwiKSkgfCAwO1xyXG4gICAgbGV0IG9yaUhlaWdodCA9IHBhcnNlRmxvYXQoYXJlYS5hdHRyKFwiaGVpZ2h0XCIpKSB8IDA7XHJcbiAgICBsZXQgbmV3V2lkdGggPSBvcmlXaWR0aCArIGFkZFc7XHJcbiAgICBsZXQgbmV3SGVpZ2h0ID0gb3JpSGVpZ2h0ICsgYWRkSDtcclxuICAgIGFyZWEuYXR0cihcIndpZHRoXCIsIG5ld1dpZHRoKTtcclxuICAgIGFyZWEuYXR0cihcImhlaWdodFwiLCBuZXdIZWlnaHQpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW92ZUFyZWEoYXJlYTogYW55LCBzaGlmdFg6IG51bWJlciwgc2hpZnRZOiBudW1iZXIpIHtcclxuICAgIGxldCB0cmFucyA9IG5ldyBUcmFuc2Zvcm0oYXJlYS5hdHRyKFwidHJhbnNmb3JtXCIpKTtcclxuICAgIGFyZWEuYXR0cihcclxuICAgICAgICBcInRyYW5zZm9ybVwiLFxyXG4gICAgICAgIFwidHJhbnNsYXRlKFwiICtcclxuICAgICAgICAgICAgKHRyYW5zLnRyYW5zbGF0ZVggKyBzaGlmdFgpICtcclxuICAgICAgICAgICAgXCIsXCIgK1xyXG4gICAgICAgICAgICAodHJhbnMudHJhbnNsYXRlWSArIHNoaWZ0WSkgK1xyXG4gICAgICAgICAgICBcIilcIlxyXG4gICAgKTtcclxufVxyXG5cclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuZnVuY3Rpb24gY2xlYW5UZXh0KHRleHQ6IHN0cmluZykge1xyXG4gICAgLy8gVGhhbmtzIHRvIHRvcmFudGluZVxyXG4gICAgLy8gY29kZSBzbmlwcGV0IGZyb20gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vdG9yYW50aW5lL2FmNjM5Y2JhM2MzMjc2MjU3NmQ2NGMzNGVmZmFmNjE0XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8oXlxcXFxzXFwqKXwoXFxcXHNcXCokKS9naSwgXCJcIik7IC8vIHJlbW92ZSB0aGUgc3RhcnQgYW5kIGVuZCBzcGFjZXMgb2YgdGhlIGdpdmVuIHN0cmluZ1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxbIFxcXXsyLH0vZ2ksIFwiIFwiKTsgLy8gcmVkdWNlIG11bHRpcGxlIHNwYWNlcyB0byBhIHNpbmdsZSBzcGFjZVxyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxcXG4gLywgXCJcXFxcblwiKTsgLy8gZXhjbHVkZSBhIG5ldyBsaW5lIHdpdGggYSBzdGFydCBzcGFjaW5nXHJcbiAgICByZXR1cm4gdGV4dDtcclxufVxyXG5cclxuLy8gVGhhbmtzIHRvIGx1a2VsZXBwYW4gZm9yIHBsdWdpbiAnYmV0dGVyLXdvcmQtY291bnQnXHJcbi8vIENvZGUgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbHVrZWxlcHBhbi9iZXR0ZXItd29yZC1jb3VudC9ibG9iL21hc3Rlci9zcmMvc3RhdHMudHNcclxuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmRDb3VudCh0ZXh0OiBzdHJpbmcpIHtcclxuICAgIHRleHQgPSBjbGVhblRleHQodGV4dCk7XHJcblxyXG4gICAgLy8gVGhhbmtzIHRvIGxpYW1jYW5lXHJcbiAgICB2YXIgc3BhY2VEZWxpbWl0ZWRDaGFycyA9XHJcbiAgICAgICAgL0EtWmEtelxcdTAwQUFcXHUwMEI1XFx1MDBCQVxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3MC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdBLVxcdTAzN0RcXHUwMzdGXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MkZcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4QTAtXFx1MDhCNFxcdTA5MDQtXFx1MDkzOVxcdTA5M0RcXHUwOTUwXFx1MDk1OC1cXHUwOTYxXFx1MDk3MS1cXHUwOTgwXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCRFxcdTA5Q0VcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFMVxcdTA5RjBcXHUwOUYxXFx1MEEwNS1cXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzlcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE3Mi1cXHUwQTc0XFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJEXFx1MEFEMFxcdTBBRTBcXHUwQUUxXFx1MEFGOVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzM5XFx1MEMzRFxcdTBDNTgtXFx1MEM1QVxcdTBDNjBcXHUwQzYxXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRjFcXHUwQ0YyXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDNBXFx1MEQzRFxcdTBENEVcXHUwRDVGLVxcdTBENjFcXHUwRDdBLVxcdTBEN0ZcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MEUwMS1cXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDZcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg3XFx1MEU4OFxcdTBFOEFcXHUwRThEXFx1MEU5NC1cXHUwRTk3XFx1MEU5OS1cXHUwRTlGXFx1MEVBMS1cXHUwRUEzXFx1MEVBNVxcdTBFQTdcXHUwRUFBXFx1MEVBQlxcdTBFQUQtXFx1MEVCMFxcdTBFQjJcXHUwRUIzXFx1MEVCRFxcdTBFQzAtXFx1MEVDNFxcdTBFQzZcXHUwRURDLVxcdTBFREZcXHUwRjAwXFx1MEY0MC1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY4OC1cXHUwRjhDXFx1MTAwMC1cXHUxMDJBXFx1MTAzRlxcdTEwNTAtXFx1MTA1NVxcdTEwNUEtXFx1MTA1RFxcdTEwNjFcXHUxMDY1XFx1MTA2NlxcdTEwNkUtXFx1MTA3MFxcdTEwNzUtXFx1MTA4MVxcdTEwOEVcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y1XFx1MTNGOC1cXHUxM0ZEXFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZGMS1cXHUxNkY4XFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzExXFx1MTcyMC1cXHUxNzMxXFx1MTc0MC1cXHUxNzUxXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc4MC1cXHUxN0IzXFx1MTdEN1xcdTE3RENcXHUxODIwLVxcdTE4NzdcXHUxODgwLVxcdTE4QThcXHUxOEFBXFx1MThCMC1cXHUxOEY1XFx1MTkwMC1cXHUxOTFFXFx1MTk1MC1cXHUxOTZEXFx1MTk3MC1cXHUxOTc0XFx1MTk4MC1cXHUxOUFCXFx1MTlCMC1cXHUxOUM5XFx1MUEwMC1cXHUxQTE2XFx1MUEyMC1cXHUxQTU0XFx1MUFBN1xcdTFCMDUtXFx1MUIzM1xcdTFCNDUtXFx1MUI0QlxcdTFCODMtXFx1MUJBMFxcdTFCQUVcXHUxQkFGXFx1MUJCQS1cXHUxQkU1XFx1MUMwMC1cXHUxQzIzXFx1MUM0RC1cXHUxQzRGXFx1MUM1QS1cXHUxQzdEXFx1MUNFOS1cXHUxQ0VDXFx1MUNFRS1cXHUxQ0YxXFx1MUNGNVxcdTFDRjZcXHUxRDAwLVxcdTFEQkZcXHUxRTAwLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE4M1xcdTIxODRcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJFMkZcXHUzMDA1XFx1MzAwNlxcdTMwMzEtXFx1MzAzNVxcdTMwM0JcXHUzMDNDXFx1MzEwNS1cXHUzMTJEXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjFGXFx1QTYyQVxcdUE2MkJcXHVBNjQwLVxcdUE2NkVcXHVBNjdGLVxcdUE2OURcXHVBNkEwLVxcdUE2RTVcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhcXHVBNzhCLVxcdUE3QURcXHVBN0IwLVxcdUE3QjdcXHVBN0Y3LVxcdUE4MDFcXHVBODAzLVxcdUE4MDVcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXFx1QThGRFxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBOUUwLVxcdUE5RTRcXHVBOUU2LVxcdUE5RUZcXHVBOUZBLVxcdUE5RkVcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE3RS1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQjMwLVxcdUFCNUFcXHVBQjVDLVxcdUFCNjVcXHVBQjcwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGREMvXHJcbiAgICAgICAgICAgIC5zb3VyY2U7XHJcbiAgICB2YXIgbm9uU3BhY2VEZWxpbWl0ZWRXb3JkcyA9XHJcbiAgICAgICAgL1tcXHUzMDQxLVxcdTMwOTZcXHUzMDlELVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHU0RTAwLVxcdTlGRDVdezF9L1xyXG4gICAgICAgICAgICAuc291cmNlO1xyXG4gICAgdmFyIHBhdHRlcm4gPSBuZXcgUmVnRXhwKFxyXG4gICAgICAgIFtcclxuICAgICAgICAgICAgXCIoPzpbMC05XSsoPzooPzosfFxcXFwuKVswLTldKykqfFtcXFxcLVwiICsgc3BhY2VEZWxpbWl0ZWRDaGFycyArIFwiXSkrXCIsXHJcbiAgICAgICAgICAgIG5vblNwYWNlRGVsaW1pdGVkV29yZHMsXHJcbiAgICAgICAgXS5qb2luKFwifFwiKSxcclxuICAgICAgICBcImdcIlxyXG4gICAgKTtcclxuICAgIHJldHVybiAodGV4dC5tYXRjaChwYXR0ZXJuKSB8fCBbXSkubGVuZ3RoO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhcmFjdGVyQ291bnQodGV4dDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGV4dC5sZW5ndGg7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRTZW50ZW5jZUNvdW50KHRleHQ6IHN0cmluZykge1xyXG4gICAgdGV4dCA9IGNsZWFuVGV4dCh0ZXh0KTtcclxuXHJcbiAgICAvLyBUaGFua3MgdG8gRXh0cmFjdCBIaWdobGlnaHRzIHBsdWdpbiBhbmQgQW5nZWx1c0RvbWluaVxyXG4gICAgLy8gQWxzbyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NTUzNDEwXHJcbiAgICB2YXIgc2VudGVuY2VzID1cclxuICAgICAgICAodGV4dCB8fCBcIlwiKS5tYXRjaChcclxuICAgICAgICAgICAgL1teLuOAgiHvvIE/77yfXFxzXVteLuOAgiHvvIE/77yfXSooPzpbLiE/XSg/IVsn4oCY4oCZXCLigJzigJ3jgIzjgI3jgI7jgI9dP1xcc3wkKVteLuOAgiHvvIE/77yfXSopKlsu44CCIe+8gT/vvJ9dP1sn4oCZXCLigJ3jgI3jgI9dPyg/PVxcc3x8JCkvZ21cclxuICAgICAgICApIHx8IFtdO1xyXG4gICAgdmFyIHNlbnRlbmNlc0xlbmd0aCA9IHNlbnRlbmNlcy5sZW5ndGg7XHJcbiAgICByZXR1cm4gc2VudGVuY2VzTGVuZ3RoO1xyXG59XHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiIsIi8vICAgICBKYXZhU2NyaXB0IEV4cHJlc3Npb24gUGFyc2VyIChKU0VQKSAwLjQuMFxuLy8gICAgIEpTRVAgbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2Vcbi8vICAgICBodHRwczovL2VyaWNzbWVrZW5zLmdpdGh1Yi5pby9qc2VwL1xuXG4vKmdsb2JhbCBtb2R1bGU6IHRydWUsIGV4cG9ydHM6IHRydWUsIGNvbnNvbGU6IHRydWUgKi9cbihmdW5jdGlvbiAocm9vdCkge1xuXHQndXNlIHN0cmljdCc7XG5cdC8vIE5vZGUgVHlwZXNcblx0Ly8gLS0tLS0tLS0tLVxuXG5cdC8vIFRoaXMgaXMgdGhlIGZ1bGwgc2V0IG9mIHR5cGVzIHRoYXQgYW55IEpTRVAgbm9kZSBjYW4gYmUuXG5cdC8vIFN0b3JlIHRoZW0gaGVyZSB0byBzYXZlIHNwYWNlIHdoZW4gbWluaWZpZWRcblx0dmFyIENPTVBPVU5EID0gJ0NvbXBvdW5kJyxcblx0XHRJREVOVElGSUVSID0gJ0lkZW50aWZpZXInLFxuXHRcdE1FTUJFUl9FWFAgPSAnTWVtYmVyRXhwcmVzc2lvbicsXG5cdFx0TElURVJBTCA9ICdMaXRlcmFsJyxcblx0XHRUSElTX0VYUCA9ICdUaGlzRXhwcmVzc2lvbicsXG5cdFx0Q0FMTF9FWFAgPSAnQ2FsbEV4cHJlc3Npb24nLFxuXHRcdFVOQVJZX0VYUCA9ICdVbmFyeUV4cHJlc3Npb24nLFxuXHRcdEJJTkFSWV9FWFAgPSAnQmluYXJ5RXhwcmVzc2lvbicsXG5cdFx0TE9HSUNBTF9FWFAgPSAnTG9naWNhbEV4cHJlc3Npb24nLFxuXHRcdENPTkRJVElPTkFMX0VYUCA9ICdDb25kaXRpb25hbEV4cHJlc3Npb24nLFxuXHRcdEFSUkFZX0VYUCA9ICdBcnJheUV4cHJlc3Npb24nLFxuXG5cdFx0UEVSSU9EX0NPREUgPSA0NiwgLy8gJy4nXG5cdFx0Q09NTUFfQ09ERSAgPSA0NCwgLy8gJywnXG5cdFx0U1FVT1RFX0NPREUgPSAzOSwgLy8gc2luZ2xlIHF1b3RlXG5cdFx0RFFVT1RFX0NPREUgPSAzNCwgLy8gZG91YmxlIHF1b3Rlc1xuXHRcdE9QQVJFTl9DT0RFID0gNDAsIC8vIChcblx0XHRDUEFSRU5fQ09ERSA9IDQxLCAvLyApXG5cdFx0T0JSQUNLX0NPREUgPSA5MSwgLy8gW1xuXHRcdENCUkFDS19DT0RFID0gOTMsIC8vIF1cblx0XHRRVU1BUktfQ09ERSA9IDYzLCAvLyA/XG5cdFx0U0VNQ09MX0NPREUgPSA1OSwgLy8gO1xuXHRcdENPTE9OX0NPREUgID0gNTgsIC8vIDpcblxuXHRcdHRocm93RXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlLCBpbmRleCkge1xuXHRcdFx0dmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UgKyAnIGF0IGNoYXJhY3RlciAnICsgaW5kZXgpO1xuXHRcdFx0ZXJyb3IuaW5kZXggPSBpbmRleDtcblx0XHRcdGVycm9yLmRlc2NyaXB0aW9uID0gbWVzc2FnZTtcblx0XHRcdHRocm93IGVycm9yO1xuXHRcdH0sXG5cblx0Ly8gT3BlcmF0aW9uc1xuXHQvLyAtLS0tLS0tLS0tXG5cblx0Ly8gU2V0IGB0YCB0byBgdHJ1ZWAgdG8gc2F2ZSBzcGFjZSAod2hlbiBtaW5pZmllZCwgbm90IGd6aXBwZWQpXG5cdFx0dCA9IHRydWUsXG5cdC8vIFVzZSBhIHF1aWNrbHktYWNjZXNzaWJsZSBtYXAgdG8gc3RvcmUgYWxsIG9mIHRoZSB1bmFyeSBvcGVyYXRvcnNcblx0Ly8gVmFsdWVzIGFyZSBzZXQgdG8gYHRydWVgIChpdCByZWFsbHkgZG9lc24ndCBtYXR0ZXIpXG5cdFx0dW5hcnlfb3BzID0geyctJzogdCwgJyEnOiB0LCAnfic6IHQsICcrJzogdH0sXG5cdC8vIEFsc28gdXNlIGEgbWFwIGZvciB0aGUgYmluYXJ5IG9wZXJhdGlvbnMgYnV0IHNldCB0aGVpciB2YWx1ZXMgdG8gdGhlaXJcblx0Ly8gYmluYXJ5IHByZWNlZGVuY2UgZm9yIHF1aWNrIHJlZmVyZW5jZTpcblx0Ly8gc2VlIFtPcmRlciBvZiBvcGVyYXRpb25zXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL09yZGVyX29mX29wZXJhdGlvbnMjUHJvZ3JhbW1pbmdfbGFuZ3VhZ2UpXG5cdFx0YmluYXJ5X29wcyA9IHtcblx0XHRcdCd8fCc6IDEsICcmJic6IDIsICd8JzogMywgICdeJzogNCwgICcmJzogNSxcblx0XHRcdCc9PSc6IDYsICchPSc6IDYsICc9PT0nOiA2LCAnIT09JzogNixcblx0XHRcdCc8JzogNywgICc+JzogNywgICc8PSc6IDcsICAnPj0nOiA3LFxuXHRcdFx0Jzw8Jzo4LCAgJz4+JzogOCwgJz4+Pic6IDgsXG5cdFx0XHQnKyc6IDksICctJzogOSxcblx0XHRcdCcqJzogMTAsICcvJzogMTAsICclJzogMTBcblx0XHR9LFxuXHQvLyBBZGRpdGlvbmFsIHZhbGlkIGlkZW50aWZpZXIgY2hhcnMsIGFwYXJ0IGZyb20gYS16LCBBLVogYW5kIDAtOSAoZXhjZXB0IG9uIHRoZSBzdGFydGluZyBjaGFyKVxuXHRcdGFkZGl0aW9uYWxfaWRlbnRpZmllcl9jaGFycyA9IHsnJCc6IHQsICdfJzogdH0sXG5cdC8vIEdldCByZXR1cm4gdGhlIGxvbmdlc3Qga2V5IGxlbmd0aCBvZiBhbnkgb2JqZWN0XG5cdFx0Z2V0TWF4S2V5TGVuID0gZnVuY3Rpb24ob2JqKSB7XG5cdFx0XHR2YXIgbWF4X2xlbiA9IDAsIGxlbjtcblx0XHRcdGZvcih2YXIga2V5IGluIG9iaikge1xuXHRcdFx0XHRpZigobGVuID0ga2V5Lmxlbmd0aCkgPiBtYXhfbGVuICYmIG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdFx0bWF4X2xlbiA9IGxlbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1heF9sZW47XG5cdFx0fSxcblx0XHRtYXhfdW5vcF9sZW4gPSBnZXRNYXhLZXlMZW4odW5hcnlfb3BzKSxcblx0XHRtYXhfYmlub3BfbGVuID0gZ2V0TWF4S2V5TGVuKGJpbmFyeV9vcHMpLFxuXHQvLyBMaXRlcmFsc1xuXHQvLyAtLS0tLS0tLS0tXG5cdC8vIFN0b3JlIHRoZSB2YWx1ZXMgdG8gcmV0dXJuIGZvciB0aGUgdmFyaW91cyBsaXRlcmFscyB3ZSBtYXkgZW5jb3VudGVyXG5cdFx0bGl0ZXJhbHMgPSB7XG5cdFx0XHQndHJ1ZSc6IHRydWUsXG5cdFx0XHQnZmFsc2UnOiBmYWxzZSxcblx0XHRcdCdudWxsJzogbnVsbFxuXHRcdH0sXG5cdC8vIEV4Y2VwdCBmb3IgYHRoaXNgLCB3aGljaCBpcyBzcGVjaWFsLiBUaGlzIGNvdWxkIGJlIGNoYW5nZWQgdG8gc29tZXRoaW5nIGxpa2UgYCdzZWxmJ2AgYXMgd2VsbFxuXHRcdHRoaXNfc3RyID0gJ3RoaXMnLFxuXHQvLyBSZXR1cm5zIHRoZSBwcmVjZWRlbmNlIG9mIGEgYmluYXJ5IG9wZXJhdG9yIG9yIGAwYCBpZiBpdCBpc24ndCBhIGJpbmFyeSBvcGVyYXRvclxuXHRcdGJpbmFyeVByZWNlZGVuY2UgPSBmdW5jdGlvbihvcF92YWwpIHtcblx0XHRcdHJldHVybiBiaW5hcnlfb3BzW29wX3ZhbF0gfHwgMDtcblx0XHR9LFxuXHQvLyBVdGlsaXR5IGZ1bmN0aW9uIChnZXRzIGNhbGxlZCBmcm9tIG11bHRpcGxlIHBsYWNlcylcblx0Ly8gQWxzbyBub3RlIHRoYXQgYGEgJiYgYmAgYW5kIGBhIHx8IGJgIGFyZSAqbG9naWNhbCogZXhwcmVzc2lvbnMsIG5vdCBiaW5hcnkgZXhwcmVzc2lvbnNcblx0XHRjcmVhdGVCaW5hcnlFeHByZXNzaW9uID0gZnVuY3Rpb24gKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkge1xuXHRcdFx0dmFyIHR5cGUgPSAob3BlcmF0b3IgPT09ICd8fCcgfHwgb3BlcmF0b3IgPT09ICcmJicpID8gTE9HSUNBTF9FWFAgOiBCSU5BUllfRVhQO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0b3BlcmF0b3I6IG9wZXJhdG9yLFxuXHRcdFx0XHRsZWZ0OiBsZWZ0LFxuXHRcdFx0XHRyaWdodDogcmlnaHRcblx0XHRcdH07XG5cdFx0fSxcblx0XHQvLyBgY2hgIGlzIGEgY2hhcmFjdGVyIGNvZGUgaW4gdGhlIG5leHQgdGhyZWUgZnVuY3Rpb25zXG5cdFx0aXNEZWNpbWFsRGlnaXQgPSBmdW5jdGlvbihjaCkge1xuXHRcdFx0cmV0dXJuIChjaCA+PSA0OCAmJiBjaCA8PSA1Nyk7IC8vIDAuLi45XG5cdFx0fSxcblx0XHRpc0lkZW50aWZpZXJTdGFydCA9IGZ1bmN0aW9uKGNoKSB7XG5cdFx0XHRyZXR1cm4gIChjaCA+PSA2NSAmJiBjaCA8PSA5MCkgfHwgLy8gQS4uLlpcblx0XHRcdFx0XHQoY2ggPj0gOTcgJiYgY2ggPD0gMTIyKSB8fCAvLyBhLi4uelxuXHRcdFx0XHRcdChjaCA+PSAxMjggJiYgIWJpbmFyeV9vcHNbU3RyaW5nLmZyb21DaGFyQ29kZShjaCldKSB8fCAvLyBhbnkgbm9uLUFTQ0lJIHRoYXQgaXMgbm90IGFuIG9wZXJhdG9yXG5cdFx0XHRcdFx0KGFkZGl0aW9uYWxfaWRlbnRpZmllcl9jaGFycy5oYXNPd25Qcm9wZXJ0eShTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSkpOyAvLyBhZGRpdGlvbmFsIGNoYXJhY3RlcnNcblx0XHR9LFxuXHRcdGlzSWRlbnRpZmllclBhcnQgPSBmdW5jdGlvbihjaCkge1xuXHRcdFx0cmV0dXJuIFx0KGNoID49IDY1ICYmIGNoIDw9IDkwKSB8fCAvLyBBLi4uWlxuXHRcdFx0XHRcdChjaCA+PSA5NyAmJiBjaCA8PSAxMjIpIHx8IC8vIGEuLi56XG5cdFx0XHRcdFx0KGNoID49IDQ4ICYmIGNoIDw9IDU3KSB8fCAvLyAwLi4uOVxuXHRcdFx0XHRcdChjaCA+PSAxMjggJiYgIWJpbmFyeV9vcHNbU3RyaW5nLmZyb21DaGFyQ29kZShjaCldKXx8IC8vIGFueSBub24tQVNDSUkgdGhhdCBpcyBub3QgYW4gb3BlcmF0b3Jcblx0XHRcdFx0XHQoYWRkaXRpb25hbF9pZGVudGlmaWVyX2NoYXJzLmhhc093blByb3BlcnR5KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7IC8vIGFkZGl0aW9uYWwgY2hhcmFjdGVyc1xuXHRcdH0sXG5cblx0XHQvLyBQYXJzaW5nXG5cdFx0Ly8gLS0tLS0tLVxuXHRcdC8vIGBleHByYCBpcyBhIHN0cmluZyB3aXRoIHRoZSBwYXNzZWQgaW4gZXhwcmVzc2lvblxuXHRcdGpzZXAgPSBmdW5jdGlvbihleHByKSB7XG5cdFx0XHQvLyBgaW5kZXhgIHN0b3JlcyB0aGUgY2hhcmFjdGVyIG51bWJlciB3ZSBhcmUgY3VycmVudGx5IGF0IHdoaWxlIGBsZW5ndGhgIGlzIGEgY29uc3RhbnRcblx0XHRcdC8vIEFsbCBvZiB0aGUgZ29iYmxlcyBiZWxvdyB3aWxsIG1vZGlmeSBgaW5kZXhgIGFzIHdlIG1vdmUgYWxvbmdcblx0XHRcdHZhciBpbmRleCA9IDAsXG5cdFx0XHRcdGNoYXJBdEZ1bmMgPSBleHByLmNoYXJBdCxcblx0XHRcdFx0Y2hhckNvZGVBdEZ1bmMgPSBleHByLmNoYXJDb2RlQXQsXG5cdFx0XHRcdGV4cHJJID0gZnVuY3Rpb24oaSkgeyByZXR1cm4gY2hhckF0RnVuYy5jYWxsKGV4cHIsIGkpOyB9LFxuXHRcdFx0XHRleHBySUNvZGUgPSBmdW5jdGlvbihpKSB7IHJldHVybiBjaGFyQ29kZUF0RnVuYy5jYWxsKGV4cHIsIGkpOyB9LFxuXHRcdFx0XHRsZW5ndGggPSBleHByLmxlbmd0aCxcblxuXHRcdFx0XHQvLyBQdXNoIGBpbmRleGAgdXAgdG8gdGhlIG5leHQgbm9uLXNwYWNlIGNoYXJhY3RlclxuXHRcdFx0XHRnb2JibGVTcGFjZXMgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHR2YXIgY2ggPSBleHBySUNvZGUoaW5kZXgpO1xuXHRcdFx0XHRcdC8vIHNwYWNlIG9yIHRhYlxuXHRcdFx0XHRcdHdoaWxlKGNoID09PSAzMiB8fCBjaCA9PT0gOSB8fCBjaCA9PT0gMTAgfHwgY2ggPT09IDEzKSB7XG5cdFx0XHRcdFx0XHRjaCA9IGV4cHJJQ29kZSgrK2luZGV4KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gVGhlIG1haW4gcGFyc2luZyBmdW5jdGlvbi4gTXVjaCBvZiB0aGlzIGNvZGUgaXMgZGVkaWNhdGVkIHRvIHRlcm5hcnkgZXhwcmVzc2lvbnNcblx0XHRcdFx0Z29iYmxlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHZhciB0ZXN0ID0gZ29iYmxlQmluYXJ5RXhwcmVzc2lvbigpLFxuXHRcdFx0XHRcdFx0Y29uc2VxdWVudCwgYWx0ZXJuYXRlO1xuXHRcdFx0XHRcdGdvYmJsZVNwYWNlcygpO1xuXG5cdFx0XHRcdFx0aWYoZXhwcklDb2RlKGluZGV4KSA9PT0gUVVNQVJLX0NPREUpIHtcblx0XHRcdFx0XHRcdC8vIFRlcm5hcnkgZXhwcmVzc2lvbjogdGVzdCA/IGNvbnNlcXVlbnQgOiBhbHRlcm5hdGVcblx0XHRcdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdFx0XHRjb25zZXF1ZW50ID0gZ29iYmxlRXhwcmVzc2lvbigpO1xuXHRcdFx0XHRcdFx0aWYoIWNvbnNlcXVlbnQpIHtcblx0XHRcdFx0XHRcdFx0dGhyb3dFcnJvcignRXhwZWN0ZWQgZXhwcmVzc2lvbicsIGluZGV4KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGdvYmJsZVNwYWNlcygpO1xuXHRcdFx0XHRcdFx0aWYoZXhwcklDb2RlKGluZGV4KSA9PT0gQ09MT05fQ09ERSkge1xuXHRcdFx0XHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRcdFx0XHRhbHRlcm5hdGUgPSBnb2JibGVFeHByZXNzaW9uKCk7XG5cdFx0XHRcdFx0XHRcdGlmKCFhbHRlcm5hdGUpIHtcblx0XHRcdFx0XHRcdFx0XHR0aHJvd0Vycm9yKCdFeHBlY3RlZCBleHByZXNzaW9uJywgaW5kZXgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogQ09ORElUSU9OQUxfRVhQLFxuXHRcdFx0XHRcdFx0XHRcdHRlc3Q6IHRlc3QsXG5cdFx0XHRcdFx0XHRcdFx0Y29uc2VxdWVudDogY29uc2VxdWVudCxcblx0XHRcdFx0XHRcdFx0XHRhbHRlcm5hdGU6IGFsdGVybmF0ZVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhyb3dFcnJvcignRXhwZWN0ZWQgOicsIGluZGV4KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRlc3Q7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFNlYXJjaCBmb3IgdGhlIG9wZXJhdGlvbiBwb3J0aW9uIG9mIHRoZSBzdHJpbmcgKGUuZy4gYCtgLCBgPT09YClcblx0XHRcdFx0Ly8gU3RhcnQgYnkgdGFraW5nIHRoZSBsb25nZXN0IHBvc3NpYmxlIGJpbmFyeSBvcGVyYXRpb25zICgzIGNoYXJhY3RlcnM6IGA9PT1gLCBgIT09YCwgYD4+PmApXG5cdFx0XHRcdC8vIGFuZCBtb3ZlIGRvd24gZnJvbSAzIHRvIDIgdG8gMSBjaGFyYWN0ZXIgdW50aWwgYSBtYXRjaGluZyBiaW5hcnkgb3BlcmF0aW9uIGlzIGZvdW5kXG5cdFx0XHRcdC8vIHRoZW4sIHJldHVybiB0aGF0IGJpbmFyeSBvcGVyYXRpb25cblx0XHRcdFx0Z29iYmxlQmluYXJ5T3AgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRnb2JibGVTcGFjZXMoKTtcblx0XHRcdFx0XHR2YXIgYmlvcCwgdG9fY2hlY2sgPSBleHByLnN1YnN0cihpbmRleCwgbWF4X2Jpbm9wX2xlbiksIHRjX2xlbiA9IHRvX2NoZWNrLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSh0Y19sZW4gPiAwKSB7XG5cdFx0XHRcdFx0XHQvLyBEb24ndCBhY2NlcHQgYSBiaW5hcnkgb3Agd2hlbiBpdCBpcyBhbiBpZGVudGlmaWVyLlxuXHRcdFx0XHRcdFx0Ly8gQmluYXJ5IG9wcyB0aGF0IHN0YXJ0IHdpdGggYSBpZGVudGlmaWVyLXZhbGlkIGNoYXJhY3RlciBtdXN0IGJlIGZvbGxvd2VkXG5cdFx0XHRcdFx0XHQvLyBieSBhIG5vbiBpZGVudGlmaWVyLXBhcnQgdmFsaWQgY2hhcmFjdGVyXG5cdFx0XHRcdFx0XHRpZihiaW5hcnlfb3BzLmhhc093blByb3BlcnR5KHRvX2NoZWNrKSAmJiAoXG5cdFx0XHRcdFx0XHRcdCFpc0lkZW50aWZpZXJTdGFydChleHBySUNvZGUoaW5kZXgpKSB8fFxuXHRcdFx0XHRcdFx0XHQoaW5kZXgrdG9fY2hlY2subGVuZ3RoPCBleHByLmxlbmd0aCAmJiAhaXNJZGVudGlmaWVyUGFydChleHBySUNvZGUoaW5kZXgrdG9fY2hlY2subGVuZ3RoKSkpXG5cdFx0XHRcdFx0XHQpKSB7XG5cdFx0XHRcdFx0XHRcdGluZGV4ICs9IHRjX2xlbjtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRvX2NoZWNrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dG9fY2hlY2sgPSB0b19jaGVjay5zdWJzdHIoMCwgLS10Y19sZW4pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZ29iYmxpbmcgYW4gaW5kaXZpZHVhbCBleHByZXNzaW9uLFxuXHRcdFx0XHQvLyBlLmcuIGAxYCwgYDErMmAsIGBhKyhiKjIpLU1hdGguc3FydCgyKWBcblx0XHRcdFx0Z29iYmxlQmluYXJ5RXhwcmVzc2lvbiA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHZhciBjaF9pLCBub2RlLCBiaW9wLCBwcmVjLCBzdGFjaywgYmlvcF9pbmZvLCBsZWZ0LCByaWdodCwgaSwgY3VyX2Jpb3A7XG5cblx0XHRcdFx0XHQvLyBGaXJzdCwgdHJ5IHRvIGdldCB0aGUgbGVmdG1vc3QgdGhpbmdcblx0XHRcdFx0XHQvLyBUaGVuLCBjaGVjayB0byBzZWUgaWYgdGhlcmUncyBhIGJpbmFyeSBvcGVyYXRvciBvcGVyYXRpbmcgb24gdGhhdCBsZWZ0bW9zdCB0aGluZ1xuXHRcdFx0XHRcdGxlZnQgPSBnb2JibGVUb2tlbigpO1xuXHRcdFx0XHRcdGJpb3AgPSBnb2JibGVCaW5hcnlPcCgpO1xuXG5cdFx0XHRcdFx0Ly8gSWYgdGhlcmUgd2Fzbid0IGEgYmluYXJ5IG9wZXJhdG9yLCBqdXN0IHJldHVybiB0aGUgbGVmdG1vc3Qgbm9kZVxuXHRcdFx0XHRcdGlmKCFiaW9wKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gbGVmdDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIHdlIG5lZWQgdG8gc3RhcnQgYSBzdGFjayB0byBwcm9wZXJseSBwbGFjZSB0aGUgYmluYXJ5IG9wZXJhdGlvbnMgaW4gdGhlaXJcblx0XHRcdFx0XHQvLyBwcmVjZWRlbmNlIHN0cnVjdHVyZVxuXHRcdFx0XHRcdGJpb3BfaW5mbyA9IHsgdmFsdWU6IGJpb3AsIHByZWM6IGJpbmFyeVByZWNlZGVuY2UoYmlvcCl9O1xuXG5cdFx0XHRcdFx0cmlnaHQgPSBnb2JibGVUb2tlbigpO1xuXHRcdFx0XHRcdGlmKCFyaWdodCkge1xuXHRcdFx0XHRcdFx0dGhyb3dFcnJvcihcIkV4cGVjdGVkIGV4cHJlc3Npb24gYWZ0ZXIgXCIgKyBiaW9wLCBpbmRleCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHN0YWNrID0gW2xlZnQsIGJpb3BfaW5mbywgcmlnaHRdO1xuXG5cdFx0XHRcdFx0Ly8gUHJvcGVybHkgZGVhbCB3aXRoIHByZWNlZGVuY2UgdXNpbmcgW3JlY3Vyc2l2ZSBkZXNjZW50XShodHRwOi8vd3d3LmVuZ3IubXVuLmNhL350aGVvL01pc2MvZXhwX3BhcnNpbmcuaHRtKVxuXHRcdFx0XHRcdHdoaWxlKChiaW9wID0gZ29iYmxlQmluYXJ5T3AoKSkpIHtcblx0XHRcdFx0XHRcdHByZWMgPSBiaW5hcnlQcmVjZWRlbmNlKGJpb3ApO1xuXG5cdFx0XHRcdFx0XHRpZihwcmVjID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YmlvcF9pbmZvID0geyB2YWx1ZTogYmlvcCwgcHJlYzogcHJlYyB9O1xuXG5cdFx0XHRcdFx0XHRjdXJfYmlvcCA9IGJpb3A7XG5cdFx0XHRcdFx0XHQvLyBSZWR1Y2U6IG1ha2UgYSBiaW5hcnkgZXhwcmVzc2lvbiBmcm9tIHRoZSB0aHJlZSB0b3Btb3N0IGVudHJpZXMuXG5cdFx0XHRcdFx0XHR3aGlsZSAoKHN0YWNrLmxlbmd0aCA+IDIpICYmIChwcmVjIDw9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDJdLnByZWMpKSB7XG5cdFx0XHRcdFx0XHRcdHJpZ2h0ID0gc3RhY2sucG9wKCk7XG5cdFx0XHRcdFx0XHRcdGJpb3AgPSBzdGFjay5wb3AoKS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0bGVmdCA9IHN0YWNrLnBvcCgpO1xuXHRcdFx0XHRcdFx0XHRub2RlID0gY3JlYXRlQmluYXJ5RXhwcmVzc2lvbihiaW9wLCBsZWZ0LCByaWdodCk7XG5cdFx0XHRcdFx0XHRcdHN0YWNrLnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdG5vZGUgPSBnb2JibGVUb2tlbigpO1xuXHRcdFx0XHRcdFx0aWYoIW5vZGUpIHtcblx0XHRcdFx0XHRcdFx0dGhyb3dFcnJvcihcIkV4cGVjdGVkIGV4cHJlc3Npb24gYWZ0ZXIgXCIgKyBjdXJfYmlvcCwgaW5kZXgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0c3RhY2sucHVzaChiaW9wX2luZm8sIG5vZGUpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGkgPSBzdGFjay5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdG5vZGUgPSBzdGFja1tpXTtcblx0XHRcdFx0XHR3aGlsZShpID4gMSkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGNyZWF0ZUJpbmFyeUV4cHJlc3Npb24oc3RhY2tbaSAtIDFdLnZhbHVlLCBzdGFja1tpIC0gMl0sIG5vZGUpO1xuXHRcdFx0XHRcdFx0aSAtPSAyO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbm9kZTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBBbiBpbmRpdmlkdWFsIHBhcnQgb2YgYSBiaW5hcnkgZXhwcmVzc2lvbjpcblx0XHRcdFx0Ly8gZS5nLiBgZm9vLmJhcihiYXopYCwgYDFgLCBgXCJhYmNcImAsIGAoYSAlIDIpYCAoYmVjYXVzZSBpdCdzIGluIHBhcmVudGhlc2lzKVxuXHRcdFx0XHRnb2JibGVUb2tlbiA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHZhciBjaCwgdG9fY2hlY2ssIHRjX2xlbiwgbm9kZTtcblxuXHRcdFx0XHRcdGdvYmJsZVNwYWNlcygpO1xuXHRcdFx0XHRcdGNoID0gZXhwcklDb2RlKGluZGV4KTtcblxuXHRcdFx0XHRcdGlmKGlzRGVjaW1hbERpZ2l0KGNoKSB8fCBjaCA9PT0gUEVSSU9EX0NPREUpIHtcblx0XHRcdFx0XHRcdC8vIENoYXIgY29kZSA0NiBpcyBhIGRvdCBgLmAgd2hpY2ggY2FuIHN0YXJ0IG9mZiBhIG51bWVyaWMgbGl0ZXJhbFxuXHRcdFx0XHRcdFx0cmV0dXJuIGdvYmJsZU51bWVyaWNMaXRlcmFsKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoY2ggPT09IFNRVU9URV9DT0RFIHx8IGNoID09PSBEUVVPVEVfQ09ERSkge1xuXHRcdFx0XHRcdFx0Ly8gU2luZ2xlIG9yIGRvdWJsZSBxdW90ZXNcblx0XHRcdFx0XHRcdG5vZGUgPSBnb2JibGVTdHJpbmdMaXRlcmFsKCk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChjaCA9PT0gT0JSQUNLX0NPREUpIHtcblx0XHRcdFx0XHRcdG5vZGUgPSBnb2JibGVBcnJheSgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0b19jaGVjayA9IGV4cHIuc3Vic3RyKGluZGV4LCBtYXhfdW5vcF9sZW4pO1xuXHRcdFx0XHRcdFx0dGNfbGVuID0gdG9fY2hlY2subGVuZ3RoO1xuXHRcdFx0XHRcdFx0d2hpbGUodGNfbGVuID4gMCkge1xuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgYWNjZXB0IGFuIHVuYXJ5IG9wIHdoZW4gaXQgaXMgYW4gaWRlbnRpZmllci5cblx0XHRcdFx0XHRcdC8vIFVuYXJ5IG9wcyB0aGF0IHN0YXJ0IHdpdGggYSBpZGVudGlmaWVyLXZhbGlkIGNoYXJhY3RlciBtdXN0IGJlIGZvbGxvd2VkXG5cdFx0XHRcdFx0XHQvLyBieSBhIG5vbiBpZGVudGlmaWVyLXBhcnQgdmFsaWQgY2hhcmFjdGVyXG5cdFx0XHRcdFx0XHRcdGlmKHVuYXJ5X29wcy5oYXNPd25Qcm9wZXJ0eSh0b19jaGVjaykgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdCFpc0lkZW50aWZpZXJTdGFydChleHBySUNvZGUoaW5kZXgpKSB8fFxuXHRcdFx0XHRcdFx0XHRcdChpbmRleCt0b19jaGVjay5sZW5ndGggPCBleHByLmxlbmd0aCAmJiAhaXNJZGVudGlmaWVyUGFydChleHBySUNvZGUoaW5kZXgrdG9fY2hlY2subGVuZ3RoKSkpXG5cdFx0XHRcdFx0XHRcdCkpIHtcblx0XHRcdFx0XHRcdFx0XHRpbmRleCArPSB0Y19sZW47XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFVOQVJZX0VYUCxcblx0XHRcdFx0XHRcdFx0XHRcdG9wZXJhdG9yOiB0b19jaGVjayxcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3VtZW50OiBnb2JibGVUb2tlbigpLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJlZml4OiB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR0b19jaGVjayA9IHRvX2NoZWNrLnN1YnN0cigwLCAtLXRjX2xlbik7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChpc0lkZW50aWZpZXJTdGFydChjaCkpIHtcblx0XHRcdFx0XHRcdFx0bm9kZSA9IGdvYmJsZUlkZW50aWZpZXIoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoY2ggPT09IE9QQVJFTl9DT0RFKSB7IC8vIG9wZW4gcGFyZW50aGVzaXNcblx0XHRcdFx0XHRcdFx0bm9kZSA9IGdvYmJsZUdyb3VwKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCFub2RlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Z29iYmxlU3BhY2VzKCk7XG5cblx0XHRcdFx0XHRjaCA9IGV4cHJJQ29kZShpbmRleCk7XG5cblx0XHRcdFx0XHQvLyBHb2JibGUgcHJvcGVydGllcyBvZiBvZiBpZGVudGlmaWVycy9zdHJpbmdzL2FycmF5cy9ncm91cHMuXG5cdFx0XHRcdFx0Ly8gZS5nLiBgZm9vYCwgYGJhci5iYXpgLCBgZm9vWydiYXInXS5iYXpgXG5cdFx0XHRcdFx0Ly8gSXQgYWxzbyBnb2JibGVzIGZ1bmN0aW9uIGNhbGxzOlxuXHRcdFx0XHRcdC8vIGUuZy4gYE1hdGguYWNvcyhvYmouYW5nbGUpYFxuXG5cdFx0XHRcdFx0d2hpbGUoY2ggPT09IFBFUklPRF9DT0RFIHx8IGNoID09PSBPQlJBQ0tfQ09ERSB8fCBjaCA9PT0gT1BBUkVOX0NPREUpIHtcblx0XHRcdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdFx0XHRpZihjaCA9PT0gUEVSSU9EX0NPREUpIHtcblx0XHRcdFx0XHRcdFx0Z29iYmxlU3BhY2VzKCk7XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSB7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogTUVNQkVSX0VYUCxcblx0XHRcdFx0XHRcdFx0XHRjb21wdXRlZDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0b2JqZWN0OiBub2RlLFxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5OiBnb2JibGVJZGVudGlmaWVyKClcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZihjaCA9PT0gT0JSQUNLX0NPREUpIHtcblx0XHRcdFx0XHRcdFx0bm9kZSA9IHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBNRU1CRVJfRVhQLFxuXHRcdFx0XHRcdFx0XHRcdGNvbXB1dGVkOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdG9iamVjdDogbm9kZSxcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eTogZ29iYmxlRXhwcmVzc2lvbigpXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdGdvYmJsZVNwYWNlcygpO1xuXHRcdFx0XHRcdFx0XHRjaCA9IGV4cHJJQ29kZShpbmRleCk7XG5cdFx0XHRcdFx0XHRcdGlmKGNoICE9PSBDQlJBQ0tfQ09ERSkge1xuXHRcdFx0XHRcdFx0XHRcdHRocm93RXJyb3IoJ1VuY2xvc2VkIFsnLCBpbmRleCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0XHRcdH0gZWxzZSBpZihjaCA9PT0gT1BBUkVOX0NPREUpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQSBmdW5jdGlvbiBjYWxsIGlzIGJlaW5nIG1hZGU7IGdvYmJsZSBhbGwgdGhlIGFyZ3VtZW50c1xuXHRcdFx0XHRcdFx0XHRub2RlID0ge1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IENBTExfRVhQLFxuXHRcdFx0XHRcdFx0XHRcdCdhcmd1bWVudHMnOiBnb2JibGVBcmd1bWVudHMoQ1BBUkVOX0NPREUpLFxuXHRcdFx0XHRcdFx0XHRcdGNhbGxlZTogbm9kZVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Z29iYmxlU3BhY2VzKCk7XG5cdFx0XHRcdFx0XHRjaCA9IGV4cHJJQ29kZShpbmRleCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFBhcnNlIHNpbXBsZSBudW1lcmljIGxpdGVyYWxzOiBgMTJgLCBgMy40YCwgYC41YC4gRG8gdGhpcyBieSB1c2luZyBhIHN0cmluZyB0b1xuXHRcdFx0XHQvLyBrZWVwIHRyYWNrIG9mIGV2ZXJ5dGhpbmcgaW4gdGhlIG51bWVyaWMgbGl0ZXJhbCBhbmQgdGhlbiBjYWxsaW5nIGBwYXJzZUZsb2F0YCBvbiB0aGF0IHN0cmluZ1xuXHRcdFx0XHRnb2JibGVOdW1lcmljTGl0ZXJhbCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHZhciBudW1iZXIgPSAnJywgY2gsIGNoQ29kZTtcblx0XHRcdFx0XHR3aGlsZShpc0RlY2ltYWxEaWdpdChleHBySUNvZGUoaW5kZXgpKSkge1xuXHRcdFx0XHRcdFx0bnVtYmVyICs9IGV4cHJJKGluZGV4KyspO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGV4cHJJQ29kZShpbmRleCkgPT09IFBFUklPRF9DT0RFKSB7IC8vIGNhbiBzdGFydCB3aXRoIGEgZGVjaW1hbCBtYXJrZXJcblx0XHRcdFx0XHRcdG51bWJlciArPSBleHBySShpbmRleCsrKTtcblxuXHRcdFx0XHRcdFx0d2hpbGUoaXNEZWNpbWFsRGlnaXQoZXhwcklDb2RlKGluZGV4KSkpIHtcblx0XHRcdFx0XHRcdFx0bnVtYmVyICs9IGV4cHJJKGluZGV4KyspO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNoID0gZXhwckkoaW5kZXgpO1xuXHRcdFx0XHRcdGlmKGNoID09PSAnZScgfHwgY2ggPT09ICdFJykgeyAvLyBleHBvbmVudCBtYXJrZXJcblx0XHRcdFx0XHRcdG51bWJlciArPSBleHBySShpbmRleCsrKTtcblx0XHRcdFx0XHRcdGNoID0gZXhwckkoaW5kZXgpO1xuXHRcdFx0XHRcdFx0aWYoY2ggPT09ICcrJyB8fCBjaCA9PT0gJy0nKSB7IC8vIGV4cG9uZW50IHNpZ25cblx0XHRcdFx0XHRcdFx0bnVtYmVyICs9IGV4cHJJKGluZGV4KyspO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0d2hpbGUoaXNEZWNpbWFsRGlnaXQoZXhwcklDb2RlKGluZGV4KSkpIHsgLy9leHBvbmVudCBpdHNlbGZcblx0XHRcdFx0XHRcdFx0bnVtYmVyICs9IGV4cHJJKGluZGV4KyspO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYoIWlzRGVjaW1hbERpZ2l0KGV4cHJJQ29kZShpbmRleC0xKSkgKSB7XG5cdFx0XHRcdFx0XHRcdHRocm93RXJyb3IoJ0V4cGVjdGVkIGV4cG9uZW50ICgnICsgbnVtYmVyICsgZXhwckkoaW5kZXgpICsgJyknLCBpbmRleCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cblx0XHRcdFx0XHRjaENvZGUgPSBleHBySUNvZGUoaW5kZXgpO1xuXHRcdFx0XHRcdC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbid0IGEgdmFyaWFibGUgbmFtZSB0aGF0IHN0YXJ0IHdpdGggYSBudW1iZXIgKDEyM2FiYylcblx0XHRcdFx0XHRpZihpc0lkZW50aWZpZXJTdGFydChjaENvZGUpKSB7XG5cdFx0XHRcdFx0XHR0aHJvd0Vycm9yKCdWYXJpYWJsZSBuYW1lcyBjYW5ub3Qgc3RhcnQgd2l0aCBhIG51bWJlciAoJyArXG5cdFx0XHRcdFx0XHRcdFx0XHRudW1iZXIgKyBleHBySShpbmRleCkgKyAnKScsIGluZGV4KTtcblx0XHRcdFx0XHR9IGVsc2UgaWYoY2hDb2RlID09PSBQRVJJT0RfQ09ERSkge1xuXHRcdFx0XHRcdFx0dGhyb3dFcnJvcignVW5leHBlY3RlZCBwZXJpb2QnLCBpbmRleCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdHR5cGU6IExJVEVSQUwsXG5cdFx0XHRcdFx0XHR2YWx1ZTogcGFyc2VGbG9hdChudW1iZXIpLFxuXHRcdFx0XHRcdFx0cmF3OiBudW1iZXJcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFBhcnNlcyBhIHN0cmluZyBsaXRlcmFsLCBzdGFyaW5nIHdpdGggc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMgd2l0aCBiYXNpYyBzdXBwb3J0IGZvciBlc2NhcGUgY29kZXNcblx0XHRcdFx0Ly8gZS5nLiBgXCJoZWxsbyB3b3JsZFwiYCwgYCd0aGlzIGlzXFxuSlNFUCdgXG5cdFx0XHRcdGdvYmJsZVN0cmluZ0xpdGVyYWwgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHR2YXIgc3RyID0gJycsIHF1b3RlID0gZXhwckkoaW5kZXgrKyksIGNsb3NlZCA9IGZhbHNlLCBjaDtcblxuXHRcdFx0XHRcdHdoaWxlKGluZGV4IDwgbGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRjaCA9IGV4cHJJKGluZGV4KyspO1xuXHRcdFx0XHRcdFx0aWYoY2ggPT09IHF1b3RlKSB7XG5cdFx0XHRcdFx0XHRcdGNsb3NlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmKGNoID09PSAnXFxcXCcpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQ2hlY2sgZm9yIGFsbCBvZiB0aGUgY29tbW9uIGVzY2FwZSBjb2Rlc1xuXHRcdFx0XHRcdFx0XHRjaCA9IGV4cHJJKGluZGV4KyspO1xuXHRcdFx0XHRcdFx0XHRzd2l0Y2goY2gpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlICduJzogc3RyICs9ICdcXG4nOyBicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlICdyJzogc3RyICs9ICdcXHInOyBicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlICd0Jzogc3RyICs9ICdcXHQnOyBicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlICdiJzogc3RyICs9ICdcXGInOyBicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlICdmJzogc3RyICs9ICdcXGYnOyBicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlICd2Jzogc3RyICs9ICdcXHgwQic7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQgOiBzdHIgKz0gY2g7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHN0ciArPSBjaDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZighY2xvc2VkKSB7XG5cdFx0XHRcdFx0XHR0aHJvd0Vycm9yKCdVbmNsb3NlZCBxdW90ZSBhZnRlciBcIicrc3RyKydcIicsIGluZGV4KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0dHlwZTogTElURVJBTCxcblx0XHRcdFx0XHRcdHZhbHVlOiBzdHIsXG5cdFx0XHRcdFx0XHRyYXc6IHF1b3RlICsgc3RyICsgcXVvdGVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEdvYmJsZXMgb25seSBpZGVudGlmaWVyc1xuXHRcdFx0XHQvLyBlLmcuOiBgZm9vYCwgYF92YWx1ZWAsIGAkeDFgXG5cdFx0XHRcdC8vIEFsc28sIHRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoYXQgaWRlbnRpZmllciBpcyBhIGxpdGVyYWw6XG5cdFx0XHRcdC8vIChlLmcuIGB0cnVlYCwgYGZhbHNlYCwgYG51bGxgKSBvciBgdGhpc2Bcblx0XHRcdFx0Z29iYmxlSWRlbnRpZmllciA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHZhciBjaCA9IGV4cHJJQ29kZShpbmRleCksIHN0YXJ0ID0gaW5kZXgsIGlkZW50aWZpZXI7XG5cblx0XHRcdFx0XHRpZihpc0lkZW50aWZpZXJTdGFydChjaCkpIHtcblx0XHRcdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRocm93RXJyb3IoJ1VuZXhwZWN0ZWQgJyArIGV4cHJJKGluZGV4KSwgaW5kZXgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHdoaWxlKGluZGV4IDwgbGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRjaCA9IGV4cHJJQ29kZShpbmRleCk7XG5cdFx0XHRcdFx0XHRpZihpc0lkZW50aWZpZXJQYXJ0KGNoKSkge1xuXHRcdFx0XHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlkZW50aWZpZXIgPSBleHByLnNsaWNlKHN0YXJ0LCBpbmRleCk7XG5cblx0XHRcdFx0XHRpZihsaXRlcmFscy5oYXNPd25Qcm9wZXJ0eShpZGVudGlmaWVyKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0dHlwZTogTElURVJBTCxcblx0XHRcdFx0XHRcdFx0dmFsdWU6IGxpdGVyYWxzW2lkZW50aWZpZXJdLFxuXHRcdFx0XHRcdFx0XHRyYXc6IGlkZW50aWZpZXJcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fSBlbHNlIGlmKGlkZW50aWZpZXIgPT09IHRoaXNfc3RyKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4geyB0eXBlOiBUSElTX0VYUCB9O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBJREVOVElGSUVSLFxuXHRcdFx0XHRcdFx0XHRuYW1lOiBpZGVudGlmaWVyXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBHb2JibGVzIGEgbGlzdCBvZiBhcmd1bWVudHMgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgZnVuY3Rpb24gY2FsbFxuXHRcdFx0XHQvLyBvciBhcnJheSBsaXRlcmFsLiBUaGlzIGZ1bmN0aW9uIGFsc28gYXNzdW1lcyB0aGF0IHRoZSBvcGVuaW5nIGNoYXJhY3RlclxuXHRcdFx0XHQvLyBgKGAgb3IgYFtgIGhhcyBhbHJlYWR5IGJlZW4gZ29iYmxlZCwgYW5kIGdvYmJsZXMgZXhwcmVzc2lvbnMgYW5kIGNvbW1hc1xuXHRcdFx0XHQvLyB1bnRpbCB0aGUgdGVybWluYXRvciBjaGFyYWN0ZXIgYClgIG9yIGBdYCBpcyBlbmNvdW50ZXJlZC5cblx0XHRcdFx0Ly8gZS5nLiBgZm9vKGJhciwgYmF6KWAsIGBteV9mdW5jKClgLCBvciBgW2JhciwgYmF6XWBcblx0XHRcdFx0Z29iYmxlQXJndW1lbnRzID0gZnVuY3Rpb24odGVybWluYXRpb24pIHtcblx0XHRcdFx0XHR2YXIgY2hfaSwgYXJncyA9IFtdLCBub2RlLCBjbG9zZWQgPSBmYWxzZTtcblx0XHRcdFx0XHR2YXIgc2VwYXJhdG9yX2NvdW50ID0gMDtcblx0XHRcdFx0XHR3aGlsZShpbmRleCA8IGxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Z29iYmxlU3BhY2VzKCk7XG5cdFx0XHRcdFx0XHRjaF9pID0gZXhwcklDb2RlKGluZGV4KTtcblx0XHRcdFx0XHRcdGlmKGNoX2kgPT09IHRlcm1pbmF0aW9uKSB7IC8vIGRvbmUgcGFyc2luZ1xuXHRcdFx0XHRcdFx0XHRjbG9zZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRcdFx0XHRpZih0ZXJtaW5hdGlvbiA9PT0gQ1BBUkVOX0NPREUgJiYgc2VwYXJhdG9yX2NvdW50ICYmIHNlcGFyYXRvcl9jb3VudCA+PSBhcmdzLmxlbmd0aCl7XG5cdFx0XHRcdFx0XHRcdFx0dGhyb3dFcnJvcignVW5leHBlY3RlZCB0b2tlbiAnICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0ZXJtaW5hdGlvbiksIGluZGV4KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoY2hfaSA9PT0gQ09NTUFfQ09ERSkgeyAvLyBiZXR3ZWVuIGV4cHJlc3Npb25zXG5cdFx0XHRcdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdFx0XHRcdHNlcGFyYXRvcl9jb3VudCsrO1xuXHRcdFx0XHRcdFx0XHRpZihzZXBhcmF0b3JfY291bnQgIT09IGFyZ3MubGVuZ3RoKSB7IC8vIG1pc3NpbmcgYXJndW1lbnRcblx0XHRcdFx0XHRcdFx0XHRpZih0ZXJtaW5hdGlvbiA9PT0gQ1BBUkVOX0NPREUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRocm93RXJyb3IoJ1VuZXhwZWN0ZWQgdG9rZW4gLCcsIGluZGV4KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZih0ZXJtaW5hdGlvbiA9PT0gQ0JSQUNLX0NPREUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgYXJnID0gYXJncy5sZW5ndGg7IGFyZzwgc2VwYXJhdG9yX2NvdW50OyBhcmcrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnB1c2gobnVsbCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRub2RlID0gZ29iYmxlRXhwcmVzc2lvbigpO1xuXHRcdFx0XHRcdFx0XHRpZighbm9kZSB8fCBub2RlLnR5cGUgPT09IENPTVBPVU5EKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhyb3dFcnJvcignRXhwZWN0ZWQgY29tbWEnLCBpbmRleCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0YXJncy5wdXNoKG5vZGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIWNsb3NlZCkge1xuXHRcdFx0XHRcdFx0dGhyb3dFcnJvcignRXhwZWN0ZWQgJyArIFN0cmluZy5mcm9tQ2hhckNvZGUodGVybWluYXRpb24pLCBpbmRleCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBhcmdzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFJlc3BvbnNpYmxlIGZvciBwYXJzaW5nIGEgZ3JvdXAgb2YgdGhpbmdzIHdpdGhpbiBwYXJlbnRoZXNlcyBgKClgXG5cdFx0XHRcdC8vIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGl0IG5lZWRzIHRvIGdvYmJsZSB0aGUgb3BlbmluZyBwYXJlbnRoZXNpc1xuXHRcdFx0XHQvLyBhbmQgdGhlbiB0cmllcyB0byBnb2JibGUgZXZlcnl0aGluZyB3aXRoaW4gdGhhdCBwYXJlbnRoZXNpcywgYXNzdW1pbmdcblx0XHRcdFx0Ly8gdGhhdCB0aGUgbmV4dCB0aGluZyBpdCBzaG91bGQgc2VlIGlzIHRoZSBjbG9zZSBwYXJlbnRoZXNpcy4gSWYgbm90LFxuXHRcdFx0XHQvLyB0aGVuIHRoZSBleHByZXNzaW9uIHByb2JhYmx5IGRvZXNuJ3QgaGF2ZSBhIGApYFxuXHRcdFx0XHRnb2JibGVHcm91cCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdFx0dmFyIG5vZGUgPSBnb2JibGVFeHByZXNzaW9uKCk7XG5cdFx0XHRcdFx0Z29iYmxlU3BhY2VzKCk7XG5cdFx0XHRcdFx0aWYoZXhwcklDb2RlKGluZGV4KSA9PT0gQ1BBUkVOX0NPREUpIHtcblx0XHRcdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdFx0XHRyZXR1cm4gbm9kZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhyb3dFcnJvcignVW5jbG9zZWQgKCcsIGluZGV4KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gUmVzcG9uc2libGUgZm9yIHBhcnNpbmcgQXJyYXkgbGl0ZXJhbHMgYFsxLCAyLCAzXWBcblx0XHRcdFx0Ly8gVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgaXQgbmVlZHMgdG8gZ29iYmxlIHRoZSBvcGVuaW5nIGJyYWNrZXRcblx0XHRcdFx0Ly8gYW5kIHRoZW4gdHJpZXMgdG8gZ29iYmxlIHRoZSBleHByZXNzaW9ucyBhcyBhcmd1bWVudHMuXG5cdFx0XHRcdGdvYmJsZUFycmF5ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0dHlwZTogQVJSQVlfRVhQLFxuXHRcdFx0XHRcdFx0ZWxlbWVudHM6IGdvYmJsZUFyZ3VtZW50cyhDQlJBQ0tfQ09ERSlcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdG5vZGVzID0gW10sIGNoX2ksIG5vZGU7XG5cblx0XHRcdHdoaWxlKGluZGV4IDwgbGVuZ3RoKSB7XG5cdFx0XHRcdGNoX2kgPSBleHBySUNvZGUoaW5kZXgpO1xuXG5cdFx0XHRcdC8vIEV4cHJlc3Npb25zIGNhbiBiZSBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9ucywgY29tbWFzLCBvciBqdXN0IGluZmVycmVkIHdpdGhvdXQgYW55XG5cdFx0XHRcdC8vIHNlcGFyYXRvcnNcblx0XHRcdFx0aWYoY2hfaSA9PT0gU0VNQ09MX0NPREUgfHwgY2hfaSA9PT0gQ09NTUFfQ09ERSkge1xuXHRcdFx0XHRcdGluZGV4Kys7IC8vIGlnbm9yZSBzZXBhcmF0b3JzXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gVHJ5IHRvIGdvYmJsZSBlYWNoIGV4cHJlc3Npb24gaW5kaXZpZHVhbGx5XG5cdFx0XHRcdFx0aWYoKG5vZGUgPSBnb2JibGVFeHByZXNzaW9uKCkpKSB7XG5cdFx0XHRcdFx0XHRub2Rlcy5wdXNoKG5vZGUpO1xuXHRcdFx0XHRcdC8vIElmIHdlIHdlcmVuJ3QgYWJsZSB0byBmaW5kIGEgYmluYXJ5IGV4cHJlc3Npb24gYW5kIGFyZSBvdXQgb2Ygcm9vbSwgdGhlblxuXHRcdFx0XHRcdC8vIHRoZSBleHByZXNzaW9uIHBhc3NlZCBpbiBwcm9iYWJseSBoYXMgdG9vIG11Y2hcblx0XHRcdFx0XHR9IGVsc2UgaWYoaW5kZXggPCBsZW5ndGgpIHtcblx0XHRcdFx0XHRcdHRocm93RXJyb3IoJ1VuZXhwZWN0ZWQgXCInICsgZXhwckkoaW5kZXgpICsgJ1wiJywgaW5kZXgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGVyZSdzIG9ubHkgb25lIGV4cHJlc3Npb24ganVzdCB0cnkgcmV0dXJuaW5nIHRoZSBleHByZXNzaW9uXG5cdFx0XHRpZihub2Rlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0cmV0dXJuIG5vZGVzWzBdO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHR0eXBlOiBDT01QT1VORCxcblx0XHRcdFx0XHRib2R5OiBub2Rlc1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH07XG5cblx0Ly8gVG8gYmUgZmlsbGVkIGluIGJ5IHRoZSB0ZW1wbGF0ZVxuXHRqc2VwLnZlcnNpb24gPSAnMC40LjAnO1xuXHRqc2VwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiAnSmF2YVNjcmlwdCBFeHByZXNzaW9uIFBhcnNlciAoSlNFUCkgdicgKyBqc2VwLnZlcnNpb247IH07XG5cblx0LyoqXG5cdCAqIEBtZXRob2QganNlcC5hZGRVbmFyeU9wXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBvcF9uYW1lIFRoZSBuYW1lIG9mIHRoZSB1bmFyeSBvcCB0byBhZGRcblx0ICogQHJldHVybiBqc2VwXG5cdCAqL1xuXHRqc2VwLmFkZFVuYXJ5T3AgPSBmdW5jdGlvbihvcF9uYW1lKSB7XG5cdFx0bWF4X3Vub3BfbGVuID0gTWF0aC5tYXgob3BfbmFtZS5sZW5ndGgsIG1heF91bm9wX2xlbik7XG5cdFx0dW5hcnlfb3BzW29wX25hbWVdID0gdDsgcmV0dXJuIHRoaXM7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBtZXRob2QganNlcC5hZGRCaW5hcnlPcFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gb3BfbmFtZSBUaGUgbmFtZSBvZiB0aGUgYmluYXJ5IG9wIHRvIGFkZFxuXHQgKiBAcGFyYW0ge251bWJlcn0gcHJlY2VkZW5jZSBUaGUgcHJlY2VkZW5jZSBvZiB0aGUgYmluYXJ5IG9wIChjYW4gYmUgYSBmbG9hdClcblx0ICogQHJldHVybiBqc2VwXG5cdCAqL1xuXHRqc2VwLmFkZEJpbmFyeU9wID0gZnVuY3Rpb24ob3BfbmFtZSwgcHJlY2VkZW5jZSkge1xuXHRcdG1heF9iaW5vcF9sZW4gPSBNYXRoLm1heChvcF9uYW1lLmxlbmd0aCwgbWF4X2Jpbm9wX2xlbik7XG5cdFx0YmluYXJ5X29wc1tvcF9uYW1lXSA9IHByZWNlZGVuY2U7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBtZXRob2QganNlcC5hZGRJZGVudGlmaWVyQ2hhclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY2hhciBUaGUgYWRkaXRpb25hbCBjaGFyYWN0ZXIgdG8gdHJlYXQgYXMgYSB2YWxpZCBwYXJ0IG9mIGFuIGlkZW50aWZpZXJcblx0ICogQHJldHVybiBqc2VwXG5cdCAqL1xuXHRqc2VwLmFkZElkZW50aWZpZXJDaGFyID0gZnVuY3Rpb24oY2hhcikge1xuXHRcdGFkZGl0aW9uYWxfaWRlbnRpZmllcl9jaGFyc1tjaGFyXSA9IHQ7IHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAbWV0aG9kIGpzZXAuYWRkTGl0ZXJhbFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGl0ZXJhbF9uYW1lIFRoZSBuYW1lIG9mIHRoZSBsaXRlcmFsIHRvIGFkZFxuXHQgKiBAcGFyYW0geyp9IGxpdGVyYWxfdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBsaXRlcmFsXG5cdCAqIEByZXR1cm4ganNlcFxuXHQgKi9cblx0anNlcC5hZGRMaXRlcmFsID0gZnVuY3Rpb24obGl0ZXJhbF9uYW1lLCBsaXRlcmFsX3ZhbHVlKSB7XG5cdFx0bGl0ZXJhbHNbbGl0ZXJhbF9uYW1lXSA9IGxpdGVyYWxfdmFsdWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBtZXRob2QganNlcC5yZW1vdmVVbmFyeU9wXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBvcF9uYW1lIFRoZSBuYW1lIG9mIHRoZSB1bmFyeSBvcCB0byByZW1vdmVcblx0ICogQHJldHVybiBqc2VwXG5cdCAqL1xuXHRqc2VwLnJlbW92ZVVuYXJ5T3AgPSBmdW5jdGlvbihvcF9uYW1lKSB7XG5cdFx0ZGVsZXRlIHVuYXJ5X29wc1tvcF9uYW1lXTtcblx0XHRpZihvcF9uYW1lLmxlbmd0aCA9PT0gbWF4X3Vub3BfbGVuKSB7XG5cdFx0XHRtYXhfdW5vcF9sZW4gPSBnZXRNYXhLZXlMZW4odW5hcnlfb3BzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBtZXRob2QganNlcC5yZW1vdmVBbGxVbmFyeU9wc1xuXHQgKiBAcmV0dXJuIGpzZXBcblx0ICovXG5cdGpzZXAucmVtb3ZlQWxsVW5hcnlPcHMgPSBmdW5jdGlvbigpIHtcblx0XHR1bmFyeV9vcHMgPSB7fTtcblx0XHRtYXhfdW5vcF9sZW4gPSAwO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBtZXRob2QganNlcC5yZW1vdmVJZGVudGlmaWVyQ2hhclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY2hhciBUaGUgYWRkaXRpb25hbCBjaGFyYWN0ZXIgdG8gc3RvcCB0cmVhdGluZyBhcyBhIHZhbGlkIHBhcnQgb2YgYW4gaWRlbnRpZmllclxuXHQgKiBAcmV0dXJuIGpzZXBcblx0ICovXG5cdGpzZXAucmVtb3ZlSWRlbnRpZmllckNoYXIgPSBmdW5jdGlvbihjaGFyKSB7XG5cdFx0ZGVsZXRlIGFkZGl0aW9uYWxfaWRlbnRpZmllcl9jaGFyc1tjaGFyXTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXG5cdC8qKlxuXHQgKiBAbWV0aG9kIGpzZXAucmVtb3ZlQmluYXJ5T3Bcblx0ICogQHBhcmFtIHtzdHJpbmd9IG9wX25hbWUgVGhlIG5hbWUgb2YgdGhlIGJpbmFyeSBvcCB0byByZW1vdmVcblx0ICogQHJldHVybiBqc2VwXG5cdCAqL1xuXHRqc2VwLnJlbW92ZUJpbmFyeU9wID0gZnVuY3Rpb24ob3BfbmFtZSkge1xuXHRcdGRlbGV0ZSBiaW5hcnlfb3BzW29wX25hbWVdO1xuXHRcdGlmKG9wX25hbWUubGVuZ3RoID09PSBtYXhfYmlub3BfbGVuKSB7XG5cdFx0XHRtYXhfYmlub3BfbGVuID0gZ2V0TWF4S2V5TGVuKGJpbmFyeV9vcHMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogQG1ldGhvZCBqc2VwLnJlbW92ZUFsbEJpbmFyeU9wc1xuXHQgKiBAcmV0dXJuIGpzZXBcblx0ICovXG5cdGpzZXAucmVtb3ZlQWxsQmluYXJ5T3BzID0gZnVuY3Rpb24oKSB7XG5cdFx0YmluYXJ5X29wcyA9IHt9O1xuXHRcdG1heF9iaW5vcF9sZW4gPSAwO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBtZXRob2QganNlcC5yZW1vdmVMaXRlcmFsXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsaXRlcmFsX25hbWUgVGhlIG5hbWUgb2YgdGhlIGxpdGVyYWwgdG8gcmVtb3ZlXG5cdCAqIEByZXR1cm4ganNlcFxuXHQgKi9cblx0anNlcC5yZW1vdmVMaXRlcmFsID0gZnVuY3Rpb24obGl0ZXJhbF9uYW1lKSB7XG5cdFx0ZGVsZXRlIGxpdGVyYWxzW2xpdGVyYWxfbmFtZV07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBtZXRob2QganNlcC5yZW1vdmVBbGxMaXRlcmFsc1xuXHQgKiBAcmV0dXJuIGpzZXBcblx0ICovXG5cdGpzZXAucmVtb3ZlQWxsTGl0ZXJhbHMgPSBmdW5jdGlvbigpIHtcblx0XHRsaXRlcmFscyA9IHt9O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0Ly8gSW4gZGVza3RvcCBlbnZpcm9ubWVudHMsIGhhdmUgYSB3YXkgdG8gcmVzdG9yZSB0aGUgb2xkIHZhbHVlIGZvciBganNlcGBcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciBvbGRfanNlcCA9IHJvb3QuanNlcDtcblx0XHQvLyBUaGUgc3RhciBvZiB0aGUgc2hvdyEgSXQncyBhIGZ1bmN0aW9uIVxuXHRcdHJvb3QuanNlcCA9IGpzZXA7XG5cdFx0Ly8gQW5kIGEgY291cnRlb3VzIGZ1bmN0aW9uIHdpbGxpbmcgdG8gbW92ZSBvdXQgb2YgdGhlIHdheSBmb3Igb3RoZXIgc2ltaWxhcmx5LW5hbWVkIG9iamVjdHMhXG5cdFx0anNlcC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZihyb290LmpzZXAgPT09IGpzZXApIHtcblx0XHRcdFx0cm9vdC5qc2VwID0gb2xkX2pzZXA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ganNlcDtcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdC8vIEluIE5vZGUuSlMgZW52aXJvbm1lbnRzXG5cdFx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0XHRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBqc2VwO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRleHBvcnRzLnBhcnNlID0ganNlcDtcblx0XHR9XG5cdH1cbn0odGhpcykpO1xuIiwiLyogZ2xvYmFsIHdpbmRvdywgZXhwb3J0cywgZGVmaW5lICovXG5cbiFmdW5jdGlvbigpIHtcbiAgICAndXNlIHN0cmljdCdcblxuICAgIHZhciByZSA9IHtcbiAgICAgICAgbm90X3N0cmluZzogL1tec10vLFxuICAgICAgICBub3RfYm9vbDogL1tedF0vLFxuICAgICAgICBub3RfdHlwZTogL1teVF0vLFxuICAgICAgICBub3RfcHJpbWl0aXZlOiAvW152XS8sXG4gICAgICAgIG51bWJlcjogL1tkaWVmZ10vLFxuICAgICAgICBudW1lcmljX2FyZzogL1tiY2RpZWZndXhYXS8sXG4gICAgICAgIGpzb246IC9bal0vLFxuICAgICAgICBub3RfanNvbjogL1teal0vLFxuICAgICAgICB0ZXh0OiAvXlteXFx4MjVdKy8sXG4gICAgICAgIG1vZHVsbzogL15cXHgyNXsyfS8sXG4gICAgICAgIHBsYWNlaG9sZGVyOiAvXlxceDI1KD86KFsxLTldXFxkKilcXCR8XFwoKFteKV0rKVxcKSk/KFxcKyk/KDB8J1teJF0pPygtKT8oXFxkKyk/KD86XFwuKFxcZCspKT8oW2ItZ2lqb3N0VHV2eFhdKS8sXG4gICAgICAgIGtleTogL14oW2Etel9dW2Etel9cXGRdKikvaSxcbiAgICAgICAga2V5X2FjY2VzczogL15cXC4oW2Etel9dW2Etel9cXGRdKikvaSxcbiAgICAgICAgaW5kZXhfYWNjZXNzOiAvXlxcWyhcXGQrKVxcXS8sXG4gICAgICAgIHNpZ246IC9eWystXS9cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzcHJpbnRmKGtleSkge1xuICAgICAgICAvLyBgYXJndW1lbnRzYCBpcyBub3QgYW4gYXJyYXksIGJ1dCBzaG91bGQgYmUgZmluZSBmb3IgdGhpcyBjYWxsXG4gICAgICAgIHJldHVybiBzcHJpbnRmX2Zvcm1hdChzcHJpbnRmX3BhcnNlKGtleSksIGFyZ3VtZW50cylcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2c3ByaW50ZihmbXQsIGFyZ3YpIHtcbiAgICAgICAgcmV0dXJuIHNwcmludGYuYXBwbHkobnVsbCwgW2ZtdF0uY29uY2F0KGFyZ3YgfHwgW10pKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNwcmludGZfZm9ybWF0KHBhcnNlX3RyZWUsIGFyZ3YpIHtcbiAgICAgICAgdmFyIGN1cnNvciA9IDEsIHRyZWVfbGVuZ3RoID0gcGFyc2VfdHJlZS5sZW5ndGgsIGFyZywgb3V0cHV0ID0gJycsIGksIGssIHBoLCBwYWQsIHBhZF9jaGFyYWN0ZXIsIHBhZF9sZW5ndGgsIGlzX3Bvc2l0aXZlLCBzaWduXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmVlX2xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHBhcnNlX3RyZWVbaV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHBhcnNlX3RyZWVbaV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBwYXJzZV90cmVlW2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHBoID0gcGFyc2VfdHJlZVtpXSAvLyBjb252ZW5pZW5jZSBwdXJwb3NlcyBvbmx5XG4gICAgICAgICAgICAgICAgaWYgKHBoLmtleXMpIHsgLy8ga2V5d29yZCBhcmd1bWVudFxuICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd2W2N1cnNvcl1cbiAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IHBoLmtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHNwcmludGYoJ1tzcHJpbnRmXSBDYW5ub3QgYWNjZXNzIHByb3BlcnR5IFwiJXNcIiBvZiB1bmRlZmluZWQgdmFsdWUgXCIlc1wiJywgcGgua2V5c1trXSwgcGgua2V5c1trLTFdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ1twaC5rZXlzW2tdXVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBoLnBhcmFtX25vKSB7IC8vIHBvc2l0aW9uYWwgYXJndW1lbnQgKGV4cGxpY2l0KVxuICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd2W3BoLnBhcmFtX25vXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHsgLy8gcG9zaXRpb25hbCBhcmd1bWVudCAoaW1wbGljaXQpXG4gICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3ZbY3Vyc29yKytdXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlLm5vdF90eXBlLnRlc3QocGgudHlwZSkgJiYgcmUubm90X3ByaW1pdGl2ZS50ZXN0KHBoLnR5cGUpICYmIGFyZyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZygpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlLm51bWVyaWNfYXJnLnRlc3QocGgudHlwZSkgJiYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInICYmIGlzTmFOKGFyZykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Ioc3ByaW50ZignW3NwcmludGZdIGV4cGVjdGluZyBudW1iZXIgYnV0IGZvdW5kICVUJywgYXJnKSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmUubnVtYmVyLnRlc3QocGgudHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNfcG9zaXRpdmUgPSBhcmcgPj0gMFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN3aXRjaCAocGgudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBhcnNlSW50KGFyZywgMTApLnRvU3RyaW5nKDIpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdjJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYXJnLCAxMCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBwYXJzZUludChhcmcsIDEwKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaic6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBKU09OLnN0cmluZ2lmeShhcmcsIG51bGwsIHBoLndpZHRoID8gcGFyc2VJbnQocGgud2lkdGgpIDogMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gcGgucHJlY2lzaW9uID8gcGFyc2VGbG9hdChhcmcpLnRvRXhwb25lbnRpYWwocGgucHJlY2lzaW9uKSA6IHBhcnNlRmxvYXQoYXJnKS50b0V4cG9uZW50aWFsKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gcGgucHJlY2lzaW9uID8gcGFyc2VGbG9hdChhcmcpLnRvRml4ZWQocGgucHJlY2lzaW9uKSA6IHBhcnNlRmxvYXQoYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBwaC5wcmVjaXNpb24gPyBTdHJpbmcoTnVtYmVyKGFyZy50b1ByZWNpc2lvbihwaC5wcmVjaXNpb24pKSkgOiBwYXJzZUZsb2F0KGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ28nOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gKHBhcnNlSW50KGFyZywgMTApID4+PiAwKS50b1N0cmluZyg4KVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBTdHJpbmcoYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gKHBoLnByZWNpc2lvbiA/IGFyZy5zdWJzdHJpbmcoMCwgcGgucHJlY2lzaW9uKSA6IGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gU3RyaW5nKCEhYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gKHBoLnByZWNpc2lvbiA/IGFyZy5zdWJzdHJpbmcoMCwgcGgucHJlY2lzaW9uKSA6IGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZykuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChwaC5wcmVjaXNpb24gPyBhcmcuc3Vic3RyaW5nKDAsIHBoLnByZWNpc2lvbikgOiBhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd1JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBhcnNlSW50KGFyZywgMTApID4+PiAwXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd2JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChwaC5wcmVjaXNpb24gPyBhcmcuc3Vic3RyaW5nKDAsIHBoLnByZWNpc2lvbikgOiBhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChwYXJzZUludChhcmcsIDEwKSA+Pj4gMCkudG9TdHJpbmcoMTYpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdYJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChwYXJzZUludChhcmcsIDEwKSA+Pj4gMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZS5qc29uLnRlc3QocGgudHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGFyZ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlLm51bWJlci50ZXN0KHBoLnR5cGUpICYmICghaXNfcG9zaXRpdmUgfHwgcGguc2lnbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24gPSBpc19wb3NpdGl2ZSA/ICcrJyA6ICctJ1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnRvU3RyaW5nKCkucmVwbGFjZShyZS5zaWduLCAnJylcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24gPSAnJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBhZF9jaGFyYWN0ZXIgPSBwaC5wYWRfY2hhciA/IHBoLnBhZF9jaGFyID09PSAnMCcgPyAnMCcgOiBwaC5wYWRfY2hhci5jaGFyQXQoMSkgOiAnICdcbiAgICAgICAgICAgICAgICAgICAgcGFkX2xlbmd0aCA9IHBoLndpZHRoIC0gKHNpZ24gKyBhcmcpLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICBwYWQgPSBwaC53aWR0aCA/IChwYWRfbGVuZ3RoID4gMCA/IHBhZF9jaGFyYWN0ZXIucmVwZWF0KHBhZF9sZW5ndGgpIDogJycpIDogJydcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IHBoLmFsaWduID8gc2lnbiArIGFyZyArIHBhZCA6IChwYWRfY2hhcmFjdGVyID09PSAnMCcgPyBzaWduICsgcGFkICsgYXJnIDogcGFkICsgc2lnbiArIGFyZylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dFxuICAgIH1cblxuICAgIHZhciBzcHJpbnRmX2NhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4gICAgZnVuY3Rpb24gc3ByaW50Zl9wYXJzZShmbXQpIHtcbiAgICAgICAgaWYgKHNwcmludGZfY2FjaGVbZm10XSkge1xuICAgICAgICAgICAgcmV0dXJuIHNwcmludGZfY2FjaGVbZm10XVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9mbXQgPSBmbXQsIG1hdGNoLCBwYXJzZV90cmVlID0gW10sIGFyZ19uYW1lcyA9IDBcbiAgICAgICAgd2hpbGUgKF9mbXQpIHtcbiAgICAgICAgICAgIGlmICgobWF0Y2ggPSByZS50ZXh0LmV4ZWMoX2ZtdCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VfdHJlZS5wdXNoKG1hdGNoWzBdKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoKG1hdGNoID0gcmUubW9kdWxvLmV4ZWMoX2ZtdCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VfdHJlZS5wdXNoKCclJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKChtYXRjaCA9IHJlLnBsYWNlaG9sZGVyLmV4ZWMoX2ZtdCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoWzJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ19uYW1lcyB8PSAxXG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZF9saXN0ID0gW10sIHJlcGxhY2VtZW50X2ZpZWxkID0gbWF0Y2hbMl0sIGZpZWxkX21hdGNoID0gW11cbiAgICAgICAgICAgICAgICAgICAgaWYgKChmaWVsZF9tYXRjaCA9IHJlLmtleS5leGVjKHJlcGxhY2VtZW50X2ZpZWxkKSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2xpc3QucHVzaChmaWVsZF9tYXRjaFsxXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgocmVwbGFjZW1lbnRfZmllbGQgPSByZXBsYWNlbWVudF9maWVsZC5zdWJzdHJpbmcoZmllbGRfbWF0Y2hbMF0ubGVuZ3RoKSkgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmaWVsZF9tYXRjaCA9IHJlLmtleV9hY2Nlc3MuZXhlYyhyZXBsYWNlbWVudF9maWVsZCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2xpc3QucHVzaChmaWVsZF9tYXRjaFsxXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKGZpZWxkX21hdGNoID0gcmUuaW5kZXhfYWNjZXNzLmV4ZWMocmVwbGFjZW1lbnRfZmllbGQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9saXN0LnB1c2goZmllbGRfbWF0Y2hbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1tzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1tzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5JylcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBtYXRjaFsyXSA9IGZpZWxkX2xpc3RcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ19uYW1lcyB8PSAyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhcmdfbmFtZXMgPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdbc3ByaW50Zl0gbWl4aW5nIHBvc2l0aW9uYWwgYW5kIG5hbWVkIHBsYWNlaG9sZGVycyBpcyBub3QgKHlldCkgc3VwcG9ydGVkJylcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwYXJzZV90cmVlLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBtYXRjaFswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX25vOiAgICBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXM6ICAgICAgICBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ246ICAgICAgICBtYXRjaFszXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZF9jaGFyOiAgICBtYXRjaFs0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduOiAgICAgICBtYXRjaFs1XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAgICAgICBtYXRjaFs2XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbjogICBtYXRjaFs3XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICAgICAgICBtYXRjaFs4XVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdbc3ByaW50Zl0gdW5leHBlY3RlZCBwbGFjZWhvbGRlcicpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfZm10ID0gX2ZtdC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzcHJpbnRmX2NhY2hlW2ZtdF0gPSBwYXJzZV90cmVlXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZXhwb3J0IHRvIGVpdGhlciBicm93c2VyIG9yIG5vZGUuanNcbiAgICAgKi9cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBxdW90ZS1wcm9wcyAqL1xuICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZXhwb3J0c1snc3ByaW50ZiddID0gc3ByaW50ZlxuICAgICAgICBleHBvcnRzWyd2c3ByaW50ZiddID0gdnNwcmludGZcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHdpbmRvd1snc3ByaW50ZiddID0gc3ByaW50ZlxuICAgICAgICB3aW5kb3dbJ3ZzcHJpbnRmJ10gPSB2c3ByaW50ZlxuXG4gICAgICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZVsnYW1kJ10pIHtcbiAgICAgICAgICAgIGRlZmluZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAnc3ByaW50Zic6IHNwcmludGYsXG4gICAgICAgICAgICAgICAgICAgICd2c3ByaW50Zic6IHZzcHJpbnRmXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIHF1b3RlLXByb3BzICovXG59KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiIsImltcG9ydCB7IFJlbmRlckluZm8sIERhdGFzZXQgfSBmcm9tIFwiLi9kYXRhXCI7XHJcbmltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xyXG5pbXBvcnQgeyBpc01vbWVudCwgTW9tZW50IH0gZnJvbSBcIm1vbWVudFwiO1xyXG5pbXBvcnQgKiBhcyBoZWxwZXIgZnJvbSBcIi4vaGVscGVyXCI7XHJcbmltcG9ydCBqc2VwIGZyb20gXCJqc2VwXCI7XHJcbmltcG9ydCB7IHNwcmludGYgfSBmcm9tIFwic3ByaW50Zi1qc1wiO1xyXG5cclxuLy8gRnVuY3Rpb24gYWNjZXB0IGRhdGFzZXRJZCBhcyBmaXJzdCBhcmd1bWVudFxyXG50eXBlIEZuRGF0YXNldFRvVmFsdWUgPSAoXHJcbiAgICBkYXRhc2V0OiBEYXRhc2V0LFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xyXG4pID0+IG51bWJlciB8IE1vbWVudCB8IHN0cmluZztcclxudHlwZSBGbkRhdGFzZXRUb0RhdGFzZXQgPSAoXHJcbiAgICBkYXRhc2V0OiBEYXRhc2V0LFxyXG4gICAgYXJnczogQXJyYXk8bnVtYmVyIHwgRGF0YXNldD4sXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXHJcbikgPT4gRGF0YXNldCB8IHN0cmluZztcclxudHlwZSBGblVuaXJ5T3AgPSAoXHJcbiAgICB1OiBudW1iZXIgfCBNb21lbnQgfCBEYXRhc2V0XHJcbikgPT4gbnVtYmVyIHwgTW9tZW50IHwgRGF0YXNldCB8IHN0cmluZztcclxudHlwZSBGbkJpbmFyeU9wID0gKFxyXG4gICAgbDogbnVtYmVyIHwgTW9tZW50IHwgRGF0YXNldCxcclxuICAgIHI6IG51bWJlciB8IE1vbWVudCB8IERhdGFzZXRcclxuKSA9PiBudW1iZXIgfCBNb21lbnQgfCBEYXRhc2V0IHwgc3RyaW5nO1xyXG5cclxuaW50ZXJmYWNlIEZuTWFwRGF0YXNldFRvVmFsdWUge1xyXG4gICAgW2tleTogc3RyaW5nXTogRm5EYXRhc2V0VG9WYWx1ZTtcclxufVxyXG5cclxuaW50ZXJmYWNlIEZuTWFwRGF0YXNldFRvRGF0YXNldCB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBGbkRhdGFzZXRUb0RhdGFzZXQ7XHJcbn1cclxuXHJcbmludGVyZmFjZSBGbk1hcEJpbmFyeU9wIHtcclxuICAgIFtrZXk6IHN0cmluZ106IEZuQmluYXJ5T3A7XHJcbn1cclxuXHJcbmludGVyZmFjZSBGbk1hcFVuaXJ5T3Age1xyXG4gICAgW2tleTogc3RyaW5nXTogRm5VbmlyeU9wO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjaGVja0Rpdmlzb3IoZGl2aXNvcjogYW55KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcImNoZWNraW5nIGRpdmlvclwiKTtcclxuICAgIGlmICh0eXBlb2YgZGl2aXNvciA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgIGlmIChkaXZpc29yID09PSAwKSByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKGRpdmlzb3IgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBkaXZpc29yLmdldFZhbHVlcygpLnNvbWUoZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2ID09PSAwO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNoZWNrQmluYXJ5T3BlcmFudFR5cGUobGVmdDogYW55LCByaWdodDogYW55KSB7XHJcbiAgICBpZiAodHlwZW9mIGxlZnQgPT09IFwic3RyaW5nXCIpIHJldHVybiBsZWZ0O1xyXG4gICAgaWYgKHR5cGVvZiByaWdodCA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHJpZ2h0O1xyXG4gICAgaWYgKFxyXG4gICAgICAgIHR5cGVvZiBsZWZ0ICE9PSBcIm51bWJlclwiICYmXHJcbiAgICAgICAgIXdpbmRvdy5tb21lbnQuaXNNb21lbnQobGVmdCkgJiZcclxuICAgICAgICAhKGxlZnQgaW5zdGFuY2VvZiBEYXRhc2V0KVxyXG4gICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGludmFsaWQgb3BlcmFudCB0eXBlXCI7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgICAgdHlwZW9mIHJpZ2h0ICE9PSBcIm51bWJlclwiICYmXHJcbiAgICAgICAgIXdpbmRvdy5tb21lbnQuaXNNb21lbnQocmlnaHQpICYmXHJcbiAgICAgICAgIShyaWdodCBpbnN0YW5jZW9mIERhdGFzZXQpXHJcbiAgICApIHtcclxuICAgICAgICByZXR1cm4gXCJFcnJvcjogaW52YWxpZGUgb3BlcmFudCB0eXBlXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJcIjtcclxufVxyXG5cclxuY29uc3QgZm5NYXBEYXRhc2V0VG9WYWx1ZTogRm5NYXBEYXRhc2V0VG9WYWx1ZSA9IHtcclxuICAgIC8vIG1pbiB2YWx1ZSBvZiBhIGRhdGFzZXRcclxuICAgIG1pbjogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXHJcbiAgICAgICAgcmV0dXJuIGQzLm1pbihkYXRhc2V0LmdldFZhbHVlcygpKTtcclxuICAgIH0sXHJcbiAgICAvLyB0aGUgbGF0ZXN0IGRhdGUgd2l0aCBtaW4gdmFsdWVcclxuICAgIG1pbkRhdGU6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxyXG4gICAgICAgIGxldCBtaW4gPSBkMy5taW4oZGF0YXNldC5nZXRWYWx1ZXMoKSk7XHJcbiAgICAgICAgaWYgKE51bWJlci5pc051bWJlcihtaW4pKSB7XHJcbiAgICAgICAgICAgIGxldCBhcnJheURhdGFzZXQgPSBBcnJheS5mcm9tKGRhdGFzZXQpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBkYXRhUG9pbnQgb2YgYXJyYXlEYXRhc2V0LnJldmVyc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGFQb2ludC52YWx1ZSAhPT0gbnVsbCAmJiBkYXRhUG9pbnQudmFsdWUgPT09IG1pbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhUG9pbnQuZGF0ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJFcnJvcjogbWluIG5vdCBmb3VuZFwiO1xyXG4gICAgfSxcclxuICAgIC8vIG1heCB2YWx1ZSBvZiBhIGRhdGFzZXRcclxuICAgIG1heDogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXHJcbiAgICAgICAgcmV0dXJuIGQzLm1heChkYXRhc2V0LmdldFZhbHVlcygpKTtcclxuICAgIH0sXHJcbiAgICAvLyB0aGUgbGF0ZXN0IGRhdGUgd2l0aCBtYXggdmFsdWVcclxuICAgIG1heERhdGU6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxyXG4gICAgICAgIGxldCBtYXggPSBkMy5tYXgoZGF0YXNldC5nZXRWYWx1ZXMoKSk7XHJcbiAgICAgICAgaWYgKE51bWJlci5pc051bWJlcihtYXgpKSB7XHJcbiAgICAgICAgICAgIGxldCBhcnJheURhdGFzZXQgPSBBcnJheS5mcm9tKGRhdGFzZXQpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBkYXRhUG9pbnQgb2YgYXJyYXlEYXRhc2V0LnJldmVyc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGFQb2ludC52YWx1ZSAhPT0gbnVsbCAmJiBkYXRhUG9pbnQudmFsdWUgPT09IG1heCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhUG9pbnQuZGF0ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJFcnJvcjogbWF4IG5vdCBmb3VuZFwiO1xyXG4gICAgfSxcclxuICAgIC8vIHN0YXJ0IGRhdGUgb2YgYSBkYXRhc2V0XHJcbiAgICAvLyBpZiBkYXRhc2V0SWQgbm90IGZvdW5kLCByZXR1cm4gb3ZlcmFsbCBzdGFydERhdGVcclxuICAgIHN0YXJ0RGF0ZTogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICAvLyByZXR1cm4gTW9tZW50XHJcbiAgICAgICAgaWYgKGRhdGFzZXQpIHtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0RGF0ZSA9IGRhdGFzZXQuZ2V0U3RhcnREYXRlKCk7XHJcbiAgICAgICAgICAgIGlmIChzdGFydERhdGUgJiYgc3RhcnREYXRlLmlzVmFsaWQoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RGF0ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVuZGVySW5mby5zdGFydERhdGU7XHJcbiAgICB9LFxyXG4gICAgLy8gZW5kIGRhdGUgb2YgYSBkYXRhc2V0XHJcbiAgICAvLyBpZiBkYXRhc2V0SWQgbm90IGZvdW5kLCByZXR1cm4gb3ZlcmFsbCBlbmREYXRlXHJcbiAgICBlbmREYXRlOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xyXG4gICAgICAgIC8vIHJldHVybiBNb21lbnRcclxuICAgICAgICBpZiAoZGF0YXNldCkge1xyXG4gICAgICAgICAgICBsZXQgZW5kRGF0ZSA9IGRhdGFzZXQuZ2V0RW5kRGF0ZSgpO1xyXG4gICAgICAgICAgICBpZiAoZW5kRGF0ZSAmJiBlbmREYXRlLmlzVmFsaWQoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuZERhdGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlckluZm8uZW5kRGF0ZTtcclxuICAgIH0sXHJcbiAgICAvLyBzdW0gb2YgYWxsIHZhbHVlcyBpbiBhIGRhdGFzZXRcclxuICAgIHN1bTogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXHJcbiAgICAgICAgcmV0dXJuIGQzLnN1bShkYXRhc2V0LmdldFZhbHVlcygpKTtcclxuICAgIH0sXHJcbiAgICBjb3VudDogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICByZXR1cm4gXCJFcnJvcjogZGVwcmVjYXRlZCBmdW5jdGlvbiAnY291bnQnXCI7XHJcbiAgICB9LFxyXG4gICAgLy8gbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIGEgdGFyZ2V0IGluIGEgZGF0YXNldFxyXG4gICAgbnVtVGFyZ2V0czogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXHJcbiAgICAgICAgcmV0dXJuIGRhdGFzZXQuZ2V0TnVtVGFyZ2V0cygpO1xyXG4gICAgfSxcclxuICAgIGRheXM6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGRlcHJlY2F0ZWQgZnVuY3Rpb24gJ2RheXMnXCI7XHJcbiAgICB9LFxyXG4gICAgbnVtRGF5czogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXHJcbiAgICAgICAgcmV0dXJuIGRhdGFzZXQuZ2V0TGVuZ3RoKCk7XHJcbiAgICB9LFxyXG4gICAgbnVtRGF5c0hhdmluZ0RhdGE6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIG51bWJlclxyXG4gICAgICAgIHJldHVybiBkYXRhc2V0LmdldExlbmd0aE5vdE51bGwoKTtcclxuICAgIH0sXHJcbiAgICBtYXhTdHJlYWs6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIG51bWJlclxyXG4gICAgICAgIGxldCBzdHJlYWsgPSAwO1xyXG4gICAgICAgIGxldCBtYXhTdHJlYWsgPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGRhdGFQb2ludCBvZiBkYXRhc2V0KSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhUG9pbnQudmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHN0cmVhaysrO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3RyZWFrID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3RyZWFrID49IG1heFN0cmVhaykge1xyXG4gICAgICAgICAgICAgICAgbWF4U3RyZWFrID0gc3RyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtYXhTdHJlYWs7XHJcbiAgICB9LFxyXG4gICAgbWF4U3RyZWFrU3RhcnQ6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxyXG4gICAgICAgIGxldCBzdHJlYWsgPSAwO1xyXG4gICAgICAgIGxldCBtYXhTdHJlYWsgPSAwO1xyXG4gICAgICAgIGxldCBzdHJlYWtTdGFydDogTW9tZW50ID0gbnVsbDtcclxuICAgICAgICBsZXQgbWF4U3RyZWFrU3RhcnQ6IE1vbWVudCA9IG51bGw7XHJcbiAgICAgICAgaWYgKGRhdGFzZXQpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgZGF0YVBvaW50IG9mIGRhdGFzZXQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhUG9pbnQudmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFrID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVha1N0YXJ0ID0gZGF0YVBvaW50LmRhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhaysrO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzdHJlYWsgPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHN0cmVhayA+PSBtYXhTdHJlYWspIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXhTdHJlYWsgPSBzdHJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF4U3RyZWFrU3RhcnQgPSBzdHJlYWtTdGFydDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWF4U3RyZWFrU3RhcnQ7XHJcbiAgICB9LFxyXG4gICAgbWF4U3RyZWFrRW5kOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xyXG4gICAgICAgIC8vIHJldHVybiBNb21lbnRcclxuICAgICAgICBsZXQgc3RyZWFrID0gMDtcclxuICAgICAgICBsZXQgbWF4U3RyZWFrID0gMDtcclxuICAgICAgICBsZXQgc3RyZWFrRW5kOiBNb21lbnQgPSBudWxsO1xyXG4gICAgICAgIGxldCBtYXhTdHJlYWtFbmQ6IE1vbWVudCA9IG51bGw7XHJcbiAgICAgICAgaWYgKGRhdGFzZXQpIHtcclxuICAgICAgICAgICAgbGV0IGFycmF5RGF0YXNldCA9IEFycmF5LmZyb20oZGF0YXNldCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IGFycmF5RGF0YXNldC5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnQgPSBhcnJheURhdGFzZXRbaW5kXTtcclxuICAgICAgICAgICAgICAgIGxldCBuZXh0UG9pbnQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZCA8IGFycmF5RGF0YXNldC5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dFBvaW50ID0gYXJyYXlEYXRhc2V0W2luZCArIDFdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBvaW50LnZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFrKys7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRQb2ludD8udmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFrRW5kID0gcG9pbnQuZGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhayA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RyZWFrID49IG1heFN0cmVhaykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHN0cmVhayk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobWF4U3RyZWFrKTtcclxuICAgICAgICAgICAgICAgICAgICBtYXhTdHJlYWsgPSBzdHJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF4U3RyZWFrRW5kID0gc3RyZWFrRW5kO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtYXhTdHJlYWtFbmQ7XHJcbiAgICB9LFxyXG4gICAgbWF4QnJlYWtzOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xyXG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcclxuICAgICAgICBsZXQgYnJlYWtzID0gMDtcclxuICAgICAgICBsZXQgbWF4QnJlYWtzID0gMDtcclxuICAgICAgICBmb3IgKGxldCBkYXRhUG9pbnQgb2YgZGF0YXNldCkge1xyXG4gICAgICAgICAgICBpZiAoZGF0YVBvaW50LnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBicmVha3MrKztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrcyA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGJyZWFrcyA+IG1heEJyZWFrcykge1xyXG4gICAgICAgICAgICAgICAgbWF4QnJlYWtzID0gYnJlYWtzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtYXhCcmVha3M7XHJcbiAgICB9LFxyXG4gICAgbWF4QnJlYWtzU3RhcnQ6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxyXG4gICAgICAgIGxldCBicmVha3MgPSAwO1xyXG4gICAgICAgIGxldCBtYXhCcmVha3MgPSAwO1xyXG4gICAgICAgIGxldCBicmVha3NTdGFydDogTW9tZW50ID0gbnVsbDtcclxuICAgICAgICBsZXQgbWF4QnJlYWtzU3RhcnQ6IE1vbWVudCA9IG51bGw7XHJcbiAgICAgICAgaWYgKGRhdGFzZXQpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgZGF0YVBvaW50IG9mIGRhdGFzZXQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhUG9pbnQudmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYnJlYWtzID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrc1N0YXJ0ID0gZGF0YVBvaW50LmRhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrcysrO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVha3MgPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGJyZWFrcyA+PSBtYXhCcmVha3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXhCcmVha3MgPSBicmVha3M7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF4QnJlYWtzU3RhcnQgPSBicmVha3NTdGFydDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWF4QnJlYWtzU3RhcnQ7XHJcbiAgICB9LFxyXG4gICAgbWF4QnJlYWtzRW5kOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xyXG4gICAgICAgIC8vIHJldHVybiBNb21lbnRcclxuICAgICAgICBsZXQgYnJlYWtzID0gMDtcclxuICAgICAgICBsZXQgbWF4QnJlYWtzID0gMDtcclxuICAgICAgICBsZXQgYnJlYWtzRW5kOiBNb21lbnQgPSBudWxsO1xyXG4gICAgICAgIGxldCBtYXhCcmVha3NFbmQ6IE1vbWVudCA9IG51bGw7XHJcbiAgICAgICAgaWYgKGRhdGFzZXQpIHtcclxuICAgICAgICAgICAgbGV0IGFycmF5RGF0YXNldCA9IEFycmF5LmZyb20oZGF0YXNldCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IGFycmF5RGF0YXNldC5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnQgPSBhcnJheURhdGFzZXRbaW5kXTtcclxuICAgICAgICAgICAgICAgIGxldCBuZXh0UG9pbnQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZCA8IGFycmF5RGF0YXNldC5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dFBvaW50ID0gYXJyYXlEYXRhc2V0W2luZCArIDFdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBvaW50LnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtzKys7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRQb2ludD8udmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtzRW5kID0gcG9pbnQuZGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYnJlYWtzID49IG1heEJyZWFrcykge1xyXG4gICAgICAgICAgICAgICAgICAgIG1heEJyZWFrcyA9IGJyZWFrcztcclxuICAgICAgICAgICAgICAgICAgICBtYXhCcmVha3NFbmQgPSBicmVha3NFbmQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1heEJyZWFrc0VuZDtcclxuICAgIH0sXHJcbiAgICBsYXN0U3RyZWFrOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xyXG4gICAgICAgIHJldHVybiBcIkVycm9yOiBkZXByZWNhdGVkIGZ1bmN0aW9uICdsYXN0U3RyZWFrJ1wiO1xyXG4gICAgfSxcclxuICAgIGN1cnJlbnRTdHJlYWs6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIG51bWJlclxyXG4gICAgICAgIGxldCBjdXJyZW50U3RyZWFrID0gMDtcclxuICAgICAgICBpZiAoZGF0YXNldCkge1xyXG4gICAgICAgICAgICBsZXQgYXJyYXlEYXRhc2V0ID0gQXJyYXkuZnJvbShkYXRhc2V0KTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gYXJyYXlEYXRhc2V0Lmxlbmd0aCAtIDE7IGluZCA+PSAwOyBpbmQtLSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBvaW50ID0gYXJyYXlEYXRhc2V0W2luZF07XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pbnQudmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0cmVhaysrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50U3RyZWFrO1xyXG4gICAgfSxcclxuICAgIGN1cnJlbnRTdHJlYWtTdGFydDogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICAvLyByZXR1cm4gTW9tZW50XHJcbiAgICAgICAgbGV0IGN1cnJlbnRTdHJlYWsgPSAwO1xyXG4gICAgICAgIGxldCBjdXJyZW50U3RyZWFrU3RhcnQ6IE1vbWVudCA9IG51bGw7XHJcbiAgICAgICAgaWYgKGRhdGFzZXQpIHtcclxuICAgICAgICAgICAgbGV0IGFycmF5RGF0YXNldCA9IEFycmF5LmZyb20oZGF0YXNldCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IGFycmF5RGF0YXNldC5sZW5ndGggLSAxOyBpbmQgPj0gMDsgaW5kLS0pIHtcclxuICAgICAgICAgICAgICAgIGxldCBwb2ludCA9IGFycmF5RGF0YXNldFtpbmRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZCA8IGFycmF5RGF0YXNldC5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0cmVha1N0YXJ0ID0gYXJyYXlEYXRhc2V0W2luZCArIDFdLmRhdGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pbnQudmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0cmVhaysrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY3VycmVudFN0cmVha1N0YXJ0ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkVycm9yOiBhYnNlbnNlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50U3RyZWFrU3RhcnQ7XHJcbiAgICB9LFxyXG4gICAgY3VycmVudFN0cmVha0VuZDogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICAvLyByZXR1cm4gTW9tZW50XHJcbiAgICAgICAgbGV0IGN1cnJlbnRTdHJlYWsgPSAwO1xyXG4gICAgICAgIGxldCBjdXJyZW50U3RyZWFrRW5kOiBNb21lbnQgPSBudWxsO1xyXG4gICAgICAgIGlmIChkYXRhc2V0KSB7XHJcbiAgICAgICAgICAgIGxldCBhcnJheURhdGFzZXQgPSBBcnJheS5mcm9tKGRhdGFzZXQpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSBhcnJheURhdGFzZXQubGVuZ3RoIC0gMTsgaW5kID49IDA7IGluZC0tKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnQgPSBhcnJheURhdGFzZXRbaW5kXTtcclxuICAgICAgICAgICAgICAgIGlmIChwb2ludC52YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFN0cmVhayA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyZWFrRW5kID0gcG9pbnQuZGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0cmVhaysrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY3VycmVudFN0cmVha0VuZCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogYWJzZW5zZVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY3VycmVudFN0cmVha0VuZDtcclxuICAgIH0sXHJcbiAgICBjdXJyZW50QnJlYWtzOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xyXG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcclxuICAgICAgICBsZXQgY3VycmVudEJyZWFrcyA9IDA7XHJcbiAgICAgICAgaWYgKGRhdGFzZXQpIHtcclxuICAgICAgICAgICAgbGV0IGFycmF5RGF0YXNldCA9IEFycmF5LmZyb20oZGF0YXNldCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IGFycmF5RGF0YXNldC5sZW5ndGggLSAxOyBpbmQgPj0gMDsgaW5kLS0pIHtcclxuICAgICAgICAgICAgICAgIGxldCBwb2ludCA9IGFycmF5RGF0YXNldFtpbmRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBvaW50LnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEJyZWFrcysrO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY3VycmVudEJyZWFrcztcclxuICAgIH0sXHJcbiAgICBjdXJyZW50QnJlYWtzU3RhcnQ6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxyXG4gICAgICAgIGxldCBjdXJyZW50QnJlYWtzID0gMDtcclxuICAgICAgICBsZXQgY3VycmVudEJyZWFrc1N0YXJ0OiBNb21lbnQgPSBudWxsO1xyXG4gICAgICAgIGlmIChkYXRhc2V0KSB7XHJcbiAgICAgICAgICAgIGxldCBhcnJheURhdGFzZXQgPSBBcnJheS5mcm9tKGRhdGFzZXQpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSBhcnJheURhdGFzZXQubGVuZ3RoIC0gMTsgaW5kID49IDA7IGluZC0tKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnQgPSBhcnJheURhdGFzZXRbaW5kXTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmQgPCBhcnJheURhdGFzZXQubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCcmVha3NTdGFydCA9IGFycmF5RGF0YXNldFtpbmQgKyAxXS5kYXRlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBvaW50LnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEJyZWFrcysrO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbnRCcmVha3NTdGFydCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogYWJzZW5zZVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY3VycmVudEJyZWFrc1N0YXJ0O1xyXG4gICAgfSxcclxuICAgIGN1cnJlbnRCcmVha3NFbmQ6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxyXG4gICAgICAgIGxldCBjdXJyZW50QnJlYWtzID0gMDtcclxuICAgICAgICBsZXQgY3VycmVudEJyZWFrc0VuZDogTW9tZW50ID0gbnVsbDtcclxuICAgICAgICBpZiAoZGF0YXNldCkge1xyXG4gICAgICAgICAgICBsZXQgYXJyYXlEYXRhc2V0ID0gQXJyYXkuZnJvbShkYXRhc2V0KTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gYXJyYXlEYXRhc2V0Lmxlbmd0aCAtIDE7IGluZCA+PSAwOyBpbmQtLSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBvaW50ID0gYXJyYXlEYXRhc2V0W2luZF07XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pbnQudmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJyZWFrcyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50QnJlYWtzRW5kID0gcG9pbnQuZGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEJyZWFrcysrO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbnRCcmVha3NFbmQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGFic2Vuc2VcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRCcmVha3NFbmQ7XHJcbiAgICB9LFxyXG4gICAgYXZlcmFnZTogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXHJcbiAgICAgICAgbGV0IGNvdW50Tm90TnVsbCA9IGRhdGFzZXQuZ2V0TGVuZ3RoTm90TnVsbCgpO1xyXG4gICAgICAgIGlmICghY2hlY2tEaXZpc29yKGNvdW50Tm90TnVsbCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGRpdmlkZSBieSB6ZXJvIGluIGV4cHJlc3Npb25cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHN1bSA9IGQzLnN1bShkYXRhc2V0LmdldFZhbHVlcygpKTtcclxuICAgICAgICByZXR1cm4gc3VtIC8gY291bnROb3ROdWxsO1xyXG4gICAgfSxcclxuICAgIG1lZGlhbjogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXHJcbiAgICAgICAgcmV0dXJuIGQzLm1lZGlhbihkYXRhc2V0LmdldFZhbHVlcygpKTtcclxuICAgIH0sXHJcbiAgICB2YXJpYW5jZTogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXHJcbiAgICAgICAgcmV0dXJuIGQzLnZhcmlhbmNlKGRhdGFzZXQuZ2V0VmFsdWVzKCkpO1xyXG4gICAgfSxcclxufTtcclxuXHJcbmNvbnN0IGZuTWFwVW5pcnlPcDogRm5NYXBVbmlyeU9wID0ge1xyXG4gICAgXCItXCI6IGZ1bmN0aW9uICh1KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB1ID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMSAqIHU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh1IGluc3RhbmNlb2YgRGF0YXNldCkge1xyXG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IHUuY2xvbmVUb1RtcERhdGFzZXQoKTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gLTEgKiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIkVycm9yOiB1bmtub3duIG9wZXJhdGlvbiBmb3IgJy0nXCI7XHJcbiAgICB9LFxyXG4gICAgXCIrXCI6IGZ1bmN0aW9uICh1KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB1ID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1O1xyXG4gICAgICAgIH0gZWxzZSBpZiAodSBpbnN0YW5jZW9mIERhdGFzZXQpIHtcclxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSB1LmNsb25lVG9UbXBEYXRhc2V0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJFcnJvcjogdW5rbm93biBvcGVyYXRpb24gZm9yICcrJ1wiO1xyXG4gICAgfSxcclxufTtcclxuXHJcbmNvbnN0IGZuTWFwQmluYXJ5T3A6IEZuTWFwQmluYXJ5T3AgPSB7XHJcbiAgICBcIitcIjogZnVuY3Rpb24gKGwsIHIpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGwgPT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHIgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIG51bWJlclxyXG4gICAgICAgICAgICByZXR1cm4gbCArIHI7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbCA9PT0gXCJudW1iZXJcIiAmJiByIGluc3RhbmNlb2YgRGF0YXNldCkge1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxyXG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IHIuY2xvbmVUb1RtcERhdGFzZXQoKTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbCArIHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcclxuICAgICAgICB9IGVsc2UgaWYgKGwgaW5zdGFuY2VvZiBEYXRhc2V0ICYmIHR5cGVvZiByID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XHJcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gbC5jbG9uZVRvVG1wRGF0YXNldCgpO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZSArIHI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAobCBpbnN0YW5jZW9mIERhdGFzZXQgJiYgciBpbnN0YW5jZW9mIERhdGFzZXQpIHtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcclxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSBsLmNsb25lVG9UbXBEYXRhc2V0KCk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IHZhbHVlICsgci5nZXRWYWx1ZXMoKVtpbmRleF07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJFcnJvcjogdW5rbm93biBvcGVyYXRpb24gZm9yICcrJ1wiO1xyXG4gICAgfSxcclxuICAgIFwiLVwiOiBmdW5jdGlvbiAobCwgcikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgbCA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gbnVtYmVyXHJcbiAgICAgICAgICAgIHJldHVybiBsIC0gcjtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHIgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XHJcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gci5jbG9uZVRvVG1wRGF0YXNldCgpO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBsIC0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAobCBpbnN0YW5jZW9mIERhdGFzZXQgJiYgdHlwZW9mIHIgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcclxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSBsLmNsb25lVG9UbXBEYXRhc2V0KCk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IHZhbHVlIC0gcjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAobCBpbnN0YW5jZW9mIERhdGFzZXQgJiYgciBpbnN0YW5jZW9mIERhdGFzZXQpIHtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcclxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSBsLmNsb25lVG9UbXBEYXRhc2V0KCk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IHZhbHVlIC0gci5nZXRWYWx1ZXMoKVtpbmRleF07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJFcnJvcjogdW5rbm93biBvcGVyYXRpb24gZm9yICctJ1wiO1xyXG4gICAgfSxcclxuICAgIFwiKlwiOiBmdW5jdGlvbiAobCwgcikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgbCA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gbnVtYmVyXHJcbiAgICAgICAgICAgIHJldHVybiBsICogcjtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHIgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XHJcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gci5jbG9uZVRvVG1wRGF0YXNldCgpO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBsICogdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAobCBpbnN0YW5jZW9mIERhdGFzZXQgJiYgdHlwZW9mIHIgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcclxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSBsLmNsb25lVG9UbXBEYXRhc2V0KCk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IHZhbHVlICogcjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiByIGluc3RhbmNlb2YgRGF0YXNldCkge1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxyXG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IGwuY2xvbmVUb1RtcERhdGFzZXQoKTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWUgKiByLmdldFZhbHVlcygpW2luZGV4XTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIkVycm9yOiB1bmtub3duIG9wZXJhdGlvbiBmb3IgJyonXCI7XHJcbiAgICB9LFxyXG4gICAgXCIvXCI6IGZ1bmN0aW9uIChsLCByKSB7XHJcbiAgICAgICAgaWYgKCFjaGVja0Rpdmlzb3IocikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGRpdmlkZSBieSB6ZXJvIGluIGV4cHJlc3Npb25cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHR5cGVvZiByID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiBudW1iZXJcclxuICAgICAgICAgICAgcmV0dXJuIGwgLyByO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGwgPT09IFwibnVtYmVyXCIgJiYgciBpbnN0YW5jZW9mIERhdGFzZXQpIHtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcclxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSByLmNsb25lVG9UbXBEYXRhc2V0KCk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IGwgLyB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxyXG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IGwuY2xvbmVUb1RtcERhdGFzZXQoKTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWUgLyByO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcclxuICAgICAgICB9IGVsc2UgaWYgKGwgaW5zdGFuY2VvZiBEYXRhc2V0ICYmIHIgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XHJcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gbC5jbG9uZVRvVG1wRGF0YXNldCgpO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZSAvIHIuZ2V0VmFsdWVzKClbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IHVua25vd24gb3BlcmF0aW9uIGZvciAnLydcIjtcclxuICAgIH0sXHJcbiAgICBcIiVcIjogZnVuY3Rpb24gKGwsIHIpIHtcclxuICAgICAgICBpZiAoIWNoZWNrRGl2aXNvcihyKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogZGl2aWRlIGJ5IHplcm8gaW4gZXhwcmVzc2lvblwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIGwgPT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHIgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIG51bWJlclxyXG4gICAgICAgICAgICByZXR1cm4gbCAlIHI7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbCA9PT0gXCJudW1iZXJcIiAmJiByIGluc3RhbmNlb2YgRGF0YXNldCkge1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxyXG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IHIuY2xvbmVUb1RtcERhdGFzZXQoKTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbCAlIHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcclxuICAgICAgICB9IGVsc2UgaWYgKGwgaW5zdGFuY2VvZiBEYXRhc2V0ICYmIHR5cGVvZiByID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XHJcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gbC5jbG9uZVRvVG1wRGF0YXNldCgpO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZSAlIHI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAobCBpbnN0YW5jZW9mIERhdGFzZXQgJiYgciBpbnN0YW5jZW9mIERhdGFzZXQpIHtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcclxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSBsLmNsb25lVG9UbXBEYXRhc2V0KCk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IHZhbHVlICUgci5nZXRWYWx1ZXMoKVtpbmRleF07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJFcnJvcjogdW5rbm93biBvcGVyYXRpb24gZm9yICclJ1wiO1xyXG4gICAgfSxcclxufTtcclxuXHJcbmNvbnN0IGZuTWFwRGF0YXNldFRvRGF0YXNldDogRm5NYXBEYXRhc2V0VG9EYXRhc2V0ID0ge1xyXG4gICAgLy8gbWluIHZhbHVlIG9mIGEgZGF0YXNldFxyXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbiAoZGF0YXNldCwgYXJncywgcmVuZGVySW5mbykge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwibm9ybWFsaXplXCIpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGRhdGFzZXQpO1xyXG4gICAgICAgIGxldCB5TWluID0gZGF0YXNldC5nZXRZTWluKCk7XHJcbiAgICAgICAgbGV0IHlNYXggPSBkYXRhc2V0LmdldFlNYXgoKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhgeU1pbi95TWF4OiAke3lNaW59LyR7eU1heH1gKTtcclxuICAgICAgICBpZiAoeU1pbiAhPT0gbnVsbCAmJiB5TWF4ICE9PSBudWxsICYmIHlNYXggPiB5TWluKSB7XHJcbiAgICAgICAgICAgIGxldCBub3JtYWxpemVkID0gZGF0YXNldC5jbG9uZVRvVG1wRGF0YXNldCgpO1xyXG4gICAgICAgICAgICBub3JtYWxpemVkLmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9ICh2YWx1ZSAtIHlNaW4pIC8gKHlNYXggLSB5TWluKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5vcm1hbGl6ZWQucmVjYWxjdWxhdGVNaW5NYXgoKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIkVycm9yOiBpbnZhbGlkIGRhdGEgcmFuZ2UgZm9yIGZ1bmN0aW9uICdub3JtYWxpemUnXCI7XHJcbiAgICB9LFxyXG4gICAgc2V0TWlzc2luZ1ZhbHVlczogZnVuY3Rpb24gKGRhdGFzZXQsIGFyZ3MsIHJlbmRlckluZm8pIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcInNldE1pc3NpbmdWYWx1ZXNcIik7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coZGF0YXNldCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coYXJncyk7XHJcbiAgICAgICAgaWYgKGFyZ3MgJiYgYXJncy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBtaXNzaW5nVmFsdWUgPSBhcmdzWzBdO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhtaXNzaW5nVmFsdWUpO1xyXG4gICAgICAgICAgICBsZXQgbmV3RGF0YXNldCA9IGRhdGFzZXQuY2xvbmVUb1RtcERhdGFzZXQoKTtcclxuICAgICAgICAgICAgaWYgKE51bWJlci5pc051bWJlcihtaXNzaW5nVmFsdWUpICYmICFOdW1iZXIuaXNOYU4obWlzc2luZ1ZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgbmV3RGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG1pc3NpbmdWYWx1ZSBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBuZXdEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3RGF0YXNldDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogaW52YWxpZCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uICdzZXRNaXNzaW5nVmFsdWVzJ1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJFcnJvcjogaW52YWxpZCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uICdzZXRNaXNzaW5nVmFsdWVzXCI7XHJcbiAgICB9LFxyXG59O1xyXG5cclxuZnVuY3Rpb24gZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkOiBudW1iZXIsIHJlbmRlckluZm86IFJlbmRlckluZm8pIHtcclxuICAgIHJldHVybiByZW5kZXJJbmZvLmRhdGFzZXRzLmdldERhdGFzZXRCeUlkKGRhdGFzZXRJZCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGV2YWx1YXRlQXJyYXkoYXJyOiBhbnksIHJlbmRlckluZm86IFJlbmRlckluZm8pIHtcclxuICAgIHJldHVybiBhcnIubWFwKGZ1bmN0aW9uIChleHByOiBqc2VwLkV4cHJlc3Npb24pIHtcclxuICAgICAgICByZXR1cm4gZXZhbHVhdGUoZXhwciwgcmVuZGVySW5mbyk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZXZhbHVhdGUoZXhwcjoganNlcC5FeHByZXNzaW9uLCByZW5kZXJJbmZvOiBSZW5kZXJJbmZvKTogYW55IHtcclxuICAgIC8vIGNvbnNvbGUubG9nKGV4cHIpO1xyXG5cclxuICAgIHN3aXRjaCAoZXhwci50eXBlKSB7XHJcbiAgICAgICAgY2FzZSBcIkxpdGVyYWxcIjpcclxuICAgICAgICAgICAgbGV0IGxpdGVyYWxFeHByID0gZXhwciBhcyBqc2VwLkxpdGVyYWw7XHJcbiAgICAgICAgICAgIHJldHVybiBsaXRlcmFsRXhwci52YWx1ZTsgLy8gc3RyaW5nLCBudW1iZXIsIGJvb2xlYW5cclxuXHJcbiAgICAgICAgY2FzZSBcIklkZW50aWZpZXJcIjpcclxuICAgICAgICAgICAgbGV0IGlkZW50aWZpZXJFeHByID0gZXhwciBhcyBqc2VwLklkZW50aWZpZXI7XHJcbiAgICAgICAgICAgIGxldCBpZGVudGlmaWVyTmFtZSA9IGlkZW50aWZpZXJFeHByLm5hbWU7XHJcbiAgICAgICAgICAgIGlmIChpZGVudGlmaWVyTmFtZSBpbiBmbk1hcERhdGFzZXRUb1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYEVycm9yOiBkZXByZWNhdGVkIHRlbXBsYXRlIHZhcmlhYmxlICcke2lkZW50aWZpZXJOYW1lfScsIHVzZSAnJHtpZGVudGlmaWVyTmFtZX0oKScgaW5zdGVhZGA7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpZmllck5hbWUgaW4gZm5NYXBEYXRhc2V0VG9EYXRhc2V0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYEVycm9yOiBkZXByZWNhdGVkIHRlbXBsYXRlIHZhcmlhYmxlICcke2lkZW50aWZpZXJOYW1lfScsIHVzZSAnJHtpZGVudGlmaWVyTmFtZX0oKScgaW5zdGVhZGA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGBFcnJvcjogdW5rbm93biBmdW5jdGlvbiBuYW1lICcke2lkZW50aWZpZXJOYW1lfSdgO1xyXG5cclxuICAgICAgICBjYXNlIFwiVW5hcnlFeHByZXNzaW9uXCI6XHJcbiAgICAgICAgICAgIGxldCB1bmlyeUV4cHIgPSBleHByIGFzIGpzZXAuVW5hcnlFeHByZXNzaW9uO1xyXG4gICAgICAgICAgICBsZXQgcmV0VW5pcnlBcmcgPSBldmFsdWF0ZSh1bmlyeUV4cHIuYXJndW1lbnQsIHJlbmRlckluZm8pO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJldFVuaXJ5QXJnID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0VW5pcnlBcmc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZuTWFwVW5pcnlPcFt1bmlyeUV4cHIub3BlcmF0b3JdKHJldFVuaXJ5QXJnKTtcclxuXHJcbiAgICAgICAgY2FzZSBcIkJpbmFyeUV4cHJlc3Npb25cIjpcclxuICAgICAgICAgICAgbGV0IGJpbmFyeUV4cHIgPSBleHByIGFzIGpzZXAuQmluYXJ5RXhwcmVzc2lvbjtcclxuICAgICAgICAgICAgbGV0IGxlZnRWYWx1ZSA9IGV2YWx1YXRlKGJpbmFyeUV4cHIubGVmdCwgcmVuZGVySW5mbyk7XHJcbiAgICAgICAgICAgIGxldCByaWdodFZhbHVlID0gZXZhbHVhdGUoYmluYXJ5RXhwci5yaWdodCwgcmVuZGVySW5mbyk7XHJcbiAgICAgICAgICAgIGxldCByZXRDaGVjayA9IGNoZWNrQmluYXJ5T3BlcmFudFR5cGUobGVmdFZhbHVlLCByaWdodFZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXRDaGVjayA9PT0gXCJzdHJpbmdcIiAmJiByZXRDaGVjay5zdGFydHNXaXRoKFwiRXJyb3I6XCIpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0Q2hlY2s7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZuTWFwQmluYXJ5T3BbYmluYXJ5RXhwci5vcGVyYXRvcl0obGVmdFZhbHVlLCByaWdodFZhbHVlKTtcclxuXHJcbiAgICAgICAgY2FzZSBcIkNhbGxFeHByZXNzaW9uXCI6XHJcbiAgICAgICAgICAgIGxldCBjYWxsRXhwciA9IGV4cHIgYXMganNlcC5DYWxsRXhwcmVzc2lvbjtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYWxsZWVJZGVudGlmaWVyID0gY2FsbEV4cHIuY2FsbGVlIGFzIGpzZXAuSWRlbnRpZmllcjtcclxuICAgICAgICAgICAgbGV0IGZuTmFtZSA9IGNhbGxlZUlkZW50aWZpZXIubmFtZTtcclxuICAgICAgICAgICAgbGV0IGFyZ3MgPSBjYWxsRXhwci5hcmd1bWVudHM7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGZuTmFtZSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGFyZ3MpO1xyXG4gICAgICAgICAgICBsZXQgZXZhbHVhdGVkQXJncyA9IGV2YWx1YXRlQXJyYXkoYXJncywgcmVuZGVySW5mbyk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXZhbHVhdGVkQXJncyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGV2YWx1YXRlZEFyZ3M7XHJcblxyXG4gICAgICAgICAgICAvLyBmdW5jdGlvbiBkYXRhc2V0IGFjY2VwdCBvbmx5IG9uZSBhcmcgaW4gbnVtYmVyXHJcbiAgICAgICAgICAgIGlmIChmbk5hbWUgPT09IFwiZGF0YXNldFwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXZhbHVhdGVkQXJncy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYXJnID0gZXZhbHVhdGVkQXJnc1swXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFyZztcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZyAhPT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogZnVuY3Rpb24gJ2RhdGFzZXQnIG9ubHkgYWNjZXB0cyBpZCBpbiBudW1iZXJcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzZXQgPSBnZXREYXRhc2V0QnlJZChhcmcsIHJlbmRlckluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YXNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEVycm9yOiBubyBkYXRhc2V0IGZvdW5kIGZvciBpZCAnJHthcmd9J2A7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhc2V0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGZuRGF0YXNldCBhY2NlcHQgb25seSBvbmUgYXJnIGluIG51bWJlciBvciBEYXRhc2V0XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGZuTmFtZSBpbiBmbk1hcERhdGFzZXRUb1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXZhbHVhdGVkQXJncy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBVc2UgZmlyc3Qgbm9uLVggZGF0YXNldFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhc2V0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBkcyBvZiByZW5kZXJJbmZvLmRhdGFzZXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGF0YXNldCAmJiAhZHMuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldCA9IGRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgYnJlYWtzIGhlcmUsIHRoZSBpbmRleCBvZiBEYXRhc2V0cyBub3QgcmVzZXQ/Pz9cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGFzZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBObyBhdmFpbGFibGUgZGF0YXNldCBmb3VuZCBmb3IgZnVuY3Rpb24gJHtmbk5hbWV9YDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuTWFwRGF0YXNldFRvVmFsdWVbZm5OYW1lXShkYXRhc2V0LCByZW5kZXJJbmZvKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChldmFsdWF0ZWRBcmdzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhcmcgPSBldmFsdWF0ZWRBcmdzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbk1hcERhdGFzZXRUb1ZhbHVlW2ZuTmFtZV0oYXJnLCByZW5kZXJJbmZvKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEVycm9yOiBmdW5jdGlvbiAnJHtmbk5hbWV9JyBvbmx5IGFjY2VwdHMgRGF0YXNldGA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGBFcnJvcjogVG9vIG1hbnkgYXJndW1lbnRzIGZvciBmdW5jdGlvbiAke2ZuTmFtZX1gO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZuTmFtZSBpbiBmbk1hcERhdGFzZXRUb0RhdGFzZXQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChldmFsdWF0ZWRBcmdzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZXZhbHVhdGVkQXJnc1swXSA9PT0gXCJzdHJpbmdcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2YWx1YXRlZEFyZ3NbMF07IC8vIGVycm9yIG1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZhbHVhdGVkQXJnc1swXSBpbnN0YW5jZW9mIERhdGFzZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzZXQgPSBldmFsdWF0ZWRBcmdzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5NYXBEYXRhc2V0VG9EYXRhc2V0W2ZuTmFtZV0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEVycm9yOiBmdW5jdGlvbiAke2ZuTmFtZX0gb25seSBhY2NlcHQgRGF0YXNldGA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmFsdWF0ZWRBcmdzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGV2YWx1YXRlZEFyZ3NbMF0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2YWx1YXRlZEFyZ3NbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmFsdWF0ZWRBcmdzWzBdIGluc3RhbmNlb2YgRGF0YXNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YXNldCA9IGV2YWx1YXRlZEFyZ3NbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbk1hcERhdGFzZXRUb0RhdGFzZXRbZm5OYW1lXShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsdWF0ZWRBcmdzLmZpbHRlcihmdW5jdGlvbiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFueSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogbnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycjogYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggPiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBFcnJvcjogZnVuY3Rpb24gJHtmbk5hbWV9IG9ubHkgYWNjZXB0IERhdGFzZXRgO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBgRXJyb3I6IFRvbyBtYW55IGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gJHtmbk5hbWV9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYEVycm9yOiB1bmtub3duIGZ1bmN0aW9uIG5hbWUgJyR7Zm5OYW1lfSdgO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFwiRXJyb3I6IHVua25vd24gZXhwcmVzc2lvblwiO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgRXhwclJlc29sdmVkIHtcclxuICAgIHNvdXJjZTogc3RyaW5nO1xyXG4gICAgdmFsdWU6IG51bWJlciB8IE1vbWVudDtcclxuICAgIGZvcm1hdDogc3RyaW5nO1xyXG59XHJcblxyXG4vLyBHZXQgYSBsaXN0IG9mIHJlc29sdmVkIHJlc3VsdCBjb250YWluaW5nIHNvdXJjZSwgdmFsdWUsIGFuZCBmb3JtYXRcclxuZnVuY3Rpb24gcmVzb2x2ZShcclxuICAgIHRleHQ6IHN0cmluZyxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cclxuKTogQXJyYXk8RXhwclJlc29sdmVkPiB8IHN0cmluZyB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0ZXh0KTtcclxuXHJcbiAgICBsZXQgZXhwck1hcDogQXJyYXk8RXhwclJlc29sdmVkPiA9IFtdO1xyXG5cclxuICAgIC8vIHt7KD88ZXhwcj5bXFx3K1xcLSpcXC8wLTlcXHMoKVxcW1xcXSUuXSspKDo6KD88Zm9ybWF0PltcXHcrXFwtKlxcLzAtOVxccygpXFxbXFxdJS46XSspKT99fVxyXG4gICAgbGV0IHN0ckV4cHJSZWdleCA9XHJcbiAgICAgICAgXCJ7eyg/PGV4cHI+W1xcXFx3K1xcXFwtKlxcXFwvMC05XFxcXHMoKVxcXFxbXFxcXF0lLixdKykoOjooPzxmb3JtYXQ+W1xcXFx3K1xcXFwtKlxcXFwvMC05XFxcXHMoKVxcXFxbXFxcXF0lLjpdKykpP319XCI7XHJcbiAgICBsZXQgZXhwclJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJFeHByUmVnZXgsIFwiZ21cIik7XHJcbiAgICBsZXQgbWF0Y2g7XHJcbiAgICB3aGlsZSAoKG1hdGNoID0gZXhwclJlZ2V4LmV4ZWModGV4dCkpKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobWF0Y2gpO1xyXG4gICAgICAgIGxldCBmdWxsbWF0Y2ggPSBtYXRjaFswXTtcclxuICAgICAgICBpZiAoZXhwck1hcC5zb21lKChlKSA9PiBlLnNvdXJjZSA9PT0gZnVsbG1hdGNoKSkgY29udGludWU7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgbWF0Y2guZ3JvdXBzICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWF0Y2guZ3JvdXBzLmV4cHIgIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBleHByID0gbWF0Y2guZ3JvdXBzLmV4cHI7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGFzdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFzdCA9IGpzZXAoZXhwcik7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJFcnJvcjpcIiArIGVyci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFhc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogZmFpbGVkIHRvIHBhcnNlIGV4cHJlc3Npb25cIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGFzdCk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBldmFsdWF0ZShhc3QsIHJlbmRlckluZm8pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsgLy8gZXJyb3IgbWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubW9tZW50LmlzTW9tZW50KHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvcm1hdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXRjaC5ncm91cHMuZm9ybWF0ICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IG1hdGNoLmdyb3Vwcy5mb3JtYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBleHByTWFwLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGZ1bGxtYXRjaCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZXhwck1hcDtcclxufVxyXG5cclxuLy8gUmVzb2x2ZSB0aGUgdGVtcGxhdGUgZXhwcmVzc2lvbiBpbiBzdHJpbmcgYW5kIHJldHVybiBhIHJlc29sdmVkIHN0cmluZ1xyXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVRlbXBsYXRlKFxyXG4gICAgdGVtcGxhdGU6IHN0cmluZyxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cclxuKTogc3RyaW5nIHtcclxuICAgIGxldCByZXRSZXNvbHZlID0gcmVzb2x2ZSh0ZW1wbGF0ZSwgcmVuZGVySW5mbyk7XHJcbiAgICBpZiAodHlwZW9mIHJldFJlc29sdmUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gcmV0UmVzb2x2ZTsgLy8gZXJyb3IgbWVzc2FnZVxyXG4gICAgfVxyXG4gICAgbGV0IGV4cHJNYXAgPSByZXRSZXNvbHZlIGFzIEFycmF5PEV4cHJSZXNvbHZlZD47XHJcblxyXG4gICAgZm9yIChsZXQgZXhwclJlc29sdmVkIG9mIGV4cHJNYXApIHtcclxuICAgICAgICBsZXQgc291cmNlID0gZXhwclJlc29sdmVkLnNvdXJjZTtcclxuICAgICAgICBsZXQgdmFsdWUgPSBleHByUmVzb2x2ZWQudmFsdWU7XHJcbiAgICAgICAgbGV0IGZvcm1hdCA9IGV4cHJSZXNvbHZlZC5mb3JtYXQ7XHJcbiAgICAgICAgbGV0IHN0clZhbHVlID0gXCJcIjtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgIGlmIChmb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgIHN0clZhbHVlID0gc3ByaW50ZihcIiVcIiArIGZvcm1hdCwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3RyVmFsdWUgPSB2YWx1ZS50b0ZpeGVkKDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cubW9tZW50LmlzTW9tZW50KHZhbHVlKSkge1xyXG4gICAgICAgICAgICBpZiAoZm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICBzdHJWYWx1ZSA9IGhlbHBlci5kYXRlVG9TdHIodmFsdWUsIGZvcm1hdCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzdHJWYWx1ZSA9IGhlbHBlci5kYXRlVG9TdHIodmFsdWUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdHJWYWx1ZSkge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhleHByUmVzb2x2ZWQpO1xyXG4gICAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnNwbGl0KHNvdXJjZSkuam9pbihzdHJWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0ZW1wbGF0ZTtcclxufVxyXG5cclxuLy8gUmVzb2x2ZSB0aGUgdGVtcGxhdGUgZXhwcmVzc2lvbiBpbiBzdHJpbmcgYW5kIHJldHVybiBhIG51bWJlciBvciBkYXRlXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVmFsdWUoXHJcbiAgICB0ZXh0OiBzdHJpbmcsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXHJcbik6IG51bWJlciB8IE1vbWVudCB8IHN0cmluZyB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0ZW1wbGF0ZSk7XHJcbiAgICB0ZXh0ID0gdGV4dC50cmltKCk7XHJcblxyXG4gICAgLy8gaW5wdXQgaXMgcHVyZSBudW1iZXJcclxuICAgIGlmICgvXihbXFwtXT9bMC05XStbXFwuXVswLTldK3xbXFwtXT9bMC05XSspJC8udGVzdCh0ZXh0KSkge1xyXG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRlbXBsYXRlXHJcbiAgICBsZXQgcmV0UmVzb2x2ZSA9IHJlc29sdmUodGV4dCwgcmVuZGVySW5mbyk7XHJcbiAgICBpZiAodHlwZW9mIHJldFJlc29sdmUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gcmV0UmVzb2x2ZTsgLy8gZXJyb3IgbWVzc2FnZVxyXG4gICAgfVxyXG4gICAgbGV0IGV4cHJNYXAgPSByZXRSZXNvbHZlIGFzIEFycmF5PEV4cHJSZXNvbHZlZD47XHJcblxyXG4gICAgaWYgKGV4cHJNYXAubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJldHVybiBleHByTWFwWzBdLnZhbHVlOyAvLyBvbmx5IGZpcnN0IHZhbHVlIHdpbGwgYmUgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFwiRXJyb3I6IGZhaWxlZCB0byByZXNvbHZlIHZhbHVlc1wiO1xyXG59XHJcbiIsImltcG9ydCBxdWFudGlsZSBmcm9tIFwiLi9xdWFudGlsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgcmV0dXJuIHF1YW50aWxlKHZhbHVlcywgMC41LCB2YWx1ZW9mKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhcmlhbmNlKHZhbHVlcywgdmFsdWVvZikge1xuICBsZXQgY291bnQgPSAwO1xuICBsZXQgZGVsdGE7XG4gIGxldCBtZWFuID0gMDtcbiAgbGV0IHN1bSA9IDA7XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmICh2YWx1ZSA9ICt2YWx1ZSkgPj0gdmFsdWUpIHtcbiAgICAgICAgZGVsdGEgPSB2YWx1ZSAtIG1lYW47XG4gICAgICAgIG1lYW4gKz0gZGVsdGEgLyArK2NvdW50O1xuICAgICAgICBzdW0gKz0gZGVsdGEgKiAodmFsdWUgLSBtZWFuKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkgIT0gbnVsbCAmJiAodmFsdWUgPSArdmFsdWUpID49IHZhbHVlKSB7XG4gICAgICAgIGRlbHRhID0gdmFsdWUgLSBtZWFuO1xuICAgICAgICBtZWFuICs9IGRlbHRhIC8gKytjb3VudDtcbiAgICAgICAgc3VtICs9IGRlbHRhICogKHZhbHVlIC0gbWVhbik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChjb3VudCA+IDEpIHJldHVybiBzdW0gLyAoY291bnQgLSAxKTtcbn1cbiIsImltcG9ydCB7IE1vbWVudCB9IGZyb20gXCJtb21lbnRcIjtcclxuaW1wb3J0IHtcclxuICAgIERhdGFzZXRzLFxyXG4gICAgRGF0YVBvaW50LFxyXG4gICAgUmVuZGVySW5mbyxcclxuICAgIFBpZUluZm8sXHJcbiAgICBNb250aEluZm8sXHJcbiAgICBEYXRhc2V0LFxyXG4gICAgU2l6ZSxcclxuICAgIFRyYW5zZm9ybSxcclxuICAgIENoYXJ0RWxlbWVudHMsXHJcbiAgICBHcmFwaFR5cGUsXHJcbiAgICBWYWx1ZVR5cGUsXHJcbn0gZnJvbSBcIi4vZGF0YVwiO1xyXG5pbXBvcnQgKiBhcyBoZWxwZXIgZnJvbSBcIi4vaGVscGVyXCI7XHJcbmltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xyXG5pbXBvcnQgKiBhcyBleHByIGZyb20gXCIuL2V4cHJcIjtcclxuaW1wb3J0IHsgcGllIH0gZnJvbSBcImQzXCI7XHJcblxyXG5mdW5jdGlvbiBzZXRDaGFydFNjYWxlKFxyXG4gICAgX2NhbnZhczogSFRNTEVsZW1lbnQsXHJcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xyXG4pIHtcclxuICAgIGxldCBjYW52YXMgPSBkMy5zZWxlY3QoX2NhbnZhcyk7XHJcbiAgICBsZXQgc3ZnID0gY2hhcnRFbGVtZW50cy5zdmc7XHJcbiAgICBsZXQgc3ZnV2lkdGggPSBwYXJzZUZsb2F0KHN2Zy5hdHRyKFwid2lkdGhcIikpO1xyXG4gICAgbGV0IHN2Z0hlaWdodCA9IHBhcnNlRmxvYXQoc3ZnLmF0dHIoXCJoZWlnaHRcIikpO1xyXG4gICAgc3ZnLmF0dHIoXCJ3aWR0aFwiLCBudWxsKVxyXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG51bGwpXHJcbiAgICAgICAgLmF0dHIoXCJ2aWV3Qm94XCIsIGAwIDAgJHtzdmdXaWR0aH0gJHtzdmdIZWlnaHR9YClcclxuICAgICAgICAuYXR0cihcInByZXNlcnZlQXNwZWN0UmF0aW9cIiwgXCJ4TWlkWU1pZCBtZWV0XCIpO1xyXG5cclxuICAgIGlmIChyZW5kZXJJbmZvLmZpdFBhbmVsV2lkdGgpIHtcclxuICAgICAgICBjYW52YXMuc3R5bGUoXCJ3aWR0aFwiLCBcIjEwMCVcIik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNhbnZhcy5zdHlsZShcclxuICAgICAgICAgICAgXCJ3aWR0aFwiLFxyXG4gICAgICAgICAgICAoc3ZnV2lkdGggKiByZW5kZXJJbmZvLmZpeGVkU2NhbGUpLnRvU3RyaW5nKCkgKyBcInB4XCJcclxuICAgICAgICApO1xyXG4gICAgICAgIGNhbnZhcy5zdHlsZShcclxuICAgICAgICAgICAgXCJoZWlnaHRcIixcclxuICAgICAgICAgICAgKHN2Z0hlaWdodCAqIHJlbmRlckluZm8uZml4ZWRTY2FsZSkudG9TdHJpbmcoKSArIFwicHhcIlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUFyZWFzKFxyXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcclxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgcGllSW5mbzogUGllSW5mb1xyXG4pOiBDaGFydEVsZW1lbnRzIHtcclxuICAgIC8vIGNsZWFuIGFyZWFzXHJcbiAgICBkMy5zZWxlY3QoY2FudmFzKS5zZWxlY3QoXCIjc3ZnXCIpLnJlbW92ZSgpO1xyXG4gICAgdmFyIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY2hhcnRFbGVtZW50cyk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgLy8gZDMuc2VsZWN0KGNoYXJ0RWxlbWVudHNbcHJvcHNbaV1dKS5yZW1vdmUoKTtcclxuICAgICAgICBkZWxldGUgY2hhcnRFbGVtZW50c1twcm9wc1tpXV07XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhjaGFydEVsZW1lbnRzKTtcclxuXHJcbiAgICAvLyB3aG9sZSBhcmVhIGZvciBwbG90dGluZywgaW5jbHVkZXMgbWFyZ2luc1xyXG4gICAgbGV0IHN2ZyA9IGQzXHJcbiAgICAgICAgLnNlbGVjdChjYW52YXMpXHJcbiAgICAgICAgLmFwcGVuZChcInN2Z1wiKVxyXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJzdmdcIilcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJ3aWR0aFwiLFxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5sZWZ0ICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnJpZ2h0XHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICBcImhlaWdodFwiLFxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4udG9wICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmJvdHRvbVxyXG4gICAgICAgICk7XHJcbiAgICBjaGFydEVsZW1lbnRzW1wic3ZnXCJdID0gc3ZnO1xyXG5cclxuICAgIC8vIGdyYXBoQXJlYSwgaW5jbHVkZXMgY2hhcnRBcmVhLCB0aXRsZSwgbGVnZW5kXHJcbiAgICBsZXQgZ3JhcGhBcmVhID0gc3ZnXHJcbiAgICAgICAgLmFwcGVuZChcImdcIilcclxuICAgICAgICAuYXR0cihcImlkXCIsIFwiZ3JhcGhBcmVhXCIpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXHJcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmxlZnQgK1xyXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4udG9wICtcclxuICAgICAgICAgICAgICAgIFwiKVwiXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggKyByZW5kZXJJbmZvLm1hcmdpbi5yaWdodClcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJoZWlnaHRcIixcclxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICsgcmVuZGVySW5mby5tYXJnaW4uYm90dG9tXHJcbiAgICAgICAgKTtcclxuICAgIGNoYXJ0RWxlbWVudHNbXCJncmFwaEFyZWFcIl0gPSBncmFwaEFyZWE7XHJcblxyXG4gICAgLy8gZGF0YUFyZWEsIHVuZGVyIGdyYXBoQXJlYSwgaW5jbHVkZXMgcG9pbnRzLCBsaW5lcywgeEF4aXMsIHlBeGlzXHJcbiAgICBsZXQgZGF0YUFyZWEgPSBncmFwaEFyZWFcclxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJkYXRhQXJlYVwiKVxyXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGgpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0KTtcclxuICAgIGNoYXJ0RWxlbWVudHNbXCJkYXRhQXJlYVwiXSA9IGRhdGFBcmVhO1xyXG5cclxuICAgIHJldHVybiBjaGFydEVsZW1lbnRzO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW5kZXJUaXRsZShcclxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXHJcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIHBpZUluZm86IFBpZUluZm9cclxuKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlclRpdGxlXCIpO1xyXG4gICAgLy8gdW5kZXIgZ3JhcGhBcmVhXHJcblxyXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFwaWVJbmZvKSByZXR1cm47XHJcblxyXG4gICAgaWYgKCFwaWVJbmZvLnRpdGxlKSByZXR1cm47XHJcbiAgICBsZXQgdGl0bGVTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShwaWVJbmZvLnRpdGxlLCBcInRyYWNrZXItdGl0bGVcIik7XHJcblxyXG4gICAgLy8gQXBwZW5kIHRpdGxlXHJcbiAgICBsZXQgdGl0bGUgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYVxyXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgLnRleHQocGllSW5mby50aXRsZSkgLy8gcGl2b3QgYXQgY2VudGVyXHJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcInRpdGxlXCIpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXHJcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMi4wICtcclxuICAgICAgICAgICAgICAgIFwiLFwiICtcclxuICAgICAgICAgICAgICAgIHRpdGxlU2l6ZS5oZWlnaHQgLyAyLjAgK1xyXG4gICAgICAgICAgICAgICAgXCIpXCJcclxuICAgICAgICApXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGl0bGVTaXplLmhlaWdodCkgLy8gZm9yIGxhdGVyIHVzZVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRpdGxlXCIpO1xyXG4gICAgY2hhcnRFbGVtZW50c1tcInRpdGxlXCJdID0gdGl0bGU7XHJcblxyXG4gICAgLy8gRXhwYW5kIHBhcmVudCBhcmVhc1xyXG4gICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5zdmcsIDAsIHRpdGxlU2l6ZS5oZWlnaHQpO1xyXG4gICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsIDAsIHRpdGxlU2l6ZS5oZWlnaHQpO1xyXG5cclxuICAgIC8vIE1vdmUgc2libGluZyBhcmVhc1xyXG4gICAgaGVscGVyLm1vdmVBcmVhKGNoYXJ0RWxlbWVudHMuZGF0YUFyZWEsIDAsIHRpdGxlU2l6ZS5oZWlnaHQpO1xyXG5cclxuICAgIHJldHVybjtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVuZGVyTGVnZW5kKFxyXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgcGllSW5mbzogUGllSW5mb1xyXG4pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyTGVnZW5kXCIpO1xyXG4gICAgLy8gY29uc29sZS5sb2cocGlJbmZvLmxlZ2VuZFBvc2l0aW9uKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHBpSW5mby5sZWdlbmRPcmllbnRhdGlvbik7XHJcblxyXG4gICAgLy8gR2V0IGNoYXJ0IGVsZW1lbnRzXHJcbiAgICBsZXQgc3ZnID0gY2hhcnRFbGVtZW50cy5zdmc7XHJcbiAgICBsZXQgZ3JhcGhBcmVhID0gY2hhcnRFbGVtZW50cy5ncmFwaEFyZWE7XHJcbiAgICBsZXQgZGF0YUFyZWEgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhO1xyXG4gICAgbGV0IHRpdGxlID0gY2hhcnRFbGVtZW50cy50aXRsZTtcclxuXHJcbiAgICAvLyBHZXQgZWxlbWVudCB3aWR0aCBhbmQgaGVpZ2h0XHJcbiAgICBsZXQgdGl0bGVIZWlnaHQgPSAwLjA7XHJcbiAgICBpZiAodGl0bGUpIHtcclxuICAgICAgICB0aXRsZUhlaWdodCA9IHBhcnNlRmxvYXQodGl0bGUuYXR0cihcImhlaWdodFwiKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gR2V0IG5hbWVzIGFuZCB0aGVpciBkaW1lbnNpb25cclxuICAgIGxldCBuYW1lcyA9IHBpZUluZm8uZGF0YU5hbWU7XHJcbiAgICBsZXQgbmFtZVNpemVzID0gbmFtZXMubWFwKGZ1bmN0aW9uIChuKSB7XHJcbiAgICAgICAgcmV0dXJuIGhlbHBlci5tZWFzdXJlVGV4dFNpemUobiwgXCJ0cmFja2VyLWxlZ2VuZC1sYWJlbFwiKTtcclxuICAgIH0pO1xyXG4gICAgbGV0IGluZE1heE5hbWUgPSAwO1xyXG4gICAgbGV0IG1heE5hbWVXaWR0aCA9IDAuMDtcclxuICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IG5hbWVzLmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICBpZiAobmFtZVNpemVzW2luZF0ud2lkdGggPiBtYXhOYW1lV2lkdGgpIHtcclxuICAgICAgICAgICAgbWF4TmFtZVdpZHRoID0gbmFtZVNpemVzW2luZF0ud2lkdGg7XHJcbiAgICAgICAgICAgIGluZE1heE5hbWUgPSBpbmQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IG1heE5hbWUgPSBuYW1lc1tpbmRNYXhOYW1lXTtcclxuICAgIGxldCBjaGFyYWN0ZXJXaWR0aCA9IG1heE5hbWVXaWR0aCAvIG1heE5hbWUubGVuZ3RoO1xyXG4gICAgbGV0IG5hbWVIZWlnaHQgPSBuYW1lU2l6ZXNbaW5kTWF4TmFtZV0uaGVpZ2h0O1xyXG4gICAgbGV0IG51bU5hbWVzID0gbmFtZXMubGVuZ3RoO1xyXG5cclxuICAgIGxldCB4U3BhY2luZyA9IDIgKiBjaGFyYWN0ZXJXaWR0aDtcclxuICAgIGxldCB5U3BhY2luZyA9IG5hbWVIZWlnaHQ7XHJcbiAgICBsZXQgbWFya2VyV2lkdGggPSAyICogY2hhcmFjdGVyV2lkdGg7XHJcblxyXG4gICAgLy8gR2V0IGxlZ2VuZCB3aWR0aCBhbmQgaGVpZ2h0XHJcbiAgICBsZXQgbGVnZW5kV2lkdGggPSAwO1xyXG4gICAgbGV0IGxlZ2VuZEhlaWdodCA9IDA7XHJcbiAgICBpZiAocGllSW5mby5sZWdlbmRPcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XHJcbiAgICAgICAgbGVnZW5kV2lkdGggPSB4U3BhY2luZyAqIDMgKyBtYXJrZXJXaWR0aCArIG1heE5hbWVXaWR0aDtcclxuICAgICAgICBsZWdlbmRIZWlnaHQgPSAobnVtTmFtZXMgKyAxKSAqIHlTcGFjaW5nO1xyXG4gICAgfSBlbHNlIGlmIChwaWVJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xyXG4gICAgICAgIGxlZ2VuZFdpZHRoID1cclxuICAgICAgICAgICAgKDIgKiB4U3BhY2luZyArIG1hcmtlcldpZHRoKSAqIG51bU5hbWVzICtcclxuICAgICAgICAgICAgeFNwYWNpbmcgK1xyXG4gICAgICAgICAgICBkMy5zdW0obmFtZVNpemVzLCBmdW5jdGlvbiAocywgaSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHMud2lkdGg7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIGxlZ2VuZEhlaWdodCA9IHlTcGFjaW5nICsgbmFtZUhlaWdodDtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKFxyXG4gICAgLy8gICAgIGBtYXhOYW1lOiAke21heE5hbWV9LCBjaGFyYWN0ZXJXaWR0aDogJHtjaGFyYWN0ZXJXaWR0aH0sIG1heE5hbWVXaWR0aDogJHttYXhOYW1lV2lkdGh9YFxyXG4gICAgLy8gKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGB4U3BhY2luZzoke3hTcGFjaW5nfSwgbnVtTmFtZXM6ICR7bnVtTmFtZXN9LCBtYXJrZXJXaWR0aDogJHttYXJrZXJXaWR0aH1gKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGBsZWdlbmRXaWR0aDogJHtsZWdlbmRXaWR0aH0sIGxlZ2VuZEhlaWdodDogJHtsZWdlbmRIZWlnaHR9YCk7XHJcblxyXG4gICAgLy8gQ2FsY3VhbHRlIGxlbmdlbmRYIGFuZCBsZWdlbmRZXHJcbiAgICBsZXQgbGVnZW5kWCA9IDAuMDsgLy8gcmVsYXRpdmUgdG8gZ3JhcGhBcmVhXHJcbiAgICBsZXQgbGVnZW5kWSA9IDAuMDtcclxuICAgIGlmIChwaWVJbmZvLmxlZ2VuZFBvc2l0aW9uID09PSBcInRvcFwiKSB7XHJcbiAgICAgICAgLy8gYmVsb3cgdGl0bGVcclxuICAgICAgICBsZWdlbmRYID0gcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggLyAyLjAgLSBsZWdlbmRXaWR0aCAvIDIuMDtcclxuICAgICAgICBsZWdlbmRZID0gdGl0bGVIZWlnaHQ7XHJcbiAgICAgICAgLy8gRXhwYW5kIHN2Z1xyXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKHN2ZywgMCwgbGVnZW5kSGVpZ2h0ICsgeVNwYWNpbmcpO1xyXG4gICAgICAgIC8vIE1vdmUgZGF0YUFyZWEgZG93blxyXG4gICAgICAgIGhlbHBlci5tb3ZlQXJlYShkYXRhQXJlYSwgMCwgbGVnZW5kSGVpZ2h0ICsgeVNwYWNpbmcpO1xyXG4gICAgfSBlbHNlIGlmIChwaWVJbmZvLmxlZ2VuZFBvc2l0aW9uID09PSBcImJvdHRvbVwiKSB7XHJcbiAgICAgICAgLy8gYmVsbG93IHgtYXhpcyBsYWJlbFxyXG4gICAgICAgIGxlZ2VuZFggPSByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAvIDIuMCAtIGxlZ2VuZFdpZHRoIC8gMi4wO1xyXG4gICAgICAgIGxlZ2VuZFkgPSB0aXRsZUhlaWdodCArIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArIHlTcGFjaW5nO1xyXG4gICAgICAgIC8vIEV4cGFuZCBzdmdcclxuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShzdmcsIDAsIGxlZ2VuZEhlaWdodCArIHlTcGFjaW5nKTtcclxuICAgIH0gZWxzZSBpZiAocGllSW5mby5sZWdlbmRQb3NpdGlvbiA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgICBsZWdlbmRYID0gMDtcclxuICAgICAgICBsZWdlbmRZID1cclxuICAgICAgICAgICAgdGl0bGVIZWlnaHQgK1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgLyAyLjAgLVxyXG4gICAgICAgICAgICBsZWdlbmRIZWlnaHQgLyAyLjA7XHJcbiAgICAgICAgLy8gRXhwYW5kIHN2Z1xyXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKHN2ZywgbGVnZW5kV2lkdGggKyB4U3BhY2luZywgMCk7XHJcbiAgICAgICAgLy8gTW92ZSBkYXRhQXJlYSByaWdodFxyXG4gICAgICAgIGhlbHBlci5tb3ZlQXJlYShkYXRhQXJlYSwgbGVnZW5kV2lkdGggKyB4U3BhY2luZywgMCk7XHJcbiAgICB9IGVsc2UgaWYgKHBpZUluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwicmlnaHRcIikge1xyXG4gICAgICAgIGxlZ2VuZFggPSByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArIHhTcGFjaW5nO1xyXG4gICAgICAgIGxlZ2VuZFkgPVxyXG4gICAgICAgICAgICB0aXRsZUhlaWdodCArXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCAvIDIuMCAtXHJcbiAgICAgICAgICAgIGxlZ2VuZEhlaWdodCAvIDIuMDtcclxuICAgICAgICAvLyBFeHBhbmQgc3ZnXHJcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoc3ZnLCBsZWdlbmRXaWR0aCArIHhTcGFjaW5nLCAwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coYGxlZ2VuZFg6ICR7bGVnZW5kWH0sIGxlZ2VuZFk6ICR7bGVnZW5kWX1gKTtcclxuXHJcbiAgICBsZXQgbGVnZW5kID0gY2hhcnRFbGVtZW50cy5ncmFwaEFyZWFcclxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJsZWdlbmRcIilcclxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIGxlZ2VuZFggKyBcIixcIiArIGxlZ2VuZFkgKyBcIilcIik7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnbGVnZW5kWDogJWQsIGxlZ2VuZFk6ICVkJywgbGVnZW5kWCwgbGVnZW5kWSk7XHJcblxyXG4gICAgbGV0IGxlZ2VuZEJnID0gbGVnZW5kXHJcbiAgICAgICAgLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1sZWdlbmRcIilcclxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIGxlZ2VuZFdpZHRoKVxyXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGxlZ2VuZEhlaWdodCk7XHJcbiAgICBpZiAocGllSW5mby5sZWdlbmRCZ0NvbG9yKSB7XHJcbiAgICAgICAgbGVnZW5kQmcuc3R5bGUoXCJmaWxsXCIsIHBpZUluZm8ubGVnZW5kQmdDb2xvcik7XHJcbiAgICB9XHJcbiAgICBpZiAocGllSW5mby5sZWdlbmRCb3JkZXJDb2xvcikge1xyXG4gICAgICAgIGxlZ2VuZEJnLnN0eWxlKFwic3Ryb2tlXCIsIHBpZUluZm8ubGVnZW5kQm9yZGVyQ29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBtYXJrZXJSYWRpdXMgPSA1LjA7XHJcbiAgICBsZXQgZmlyc3RNYXJrZXJYID0geFNwYWNpbmc7XHJcbiAgICBsZXQgZmlyc3RNYXJrZXJZID0gbmFtZUhlaWdodDtcclxuICAgIGxldCBmaXJzdExhYmVsWCA9IGZpcnN0TWFya2VyWCArIHhTcGFjaW5nICsgbWFya2VyV2lkdGg7IC8vIHhTcGFjaW5nICsgMiAqIHhTcGFpbmdcclxuICAgIGxldCBmaXJzdExhYmVsWSA9IGZpcnN0TWFya2VyWTtcclxuXHJcbiAgICBpZiAocGllSW5mby5sZWdlbmRPcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XHJcbiAgICAgICAgLy8gcG9pbnRzXHJcbiAgICAgICAgbGVnZW5kXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJtYXJrZXJzXCIpXHJcbiAgICAgICAgICAgIC5kYXRhKG5hbWVzKVxyXG4gICAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgICAuYXBwZW5kKFwiY2lyY2xlXCIpXHJcbiAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgZmlyc3RNYXJrZXJYICsgbWFya2VyV2lkdGggLyAyLjApXHJcbiAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RNYXJrZXJZICsgaSAqIHlTcGFjaW5nO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcInJcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyUmFkaXVzO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBpZUluZm8uZGF0YUNvbG9yW2ldO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gbmFtZXNcclxuICAgICAgICBsZXQgbmFtZUxhYmVscyA9IGxlZ2VuZFxyXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwibGFiZWxzXCIpXHJcbiAgICAgICAgICAgIC5kYXRhKG5hbWVzKVxyXG4gICAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgZmlyc3RMYWJlbFgpXHJcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdExhYmVsWSArIGkgKiB5U3BhY2luZztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRleHQoZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN0eWxlKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpXHJcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWxlZ2VuZC1sYWJlbFwiKTtcclxuXHJcbiAgICAgICAgbmFtZUxhYmVscy5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwaWVJbmZvLmRhdGFDb2xvcltpXTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAocGllSW5mby5sZWdlbmRPcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcclxuICAgICAgICBsZXQgY3VyclJlbmRlclBvc1ggPSAwLjA7XHJcbiAgICAgICAgbGV0IGN1cnJSZW5kZXJQb3NYMiA9IDAuMDtcclxuXHJcbiAgICAgICAgLy8gcG9pbnRzXHJcbiAgICAgICAgY3VyclJlbmRlclBvc1ggPSAwLjA7XHJcbiAgICAgICAgbGVnZW5kXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJtYXJrZXJzXCIpXHJcbiAgICAgICAgICAgIC5kYXRhKG5hbWVzKVxyXG4gICAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgICAuYXBwZW5kKFwiY2lyY2xlXCIpXHJcbiAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJSZW5kZXJQb3NYID0gZmlyc3RNYXJrZXJYICsgbWFya2VyV2lkdGggLyAyLjA7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJSZW5kZXJQb3NYICs9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVTaXplc1tpXS53aWR0aCArIHhTcGFjaW5nICsgbWFya2VyV2lkdGggKyB4U3BhY2luZztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyUmVuZGVyUG9zWDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoXCJjeVwiLCBmaXJzdE1hcmtlclkpXHJcbiAgICAgICAgICAgIC5hdHRyKFwiclwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJSYWRpdXM7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGllSW5mby5kYXRhQ29sb3JbaV07XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBuYW1lc1xyXG4gICAgICAgIGN1cnJSZW5kZXJQb3NYID0gMC4wO1xyXG4gICAgICAgIGxldCBuYW1lTGFiZWxzID0gbGVnZW5kXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJsYWJlbHNcIilcclxuICAgICAgICAgICAgLmRhdGEobmFtZXMpXHJcbiAgICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VyclJlbmRlclBvc1ggPSBmaXJzdExhYmVsWDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VyclJlbmRlclBvc1ggKz1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZVNpemVzW2ldLndpZHRoICsgeFNwYWNpbmcgKyBtYXJrZXJXaWR0aCArIHhTcGFjaW5nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJSZW5kZXJQb3NYO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgZmlyc3RMYWJlbFkpXHJcbiAgICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdHlsZShcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1sZWdlbmQtbGFiZWxcIik7XHJcblxyXG4gICAgICAgIG5hbWVMYWJlbHMuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gcGllSW5mby5kYXRhQ29sb3JbaV07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbmRlclBpZShcclxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXHJcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIHBpZUluZm86IFBpZUluZm9cclxuKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlclBpZVwiKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8pO1xyXG4gICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiXCI7XHJcblxyXG4gICAgbGV0IHJhZGl1cyA9IHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICogMC41O1xyXG4gICAgbGV0IG91dHRlclJhZGl1cyA9IHJhZGl1cyAqIDAuNztcclxuICAgIGxldCBpbm5lclJhZGl1cyA9IG91dHRlclJhZGl1cyAqIHBpZUluZm8ucmF0aW9Jbm5lclJhZGl1cztcclxuXHJcbiAgICAvLyB2YWx1ZXNcclxuICAgIGxldCB2YWx1ZXM6IEFycmF5PG51bWJlcj4gPSBbXTtcclxuICAgIGZvciAobGV0IHN0ckV4cHIgb2YgcGllSW5mby5kYXRhKSB7XHJcbiAgICAgICAgbGV0IHJldFZhbHVlID0gZXhwci5yZXNvbHZlVmFsdWUoc3RyRXhwciwgcmVuZGVySW5mbyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXRWYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSByZXRWYWx1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmV0VmFsdWUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgdmFsdWVzLnB1c2gocmV0VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChlcnJvck1lc3NhZ2UgIT09IFwiXCIpIHtcclxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2codmFsdWVzKTtcclxuXHJcbiAgICAvLyBsYWJlbHNcclxuICAgIGxldCBsYWJlbHM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICAgIGZvciAobGV0IHN0ckV4cHIgb2YgcGllSW5mby5sYWJlbCkge1xyXG4gICAgICAgIGxldCByZXRMYWJlbCA9IGV4cHIucmVzb2x2ZVRlbXBsYXRlKHN0ckV4cHIsIHJlbmRlckluZm8pO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHJldExhYmVsKTtcclxuICAgICAgICBpZiAocmV0TGFiZWwuc3RhcnRzV2l0aChcIkVycm9yXCIpKSB7XHJcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHJldExhYmVsO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGFiZWxzLnB1c2gocmV0TGFiZWwpO1xyXG4gICAgfVxyXG4gICAgaWYgKGVycm9yTWVzc2FnZSAhPT0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhsYWJlbHMpO1xyXG5cclxuICAgIC8vIGhpZGVMYWJlbExlc3NUaGFuXHJcbiAgICBsZXQgaGlkZUxhYmVsTGVzc1RoYW4gPSBwaWVJbmZvLmhpZGVMYWJlbExlc3NUaGFuO1xyXG5cclxuICAgIC8vIGxhYmVsIHNpemVzXHJcbiAgICBsZXQgbGFiZWxTaXplcyA9IGxhYmVscy5tYXAoZnVuY3Rpb24gKG4pIHtcclxuICAgICAgICByZXR1cm4gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShuLCBcInRyYWNrZXItdGljay1sYWJlbFwiKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGV4dExhYmVsXHJcbiAgICBsZXQgZXh0TGFiZWxzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcbiAgICBmb3IgKGxldCBzdHJFeHByIG9mIHBpZUluZm8uZXh0TGFiZWwpIHtcclxuICAgICAgICBsZXQgcmV0RXh0TGFiZWwgPSBleHByLnJlc29sdmVUZW1wbGF0ZShzdHJFeHByLCByZW5kZXJJbmZvKTtcclxuICAgICAgICBpZiAocmV0RXh0TGFiZWwuc3RhcnRzV2l0aChcIkVycm9yXCIpKSB7XHJcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHJldEV4dExhYmVsO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZXh0TGFiZWxzLnB1c2gocmV0RXh0TGFiZWwpO1xyXG4gICAgfVxyXG4gICAgaWYgKGVycm9yTWVzc2FnZSAhPT0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhleHRMYWJlbHMpO1xyXG5cclxuICAgIC8vIGV4dExhYmVsIHNpemVzXHJcbiAgICBsZXQgZXh0TGFiZWxTaXplcyA9IGV4dExhYmVscy5tYXAoZnVuY3Rpb24gKG4pIHtcclxuICAgICAgICByZXR1cm4gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShuLCBcInRyYWNrZXItcGllLWxhYmVsXCIpO1xyXG4gICAgfSk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhleHRMYWJlbFNpemVzKTtcclxuXHJcbiAgICBsZXQgc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbCA9IHBpZUluZm8uc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbDtcclxuXHJcbiAgICAvLyBzY2FsZVxyXG4gICAgbGV0IGNvbG9yU2NhbGUgPSBkMy5zY2FsZU9yZGluYWwoKS5yYW5nZShwaWVJbmZvLmRhdGFDb2xvcik7XHJcblxyXG4gICAgbGV0IHNlY3RvcnNHcm91cCA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWEuYXBwZW5kKFwiZ1wiKTtcclxuICAgIHNlY3RvcnNHcm91cC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBsZXQgc3RyVHJhbnNsYXRlID1cclxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAqIDAuNSArXHJcbiAgICAgICAgICAgIFwiLFwiICtcclxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICogMC41ICtcclxuICAgICAgICAgICAgXCIpXCI7XHJcblxyXG4gICAgICAgIHJldHVybiBzdHJUcmFuc2xhdGU7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgcGllID0gZDMucGllKCk7XHJcbiAgICBsZXQgcGllVmFsdWVzID0gcGllKHZhbHVlcyk7XHJcblxyXG4gICAgbGV0IHNlY3RvcnMgPSBzZWN0b3JzR3JvdXBcclxuICAgICAgICAuc2VsZWN0QWxsKFwic2VjdG9yXCIpXHJcbiAgICAgICAgLmRhdGEocGllVmFsdWVzKVxyXG4gICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgLmFwcGVuZChcImdcIilcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwic2VjdG9yXCIpO1xyXG5cclxuICAgIGxldCBhcmMgPSBkMy5hcmMoKS5pbm5lclJhZGl1cyhpbm5lclJhZGl1cykub3V0ZXJSYWRpdXMob3V0dGVyUmFkaXVzKTtcclxuXHJcbiAgICB2YXIgaGlkZGVuQXJjID0gZDNcclxuICAgICAgICAuYXJjKClcclxuICAgICAgICAuaW5uZXJSYWRpdXMocmFkaXVzICogMC45KVxyXG4gICAgICAgIC5vdXRlclJhZGl1cyhyYWRpdXMgKiAwLjkpO1xyXG5cclxuICAgIGxldCBzZWN0b3JQYXRocyA9IHNlY3RvcnNcclxuICAgICAgICAuYXBwZW5kKFwicGF0aFwiKVxyXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBmdW5jdGlvbiAoZDogYW55LCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yU2NhbGUoaS50b1N0cmluZygpKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKFwiZFwiLCBhcmMpO1xyXG5cclxuICAgIGZ1bmN0aW9uIGlzTGFiZWxIaWRkZW4oYXJjT2JqOiBhbnkpIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhgc3RhcnQvZW5kOiAke2FyY09iai5zdGFydEFuZ2xlfS8ke2FyY09iai5lbmRBbmdsZX1gKTtcclxuICAgICAgICBsZXQgZnJhY3Rpb24gPSAoYXJjT2JqLmVuZEFuZ2xlIC0gYXJjT2JqLnN0YXJ0QW5nbGUpIC8gKDIuMCAqIE1hdGguUEkpO1xyXG4gICAgICAgIGlmIChmcmFjdGlvbiA8IGhpZGVMYWJlbExlc3NUaGFuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbGFiZWwgZWxlbWVudHNcclxuICAgIGxldCBsYWJlbEVsZW1lbnRzID0gc2VjdG9yc0dyb3VwXHJcbiAgICAgICAgLnNlbGVjdEFsbChcImxhYmVsXCIpXHJcbiAgICAgICAgLmRhdGEocGllKHZhbHVlcykpXHJcbiAgICAgICAgLmVudGVyKClcclxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAgIC50ZXh0KGZ1bmN0aW9uIChhcmNPYmo6IGFueSwgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0xhYmVsSGlkZGVuKGFyY09iaikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBsYWJlbHNbaV07XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBmdW5jdGlvbiAoZDogYW55KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXHJcbiAgICAgICAgICAgICAgICBhcmMuY2VudHJvaWQoZClbMF0gK1xyXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xyXG4gICAgICAgICAgICAgICAgYXJjLmNlbnRyb2lkKGQpWzFdICtcclxuICAgICAgICAgICAgICAgIFwiKVwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXBpZS1sYWJlbFwiKTtcclxuXHJcbiAgICBmdW5jdGlvbiBnZXRNaWRBbmdsZShhcmNPYmo6IGFueSkge1xyXG4gICAgICAgIHJldHVybiBhcmNPYmouc3RhcnRBbmdsZSArIChhcmNPYmouZW5kQW5nbGUgLSBhcmNPYmouc3RhcnRBbmdsZSkgLyAyO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGV4dGVybmFsIGxhYmVsIGVsZW1lbnRzXHJcbiAgICBsZXQgZXh0TGFiZWxFbGVtZW50cyA9IHNlY3RvcnNHcm91cFxyXG4gICAgICAgIC5zZWxlY3RBbGwoXCJleHRMYWJlbFwiKVxyXG4gICAgICAgIC5kYXRhKHBpZVZhbHVlcylcclxuICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgLnRleHQoZnVuY3Rpb24gKGFyY09iajogYW55LCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgaWYgKHNob3dFeHRMYWJlbE9ubHlJZk5vTGFiZWwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChsYWJlbHNbaV0gPT09IFwiXCIgfHwgaXNMYWJlbEhpZGRlbihhcmNPYmopKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4dExhYmVsc1tpXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4dExhYmVsc1tpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24gKGFyY09iajogYW55LCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgbGV0IHBvc0xhYmVsID0gaGlkZGVuQXJjLmNlbnRyb2lkKGFyY09iaik7XHJcbiAgICAgICAgICAgIGxldCBtaWRBbmdsZSA9IGdldE1pZEFuZ2xlKGFyY09iaik7XHJcblxyXG4gICAgICAgICAgICBwb3NMYWJlbFswXSA9XHJcbiAgICAgICAgICAgICAgICAocmFkaXVzICogMC45OSAtIGV4dExhYmVsU2l6ZXNbaV0ud2lkdGgpICpcclxuICAgICAgICAgICAgICAgIChtaWRBbmdsZSA8IE1hdGguUEkgPyAxIDogLTEpO1xyXG4gICAgICAgICAgICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyBwb3NMYWJlbFswXSArIFwiLFwiICsgcG9zTGFiZWxbMV0gKyBcIilcIjtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdHlsZShcInRleHQtYW5jaG9yXCIsIGZ1bmN0aW9uIChhcmNPYmo6IGFueSkge1xyXG4gICAgICAgICAgICBsZXQgbWlkQW5nbGUgPSBnZXRNaWRBbmdsZShhcmNPYmopO1xyXG4gICAgICAgICAgICByZXR1cm4gbWlkQW5nbGUgPCBNYXRoLlBJID8gXCJzdGFydFwiIDogXCJlbmRcIjtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXBpZS1sYWJlbFwiKTtcclxuXHJcbiAgICBmdW5jdGlvbiBnZXRQb2ludHNGb3JDb25uZWN0aW9uTGluZXMoYXJjT2JqOiBhbnksIGk6IG51bWJlcikge1xyXG4gICAgICAgIGxldCBsYWJlbFdpZHRoID0gbGFiZWxTaXplc1tpXS53aWR0aDtcclxuICAgICAgICBsZXQgZXh0TGFiZWxXaWR0aCA9IGV4dExhYmVsU2l6ZXNbaV0ud2lkdGg7XHJcbiAgICAgICAgbGV0IGxhYmVsSGlkZGVuID0gaXNMYWJlbEhpZGRlbihhcmNPYmopO1xyXG4gICAgICAgIGxldCBtaWRBbmdsZSA9IGdldE1pZEFuZ2xlKGFyY09iaik7XHJcblxyXG4gICAgICAgIGxldCBwb3NMYWJlbCA9IGFyYy5jZW50cm9pZChhcmNPYmopOyAvLyBsaW5lIGluc2VydGlvbiBpbiB0aGUgc2xpY2VcclxuICAgICAgICBsZXQgcG9zTWlkZGxlID0gaGlkZGVuQXJjLmNlbnRyb2lkKGFyY09iaik7IC8vIGxpbmUgYnJlYWs6IHdlIHVzZSB0aGUgb3RoZXIgYXJjIGdlbmVyYXRvciB0aGF0IGhhcyBiZWVuIGJ1aWx0IG9ubHkgZm9yIHRoYXRcclxuICAgICAgICBsZXQgcG9zRXh0TGFiZWwgPSBoaWRkZW5BcmMuY2VudHJvaWQoYXJjT2JqKTsgLy8gTGFiZWwgcG9zaXRpb24gPSBhbG1vc3QgdGhlIHNhbWUgYXMgcG9zQlxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGxhYmVsc1tpXSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coYGxhYmVsL21pZGRsZS9leHRMYWJlbDogJHtwb3NMYWJlbH0vJHtwb3NNaWRkbGV9LyR7cG9zRXh0TGFiZWx9YCk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0TWlkZGxlVG9MYWJlbCA9IE1hdGguc3FydChcclxuICAgICAgICAgICAgKHBvc01pZGRsZVswXSAtIHBvc0xhYmVsWzBdKSAqKiAyICtcclxuICAgICAgICAgICAgICAgIChwb3NNaWRkbGVbMV0gLSBwb3NMYWJlbFsxXSkgKiogMlxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmIChsYWJlbHNbaV0gIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgLy8gc2hpZnQgcG9zTGFiZWwsIHRvd2FyZCB0aGUgbWlkZGxlIHBvaW50XHJcbiAgICAgICAgICAgIHBvc0xhYmVsWzBdID1cclxuICAgICAgICAgICAgICAgIHBvc0xhYmVsWzBdICtcclxuICAgICAgICAgICAgICAgICgocG9zTWlkZGxlWzBdIC0gcG9zTGFiZWxbMF0pICogbGFiZWxXaWR0aCkgLyBkaXN0TWlkZGxlVG9MYWJlbDtcclxuICAgICAgICAgICAgcG9zTGFiZWxbMV0gPVxyXG4gICAgICAgICAgICAgICAgcG9zTGFiZWxbMV0gK1xyXG4gICAgICAgICAgICAgICAgKChwb3NNaWRkbGVbMV0gLSBwb3NMYWJlbFsxXSkgKiBsYWJlbFdpZHRoKSAvIGRpc3RNaWRkbGVUb0xhYmVsO1xyXG5cclxuICAgICAgICAgICAgLy8gc2hpZnQgcG9zRXh0TGFiZWxcclxuICAgICAgICAgICAgcG9zRXh0TGFiZWxbMF0gPVxyXG4gICAgICAgICAgICAgICAgKHJhZGl1cyAqIDAuOTkgLSBleHRMYWJlbFdpZHRoIC0gMykgKlxyXG4gICAgICAgICAgICAgICAgKG1pZEFuZ2xlIDwgTWF0aC5QSSA/IDEgOiAtMSk7IC8vIG11bHRpcGx5IGJ5IDEgb3IgLTEgdG8gcHV0IGl0IG9uIHRoZSByaWdodCBvciBvbiB0aGUgbGVmdFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGlzdE1pZGRsZVRvTGFiZWwgPSBNYXRoLnNxcnQoXHJcbiAgICAgICAgICAgIChwb3NNaWRkbGVbMF0gLSBwb3NMYWJlbFswXSkgKiogMiArXHJcbiAgICAgICAgICAgICAgICAocG9zTWlkZGxlWzFdIC0gcG9zTGFiZWxbMV0pICoqIDJcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBsZXQgZGlzdEV4dExhYmVsVG9MYWJlbCA9IE1hdGguc3FydChcclxuICAgICAgICAgICAgKHBvc0V4dExhYmVsWzBdIC0gcG9zTGFiZWxbMF0pICoqIDIgK1xyXG4gICAgICAgICAgICAgICAgKHBvc0V4dExhYmVsWzFdIC0gcG9zTGFiZWxbMV0pICoqIDJcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoZGlzdE1pZGRsZVRvTGFiZWwgPiBkaXN0RXh0TGFiZWxUb0xhYmVsKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwidHdvIHBvaW50c1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFtwb3NMYWJlbCwgcG9zRXh0TGFiZWxdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gW3Bvc0xhYmVsLCBwb3NNaWRkbGUsIHBvc0V4dExhYmVsXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBZGQgbGluZXMgYmV0d2VlbiBzZWN0b3JzIGFuZCBleHRlcm5hbCBsYWJlbHNcclxuICAgIGxldCBsaW5lcyA9IHNlY3RvcnNHcm91cFxyXG4gICAgICAgIC5zZWxlY3RBbGwoXCJsaW5lXCIpXHJcbiAgICAgICAgLmRhdGEocGllVmFsdWVzKVxyXG4gICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgLmFwcGVuZChcInBvbHlsaW5lXCIpXHJcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJibGFja1wiKVxyXG4gICAgICAgIC5zdHlsZShcImZpbGxcIiwgXCJub25lXCIpXHJcbiAgICAgICAgLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgMSlcclxuICAgICAgICAuYXR0cihcInBvaW50c1wiLCBmdW5jdGlvbiAoYXJjT2JqOiBhbnksIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICBpZiAoc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGxhYmVsc1tpXSA9PT0gXCJcIiB8fCBpc0xhYmVsSGlkZGVuKGFyY09iaikpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXh0TGFiZWxzW2ldICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRQb2ludHNGb3JDb25uZWN0aW9uTGluZXMoYXJjT2JqLCBpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXh0TGFiZWxzW2ldICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFBvaW50c0ZvckNvbm5lY3Rpb25MaW5lcyhhcmNPYmosIGkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1heGlzXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyUGllQ2hhcnQoXHJcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIHBpZUluZm86IFBpZUluZm9cclxuKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlclBpZUNoYXJ0XCIpO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XHJcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIXBpZUluZm8pIHJldHVybjtcclxuXHJcbiAgICAvLyByZXR1cm4gXCJVbmRlciBjb25zdHJ1Y3Rpb25cIjtcclxuXHJcbiAgICBsZXQgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyA9IHt9O1xyXG4gICAgY2hhcnRFbGVtZW50cyA9IGNyZWF0ZUFyZWFzKGNoYXJ0RWxlbWVudHMsIGNhbnZhcywgcmVuZGVySW5mbywgcGllSW5mbyk7XHJcblxyXG4gICAgLy8gU2V0IGRlZmF1bHQgZGF0YUNvbG9yIGlmIG5vIGRhdGFDb2xvciBwcm92aWRlZFxyXG4gICAgbGV0IGRlZmF1bHREYXRhQ29sb3IgPSBkMy5zY2hlbWVTcGVjdHJhbFtwaWVJbmZvLmRhdGFDb2xvci5sZW5ndGhdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwaWVJbmZvLmRhdGFDb2xvci5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChwaWVJbmZvLmRhdGFDb2xvcltpXSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBwaWVJbmZvLmRhdGFDb2xvcltpXSA9IGRlZmF1bHREYXRhQ29sb3JbaV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlclRpdGxlKGNhbnZhcywgY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgcGllSW5mbyk7XHJcblxyXG4gICAgcmVuZGVyUGllKGNhbnZhcywgY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgcGllSW5mbyk7XHJcblxyXG4gICAgaWYgKHBpZUluZm8uc2hvd0xlZ2VuZCkge1xyXG4gICAgICAgIHJlbmRlckxlZ2VuZChjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIHBpZUluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldENoYXJ0U2NhbGUoY2FudmFzLCBjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvKTtcclxufVxyXG4iLCJpbXBvcnQgYXJyYXkgZnJvbSBcIi4vYXJyYXkuanNcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IGRlc2NlbmRpbmcgZnJvbSBcIi4vZGVzY2VuZGluZy5qc1wiO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gXCIuL2lkZW50aXR5LmpzXCI7XG5pbXBvcnQge3RhdX0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHZhbHVlID0gaWRlbnRpdHksXG4gICAgICBzb3J0VmFsdWVzID0gZGVzY2VuZGluZyxcbiAgICAgIHNvcnQgPSBudWxsLFxuICAgICAgc3RhcnRBbmdsZSA9IGNvbnN0YW50KDApLFxuICAgICAgZW5kQW5nbGUgPSBjb25zdGFudCh0YXUpLFxuICAgICAgcGFkQW5nbGUgPSBjb25zdGFudCgwKTtcblxuICBmdW5jdGlvbiBwaWUoZGF0YSkge1xuICAgIHZhciBpLFxuICAgICAgICBuID0gKGRhdGEgPSBhcnJheShkYXRhKSkubGVuZ3RoLFxuICAgICAgICBqLFxuICAgICAgICBrLFxuICAgICAgICBzdW0gPSAwLFxuICAgICAgICBpbmRleCA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgYXJjcyA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgYTAgPSArc3RhcnRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICBkYSA9IE1hdGgubWluKHRhdSwgTWF0aC5tYXgoLXRhdSwgZW5kQW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSAtIGEwKSksXG4gICAgICAgIGExLFxuICAgICAgICBwID0gTWF0aC5taW4oTWF0aC5hYnMoZGEpIC8gbiwgcGFkQW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSksXG4gICAgICAgIHBhID0gcCAqIChkYSA8IDAgPyAtMSA6IDEpLFxuICAgICAgICB2O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKCh2ID0gYXJjc1tpbmRleFtpXSA9IGldID0gK3ZhbHVlKGRhdGFbaV0sIGksIGRhdGEpKSA+IDApIHtcbiAgICAgICAgc3VtICs9IHY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT3B0aW9uYWxseSBzb3J0IHRoZSBhcmNzIGJ5IHByZXZpb3VzbHktY29tcHV0ZWQgdmFsdWVzIG9yIGJ5IGRhdGEuXG4gICAgaWYgKHNvcnRWYWx1ZXMgIT0gbnVsbCkgaW5kZXguc29ydChmdW5jdGlvbihpLCBqKSB7IHJldHVybiBzb3J0VmFsdWVzKGFyY3NbaV0sIGFyY3Nbal0pOyB9KTtcbiAgICBlbHNlIGlmIChzb3J0ICE9IG51bGwpIGluZGV4LnNvcnQoZnVuY3Rpb24oaSwgaikgeyByZXR1cm4gc29ydChkYXRhW2ldLCBkYXRhW2pdKTsgfSk7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBhcmNzISBUaGV5IGFyZSBzdG9yZWQgaW4gdGhlIG9yaWdpbmFsIGRhdGEncyBvcmRlci5cbiAgICBmb3IgKGkgPSAwLCBrID0gc3VtID8gKGRhIC0gbiAqIHBhKSAvIHN1bSA6IDA7IGkgPCBuOyArK2ksIGEwID0gYTEpIHtcbiAgICAgIGogPSBpbmRleFtpXSwgdiA9IGFyY3Nbal0sIGExID0gYTAgKyAodiA+IDAgPyB2ICogayA6IDApICsgcGEsIGFyY3Nbal0gPSB7XG4gICAgICAgIGRhdGE6IGRhdGFbal0sXG4gICAgICAgIGluZGV4OiBpLFxuICAgICAgICB2YWx1ZTogdixcbiAgICAgICAgc3RhcnRBbmdsZTogYTAsXG4gICAgICAgIGVuZEFuZ2xlOiBhMSxcbiAgICAgICAgcGFkQW5nbGU6IHBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyY3M7XG4gIH1cblxuICBwaWUudmFsdWUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodmFsdWUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcGllKSA6IHZhbHVlO1xuICB9O1xuXG4gIHBpZS5zb3J0VmFsdWVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNvcnRWYWx1ZXMgPSBfLCBzb3J0ID0gbnVsbCwgcGllKSA6IHNvcnRWYWx1ZXM7XG4gIH07XG5cbiAgcGllLnNvcnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc29ydCA9IF8sIHNvcnRWYWx1ZXMgPSBudWxsLCBwaWUpIDogc29ydDtcbiAgfTtcblxuICBwaWUuc3RhcnRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzdGFydEFuZ2xlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHBpZSkgOiBzdGFydEFuZ2xlO1xuICB9O1xuXG4gIHBpZS5lbmRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChlbmRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBwaWUpIDogZW5kQW5nbGU7XG4gIH07XG5cbiAgcGllLnBhZEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZEFuZ2xlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHBpZSkgOiBwYWRBbmdsZTtcbiAgfTtcblxuICByZXR1cm4gcGllO1xufVxuIiwiaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XHJcbmltcG9ydCB7IFJlbmRlckluZm8sIFN1bW1hcnlJbmZvIH0gZnJvbSBcIi4vZGF0YVwiO1xyXG5pbXBvcnQgKiBhcyBleHByIGZyb20gXCIuL2V4cHJcIjtcclxuXHJcbmZ1bmN0aW9uIGNoZWNrU3VtbWFyeVRlbXBsYXRlVmFsaWQoc3VtbWFyeVRlbXBsYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyU3VtbWFyeShcclxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgc3VtbWFyeUluZm86IFN1bW1hcnlJbmZvXHJcbikge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJTdW1tYXJ5XCIpO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XHJcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIXN1bW1hcnlJbmZvKSByZXR1cm47XHJcblxyXG4gICAgLy8gY29uc29sZS5sb2coc3VtbWFyeUluZm8udGVtcGxhdGUpO1xyXG4gICAgbGV0IG91dHB1dFN1bW1hcnkgPSBcIlwiO1xyXG4gICAgaWYgKGNoZWNrU3VtbWFyeVRlbXBsYXRlVmFsaWQoc3VtbWFyeUluZm8udGVtcGxhdGUpKSB7XHJcbiAgICAgICAgb3V0cHV0U3VtbWFyeSA9IHN1bW1hcnlJbmZvLnRlbXBsYXRlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gXCJJbnZhbGlkIHN1bW1hcnkgdGVtcGxhdGVcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmV0UmVzb2x2ZWRUZW1wbGF0ZSA9IGV4cHIucmVzb2x2ZVRlbXBsYXRlKG91dHB1dFN1bW1hcnksIHJlbmRlckluZm8pO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmV0UmVzb2x2ZWRUZW1wbGF0ZSk7XHJcbiAgICBpZiAocmV0UmVzb2x2ZWRUZW1wbGF0ZS5zdGFydHNXaXRoKFwiRXJyb3I6XCIpKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldFJlc29sdmVkVGVtcGxhdGU7XHJcbiAgICB9XHJcbiAgICBvdXRwdXRTdW1tYXJ5ID0gcmV0UmVzb2x2ZWRUZW1wbGF0ZTtcclxuXHJcbiAgICBpZiAob3V0cHV0U3VtbWFyeSAhPT0gXCJcIikge1xyXG4gICAgICAgIGxldCB0ZXh0QmxvY2sgPSBkMy5zZWxlY3QoY2FudmFzKS5hcHBlbmQoXCJkaXZcIik7XHJcbiAgICAgICAgaWYgKG91dHB1dFN1bW1hcnkuaW5jbHVkZXMoXCJcXG5cIikgfHwgb3V0cHV0U3VtbWFyeS5pbmNsdWRlcyhcIlxcXFxuXCIpKSB7XHJcbiAgICAgICAgICAgIGxldCBvdXRwdXRMaW5lcyA9IG91dHB1dFN1bW1hcnkuc3BsaXQoLyhcXG58XFxcXG4pLyk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG91dHB1dExpbmVzKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgb3V0cHV0TGluZSBvZiBvdXRwdXRMaW5lcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG91dHB1dExpbmUgIT09IFwiXFxuXCIgJiYgb3V0cHV0TGluZSAhPT0gXCJcXFxcblwiKVxyXG4gICAgICAgICAgICAgICAgdGV4dEJsb2NrLmFwcGVuZChcImRpdlwiKS50ZXh0KG91dHB1dExpbmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGV4dEJsb2NrLnRleHQob3V0cHV0U3VtbWFyeSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3VtbWFyeUluZm8uc3R5bGUgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgdGV4dEJsb2NrLmF0dHIoXCJzdHlsZVwiLCBzdW1tYXJ5SW5mby5zdHlsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IE1vbWVudCB9IGZyb20gXCJtb21lbnRcIjtcclxuaW1wb3J0IHtcclxuICAgIERhdGFzZXRzLFxyXG4gICAgRGF0YVBvaW50LFxyXG4gICAgUmVuZGVySW5mbyxcclxuICAgIE1vbnRoSW5mbyxcclxuICAgIERhdGFzZXQsXHJcbiAgICBTaXplLFxyXG4gICAgVHJhbnNmb3JtLFxyXG4gICAgQ2hhcnRFbGVtZW50cyxcclxuICAgIEdyYXBoVHlwZSxcclxuICAgIFZhbHVlVHlwZSxcclxufSBmcm9tIFwiLi9kYXRhXCI7XHJcbmltcG9ydCAqIGFzIGhlbHBlciBmcm9tIFwiLi9oZWxwZXJcIjtcclxuaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XHJcblxyXG5sZXQgbG9nVG9Db25zb2xlID0gZmFsc2U7XHJcbmxldCByYXRpb0NlbGxUb1RleHQgPSAyLjg7XHJcbmxldCByYXRpb0RvdFRvVGV4dCA9IDEuODtcclxuXHJcbmludGVyZmFjZSBEYXlJbmZvIHtcclxuICAgIGRhdGU6IHN0cmluZztcclxuICAgIHZhbHVlOiBudW1iZXI7XHJcbiAgICBzY2FsZWRWYWx1ZTogbnVtYmVyO1xyXG4gICAgZGF5SW5Nb250aDogbnVtYmVyO1xyXG4gICAgaXNJblRoaXNNb250aDogYm9vbGVhbjtcclxuICAgIGlzT3V0T2ZEYXRhUmFuZ2U6IGJvb2xlYW47XHJcbiAgICByb3c6IG51bWJlcjtcclxuICAgIGNvbDogbnVtYmVyO1xyXG4gICAgc2hvd0NpcmNsZTogYm9vbGVhbjtcclxuICAgIHN0cmVha0luOiBib29sZWFuO1xyXG4gICAgc3RyZWFrT3V0OiBib29sZWFuO1xyXG4gICAgYW5ub3RhdGlvbjogc3RyaW5nO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRDaGFydFNjYWxlKFxyXG4gICAgX2NhbnZhczogSFRNTEVsZW1lbnQsXHJcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xyXG4pIHtcclxuICAgIGxldCBjYW52YXMgPSBkMy5zZWxlY3QoX2NhbnZhcyk7XHJcbiAgICBsZXQgc3ZnID0gY2hhcnRFbGVtZW50cy5zdmc7XHJcbiAgICBsZXQgc3ZnV2lkdGggPSBwYXJzZUZsb2F0KHN2Zy5hdHRyKFwid2lkdGhcIikpO1xyXG4gICAgbGV0IHN2Z0hlaWdodCA9IHBhcnNlRmxvYXQoc3ZnLmF0dHIoXCJoZWlnaHRcIikpO1xyXG4gICAgc3ZnLmF0dHIoXCJ3aWR0aFwiLCBudWxsKVxyXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG51bGwpXHJcbiAgICAgICAgLmF0dHIoXCJ2aWV3Qm94XCIsIGAwIDAgJHtzdmdXaWR0aH0gJHtzdmdIZWlnaHR9YClcclxuICAgICAgICAuYXR0cihcInByZXNlcnZlQXNwZWN0UmF0aW9cIiwgXCJ4TWlkWU1pZCBtZWV0XCIpO1xyXG5cclxuICAgIGlmIChyZW5kZXJJbmZvLmZpdFBhbmVsV2lkdGgpIHtcclxuICAgICAgICBjYW52YXMuc3R5bGUoXCJ3aWR0aFwiLCBcIjEwMCVcIik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNhbnZhcy5zdHlsZShcclxuICAgICAgICAgICAgXCJ3aWR0aFwiLFxyXG4gICAgICAgICAgICAoc3ZnV2lkdGggKiByZW5kZXJJbmZvLmZpeGVkU2NhbGUpLnRvU3RyaW5nKCkgKyBcInB4XCJcclxuICAgICAgICApO1xyXG4gICAgICAgIGNhbnZhcy5zdHlsZShcclxuICAgICAgICAgICAgXCJoZWlnaHRcIixcclxuICAgICAgICAgICAgKHN2Z0hlaWdodCAqIHJlbmRlckluZm8uZml4ZWRTY2FsZSkudG9TdHJpbmcoKSArIFwicHhcIlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRvTmV4dERhdGFzZXQocmVuZGVySW5mbzogUmVuZGVySW5mbywgbW9udGhJbmZvOiBNb250aEluZm8pOiBib29sZWFuIHtcclxuICAgIGxldCBkYXRhc2V0SWRzID0gbW9udGhJbmZvLmRhdGFzZXQ7XHJcbiAgICBpZiAoZGF0YXNldElkcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTsgLy8gZmFsc2UgaWYgc2VsZWN0ZWQgZGF0YXNldCBub3QgY2hhbmdlZFxyXG5cclxuICAgIGxldCBkYXRhc2V0ID0gbnVsbDtcclxuICAgIGlmIChtb250aEluZm8uc2VsZWN0ZWREYXRhc2V0ID09PSBudWxsKSB7XHJcbiAgICAgICAgZm9yIChsZXQgZGF0YXNldElkIG9mIGRhdGFzZXRJZHMpIHtcclxuICAgICAgICAgICAgZGF0YXNldCA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkKTtcclxuICAgICAgICAgICAgaWYgKGRhdGFzZXQgJiYgIWRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkYXRhc2V0KSB7XHJcbiAgICAgICAgICAgIG1vbnRoSW5mby5zZWxlY3RlZERhdGFzZXQgPSBkYXRhc2V0LmdldElkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyB0cnVlIGlmIHNlbGVjdGVjIGRhdGFzZXQgY2hhbmdlZFxyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGN1ckRhdGFzZXRJZCA9IG1vbnRoSW5mby5zZWxlY3RlZERhdGFzZXQ7XHJcbiAgICAgICAgbGV0IGN1ckluZGV4ID0gZGF0YXNldElkcy5maW5kSW5kZXgoKGlkKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBpZCA9PT0gY3VyRGF0YXNldElkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChjdXJJbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChjdXJJbmRleCA9PT0gbW9udGhJbmZvLmRhdGFzZXQubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgLy8gc2VhcmNoIGZyb20gc3RhcnRcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGRhdGFzZXRJZCBvZiBkYXRhc2V0SWRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldCA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YXNldCAmJiAhZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChkYXRhc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9udGhJbmZvLnNlbGVjdGVkRGF0YXNldCA9IGRhdGFzZXQuZ2V0SWQoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gdHJ1ZSBpZiBzZWxlY3RlYyBkYXRhc2V0IGNoYW5nZWRcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY3VySW5kZXgrKztcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhc2V0SWQgPSBkYXRhc2V0SWRzW2N1ckluZGV4XTtcclxuICAgICAgICAgICAgICAgIGRhdGFzZXQgPSByZW5kZXJJbmZvLmRhdGFzZXRzLmdldERhdGFzZXRCeUlkKGRhdGFzZXRJZCk7XHJcbiAgICAgICAgICAgICAgICBtb250aEluZm8uc2VsZWN0ZWREYXRhc2V0ID0gZGF0YXNldElkO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGFzZXQgJiYgIWRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0b05leHREYXRhc2V0KHJlbmRlckluZm8sIG1vbnRoSW5mbyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBcmVhcyhcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIG1vbnRoSW5mbzogTW9udGhJbmZvXHJcbik6IENoYXJ0RWxlbWVudHMge1xyXG4gICAgLy8gY2xlYW4gYXJlYXNcclxuICAgIGQzLnNlbGVjdChjYW52YXMpLnNlbGVjdChcIiNzdmdcIikucmVtb3ZlKCk7XHJcbiAgICB2YXIgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjaGFydEVsZW1lbnRzKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAvLyBkMy5zZWxlY3QoY2hhcnRFbGVtZW50c1twcm9wc1tpXV0pLnJlbW92ZSgpO1xyXG4gICAgICAgIGRlbGV0ZSBjaGFydEVsZW1lbnRzW3Byb3BzW2ldXTtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKGNoYXJ0RWxlbWVudHMpO1xyXG5cclxuICAgIC8vIHdob2xlIGFyZWEgZm9yIHBsb3R0aW5nLCBpbmNsdWRlcyBtYXJnaW5zXHJcbiAgICBsZXQgc3ZnID0gZDNcclxuICAgICAgICAuc2VsZWN0KGNhbnZhcylcclxuICAgICAgICAuYXBwZW5kKFwic3ZnXCIpXHJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcInN2Z1wiKVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICBcIndpZHRoXCIsXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmxlZnQgK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ucmlnaHRcclxuICAgICAgICApXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgIFwiaGVpZ2h0XCIsXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi50b3AgK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4uYm90dG9tXHJcbiAgICAgICAgKTtcclxuICAgIGNoYXJ0RWxlbWVudHNbXCJzdmdcIl0gPSBzdmc7XHJcblxyXG4gICAgLy8gZ3JhcGhBcmVhLCBpbmNsdWRlcyBjaGFydEFyZWEsIHRpdGxlLCBsZWdlbmRcclxuICAgIGxldCBncmFwaEFyZWEgPSBzdmdcclxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJncmFwaEFyZWFcIilcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcclxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ubGVmdCArXHJcbiAgICAgICAgICAgICAgICBcIixcIiArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi50b3AgK1xyXG4gICAgICAgICAgICAgICAgXCIpXCJcclxuICAgICAgICApXHJcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArIHJlbmRlckluZm8ubWFyZ2luLnJpZ2h0KVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICBcImhlaWdodFwiLFxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgKyByZW5kZXJJbmZvLm1hcmdpbi5ib3R0b21cclxuICAgICAgICApO1xyXG4gICAgY2hhcnRFbGVtZW50c1tcImdyYXBoQXJlYVwiXSA9IGdyYXBoQXJlYTtcclxuXHJcbiAgICAvLyBkYXRhQXJlYSwgdW5kZXIgZ3JhcGhBcmVhLCBpbmNsdWRlcyBwb2ludHMsIGxpbmVzLCB4QXhpcywgeUF4aXNcclxuICAgIGxldCBkYXRhQXJlYSA9IGdyYXBoQXJlYVxyXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImRhdGFBcmVhXCIpXHJcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aClcclxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQpO1xyXG4gICAgY2hhcnRFbGVtZW50c1tcImRhdGFBcmVhXCJdID0gZGF0YUFyZWE7XHJcblxyXG4gICAgcmV0dXJuIGNoYXJ0RWxlbWVudHM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uKGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsIG1vbnRoSW5mbzogTW9udGhJbmZvKSB7XHJcbiAgICBsZXQgY2lyY2xlcyA9IGNoYXJ0RWxlbWVudHMuc3ZnLnNlbGVjdEFsbChcImNpcmNsZVwiKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGNpcmNsZXMpO1xyXG4gICAgZm9yIChsZXQgY2lyY2xlIG9mIGNpcmNsZXMpIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhjaXJjbGUpO1xyXG4gICAgICAgIGxldCBpZCA9IGQzLnNlbGVjdChjaXJjbGUpLmF0dHIoXCJpZFwiKTtcclxuICAgICAgICBpZiAoaWQgJiYgaWQuc3RhcnRzV2l0aChcInRyYWNrZXItc2VsZWN0ZWQtY2lyY2xlLVwiKSkge1xyXG4gICAgICAgICAgICBkMy5zZWxlY3QoY2lyY2xlKS5zdHlsZShcInN0cm9rZVwiLCBcIm5vbmVcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG1vbnRoSW5mby5zZWxlY3RlZERhdGUgPSBcIlwiO1xyXG5cclxuICAgIGNoYXJ0RWxlbWVudHMubW9uaXRvci50ZXh0KFwiXCIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW5kZXJNb250aEhlYWRlcihcclxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXHJcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIG1vbnRoSW5mbzogTW9udGhJbmZvLFxyXG4gICAgY3VyTW9udGhEYXRlOiBNb21lbnRcclxuKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlck1vbnRoSGVhZGVyXCIpXHJcblxyXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFtb250aEluZm8pIHJldHVybjtcclxuXHJcbiAgICBsZXQgY3VyRGF0YXNldElkID0gbW9udGhJbmZvLnNlbGVjdGVkRGF0YXNldDtcclxuICAgIGlmIChjdXJEYXRhc2V0SWQgPT09IG51bGwpIHJldHVybjtcclxuICAgIGxldCBkYXRhc2V0ID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRhc2V0QnlJZChjdXJEYXRhc2V0SWQpO1xyXG4gICAgaWYgKCFkYXRhc2V0KSByZXR1cm47XHJcbiAgICBsZXQgZGF0YXNldE5hbWUgPSBkYXRhc2V0LmdldE5hbWUoKTtcclxuXHJcbiAgICBsZXQgY3VyTW9udGggPSBjdXJNb250aERhdGUubW9udGgoKTsgLy8gMH4xMVxyXG4gICAgbGV0IGN1ckRheXNJbk1vbnRoID0gY3VyTW9udGhEYXRlLmRheXNJbk1vbnRoKCk7IC8vIDI4fjMxXHJcbiAgICBsZXQgY3VyWWVhciA9IGN1ck1vbnRoRGF0ZS55ZWFyKCk7XHJcblxyXG4gICAgbGV0IG1heERheVRleHRTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcIjMwXCIsIFwidHJhY2tlci1tb250aC1sYWJlbFwiKTtcclxuICAgIGxldCBjZWxsU2l6ZSA9XHJcbiAgICAgICAgTWF0aC5tYXgobWF4RGF5VGV4dFNpemUud2lkdGgsIG1heERheVRleHRTaXplLmhlaWdodCkgKiByYXRpb0NlbGxUb1RleHQ7XHJcbiAgICBsZXQgZG90UmFkaXVzID0gKChjZWxsU2l6ZSAvIHJhdGlvQ2VsbFRvVGV4dCkgKiByYXRpb0RvdFRvVGV4dCkgLyAyLjA7XHJcblxyXG4gICAgbGV0IGhlYWRlclllYXJUZXh0ID0gY3VyTW9udGhEYXRlLmZvcm1hdChcIllZWVlcIik7XHJcbiAgICBsZXQgaGVhZGVyTW9udGhUZXh0ID0gY3VyTW9udGhEYXRlLmZvcm1hdChcIk1NTVwiKTtcclxuICAgIGxldCBoZWFkZXJZZWFyU2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXHJcbiAgICAgICAgaGVhZGVyWWVhclRleHQsXHJcbiAgICAgICAgXCJ0cmFja2VyLW1vbnRoLWhlYWRlci15ZWFyXCJcclxuICAgICk7XHJcbiAgICBsZXQgaGVhZGVyTW9udGhTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcclxuICAgICAgICBoZWFkZXJNb250aFRleHQsXHJcbiAgICAgICAgXCJ0cmFja2VyLW1vbnRoLWhlYWRlci1tb250aFwiXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBoZWFkZXJIZWlnaHQgPSAwO1xyXG4gICAgbGV0IHlTcGFjaW5nID0gODtcclxuXHJcbiAgICAvLyBBcHBlbmQgaGVhZGVyIGdyb3VwXHJcbiAgICBsZXQgaGVhZGVyR3JvdXAgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYS5hcHBlbmQoXCJnXCIpO1xyXG5cclxuICAgIC8vIGhhZWRlciBtb250aFxyXG4gICAgbGV0IGhlYWRlck1vbnRoQ29sb3IgPSBudWxsO1xyXG4gICAgaWYgKG1vbnRoSW5mby5oZWFkZXJNb250aENvbG9yKSB7XHJcbiAgICAgICAgaGVhZGVyTW9udGhDb2xvciA9IG1vbnRoSW5mby5oZWFkZXJNb250aENvbG9yO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAobW9udGhJbmZvLmNvbG9yKSB7XHJcbiAgICAgICAgICAgIGhlYWRlck1vbnRoQ29sb3IgPSBtb250aEluZm8uY29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGhlYWRlck1vbnRoID0gaGVhZGVyR3JvdXBcclxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAgIC50ZXh0KGhlYWRlck1vbnRoVGV4dCkgLy8gcGl2b3QgYXQgY2VudGVyXHJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcInRpdGxlTW9udGhcIilcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcclxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgKyBjZWxsU2l6ZSAvIDQuMCArIFwiLFwiICsgaGVhZGVyTW9udGhTaXplLmhlaWdodCArIFwiKVwiXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLWhlYWRlci1tb250aFwiKVxyXG4gICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIilcclxuICAgICAgICAub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgICAgICBjbGVhclNlbGVjdGlvbihjaGFydEVsZW1lbnRzLCBtb250aEluZm8pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIGlmIChoZWFkZXJNb250aENvbG9yKSB7XHJcbiAgICAgICAgaGVhZGVyTW9udGguc3R5bGUoXCJmaWxsXCIsIGhlYWRlck1vbnRoQ29sb3IpO1xyXG4gICAgfVxyXG4gICAgaGVhZGVySGVpZ2h0ICs9IGhlYWRlck1vbnRoU2l6ZS5oZWlnaHQ7XHJcblxyXG4gICAgLy8gaGVhZGVyIHllYXJcclxuICAgIGxldCBoZWFkZXJZZWFyQ29sb3IgPSBudWxsO1xyXG4gICAgaWYgKG1vbnRoSW5mby5oZWFkZXJZZWFyQ29sb3IpIHtcclxuICAgICAgICBoZWFkZXJZZWFyQ29sb3IgPSBtb250aEluZm8uaGVhZGVyWWVhckNvbG9yO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAobW9udGhJbmZvLmNvbG9yKSB7XHJcbiAgICAgICAgICAgIGhlYWRlclllYXJDb2xvciA9IG1vbnRoSW5mby5jb2xvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgaGVhZGVyWWVhciA9IGhlYWRlckdyb3VwXHJcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcclxuICAgICAgICAudGV4dChoZWFkZXJZZWFyVGV4dCkgLy8gcGl2b3QgYXQgY2VudGVyXHJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcInRpdGxlWWVhclwiKVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxyXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXHJcbiAgICAgICAgICAgICAgICBjZWxsU2l6ZSAvIDQuMCArXHJcbiAgICAgICAgICAgICAgICBcIixcIiArXHJcbiAgICAgICAgICAgICAgICAoaGVhZGVySGVpZ2h0ICsgaGVhZGVyWWVhclNpemUuaGVpZ2h0KSArXHJcbiAgICAgICAgICAgICAgICBcIilcIlxyXG4gICAgICAgIClcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC1oZWFkZXIteWVhclwiKVxyXG4gICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIilcclxuICAgICAgICAuYXR0cihcImZvbnQtd2VpZ2h0XCIsIFwiYm9sZFwiKVxyXG4gICAgICAgIC5vbihcImNsaWNrXCIsIGZ1bmN0aW9uIChldmVudDogYW55KSB7XHJcbiAgICAgICAgICAgIGNsZWFyU2VsZWN0aW9uKGNoYXJ0RWxlbWVudHMsIG1vbnRoSW5mbyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgaWYgKGhlYWRlclllYXJDb2xvcikge1xyXG4gICAgICAgIGhlYWRlclllYXIuc3R5bGUoXCJmaWxsXCIsIGhlYWRlclllYXJDb2xvcik7XHJcbiAgICB9XHJcblxyXG4gICAgaGVhZGVySGVpZ2h0ICs9IGhlYWRlclllYXJTaXplLmhlaWdodDtcclxuXHJcbiAgICAvLyBkYXRhc2V0IHJvdGF0b3JcclxuICAgIGxldCBkYXRhc2V0TmFtZVNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKFxyXG4gICAgICAgIGRhdGFzZXROYW1lLFxyXG4gICAgICAgIFwidHJhY2tlci1tb250aC10aXRsZS1yb3RhdG9yXCJcclxuICAgICk7XHJcbiAgICBpZiAoXHJcbiAgICAgICAgbW9udGhJbmZvLm1vZGUgPT09IFwiY2lyY2xlXCIgfHxcclxuICAgICAgICAobW9udGhJbmZvLm1vZGUgPT09IFwiYW5ub3RhdGlvblwiICYmXHJcbiAgICAgICAgICAgICFtb250aEluZm8uc2hvd0Fubm90YXRpb25PZkFsbFRhcmdldHMpXHJcbiAgICApIHtcclxuICAgICAgICBsZXQgZGF0YXNldFJvdGF0b3IgPSBoZWFkZXJHcm91cFxyXG4gICAgICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAgICAgICAudGV4dChkYXRhc2V0TmFtZSlcclxuICAgICAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxyXG4gICAgICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xyXG4gICAgICAgICAgICAgICAgICAgIDMuNSAqIGNlbGxTaXplICtcclxuICAgICAgICAgICAgICAgICAgICBcIixcIiArXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldE5hbWVTaXplLmhlaWdodCArXHJcbiAgICAgICAgICAgICAgICAgICAgXCIpXCJcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC10aXRsZS1yb3RhdG9yXCIpXHJcbiAgICAgICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcInBvaW50ZXJcIilcclxuICAgICAgICAgICAgLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICAgICAgICAgIC8vIHNob3cgbmV4dCB0YXJnZXRcclxuICAgICAgICAgICAgICAgIGlmICh0b05leHREYXRhc2V0KHJlbmRlckluZm8sIG1vbnRoSW5mbykpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjbGVhciBjaXJjbGVzXHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb24oY2hhcnRFbGVtZW50cywgbW9udGhJbmZvKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb250aEluZm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1ck1vbnRoRGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIGNoYXJ0RWxlbWVudHNbXCJyb3RhdG9yXCJdID0gZGF0YXNldFJvdGF0b3I7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdmFsdWUgbW9uaXRvclxyXG4gICAgbGV0IG1vbml0b3JUZXh0U2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXHJcbiAgICAgICAgXCIwLjAwMDBcIixcclxuICAgICAgICBcInRyYWNrZXItbW9udGgtdGl0bGUtbW9uaXRvclwiXHJcbiAgICApO1xyXG4gICAgbGV0IG1vbml0b3IgPSBoZWFkZXJHcm91cFxyXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgLnRleHQoXCJcIilcclxuICAgICAgICAuYXR0cihcImlkXCIsIFwibW9uaXRvclwiKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLXRpdGxlLW1vbml0b3JcIilcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcclxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xyXG4gICAgICAgICAgICAgICAgMy41ICogY2VsbFNpemUgK1xyXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xyXG4gICAgICAgICAgICAgICAgKGRhdGFzZXROYW1lU2l6ZS5oZWlnaHQgKyBtb25pdG9yVGV4dFNpemUuaGVpZ2h0KSArXHJcbiAgICAgICAgICAgICAgICBcIilcIlxyXG4gICAgICAgIClcclxuICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJwb2ludGVyXCIpXHJcbiAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBtb250aEluZm8uc2VsZWN0ZWRSaW5nQ29sb3IpO1xyXG4gICAgY2hhcnRFbGVtZW50c1tcIm1vbml0b3JcIl0gPSBtb25pdG9yO1xyXG5cclxuICAgIC8vIGFycm93IGxlZnRcclxuICAgIGxldCBhcnJvd1NpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKFwiPFwiLCBcInRyYWNrZXItbW9udGgtdGl0bGUtYXJyb3dcIik7XHJcbiAgICBsZXQgYXJyb3dMZWZ0ID0gaGVhZGVyR3JvdXBcclxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAgIC50ZXh0KFwiPFwiKSAvLyBwaXZvdCBhdCBjZW50ZXJcclxuICAgICAgICAuYXR0cihcImlkXCIsIFwiYXJyb3dMZWZ0XCIpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXHJcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcclxuICAgICAgICAgICAgICAgIDUuNSAqIGNlbGxTaXplICtcclxuICAgICAgICAgICAgICAgIFwiLFwiICtcclxuICAgICAgICAgICAgICAgIChoZWFkZXJIZWlnaHQgLyAyICsgYXJyb3dTaXplLmhlaWdodCAvIDIpICtcclxuICAgICAgICAgICAgICAgIFwiKVwiXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLXRpdGxlLWFycm93XCIpXHJcbiAgICAgICAgLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJsZWZ0IGFycm93IGNsaWNrZWRcIik7XHJcbiAgICAgICAgICAgIGNsZWFyU2VsZWN0aW9uKGNoYXJ0RWxlbWVudHMsIG1vbnRoSW5mbyk7XHJcbiAgICAgICAgICAgIG1vbnRoSW5mby5zZWxlY3RlZERhdGUgPSBcIlwiO1xyXG4gICAgICAgICAgICBsZXQgcHJldk1vbnRoRGF0ZSA9IGN1ck1vbnRoRGF0ZS5jbG9uZSgpLmFkZCgtMSwgXCJtb250aFwiKTtcclxuICAgICAgICAgICAgcmVmcmVzaChcclxuICAgICAgICAgICAgICAgIGNhbnZhcyxcclxuICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMsXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLFxyXG4gICAgICAgICAgICAgICAgbW9udGhJbmZvLFxyXG4gICAgICAgICAgICAgICAgcHJldk1vbnRoRGF0ZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwicG9pbnRlclwiKTtcclxuXHJcbiAgICAvLyBhcnJvdyByaWdodFxyXG4gICAgbGV0IGFycm93UmlnaHQgPSBoZWFkZXJHcm91cFxyXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgLnRleHQoXCI+XCIpIC8vIHBpdm90IGF0IGNlbnRlclxyXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJhcnJvd0xlZnRcIilcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcclxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xyXG4gICAgICAgICAgICAgICAgNi41ICogY2VsbFNpemUgK1xyXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xyXG4gICAgICAgICAgICAgICAgKGhlYWRlckhlaWdodCAvIDIgKyBhcnJvd1NpemUuaGVpZ2h0IC8gMikgK1xyXG4gICAgICAgICAgICAgICAgXCIpXCJcclxuICAgICAgICApXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbW9udGgtdGl0bGUtYXJyb3dcIilcclxuICAgICAgICAub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInJpZ2h0IGFycm93IGNsaWNrZWRcIik7XHJcbiAgICAgICAgICAgIGNsZWFyU2VsZWN0aW9uKGNoYXJ0RWxlbWVudHMsIG1vbnRoSW5mbyk7XHJcblxyXG4gICAgICAgICAgICBsZXQgbmV4dE1vbnRoRGF0ZSA9IGN1ck1vbnRoRGF0ZS5jbG9uZSgpLmFkZCgxLCBcIm1vbnRoXCIpO1xyXG4gICAgICAgICAgICByZWZyZXNoKFxyXG4gICAgICAgICAgICAgICAgY2FudmFzLFxyXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cyxcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXHJcbiAgICAgICAgICAgICAgICBtb250aEluZm8sXHJcbiAgICAgICAgICAgICAgICBuZXh0TW9udGhEYXRlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJwb2ludGVyXCIpO1xyXG5cclxuICAgIC8vIGFycm93IHRvZGF5XHJcbiAgICBsZXQgYXJyb3dUb2RheSA9IGhlYWRlckdyb3VwXHJcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcclxuICAgICAgICAudGV4dChcIuKXplwiKSAvLyBwaXZvdCBhdCBjZW50ZXJcclxuICAgICAgICAuYXR0cihcImlkXCIsIFwiYXJyb3dUb2RheVwiKVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxyXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXHJcbiAgICAgICAgICAgICAgICA2ICogY2VsbFNpemUgK1xyXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xyXG4gICAgICAgICAgICAgICAgKGhlYWRlckhlaWdodCAvIDIgKyBhcnJvd1NpemUuaGVpZ2h0IC8gMikgK1xyXG4gICAgICAgICAgICAgICAgXCIpXCJcclxuICAgICAgICApXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbW9udGgtdGl0bGUtYXJyb3dcIilcclxuICAgICAgICAub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInRvZGF5IGFycm93IGNsaWNrZWRcIik7XHJcbiAgICAgICAgICAgIGNsZWFyU2VsZWN0aW9uKGNoYXJ0RWxlbWVudHMsIG1vbnRoSW5mbyk7XHJcblxyXG4gICAgICAgICAgICBsZXQgdG9kYXlEYXRlID0gaGVscGVyLmdldERhdGVUb2RheShyZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xyXG4gICAgICAgICAgICByZWZyZXNoKGNhbnZhcywgY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbW9udGhJbmZvLCB0b2RheURhdGUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwicG9pbnRlclwiKTtcclxuXHJcbiAgICBoZWFkZXJIZWlnaHQgKz0geVNwYWNpbmc7XHJcblxyXG4gICAgLy8gd2VlayBkYXkgbmFtZXNcclxuICAgIGxldCB3ZWVrZGF5TmFtZXMgPSBbXCJTdW5cIiwgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIl07XHJcbiAgICBpZiAobW9udGhJbmZvLnN0YXJ0V2Vla09uLnRvTG93ZXJDYXNlKCkgPT09IFwibW9uXCIpIHtcclxuICAgICAgICB3ZWVrZGF5TmFtZXMucHVzaCh3ZWVrZGF5TmFtZXMuc2hpZnQoKSk7XHJcbiAgICB9XHJcbiAgICBsZXQgd2Vla2RheU5hbWVTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcclxuICAgICAgICB3ZWVrZGF5TmFtZXNbMF0sXHJcbiAgICAgICAgXCJ0cmFja2VyLW1vbnRoLXdlZWtkYXlcIlxyXG4gICAgKTtcclxuICAgIGxldCB3ZWVrRGF5cyA9IGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhXHJcbiAgICAgICAgLnNlbGVjdEFsbChcIndlZWtEYXlzXCIpXHJcbiAgICAgICAgLmRhdGEod2Vla2RheU5hbWVzKVxyXG4gICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcclxuICAgICAgICAudGV4dChmdW5jdGlvbiAobjogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24gKG46IHN0cmluZywgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgIGxldCBzdHJUcmFuc2xhdGUgPVxyXG4gICAgICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xyXG4gICAgICAgICAgICAgICAgKGkgKyAwLjUpICogY2VsbFNpemUgK1xyXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xyXG4gICAgICAgICAgICAgICAgKGhlYWRlckhlaWdodCArIHdlZWtkYXlOYW1lU2l6ZS5oZWlnaHQpICtcclxuICAgICAgICAgICAgICAgIFwiKVwiO1xyXG4gICAgICAgICAgICByZXR1cm4gc3RyVHJhbnNsYXRlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbW9udGgtd2Vla2RheVwiKVxyXG4gICAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIilcclxuICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJkZWZhdWx0XCIpXHJcbiAgICAgICAgLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb24oY2hhcnRFbGVtZW50cywgbW9udGhJbmZvKTtcclxuICAgICAgICB9KTtcclxuICAgIGhlYWRlckhlaWdodCArPSB3ZWVrZGF5TmFtZVNpemUuaGVpZ2h0ICsgeVNwYWNpbmc7XHJcblxyXG4gICAgLy8gZGl2aWRpbmcgbGluZVxyXG4gICAgbGV0IGRpdmlkaW5nTGluZUhlaWdodCA9IDE7XHJcbiAgICBsZXQgZGl2aWRpbmdMaW5lQ29sb3IgPSBudWxsO1xyXG4gICAgaWYgKG1vbnRoSW5mby5kaXZpZGluZ0xpbmVDb2xvcikge1xyXG4gICAgICAgIGRpdmlkaW5nTGluZUNvbG9yID0gbW9udGhJbmZvLmRpdmlkaW5nTGluZUNvbG9yO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAobW9udGhJbmZvLmNvbG9yKSB7XHJcbiAgICAgICAgICAgIGRpdmlkaW5nTGluZUNvbG9yID0gbW9udGhJbmZvLmNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBkaXZpZGluZ0xpbmUgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYVxyXG4gICAgICAgIC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgICAgLmF0dHIoXCJ4XCIsIDApXHJcbiAgICAgICAgLmF0dHIoXCJ5XCIsIGhlYWRlckhlaWdodClcclxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIDYuNSAqIGNlbGxTaXplICsgd2Vla2RheU5hbWVTaXplLndpZHRoKVxyXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGRpdmlkaW5nTGluZUhlaWdodClcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC1kaXZpZGluZy1saW5lXCIpO1xyXG5cclxuICAgIGlmIChkaXZpZGluZ0xpbmVDb2xvcikge1xyXG4gICAgICAgIGRpdmlkaW5nTGluZS5zdHlsZShcImZpbGxcIiwgZGl2aWRpbmdMaW5lQ29sb3IpO1xyXG4gICAgfVxyXG4gICAgaGVhZGVySGVpZ2h0ICs9IGRpdmlkaW5nTGluZUhlaWdodDtcclxuXHJcbiAgICBoZWFkZXJHcm91cC5hdHRyKFwiaGVpZ2h0XCIsIGhlYWRlckhlaWdodCk7XHJcbiAgICBjaGFydEVsZW1lbnRzW1wiaGVhZGVyXCJdID0gaGVhZGVyR3JvdXA7XHJcblxyXG4gICAgLy8gTW92ZSBzaWJsaW5nIGFyZWFzXHJcbiAgICBoZWxwZXIubW92ZUFyZWEoY2hhcnRFbGVtZW50cy5kYXRhQXJlYSwgMCwgaGVhZGVySGVpZ2h0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVuZGVyTW9udGhEYXlzKFxyXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgbW9udGhJbmZvOiBNb250aEluZm8sXHJcbiAgICBjdXJNb250aERhdGU6IE1vbWVudFxyXG4pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyTW9udGhEYXlzXCIpO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhtb250aEluZm8pO1xyXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFtb250aEluZm8pIHJldHVybjtcclxuXHJcbiAgICBsZXQgbW9kZSA9IG1vbnRoSW5mby5tb2RlO1xyXG4gICAgaWYgKG1vZGUgIT09IFwiY2lyY2xlXCIgJiYgbW9kZSAhPT0gXCJhbm5vdGF0aW9uXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJVbmtub3duIG1vbnRoIHZpZXcgbW9kZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjdXJEYXRhc2V0SWQgPSBtb250aEluZm8uc2VsZWN0ZWREYXRhc2V0O1xyXG4gICAgaWYgKGN1ckRhdGFzZXRJZCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgbGV0IGRhdGFzZXQgPSByZW5kZXJJbmZvLmRhdGFzZXRzLmdldERhdGFzZXRCeUlkKGN1ckRhdGFzZXRJZCk7XHJcbiAgICBpZiAoIWRhdGFzZXQpIHJldHVybjtcclxuICAgIC8vIGNvbnNvbGUubG9nKGRhdGFzZXQpO1xyXG5cclxuICAgIGxldCBjdXJEYXRhc2V0SW5kZXggPSBtb250aEluZm8uZGF0YXNldC5maW5kSW5kZXgoKGlkKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGlkID09PSBjdXJEYXRhc2V0SWQ7XHJcbiAgICB9KTtcclxuICAgIGlmIChjdXJEYXRhc2V0SWQgPCAwKSBjdXJEYXRhc2V0SW5kZXggPSAwO1xyXG4gICAgbGV0IHRocmVzaG9sZCA9IG1vbnRoSW5mby50aHJlc2hvbGRbY3VyRGF0YXNldEluZGV4XTtcclxuXHJcbiAgICBsZXQgY3VyTW9udGggPSBjdXJNb250aERhdGUubW9udGgoKTsgLy8gMH4xMVxyXG4gICAgbGV0IGN1ckRheXNJbk1vbnRoID0gY3VyTW9udGhEYXRlLmRheXNJbk1vbnRoKCk7IC8vIDI4fjMxXHJcblxyXG4gICAgbGV0IG1heERheVRleHRTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcIjMwXCIsIFwidHJhY2tlci1tb250aC1sYWJlbFwiKTtcclxuICAgIGxldCBjZWxsU2l6ZSA9XHJcbiAgICAgICAgTWF0aC5tYXgobWF4RGF5VGV4dFNpemUud2lkdGgsIG1heERheVRleHRTaXplLmhlaWdodCkgKiByYXRpb0NlbGxUb1RleHQ7XHJcbiAgICBsZXQgZG90UmFkaXVzID0gKChjZWxsU2l6ZSAvIHJhdGlvQ2VsbFRvVGV4dCkgKiByYXRpb0RvdFRvVGV4dCkgLyAyLjA7XHJcbiAgICBsZXQgc3RyZWFrV2lkdGggPSAoY2VsbFNpemUgLSBkb3RSYWRpdXMgKiAyLjApIC8gMi4wO1xyXG4gICAgbGV0IHN0cmVha0hlaWdodCA9IDM7XHJcblxyXG4gICAgLy8gR2V0IG1pbiBhbmQgbWF4XHJcbiAgICBsZXQgeU1pbiA9IGQzLm1pbihkYXRhc2V0LmdldFZhbHVlcygpKTtcclxuICAgIGlmIChtb250aEluZm8ueU1pbltjdXJEYXRhc2V0SW5kZXhdICE9PSBudWxsKSB7XHJcbiAgICAgICAgeU1pbiA9IG1vbnRoSW5mby55TWluW2N1ckRhdGFzZXRJbmRleF07XHJcbiAgICB9XHJcbiAgICBsZXQgeU1heCA9IGQzLm1heChkYXRhc2V0LmdldFZhbHVlcygpKTtcclxuICAgIGlmIChtb250aEluZm8ueU1heFtjdXJEYXRhc2V0SW5kZXhdICE9PSBudWxsKSB7XHJcbiAgICAgICAgeU1heCA9IG1vbnRoSW5mby55TWF4W2N1ckRhdGFzZXRJbmRleF07XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhgeU1pbjoke3lNaW59LCB5TWF4OiR7eU1heH1gKTtcclxuICAgIGxldCBhbGxvd1NjYWxlZFZhbHVlID0gdHJ1ZTtcclxuICAgIGlmICh5TWF4ID09PSBudWxsIHx8IHlNaW4gPT09IG51bGwgfHwgeU1heCA8PSB5TWluKSB7XHJcbiAgICAgICAgLy8gc2NhbGVkVmFsdWUgY2FuIG5vdCBiZSBjYWxjdWxhdGVkLCBkbyBub3QgdXNlIGdyYWRpZW50IGNvbG9yXHJcbiAgICAgICAgYWxsb3dTY2FsZWRWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwic2NhbGVkVmFsdWUgbm90IGFsbG93ZWRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU3RhcnQgYW5kIGVuZFxyXG4gICAgY29uc3QgbW9udGhTdGFydERhdGUgPSBjdXJNb250aERhdGUuY2xvbmUoKS5zdGFydE9mKFwibW9udGhcIik7XHJcbiAgICBsZXQgc3RhcnREYXRlID0gbW9udGhTdGFydERhdGVcclxuICAgICAgICAuY2xvbmUoKVxyXG4gICAgICAgIC5zdWJ0cmFjdChtb250aFN0YXJ0RGF0ZS5kYXkoKSwgXCJkYXlzXCIpO1xyXG4gICAgaWYgKG1vbnRoSW5mby5zdGFydFdlZWtPbi50b0xvd2VyQ2FzZSgpID09PSBcIm1vblwiKSB7XHJcbiAgICAgICAgc3RhcnREYXRlID0gc3RhcnREYXRlLmFkZCgxLCBcImRheXNcIik7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtb250aEVuZERhdGUgPSBjdXJNb250aERhdGUuY2xvbmUoKS5lbmRPZihcIm1vbnRoXCIpO1xyXG4gICAgbGV0IGVuZERhdGUgPSBtb250aEVuZERhdGUuY2xvbmUoKS5hZGQoNyAtIG1vbnRoRW5kRGF0ZS5kYXkoKSAtIDEsIFwiZGF5c1wiKTtcclxuICAgIGlmIChtb250aEluZm8uc3RhcnRXZWVrT24udG9Mb3dlckNhc2UoKSA9PT0gXCJtb25cIikge1xyXG4gICAgICAgIGVuZERhdGUgPSBlbmREYXRlLmFkZCgxLCBcImRheXNcIik7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRhU3RhcnREYXRlID0gZGF0YXNldC5nZXRTdGFydERhdGUoKTtcclxuICAgIGNvbnN0IGRhdGFFbmREYXRlID0gZGF0YXNldC5nZXRFbmREYXRlKCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhtb250aFN0YXJ0RGF0ZS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHN0YXJ0RGF0ZS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpKTtcclxuXHJcbiAgICAvLyBhbm5vdGF0aW9uc1xyXG4gICAgbGV0IHNob3dBbm5vdGF0aW9uID0gbW9udGhJbmZvLnNob3dBbm5vdGF0aW9uO1xyXG4gICAgbGV0IGFubm90YXRpb25zID0gbW9udGhJbmZvLmFubm90YXRpb247XHJcbiAgICBsZXQgY3VyQW5ub3RhdGlvbiA9IGFubm90YXRpb25zW2N1ckRhdGFzZXRJbmRleF07XHJcbiAgICBsZXQgc2hvd0Fubm90YXRpb25PZkFsbFRhcmdldHMgPSBtb250aEluZm8uc2hvd0Fubm90YXRpb25PZkFsbFRhcmdldHM7XHJcblxyXG4gICAgLy8gUHJlcGFyZSBkYXRhIGZvciBncmFwaFxyXG4gICAgbGV0IGRheXNJbk1vbnRoVmlldzogQXJyYXk8RGF5SW5mbz4gPSBbXTtcclxuICAgIGxldCBpbmRDb2wgPSAwO1xyXG4gICAgbGV0IGluZFJvdyA9IDA7XHJcbiAgICBsZXQgaW5kID0gMDtcclxuICAgIGZvciAoXHJcbiAgICAgICAgbGV0IGN1ckRhdGUgPSBzdGFydERhdGUuY2xvbmUoKTtcclxuICAgICAgICBjdXJEYXRlIDw9IGVuZERhdGU7XHJcbiAgICAgICAgY3VyRGF0ZS5hZGQoMSwgXCJkYXlzXCIpXHJcbiAgICApIHtcclxuICAgICAgICAvLyBub3Qgc3VyZSB3aHkgd2UgbmVlZCB0byBkbyB0aGlzIHRvIHN0YWJsaXplIHRoZSBkYXRlXHJcbiAgICAgICAgLy8gc29tZXRpbWVzLCBjdXJWYWx1ZSBpcyB3cm9uZyB3aXRob3V0IGRvaW5nIHRoaXNcclxuICAgICAgICBjdXJEYXRlID0gaGVscGVyLnN0clRvRGF0ZShcclxuICAgICAgICAgICAgaGVscGVyLmRhdGVUb1N0cihjdXJEYXRlLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpLFxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChjdXJEYXRlLmZvcm1hdChcIllZWVktTU0tRERcIikgPT09IFwiMjAyMS0wOS0xM1wiKSB7XHJcbiAgICAgICAgICAgIGxvZ1RvQ29uc29sZSA9IGZhbHNlOyAvLyBDaGFuZ2UgdGhpcyB0byBkbyBkdWJ1Z2dpbmdcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtb250aEluZm8uc3RhcnRXZWVrT24udG9Mb3dlckNhc2UoKSA9PT0gXCJtb25cIikge1xyXG4gICAgICAgICAgICBpbmRDb2wgPSBjdXJEYXRlLmRheSgpIC0gMTtcclxuICAgICAgICAgICAgaWYgKGluZENvbCA8IDApIHtcclxuICAgICAgICAgICAgICAgIGluZENvbCA9IDY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW5kUm93ID0gTWF0aC5mbG9vcihpbmQgLyA3KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbmRDb2wgPSBjdXJEYXRlLmRheSgpOyAvLyAwfjZcclxuICAgICAgICAgICAgaW5kUm93ID0gTWF0aC5mbG9vcihpbmQgLyA3KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGlzIHRoaXMgZGF5IGluIHRoaXMgbW9udGhcclxuICAgICAgICBsZXQgaXNJblRoaXNNb250aCA9IHRydWU7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBjdXJEYXRlLmRpZmYobW9udGhTdGFydERhdGUpIDwgMCB8fFxyXG4gICAgICAgICAgICBjdXJEYXRlLmRpZmYobW9udGhFbmREYXRlKSA+IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaXNJblRoaXNNb250aCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpcyB0aGlzIGRheSBvdXQgb2YgZGF0YSByYW5nZVxyXG4gICAgICAgIGxldCBpc091dE9mRGF0YVJhbmdlID0gdHJ1ZTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGRhdGFTdGFydERhdGUgJiZcclxuICAgICAgICAgICAgZGF0YUVuZERhdGUgJiZcclxuICAgICAgICAgICAgY3VyRGF0ZS5kaWZmKGRhdGFTdGFydERhdGUpID49IDAgJiZcclxuICAgICAgICAgICAgY3VyRGF0ZS5kaWZmKGRhdGFFbmREYXRlKSA8PSAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlzT3V0T2ZEYXRhUmFuZ2UgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGN1clZhbHVlID0gZGF0YXNldC5nZXRWYWx1ZShjdXJEYXRlKTtcclxuICAgICAgICBpZiAobG9nVG9Db25zb2xlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGFzZXQpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhoZWxwZXIuZGF0ZVRvU3RyKGN1ckRhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCkpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjdXJWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzaG93Q2lyY2xlXHJcbiAgICAgICAgbGV0IHNob3dDaXJjbGUgPSBmYWxzZTtcclxuICAgICAgICBpZiAoIW1vbnRoSW5mby5jaXJjbGVDb2xvckJ5VmFsdWUpIHtcclxuICAgICAgICAgICAgLy8gc2hvd24gb3Igbm90IHNob3duXHJcbiAgICAgICAgICAgIGlmIChjdXJWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1clZhbHVlID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd0NpcmNsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIWFsbG93U2NhbGVkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJWYWx1ZSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93Q2lyY2xlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzaG93Q2lyY2xlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2NhbGVkVmFsdWVcclxuICAgICAgICBsZXQgc2NhbGVkVmFsdWUgPSBudWxsO1xyXG4gICAgICAgIGlmIChtb250aEluZm8uY2lyY2xlQ29sb3JCeVZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmIChhbGxvd1NjYWxlZFZhbHVlICYmIGN1clZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBzY2FsZWRWYWx1ZSA9IChjdXJWYWx1ZSAtIHlNaW4pIC8gKHlNYXggLSB5TWluKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobG9nVG9Db25zb2xlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHlNaW4pO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh5TWF4KTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coc2NhbGVkVmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc3RyZWFrSW4gYW5kIHN0cmVha091dFxyXG4gICAgICAgIGxldCBuZXh0VmFsdWUgPSBkYXRhc2V0LmdldFZhbHVlKGN1ckRhdGUsIDEpO1xyXG4gICAgICAgIGxldCBwcmV2VmFsdWUgPSBkYXRhc2V0LmdldFZhbHVlKGN1ckRhdGUsIC0xKTtcclxuICAgICAgICBsZXQgc3RyZWFrSW4gPSBmYWxzZTtcclxuICAgICAgICBpZiAoY3VyVmFsdWUgIT09IG51bGwgJiYgY3VyVmFsdWUgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgaWYgKHByZXZWYWx1ZSAhPT0gbnVsbCAmJiBwcmV2VmFsdWUgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgICAgIHN0cmVha0luID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3RyZWFrT3V0ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGN1clZhbHVlICE9PSBudWxsICYmIGN1clZhbHVlID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgIGlmIChuZXh0VmFsdWUgIT09IG51bGwgJiYgbmV4dFZhbHVlID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgICAgICBzdHJlYWtPdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsb2dUb0NvbnNvbGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICBgcHJlVmFsdWU6ICR7cHJldlZhbHVlfSwgY3VyVmFsdWU6ICR7Y3VyVmFsdWV9LCBuZXh0VmFsdWU6ICR7bmV4dFZhbHVlfWBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cobW9udGhJbmZvLnRocmVzaG9sZCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBzdHJlYWtJbjogJHtzdHJlYWtJbn0sIHN0cmVha091dDogJHtzdHJlYWtPdXR9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdGV4dEFubm90YXRpb24gPSBcIlwiO1xyXG4gICAgICAgIGlmIChzaG93QW5ub3RhdGlvbikge1xyXG4gICAgICAgICAgICBpZiAoIXNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VyVmFsdWUgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0QW5ub3RhdGlvbiA9IGN1ckFubm90YXRpb247XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBkYXRhc2V0SWQgb2YgbW9udGhJbmZvLmRhdGFzZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YXNldEluZGV4ID0gbW9udGhJbmZvLmRhdGFzZXQuZmluZEluZGV4KChpZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWQgPT09IGRhdGFzZXRJZDtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YXNldEluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSByZW5kZXJJbmZvLmRhdGFzZXRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFZhbHVlKGN1ckRhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdCA9IG1vbnRoSW5mby50aHJlc2hvbGRbZGF0YXNldEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgIT09IG51bGwgJiYgdiA+IHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbm5vdGF0aW9uICs9IGFubm90YXRpb25zW2RhdGFzZXRJbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRheXNJbk1vbnRoVmlldy5wdXNoKHtcclxuICAgICAgICAgICAgZGF0ZTogaGVscGVyLmRhdGVUb1N0cihjdXJEYXRlLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpLFxyXG4gICAgICAgICAgICB2YWx1ZTogY3VyVmFsdWUsXHJcbiAgICAgICAgICAgIHNjYWxlZFZhbHVlOiBzY2FsZWRWYWx1ZSxcclxuICAgICAgICAgICAgZGF5SW5Nb250aDogY3VyRGF0ZS5kYXRlKCksXHJcbiAgICAgICAgICAgIGlzSW5UaGlzTW9udGg6IGlzSW5UaGlzTW9udGgsXHJcbiAgICAgICAgICAgIGlzT3V0T2ZEYXRhUmFuZ2U6IGlzT3V0T2ZEYXRhUmFuZ2UsXHJcbiAgICAgICAgICAgIHJvdzogaW5kUm93LFxyXG4gICAgICAgICAgICBjb2w6IGluZENvbCxcclxuICAgICAgICAgICAgc2hvd0NpcmNsZTogc2hvd0NpcmNsZSxcclxuICAgICAgICAgICAgc3RyZWFrSW46IHN0cmVha0luLFxyXG4gICAgICAgICAgICBzdHJlYWtPdXQ6IHN0cmVha091dCxcclxuICAgICAgICAgICAgYW5ub3RhdGlvbjogdGV4dEFubm90YXRpb24sXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGluZCsrO1xyXG5cclxuICAgICAgICAvLyBEaXNhYmxlIGxvZ2dpbmcgc3RhcnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBsb29wXHJcbiAgICAgICAgaWYgKGxvZ1RvQ29uc29sZSkge1xyXG4gICAgICAgICAgICBsb2dUb0NvbnNvbGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhkYXlzSW5Nb250aFZpZXcpO1xyXG4gICAgLy8gY29uc29sZS5sb2coZGF5c0luTW9udGhWaWV3LmZpbHRlcihmdW5jdGlvbiAoZDogRGF5SW5mbykge1xyXG4gICAgLy8gICAgIHJldHVybiBkLnN0cmVha0luO1xyXG4gICAgLy8gfSkpO1xyXG4gICAgLy8gY29uc29sZS5sb2coZGF5c0luTW9udGhWaWV3LmZpbHRlcihmdW5jdGlvbiAoZDogRGF5SW5mbykge1xyXG4gICAgLy8gICAgIHJldHVybiBkLnN0cmVha091dDtcclxuICAgIC8vIH0pKTtcclxuXHJcbiAgICAvLyBzY2FsZVxyXG4gICAgbGV0IHRvdGFsRGF5QmxvY2tXaWR0aCA9IChpbmRDb2wgKyAxKSAqIGNlbGxTaXplO1xyXG4gICAgbGV0IHRvdGFsQmxvY2tIZWlnaHQgPSAoaW5kUm93ICsgMSkgKiBjZWxsU2l6ZTtcclxuICAgIGxldCBzY2FsZSA9IGQzXHJcbiAgICAgICAgLnNjYWxlTGluZWFyKClcclxuICAgICAgICAuZG9tYWluKFstMC41LCA2LjVdKVxyXG4gICAgICAgIC5yYW5nZShbMCwgdG90YWxEYXlCbG9ja1dpZHRoXSk7XHJcblxyXG4gICAgLy8gc3RyZWFrIGxpbmVzXHJcbiAgICBpZiAobW9kZSA9PT0gXCJjaXJjbGVcIiAmJiBtb250aEluZm8uc2hvd0NpcmNsZSAmJiBtb250aEluZm8uc2hvd1N0cmVhaykge1xyXG4gICAgICAgIGxldCBzdHJlYWtDb2xvciA9IFwiIzY5YjNhMlwiO1xyXG4gICAgICAgIGlmIChtb250aEluZm8uY2lyY2xlQ29sb3IpIHtcclxuICAgICAgICAgICAgc3RyZWFrQ29sb3IgPSBtb250aEluZm8uY2lyY2xlQ29sb3I7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtb250aEluZm8uY29sb3IpIHtcclxuICAgICAgICAgICAgc3RyZWFrQ29sb3IgPSBtb250aEluZm8uY29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHN0cmVha0NvbG9yKTtcclxuXHJcbiAgICAgICAgY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxyXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwic3RyZWFrSW5cIilcclxuICAgICAgICAgICAgLmRhdGEoXHJcbiAgICAgICAgICAgICAgICBkYXlzSW5Nb250aFZpZXcuZmlsdGVyKGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQuc3RyZWFrSW47XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgICAgICAgIC8vIC5hdHRyKFwiaWRcIiwgZnVuY3Rpb24oZDogRGF5SW5mbykge1xyXG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuIFwiaW5cIiArIGQuZGF0ZS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xyXG4gICAgICAgICAgICAvLyB9KVxyXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgICAgIGxldCB4ID0gc2NhbGUoZC5jb2wpIC0gZG90UmFkaXVzIC0gc3RyZWFrV2lkdGg7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5yb3cpIC0gc3RyZWFrSGVpZ2h0IC8gMi4wO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHN0cmVha1dpZHRoKVxyXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBzdHJlYWtIZWlnaHQpXHJcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgICAgIGlmIChkLnNob3dDaXJjbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW1vbnRoSW5mby5jaXJjbGVDb2xvckJ5VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVha0NvbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZC5zY2FsZWRWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZDMuaW50ZXJwb2xhdGVMYWIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIndoaXRlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYWtDb2xvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICApKGQuc2NhbGVkVmFsdWUgKiAwLjggKyAwLjIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm5vbmVcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJub25lXCI7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdHlsZShcIm9wYWNpdHlcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBkLmlzT3V0T2ZEYXRhUmFuZ2UgfHxcclxuICAgICAgICAgICAgICAgICAgICAobW9udGhJbmZvLmRpbU5vdEluTW9udGggJiYgIWQuaXNJblRoaXNNb250aClcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwLjI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMS4wO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxyXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwic3RyZWFrT3V0XCIpXHJcbiAgICAgICAgICAgIC5kYXRhKFxyXG4gICAgICAgICAgICAgICAgZGF5c0luTW9udGhWaWV3LmZpbHRlcihmdW5jdGlvbiAoZDogRGF5SW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkLnN0cmVha091dDtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgICAgICAgLy8gLmF0dHIoXCJpZFwiLCBmdW5jdGlvbihkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gXCJvdXRcIiArIGQuZGF0ZS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xyXG4gICAgICAgICAgICAvLyB9KVxyXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgICAgIGxldCB4ID0gc2NhbGUoZC5jb2wpICsgZG90UmFkaXVzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHg7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjYWxlKGQucm93KSAtIHN0cmVha0hlaWdodCAvIDIuMDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBzdHJlYWtXaWR0aClcclxuICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgc3RyZWFrSGVpZ2h0KVxyXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZC5zaG93Q2lyY2xlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtb250aEluZm8uY2lyY2xlQ29sb3JCeVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJlYWtDb2xvcjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGQuc2NhbGVkVmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQzLmludGVycG9sYXRlTGFiKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFrQ29sb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKShkLnNjYWxlZFZhbHVlICogMC44ICsgMC4yKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJub25lXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwibm9uZVwiO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3R5bGUoXCJvcGFjaXR5XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZC5pc091dE9mRGF0YVJhbmdlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKG1vbnRoSW5mby5kaW1Ob3RJbk1vbnRoICYmICFkLmlzSW5UaGlzTW9udGgpXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMC4yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDEuMDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2lyY2xlc1xyXG4gICAgbGV0IGNpcmNsZUNvbG9yID0gXCIjNjliM2EyXCI7XHJcbiAgICBpZiAobW9udGhJbmZvLmNpcmNsZUNvbG9yKSB7XHJcbiAgICAgICAgY2lyY2xlQ29sb3IgPSBtb250aEluZm8uY2lyY2xlQ29sb3I7XHJcbiAgICB9IGVsc2UgaWYgKG1vbnRoSW5mby5jb2xvcikge1xyXG4gICAgICAgIGNpcmNsZUNvbG9yID0gbW9udGhJbmZvLmNvbG9yO1xyXG4gICAgfVxyXG4gICAgaWYgKG1vZGUgPT09IFwiY2lyY2xlXCIgJiYgbW9udGhJbmZvLnNob3dDaXJjbGUpIHtcclxuICAgICAgICBsZXQgZG90cyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcclxuICAgICAgICAgICAgLnNlbGVjdEFsbChcImRvdFwiKVxyXG4gICAgICAgICAgICAuZGF0YShkYXlzSW5Nb250aFZpZXcpXHJcbiAgICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoXCJjaXJjbGVcIilcclxuICAgICAgICAgICAgLmF0dHIoXCJyXCIsIGRvdFJhZGl1cylcclxuICAgICAgICAgICAgLmF0dHIoXCJjeFwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjYWxlKGQuY29sKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoXCJjeVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjYWxlKGQucm93KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGQuc2hvd0NpcmNsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbW9udGhJbmZvLmNpcmNsZUNvbG9yQnlWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2lyY2xlQ29sb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkLnNjYWxlZFZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzY2FsZWRDb2xvciA9IGQzLmludGVycG9sYXRlTGFiKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlQ29sb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKShkLnNjYWxlZFZhbHVlICogMC44ICsgMC4yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZC5zY2FsZWRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHNjYWxlZENvbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYWxlZENvbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm5vbmVcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJub25lXCI7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdHlsZShcIm9wYWNpdHlcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBkLmlzT3V0T2ZEYXRhUmFuZ2UgfHxcclxuICAgICAgICAgICAgICAgICAgICAobW9udGhJbmZvLmRpbU5vdEluTW9udGggJiYgIWQuaXNJblRoaXNNb250aClcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwLjI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMS4wO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJkZWZhdWx0XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRvZGF5IHJpbmdzXHJcbiAgICBsZXQgdG9kYXkgPSBoZWxwZXIuZGF0ZVRvU3RyKHdpbmRvdy5tb21lbnQoKSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KTtcclxuICAgIGlmIChtb2RlID09PSBcImNpcmNsZVwiICYmIG1vbnRoSW5mby5zaG93VG9kYXlSaW5nKSB7XHJcbiAgICAgICAgbGV0IHRvZGF5UmluZ3MgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJ0b2RheVJpbmdcIilcclxuICAgICAgICAgICAgLmRhdGEoXHJcbiAgICAgICAgICAgICAgICBkYXlzSW5Nb250aFZpZXcuZmlsdGVyKGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQuZGF0ZSA9PT0gdG9kYXk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoXCJjaXJjbGVcIilcclxuICAgICAgICAgICAgLmF0dHIoXCJyXCIsIGRvdFJhZGl1cyAqIDAuOSlcclxuICAgICAgICAgICAgLmF0dHIoXCJjeFwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjYWxlKGQuY29sKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoXCJjeVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjYWxlKGQucm93KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbW9udGgtdG9kYXktY2lyY2xlXCIpIC8vIHN0cm9rZSBub3Qgd29ya3M/P1xyXG4gICAgICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJkZWZhdWx0XCIpO1xyXG5cclxuICAgICAgICBpZiAobW9udGhJbmZvLnRvZGF5UmluZ0NvbG9yICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIHRvZGF5UmluZ3Muc3R5bGUoXCJzdHJva2VcIiwgbW9udGhJbmZvLnRvZGF5UmluZ0NvbG9yKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0b2RheVJpbmdzLnN0eWxlKFwic3Ryb2tlXCIsIFwid2hpdGVcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHNlbGVjdGVkIHJpbmdzXHJcbiAgICBpZiAobW9kZSA9PT0gXCJjaXJjbGVcIiAmJiBtb250aEluZm8uc2hvd1NlbGVjdGVkUmluZykge1xyXG4gICAgICAgIGxldCBzZWxlY3RlZFJpbmdzID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxyXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwic2VsZWN0ZWRSaW5nXCIpXHJcbiAgICAgICAgICAgIC5kYXRhKGRheXNJbk1vbnRoVmlldylcclxuICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxyXG4gICAgICAgICAgICAuYXR0cihcInJcIiwgZG90UmFkaXVzKVxyXG4gICAgICAgICAgICAuYXR0cihcImN4XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5jb2wpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcImN5XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5yb3cpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcImlkXCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJ0cmFja2VyLXNlbGVjdGVkLWNpcmNsZS1cIiArIGQuZGF0ZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbW9udGgtc2VsZWN0ZWQtY2lyY2xlXCIpIC8vIHN0cm9rZSBub3Qgd29ya3M/P1xyXG4gICAgICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJkZWZhdWx0XCIpXHJcbiAgICAgICAgICAgIC5zdHlsZShcInN0cm9rZVwiLCBcIm5vbmVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbGFiZWxzXHJcbiAgICBsZXQgZGF5TGFiYWxzID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxyXG4gICAgICAgIC5zZWxlY3RBbGwoXCJkYXlMYWJlbFwiKVxyXG4gICAgICAgIC5kYXRhKGRheXNJbk1vbnRoVmlldylcclxuICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQuZGF5SW5Nb250aC50b1N0cmluZygpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgbGV0IHRyYW5zWCA9IHNjYWxlKGQuY29sKTtcclxuICAgICAgICAgICAgbGV0IHRyYW5zWSA9IHNjYWxlKGQucm93KSArIG1heERheVRleHRTaXplLmhlaWdodCAvIDQ7XHJcbiAgICAgICAgICAgIGxldCBzdHJUcmFuc2xhdGUgPSBcInRyYW5zbGF0ZShcIiArIHRyYW5zWCArIFwiLFwiICsgdHJhbnNZICsgXCIpXCI7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gc3RyVHJhbnNsYXRlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0eWxlKFwiZmlsbC1vcGFjaXR5XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGQuaXNPdXRPZkRhdGFSYW5nZSB8fFxyXG4gICAgICAgICAgICAgICAgKG1vbnRoSW5mby5kaW1Ob3RJbk1vbnRoICYmICFkLmlzSW5UaGlzTW9udGgpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDAuMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMS4wO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoXCJkYXRlXCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkLmRhdGU7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cihcInZhbHVlXCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkLnZhbHVlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoXCJ2YWx1ZVR5cGVcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFZhbHVlVHlwZVtkYXRhc2V0LnZhbHVlVHlwZV07XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC1sYWJlbFwiKVxyXG4gICAgICAgIC5vbihcImNsaWNrXCIsIGZ1bmN0aW9uIChldmVudDogYW55KSB7XHJcbiAgICAgICAgICAgIC8vIGNsZWFyIGNpcmNsZXNcclxuICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb24oY2hhcnRFbGVtZW50cywgbW9udGhJbmZvKTtcclxuICAgICAgICAgICAgLy8gc2hvdyBuZXcgc2VsZWN0ZWQgY2lyY2xlXHJcbiAgICAgICAgICAgIGxldCBkYXRlID0gZDMuc2VsZWN0KHRoaXMpLmF0dHIoXCJkYXRlXCIpO1xyXG4gICAgICAgICAgICBtb250aEluZm8uc2VsZWN0ZWREYXRlID0gZGF0ZTtcclxuICAgICAgICAgICAgaWYgKG1vbnRoSW5mby5zaG93U2VsZWN0ZWRSaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgLnNlbGVjdChcIiN0cmFja2VyLXNlbGVjdGVkLWNpcmNsZS1cIiArIGRhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgLnN0eWxlKFwic3Ryb2tlXCIsIG1vbnRoSW5mby5zZWxlY3RlZFJpbmdDb2xvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2hvdyB2YWx1ZSBvbiBtb25pdG9yXHJcbiAgICAgICAgICAgIGlmIChtb250aEluZm8uc2hvd1NlbGVjdGVkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGxldCBzdHJWYWx1ZSA9IGQzLnNlbGVjdCh0aGlzKS5hdHRyKFwidmFsdWVcIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWVUeXBlID0gZDMuc2VsZWN0KHRoaXMpLmF0dHIoXCJ2YWx1ZVR5cGVcIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWVUZXh0ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZVR5cGUgPT09IFwiVGltZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRheVN0YXJ0ID0gd2luZG93Lm1vbWVudChcIjAwOjAwXCIsIFwiSEg6bW1cIiwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpY2tUaW1lID0gZGF5U3RhcnQuYWRkKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHN0clZhbHVlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzZWNvbmRzXCJcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVGV4dCA9IHRpY2tUaW1lLmZvcm1hdChcIkhIOm1tXCIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVRleHQgPSBzdHJWYWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMubW9uaXRvci50ZXh0KHZhbHVlVGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcInBvaW50ZXJcIik7XHJcblxyXG4gICAgLy8gYW5ub3RhdGlvblxyXG4gICAgaWYgKG1vZGUgPT09IFwiYW5ub3RhdGlvblwiICYmIHNob3dBbm5vdGF0aW9uKSB7XHJcbiAgICAgICAgbGV0IGRheUFubm90YXRpb24gPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJkYXlBbm5vdGF0aW9uXCIpXHJcbiAgICAgICAgICAgIC5kYXRhKGRheXNJbk1vbnRoVmlldylcclxuICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgLmFwcGVuZChcInRleHRcIilcclxuICAgICAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkLmFubm90YXRpb247XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdHJhbnNYID0gc2NhbGUoZC5jb2wpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRyYW5zWSA9IHNjYWxlKGQucm93KSArIG1heERheVRleHRTaXplLmhlaWdodCAvIDQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoZC5hbm5vdGF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNZICs9IGRvdFJhZGl1cztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBzdHJUcmFuc2xhdGUgPSBcInRyYW5zbGF0ZShcIiArIHRyYW5zWCArIFwiLFwiICsgdHJhbnNZICsgXCIpXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0clRyYW5zbGF0ZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbW9udGgtYW5ub3RhdGlvblwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFeHBhbmQgYXJlYXNcclxuICAgIGxldCBzdmdXaWR0aCA9IHBhcnNlRmxvYXQoY2hhcnRFbGVtZW50cy5zdmcuYXR0cihcIndpZHRoXCIpKTtcclxuICAgIGxldCBzdmdIZWlnaHQgPSBwYXJzZUZsb2F0KGNoYXJ0RWxlbWVudHMuc3ZnLmF0dHIoXCJoZWlnaHRcIikpO1xyXG4gICAgbGV0IGdyYXBoQXJlYVdpZHRoID0gcGFyc2VGbG9hdChjaGFydEVsZW1lbnRzLmdyYXBoQXJlYS5hdHRyKFwid2lkdGhcIikpO1xyXG4gICAgbGV0IGdyYXBoQXJlYUhlaWdodCA9IHBhcnNlRmxvYXQoY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEuYXR0cihcImhlaWdodFwiKSk7XHJcbiAgICBsZXQgdG90YWxIZWlnaHQgPVxyXG4gICAgICAgIDcgKiBjZWxsU2l6ZSArIHBhcnNlRmxvYXQoY2hhcnRFbGVtZW50cy5oZWFkZXIuYXR0cihcImhlaWdodFwiKSk7XHJcbiAgICBsZXQgdG90YWxXaWR0aCA9IDcgKiBjZWxsU2l6ZTtcclxuICAgIGlmICh0b3RhbEhlaWdodCA+IHN2Z0hlaWdodCkge1xyXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuc3ZnLCAwLCB0b3RhbEhlaWdodCAtIHN2Z0hlaWdodCk7XHJcbiAgICB9XHJcbiAgICBpZiAodG90YWxXaWR0aCA+IHN2Z1dpZHRoKSB7XHJcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5zdmcsIHRvdGFsV2lkdGggLSBzdmdXaWR0aCwgMCk7XHJcbiAgICB9XHJcbiAgICBpZiAodG90YWxIZWlnaHQgPiBncmFwaEFyZWFIZWlnaHQpIHtcclxuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShcclxuICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIHRvdGFsSGVpZ2h0IC0gZ3JhcGhBcmVhSGVpZ2h0XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh0b3RhbFdpZHRoID4gZ3JhcGhBcmVhV2lkdGgpIHtcclxuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgdG90YWxXaWR0aCAtIGdyYXBoQXJlYVdpZHRoLCAwKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVmcmVzaChcclxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXHJcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIG1vbnRoSW5mbzogTW9udGhJbmZvLFxyXG4gICAgY3VyTW9udGhEYXRlOiBNb21lbnRcclxuKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlZnJlc2hcIik7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcclxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhcmVuZGVyTW9udGgpIHJldHVybjtcclxuXHJcbiAgICBjaGFydEVsZW1lbnRzID0gY3JlYXRlQXJlYXMoY2hhcnRFbGVtZW50cywgY2FudmFzLCByZW5kZXJJbmZvLCBtb250aEluZm8pO1xyXG5cclxuICAgIC8vIHJlbmRlclxyXG4gICAgcmVuZGVyTW9udGhIZWFkZXIoXHJcbiAgICAgICAgY2FudmFzLFxyXG4gICAgICAgIGNoYXJ0RWxlbWVudHMsXHJcbiAgICAgICAgcmVuZGVySW5mbyxcclxuICAgICAgICBtb250aEluZm8sXHJcbiAgICAgICAgY3VyTW9udGhEYXRlXHJcbiAgICApO1xyXG5cclxuICAgIHJlbmRlck1vbnRoRGF5cyhjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIG1vbnRoSW5mbywgY3VyTW9udGhEYXRlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlck1vbnRoKFxyXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBtb250aEluZm86IE1vbnRoSW5mb1xyXG4pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyTW9udGhcIik7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoSW5mbyk7XHJcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIXJlbmRlck1vbnRoKSByZXR1cm47XHJcblxyXG4gICAgLy8gZGF0YXNldFxyXG4gICAgbGV0IGRhdGFzZXRJZHMgPSBtb250aEluZm8uZGF0YXNldDtcclxuICAgIGxldCBudW1BdmFpbGFibGVEYXRhc2V0ID0gMDtcclxuICAgIGZvciAobGV0IGRhdGFzZXQgb2YgcmVuZGVySW5mby5kYXRhc2V0cykge1xyXG4gICAgICAgIGlmICghZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSB7XHJcbiAgICAgICAgICAgIG51bUF2YWlsYWJsZURhdGFzZXQrKztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAobnVtQXZhaWxhYmxlRGF0YXNldCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBcIk5vIGF2YWlsYWJsZSBkYXRhc2V0IGZvdW5kXCI7XHJcbiAgICB9XHJcbiAgICB0b05leHREYXRhc2V0KHJlbmRlckluZm8sIG1vbnRoSW5mbyk7XHJcbiAgICBpZiAobW9udGhJbmZvLnNlbGVjdGVkRGF0YXNldCA9PT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBcIk5vIGF2YWlsYWJsZSBkYXRhc2V0IGZvdW5kXCI7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMgPSB7fTtcclxuICAgIGNoYXJ0RWxlbWVudHMgPSBjcmVhdGVBcmVhcyhjaGFydEVsZW1lbnRzLCBjYW52YXMsIHJlbmRlckluZm8sIG1vbnRoSW5mbyk7XHJcblxyXG4gICAgbGV0IG1vbnRoRGF0ZTogTW9tZW50ID0gbnVsbDtcclxuICAgIGlmIChtb250aEluZm8uaW5pdE1vbnRoKSB7XHJcbiAgICAgICAgbW9udGhEYXRlID0gaGVscGVyLmdldERhdGVCeUR1cmF0aW9uVG9Ub2RheShcclxuICAgICAgICAgICAgbW9udGhJbmZvLmluaXRNb250aCxcclxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0XHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIW1vbnRoRGF0ZSkge1xyXG4gICAgICAgICAgICBsZXQgaW5pdE1vbnRoID0gd2luZG93Lm1vbWVudChtb250aEluZm8uaW5pdE1vbnRoLCBcIllZWVktTU1cIiwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGluaXRNb250aCk7XHJcbiAgICAgICAgICAgIGlmIChpbml0TW9udGguaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgICAgICAgICBtb250aERhdGUgPSBpbml0TW9udGg7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJJbnZhbGlkIGluaXRNb250aFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBtb250aERhdGUgPSByZW5kZXJJbmZvLmRhdGFzZXRzLmdldERhdGVzKCkubGFzdCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFtb250aERhdGUpIHJldHVybjtcclxuXHJcbiAgICByZW5kZXJNb250aEhlYWRlcihjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIG1vbnRoSW5mbywgbW9udGhEYXRlKTtcclxuXHJcbiAgICByZW5kZXJNb250aERheXMoY2FudmFzLCBjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBtb250aEluZm8sIG1vbnRoRGF0ZSk7XHJcblxyXG4gICAgc2V0Q2hhcnRTY2FsZShjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8pO1xyXG59XHJcbiIsImltcG9ydCB7IE1vbWVudCB9IGZyb20gXCJtb21lbnRcIjtcclxuaW1wb3J0IHtcclxuICAgIERhdGFzZXRzLFxyXG4gICAgRGF0YVBvaW50LFxyXG4gICAgUmVuZGVySW5mbyxcclxuICAgIE1vbnRoSW5mbyxcclxuICAgIEhlYXRtYXBJbmZvLFxyXG4gICAgRGF0YXNldCxcclxuICAgIFNpemUsXHJcbiAgICBUcmFuc2Zvcm0sXHJcbiAgICBDaGFydEVsZW1lbnRzLFxyXG4gICAgR3JhcGhUeXBlLFxyXG4gICAgVmFsdWVUeXBlLFxyXG59IGZyb20gXCIuL2RhdGFcIjtcclxuaW1wb3J0ICogYXMgaGVscGVyIGZyb20gXCIuL2hlbHBlclwiO1xyXG5pbXBvcnQgKiBhcyBkMyBmcm9tIFwiZDNcIjtcclxuXHJcbmludGVyZmFjZSBEYXlJbmZvIHtcclxuICAgIGRhdGU6IHN0cmluZztcclxuICAgIHZhbHVlOiBudW1iZXI7XHJcbiAgICBzY2FsZWRWYWx1ZTogbnVtYmVyO1xyXG4gICAgcm93OiBudW1iZXI7XHJcbiAgICBjb2w6IG51bWJlcjtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlQXJlYXMoXHJcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxyXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBoZWF0bWFwSW5mbzogSGVhdG1hcEluZm9cclxuKTogQ2hhcnRFbGVtZW50cyB7XHJcbiAgICAvLyBjbGVhbiBhcmVhc1xyXG4gICAgZDMuc2VsZWN0KGNhbnZhcykuc2VsZWN0KFwiI3N2Z1wiKS5yZW1vdmUoKTtcclxuICAgIHZhciBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGNoYXJ0RWxlbWVudHMpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIC8vIGQzLnNlbGVjdChjaGFydEVsZW1lbnRzW3Byb3BzW2ldXSkucmVtb3ZlKCk7XHJcbiAgICAgICAgZGVsZXRlIGNoYXJ0RWxlbWVudHNbcHJvcHNbaV1dO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coY2hhcnRFbGVtZW50cyk7XHJcblxyXG4gICAgLy8gd2hvbGUgYXJlYSBmb3IgcGxvdHRpbmcsIGluY2x1ZGVzIG1hcmdpbnNcclxuICAgIGxldCBzdmcgPSBkM1xyXG4gICAgICAgIC5zZWxlY3QoY2FudmFzKVxyXG4gICAgICAgIC5hcHBlbmQoXCJzdmdcIilcclxuICAgICAgICAuYXR0cihcImlkXCIsIFwic3ZnXCIpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgIFwid2lkdGhcIixcclxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ubGVmdCArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5yaWdodFxyXG4gICAgICAgIClcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJoZWlnaHRcIixcclxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnRvcCArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5ib3R0b21cclxuICAgICAgICApO1xyXG4gICAgY2hhcnRFbGVtZW50c1tcInN2Z1wiXSA9IHN2ZztcclxuXHJcbiAgICAvLyBncmFwaEFyZWEsIGluY2x1ZGVzIGNoYXJ0QXJlYSwgdGl0bGUsIGxlZ2VuZFxyXG4gICAgbGV0IGdyYXBoQXJlYSA9IHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImdyYXBoQXJlYVwiKVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxyXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5sZWZ0ICtcclxuICAgICAgICAgICAgICAgIFwiLFwiICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnRvcCArXHJcbiAgICAgICAgICAgICAgICBcIilcIlxyXG4gICAgICAgIClcclxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICsgcmVuZGVySW5mby5tYXJnaW4ucmlnaHQpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgIFwiaGVpZ2h0XCIsXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArIHJlbmRlckluZm8ubWFyZ2luLmJvdHRvbVxyXG4gICAgICAgICk7XHJcbiAgICBjaGFydEVsZW1lbnRzW1wiZ3JhcGhBcmVhXCJdID0gZ3JhcGhBcmVhO1xyXG5cclxuICAgIC8vIGRhdGFBcmVhLCB1bmRlciBncmFwaEFyZWEsIGluY2x1ZGVzIHBvaW50cywgbGluZXMsIHhBeGlzLCB5QXhpc1xyXG4gICAgbGV0IGRhdGFBcmVhID0gZ3JhcGhBcmVhXHJcbiAgICAgICAgLmFwcGVuZChcImdcIilcclxuICAgICAgICAuYXR0cihcImlkXCIsIFwiZGF0YUFyZWFcIilcclxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoKVxyXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCk7XHJcbiAgICBjaGFydEVsZW1lbnRzW1wiZGF0YUFyZWFcIl0gPSBkYXRhQXJlYTtcclxuXHJcbiAgICByZXR1cm4gY2hhcnRFbGVtZW50cztcclxufVxyXG5cclxuZnVuY3Rpb24gcmVuZGVySGVhdG1hcEhlYWRlcihcclxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXHJcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIGhlYXRtYXBJbmZvOiBIZWF0bWFwSW5mbyxcclxuICAgIGRhdGFzZXQ6IERhdGFzZXRcclxuKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlck1vbnRoSGVhZGVyXCIpXHJcblxyXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFoZWF0bWFwSW5mbykgcmV0dXJuO1xyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gcmVuZGVySGVhdG1hcERheXMoXHJcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxyXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBoZWF0bWFwSW5mbzogSGVhdG1hcEluZm8sXHJcbiAgICBkYXRhc2V0OiBEYXRhc2V0LFxyXG4pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVySGVhdG1hcERheXNcIik7XHJcblxyXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFoZWF0bWFwSW5mbykgcmV0dXJuO1xyXG5cclxuICAgIGxldCBjZWxsU2l6ZSA9IDIwO1xyXG4gICAgbGV0IGRvdFJhZGl1cyA9IGNlbGxTaXplIC8gMi4wICogMC42O1xyXG5cclxuICAgIC8vIEdldCBtaW4gYW5kIG1heCwgbnVsbCB2YWx1ZXMgd2lsbCBiZSB0cmVhdGVkIGFzIHplcm8gaGVyZVxyXG4gICAgbGV0IHlNaW4gPSBkMy5taW4oZGF0YXNldC5nZXRWYWx1ZXMoKSk7XHJcbiAgICBpZiAoaGVhdG1hcEluZm8ueU1pbiAhPT0gbnVsbCkge1xyXG4gICAgICAgIHlNaW4gPSBoZWF0bWFwSW5mby55TWluO1xyXG4gICAgfVxyXG4gICAgbGV0IHlNYXggPSBkMy5tYXgoZGF0YXNldC5nZXRWYWx1ZXMoKSk7XHJcbiAgICBpZiAoaGVhdG1hcEluZm8ueU1heCAhPT0gbnVsbCkge1xyXG4gICAgICAgIHlNYXggPSBoZWF0bWFwSW5mby55TWF4O1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coYHlNaW46JHt5TWlufSwgeU1heDoke3lNYXh9YCk7XHJcblxyXG4gICAgLy8gUHJlcGFyZSBkYXRhIGZvciBncmFwaFxyXG4gICAgbGV0IGRheXNJbkhlYXRtYXBWaWV3OiBBcnJheTxEYXlJbmZvPiA9IFtdO1xyXG4gICAgY29uc3QgZGF0YVN0YXJ0RGF0ZSA9IGRhdGFzZXQuZ2V0U3RhcnREYXRlKCkuY2xvbmUoKTtcclxuICAgIGxldCBzdGFydERhdGUgPSBkYXRhU3RhcnREYXRlXHJcbiAgICAgICAgLmNsb25lKClcclxuICAgICAgICAuc3VidHJhY3QoZGF0YVN0YXJ0RGF0ZS5kYXkoKSwgXCJkYXlzXCIpO1xyXG4gICAgaWYgKGhlYXRtYXBJbmZvLnN0YXJ0V2Vla09uLnRvTG93ZXJDYXNlKCkgPT09IFwibW9uXCIpIHtcclxuICAgICAgICBzdGFydERhdGUgPSBzdGFydERhdGUuYWRkKDEsIFwiZGF5c1wiKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRhdGFFbmREYXRlID0gZGF0YXNldC5nZXRFbmREYXRlKCkuY2xvbmUoKTtcclxuICAgIGxldCBlbmREYXRlID0gZGF0YUVuZERhdGUuY2xvbmUoKS5hZGQoNyAtIGRhdGFFbmREYXRlLmRheSgpIC0gMSwgXCJkYXlzXCIpO1xyXG4gICAgaWYgKGhlYXRtYXBJbmZvLnN0YXJ0V2Vla09uLnRvTG93ZXJDYXNlKCkgPT09IFwibW9uXCIpIHtcclxuICAgICAgICBlbmREYXRlID0gZW5kRGF0ZS5hZGQoMSwgXCJkYXlzXCIpO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coc3RhcnREYXRlLmZvcm1hdChcIllZWVktTU0tRERcIikpO1xyXG4gICAgLy8gY29uc29sZS5sb2coZW5kRGF0ZS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpKTtcclxuXHJcbiAgICBsZXQgaW5kQ29sID0gMDtcclxuICAgIGxldCBpbmRSb3cgPSAwO1xyXG4gICAgbGV0IGluZCA9IDA7XHJcbiAgICBmb3IgKFxyXG4gICAgICAgIGxldCBjdXJEYXRlID0gc3RhcnREYXRlLmNsb25lKCk7XHJcbiAgICAgICAgY3VyRGF0ZSA8PSBlbmREYXRlO1xyXG4gICAgICAgIGN1ckRhdGUuYWRkKDEsIFwiZGF5c1wiKVxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKGhlYXRtYXBJbmZvLnN0YXJ0V2Vla09uLnRvTG93ZXJDYXNlKCkgPT09IFwibW9uXCIpIHtcclxuICAgICAgICAgICAgaW5kQ29sID0gY3VyRGF0ZS5kYXkoKSAtIDE7XHJcbiAgICAgICAgICAgIGlmIChpbmRDb2wgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpbmRDb2wgPSA2O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGluZFJvdyA9IE1hdGguZmxvb3IoaW5kIC8gNyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW5kQ29sID0gY3VyRGF0ZS5kYXkoKTsgLy8gMH42XHJcbiAgICAgICAgICAgIGluZFJvdyA9IE1hdGguZmxvb3IoaW5kIC8gNyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjdXJWYWx1ZSBhbmQgc2NhbGVkVmFsdWVcclxuICAgICAgICBsZXQgY3VyVmFsdWUgPSBkYXRhc2V0LmdldFZhbHVlKGN1ckRhdGUpO1xyXG4gICAgICAgIGxldCBzY2FsZWRWYWx1ZSA9IDA7XHJcbiAgICAgICAgaWYgKE51bWJlci5pc051bWJlcih5TWF4KSAmJiBOdW1iZXIuaXNOdW1iZXIoeU1pbikgJiYgeU1heCAtIHlNaW4gPiAwKSB7XHJcbiAgICAgICAgICAgIHNjYWxlZFZhbHVlID0gKGN1clZhbHVlIC0geU1pbikgLyAoeU1heCAtIHlNaW4pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGF5c0luSGVhdG1hcFZpZXcucHVzaCh7XHJcbiAgICAgICAgICAgIGRhdGU6IGhlbHBlci5kYXRlVG9TdHIoY3VyRGF0ZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KSxcclxuICAgICAgICAgICAgdmFsdWU6IGN1clZhbHVlLFxyXG4gICAgICAgICAgICBzY2FsZWRWYWx1ZTogc2NhbGVkVmFsdWUsXHJcbiAgICAgICAgICAgIHJvdzogaW5kUm93LFxyXG4gICAgICAgICAgICBjb2w6IGluZENvbCxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaW5kKys7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhkYXlzSW5IZWF0bWFwVmlldyk7XHJcblxyXG4gICAgLy8gc2NhbGVcclxuICAgIGxldCB0b3RhbERheUJsb2NrV2lkdGggPSAoaW5kQ29sICsgMSkgKiBjZWxsU2l6ZTtcclxuICAgIGxldCB0b3RhbEJsb2NrSGVpZ2h0ID0gKGluZFJvdyArIDEpICogY2VsbFNpemU7XHJcbiAgICBsZXQgc2NhbGUgPSBkM1xyXG4gICAgICAgIC5zY2FsZUxpbmVhcigpXHJcbiAgICAgICAgLmRvbWFpbihbLTAuNSwgNi41XSlcclxuICAgICAgICAucmFuZ2UoWzAsIHRvdGFsRGF5QmxvY2tXaWR0aF0pO1xyXG5cclxuICAgIC8vIGNpcmNsZXNcclxuICAgIGxldCBoZWF0bWFwQ29sb3IgPSBcIiM2OWIzYTJcIjtcclxuICAgIGlmIChoZWF0bWFwSW5mby5jb2xvcikge1xyXG4gICAgICAgIGhlYXRtYXBDb2xvciA9IGhlYXRtYXBJbmZvLmNvbG9yO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRheXMsIHNob3duIGFzIGRvdHMgb3Igc3F1YXJlc1xyXG4gICAgbGV0IGRheXMgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXHJcbiAgICAgICAgLnNlbGVjdEFsbChcImRvdFwiKVxyXG4gICAgICAgIC5kYXRhKGRheXNJbkhlYXRtYXBWaWV3KVxyXG4gICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxyXG4gICAgICAgIC5hdHRyKFwiclwiLCBkb3RSYWRpdXMpXHJcbiAgICAgICAgLmF0dHIoXCJjeFwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xyXG4gICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5jb2wpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoXCJjeVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xyXG4gICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5yb3cpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xyXG4gICAgICAgICAgICByZXR1cm4gZDMuaW50ZXJwb2xhdGVMYWIoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYXRtYXBDb2xvclxyXG4gICAgICAgICAgICAgICAgKShkLnNjYWxlZFZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIik7XHJcblxyXG4gICAgLy8gRXhwYW5kIGFyZWFzXHJcbiAgICBsZXQgc3ZnV2lkdGggPSBwYXJzZUZsb2F0KGNoYXJ0RWxlbWVudHMuc3ZnLmF0dHIoXCJ3aWR0aFwiKSk7XHJcbiAgICBsZXQgc3ZnSGVpZ2h0ID0gcGFyc2VGbG9hdChjaGFydEVsZW1lbnRzLnN2Zy5hdHRyKFwiaGVpZ2h0XCIpKTtcclxuICAgIGxldCBncmFwaEFyZWFXaWR0aCA9IHBhcnNlRmxvYXQoY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEuYXR0cihcIndpZHRoXCIpKTtcclxuICAgIGxldCBncmFwaEFyZWFIZWlnaHQgPSBwYXJzZUZsb2F0KGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLmF0dHIoXCJoZWlnaHRcIikpO1xyXG4gICAgbGV0IHRvdGFsSGVpZ2h0ID1cclxuICAgICAgICAoaW5kUm93ICsgMikgKiBjZWxsU2l6ZTsvLyArIHBhcnNlRmxvYXQoY2hhcnRFbGVtZW50cy5oZWFkZXIuYXR0cihcImhlaWdodFwiKSk7XHJcbiAgICBsZXQgdG90YWxXaWR0aCA9IChpbmRDb2wgKyAxKSAqIGNlbGxTaXplO1xyXG4gICAgaWYgKHRvdGFsSGVpZ2h0ID4gc3ZnSGVpZ2h0KSB7XHJcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5zdmcsIDAsIHRvdGFsSGVpZ2h0IC0gc3ZnSGVpZ2h0KTtcclxuICAgIH1cclxuICAgIGlmICh0b3RhbFdpZHRoID4gc3ZnV2lkdGgpIHtcclxuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgdG90YWxXaWR0aCAtIHN2Z1dpZHRoLCAwKTtcclxuICAgIH1cclxuICAgIGlmICh0b3RhbEhlaWdodCA+IGdyYXBoQXJlYUhlaWdodCkge1xyXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKFxyXG4gICAgICAgICAgICBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYSxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgdG90YWxIZWlnaHQgLSBncmFwaEFyZWFIZWlnaHRcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRvdGFsV2lkdGggPiBncmFwaEFyZWFXaWR0aCkge1xyXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuc3ZnLCB0b3RhbFdpZHRoIC0gZ3JhcGhBcmVhV2lkdGgsIDApO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVySGVhdG1hcChcclxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgaGVhdG1hcEluZm86IEhlYXRtYXBJbmZvXHJcbikge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJIZWF0bWFwXCIpO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XHJcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIXJlbmRlckhlYXRtYXApIHJldHVybjtcclxuXHJcbiAgICByZXR1cm4gXCJVbmRlciBjb25zdHJ1Y3Rpb25cIjtcclxuXHJcbiAgICBsZXQgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyA9IHt9O1xyXG4gICAgY2hhcnRFbGVtZW50cyA9IGNyZWF0ZUFyZWFzKGNoYXJ0RWxlbWVudHMsIGNhbnZhcywgcmVuZGVySW5mbywgaGVhdG1hcEluZm8pO1xyXG5cclxuICAgIGxldCB0b2RheSA9IHdpbmRvdy5tb21lbnQoKTtcclxuICAgIGxldCBsYXN0RGF0YU1vbnRoRGF0ZSA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0ZXMoKS5sYXN0KCk7XHJcblxyXG4gICAgbGV0IGRhdGFzZXRJZCA9IHBhcnNlRmxvYXQoaGVhdG1hcEluZm8uZGF0YXNldCk7XHJcbiAgICBsZXQgZGF0YXNldCA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkKTtcclxuXHJcbiAgICByZW5kZXJIZWF0bWFwSGVhZGVyKFxyXG4gICAgICAgIGNhbnZhcyxcclxuICAgICAgICBjaGFydEVsZW1lbnRzLFxyXG4gICAgICAgIHJlbmRlckluZm8sXHJcbiAgICAgICAgaGVhdG1hcEluZm8sXHJcbiAgICAgICAgZGF0YXNldFxyXG4gICAgKTtcclxuXHJcbiAgICByZW5kZXJIZWF0bWFwRGF5cyhcclxuICAgICAgICBjYW52YXMsXHJcbiAgICAgICAgY2hhcnRFbGVtZW50cyxcclxuICAgICAgICByZW5kZXJJbmZvLFxyXG4gICAgICAgIGhlYXRtYXBJbmZvLFxyXG4gICAgICAgIGRhdGFzZXRcclxuICAgICk7XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICAgIERhdGFzZXRzLFxyXG4gICAgRGF0YVBvaW50LFxyXG4gICAgUmVuZGVySW5mbyxcclxuICAgIEJ1bGxldEluZm8sXHJcbiAgICBEYXRhc2V0LFxyXG4gICAgU2l6ZSxcclxuICAgIFRyYW5zZm9ybSxcclxuICAgIENoYXJ0RWxlbWVudHMsXHJcbiAgICBHcmFwaFR5cGUsXHJcbiAgICBWYWx1ZVR5cGUsXHJcbn0gZnJvbSBcIi4vZGF0YVwiO1xyXG5pbXBvcnQgKiBhcyBoZWxwZXIgZnJvbSBcIi4vaGVscGVyXCI7XHJcbmltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xyXG5pbXBvcnQgKiBhcyBleHByIGZyb20gXCIuL2V4cHJcIjtcclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUFyZWFzKFxyXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBidWxsZXRJbmZvOiBCdWxsZXRJbmZvXHJcbik6IENoYXJ0RWxlbWVudHMge1xyXG4gICAgbGV0IGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMgPSB7fTtcclxuICAgIC8vIHdob2xlIGFyZWEgZm9yIHBsb3R0aW5nLCBpbmNsdWRlcyBtYXJnaW5zXHJcblxyXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFidWxsZXRJbmZvKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHN2ZyA9IGQzXHJcbiAgICAgICAgLnNlbGVjdChjYW52YXMpXHJcbiAgICAgICAgLmFwcGVuZChcInN2Z1wiKVxyXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJzdmdcIilcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJ3aWR0aFwiLFxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5sZWZ0ICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnJpZ2h0XHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICBcImhlaWdodFwiLFxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4udG9wICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmJvdHRvbVxyXG4gICAgICAgICk7XHJcbiAgICBjaGFydEVsZW1lbnRzW1wic3ZnXCJdID0gc3ZnO1xyXG5cclxuICAgIC8vIGdyYXBoQXJlYSwgaW5jbHVkZXMgY2hhcnRBcmVhLCB0aXRsZSwgbGVnZW5kXHJcbiAgICBsZXQgZ3JhcGhBcmVhID0gc3ZnXHJcbiAgICAgICAgLmFwcGVuZChcImdcIilcclxuICAgICAgICAuYXR0cihcImlkXCIsIFwiZ3JhcGhBcmVhXCIpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXHJcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmxlZnQgK1xyXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4udG9wICtcclxuICAgICAgICAgICAgICAgIFwiKVwiXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggKyByZW5kZXJJbmZvLm1hcmdpbi5yaWdodClcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJoZWlnaHRcIixcclxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICsgcmVuZGVySW5mby5tYXJnaW4uYm90dG9tXHJcbiAgICAgICAgKTtcclxuICAgIGNoYXJ0RWxlbWVudHNbXCJncmFwaEFyZWFcIl0gPSBncmFwaEFyZWE7XHJcblxyXG4gICAgLy8gZGF0YUFyZWEsIHVuZGVyIGdyYXBoQXJlYSwgaW5jbHVkZXMgcG9pbnRzLCBsaW5lcywgeEF4aXMsIHlBeGlzXHJcbiAgICBsZXQgZGF0YUFyZWEgPSBncmFwaEFyZWFcclxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJkYXRhQXJlYVwiKVxyXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGgpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0KTtcclxuICAgIGNoYXJ0RWxlbWVudHNbXCJkYXRhQXJlYVwiXSA9IGRhdGFBcmVhO1xyXG5cclxuICAgIHJldHVybiBjaGFydEVsZW1lbnRzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRDaGFydFNjYWxlKFxyXG4gICAgX2NhbnZhczogSFRNTEVsZW1lbnQsXHJcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xyXG4pIHtcclxuICAgIGxldCBjYW52YXMgPSBkMy5zZWxlY3QoX2NhbnZhcyk7XHJcbiAgICBsZXQgc3ZnID0gY2hhcnRFbGVtZW50cy5zdmc7XHJcbiAgICBsZXQgc3ZnV2lkdGggPSBwYXJzZUZsb2F0KHN2Zy5hdHRyKFwid2lkdGhcIikpO1xyXG4gICAgbGV0IHN2Z0hlaWdodCA9IHBhcnNlRmxvYXQoc3ZnLmF0dHIoXCJoZWlnaHRcIikpO1xyXG4gICAgc3ZnLmF0dHIoXCJ3aWR0aFwiLCBudWxsKVxyXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG51bGwpXHJcbiAgICAgICAgLmF0dHIoXCJ2aWV3Qm94XCIsIGAwIDAgJHtzdmdXaWR0aH0gJHtzdmdIZWlnaHR9YClcclxuICAgICAgICAuYXR0cihcInByZXNlcnZlQXNwZWN0UmF0aW9cIiwgXCJ4TWlkWU1pZCBtZWV0XCIpO1xyXG5cclxuICAgIGlmIChyZW5kZXJJbmZvLmZpdFBhbmVsV2lkdGgpIHtcclxuICAgICAgICBjYW52YXMuc3R5bGUoXCJ3aWR0aFwiLCBcIjEwMCVcIik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNhbnZhcy5zdHlsZShcclxuICAgICAgICAgICAgXCJ3aWR0aFwiLFxyXG4gICAgICAgICAgICAoc3ZnV2lkdGggKiByZW5kZXJJbmZvLmZpeGVkU2NhbGUpLnRvU3RyaW5nKCkgKyBcInB4XCJcclxuICAgICAgICApO1xyXG4gICAgICAgIGNhbnZhcy5zdHlsZShcclxuICAgICAgICAgICAgXCJoZWlnaHRcIixcclxuICAgICAgICAgICAgKHN2Z0hlaWdodCAqIHJlbmRlckluZm8uZml4ZWRTY2FsZSkudG9TdHJpbmcoKSArIFwicHhcIlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbmRlclRpdGxlKFxyXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBidWxsZXRJbmZvOiBCdWxsZXRJbmZvXHJcbikge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJUaXRsZVwiKTtcclxuICAgIC8vIHVuZGVyIGdyYXBoQXJlYVxyXG5cclxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhYnVsbGV0SW5mbykgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHNwYWNpbmcgPSA2OyAvLyBzcGFjaW5nIGJldHdlZW4gdGl0bGUgYW5kIGRhdGFBcmVhXHJcblxyXG4gICAgaWYgKGJ1bGxldEluZm8udGl0bGUpIHtcclxuICAgICAgICBsZXQgdGl0bGVTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcclxuICAgICAgICAgICAgYnVsbGV0SW5mby50aXRsZSxcclxuICAgICAgICAgICAgXCJ0cmFja2VyLXRpdGxlLXNtYWxsXCJcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcclxuICAgICAgICAgICAgbGV0IHRpdGxlID0gY2hhcnRFbGVtZW50cy5ncmFwaEFyZWFcclxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgICAgICAgICAudGV4dChidWxsZXRJbmZvLnRpdGxlKSAvLyBwaXZvdCBhdCBjZW50ZXJcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgXCJ0aXRsZVwiKVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIHRpdGxlU2l6ZS53aWR0aCAvIDIuMClcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwieVwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgLyAyLjApXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCB0aXRsZVNpemUuaGVpZ2h0KSAvLyBmb3IgbGF0ZXIgdXNlXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10aXRsZS1zbWFsbFwiKTtcclxuICAgICAgICAgICAgY2hhcnRFbGVtZW50c1tcInRpdGxlXCJdID0gdGl0bGU7XHJcblxyXG4gICAgICAgICAgICAvLyBFeHBhbmQgcGFyZW50IGFyZWFzXHJcbiAgICAgICAgICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuc3ZnLCB0aXRsZVNpemUud2lkdGggKyBzcGFjaW5nLCAwKTtcclxuICAgICAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXHJcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYSxcclxuICAgICAgICAgICAgICAgIHRpdGxlU2l6ZS53aWR0aCArIHNwYWNpbmcsXHJcbiAgICAgICAgICAgICAgICAwXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAvLyBNb3ZlIHNpYmxpbmcgYXJlYXNcclxuICAgICAgICAgICAgaGVscGVyLm1vdmVBcmVhKFxyXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5kYXRhQXJlYSxcclxuICAgICAgICAgICAgICAgIHRpdGxlU2l6ZS53aWR0aCArIHNwYWNpbmcsXHJcbiAgICAgICAgICAgICAgICAwXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcclxuICAgICAgICAgICAgLy8gaWYgbGFiZWwgd2lkdGggPiBkYXRhQXJlYSB3aWR0aFxyXG4gICAgICAgICAgICBsZXQgeE1pZGRsZSA9IHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMi4wO1xyXG4gICAgICAgICAgICBpZiAodGl0bGVTaXplLndpZHRoID4gcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZXhwYW5kIGFyZWEgZm9yIHZlcnRpY2FsIHRpdGxlXCIpO1xyXG4gICAgICAgICAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5zdmcsXHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVTaXplLndpZHRoIC0gcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGhlbHBlci5leHBhbmRBcmVhKFxyXG4gICAgICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlU2l6ZS53aWR0aCAtIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgaGVscGVyLm1vdmVBcmVhKFxyXG4gICAgICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZGF0YUFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVTaXplLndpZHRoIC8gMi4wIC0gcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggLyAyLjAsXHJcbiAgICAgICAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHhNaWRkbGUgPSB0aXRsZVNpemUud2lkdGggLyAyLjA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBheGlzV2lkdGggPSBwYXJzZUZsb2F0KGNoYXJ0RWxlbWVudHMuYXhpcy5hdHRyKFwid2lkdGhcIikpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHRpdGxlID0gY2hhcnRFbGVtZW50cy5ncmFwaEFyZWFcclxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgICAgICAgICAudGV4dChidWxsZXRJbmZvLnRpdGxlKSAvLyBwaXZvdCBhdCBjZW50ZXJcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgXCJ0aXRsZVwiKVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIHhNaWRkbGUgKyBheGlzV2lkdGgpXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgdGl0bGVTaXplLmhlaWdodCAvIDIuMClcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRpdGxlU2l6ZS5oZWlnaHQpIC8vIGZvciBsYXRlciB1c2VcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRpdGxlLXNtYWxsXCIpO1xyXG4gICAgICAgICAgICBjaGFydEVsZW1lbnRzW1widGl0bGVcIl0gPSB0aXRsZTtcclxuXHJcbiAgICAgICAgICAgIC8vIEV4cGFuZCBwYXJlbnQgYXJlYXNcclxuICAgICAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5zdmcsIDAsIHRpdGxlU2l6ZS5oZWlnaHQgKyBzcGFjaW5nKTtcclxuICAgICAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXHJcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYSxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICB0aXRsZVNpemUuaGVpZ2h0ICsgc3BhY2luZ1xyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgLy8gTW92ZSBzaWJsaW5nIGFyZWFzXHJcbiAgICAgICAgICAgIGhlbHBlci5tb3ZlQXJlYShcclxuICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZGF0YUFyZWEsXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgdGl0bGVTaXplLmhlaWdodCArIHNwYWNpbmdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGJ1bGxldEluZm8udmFsdWVVbml0KSB7XHJcbiAgICAgICAgbGV0IHVuaXRTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcclxuICAgICAgICAgICAgYnVsbGV0SW5mby52YWx1ZVVuaXQsXHJcbiAgICAgICAgICAgIFwidHJhY2tlci10aWNrLWxhYmVsXCJcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcclxuICAgICAgICAgICAgbGV0IHVuaXQgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXHJcbiAgICAgICAgICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAgICAgICAgICAgLnRleHQoYnVsbGV0SW5mby52YWx1ZVVuaXQpXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcImlkXCIsIFwidW5pdFwiKVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIC0xICogKHVuaXRTaXplLndpZHRoICsgc3BhY2luZykpXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICsgc3BhY2luZylcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHVuaXRTaXplLmhlaWdodCkgLy8gZm9yIGxhdGVyIHVzZVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItdGljay1sYWJlbFwiKTsgLy8gcGl2b3QgYXQgY29yZGVyXHJcbiAgICAgICAgICAgIGNoYXJ0RWxlbWVudHNbXCJ1bml0XCJdID0gdW5pdDtcclxuICAgICAgICB9IGVsc2UgaWYgKGJ1bGxldEluZm8ub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xyXG4gICAgICAgICAgICBsZXQgdW5pdCA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcclxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgICAgICAgICAudGV4dChidWxsZXRJbmZvLnZhbHVlVW5pdClcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgXCJ1bml0XCIpXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgICAgICAgICBcInhcIixcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAvIDIgLSB1bml0U2l6ZS53aWR0aCAvIDJcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwieVwiLCAtKHVuaXRTaXplLmhlaWdodCAvIDIuMCArIHNwYWNpbmcpKVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdW5pdFNpemUuaGVpZ2h0KSAvLyBmb3IgbGF0ZXIgdXNlXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10aWNrLWxhYmVsXCIpOyAvLyBwaXZvdCBhdCBjb3JkZXJcclxuICAgICAgICAgICAgY2hhcnRFbGVtZW50c1tcInVuaXRcIl0gPSB1bml0O1xyXG5cclxuICAgICAgICAgICAgLy8gRXhwYW5kIHBhcmVudCBhcmVhc1xyXG4gICAgICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgMCwgdW5pdFNpemUuaGVpZ2h0ICsgc3BhY2luZyk7XHJcbiAgICAgICAgICAgIGhlbHBlci5leHBhbmRBcmVhKFxyXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgdW5pdFNpemUuaGVpZ2h0ICsgc3BhY2luZ1xyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgLy8gTW92ZSBkYXRhQXJlYSBkb3duXHJcbiAgICAgICAgICAgIGhlbHBlci5tb3ZlQXJlYShcclxuICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZGF0YUFyZWEsXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgdW5pdFNpemUuaGVpZ2h0ICsgc3BhY2luZ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLy8gUmVuZGVyIHRpY2tzLCB0aWNrIGxhYmVsc1xyXG5mdW5jdGlvbiByZW5kZXJBeGlzKFxyXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBidWxsZXRJbmZvOiBCdWxsZXRJbmZvLFxyXG4gICAgZGF0YXNldDogRGF0YXNldFxyXG4pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyQXhpc1wiKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGNoYXJ0RWxlbWVudHMpO1xyXG4gICAgLy8gY29uc29sZS5sb2coZGF0YXNldCk7XHJcblxyXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFidWxsZXRJbmZvKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHJhbmdlID0gYnVsbGV0SW5mby5yYW5nZTtcclxuICAgIGxldCBsYXN0UmFuZ2UgPSByYW5nZVtyYW5nZS5sZW5ndGggLSAxXTtcclxuICAgIGxldCBkb21haW4gPSBbMCwgbGFzdFJhbmdlXTtcclxuXHJcbiAgICBsZXQgdGlja0xlbmd0aCA9IDY7XHJcbiAgICBsZXQgdmFsdWVVbml0ID0gYnVsbGV0SW5mby52YWx1ZVVuaXQ7XHJcbiAgICBsZXQgdGlja0Zvcm1hdEZuOiBhbnkgPSBmdW5jdGlvbiAodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh2YWx1ZVVuaXQgJiYgdmFsdWVVbml0LmVuZHNXaXRoKFwiJVwiKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZDMudGlja0Zvcm1hdCgwLCBsYXN0UmFuZ2UsIDcpKHZhbHVlKSArIFwiICVcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGQzLnRpY2tGb3JtYXQoMCwgbGFzdFJhbmdlLCA3KSh2YWx1ZSk7XHJcbiAgICB9O1xyXG4gICAgbGV0IG1heFRpY2tMYWJlbCA9IHRpY2tGb3JtYXRGbihsYXN0UmFuZ2UpO1xyXG4gICAgbGV0IG1heFRpY2tMYWJlbFNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKFxyXG4gICAgICAgIG1heFRpY2tMYWJlbCxcclxuICAgICAgICBcInRyYWNrZXItdGljay1sYWJlbFwiXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xyXG4gICAgICAgIGxldCBzY2FsZSA9IGQzLnNjYWxlTGluZWFyKCk7XHJcbiAgICAgICAgc2NhbGUuZG9tYWluKGRvbWFpbikucmFuZ2UoWzAsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoXSk7XHJcbiAgICAgICAgY2hhcnRFbGVtZW50c1tcInNjYWxlXCJdID0gc2NhbGU7XHJcblxyXG4gICAgICAgIGxldCBheGlzR2VuID0gZDMuYXhpc0JvdHRvbShzY2FsZSk7XHJcbiAgICAgICAgYXhpc0dlbi50aWNrRm9ybWF0KHRpY2tGb3JtYXRGbik7XHJcbiAgICAgICAgbGV0IGF4aXMgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXHJcbiAgICAgICAgICAgIC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgXCJheGlzXCIpXHJcbiAgICAgICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcclxuICAgICAgICAgICAgICAgIFwidHJhbnNsYXRlKDAsXCIgKyByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgKyBcIilcIlxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5jYWxsKGF4aXNHZW4pXHJcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWF4aXNcIik7XHJcbiAgICAgICAgY2hhcnRFbGVtZW50c1tcImF4aXNcIl0gPSBheGlzO1xyXG5cclxuICAgICAgICBsZXQgYXhpc0xpbmUgPSBheGlzLnNlbGVjdEFsbChcInBhdGhcIikuc3R5bGUoXCJzdHJva2VcIiwgXCJub25lXCIpO1xyXG5cclxuICAgICAgICBsZXQgYXhpc1RpY2tzID0gYXhpcy5zZWxlY3RBbGwoXCJsaW5lXCIpO1xyXG5cclxuICAgICAgICBsZXQgYXhpc1RpY2tMYWJlbHMgPSBheGlzXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJ0ZXh0XCIpXHJcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRpY2stbGFiZWxcIik7XHJcblxyXG4gICAgICAgIGF4aXMuYXR0cihcclxuICAgICAgICAgICAgXCJ3aWR0aFwiLFxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArIG1heFRpY2tMYWJlbFNpemUud2lkdGhcclxuICAgICAgICApO1xyXG4gICAgICAgIGF4aXMuYXR0cihcImhlaWdodFwiLCB0aWNrTGVuZ3RoICsgbWF4VGlja0xhYmVsU2l6ZS5oZWlnaHQpO1xyXG5cclxuICAgICAgICAvLyBFeHBhbmQgYXJlYXNcclxuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShcclxuICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5zdmcsXHJcbiAgICAgICAgICAgICttYXhUaWNrTGFiZWxTaXplLndpZHRoLFxyXG4gICAgICAgICAgICB0aWNrTGVuZ3RoICsgbWF4VGlja0xhYmVsU2l6ZS5oZWlnaHRcclxuICAgICAgICApO1xyXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKFxyXG4gICAgICAgICAgICBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYSxcclxuICAgICAgICAgICAgK21heFRpY2tMYWJlbFNpemUud2lkdGgsXHJcbiAgICAgICAgICAgIHRpY2tMZW5ndGggKyBtYXhUaWNrTGFiZWxTaXplLmhlaWdodFxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKGJ1bGxldEluZm8ub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xyXG4gICAgICAgIGxldCBzY2FsZSA9IGQzLnNjYWxlTGluZWFyKCk7XHJcbiAgICAgICAgc2NhbGUuZG9tYWluKGRvbWFpbikucmFuZ2UoW3JlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCwgMF0pO1xyXG4gICAgICAgIGNoYXJ0RWxlbWVudHNbXCJzY2FsZVwiXSA9IHNjYWxlO1xyXG5cclxuICAgICAgICBsZXQgYXhpc0dlbiA9IGQzLmF4aXNMZWZ0KHNjYWxlKTtcclxuICAgICAgICBheGlzR2VuLnRpY2tGb3JtYXQodGlja0Zvcm1hdEZuKTtcclxuICAgICAgICBsZXQgYXhpcyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcclxuICAgICAgICAgICAgLmFwcGVuZChcImdcIilcclxuICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCBcImF4aXNcIilcclxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIDApXHJcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAwKVxyXG4gICAgICAgICAgICAuY2FsbChheGlzR2VuKVxyXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1heGlzXCIpO1xyXG4gICAgICAgIGNoYXJ0RWxlbWVudHNbXCJheGlzXCJdID0gYXhpcztcclxuXHJcbiAgICAgICAgbGV0IGF4aXNMaW5lID0gYXhpcy5zZWxlY3RBbGwoXCJwYXRoXCIpLnN0eWxlKFwic3Ryb2tlXCIsIFwibm9uZVwiKTtcclxuXHJcbiAgICAgICAgbGV0IGF4aXNUaWNrcyA9IGF4aXMuc2VsZWN0QWxsKFwibGluZVwiKTtcclxuXHJcbiAgICAgICAgbGV0IGF4aXNUaWNrTGFiZWxzID0gYXhpc1xyXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwidGV4dFwiKVxyXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10aWNrLWxhYmVsXCIpO1xyXG5cclxuICAgICAgICBheGlzLmF0dHIoXCJ3aWR0aFwiLCB0aWNrTGVuZ3RoICsgbWF4VGlja0xhYmVsU2l6ZS53aWR0aCk7XHJcbiAgICAgICAgYXhpcy5hdHRyKFwiaGVpZ2h0XCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoKTtcclxuXHJcbiAgICAgICAgLy8gRXhwYW5kIGFyZWFzXHJcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXHJcbiAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuc3ZnLFxyXG4gICAgICAgICAgICB0aWNrTGVuZ3RoICsgbWF4VGlja0xhYmVsU2l6ZS53aWR0aCxcclxuICAgICAgICAgICAgMFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXHJcbiAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLFxyXG4gICAgICAgICAgICB0aWNrTGVuZ3RoICsgbWF4VGlja0xhYmVsU2l6ZS53aWR0aCxcclxuICAgICAgICAgICAgMFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGhlbHBlci5tb3ZlQXJlYShcclxuICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5kYXRhQXJlYSxcclxuICAgICAgICAgICAgdGlja0xlbmd0aCArIG1heFRpY2tMYWJlbFNpemUud2lkdGgsXHJcbiAgICAgICAgICAgIDBcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBSZW5kZXIgcXVhbnRpdGF0aXZlIHJhbmdlLCBwb29yL2F2ZXJhZ2UvZ29vZC8uLi5cclxuZnVuY3Rpb24gcmVuZGVyQmFja1BhbmVsKFxyXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBidWxsZXRJbmZvOiBCdWxsZXRJbmZvLFxyXG4gICAgZGF0YXNldDogRGF0YXNldFxyXG4pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyQmFja1BhbmVsXCIpO1xyXG4gICAgLy8gY29uc29sZS5sb2coZGF0YXNldCk7XHJcblxyXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFidWxsZXRJbmZvKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHNjYWxlID0gY2hhcnRFbGVtZW50cy5zY2FsZTtcclxuXHJcbiAgICAvLyBQcmVwYXJlIGRhdGFcclxuICAgIGxldCByYW5nZSA9IGJ1bGxldEluZm8ucmFuZ2U7XHJcbiAgICBsZXQgcmFuZ2VDb2xvciA9IGJ1bGxldEluZm8ucmFuZ2VDb2xvcjtcclxuICAgIGxldCBkYXRhID0gW107XHJcbiAgICBsZXQgbGFzdEJvdW5kID0gMDtcclxuICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHJhbmdlLmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICBkYXRhLnB1c2goe1xyXG4gICAgICAgICAgICBzdGFydDogbGFzdEJvdW5kLFxyXG4gICAgICAgICAgICBlbmQ6IHJhbmdlW2luZF0sXHJcbiAgICAgICAgICAgIGNvbG9yOiByYW5nZUNvbG9yW2luZF0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGFzdEJvdW5kID0gcmFuZ2VbaW5kXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcclxuICAgICAgICBsZXQgcGFuZWwgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJiYWNrUGFuZWxcIilcclxuICAgICAgICAgICAgLmRhdGEoZGF0YSlcclxuICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGZ1bmN0aW9uIChkOiBhbnksIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3Ioc2NhbGUoZC5zdGFydCkpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgZnVuY3Rpb24gKGQ6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgZnVuY3Rpb24gKGQ6IGFueSwgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHNjYWxlKGQuZW5kIC0gZC5zdGFydCkpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQpXHJcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKGQ6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGQuY29sb3I7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcclxuICAgICAgICBsZXQgcGFuZWwgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJiYWNrUGFuZWxcIilcclxuICAgICAgICAgICAgLmRhdGEoZGF0YSlcclxuICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGZ1bmN0aW9uIChkOiBhbnksIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbiAoZDogYW55KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihzY2FsZShkLmVuZCkpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoKVxyXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBmdW5jdGlvbiAoZDogYW55KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCAtXHJcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5mbG9vcihzY2FsZShkLmVuZCAtIGQuc3RhcnQpKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAoZDogYW55KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZC5jb2xvcjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIFJlbmRlciBiYXIgZm9yIGFjdHVhbCB2YWx1ZVxyXG5mdW5jdGlvbiByZW5kZXJCYXIoXHJcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIGJ1bGxldEluZm86IEJ1bGxldEluZm8sXHJcbiAgICBkYXRhc2V0OiBEYXRhc2V0XHJcbikge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJCYXJcIik7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0KTtcclxuICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiO1xyXG5cclxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhYnVsbGV0SW5mbykgcmV0dXJuO1xyXG5cclxuICAgIGxldCByZXRBY3R1YWxWYWx1ZSA9IGV4cHIucmVzb2x2ZVZhbHVlKGJ1bGxldEluZm8udmFsdWUsIHJlbmRlckluZm8pO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmV0QWN0dWFsVmFsdWUpO1xyXG4gICAgaWYgKHR5cGVvZiByZXRBY3R1YWxWYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiByZXRBY3R1YWxWYWx1ZTtcclxuICAgIH1cclxuICAgIGxldCBhY3R1YWxWYWx1ZSA9IHJldEFjdHVhbFZhbHVlO1xyXG4gICAgaWYgKE51bWJlci5pc05hTihhY3R1YWxWYWx1ZSkpIHtcclxuICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXQgdmFsdWU6IFwiICsgcmV0QWN0dWFsVmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgIH1cclxuICAgIGxldCB2YWx1ZUNvbG9yID0gYnVsbGV0SW5mby52YWx1ZUNvbG9yO1xyXG5cclxuICAgIGxldCBzY2FsZSA9IGNoYXJ0RWxlbWVudHMuc2NhbGU7XHJcblxyXG4gICAgaWYgKGJ1bGxldEluZm8ub3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XHJcbiAgICAgICAgbGV0IGJhcldpZHRoID0gcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0IC8gMztcclxuICAgICAgICBsZXQgYmFyID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxyXG4gICAgICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgc2NhbGUoMCkpXHJcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBiYXJXaWR0aClcclxuICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBNYXRoLmZsb29yKHNjYWxlKGFjdHVhbFZhbHVlKSkpXHJcbiAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGJhcldpZHRoKVxyXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIHZhbHVlQ29sb3IpO1xyXG4gICAgfSBlbHNlIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcclxuICAgICAgICBsZXQgYmFyV2lkdGggPSByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAvIDM7XHJcbiAgICAgICAgbGV0IGJhciA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcclxuICAgICAgICAgICAgLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGJhcldpZHRoKVxyXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgTWF0aC5mbG9vcihzY2FsZShhY3R1YWxWYWx1ZSkpKVxyXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIGJhcldpZHRoKVxyXG4gICAgICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgICAgIFwiaGVpZ2h0XCIsXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgLSBNYXRoLmZsb29yKHNjYWxlKGFjdHVhbFZhbHVlKSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIHZhbHVlQ29sb3IpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBSZW5kZXIgbWFyayBsaW5lIGZvciB0YXJnZXQgdmFsdWVcclxuZnVuY3Rpb24gcmVuZGVyTWFyayhcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgYnVsbGV0SW5mbzogQnVsbGV0SW5mbyxcclxuICAgIGRhdGFzZXQ6IERhdGFzZXRcclxuKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlck1hcmtcIik7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0KTtcclxuXHJcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWJ1bGxldEluZm8pIHJldHVybjtcclxuXHJcbiAgICBsZXQgc2hvd01hcmtlciA9IGJ1bGxldEluZm8uc2hvd01hcmtlcjtcclxuICAgIGlmICghc2hvd01hcmtlcikgcmV0dXJuO1xyXG5cclxuICAgIGxldCBtYXJrZXJWYWx1ZSA9IGJ1bGxldEluZm8ubWFya2VyVmFsdWU7XHJcbiAgICBsZXQgbWFya2VyQ29sb3IgPSBidWxsZXRJbmZvLm1hcmtlckNvbG9yO1xyXG5cclxuICAgIGxldCBzY2FsZSA9IGNoYXJ0RWxlbWVudHMuc2NhbGU7XHJcblxyXG4gICAgaWYgKGJ1bGxldEluZm8ub3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XHJcbiAgICAgICAgbGV0IG1hcmtlckxlbmd0aCA9IChyZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgKiAyKSAvIDM7XHJcbiAgICAgICAgbGV0IG1hcmtlciA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcclxuICAgICAgICAgICAgLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIHNjYWxlKG1hcmtlclZhbHVlKSAtIDEuNSlcclxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIG1hcmtlckxlbmd0aCAvIDQpXHJcbiAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgMylcclxuICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbWFya2VyTGVuZ3RoKVxyXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIG1hcmtlckNvbG9yKTtcclxuICAgIH0gZWxzZSBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XHJcbiAgICAgICAgbGV0IG1hcmtlckxlbmd0aCA9IChyZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAqIDIpIC8gMztcclxuICAgICAgICBsZXQgbWFya2VyID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxyXG4gICAgICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgbWFya2VyTGVuZ3RoIC8gNClcclxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIHNjYWxlKG1hcmtlclZhbHVlKSAtIDEuNSlcclxuICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBtYXJrZXJMZW5ndGgpXHJcbiAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIDMpXHJcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgbWFya2VyQ29sb3IpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBCdWxsZXQgZ3JhcGggaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQnVsbGV0X2dyYXBoXHJcbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJCdWxsZXQoXHJcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIGJ1bGxldEluZm86IEJ1bGxldEluZm9cclxuKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlckJ1bGxldFwiKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8pO1xyXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFidWxsZXRJbmZvKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRhdGFzZXRJZCA9IHBhcnNlRmxvYXQoYnVsbGV0SW5mby5kYXRhc2V0KTtcclxuICAgIGxldCBkYXRhc2V0ID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpO1xyXG5cclxuICAgIC8vIFNldCBpbml0aWFsIGRhdGFBcmVhIHNpemVcclxuICAgIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xyXG4gICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplID0geyB3aWR0aDogMjUwLCBoZWlnaHQ6IDI0IH07XHJcbiAgICB9IGVsc2UgaWYgKGJ1bGxldEluZm8ub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xyXG4gICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplID0geyB3aWR0aDogMjQsIGhlaWdodDogMjUwIH07XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNoYXJ0RWxlbWVudHMgPSBjcmVhdGVBcmVhcyhjYW52YXMsIHJlbmRlckluZm8sIGJ1bGxldEluZm8pO1xyXG5cclxuICAgIGxldCByZXRSZW5kZXJBeGlzID0gcmVuZGVyQXhpcyhcclxuICAgICAgICBjaGFydEVsZW1lbnRzLFxyXG4gICAgICAgIHJlbmRlckluZm8sXHJcbiAgICAgICAgYnVsbGV0SW5mbyxcclxuICAgICAgICBkYXRhc2V0XHJcbiAgICApO1xyXG4gICAgaWYgKHR5cGVvZiByZXRSZW5kZXJBeGlzID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldFJlbmRlckF4aXM7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyVGl0bGUoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgYnVsbGV0SW5mbyk7XHJcblxyXG4gICAgcmVuZGVyQmFja1BhbmVsKGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIGJ1bGxldEluZm8sIGRhdGFzZXQpO1xyXG5cclxuICAgIGxldCByZXRSZW5kZXJCYXIgPSByZW5kZXJCYXIoXHJcbiAgICAgICAgY2hhcnRFbGVtZW50cyxcclxuICAgICAgICByZW5kZXJJbmZvLFxyXG4gICAgICAgIGJ1bGxldEluZm8sXHJcbiAgICAgICAgZGF0YXNldFxyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgcmV0UmVuZGVyQmFyID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldFJlbmRlckJhcjtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJNYXJrKGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIGJ1bGxldEluZm8sIGRhdGFzZXQpO1xyXG5cclxuICAgIHNldENoYXJ0U2NhbGUoY2FudmFzLCBjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvKTtcclxufVxyXG4iLCJpbXBvcnQgKiBhcyBkMyBmcm9tIFwiZDNcIjtcclxuaW1wb3J0IHsgTW9tZW50LCBEdXJhdGlvbiB9IGZyb20gXCJtb21lbnRcIjtcclxuaW1wb3J0IHtcclxuICAgIERhdGFzZXRzLFxyXG4gICAgRGF0YVBvaW50LFxyXG4gICAgUmVuZGVySW5mbyxcclxuICAgIERhdGFzZXQsXHJcbiAgICBTaXplLFxyXG4gICAgVHJhbnNmb3JtLFxyXG4gICAgQ2hhcnRFbGVtZW50cyxcclxuICAgIEdyYXBoVHlwZSxcclxuICAgIFZhbHVlVHlwZSxcclxuICAgIENvbW1vbkNoYXJ0SW5mbyxcclxuICAgIExpbmVJbmZvLFxyXG4gICAgQmFySW5mbyxcclxuICAgIFBpZUluZm8sXHJcbiAgICBTdW1tYXJ5SW5mbyxcclxuICAgIEJ1bGxldEluZm8sXHJcbiAgICBNb250aEluZm8sXHJcbiAgICBIZWF0bWFwSW5mbyxcclxufSBmcm9tIFwiLi9kYXRhXCI7XHJcbmltcG9ydCAqIGFzIHBpZSBmcm9tIFwiLi9waWVcIjtcclxuaW1wb3J0ICogYXMgc3VtbWFyeSBmcm9tIFwiLi9zdW1tYXJ5XCI7XHJcbmltcG9ydCAqIGFzIG1vbnRoIGZyb20gXCIuL21vbnRoXCI7XHJcbmltcG9ydCAqIGFzIGhlYXRtYXAgZnJvbSBcIi4vaGVhdG1hcFwiO1xyXG5pbXBvcnQgKiBhcyBidWxsZXQgZnJvbSBcIi4vYnVsbGV0XCI7XHJcbmltcG9ydCAqIGFzIGhlbHBlciBmcm9tIFwiLi9oZWxwZXJcIjtcclxuaW1wb3J0IHsgc3ByaW50ZiB9IGZyb20gXCJzcHJpbnRmLWpzXCI7XHJcblxyXG5mdW5jdGlvbiBnZXRYVGlja1ZhbHVlcyhcclxuICAgIGRhdGVzOiBNb21lbnRbXSxcclxuICAgIGludGVydmFsOiBEdXJhdGlvblxyXG4pOiBbQXJyYXk8RGF0ZT4sIGQzLlRpbWVJbnRlcnZhbF0ge1xyXG4gICAgLy8gVGhlIGlucHV0IGludGVydmFsIGNvdWxkIGJlIG51bGwsXHJcbiAgICAvLyBnZW5lcmF0ZSB0aWNrIHZhbHVlcyBldmVuIGlmIGludGVydmFsIGlzIG51bGxcclxuXHJcbiAgICAvLyBjb25zb2xlLmxvZyhpbnRlcnZhbCk7XHJcblxyXG4gICAgbGV0IHRpY2tWYWx1ZXM6IEFycmF5PERhdGU+ID0gW107XHJcbiAgICBsZXQgdGlja0ludGVydmFsID0gbnVsbDtcclxuXHJcbiAgICAvLyB5IHZhbHVlcyBhcmUgdGltZSB2YWx1ZXNcclxuICAgIGlmIChpbnRlcnZhbCkge1xyXG4gICAgICAgIGxldCBmaXJzdERhdGUgPSBkYXRlc1swXTtcclxuICAgICAgICBsZXQgbGFzdERhdGUgPSBkYXRlc1tkYXRlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICB0aWNrVmFsdWVzID0gZDMudGltZURheS5yYW5nZShcclxuICAgICAgICAgICAgZmlyc3REYXRlLnRvRGF0ZSgpLFxyXG4gICAgICAgICAgICBsYXN0RGF0ZS50b0RhdGUoKSxcclxuICAgICAgICAgICAgaW50ZXJ2YWwuYXNEYXlzKClcclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgZGF5cyA9IGRhdGVzLmxlbmd0aDtcclxuICAgICAgICBpZiAoZGF5cyA8PSAxNSkge1xyXG4gICAgICAgICAgICAvLyBudW1iZXIgb2YgdGlja3M6IDAtMTVcclxuICAgICAgICAgICAgdGlja0ludGVydmFsID0gZDMudGltZURheTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRheXMgPD0gNCAqIDE1KSB7XHJcbiAgICAgICAgICAgIC8vIG51bWJlciBvZiB0aWNrczogNC0xNVxyXG4gICAgICAgICAgICB0aWNrSW50ZXJ2YWwgPSBkMy50aW1lRGF5LmV2ZXJ5KDQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF5cyA8PSA3ICogMTUpIHtcclxuICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHRpY2tzOiA4LTE1XHJcbiAgICAgICAgICAgIHRpY2tJbnRlcnZhbCA9IGQzLnRpbWVXZWVrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF5cyA8PSAxNSAqIDMwKSB7XHJcbiAgICAgICAgICAgIC8vIG51bWJlciBvZiB0aWNrczogNC0xNVxyXG4gICAgICAgICAgICB0aWNrSW50ZXJ2YWwgPSBkMy50aW1lTW9udGg7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXlzIDw9IDE1ICogNjApIHtcclxuICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHRpY2tzOiA4LTE1XHJcbiAgICAgICAgICAgIHRpY2tJbnRlcnZhbCA9IGQzLnRpbWVNb250aC5ldmVyeSgyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aWNrSW50ZXJ2YWwgPSBkMy50aW1lWWVhcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFt0aWNrVmFsdWVzLCB0aWNrSW50ZXJ2YWxdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRYVGlja0xhYmVsRm9ybWF0KGRhdGVzOiBNb21lbnRbXSwgaW5UaWNrTGFiZWxGb3JtYXQ6IHN0cmluZykge1xyXG4gICAgaWYgKGluVGlja0xhYmVsRm9ybWF0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZm5UaWNrTGFiZWxGb3JtYXQoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICAgICAgICAgIHJldHVybiBoZWxwZXIuZGF0ZVRvU3RyKHdpbmRvdy5tb21lbnQoZGF0ZSksIGluVGlja0xhYmVsRm9ybWF0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZuVGlja0xhYmVsRm9ybWF0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgdGlja0xhYmVsRm9ybWF0ID0gbnVsbDtcclxuICAgICAgICBsZXQgZGF5cyA9IGRhdGVzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKGRheXMgPD0gMTUpIHtcclxuICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHRpY2tzOiAwLTE1XHJcbiAgICAgICAgICAgIHRpY2tMYWJlbEZvcm1hdCA9IGQzLnRpbWVGb3JtYXQoXCIleS0lbS0lZFwiKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRheXMgPD0gNCAqIDE1KSB7XHJcbiAgICAgICAgICAgIC8vIG51bWJlciBvZiB0aWNrczogNC0xNVxyXG4gICAgICAgICAgICB0aWNrTGFiZWxGb3JtYXQgPSBkMy50aW1lRm9ybWF0KFwiJXktJW0tJWRcIik7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXlzIDw9IDcgKiAxNSkge1xyXG4gICAgICAgICAgICAvLyBudW1iZXIgb2YgdGlja3M6IDgtMTVcclxuICAgICAgICAgICAgdGlja0xhYmVsRm9ybWF0ID0gZDMudGltZUZvcm1hdChcIiV5LSVtLSVkXCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF5cyA8PSAxNSAqIDMwKSB7XHJcbiAgICAgICAgICAgIC8vIG51bWJlciBvZiB0aWNrczogNC0xNVxyXG4gICAgICAgICAgICB0aWNrTGFiZWxGb3JtYXQgPSBkMy50aW1lRm9ybWF0KFwiJXkgJWJcIik7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXlzIDw9IDE1ICogNjApIHtcclxuICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHRpY2tzOiA4LTE1XHJcbiAgICAgICAgICAgIHRpY2tMYWJlbEZvcm1hdCA9IGQzLnRpbWVGb3JtYXQoXCIleSAlYlwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aWNrTGFiZWxGb3JtYXQgPSBkMy50aW1lRm9ybWF0KFwiJVlcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGlja0xhYmVsRm9ybWF0O1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRZVGlja1ZhbHVlcyhcclxuICAgIHlMb3dlcjogbnVtYmVyLFxyXG4gICAgeVVwcGVyOiBudW1iZXIsXHJcbiAgICBpbnRlcnZhbDogbnVtYmVyIHwgRHVyYXRpb24sXHJcbiAgICBpc1RpbWVWYWx1ZSA9IGZhbHNlXHJcbikge1xyXG4gICAgLy8gVGhlIGlucHV0IGludGVydmFsIGNvdWxkIGJlIG51bGwsXHJcbiAgICAvLyBnZW5lcmF0ZSB0aWNrIHZhbHVlcyBmb3IgdGltZSB2YWx1ZXMgZXZlbiBpZiBpbnRlcnZhbCBpcyBudWxsXHJcblxyXG4gICAgLy8gY29uc29sZS5sb2coaW50ZXJ2YWwpO1xyXG4gICAgLy8gY29uc29sZS5sb2coaXNUaW1lVmFsdWUpO1xyXG5cclxuICAgIGNvbnN0IGFic0V4dGVudCA9IE1hdGguYWJzKHlVcHBlciAtIHlMb3dlcik7XHJcbiAgICBsZXQgdGlja1ZhbHVlczogQXJyYXk8bnVtYmVyPiA9IFtdO1xyXG5cclxuICAgIGlmICghaXNUaW1lVmFsdWUpIHtcclxuICAgICAgICAvLyB5IHZhbHVlcyBhcmUgbnVtYmVyc1xyXG4gICAgICAgIGlmIChpbnRlcnZhbCAmJiB0eXBlb2YgaW50ZXJ2YWwgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgLy8gIT09bnVsbCAmJiAhPT0gMFxyXG4gICAgICAgICAgICB0aWNrVmFsdWVzID0gZDMucmFuZ2UoeUxvd2VyLCB5VXBwZXIsIGludGVydmFsKTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIHkgdmFsdWVzIGFyZSB0aW1lIHZhbHVlc1xyXG4gICAgICAgIGlmIChpbnRlcnZhbCAmJiB3aW5kb3cubW9tZW50LmlzRHVyYXRpb24oaW50ZXJ2YWwpKSB7XHJcbiAgICAgICAgICAgIGxldCBpbnRlcnZhbEluU2Vjb25kcyA9IE1hdGguYWJzKGludGVydmFsLmFzU2Vjb25kcygpKTtcclxuICAgICAgICAgICAgdGlja1ZhbHVlcyA9IGQzLnJhbmdlKHlMb3dlciwgeVVwcGVyLCBpbnRlcnZhbEluU2Vjb25kcyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gYXV0byBpbnRlcnZhbCBmb3IgdGltZSB2YWx1ZXNcclxuICAgICAgICAgICAgaWYgKGFic0V4dGVudCA+IDUgKiA2MCAqIDYwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBleHRlbnQgb3ZlciB0aGFuIDUgaG91cnNcclxuICAgICAgICAgICAgICAgIC8vIHRpY2sgb24gdGhlIGhvdXJcclxuICAgICAgICAgICAgICAgIHlMb3dlciA9IE1hdGguZmxvb3IoeUxvd2VyIC8gMzYwMCkgKiAzNjAwO1xyXG4gICAgICAgICAgICAgICAgeVVwcGVyID0gTWF0aC5jZWlsKHlVcHBlciAvIDM2MDApICogMzYwMDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aWNrVmFsdWVzID0gZDMucmFuZ2UoeUxvd2VyLCB5VXBwZXIsIDM2MDApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gdGljayBvbiB0aGUgaGFsZiBob3VyXHJcbiAgICAgICAgICAgICAgICB5TG93ZXIgPSBNYXRoLmZsb29yKHlMb3dlciAvIDE4MDApICogMTgwMDtcclxuICAgICAgICAgICAgICAgIHlVcHBlciA9IE1hdGguY2VpbCh5VXBwZXIgLyAxODAwKSAqIDE4MDA7XHJcblxyXG4gICAgICAgICAgICAgICAgdGlja1ZhbHVlcyA9IGQzLnJhbmdlKHlMb3dlciwgeVVwcGVyLCAxODAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGlja1ZhbHVlcy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIHRpY2tWYWx1ZXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFlUaWNrTGFiZWxGb3JtYXQoXHJcbiAgICB5TG93ZXI6IG51bWJlcixcclxuICAgIHlVcHBlcjogbnVtYmVyLFxyXG4gICAgaW5UaWNrTGFiZWxGb3JtYXQ6IHN0cmluZyxcclxuICAgIGlzVGltZVZhbHVlID0gZmFsc2VcclxuKSB7XHJcbiAgICAvLyByZXR1cm4gYSBmdW5jdGlvbiBjb252ZXJ0IHZhbHVlIHRvIHRpbWUgc3RyaW5nXHJcblxyXG4gICAgaWYgKCFpc1RpbWVWYWx1ZSkge1xyXG4gICAgICAgIGlmIChpblRpY2tMYWJlbEZvcm1hdCkge1xyXG4gICAgICAgICAgICBmdW5jdGlvbiB0aWNrRm9ybWF0KHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgICAgICAgICAgbGV0IHN0clZhbHVlID0gc3ByaW50ZihcIiVcIiArIGluVGlja0xhYmVsRm9ybWF0LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyVmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aWNrRm9ybWF0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZDMudGlja0Zvcm1hdCh5TG93ZXIsIHlVcHBlciwgMTApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAvLyB2YWx1ZXMgaW4gc2Vjb25kc1xyXG4gICAgICAgIGlmIChpblRpY2tMYWJlbEZvcm1hdCkge1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBmblRpY2tMYWJlbEZvcm1hdCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICAgICAgICAgIGxldCBkYXlTdGFydCA9IHdpbmRvdy5tb21lbnQoXCIwMDowMFwiLCBcIkhIOm1tXCIsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRpY2tUaW1lID0gZGF5U3RhcnQuYWRkKHZhbHVlLCBcInNlY29uZHNcIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgZm9ybWF0ID0gdGlja1RpbWUuZm9ybWF0KGluVGlja0xhYmVsRm9ybWF0KTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgZGV2SG91ciA9ICh2YWx1ZSAtIHlMb3dlcikgLyAzNjAwO1xyXG4gICAgICAgICAgICAgICAgbGV0IGludGVybGVhdmUgPSBkZXZIb3VyICUgMjtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmblRpY2tMYWJlbEZvcm1hdDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBmblRpY2tMYWJlbEZvcm1hdCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFic0V4dGVudCA9IE1hdGguYWJzKHlVcHBlciAtIHlMb3dlcik7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF5U3RhcnQgPSB3aW5kb3cubW9tZW50KFwiMDA6MDBcIiwgXCJISDptbVwiLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIGxldCB0aWNrVGltZSA9IGRheVN0YXJ0LmFkZCh2YWx1ZSwgXCJzZWNvbmRzXCIpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGZvcm1hdCA9IHRpY2tUaW1lLmZvcm1hdChcIkhIOm1tXCIpO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYHlMb3dlci95VXBwZXI6ICR7eUxvd2VyfS8ke3lVcHBlcn1gKVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYHZhbHVlL2V4dGVudC9pbnRlcjoke3ZhbHVlfS8ke2Fic0V4dGVudH0vJHsodmFsdWUteUxvd2VyKS8zNjAwfWApO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGF1dG8gaW50ZXJsZWF2ZSBpZiBleHRlbnQgb3ZlciAxMiBob3Vyc1xyXG4gICAgICAgICAgICAgICAgaWYgKGFic0V4dGVudCA+IDEyICogNjAgKiA2MCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZXZIb3VyID0gKHZhbHVlIC0geUxvd2VyKSAvIDM2MDA7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGludGVybGVhdmUgPSBkZXZIb3VyICUgMjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPCB5TG93ZXIgfHwgdmFsdWUgPiB5VXBwZXIgfHwgaW50ZXJsZWF2ZSA8IDEuMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZm5UaWNrTGFiZWxGb3JtYXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKGNhbnZhczogSFRNTEVsZW1lbnQsIHJlbmRlckluZm86IFJlbmRlckluZm8pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyXCIpO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5kYXRhc2V0cyk7XHJcblxyXG4gICAgLy8gRGF0YSBwcmVwcm9jZXNzaW5nXHJcbiAgICBmb3IgKGxldCBkYXRhc2V0IG9mIHJlbmRlckluZm8uZGF0YXNldHMpIHtcclxuICAgICAgICBpZiAoZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSBjb250aW51ZTtcclxuICAgICAgICAvLyB2YWx1ZVNoaWZ0XHJcbiAgICAgICAgbGV0IHNoaWZ0QW1vdW50ID0gcmVuZGVySW5mby52YWx1ZVNoaWZ0W2RhdGFzZXQuZ2V0SWQoKV07XHJcbiAgICAgICAgaWYgKHNoaWZ0QW1vdW50ICE9PSBudWxsICYmIHNoaWZ0QW1vdW50ICE9PSAwKSB7XHJcbiAgICAgICAgICAgIGRhdGFzZXQuc2hpZnQoXHJcbiAgICAgICAgICAgICAgICBzaGlmdEFtb3VudCxcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8uc2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuW2RhdGFzZXQuZ2V0SWQoKV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcGVuYWx0eVxyXG4gICAgICAgIGlmIChyZW5kZXJJbmZvLnBlbmFsdHlbZGF0YXNldC5nZXRJZCgpXSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkYXRhc2V0LnNldFBlbmFsdHkocmVuZGVySW5mby5wZW5hbHR5W2RhdGFzZXQuZ2V0SWQoKV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBhY2N1bVxyXG4gICAgICAgIGlmIChyZW5kZXJJbmZvLmFjY3VtW2RhdGFzZXQuZ2V0SWQoKV0pIHtcclxuICAgICAgICAgICAgZGF0YXNldC5hY2N1bXVsYXRlVmFsdWVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGxpbmVJbmZvIG9mIHJlbmRlckluZm8ubGluZSkge1xyXG4gICAgICAgIGxldCByZXQgPSByZW5kZXJMaW5lQ2hhcnQoY2FudmFzLCByZW5kZXJJbmZvLCBsaW5lSW5mbyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBiYXJJbmZvIG9mIHJlbmRlckluZm8uYmFyKSB7XHJcbiAgICAgICAgbGV0IHJldCA9IHJlbmRlckJhckNoYXJ0KGNhbnZhcywgcmVuZGVySW5mbywgYmFySW5mbyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBwaWVJbmZvIG9mIHJlbmRlckluZm8ucGllKSB7XHJcbiAgICAgICAgbGV0IHJldCA9IHBpZS5yZW5kZXJQaWVDaGFydChjYW52YXMsIHJlbmRlckluZm8sIHBpZUluZm8pO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgc3VtbWFyeUluZm8gb2YgcmVuZGVySW5mby5zdW1tYXJ5KSB7XHJcbiAgICAgICAgbGV0IHJldCA9IHN1bW1hcnkucmVuZGVyU3VtbWFyeShjYW52YXMsIHJlbmRlckluZm8sIHN1bW1hcnlJbmZvKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGJ1bGxldEluZm8gb2YgcmVuZGVySW5mby5idWxsZXQpIHtcclxuICAgICAgICBsZXQgcmV0ID0gYnVsbGV0LnJlbmRlckJ1bGxldChjYW52YXMsIHJlbmRlckluZm8sIGJ1bGxldEluZm8pO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgbW9udGhJbmZvIG9mIHJlbmRlckluZm8ubW9udGgpIHtcclxuICAgICAgICBsZXQgcmV0ID0gbW9udGgucmVuZGVyTW9udGgoY2FudmFzLCByZW5kZXJJbmZvLCBtb250aEluZm8pO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaGVhdG1hcEluZm8gb2YgcmVuZGVySW5mby5oZWF0bWFwKSB7XHJcbiAgICAgICAgbGV0IHJldCA9IGhlYXRtYXAucmVuZGVySGVhdG1hcChjYW52YXMsIHJlbmRlckluZm8sIGhlYXRtYXBJbmZvKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVuZGVyWEF4aXMoXHJcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIGNoYXJ0SW5mbzogQ29tbW9uQ2hhcnRJbmZvXHJcbikge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJYQXhpc1wiKTtcclxuXHJcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWNoYXJ0SW5mbykgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkYXRhc2V0cyA9IHJlbmRlckluZm8uZGF0YXNldHM7XHJcbiAgICBsZXQgeERvbWFpbiA9IGQzLmV4dGVudChkYXRhc2V0cy5nZXREYXRlcygpKTtcclxuICAgIGxldCB4U2NhbGUgPSBkM1xyXG4gICAgICAgIC5zY2FsZVRpbWUoKVxyXG4gICAgICAgIC5kb21haW4oeERvbWFpbilcclxuICAgICAgICAucmFuZ2UoWzAsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoXSk7XHJcbiAgICBjaGFydEVsZW1lbnRzW1wieFNjYWxlXCJdID0geFNjYWxlO1xyXG5cclxuICAgIGxldCB0aWNrSW50ZXJ2YWxJbkR1cmF0aW9uID0gaGVscGVyLnBhcnNlRHVyYXRpb25TdHJpbmcoXHJcbiAgICAgICAgY2hhcnRJbmZvLnhBeGlzVGlja0ludGVydmFsXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBbdGlja1ZhbHVlcywgdGlja0ludGVydmFsXSA9IGdldFhUaWNrVmFsdWVzKFxyXG4gICAgICAgIGRhdGFzZXRzLmdldERhdGVzKCksXHJcbiAgICAgICAgdGlja0ludGVydmFsSW5EdXJhdGlvblxyXG4gICAgKTtcclxuICAgIGxldCB0aWNrRm9ybWF0ID0gZ2V0WFRpY2tMYWJlbEZvcm1hdChcclxuICAgICAgICBkYXRhc2V0cy5nZXREYXRlcygpLFxyXG4gICAgICAgIGNoYXJ0SW5mby54QXhpc1RpY2tMYWJlbEZvcm1hdFxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgeEF4aXNHZW4gPSBkMy5heGlzQm90dG9tKHhTY2FsZSk7XHJcblxyXG4gICAgaWYgKHRpY2tWYWx1ZXMgJiYgdGlja1ZhbHVlcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICB4QXhpc0dlbi50aWNrVmFsdWVzKHRpY2tWYWx1ZXMpO1xyXG4gICAgfSBlbHNlIGlmICh0aWNrSW50ZXJ2YWwpIHtcclxuICAgICAgICB4QXhpc0dlbi50aWNrcyh0aWNrSW50ZXJ2YWwpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRpY2tGb3JtYXQpIHtcclxuICAgICAgICB4QXhpc0dlbi50aWNrRm9ybWF0KHRpY2tGb3JtYXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB4QXhpcyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWEgLy8gYXhpcyBpbmNsdWRlcyB0aWNrc1xyXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcInhBeGlzXCIpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXHJcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKDAsXCIgKyByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgKyBcIilcIlxyXG4gICAgICAgICkgLy8gcmVsYXRpdmUgdG8gZ3JhcGhBcmVhXHJcbiAgICAgICAgLmNhbGwoeEF4aXNHZW4pXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItYXhpc1wiKTtcclxuICAgIGlmIChjaGFydEluZm8ueEF4aXNDb2xvcikge1xyXG4gICAgICAgIHhBeGlzLnN0eWxlKFwic3Ryb2tlXCIsIGNoYXJ0SW5mby54QXhpc0NvbG9yKTtcclxuICAgIH1cclxuICAgIGNoYXJ0RWxlbWVudHNbXCJ4QXhpc1wiXSA9IHhBeGlzO1xyXG5cclxuICAgIGxldCB0ZXh0U2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXCI5OS05OS05OVwiKTtcclxuXHJcbiAgICBsZXQgeEF4aXNUaWNrTGFiZWxzID0geEF4aXNcclxuICAgICAgICAuc2VsZWN0QWxsKFwidGV4dFwiKVxyXG4gICAgICAgIC5hdHRyKFwieFwiLCAtMSAqIHRleHRTaXplLmhlaWdodCAqIE1hdGguY29zKCg2NSAvIDE4MCkgKiBNYXRoLlBJKSlcclxuICAgICAgICAuYXR0cihcInlcIiwgMClcclxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInJvdGF0ZSgtNjUpXCIpXHJcbiAgICAgICAgLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJlbmRcIilcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10aWNrLWxhYmVsXCIpO1xyXG4gICAgaWYgKGNoYXJ0SW5mby54QXhpc0NvbG9yKSB7XHJcbiAgICAgICAgeEF4aXNUaWNrTGFiZWxzLnN0eWxlKFwiZmlsbFwiLCBjaGFydEluZm8ueEF4aXNDb2xvcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHRpY2tMZW5ndGggPSA2O1xyXG4gICAgbGV0IHRpY2tMYWJlbEhlaWdodCA9IHRleHRTaXplLndpZHRoICogTWF0aC5zaW4oKDY1IC8gMTgwKSAqIE1hdGguUEkpO1xyXG4gICAgbGV0IHhBeGlzTGFiZWwgPSB4QXhpc1xyXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgLnRleHQoY2hhcnRJbmZvLnhBeGlzTGFiZWwpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXHJcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMiArXHJcbiAgICAgICAgICAgICAgICBcIixcIiArXHJcbiAgICAgICAgICAgICAgICAodGlja0xlbmd0aCArIHRpY2tMYWJlbEhlaWdodCkgK1xyXG4gICAgICAgICAgICAgICAgXCIpXCJcclxuICAgICAgICApXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItYXhpcy1sYWJlbFwiKTtcclxuICAgIGlmIChjaGFydEluZm8ueEF4aXNMYWJlbENvbG9yKSB7XHJcbiAgICAgICAgeEF4aXNMYWJlbC5zdHlsZShcImZpbGxcIiwgY2hhcnRJbmZvLnhBeGlzTGFiZWxDb2xvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8geEF4aXMgaGVpZ2h0XHJcbiAgICB4QXhpcy5hdHRyKFwiaGVpZ2h0XCIsIHRpY2tMZW5ndGggKyB0aWNrTGFiZWxIZWlnaHQpO1xyXG5cclxuICAgIC8vIEV4cGFuZCBhcmVhc1xyXG4gICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5zdmcsIDAsIHRpY2tMZW5ndGggKyB0aWNrTGFiZWxIZWlnaHQpO1xyXG4gICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsIDAsIHRpY2tMZW5ndGggKyB0aWNrTGFiZWxIZWlnaHQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW5kZXJZQXhpcyhcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgY2hhcnRJbmZvOiBDb21tb25DaGFydEluZm8sXHJcbiAgICB5QXhpc0xvY2F0aW9uOiBzdHJpbmcsXHJcbiAgICBkYXRhc2V0SWRzOiBBcnJheTxudW1iZXI+XHJcbikge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJZQXhpc1wiKVxyXG4gICAgLy8gY29uc29sZS5sb2coZGF0YXNldHMpO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0SWRzKTtcclxuXHJcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWNoYXJ0SW5mbykgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkYXRhc2V0cyA9IHJlbmRlckluZm8uZGF0YXNldHM7XHJcbiAgICBpZiAoZGF0YXNldElkcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHlBeGlzTG9jYXRpb24gIT09IFwibGVmdFwiICYmIHlBeGlzTG9jYXRpb24gIT09IFwicmlnaHRcIikgcmV0dXJuO1xyXG5cclxuICAgIGxldCB5TWluT2ZEYXRhc2V0cyA9IG51bGw7XHJcbiAgICBsZXQgeU1heE9mRGF0YXNldHMgPSBudWxsO1xyXG4gICAgbGV0IHRtcFZhbHVlSXNUaW1lID0gbnVsbDtcclxuICAgIGxldCB2YWx1ZUlzVGltZSA9IGZhbHNlO1xyXG4gICAgZm9yIChsZXQgZGF0YXNldElkIG9mIGRhdGFzZXRJZHMpIHtcclxuICAgICAgICBsZXQgZGF0YXNldCA9IGRhdGFzZXRzLmdldERhdGFzZXRCeUlkKGRhdGFzZXRJZCk7XHJcbiAgICAgICAgaWYgKGRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkgY29udGludWU7XHJcblxyXG4gICAgICAgIGlmICh5TWluT2ZEYXRhc2V0cyA9PT0gbnVsbCB8fCBkYXRhc2V0LmdldFlNaW4oKSA8IHlNaW5PZkRhdGFzZXRzKSB7XHJcbiAgICAgICAgICAgIHlNaW5PZkRhdGFzZXRzID0gZGF0YXNldC5nZXRZTWluKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh5TWF4T2ZEYXRhc2V0cyA9PT0gbnVsbCB8fCBkYXRhc2V0LmdldFlNYXgoKSA+IHlNYXhPZkRhdGFzZXRzKSB7XHJcbiAgICAgICAgICAgIHlNYXhPZkRhdGFzZXRzID0gZGF0YXNldC5nZXRZTWF4KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBOZWVkIGFsbCBkYXRhc2V0cyBoYXZlIHNhbWUgc2V0dGluZ3MgZm9yIHRpbWUgdmFsdWVcclxuICAgICAgICB2YWx1ZUlzVGltZSA9IGRhdGFzZXQudmFsdWVUeXBlID09PSBWYWx1ZVR5cGUuVGltZTtcclxuICAgICAgICBpZiAodG1wVmFsdWVJc1RpbWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgdG1wVmFsdWVJc1RpbWUgPSB2YWx1ZUlzVGltZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodmFsdWVJc1RpbWUgIT09IHRtcFZhbHVlSXNUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJOb3QgYWxsIHZhbHVlcyBpbiB0aW1lIGZvcm1hdFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coeU1pbk9mRGF0YXNldHMpO1xyXG4gICAgLy8gY29uc29sZS5sb2coeU1heE9mRGF0YXNldHMpO1xyXG5cclxuICAgIGxldCB5TWluID0gbnVsbDtcclxuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xyXG4gICAgICAgIHlNaW4gPSBjaGFydEluZm8ueU1pblswXTtcclxuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XHJcbiAgICAgICAgeU1pbiA9IGNoYXJ0SW5mby55TWluWzFdO1xyXG4gICAgfVxyXG4gICAgbGV0IHlNaW5Bc3NpZ25lZCA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGVvZiB5TWluICE9PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgeU1pbiA9IHlNaW5PZkRhdGFzZXRzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB5TWluQXNzaWduZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB5TWF4ID0gbnVsbDtcclxuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xyXG4gICAgICAgIHlNYXggPSBjaGFydEluZm8ueU1heFswXTtcclxuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XHJcbiAgICAgICAgeU1heCA9IGNoYXJ0SW5mby55TWF4WzFdO1xyXG4gICAgfVxyXG4gICAgbGV0IHlNYXhBc3NpZ25lZCA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGVvZiB5TWF4ICE9PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgeU1heCA9IHlNYXhPZkRhdGFzZXRzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB5TWF4QXNzaWduZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHlNYXggPCB5TWluKSB7XHJcbiAgICAgICAgbGV0IHlUbXAgPSB5TWluO1xyXG4gICAgICAgIHlNaW4gPSB5TWF4O1xyXG4gICAgICAgIHlNYXggPSB5VG1wO1xyXG4gICAgICAgIGxldCB5VG1wQXNzaWduZWQgPSB5TWluQXNzaWduZWQ7XHJcbiAgICAgICAgeU1pbkFzc2lnbmVkID0geU1heEFzc2lnbmVkO1xyXG4gICAgICAgIHlNYXhBc3NpZ25lZCA9IHlUbXBBc3NpZ25lZDtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgeUV4dGVudCA9IHlNYXggLSB5TWluO1xyXG5cclxuICAgIGxldCB5U2NhbGUgPSBkMy5zY2FsZUxpbmVhcigpO1xyXG4gICAgbGV0IHlMb3dlciwgeVVwcGVyO1xyXG4gICAgaWYgKHlNaW5Bc3NpZ25lZCkge1xyXG4gICAgICAgIHlMb3dlciA9IHlNaW47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHlMb3dlciA9IHlNaW4gLSB5RXh0ZW50ICogMC4yO1xyXG4gICAgfVxyXG4gICAgaWYgKHlNYXhBc3NpZ25lZCkge1xyXG4gICAgICAgIHlVcHBlciA9IHlNYXg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHlVcHBlciA9IHlNYXggKyB5RXh0ZW50ICogMC4yO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgaXQgaXMgYmFyIGNoYXJ0LCB6ZXJvIG11c3QgYmUgY29udGFpbmVkIGluIHRoZSByYW5nZVxyXG4gICAgaWYgKGNoYXJ0SW5mby5HZXRHcmFwaFR5cGUoKSA9PT0gR3JhcGhUeXBlLkJhcikge1xyXG4gICAgICAgIGlmICh5VXBwZXIgPCAwLjApIHtcclxuICAgICAgICAgICAgeVVwcGVyID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHlMb3dlciA+IDAuMCkge1xyXG4gICAgICAgICAgICB5TG93ZXIgPSAwLjA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGRvbWFpbiA9IFt5TG93ZXIsIHlVcHBlcl07XHJcbiAgICBpZiAoXHJcbiAgICAgICAgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiICYmIGNoYXJ0SW5mby5yZXZlcnNlWUF4aXNbMF0pIHx8XHJcbiAgICAgICAgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIiAmJiBjaGFydEluZm8ucmV2ZXJzZVlBeGlzWzFdKVxyXG4gICAgKSB7XHJcbiAgICAgICAgZG9tYWluID0gW3lVcHBlciwgeUxvd2VyXTtcclxuICAgIH1cclxuICAgIHlTY2FsZS5kb21haW4oZG9tYWluKS5yYW5nZShbcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0LCAwXSk7XHJcblxyXG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XHJcbiAgICAgICAgY2hhcnRFbGVtZW50c1tcImxlZnRZU2NhbGVcIl0gPSB5U2NhbGU7XHJcbiAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xyXG4gICAgICAgIGNoYXJ0RWxlbWVudHNbXCJyaWdodFlTY2FsZVwiXSA9IHlTY2FsZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgeUF4aXNDb2xvciA9IFwiXCI7XHJcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgICB5QXhpc0NvbG9yID0gY2hhcnRJbmZvLnlBeGlzQ29sb3JbMF07XHJcbiAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xyXG4gICAgICAgIHlBeGlzQ29sb3IgPSBjaGFydEluZm8ueUF4aXNDb2xvclsxXTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgeUF4aXNMYWJlbENvbG9yID0gXCJcIjtcclxuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xyXG4gICAgICAgIHlBeGlzTGFiZWxDb2xvciA9IGNoYXJ0SW5mby55QXhpc0xhYmVsQ29sb3JbMF07XHJcbiAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xyXG4gICAgICAgIHlBeGlzTGFiZWxDb2xvciA9IGNoYXJ0SW5mby55QXhpc0xhYmVsQ29sb3JbMV07XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHlBeGlzTGFiZWxUZXh0ID0gXCJcIjtcclxuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xyXG4gICAgICAgIHlBeGlzTGFiZWxUZXh0ID0gY2hhcnRJbmZvLnlBeGlzTGFiZWxbMF07XHJcbiAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xyXG4gICAgICAgIHlBeGlzTGFiZWxUZXh0ID0gY2hhcnRJbmZvLnlBeGlzTGFiZWxbMV07XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHlBeGlzVW5pdFRleHQgPSBcIlwiO1xyXG4gICAgbGV0IHlBeGlzVGlja0ludGVydmFsID0gbnVsbDtcclxuICAgIGxldCB5QXhpc1RpY2tMYWJlbEZvcm1hdCA9IG51bGw7XHJcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgICB5QXhpc1VuaXRUZXh0ID0gY2hhcnRJbmZvLnlBeGlzVW5pdFswXTtcclxuICAgICAgICB5QXhpc1RpY2tJbnRlcnZhbCA9IGNoYXJ0SW5mby55QXhpc1RpY2tJbnRlcnZhbFswXTsgLy8gc3RyaW5nXHJcbiAgICAgICAgeUF4aXNUaWNrTGFiZWxGb3JtYXQgPSBjaGFydEluZm8ueUF4aXNUaWNrTGFiZWxGb3JtYXRbMF07XHJcbiAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xyXG4gICAgICAgIHlBeGlzVW5pdFRleHQgPSBjaGFydEluZm8ueUF4aXNVbml0WzFdO1xyXG4gICAgICAgIHlBeGlzVGlja0ludGVydmFsID0gY2hhcnRJbmZvLnlBeGlzVGlja0ludGVydmFsWzFdOyAvLyBzdHJpbmdcclxuICAgICAgICB5QXhpc1RpY2tMYWJlbEZvcm1hdCA9IGNoYXJ0SW5mby55QXhpc1RpY2tMYWJlbEZvcm1hdFsxXTtcclxuICAgIH1cclxuICAgIC8vIGdldCBpbnRlcnZhbCBmcm9tIHN0cmluZ1xyXG4gICAgbGV0IHRpY2tJbnRlcnZhbCA9IG51bGw7XHJcbiAgICBpZiAodmFsdWVJc1RpbWUpIHtcclxuICAgICAgICB0aWNrSW50ZXJ2YWwgPSBoZWxwZXIucGFyc2VEdXJhdGlvblN0cmluZyh5QXhpc1RpY2tJbnRlcnZhbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRpY2tJbnRlcnZhbCA9IHBhcnNlRmxvYXQoeUF4aXNUaWNrSW50ZXJ2YWwpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTnVtYmVyKHRpY2tJbnRlcnZhbCkgfHwgTnVtYmVyLmlzTmFOKHRpY2tJbnRlcnZhbCkpIHtcclxuICAgICAgICAgICAgdGlja0ludGVydmFsID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHlBeGlzR2VuO1xyXG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XHJcbiAgICAgICAgeUF4aXNHZW4gPSBkMy5heGlzTGVmdCh5U2NhbGUpO1xyXG4gICAgfSBlbHNlIGlmICh5QXhpc0xvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcclxuICAgICAgICB5QXhpc0dlbiA9IGQzLmF4aXNSaWdodCh5U2NhbGUpO1xyXG4gICAgfVxyXG4gICAgaWYgKHlBeGlzR2VuKSB7XHJcbiAgICAgICAgbGV0IHRpY2tMYWJlbEZvcm1hdCA9IGdldFlUaWNrTGFiZWxGb3JtYXQoXHJcbiAgICAgICAgICAgIHlMb3dlcixcclxuICAgICAgICAgICAgeVVwcGVyLFxyXG4gICAgICAgICAgICB5QXhpc1RpY2tMYWJlbEZvcm1hdCxcclxuICAgICAgICAgICAgdmFsdWVJc1RpbWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0aWNrTGFiZWxGb3JtYXQpIHtcclxuICAgICAgICAgICAgeUF4aXNHZW4udGlja0Zvcm1hdCh0aWNrTGFiZWxGb3JtYXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdGlja1ZhbHVlcyA9IGdldFlUaWNrVmFsdWVzKFxyXG4gICAgICAgICAgICB5TG93ZXIsXHJcbiAgICAgICAgICAgIHlVcHBlcixcclxuICAgICAgICAgICAgdGlja0ludGVydmFsLFxyXG4gICAgICAgICAgICB2YWx1ZUlzVGltZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHRpY2tWYWx1ZXMpIHtcclxuICAgICAgICAgICAgeUF4aXNHZW4udGlja1ZhbHVlcyh0aWNrVmFsdWVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHlBeGlzID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxyXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcInlBeGlzXCIpXHJcbiAgICAgICAgLmNhbGwoeUF4aXNHZW4pXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItYXhpc1wiKTtcclxuICAgIGlmICh5QXhpc0xvY2F0aW9uID09IFwicmlnaHRcIikge1xyXG4gICAgICAgIHlBeGlzLmF0dHIoXHJcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXHJcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICsgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggKyBcIiAsMClcIlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgICBjaGFydEVsZW1lbnRzW1wibGVmdFlBeGlzXCJdID0geUF4aXM7XHJcbiAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xyXG4gICAgICAgIGNoYXJ0RWxlbWVudHNbXCJyaWdodFlBeGlzXCJdID0geUF4aXM7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHlBeGlzTGluZSA9IHlBeGlzLnNlbGVjdEFsbChcInBhdGhcIik7XHJcbiAgICBpZiAoeUF4aXNDb2xvcikge1xyXG4gICAgICAgIHlBeGlzTGluZS5zdHlsZShcInN0cm9rZVwiLCB5QXhpc0NvbG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgeUF4aXNUaWNrcyA9IHlBeGlzLnNlbGVjdEFsbChcImxpbmVcIik7XHJcbiAgICBpZiAoeUF4aXNDb2xvcikge1xyXG4gICAgICAgIHlBeGlzVGlja3Muc3R5bGUoXCJzdHJva2VcIiwgeUF4aXNDb2xvcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHlBeGlzVGlja0xhYmVscyA9IHlBeGlzXHJcbiAgICAgICAgLnNlbGVjdEFsbChcInRleHRcIilcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10aWNrLWxhYmVsXCIpO1xyXG4gICAgaWYgKHlBeGlzQ29sb3IpIHtcclxuICAgICAgICB5QXhpc1RpY2tMYWJlbHMuc3R5bGUoXCJmaWxsXCIsIHlBeGlzQ29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEdldCBtYXggdGljayBsYWJlbCB3aWR0aFxyXG4gICAgbGV0IG1heFRpY2tMYWJlbFdpZHRoID0gMDtcclxuICAgIGZvciAobGV0IGxhYmVsIG9mIHlBeGlzVGlja0xhYmVscykge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGxhYmVsLnRleHRDb250ZW50KTtcclxuICAgICAgICBpZiAobGFiZWwudGV4dENvbnRlbnQpIHtcclxuICAgICAgICAgICAgbGV0IGxhYmVsU2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXHJcbiAgICAgICAgICAgICAgICBsYWJlbC50ZXh0Q29udGVudCxcclxuICAgICAgICAgICAgICAgIFwidHJhY2tlci1heGlzLWxhYmVsXCJcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGxhYmVsU2l6ZS53aWR0aCA+IG1heFRpY2tMYWJlbFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICBtYXhUaWNrTGFiZWxXaWR0aCA9IGxhYmVsU2l6ZS53aWR0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKG1heFRpY2tMYWJlbFdpZHRoKTtcclxuXHJcbiAgICBpZiAoeUF4aXNVbml0VGV4dCAhPT0gXCJcIikge1xyXG4gICAgICAgIHlBeGlzTGFiZWxUZXh0ICs9IFwiIChcIiArIHlBeGlzVW5pdFRleHQgKyBcIilcIjtcclxuICAgIH1cclxuICAgIGxldCB5VGlja0xlbmd0aCA9IDY7XHJcbiAgICBsZXQgeUF4aXNMYWJlbFNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKHlBeGlzTGFiZWxUZXh0KTtcclxuICAgIGxldCB5QXhpc0xhYmVsID0geUF4aXNcclxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAgIC50ZXh0KHlBeGlzTGFiZWxUZXh0KVxyXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwicm90YXRlKC05MClcIilcclxuICAgICAgICAuYXR0cihcInhcIiwgKC0xICogcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0KSAvIDIuMClcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1heGlzLWxhYmVsXCIpO1xyXG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XHJcbiAgICAgICAgeUF4aXNMYWJlbC5hdHRyKFxyXG4gICAgICAgICAgICBcInlcIixcclxuICAgICAgICAgICAgLXlUaWNrTGVuZ3RoIC0gbWF4VGlja0xhYmVsV2lkdGggLSB5QXhpc0xhYmVsU2l6ZS5oZWlnaHQgLyAyLjBcclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB5QXhpc0xhYmVsLmF0dHIoXHJcbiAgICAgICAgICAgIFwieVwiLFxyXG4gICAgICAgICAgICAreVRpY2tMZW5ndGggKyBtYXhUaWNrTGFiZWxXaWR0aCArIHlBeGlzTGFiZWxTaXplLmhlaWdodFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoeUF4aXNMYWJlbENvbG9yKSB7XHJcbiAgICAgICAgeUF4aXNMYWJlbC5zdHlsZShcImZpbGxcIiwgeUF4aXNMYWJlbENvbG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgeUF4aXNXaWR0aCA9IHlBeGlzTGFiZWxTaXplLmhlaWdodCArIG1heFRpY2tMYWJlbFdpZHRoICsgeVRpY2tMZW5ndGg7XHJcbiAgICB5QXhpcy5hdHRyKFwid2lkdGhcIiwgeUF4aXNXaWR0aCk7XHJcblxyXG4gICAgLy8gRXhwYW5kIGFyZWFzXHJcbiAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgeUF4aXNXaWR0aCwgMCk7XHJcbiAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLmdyYXBoQXJlYSwgeUF4aXNXaWR0aCwgMCk7XHJcblxyXG4gICAgLy8gTW92ZSBhcmVhc1xyXG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XHJcbiAgICAgICAgLy8gTW92ZSBkYXRhQXJlYVxyXG4gICAgICAgIGhlbHBlci5tb3ZlQXJlYShjaGFydEVsZW1lbnRzLmRhdGFBcmVhLCB5QXhpc1dpZHRoLCAwKTtcclxuXHJcbiAgICAgICAgLy8gTW92ZSB0aXRsZVxyXG4gICAgICAgIGlmIChjaGFydEVsZW1lbnRzLnRpdGxlKSB7XHJcbiAgICAgICAgICAgIGhlbHBlci5tb3ZlQXJlYShjaGFydEVsZW1lbnRzLnRpdGxlLCB5QXhpc1dpZHRoLCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbmRlckxpbmUoXHJcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIGxpbmVJbmZvOiBMaW5lSW5mbyxcclxuICAgIGRhdGFzZXQ6IERhdGFzZXQsXHJcbiAgICB5QXhpc0xvY2F0aW9uOiBzdHJpbmdcclxuKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0KTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8pO1xyXG5cclxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhbGluZUluZm8pIHJldHVybjtcclxuXHJcbiAgICBsZXQgeVNjYWxlOiBhbnkgPSBudWxsO1xyXG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XHJcbiAgICAgICAgeVNjYWxlID0gY2hhcnRFbGVtZW50cy5sZWZ0WVNjYWxlO1xyXG4gICAgfSBlbHNlIGlmICh5QXhpc0xvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcclxuICAgICAgICB5U2NhbGUgPSBjaGFydEVsZW1lbnRzLnJpZ2h0WVNjYWxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChsaW5lSW5mby5zaG93TGluZVtkYXRhc2V0LmdldElkKCldKSB7XHJcbiAgICAgICAgbGV0IGxpbmVHZW4gPSBkM1xyXG4gICAgICAgICAgICAubGluZTxEYXRhUG9pbnQ+KClcclxuICAgICAgICAgICAgLmRlZmluZWQoZnVuY3Rpb24gKHA6IERhdGFQb2ludCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHAudmFsdWUgIT09IG51bGw7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC54KGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGFydEVsZW1lbnRzLnhTY2FsZShwLmRhdGUpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAueShmdW5jdGlvbiAocDogRGF0YVBvaW50KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geVNjYWxlKHAudmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbGV0IGxpbmUgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXHJcbiAgICAgICAgICAgIC5hcHBlbmQoXCJwYXRoXCIpXHJcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWxpbmVcIilcclxuICAgICAgICAgICAgLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsIGxpbmVJbmZvLmxpbmVXaWR0aFtkYXRhc2V0LmdldElkKCldKTtcclxuXHJcbiAgICAgICAgaWYgKGxpbmVJbmZvLmZpbGxHYXBbZGF0YXNldC5nZXRJZCgpXSkge1xyXG4gICAgICAgICAgICBsaW5lLmRhdHVtKFxyXG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbShkYXRhc2V0KS5maWx0ZXIoZnVuY3Rpb24gKHApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcC52YWx1ZSAhPT0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICkuYXR0cihcImRcIiwgbGluZUdlbiBhcyBhbnkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxpbmUuZGF0dW0oZGF0YXNldCkuYXR0cihcImRcIiwgbGluZUdlbiBhcyBhbnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGxpbmVJbmZvLmxpbmVDb2xvcltkYXRhc2V0LmdldElkKCldKSB7XHJcbiAgICAgICAgICAgIGxpbmUuc3R5bGUoXCJzdHJva2VcIiwgbGluZUluZm8ubGluZUNvbG9yW2RhdGFzZXQuZ2V0SWQoKV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVuZGVyUG9pbnRzKFxyXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBsaW5lSW5mbzogTGluZUluZm8sXHJcbiAgICBkYXRhc2V0OiBEYXRhc2V0LFxyXG4gICAgeUF4aXNMb2NhdGlvbjogc3RyaW5nXHJcbikge1xyXG4gICAgLy8gY29uc29sZS5sb2cobGluZUluZm8pO1xyXG4gICAgLy8gY29uc29sZS5sb2coZGF0YXNldCk7XHJcblxyXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFsaW5lSW5mbykgcmV0dXJuO1xyXG5cclxuICAgIGxldCB5U2NhbGU6IGFueSA9IG51bGw7XHJcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgICB5U2NhbGUgPSBjaGFydEVsZW1lbnRzLmxlZnRZU2NhbGU7XHJcbiAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xyXG4gICAgICAgIHlTY2FsZSA9IGNoYXJ0RWxlbWVudHMucmlnaHRZU2NhbGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGxpbmVJbmZvLnNob3dQb2ludFtkYXRhc2V0LmdldElkKCldKSB7XHJcbiAgICAgICAgbGV0IGRvdHMgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJkb3RcIilcclxuICAgICAgICAgICAgLmRhdGEoXHJcbiAgICAgICAgICAgICAgICBBcnJheS5mcm9tKGRhdGFzZXQpLmZpbHRlcihmdW5jdGlvbiAocDogRGF0YVBvaW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAudmFsdWUgIT09IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoXCJjaXJjbGVcIilcclxuICAgICAgICAgICAgLmF0dHIoXCJyXCIsIGxpbmVJbmZvLnBvaW50U2l6ZVtkYXRhc2V0LmdldElkKCldKVxyXG4gICAgICAgICAgICAuYXR0cihcImN4XCIsIGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGFydEVsZW1lbnRzLnhTY2FsZShwLmRhdGUpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcImN5XCIsIGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB5U2NhbGUocC52YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFwiZGF0ZVwiLCBmdW5jdGlvbiAocDogRGF0YVBvaW50KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZDMudGltZUZvcm1hdChcIiV5LSVtLSVkXCIpKHAuZGF0ZSBhcyBhbnkpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcInZhbHVlXCIsIGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwLnZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIocC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAudmFsdWUudG9GaXhlZCgwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAudmFsdWUudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoXCJ2YWx1ZVR5cGVcIiwgVmFsdWVUeXBlW2RhdGFzZXQudmFsdWVUeXBlXSlcclxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItZG90XCIpO1xyXG4gICAgICAgIGlmIChsaW5lSW5mby5wb2ludENvbG9yW2RhdGFzZXQuZ2V0SWQoKV0pIHtcclxuICAgICAgICAgICAgZG90cy5zdHlsZShcImZpbGxcIiwgbGluZUluZm8ucG9pbnRDb2xvcltkYXRhc2V0LmdldElkKCldKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGxpbmVJbmZvLnBvaW50Qm9yZGVyQ29sb3JbZGF0YXNldC5nZXRJZCgpXSAmJlxyXG4gICAgICAgICAgICAgICAgbGluZUluZm8ucG9pbnRCb3JkZXJXaWR0aFtkYXRhc2V0LmdldElkKCldID4gMC4wXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgZG90cy5zdHlsZShcclxuICAgICAgICAgICAgICAgICAgICBcInN0cm9rZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGxpbmVJbmZvLnBvaW50Qm9yZGVyQ29sb3JbZGF0YXNldC5nZXRJZCgpXVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGRvdHMuc3R5bGUoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJva2Utd2lkdGhcIixcclxuICAgICAgICAgICAgICAgICAgICBsaW5lSW5mby5wb2ludEJvcmRlcldpZHRoW2RhdGFzZXQuZ2V0SWQoKV1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChsaW5lSW5mby5hbGxvd0luc3BlY3REYXRhKSB7XHJcbiAgICAgICAgICAgIHJlbmRlclRvb2x0aXAoZG90cywgY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZW5kZXJUb29sdGlwKFxyXG4gICAgdGFyZ2V0RWxlbWVudHM6IGFueSxcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXHJcbikge1xyXG4gICAgbGV0IHRvb2x0aXAgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhLmFwcGVuZChcInN2Z1wiKS5zdHlsZShcIm9wYWNpdHlcIiwgMCk7XHJcbiAgICBsZXQgdG9vbHRpcEJnID0gdG9vbHRpcC5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJ4XCIsIDApLmF0dHIoXCJ5XCIsIDApO1xyXG4gICAgbGV0IHRvb2x0aXBMYWJlbCA9IHRvb2x0aXAuYXBwZW5kKFwidGV4dFwiKTtcclxuICAgIGxldCB0b29sdGlwTGFiZWxEYXRlID0gdG9vbHRpcExhYmVsXHJcbiAgICAgICAgLmFwcGVuZChcInRzcGFuXCIpXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItdG9vbHRpcC1sYWJlbFwiKTtcclxuICAgIGxldCB0b29sdGlwTGFiZWxWYWx1ZSA9IHRvb2x0aXBMYWJlbFxyXG4gICAgICAgIC5hcHBlbmQoXCJ0c3BhblwiKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRvb2x0aXAtbGFiZWxcIik7XHJcblxyXG4gICAgbGV0IHhTcGFjaW5nID0gMztcclxuICAgIGxldCB5U3BhY2luZyA9IDM7XHJcblxyXG4gICAgdGFyZ2V0RWxlbWVudHNcclxuICAgICAgICAub24oXCJtb3VzZWVudGVyXCIsIGZ1bmN0aW9uIChldmVudDogYW55KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IFt4LCB5XSA9IGQzLnBvaW50ZXIoZXZlbnQpO1xyXG4gICAgICAgICAgICBsZXQgdG9vbHRpcEJnV2lkdGggPSAwO1xyXG4gICAgICAgICAgICBsZXQgdG9vbHRpcEJnSGVpZ2h0ID0gMDtcclxuICAgICAgICAgICAgLy8gRGF0ZVxyXG4gICAgICAgICAgICBsZXQgbGFiZWxEYXRlVGV4dCA9IFwiZGF0ZTogXCIgKyBkMy5zZWxlY3QodGhpcykuYXR0cihcImRhdGVcIik7XHJcbiAgICAgICAgICAgIC8vIGxhYmVsRGF0ZVRleHQgPSB4LnRvU3RyaW5nKCk7Ly8gZGVidWdcclxuICAgICAgICAgICAgbGV0IGxhYmVsRGF0ZVNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKFxyXG4gICAgICAgICAgICAgICAgbGFiZWxEYXRlVGV4dCxcclxuICAgICAgICAgICAgICAgIFwidHJhY2tlci10b29sdGlwLWxhYmVsXCJcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdG9vbHRpcExhYmVsRGF0ZS50ZXh0KGxhYmVsRGF0ZVRleHQpO1xyXG4gICAgICAgICAgICBpZiAobGFiZWxEYXRlU2l6ZS53aWR0aCA+IHRvb2x0aXBCZ1dpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICB0b29sdGlwQmdXaWR0aCA9IGxhYmVsRGF0ZVNpemUud2lkdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdG9vbHRpcEJnSGVpZ2h0ICs9IGxhYmVsRGF0ZVNpemUuaGVpZ2h0O1xyXG4gICAgICAgICAgICB0b29sdGlwTGFiZWxEYXRlLmF0dHIoXCJ4XCIsIHhTcGFjaW5nKS5hdHRyKFwieVwiLCB0b29sdGlwQmdIZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICAgICAgbGV0IGxhYmVsVmFsdWVUZXh0ID0gXCJ2YWx1ZTogXCI7XHJcbiAgICAgICAgICAgIGxldCB2YWx1ZVR5cGUgPSBkMy5zZWxlY3QodGhpcykuYXR0cihcInZhbHVlVHlwZVwiKTtcclxuICAgICAgICAgICAgbGV0IHN0clZhbHVlID0gZDMuc2VsZWN0KHRoaXMpLmF0dHIoXCJ2YWx1ZVwiKTtcclxuICAgICAgICAgICAgLy8gc3RyVmFsdWUgKz0geS50b1N0cmluZygpOy8vZGVidWdcclxuICAgICAgICAgICAgaWYgKHZhbHVlVHlwZSA9PT0gXCJUaW1lXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBkYXlTdGFydCA9IHdpbmRvdy5tb21lbnQoXCIwMDowMFwiLCBcIkhIOm1tXCIsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRpY2tUaW1lID0gZGF5U3RhcnQuYWRkKHBhcnNlRmxvYXQoc3RyVmFsdWUpLCBcInNlY29uZHNcIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0ZVZhbHVlID0gdGlja1RpbWUuZm9ybWF0KFwiSEg6bW1cIik7XHJcbiAgICAgICAgICAgICAgICBsYWJlbFZhbHVlVGV4dCArPSBkYXRlVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB0b29sdGlwTGFiZWxWYWx1ZS50ZXh0KGxhYmVsVmFsdWVUZXh0KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxhYmVsVmFsdWVUZXh0ICs9IHN0clZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdG9vbHRpcExhYmVsVmFsdWUudGV4dChsYWJlbFZhbHVlVGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGxhYmVsVmFsdWVTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcclxuICAgICAgICAgICAgICAgIGxhYmVsVmFsdWVUZXh0LFxyXG4gICAgICAgICAgICAgICAgXCJ0cmFja2VyLXRvb2x0aXAtbGFiZWxcIlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAobGFiZWxWYWx1ZVNpemUud2lkdGggPiB0b29sdGlwQmdXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgdG9vbHRpcEJnV2lkdGggPSBsYWJlbFZhbHVlU2l6ZS53aWR0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0b29sdGlwQmdIZWlnaHQgKz0geVNwYWNpbmcgKyBsYWJlbFZhbHVlU2l6ZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHRvb2x0aXBMYWJlbFZhbHVlLmF0dHIoXCJ4XCIsIHhTcGFjaW5nKS5hdHRyKFwieVwiLCB0b29sdGlwQmdIZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgdG9vbHRpcEJnV2lkdGggKz0gMiAqIHhTcGFjaW5nO1xyXG4gICAgICAgICAgICB0b29sdGlwQmdIZWlnaHQgKz0gMiAqIHlTcGFjaW5nO1xyXG4gICAgICAgICAgICB0b29sdGlwTGFiZWxcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgdG9vbHRpcEJnV2lkdGgpXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCB0b29sdGlwQmdIZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgdG9vbHRpcEJnXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHRvb2x0aXBCZ1dpZHRoKVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdG9vbHRpcEJnSGVpZ2h0KVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItdG9vbHRpcFwiKTtcclxuXHJcbiAgICAgICAgICAgIGxldCB0b29sdGlwUG9zWCA9IHg7XHJcbiAgICAgICAgICAgIGxldCB0b29sdGlwUG9zWSA9IHk7XHJcbiAgICAgICAgICAgIGxldCB0b29sdGlwWE9mZnNldCA9IDEyO1xyXG4gICAgICAgICAgICBsZXQgdG9vbHRpcFlPZmZzZXQgPSAxMjtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgeCArIHRvb2x0aXBYT2Zmc2V0ICsgdG9vbHRpcEJnV2lkdGggPlxyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGhcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBtb3ZlIHRvb2x0aXAgdG8gbGVmdFxyXG4gICAgICAgICAgICAgICAgdG9vbHRpcFBvc1ggPSB4IC0gdG9vbHRpcEJnV2lkdGggLSB0b29sdGlwWE9mZnNldDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgYXQgdGhlIHJpZ2h0IHNpZGVcclxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NYID0geCArIHRvb2x0aXBYT2Zmc2V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh5IC0gdG9vbHRpcFlPZmZzZXQgLSB0b29sdGlwQmdIZWlnaHQgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkb3duIHNpZGVcclxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NZID0geSArIHRvb2x0aXBZT2Zmc2V0O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBtb3ZlIHRvIHVwIHNpZGVcclxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NZID0geSAtIHRvb2x0aXBZT2Zmc2V0IC0gdG9vbHRpcEJnSGVpZ2h0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRvb2x0aXAuYXR0cihcInhcIiwgdG9vbHRpcFBvc1gpLmF0dHIoXCJ5XCIsIHRvb2x0aXBQb3NZKTtcclxuICAgICAgICAgICAgdG9vbHRpcC50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZShcIm9wYWNpdHlcIiwgMSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAub24oXCJtb3VzZWxlYXZlXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdG9vbHRpcC50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5zdHlsZShcIm9wYWNpdHlcIiwgMCk7XHJcbiAgICAgICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbmRlckJhcihcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgYmFySW5mbzogQmFySW5mbyxcclxuICAgIGRhdGFzZXQ6IERhdGFzZXQsXHJcbiAgICB5QXhpc0xvY2F0aW9uOiBzdHJpbmcsXHJcbiAgICBjdXJyQmFyU2V0OiBudW1iZXIsXHJcbiAgICB0b3RhbE51bU9mQmFyU2V0czogbnVtYmVyXHJcbikge1xyXG4gICAgLy8gY29uc29sZS5sb2coZGF0YXNldCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhiYXJJbmZvKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiJWQvJWRcIiwgY3VyckJhclNldCwgdG90YWxOdW1PZkJhclNldHMpO1xyXG5cclxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhYmFySW5mbykgcmV0dXJuO1xyXG5cclxuICAgIGxldCBiYXJHYXAgPSAxO1xyXG4gICAgbGV0IGJhclNldFdpZHRoID0gcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggLyBkYXRhc2V0LmdldExlbmd0aCgpO1xyXG4gICAgbGV0IGJhcldpZHRoID0gYmFyU2V0V2lkdGg7XHJcbiAgICBpZiAoYmFyU2V0V2lkdGggLSBiYXJHYXAgPiAwKSB7XHJcbiAgICAgICAgYmFyV2lkdGggPSBiYXJTZXRXaWR0aCAtIGJhckdhcDtcclxuICAgIH1cclxuICAgIGJhcldpZHRoID0gYmFyV2lkdGggLyB0b3RhbE51bU9mQmFyU2V0cztcclxuXHJcbiAgICBsZXQgcG9ydGlvbkxlZnQgPSAoY3VyckJhclNldCArIDEpIC8gdG90YWxOdW1PZkJhclNldHM7XHJcblxyXG4gICAgbGV0IHlTY2FsZTogYW55ID0gbnVsbDtcclxuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xyXG4gICAgICAgIHlTY2FsZSA9IGNoYXJ0RWxlbWVudHMubGVmdFlTY2FsZTtcclxuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XHJcbiAgICAgICAgeVNjYWxlID0gY2hhcnRFbGVtZW50cy5yaWdodFlTY2FsZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYmFycyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcclxuICAgICAgICAuc2VsZWN0QWxsKFwiYmFyXCIpXHJcbiAgICAgICAgLmRhdGEoXHJcbiAgICAgICAgICAgIEFycmF5LmZyb20oZGF0YXNldCkuZmlsdGVyKGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwLnZhbHVlICE9PSBudWxsO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgIC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgICAgLmF0dHIoXCJ4XCIsIGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBvcnRpb25WaXNpYmxlID0gY3VyckJhclNldCArIDEgLSB0b3RhbE51bU9mQmFyU2V0cyAvIDIuMDtcclxuICAgICAgICAgICAgICAgIGlmIChwb3J0aW9uVmlzaWJsZSA8IDEuMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMueFNjYWxlKHAuZGF0ZSkgLVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYXJTZXRXaWR0aCAvIDIuMCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJCYXJTZXQgKiBiYXJXaWR0aCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRpb25WaXNpYmxlICogYmFyV2lkdGhcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLnhTY2FsZShwLmRhdGUpIC1cclxuICAgICAgICAgICAgICAgIGJhclNldFdpZHRoIC8gMi4wICtcclxuICAgICAgICAgICAgICAgIGN1cnJCYXJTZXQgKiBiYXJXaWR0aFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHlTY2FsZShNYXRoLm1heChwLnZhbHVlLCAwKSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBvcnRpb25WaXNpYmxlID0gY3VyckJhclNldCArIDEgLSB0b3RhbE51bU9mQmFyU2V0cyAvIDIuMDtcclxuICAgICAgICAgICAgICAgIGlmIChwb3J0aW9uVmlzaWJsZSA8IDAuMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwLjA7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvcnRpb25WaXNpYmxlIDwgMS4wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhcldpZHRoICogcG9ydGlvblZpc2libGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYmFyV2lkdGg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZGF0YXNldC5nZXRMZW5ndGgoKSAtIDEpIHtcclxuICAgICAgICAgICAgICAgIGxldCBwb3J0aW9uVmlzaWJsZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgMS4wIC0gKGN1cnJCYXJTZXQgKyAxIC0gdG90YWxOdW1PZkJhclNldHMgLyAyLjApO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBvcnRpb25WaXNpYmxlIDwgMC4wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocG9ydGlvblZpc2libGUgPCAxLjApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFyV2lkdGggKiBwb3J0aW9uVmlzaWJsZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBiYXJXaWR0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYmFyV2lkdGg7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCBmdW5jdGlvbiAocDogRGF0YVBvaW50KSB7XHJcbiAgICAgICAgICAgIGlmIChwLnZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMoeVNjYWxlKHAudmFsdWUpIC0geVNjYWxlKDApKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItYmFyXCIpO1xyXG5cclxuICAgIGlmIChiYXJJbmZvLmJhckNvbG9yW2RhdGFzZXQuZ2V0SWQoKV0pIHtcclxuICAgICAgICBiYXJzLnN0eWxlKFwiZmlsbFwiLCBiYXJJbmZvLmJhckNvbG9yW2RhdGFzZXQuZ2V0SWQoKV0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZW5kZXJMZWdlbmQoXHJcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIGNoYXJ0SW5mbzogQ29tbW9uQ2hhcnRJbmZvXHJcbikge1xyXG4gICAgLy8gY29uc29sZS5sb2coY2hhcnRJbmZvLmxlZ2VuZFBvc2l0aW9uKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGNoYXJ0SW5mby5sZWdlbmRPcmllbnRhdGlvbik7XHJcblxyXG4gICAgLy8gR2V0IGNoYXJ0IGVsZW1lbnRzXHJcbiAgICBsZXQgc3ZnID0gY2hhcnRFbGVtZW50cy5zdmc7XHJcbiAgICBsZXQgZ3JhcGhBcmVhID0gY2hhcnRFbGVtZW50cy5ncmFwaEFyZWE7XHJcbiAgICBsZXQgZGF0YUFyZWEgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhO1xyXG4gICAgbGV0IHRpdGxlID0gY2hhcnRFbGVtZW50cy50aXRsZTtcclxuICAgIGxldCB4QXhpcyA9IGNoYXJ0RWxlbWVudHMueEF4aXM7XHJcbiAgICBsZXQgbGVmdFlBeGlzID0gY2hhcnRFbGVtZW50cy5sZWZ0WUF4aXM7XHJcbiAgICBsZXQgcmlnaHRZQXhpcyA9IGNoYXJ0RWxlbWVudHMucmlnaHRZQXhpcztcclxuXHJcbiAgICAvLyBHZXQgZWxlbWVudCB3aWR0aCBhbmQgaGVpZ2h0XHJcbiAgICBsZXQgdGl0bGVIZWlnaHQgPSAwLjA7XHJcbiAgICBpZiAodGl0bGUpIHtcclxuICAgICAgICB0aXRsZUhlaWdodCA9IHBhcnNlRmxvYXQodGl0bGUuYXR0cihcImhlaWdodFwiKSk7XHJcbiAgICB9XHJcbiAgICBsZXQgeEF4aXNIZWlnaHQgPSBwYXJzZUZsb2F0KHhBeGlzLmF0dHIoXCJoZWlnaHRcIikpO1xyXG4gICAgbGV0IGxlZnRZQXhpc1dpZHRoID0gMC4wO1xyXG4gICAgaWYgKGxlZnRZQXhpcykge1xyXG4gICAgICAgIGxlZnRZQXhpc1dpZHRoID0gcGFyc2VGbG9hdChsZWZ0WUF4aXMuYXR0cihcIndpZHRoXCIpKTtcclxuICAgIH1cclxuICAgIGxldCByaWdodFlBeGlzV2lkdGggPSAwLjA7XHJcbiAgICBpZiAocmlnaHRZQXhpcykge1xyXG4gICAgICAgIHJpZ2h0WUF4aXNXaWR0aCA9IHBhcnNlRmxvYXQocmlnaHRZQXhpcy5hdHRyKFwid2lkdGhcIikpO1xyXG4gICAgfVxyXG4gICAgLy8gR2V0IGRhdGFzZXRzXHJcbiAgICBsZXQgZGF0YXNldHMgPSByZW5kZXJJbmZvLmRhdGFzZXRzO1xyXG4gICAgbGV0IHhEYXRhc2V0SWRzID0gZGF0YXNldHMuZ2V0WERhdGFzZXRJZHMoKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHhEYXRhc2V0SWRzKTtcclxuXHJcbiAgICAvLyBHZXQgbmFtZXMgYW5kIHRoZWlyIGRpbWVuc2lvblxyXG4gICAgbGV0IG5hbWVzID0gZGF0YXNldHMuZ2V0TmFtZXMoKTsgLy8geERhdGFzZXQgbmFtZSBpbmNsdWRlZFxyXG4gICAgbGV0IG5hbWVTaXplcyA9IG5hbWVzLm1hcChmdW5jdGlvbiAobikge1xyXG4gICAgICAgIHJldHVybiBoZWxwZXIubWVhc3VyZVRleHRTaXplKG4sIFwidHJhY2tlci1sZWdlbmQtbGFiZWxcIik7XHJcbiAgICB9KTtcclxuICAgIGxldCBpbmRNYXhOYW1lID0gMDtcclxuICAgIGxldCBtYXhOYW1lV2lkdGggPSAwLjA7XHJcbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBuYW1lcy5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGluZCkpIGNvbnRpbnVlO1xyXG4gICAgICAgIGlmIChuYW1lU2l6ZXNbaW5kXS53aWR0aCA+IG1heE5hbWVXaWR0aCkge1xyXG4gICAgICAgICAgICBtYXhOYW1lV2lkdGggPSBuYW1lU2l6ZXNbaW5kXS53aWR0aDtcclxuICAgICAgICAgICAgaW5kTWF4TmFtZSA9IGluZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgbWF4TmFtZSA9IG5hbWVzW2luZE1heE5hbWVdO1xyXG4gICAgbGV0IGNoYXJhY3RlcldpZHRoID0gbWF4TmFtZVdpZHRoIC8gbWF4TmFtZS5sZW5ndGg7XHJcbiAgICBsZXQgbmFtZUhlaWdodCA9IG5hbWVTaXplc1tpbmRNYXhOYW1lXS5oZWlnaHQ7XHJcbiAgICBsZXQgbnVtTmFtZXMgPSBuYW1lcy5sZW5ndGggLSB4RGF0YXNldElkcy5sZW5ndGg7XHJcblxyXG4gICAgbGV0IHhTcGFjaW5nID0gMiAqIGNoYXJhY3RlcldpZHRoO1xyXG4gICAgbGV0IHlTcGFjaW5nID0gbmFtZUhlaWdodDtcclxuICAgIGxldCBtYXJrZXJXaWR0aCA9IDIgKiBjaGFyYWN0ZXJXaWR0aDtcclxuXHJcbiAgICAvLyBHZXQgbGVnZW5kIHdpZHRoIGFuZCBoZWlnaHRcclxuICAgIGxldCBsZWdlbmRXaWR0aCA9IDA7XHJcbiAgICBsZXQgbGVnZW5kSGVpZ2h0ID0gMDtcclxuICAgIGlmIChjaGFydEluZm8ubGVnZW5kT3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xyXG4gICAgICAgIGxlZ2VuZFdpZHRoID0geFNwYWNpbmcgKiAzICsgbWFya2VyV2lkdGggKyBtYXhOYW1lV2lkdGg7XHJcbiAgICAgICAgbGVnZW5kSGVpZ2h0ID0gKG51bU5hbWVzICsgMSkgKiB5U3BhY2luZztcclxuICAgIH0gZWxzZSBpZiAoY2hhcnRJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xyXG4gICAgICAgIGxlZ2VuZFdpZHRoID1cclxuICAgICAgICAgICAgKDIgKiB4U3BhY2luZyArIG1hcmtlcldpZHRoKSAqIG51bU5hbWVzICtcclxuICAgICAgICAgICAgeFNwYWNpbmcgK1xyXG4gICAgICAgICAgICBkMy5zdW0obmFtZVNpemVzLCBmdW5jdGlvbiAocywgaSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm4gMDtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzLndpZHRoO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBsZWdlbmRIZWlnaHQgPSB5U3BhY2luZyArIG5hbWVIZWlnaHQ7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcclxuICAgIC8vICAgICBgbWF4TmFtZTogJHttYXhOYW1lfSwgY2hhcmFjdGVyV2lkdGg6ICR7Y2hhcmFjdGVyV2lkdGh9LCBtYXhOYW1lV2lkdGg6ICR7bWF4TmFtZVdpZHRofWBcclxuICAgIC8vICk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhgeFNwYWNpbmc6JHt4U3BhY2luZ30sIG51bU5hbWVzOiAke251bU5hbWVzfSwgbWFya2VyV2lkdGg6ICR7bWFya2VyV2lkdGh9YCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhgbGVnZW5kV2lkdGg6ICR7bGVnZW5kV2lkdGh9LCBsZWdlbmRIZWlnaHQ6ICR7bGVnZW5kSGVpZ2h0fWApO1xyXG5cclxuICAgIC8vIENhbGN1YWx0ZSBsZW5nZW5kWCBhbmQgbGVnZW5kWVxyXG4gICAgbGV0IGxlZ2VuZFggPSAwLjA7IC8vIHJlbGF0aXZlIHRvIGdyYXBoQXJlYVxyXG4gICAgbGV0IGxlZ2VuZFkgPSAwLjA7XHJcbiAgICBpZiAoY2hhcnRJbmZvLmxlZ2VuZFBvc2l0aW9uID09PSBcInRvcFwiKSB7XHJcbiAgICAgICAgLy8gYmVsb3cgdGl0bGVcclxuICAgICAgICBsZWdlbmRYID1cclxuICAgICAgICAgICAgbGVmdFlBeGlzV2lkdGggK1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAvIDIuMCAtXHJcbiAgICAgICAgICAgIGxlZ2VuZFdpZHRoIC8gMi4wO1xyXG4gICAgICAgIGxlZ2VuZFkgPSB0aXRsZUhlaWdodDtcclxuICAgICAgICAvLyBFeHBhbmQgc3ZnXHJcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoc3ZnLCAwLCBsZWdlbmRIZWlnaHQgKyB5U3BhY2luZyk7XHJcbiAgICAgICAgLy8gTW92ZSBkYXRhQXJlYSBkb3duXHJcbiAgICAgICAgaGVscGVyLm1vdmVBcmVhKGRhdGFBcmVhLCAwLCBsZWdlbmRIZWlnaHQgKyB5U3BhY2luZyk7XHJcbiAgICB9IGVsc2UgaWYgKGNoYXJ0SW5mby5sZWdlbmRQb3NpdGlvbiA9PT0gXCJib3R0b21cIikge1xyXG4gICAgICAgIC8vIGJlbGxvdyB4LWF4aXMgbGFiZWxcclxuICAgICAgICBsZWdlbmRYID1cclxuICAgICAgICAgICAgbGVmdFlBeGlzV2lkdGggK1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAvIDIuMCAtXHJcbiAgICAgICAgICAgIGxlZ2VuZFdpZHRoIC8gMi4wO1xyXG4gICAgICAgIGxlZ2VuZFkgPVxyXG4gICAgICAgICAgICB0aXRsZUhlaWdodCArXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArXHJcbiAgICAgICAgICAgIHhBeGlzSGVpZ2h0ICtcclxuICAgICAgICAgICAgeVNwYWNpbmc7XHJcbiAgICAgICAgLy8gRXhwYW5kIHN2Z1xyXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKHN2ZywgMCwgbGVnZW5kSGVpZ2h0ICsgeVNwYWNpbmcpO1xyXG4gICAgfSBlbHNlIGlmIChjaGFydEluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwibGVmdFwiKSB7XHJcbiAgICAgICAgbGVnZW5kWCA9IDA7XHJcbiAgICAgICAgbGVnZW5kWSA9XHJcbiAgICAgICAgICAgIHRpdGxlSGVpZ2h0ICtcclxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0IC8gMi4wIC1cclxuICAgICAgICAgICAgbGVnZW5kSGVpZ2h0IC8gMi4wO1xyXG4gICAgICAgIC8vIEV4cGFuZCBzdmdcclxuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShzdmcsIGxlZ2VuZFdpZHRoICsgeFNwYWNpbmcsIDApO1xyXG4gICAgICAgIC8vIE1vdmUgZGF0YUFyZWEgcmlnaHRcclxuICAgICAgICBoZWxwZXIubW92ZUFyZWEoZGF0YUFyZWEsIGxlZ2VuZFdpZHRoICsgeFNwYWNpbmcsIDApO1xyXG4gICAgfSBlbHNlIGlmIChjaGFydEluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwicmlnaHRcIikge1xyXG4gICAgICAgIGxlZ2VuZFggPVxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArXHJcbiAgICAgICAgICAgIGxlZnRZQXhpc1dpZHRoICtcclxuICAgICAgICAgICAgcmlnaHRZQXhpc1dpZHRoICtcclxuICAgICAgICAgICAgeFNwYWNpbmc7XHJcbiAgICAgICAgbGVnZW5kWSA9XHJcbiAgICAgICAgICAgIHRpdGxlSGVpZ2h0ICtcclxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0IC8gMi4wIC1cclxuICAgICAgICAgICAgbGVnZW5kSGVpZ2h0IC8gMi4wO1xyXG4gICAgICAgIC8vIEV4cGFuZCBzdmdcclxuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShzdmcsIGxlZ2VuZFdpZHRoICsgeFNwYWNpbmcsIDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhgbGVnZW5kWDogJHtsZWdlbmRYfSwgbGVnZW5kWTogJHtsZWdlbmRZfWApO1xyXG5cclxuICAgIGxldCBsZWdlbmQgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYVxyXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImxlZ2VuZFwiKVxyXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgbGVnZW5kWCArIFwiLFwiICsgbGVnZW5kWSArIFwiKVwiKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdsZWdlbmRYOiAlZCwgbGVnZW5kWTogJWQnLCBsZWdlbmRYLCBsZWdlbmRZKTtcclxuXHJcbiAgICBsZXQgbGVnZW5kQmcgPSBsZWdlbmRcclxuICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWxlZ2VuZFwiKVxyXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgbGVnZW5kV2lkdGgpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbGVnZW5kSGVpZ2h0KTtcclxuICAgIGlmIChjaGFydEluZm8ubGVnZW5kQmdDb2xvcikge1xyXG4gICAgICAgIGxlZ2VuZEJnLnN0eWxlKFwiZmlsbFwiLCBjaGFydEluZm8ubGVnZW5kQmdDb2xvcik7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhcnRJbmZvLmxlZ2VuZEJvcmRlckNvbG9yKSB7XHJcbiAgICAgICAgbGVnZW5kQmcuc3R5bGUoXCJzdHJva2VcIiwgY2hhcnRJbmZvLmxlZ2VuZEJvcmRlckNvbG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZmlyc3RNYXJrZXJYID0geFNwYWNpbmc7XHJcbiAgICBsZXQgZmlyc3RNYXJrZXJZID0gbmFtZUhlaWdodDtcclxuICAgIGxldCBmaXJzdExhYmVsWCA9IGZpcnN0TWFya2VyWCArIHhTcGFjaW5nICsgbWFya2VyV2lkdGg7IC8vIHhTcGFjaW5nICsgMiAqIHhTcGFpbmdcclxuICAgIGxldCBmaXJzdExhYmVsWSA9IGZpcnN0TWFya2VyWTtcclxuXHJcbiAgICBpZiAoY2hhcnRJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcclxuICAgICAgICBpZiAoY2hhcnRJbmZvLkdldEdyYXBoVHlwZSgpID09PSBHcmFwaFR5cGUuTGluZSkge1xyXG4gICAgICAgICAgICAvLyBsaW5lc1xyXG4gICAgICAgICAgICBsZWdlbmRcclxuICAgICAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJtYXJrZXJzXCIpXHJcbiAgICAgICAgICAgICAgICAuZGF0YShuYW1lcylcclxuICAgICAgICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAgICAgICAuYXBwZW5kKFwibGluZVwiKVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCBmaXJzdE1hcmtlclgpXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcIngyXCIsIGZpcnN0TWFya2VyWCArIG1hcmtlcldpZHRoKVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5MVwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbnVtRWxlbXNFeGNsdWRlZCA9IHhEYXRhc2V0SWRzLmZpbHRlcigoaWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkIDwgaTtcclxuICAgICAgICAgICAgICAgICAgICB9KS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgaSA9IGkgLSBudW1FbGVtc0V4Y2x1ZGVkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdE1hcmtlclkgKyBpICogeVNwYWNpbmc7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5MlwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbnVtRWxlbXNFeGNsdWRlZCA9IHhEYXRhc2V0SWRzLmZpbHRlcigoaWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkIDwgaTtcclxuICAgICAgICAgICAgICAgICAgICB9KS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgaSA9IGkgLSBudW1FbGVtc0V4Y2x1ZGVkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdE1hcmtlclkgKyBpICogeVNwYWNpbmc7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnN0eWxlKFwic3Ryb2tlXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcnRJbmZvIGFzIExpbmVJbmZvKS5saW5lQ29sb3JbaV07XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIHBvaW50c1xyXG4gICAgICAgICAgICBsZWdlbmRcclxuICAgICAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJtYXJrZXJzXCIpXHJcbiAgICAgICAgICAgICAgICAuZGF0YShuYW1lcylcclxuICAgICAgICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAgICAgICAuYXBwZW5kKFwiY2lyY2xlXCIpXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcImN4XCIsIGZpcnN0TWFya2VyWCArIG1hcmtlcldpZHRoIC8gMi4wKVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJjeVwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbnVtRWxlbXNFeGNsdWRlZCA9IHhEYXRhc2V0SWRzLmZpbHRlcigoaWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkIDwgaTtcclxuICAgICAgICAgICAgICAgICAgICB9KS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgaSA9IGkgLSBudW1FbGVtc0V4Y2x1ZGVkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdE1hcmtlclkgKyBpICogeVNwYWNpbmc7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJyXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoY2hhcnRJbmZvIGFzIExpbmVJbmZvKS5zaG93UG9pbnRbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgTGluZUluZm8pLnBvaW50U2l6ZVtpXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMDtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcnRJbmZvIGFzIExpbmVJbmZvKS5wb2ludENvbG9yW2ldO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjaGFydEluZm8uR2V0R3JhcGhUeXBlKCkgPT09IEdyYXBoVHlwZS5CYXIpIHtcclxuICAgICAgICAgICAgLy8gYmFyc1xyXG4gICAgICAgICAgICBsZWdlbmRcclxuICAgICAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJtYXJrZXJzXCIpXHJcbiAgICAgICAgICAgICAgICAuZGF0YShuYW1lcylcclxuICAgICAgICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGZpcnN0TWFya2VyWClcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbnVtRWxlbXNFeGNsdWRlZCA9IHhEYXRhc2V0SWRzLmZpbHRlcigoaWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkIDwgaTtcclxuICAgICAgICAgICAgICAgICAgICB9KS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgaSA9IGkgLSBudW1FbGVtc0V4Y2x1ZGVkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdE1hcmtlclkgKyBpICogeVNwYWNpbmcgLSBuYW1lSGVpZ2h0IC8gMi4wO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgbWFya2VyV2lkdGgpXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBuYW1lSGVpZ2h0KVxyXG4gICAgICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoYXJ0SW5mbyBhcyBCYXJJbmZvKS5iYXJDb2xvcltpXTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbmFtZXNcclxuICAgICAgICBsZXQgbmFtZUxhYmVscyA9IGxlZ2VuZFxyXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwibGFiZWxzXCIpXHJcbiAgICAgICAgICAgIC5kYXRhKG5hbWVzKVxyXG4gICAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgZmlyc3RMYWJlbFgpXHJcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBudW1FbGVtc0V4Y2x1ZGVkID0geERhdGFzZXRJZHMuZmlsdGVyKChpZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpZCA8IGk7XHJcbiAgICAgICAgICAgICAgICB9KS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBpID0gaSAtIG51bUVsZW1zRXhjbHVkZWQ7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RMYWJlbFkgKyBpICogeVNwYWNpbmc7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm4gXCJcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3R5bGUoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIilcclxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbGVnZW5kLWxhYmVsXCIpO1xyXG5cclxuICAgICAgICBpZiAoY2hhcnRJbmZvLkdldEdyYXBoVHlwZSgpID09PSBHcmFwaFR5cGUuTGluZSkge1xyXG4gICAgICAgICAgICBuYW1lTGFiZWxzLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgTGluZUluZm8pLmxpbmVDb2xvcltpXTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjaGFydEluZm8uR2V0R3JhcGhUeXBlKCkgPT09IEdyYXBoVHlwZS5CYXIpIHtcclxuICAgICAgICAgICAgbmFtZUxhYmVscy5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcnRJbmZvIGFzIEJhckluZm8pLmJhckNvbG9yW2ldO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGNoYXJ0SW5mby5sZWdlbmRPcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcclxuICAgICAgICBpZiAoY2hhcnRJbmZvLkdldEdyYXBoVHlwZSgpID09PSBHcmFwaFR5cGUuTGluZSkge1xyXG4gICAgICAgICAgICAvLyBsaW5lc1xyXG4gICAgICAgICAgICBsZWdlbmRcclxuICAgICAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJtYXJrZXJzXCIpXHJcbiAgICAgICAgICAgICAgICAuZGF0YShuYW1lcylcclxuICAgICAgICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAgICAgICAuYXBwZW5kKFwibGluZVwiKVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9zWCA9IHhTcGFjaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IFtpbmQsIHNpemVdIG9mIG5hbWVTaXplcy5lbnRyaWVzKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGluZCkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kIDwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zWCArPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcldpZHRoICsgeFNwYWNpbmcgKyBzaXplLndpZHRoICsgeFNwYWNpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zWDtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcIngyXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3NYID0geFNwYWNpbmcgKyBtYXJrZXJXaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBbaW5kLCBzaXplXSBvZiBuYW1lU2l6ZXMuZW50cmllcygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpbmQpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZCA8IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc1ggKz1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4U3BhY2luZyArIHNpemUud2lkdGggKyB4U3BhY2luZyArIG1hcmtlcldpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc1g7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5MVwiLCBmaXJzdE1hcmtlclkpXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcInkyXCIsIGZpcnN0TWFya2VyWSlcclxuICAgICAgICAgICAgICAgIC5zdHlsZShcInN0cm9rZVwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoYXJ0SW5mbyBhcyBMaW5lSW5mbykubGluZUNvbG9yW2ldO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBwb2ludHNcclxuICAgICAgICAgICAgbGVnZW5kXHJcbiAgICAgICAgICAgICAgICAuc2VsZWN0QWxsKFwibWFya2Vyc1wiKVxyXG4gICAgICAgICAgICAgICAgLmRhdGEobmFtZXMpXHJcbiAgICAgICAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJjeFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9zWCA9IHhTcGFjaW5nICsgbWFya2VyV2lkdGggLyAyLjA7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgW2luZCwgc2l6ZV0gb2YgbmFtZVNpemVzLmVudHJpZXMoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaW5kKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmQgPCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NYICs9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGggLyAyLjAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhTcGFjaW5nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4U3BhY2luZyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGggLyAyLjA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zWDtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcImN5XCIsIGZpcnN0TWFya2VyWSlcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwiclwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGNoYXJ0SW5mbyBhcyBMaW5lSW5mbykuc2hvd1BvaW50W2ldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcnRJbmZvIGFzIExpbmVJbmZvKS5wb2ludFNpemVbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwLjA7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoYXJ0SW5mbyBhcyBMaW5lSW5mbykucG9pbnRDb2xvcltpXTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY2hhcnRJbmZvLkdldEdyYXBoVHlwZSgpID09PSBHcmFwaFR5cGUuQmFyKSB7XHJcbiAgICAgICAgICAgIC8vIGJhcnNcclxuICAgICAgICAgICAgbGVnZW5kXHJcbiAgICAgICAgICAgICAgICAuc2VsZWN0QWxsKFwibWFya2Vyc1wiKVxyXG4gICAgICAgICAgICAgICAgLmRhdGEoXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZXMuZmlsdGVyKChuLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAheERhdGFzZXRJZHMuaW5jbHVkZXMoaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3NYID0geFNwYWNpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgW2luZCwgc2l6ZV0gb2YgbmFtZVNpemVzLmVudHJpZXMoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaW5kKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmQgPCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NYICs9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGggKyB4U3BhY2luZyArIHNpemUud2lkdGggKyB4U3BhY2luZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NYO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmaXJzdE1hcmtlclkgLSBuYW1lSGVpZ2h0IC8gMi4wKVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBtYXJrZXJXaWR0aClcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG5hbWVIZWlnaHQpXHJcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcnRJbmZvIGFzIEJhckluZm8pLmJhckNvbG9yW2ldO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBuYW1lc1xyXG4gICAgICAgIGxldCBuYW1lTGFiZWxzID0gbGVnZW5kXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJsYWJlbHNcIilcclxuICAgICAgICAgICAgLmRhdGEobmFtZXMpXHJcbiAgICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBwb3NYID0geFNwYWNpbmcgKyBtYXJrZXJXaWR0aCArIHhTcGFjaW5nO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgW2luZCwgc2l6ZV0gb2YgbmFtZVNpemVzLmVudHJpZXMoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpbmQpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kIDwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NYICs9IHNpemUud2lkdGggKyB4U3BhY2luZyArIG1hcmtlcldpZHRoICsgeFNwYWNpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvc1g7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmaXJzdExhYmVsWSlcclxuICAgICAgICAgICAgLnRleHQoZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdHlsZShcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1sZWdlbmQtbGFiZWxcIik7XHJcblxyXG4gICAgICAgIGlmIChjaGFydEluZm8uR2V0R3JhcGhUeXBlKCkgPT09IEdyYXBoVHlwZS5MaW5lKSB7XHJcbiAgICAgICAgICAgIG5hbWVMYWJlbHMuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKGNoYXJ0SW5mbyBhcyBMaW5lSW5mbykubGluZUNvbG9yW2ldO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNoYXJ0SW5mby5HZXRHcmFwaFR5cGUoKSA9PT0gR3JhcGhUeXBlLkJhcikge1xyXG4gICAgICAgICAgICBuYW1lTGFiZWxzLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgQmFySW5mbykuYmFyQ29sb3JbaV07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVuZGVyVGl0bGUoXHJcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIGNoYXJ0SW5mbzogQ29tbW9uQ2hhcnRJbmZvXHJcbikge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJUaXRsZVwiKVxyXG4gICAgLy8gdW5kZXIgZ3JhcGhBcmVhXHJcblxyXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFjaGFydEluZm8pIHJldHVybjtcclxuXHJcbiAgICBpZiAoIWNoYXJ0SW5mby50aXRsZSkgcmV0dXJuO1xyXG4gICAgbGV0IHRpdGxlU2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoY2hhcnRJbmZvLnRpdGxlLCBcInRyYWNrZXItdGl0bGVcIik7XHJcblxyXG4gICAgLy8gQXBwZW5kIHRpdGxlXHJcbiAgICBsZXQgdGl0bGUgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYVxyXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgLnRleHQoY2hhcnRJbmZvLnRpdGxlKSAvLyBwaXZvdCBhdCBjZW50ZXJcclxuICAgICAgICAuYXR0cihcImlkXCIsIFwidGl0bGVcIilcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcclxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggLyAyLjAgK1xyXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xyXG4gICAgICAgICAgICAgICAgdGl0bGVTaXplLmhlaWdodCAvIDIuMCArXHJcbiAgICAgICAgICAgICAgICBcIilcIlxyXG4gICAgICAgIClcclxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCB0aXRsZVNpemUuaGVpZ2h0KSAvLyBmb3IgbGF0ZXIgdXNlXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItdGl0bGVcIik7XHJcbiAgICBjaGFydEVsZW1lbnRzW1widGl0bGVcIl0gPSB0aXRsZTtcclxuXHJcbiAgICAvLyBFeHBhbmQgcGFyZW50IGFyZWFzXHJcbiAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgMCwgdGl0bGVTaXplLmhlaWdodCk7XHJcbiAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLmdyYXBoQXJlYSwgMCwgdGl0bGVTaXplLmhlaWdodCk7XHJcblxyXG4gICAgLy8gTW92ZSBzaWJsaW5nIGFyZWFzXHJcbiAgICBoZWxwZXIubW92ZUFyZWEoY2hhcnRFbGVtZW50cy5kYXRhQXJlYSwgMCwgdGl0bGVTaXplLmhlaWdodCk7XHJcblxyXG4gICAgcmV0dXJuO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRDaGFydFNjYWxlKFxyXG4gICAgX2NhbnZhczogSFRNTEVsZW1lbnQsXHJcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xyXG4pIHtcclxuICAgIGxldCBjYW52YXMgPSBkMy5zZWxlY3QoX2NhbnZhcyk7XHJcbiAgICBsZXQgc3ZnID0gY2hhcnRFbGVtZW50cy5zdmc7XHJcbiAgICBsZXQgc3ZnV2lkdGggPSBwYXJzZUZsb2F0KHN2Zy5hdHRyKFwid2lkdGhcIikpO1xyXG4gICAgbGV0IHN2Z0hlaWdodCA9IHBhcnNlRmxvYXQoc3ZnLmF0dHIoXCJoZWlnaHRcIikpO1xyXG4gICAgc3ZnLmF0dHIoXCJ3aWR0aFwiLCBudWxsKVxyXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG51bGwpXHJcbiAgICAgICAgLmF0dHIoXCJ2aWV3Qm94XCIsIGAwIDAgJHtzdmdXaWR0aH0gJHtzdmdIZWlnaHR9YClcclxuICAgICAgICAuYXR0cihcInByZXNlcnZlQXNwZWN0UmF0aW9cIiwgXCJ4TWlkWU1pZCBtZWV0XCIpO1xyXG5cclxuICAgIGlmIChyZW5kZXJJbmZvLmZpdFBhbmVsV2lkdGgpIHtcclxuICAgICAgICBjYW52YXMuc3R5bGUoXCJ3aWR0aFwiLCBcIjEwMCVcIik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNhbnZhcy5zdHlsZShcclxuICAgICAgICAgICAgXCJ3aWR0aFwiLFxyXG4gICAgICAgICAgICAoc3ZnV2lkdGggKiByZW5kZXJJbmZvLmZpeGVkU2NhbGUpLnRvU3RyaW5nKCkgKyBcInB4XCJcclxuICAgICAgICApO1xyXG4gICAgICAgIGNhbnZhcy5zdHlsZShcclxuICAgICAgICAgICAgXCJoZWlnaHRcIixcclxuICAgICAgICAgICAgKHN2Z0hlaWdodCAqIHJlbmRlckluZm8uZml4ZWRTY2FsZSkudG9TdHJpbmcoKSArIFwicHhcIlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUFyZWFzKFxyXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cclxuKTogQ2hhcnRFbGVtZW50cyB7XHJcbiAgICBsZXQgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyA9IHt9O1xyXG4gICAgLy8gd2hvbGUgYXJlYSBmb3IgcGxvdHRpbmcsIGluY2x1ZGVzIG1hcmdpbnNcclxuICAgIGxldCBzdmcgPSBkM1xyXG4gICAgICAgIC5zZWxlY3QoY2FudmFzKVxyXG4gICAgICAgIC5hcHBlbmQoXCJzdmdcIilcclxuICAgICAgICAuYXR0cihcImlkXCIsIFwic3ZnXCIpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgIFwid2lkdGhcIixcclxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ubGVmdCArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5yaWdodFxyXG4gICAgICAgIClcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJoZWlnaHRcIixcclxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnRvcCArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5ib3R0b21cclxuICAgICAgICApO1xyXG4gICAgY2hhcnRFbGVtZW50c1tcInN2Z1wiXSA9IHN2ZztcclxuXHJcbiAgICAvLyBncmFwaEFyZWEsIGluY2x1ZGVzIGNoYXJ0QXJlYSwgdGl0bGUsIGxlZ2VuZFxyXG4gICAgbGV0IGdyYXBoQXJlYSA9IHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImdyYXBoQXJlYVwiKVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxyXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5sZWZ0ICtcclxuICAgICAgICAgICAgICAgIFwiLFwiICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnRvcCArXHJcbiAgICAgICAgICAgICAgICBcIilcIlxyXG4gICAgICAgIClcclxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICsgcmVuZGVySW5mby5tYXJnaW4ucmlnaHQpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgIFwiaGVpZ2h0XCIsXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArIHJlbmRlckluZm8ubWFyZ2luLmJvdHRvbVxyXG4gICAgICAgICk7XHJcbiAgICBjaGFydEVsZW1lbnRzW1wiZ3JhcGhBcmVhXCJdID0gZ3JhcGhBcmVhO1xyXG5cclxuICAgIC8vIGRhdGFBcmVhLCB1bmRlciBncmFwaEFyZWEsIGluY2x1ZGVzIHBvaW50cywgbGluZXMsIHhBeGlzLCB5QXhpc1xyXG4gICAgbGV0IGRhdGFBcmVhID0gZ3JhcGhBcmVhXHJcbiAgICAgICAgLmFwcGVuZChcImdcIilcclxuICAgICAgICAuYXR0cihcImlkXCIsIFwiZGF0YUFyZWFcIilcclxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoKVxyXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCk7XHJcbiAgICBjaGFydEVsZW1lbnRzW1wiZGF0YUFyZWFcIl0gPSBkYXRhQXJlYTtcclxuXHJcbiAgICByZXR1cm4gY2hhcnRFbGVtZW50cztcclxufVxyXG5cclxuZnVuY3Rpb24gcmVuZGVyTGluZUNoYXJ0KFxyXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBsaW5lSW5mbzogTGluZUluZm9cclxuKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlckxpbmVDaGFydFwiKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8pO1xyXG5cclxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhbGluZUluZm8pIHJldHVybjtcclxuXHJcbiAgICBsZXQgY2hhcnRFbGVtZW50cyA9IGNyZWF0ZUFyZWFzKGNhbnZhcywgcmVuZGVySW5mbyk7XHJcblxyXG4gICAgcmVuZGVyVGl0bGUoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbGluZUluZm8pO1xyXG5cclxuICAgIHJlbmRlclhBeGlzKGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIGxpbmVJbmZvKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGNoYXJ0RWxlbWVudHMueEF4aXMpO1xyXG4gICAgLy8gY29uc29sZS5sb2coY2hhcnRFbGVtZW50cy54U2NhbGUpO1xyXG5cclxuICAgIGxldCBkYXRhc2V0T25MZWZ0WUF4aXMgPSBbXTtcclxuICAgIGxldCBkYXRhc2V0T25SaWdodFlBeGlzID0gW107XHJcbiAgICBsZXQgeERhdGFzZXRJZHMgPSByZW5kZXJJbmZvLmRhdGFzZXRzLmdldFhEYXRhc2V0SWRzKCk7XHJcbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBsaW5lSW5mby55QXhpc0xvY2F0aW9uLmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaW5kKSkgY29udGludWU7XHJcbiAgICAgICAgbGV0IHlBeGlzTG9jYXRpb24gPSBsaW5lSW5mby55QXhpc0xvY2F0aW9uW2luZF07XHJcbiAgICAgICAgaWYgKHlBeGlzTG9jYXRpb24udG9Mb3dlckNhc2UoKSA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgICAgICAgZGF0YXNldE9uTGVmdFlBeGlzLnB1c2goaW5kKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gXCJyaWdodFwiKSB7XHJcbiAgICAgICAgICAgIGRhdGFzZXRPblJpZ2h0WUF4aXMucHVzaChpbmQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmV0UmVuZGVyTGVmdFlBeGlzID0gcmVuZGVyWUF4aXMoXHJcbiAgICAgICAgY2hhcnRFbGVtZW50cyxcclxuICAgICAgICByZW5kZXJJbmZvLFxyXG4gICAgICAgIGxpbmVJbmZvLFxyXG4gICAgICAgIFwibGVmdFwiLFxyXG4gICAgICAgIGRhdGFzZXRPbkxlZnRZQXhpc1xyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgcmV0UmVuZGVyTGVmdFlBeGlzID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldFJlbmRlckxlZnRZQXhpcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhcnRFbGVtZW50cy5sZWZ0WUF4aXMgJiYgY2hhcnRFbGVtZW50cy5sZWZ0WVNjYWxlKSB7XHJcbiAgICAgICAgZm9yIChsZXQgZGF0YXNldElkIG9mIGRhdGFzZXRPbkxlZnRZQXhpcykge1xyXG4gICAgICAgICAgICBsZXQgZGF0YXNldCA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkKTtcclxuICAgICAgICAgICAgaWYgKGRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJMaW5lKGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIGxpbmVJbmZvLCBkYXRhc2V0LCBcImxlZnRcIik7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJQb2ludHMoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbGluZUluZm8sIGRhdGFzZXQsIFwibGVmdFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJldFJlbmRlclJpZ2h0WUF4aXMgPSByZW5kZXJZQXhpcyhcclxuICAgICAgICBjaGFydEVsZW1lbnRzLFxyXG4gICAgICAgIHJlbmRlckluZm8sXHJcbiAgICAgICAgbGluZUluZm8sXHJcbiAgICAgICAgXCJyaWdodFwiLFxyXG4gICAgICAgIGRhdGFzZXRPblJpZ2h0WUF4aXNcclxuICAgICk7XHJcbiAgICBpZiAodHlwZW9mIHJldFJlbmRlclJpZ2h0WUF4aXMgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gcmV0UmVuZGVyUmlnaHRZQXhpcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhcnRFbGVtZW50cy5yaWdodFlBeGlzICYmIGNoYXJ0RWxlbWVudHMucmlnaHRZU2NhbGUpIHtcclxuICAgICAgICBmb3IgKGxldCBkYXRhc2V0SWQgb2YgZGF0YXNldE9uUmlnaHRZQXhpcykge1xyXG4gICAgICAgICAgICBsZXQgZGF0YXNldCA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkKTtcclxuICAgICAgICAgICAgaWYgKGRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJMaW5lKGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIGxpbmVJbmZvLCBkYXRhc2V0LCBcInJpZ2h0XCIpO1xyXG5cclxuICAgICAgICAgICAgcmVuZGVyUG9pbnRzKGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIGxpbmVJbmZvLCBkYXRhc2V0LCBcInJpZ2h0XCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobGluZUluZm8uc2hvd0xlZ2VuZCkge1xyXG4gICAgICAgIHJlbmRlckxlZ2VuZChjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBsaW5lSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q2hhcnRTY2FsZShjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8pO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW5kZXJCYXJDaGFydChcclxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgYmFySW5mbzogQmFySW5mb1xyXG4pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyQmFyQ2hhcnRcIik7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcclxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhYmFySW5mbykgcmV0dXJuO1xyXG5cclxuICAgIGxldCBjaGFydEVsZW1lbnRzID0gY3JlYXRlQXJlYXMoY2FudmFzLCByZW5kZXJJbmZvKTtcclxuXHJcbiAgICByZW5kZXJUaXRsZShjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBiYXJJbmZvKTtcclxuXHJcbiAgICByZW5kZXJYQXhpcyhjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBiYXJJbmZvKTtcclxuXHJcbiAgICBsZXQgZGF0YXNldE9uTGVmdFlBeGlzID0gW107XHJcbiAgICBsZXQgZGF0YXNldE9uUmlnaHRZQXhpcyA9IFtdO1xyXG4gICAgbGV0IHhEYXRhc2V0SWRzID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXRYRGF0YXNldElkcygpO1xyXG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgYmFySW5mby55QXhpc0xvY2F0aW9uLmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaW5kKSkgY29udGludWU7XHJcbiAgICAgICAgbGV0IHlBeGlzTG9jYXRpb24gPSBiYXJJbmZvLnlBeGlzTG9jYXRpb25baW5kXTtcclxuICAgICAgICBpZiAoeUF4aXNMb2NhdGlvbi50b0xvd2VyQ2FzZSgpID09PSBcImxlZnRcIikge1xyXG4gICAgICAgICAgICBkYXRhc2V0T25MZWZ0WUF4aXMucHVzaChpbmQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbi50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBcInJpZ2h0XCIpIHtcclxuICAgICAgICAgICAgLy8gcmlnaHRcclxuICAgICAgICAgICAgZGF0YXNldE9uUmlnaHRZQXhpcy5wdXNoKGluZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXRSZW5kZXJMZWZ0WUF4aXMgPSByZW5kZXJZQXhpcyhcclxuICAgICAgICBjaGFydEVsZW1lbnRzLFxyXG4gICAgICAgIHJlbmRlckluZm8sXHJcbiAgICAgICAgYmFySW5mbyxcclxuICAgICAgICBcImxlZnRcIixcclxuICAgICAgICBkYXRhc2V0T25MZWZ0WUF4aXNcclxuICAgICk7XHJcbiAgICBpZiAodHlwZW9mIHJldFJlbmRlckxlZnRZQXhpcyA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiByZXRSZW5kZXJMZWZ0WUF4aXM7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHRvdGFsTnVtT2ZCYXJTZXRzID1cclxuICAgICAgICBkYXRhc2V0T25MZWZ0WUF4aXMubGVuZ3RoICsgZGF0YXNldE9uUmlnaHRZQXhpcy5sZW5ndGg7XHJcbiAgICBsZXQgY3VyckJhclNldCA9IDA7XHJcblxyXG4gICAgaWYgKGNoYXJ0RWxlbWVudHMubGVmdFlBeGlzICYmIGNoYXJ0RWxlbWVudHMubGVmdFlTY2FsZSkge1xyXG4gICAgICAgIGZvciAobGV0IGRhdGFzZXRJZCBvZiBkYXRhc2V0T25MZWZ0WUF4aXMpIHtcclxuICAgICAgICAgICAgbGV0IGRhdGFzZXQgPSByZW5kZXJJbmZvLmRhdGFzZXRzLmdldERhdGFzZXRCeUlkKGRhdGFzZXRJZCk7XHJcbiAgICAgICAgICAgIGlmIChkYXRhc2V0LmdldFF1ZXJ5KCkudXNlZEFzWERhdGFzZXQpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgcmVuZGVyQmFyKFxyXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cyxcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXHJcbiAgICAgICAgICAgICAgICBiYXJJbmZvLFxyXG4gICAgICAgICAgICAgICAgZGF0YXNldCxcclxuICAgICAgICAgICAgICAgIFwibGVmdFwiLFxyXG4gICAgICAgICAgICAgICAgY3VyckJhclNldCxcclxuICAgICAgICAgICAgICAgIHRvdGFsTnVtT2ZCYXJTZXRzXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBjdXJyQmFyU2V0Kys7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXRSZW5kZXJSaWdodFlBeGlzID0gcmVuZGVyWUF4aXMoXHJcbiAgICAgICAgY2hhcnRFbGVtZW50cyxcclxuICAgICAgICByZW5kZXJJbmZvLFxyXG4gICAgICAgIGJhckluZm8sXHJcbiAgICAgICAgXCJyaWdodFwiLFxyXG4gICAgICAgIGRhdGFzZXRPblJpZ2h0WUF4aXNcclxuICAgICk7XHJcbiAgICBpZiAodHlwZW9mIHJldFJlbmRlclJpZ2h0WUF4aXMgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gcmV0UmVuZGVyUmlnaHRZQXhpcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhcnRFbGVtZW50cy5yaWdodFlBeGlzICYmIGNoYXJ0RWxlbWVudHMucmlnaHRZU2NhbGUpIHtcclxuICAgICAgICBmb3IgKGxldCBkYXRhc2V0SWQgb2YgZGF0YXNldE9uUmlnaHRZQXhpcykge1xyXG4gICAgICAgICAgICBsZXQgZGF0YXNldCA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkKTtcclxuICAgICAgICAgICAgaWYgKGRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJCYXIoXHJcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLFxyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcclxuICAgICAgICAgICAgICAgIGJhckluZm8sXHJcbiAgICAgICAgICAgICAgICBkYXRhc2V0LFxyXG4gICAgICAgICAgICAgICAgXCJyaWdodFwiLFxyXG4gICAgICAgICAgICAgICAgY3VyckJhclNldCxcclxuICAgICAgICAgICAgICAgIHRvdGFsTnVtT2ZCYXJTZXRzXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBjdXJyQmFyU2V0Kys7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChiYXJJbmZvLnNob3dMZWdlbmQpIHtcclxuICAgICAgICByZW5kZXJMZWdlbmQoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgYmFySW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q2hhcnRTY2FsZShjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRXJyb3JNZXNzYWdlKGNhbnZhczogSFRNTEVsZW1lbnQsIGVycm9yTWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICAvLyBSZW1vdmUgZ3JhcGggbm90IGNvbXBsZXRlZFxyXG4gICAgbGV0IGdyYXBoID0gZDMuc2VsZWN0KGNhbnZhcykuc2VsZWN0KFwiI3N2Z1wiKS5yZW1vdmUoKTtcclxuXHJcbiAgICBsZXQgc3ZnID0gZDNcclxuICAgICAgICAuc2VsZWN0KGNhbnZhcylcclxuICAgICAgICAuYXBwZW5kKFwiZGl2XCIpXHJcbiAgICAgICAgLnRleHQoZXJyb3JNZXNzYWdlKVxyXG4gICAgICAgIC5zdHlsZShcImJhY2tncm91bmQtY29sb3JcIiwgXCJ3aGl0ZVwiKVxyXG4gICAgICAgIC5zdHlsZShcIm1hcmdpbi1ib3R0b21cIiwgXCIyMHB4XCIpXHJcbiAgICAgICAgLnN0eWxlKFwicGFkZGluZ1wiLCBcIjEwcHhcIilcclxuICAgICAgICAuc3R5bGUoXCJjb2xvclwiLCBcInJlZFwiKTtcclxufVxyXG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgbGV0IG1pbjtcbiAgbGV0IG1heDtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICBpZiAobWluID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAodmFsdWUgPj0gdmFsdWUpIG1pbiA9IG1heCA9IHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChtaW4gPiB2YWx1ZSkgbWluID0gdmFsdWU7XG4gICAgICAgICAgaWYgKG1heCA8IHZhbHVlKSBtYXggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgaW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlLCArK2luZGV4LCB2YWx1ZXMpKSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChtaW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh2YWx1ZSA+PSB2YWx1ZSkgbWluID0gbWF4ID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG1pbiA+IHZhbHVlKSBtaW4gPSB2YWx1ZTtcbiAgICAgICAgICBpZiAobWF4IDwgdmFsdWUpIG1heCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBbbWluLCBtYXhdO1xufVxuIiwiaW1wb3J0IHtwYXRofSBmcm9tIFwiZDMtcGF0aFwiO1xuaW1wb3J0IGFycmF5IGZyb20gXCIuL2FycmF5LmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBjdXJ2ZUxpbmVhciBmcm9tIFwiLi9jdXJ2ZS9saW5lYXIuanNcIjtcbmltcG9ydCB7eCBhcyBwb2ludFgsIHkgYXMgcG9pbnRZfSBmcm9tIFwiLi9wb2ludC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCB5KSB7XG4gIHZhciBkZWZpbmVkID0gY29uc3RhbnQodHJ1ZSksXG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIGN1cnZlID0gY3VydmVMaW5lYXIsXG4gICAgICBvdXRwdXQgPSBudWxsO1xuXG4gIHggPSB0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiID8geCA6ICh4ID09PSB1bmRlZmluZWQpID8gcG9pbnRYIDogY29uc3RhbnQoeCk7XG4gIHkgPSB0eXBlb2YgeSA9PT0gXCJmdW5jdGlvblwiID8geSA6ICh5ID09PSB1bmRlZmluZWQpID8gcG9pbnRZIDogY29uc3RhbnQoeSk7XG5cbiAgZnVuY3Rpb24gbGluZShkYXRhKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG4gPSAoZGF0YSA9IGFycmF5KGRhdGEpKS5sZW5ndGgsXG4gICAgICAgIGQsXG4gICAgICAgIGRlZmluZWQwID0gZmFsc2UsXG4gICAgICAgIGJ1ZmZlcjtcblxuICAgIGlmIChjb250ZXh0ID09IG51bGwpIG91dHB1dCA9IGN1cnZlKGJ1ZmZlciA9IHBhdGgoKSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IG47ICsraSkge1xuICAgICAgaWYgKCEoaSA8IG4gJiYgZGVmaW5lZChkID0gZGF0YVtpXSwgaSwgZGF0YSkpID09PSBkZWZpbmVkMCkge1xuICAgICAgICBpZiAoZGVmaW5lZDAgPSAhZGVmaW5lZDApIG91dHB1dC5saW5lU3RhcnQoKTtcbiAgICAgICAgZWxzZSBvdXRwdXQubGluZUVuZCgpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmluZWQwKSBvdXRwdXQucG9pbnQoK3goZCwgaSwgZGF0YSksICt5KGQsIGksIGRhdGEpKTtcbiAgICB9XG5cbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gb3V0cHV0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgbGluZS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgbGluZSkgOiB4O1xuICB9O1xuXG4gIGxpbmUueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGxpbmUpIDogeTtcbiAgfTtcblxuICBsaW5lLmRlZmluZWQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZGVmaW5lZCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgbGluZSkgOiBkZWZpbmVkO1xuICB9O1xuXG4gIGxpbmUuY3VydmUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY3VydmUgPSBfLCBjb250ZXh0ICE9IG51bGwgJiYgKG91dHB1dCA9IGN1cnZlKGNvbnRleHQpKSwgbGluZSkgOiBjdXJ2ZTtcbiAgfTtcblxuICBsaW5lLmNvbnRleHQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoXyA9PSBudWxsID8gY29udGV4dCA9IG91dHB1dCA9IG51bGwgOiBvdXRwdXQgPSBjdXJ2ZShjb250ZXh0ID0gXyksIGxpbmUpIDogY29udGV4dDtcbiAgfTtcblxuICByZXR1cm4gbGluZTtcbn1cbiIsImltcG9ydCBzb3VyY2VFdmVudCBmcm9tIFwiLi9zb3VyY2VFdmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihldmVudCwgbm9kZSkge1xuICBldmVudCA9IHNvdXJjZUV2ZW50KGV2ZW50KTtcbiAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkgbm9kZSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gIGlmIChub2RlKSB7XG4gICAgdmFyIHN2ZyA9IG5vZGUub3duZXJTVkdFbGVtZW50IHx8IG5vZGU7XG4gICAgaWYgKHN2Zy5jcmVhdGVTVkdQb2ludCkge1xuICAgICAgdmFyIHBvaW50ID0gc3ZnLmNyZWF0ZVNWR1BvaW50KCk7XG4gICAgICBwb2ludC54ID0gZXZlbnQuY2xpZW50WCwgcG9pbnQueSA9IGV2ZW50LmNsaWVudFk7XG4gICAgICBwb2ludCA9IHBvaW50Lm1hdHJpeFRyYW5zZm9ybShub2RlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSk7XG4gICAgICByZXR1cm4gW3BvaW50LngsIHBvaW50LnldO1xuICAgIH1cbiAgICBpZiAobm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QpIHtcbiAgICAgIHZhciByZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHJldHVybiBbZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCAtIG5vZGUuY2xpZW50TGVmdCwgZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wIC0gbm9kZS5jbGllbnRUb3BdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW2V2ZW50LnBhZ2VYLCBldmVudC5wYWdlWV07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihldmVudCkge1xuICBsZXQgc291cmNlRXZlbnQ7XG4gIHdoaWxlIChzb3VyY2VFdmVudCA9IGV2ZW50LnNvdXJjZUV2ZW50KSBldmVudCA9IHNvdXJjZUV2ZW50O1xuICByZXR1cm4gZXZlbnQ7XG59XG4iLCJpbXBvcnQgVHJhY2tlciBmcm9tIFwiLi9tYWluXCI7XHJcbmltcG9ydCB7XHJcbiAgICBTZWFyY2hUeXBlLFxyXG4gICAgQmFySW5mbyxcclxuICAgIENvbW1vbkNoYXJ0SW5mbyxcclxuICAgIFF1ZXJ5LFxyXG4gICAgUmVuZGVySW5mbyxcclxuICAgIFN1bW1hcnlJbmZvLFxyXG4gICAgTWFyZ2luLFxyXG4gICAgR3JhcGhUeXBlLFxyXG4gICAgTGluZUluZm8sXHJcbiAgICBQaWVJbmZvLFxyXG4gICAgTW9udGhJbmZvLFxyXG4gICAgSGVhdG1hcEluZm8sXHJcbiAgICBCdWxsZXRJbmZvLFxyXG4gICAgRGF0YXNldCxcclxuICAgIEN1c3RvbURhdGFzZXRJbmZvLFxyXG59IGZyb20gXCIuL2RhdGFcIjtcclxuaW1wb3J0IHsgVEZvbGRlciwgbm9ybWFsaXplUGF0aCB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgeyBwYXJzZVlhbWwgfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0ICogYXMgaGVscGVyIGZyb20gXCIuL2hlbHBlclwiO1xyXG5cclxuZnVuY3Rpb24gc3RyVG9Cb29sKHN0cjogc3RyaW5nKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgc3RyID0gc3RyLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgc3dpdGNoIChzdHIpIHtcclxuICAgICAgICBjYXNlIFwidHJ1ZVwiOlxyXG4gICAgICAgIGNhc2UgXCIxXCI6XHJcbiAgICAgICAgY2FzZSBcIm9uXCI6XHJcbiAgICAgICAgY2FzZSBcInllc1wiOlxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBjYXNlIFwiZmFsc2VcIjpcclxuICAgICAgICBjYXNlIFwiMFwiOlxyXG4gICAgICAgIGNhc2UgXCJvZmZcIjpcclxuICAgICAgICBjYXNlIFwibm9cIjpcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHZhbGlkYXRlU2VhcmNoVHlwZShzZWFyY2hUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmIChcclxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwidGFnXCIgfHxcclxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiIHx8XHJcbiAgICAgICAgc2VhcmNoVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcImZyb250bWF0dGVyXCIgfHxcclxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwid2lraVwiIHx8XHJcbiAgICAgICAgc2VhcmNoVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcIndpa2kubGlua1wiIHx8XHJcbiAgICAgICAgc2VhcmNoVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcIndpa2kuZGlzcGxheVwiIHx8XHJcbiAgICAgICAgc2VhcmNoVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcImR2ZmllbGRcIiB8fFxyXG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0YWJsZVwiIHx8XHJcbiAgICAgICAgc2VhcmNoVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcImZpbGVtZXRhXCIgfHxcclxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwidGFza1wiIHx8XHJcbiAgICAgICAgc2VhcmNoVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcInRhc2suYWxsXCIgfHxcclxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwidGFzay5kb25lXCIgfHxcclxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwidGFzay5ub3Rkb25lXCJcclxuICAgICkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiB2YWxpZGF0ZVlBeGlzTG9jYXRpb24obG9jYXRpb246IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGxvY2F0aW9uID09PSBcImxlZnRcIiB8fCBsb2NhdGlvbiA9PT0gXCJyaWdodFwiIHx8IGxvY2F0aW9uID09PSBcIm5vbmVcIikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiB2YWxpZGF0ZUNvbG9yKGNvbG9yOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzcGxpdElucHV0QnlDb21tYShpbnB1dDogc3RyaW5nKSB7XHJcbiAgICAvLyBTcGxpdCBzdHJpbmcgYnkgJywnIGJ1dCBub3QgYnkgJ1xcLCdcclxuICAgIC8vIGxldCBzcGxpdHRlZCA9IGlucHV0LnNwbGl0KC8oPzwhXFxcXCksLyk7IC8vIC0tPmxvb2tiZWhpbmQgbm90IHN1cHBvcnQgaW4gU2FmYXJpIGZvciBub3dcclxuICAgIGNvbnN0IGR1bW15ID0gXCI6Ojo6Ojp0cmFja2VyOjo6Ojo6XCI7XHJcbiAgICBsZXQgdGVtcCA9IGlucHV0LnNwbGl0KFwiXFxcXCxcIikuam9pbihkdW1teSk7XHJcbiAgICBsZXQgc3BsaXR0ZWQgPSB0ZW1wLnNwbGl0KFwiLFwiKTtcclxuICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHNwbGl0dGVkLmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICBzcGxpdHRlZFtpbmRdID0gc3BsaXR0ZWRbaW5kXS5zcGxpdChkdW1teSkuam9pbihcIixcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3BsaXR0ZWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEJvb2xBcnJheUZyb21JbnB1dChcclxuICAgIG5hbWU6IHN0cmluZyxcclxuICAgIGlucHV0OiBhbnksXHJcbiAgICBudW1EYXRhc2V0OiBudW1iZXIsXHJcbiAgICBkZWZhdWx0VmFsdWU6IGJvb2xlYW4sXHJcbiAgICBhbGxvd05vVmFsaWRWYWx1ZTogYm9vbGVhblxyXG4pOiBBcnJheTxib29sZWFuPiB8IHN0cmluZyB7XHJcbiAgICBsZXQgYXJyYXk6IEFycmF5PGJvb2xlYW4+ID0gW107XHJcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJcIjtcclxuICAgIGxldCBudW1WYWxpZFZhbHVlID0gMDtcclxuXHJcbiAgICB3aGlsZSAobnVtRGF0YXNldCA+IGFycmF5Lmxlbmd0aCkge1xyXG4gICAgICAgIGFycmF5LnB1c2goZGVmYXVsdFZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInVuZGVmaW5lZFwiIHx8IGlucHV0ID09PSBudWxsKSB7XHJcbiAgICAgICAgLy8gYWxsIGRlZmF1bHRWYWx1ZVxyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwib2JqZWN0XCIgJiYgaW5wdXQgIT09IG51bGwpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcclxuICAgICAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA+IG51bURhdGFzZXQpIHtcclxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiVG9vIG1hbnkgaW5wdXRzIGZvciBwYXJhbWV0ZXIgJ1wiICsgbmFtZSArIFwiJ1wiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaW5wdXQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkVtcHR5IGFycmF5IG5vdCBhbGxvd2QgZm9yIFwiICsgbmFtZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgYXJyYXkubGVuZ3RoOyBpbmQrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZCA8IGlucHV0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyID0gaW5wdXRbaW5kXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJldiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IGlucHV0W2luZCAtIDFdLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnIgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IHByZXY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBkZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGN1cnIgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBjdXJyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEV4Y2VlZHMgdGhlIGxlbmd0aCBvZiBpbnB1dCwgdXNlIHByZXYgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdCA9IGlucHV0W2lucHV0Lmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1WYWxpZFZhbHVlID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gbGFzdDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgbGV0IHNwbGl0dGVkID0gc3BsaXRJbnB1dEJ5Q29tbWEoaW5wdXQpO1xyXG4gICAgICAgIGlmIChzcGxpdHRlZC5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIGlmIChzcGxpdHRlZC5sZW5ndGggPiBudW1EYXRhc2V0KSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIlRvbyBtYW55IGlucHV0cyBmb3IgcGFyYW1ldGVyICdcIiArIG5hbWUgKyBcIidcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgYXJyYXkubGVuZ3RoOyBpbmQrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZCA8IHNwbGl0dGVkLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyID0gc3BsaXR0ZWRbaW5kXS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByZXYgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBzdHJUb0Jvb2woc3BsaXR0ZWRbaW5kIC0gMV0udHJpbSgpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnIgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBwcmV2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyQm9vbCA9IHN0clRvQm9vbChjdXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJCb29sICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gY3VyckJvb2w7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRXhjZWVkcyB0aGUgbGVuZ3RoIG9mIGlucHV0LCB1c2UgcHJldiB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBsYXN0ID0gc3RyVG9Cb29sKHNwbGl0dGVkW3NwbGl0dGVkLmxlbmd0aCAtIDFdLnRyaW0oKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bVZhbGlkVmFsdWUgPiAwICYmIGxhc3QgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGxhc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIGFsbCBkZWZhdWx0VmFsdWVcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBpbnB1dEJvb2wgPSBzdHJUb0Jvb2woaW5wdXQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0Qm9vbCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5WzBdID0gaW5wdXRCb29sO1xyXG4gICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAxOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBpbnB1dEJvb2w7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICBhcnJheVswXSA9IGlucHV0O1xyXG4gICAgICAgIG51bVZhbGlkVmFsdWUrKztcclxuICAgICAgICBmb3IgKGxldCBpbmQgPSAxOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgICAgIGFycmF5W2luZF0gPSBpbnB1dDtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWFsbG93Tm9WYWxpZFZhbHVlICYmIG51bVZhbGlkVmFsdWUgPT09IDApIHtcclxuICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIk5vIHZhbGlkIGlucHV0IGZvciBcIiArIG5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGVycm9yTWVzc2FnZSAhPT0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFycmF5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcclxuICAgIG5hbWU6IHN0cmluZyxcclxuICAgIGlucHV0OiBhbnksXHJcbiAgICBudW1EYXRhc2V0OiBudW1iZXIsXHJcbiAgICBkZWZhdWx0VmFsdWU6IG51bWJlcixcclxuICAgIGFsbG93Tm9WYWxpZFZhbHVlOiBib29sZWFuXHJcbik6IEFycmF5PG51bWJlcj4gfCBzdHJpbmcge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJnZXROdW1iZXJBcnJheUZyb21JbnB1dFwiKTtcclxuXHJcbiAgICBsZXQgYXJyYXk6IEFycmF5PG51bWJlcj4gPSBbXTtcclxuICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiO1xyXG4gICAgbGV0IG51bVZhbGlkVmFsdWUgPSAwO1xyXG5cclxuICAgIHdoaWxlIChudW1EYXRhc2V0ID4gYXJyYXkubGVuZ3RoKSB7XHJcbiAgICAgICAgYXJyYXkucHVzaChkZWZhdWx0VmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwidW5kZWZpbmVkXCIgfHwgaW5wdXQgPT09IG51bGwpIHtcclxuICAgICAgICAvLyBhbGwgZGVmYXVsdFZhbHVlXHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIiAmJiBpbnB1dCAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xyXG4gICAgICAgICAgICBpZiAoaW5wdXQubGVuZ3RoID4gbnVtRGF0YXNldCkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJUb28gbWFueSBpbnB1dHMgZm9yIHBhcmFtZXRlciAnXCIgKyBuYW1lICsgXCInXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiRW1wdHkgYXJyYXkgbm90IGFsbG93ZCBmb3IgXCIgKyBuYW1lO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kIDwgaW5wdXQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnIgPSBpbnB1dFtpbmRdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcmV2ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gaW5wdXRbaW5kIC0gMV0udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN1cnIgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyciA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gcHJldjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY3VyciA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gY3VycjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBFeGNlZWRzIHRoZSBsZW5ndGggb2YgaW5wdXQsIHVzZSBwcmV2IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3QgPSBpbnB1dFtpbnB1dC5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobnVtVmFsaWRWYWx1ZSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGxhc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIGxldCBzcGxpdHRlZCA9IHNwbGl0SW5wdXRCeUNvbW1hKGlucHV0KTtcclxuICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID4gbnVtRGF0YXNldCkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJUb28gbWFueSBpbnB1dHMgZm9yIHBhcmFtZXRlciAnXCIgKyBuYW1lICsgXCInXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbmQgPCBzcGxpdHRlZC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY3VyciA9IHNwbGl0dGVkW2luZF0udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcmV2ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0ZWRbaW5kIC0gMV0udHJpbSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ICE9PSBudWxsICYmIE51bWJlci5pc051bWJlcihwcmV2KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IHByZXY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJOdW0gPSBoZWxwZXIucGFyc2VGbG9hdEZyb21BbnkoY3VycikudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyTnVtICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gY3Vyck51bTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBFeGNlZWRzIHRoZSBsZW5ndGggb2YgaW5wdXQsIHVzZSBwcmV2IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3QgPSBoZWxwZXIucGFyc2VGbG9hdEZyb21BbnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dGVkW2lucHV0Lmxlbmd0aCAtIDFdLnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgICAgICkudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bVZhbGlkVmFsdWUgPiAwICYmIGxhc3QgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGxhc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIGFsbCBkZWZhdWx0VmFsdWVcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBpbnB1dE51bSA9IGhlbHBlci5wYXJzZUZsb2F0RnJvbUFueShpbnB1dCkudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXROdW0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVswXSA9IGlucHV0TnVtO1xyXG4gICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAxOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBpbnB1dE51bTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgaWYgKE51bWJlci5pc051bWJlcihpbnB1dCkpIHtcclxuICAgICAgICAgICAgYXJyYXlbMF0gPSBpbnB1dDtcclxuICAgICAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAxOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gaW5wdXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFhbGxvd05vVmFsaWRWYWx1ZSAmJiBudW1WYWxpZFZhbHVlID09PSAwKSB7XHJcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJObyB2YWxpZCBpbnB1dCBmb3IgXCIgKyBuYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlcnJvck1lc3NhZ2UgIT09IFwiXCIpIHtcclxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhcnJheTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U3RyaW5nRnJvbUlucHV0KGlucHV0OiBhbnksIGRlZmF1bHRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gaGVscGVyLnJlcGxhY2VJbWdUYWdCeUFsdChpbnB1dCk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgIHJldHVybiBpbnB1dC50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXHJcbiAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICBpbnB1dDogYW55LFxyXG4gICAgbnVtRGF0YXNldDogbnVtYmVyLFxyXG4gICAgZGVmYXVsdFZhbHVlOiBzdHJpbmcsXHJcbiAgICB2YWxpZGF0b3I6IEZ1bmN0aW9uLFxyXG4gICAgYWxsb3dOb1ZhbGlkVmFsdWU6IGJvb2xlYW5cclxuKTogQXJyYXk8c3RyaW5nPiB8IHN0cmluZyB7XHJcbiAgICBsZXQgYXJyYXk6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiO1xyXG4gICAgbGV0IG51bVZhbGlkVmFsdWUgPSAwO1xyXG5cclxuICAgIHdoaWxlIChudW1EYXRhc2V0ID4gYXJyYXkubGVuZ3RoKSB7XHJcbiAgICAgICAgYXJyYXkucHVzaChkZWZhdWx0VmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwidW5kZWZpbmVkXCIgfHwgaW5wdXQgPT09IG51bGwpIHtcclxuICAgICAgICAvLyBhbGwgZGVmYXVsdFZhbHVlXHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIiAmJiBpbnB1dCAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xyXG4gICAgICAgICAgICBpZiAoaW5wdXQubGVuZ3RoID4gbnVtRGF0YXNldCkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJUb28gbWFueSBpbnB1dHMgZm9yIHBhcmFtZXRlciAnXCIgKyBuYW1lICsgXCInXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiRW1wdHkgYXJyYXkgbm90IGFsbG93ZCBmb3IgXCIgKyBuYW1lO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kIDwgaW5wdXQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnIgPSBpbnB1dFtpbmRdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcmV2ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gaW5wdXRbaW5kIC0gMV0udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN1cnIgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyciA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gcHJldjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yKGN1cnIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBjdXJyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBjdXJyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBFeGNlZWRzIHRoZSBsZW5ndGggb2YgaW5wdXQsIHVzZSBwcmV2IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3QgPSBpbnB1dFtpbnB1dC5sZW5ndGggLSAxXS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bVZhbGlkVmFsdWUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBsYXN0O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBkZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICBsZXQgc3BsaXR0ZWQgPSBzcGxpdElucHV0QnlDb21tYShpbnB1dCk7XHJcbiAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA+IG51bURhdGFzZXQpIHtcclxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiVG9vIG1hbnkgaW5wdXRzIGZvciBwYXJhbWV0ZXIgJ1wiICsgbmFtZSArIFwiJ1wiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kIDwgc3BsaXR0ZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnIgPSBzcGxpdHRlZFtpbmRdLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJldiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IHNwbGl0dGVkW2luZCAtIDFdLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnIgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBwcmV2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IoY3VycikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gY3VycjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBjdXJyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBFeGNlZWRzIHRoZSBsZW5ndGggb2YgaW5wdXQsIHVzZSBwcmV2IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3QgPSBzcGxpdHRlZFtzcGxpdHRlZC5sZW5ndGggLSAxXS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bVZhbGlkVmFsdWUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBsYXN0O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBkZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGlucHV0ID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhbGwgZGVmYXVsdFZhbHVlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvcihpbnB1dCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbMF0gPSBpbnB1dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAxOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gaW5wdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVswXSA9IGlucHV0O1xyXG4gICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAxOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBpbnB1dDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgIGxldCBzdHJOdW1iZXIgPSBpbnB1dC50b1N0cmluZygpO1xyXG4gICAgICAgIGlmICh2YWxpZGF0b3IpIHtcclxuICAgICAgICAgICAgaWYgKHZhbGlkYXRvcihzdHJOdW1iZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBhcnJheVswXSA9IHN0ck51bWJlcjtcclxuICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDE7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gc3RyTnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXJyYXlbMF0gPSBzdHJOdW1iZXI7XHJcbiAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMTsgaW5kIDwgYXJyYXkubGVuZ3RoOyBpbmQrKykge1xyXG4gICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IHN0ck51bWJlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghYWxsb3dOb1ZhbGlkVmFsdWUgJiYgbnVtVmFsaWRWYWx1ZSA9PT0gMCkge1xyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IFwiTm8gdmFsaWQgaW5wdXQgZm9yIFwiICsgbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXJyb3JNZXNzYWdlICE9PSBcIlwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgYXJyYXlbaW5kXSA9IGhlbHBlci5yZXBsYWNlSW1nVGFnQnlBbHQoYXJyYXlbaW5kXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFycmF5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXROdW1iZXJBcnJheShuYW1lOiBzdHJpbmcsIGlucHV0OiBhbnkpOiBBcnJheTxudW1iZXI+IHwgc3RyaW5nIHtcclxuICAgIGxldCBudW1BcnJheTogQXJyYXk8bnVtYmVyPiA9IFtdO1xyXG5cclxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwidW5kZWZpbmVkXCIgfHwgaW5wdXQgPT09IG51bGwpIHJldHVybiBudW1BcnJheTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGVsZW0gb2YgaW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZWxlbSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gcGFyc2VGbG9hdChlbGVtKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKHYpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bUFycmF5LnB1c2godik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IGBQYXJhbWV0ZXIgJyR7bmFtZX0nIGFjY2VwdHMgb25seSBudW1iZXJzYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIGxldCBzcGxpdHRlZCA9IHNwbGl0SW5wdXRCeUNvbW1hKGlucHV0KTtcclxuICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBwaWVjZSBvZiBzcGxpdHRlZCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHYgPSBwYXJzZUZsb2F0KHBpZWNlLnRyaW0oKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc05hTih2KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIE51bWJlci5pc051bWJlcihOYU4pIC0tPiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgbnVtQXJyYXkucHVzaCh2KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IGBQYXJhbWV0ZXIgJyR7bmFtZX0nIGFjY2VwdHMgb25seSBudW1iZXJzYDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYEVtcHR5ICR7bmFtZX0gaXMgbm90IGFsbG93ZWQuYDtcclxuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgdiA9IHBhcnNlRmxvYXQoaW5wdXQpO1xyXG4gICAgICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKHYpKSB7XHJcbiAgICAgICAgICAgICAgICBudW1BcnJheS5wdXNoKHYpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IGBQYXJhbWV0ZXIgJyR7bmFtZX0nIGFjY2VwdHMgb25seSBudW1iZXJzYDtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgIG51bUFycmF5LnB1c2goaW5wdXQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYEludmFsaWQgJHtuYW1lfWA7XHJcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVtQXJyYXk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFN0cmluZ0FycmF5KG5hbWU6IHN0cmluZywgaW5wdXQ6IGFueSk6IEFycmF5PHN0cmluZz4gfCBzdHJpbmcge1xyXG4gICAgbGV0IHN0ckFycmF5OiBBcnJheTxzdHJpbmc+ID0gW107XHJcblxyXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJ1bmRlZmluZWRcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIHN0ckFycmF5O1xyXG5cclxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgZWxlbSBvZiBpbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RyQXJyYXkucHVzaChlbGVtLnRyaW0oKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIGxldCBzcGxpdHRlZCA9IHNwbGl0SW5wdXRCeUNvbW1hKGlucHV0KTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhzcGxpdHRlZCk7XHJcbiAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgcGllY2Ugb2Ygc3BsaXR0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHN0ckFycmF5LnB1c2gocGllY2UudHJpbSgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IGBFbXB0eSAke25hbWV9IGlzIG5vdCBhbGxvd2VkLmA7XHJcbiAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RyQXJyYXkucHVzaChpbnB1dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYEludmFsaWQgJHtuYW1lfWA7XHJcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBzdHJBcnJheS5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgc3RyQXJyYXlbaW5kXSA9IGhlbHBlci5yZXBsYWNlSW1nVGFnQnlBbHQoc3RyQXJyYXlbaW5kXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN0ckFycmF5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUNvbW1vbkNoYXJ0SW5mbyh5YW1sOiBhbnksIHJlbmRlckluZm86IENvbW1vbkNoYXJ0SW5mbykge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJwYXJzZUNvbW1vbkNoYXJ0SW5mb1wiKTtcclxuXHJcbiAgICAvLyBzaW5nbGUgdmFsdWUsIHVzZSBkZWZhdWx0IHZhbHVlIGlmIG5vIHZhbHVlIGZyb20gWUFNTFxyXG4gICAgaWYgKHlhbWwpIHtcclxuICAgICAgICAvLyB0aXRsZVxyXG4gICAgICAgIHJlbmRlckluZm8udGl0bGUgPSBnZXRTdHJpbmdGcm9tSW5wdXQoeWFtbD8udGl0bGUsIHJlbmRlckluZm8udGl0bGUpO1xyXG5cclxuICAgICAgICAvLyB4QXhpc0xhYmVsXHJcbiAgICAgICAgcmVuZGVySW5mby54QXhpc0xhYmVsID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxyXG4gICAgICAgICAgICB5YW1sPy54QXhpc0xhYmVsLFxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLnhBeGlzTGFiZWxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyB4QXhpc0NvbG9yXHJcbiAgICAgICAgcmVuZGVySW5mby54QXhpc0NvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxyXG4gICAgICAgICAgICB5YW1sPy54QXhpc0NvbG9yLFxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLnhBeGlzQ29sb3JcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyB4QXhpc0xhYmVsQ29sb3JcclxuICAgICAgICByZW5kZXJJbmZvLnhBeGlzTGFiZWxDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcclxuICAgICAgICAgICAgeWFtbD8ueEF4aXNMYWJlbENvbG9yLFxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLnhBeGlzTGFiZWxDb2xvclxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIGFsbG93SW5zcGVjdERhdGFcclxuICAgICAgICBpZiAodHlwZW9mIHlhbWwuYWxsb3dJbnNwZWN0RGF0YSA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICAgICAgcmVuZGVySW5mby5hbGxvd0luc3BlY3REYXRhID0geWFtbC5hbGxvd0luc3BlY3REYXRhO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2hvd0xlZ2VuZFxyXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbC5zaG93TGVnZW5kID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvLnNob3dMZWdlbmQgPSB5YW1sLnNob3dMZWdlbmQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBsZWdlbmRQb3NpdGlvblxyXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbC5sZWdlbmRQb3NpdGlvbiA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZFBvc2l0aW9uID0geWFtbC5sZWdlbmRQb3NpdGlvbjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZFBvc2l0aW9uID0gXCJib3R0b21cIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGxlZ2VuZE9yaWVudFxyXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbC5sZWdlbmRPcmllbnRhdGlvbiA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID0geWFtbC5sZWdlbmRPcmllbnRhdGlvbjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZFBvc2l0aW9uID09PSBcInRvcFwiIHx8XHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZFBvc2l0aW9uID09PSBcImJvdHRvbVwiXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5sZWdlbmRPcmllbnRhdGlvbiA9IFwiaG9yaXpvbnRhbFwiO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5sZWdlbmRQb3NpdGlvbiA9PT0gXCJsZWZ0XCIgfHxcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwicmlnaHRcIlxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kT3JpZW50YXRpb24gPSBcInZlcnRpY2FsXCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID0gXCJob3Jpem9udGFsXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5sZWdlbmRQb3NpdGlvbik7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5sZWdlbmRPcmllbnRhdGlvbik7XHJcblxyXG4gICAgICAgIC8vIGxlZ2VuZEJnQ29sb3JcclxuICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZEJnQ29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIHlhbWw/LmxlZ2VuZEJnQ29sb3IsXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kQmdDb2xvclxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIGxlZ2VuZEJvcmRlckNvbG9yXHJcbiAgICAgICAgcmVuZGVySW5mby5sZWdlbmRCb3JkZXJDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcclxuICAgICAgICAgICAgeWFtbD8ubGVnZW5kQm9yZGVyQ29sb3IsXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kQm9yZGVyQ29sb3JcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHlBeGlzTGFiZWxcclxuICAgIGxldCByZXRZQXhpc0xhYmVsID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgXCJ5QXhpc0xhYmVsXCIsXHJcbiAgICAgICAgeWFtbD8ueUF4aXNMYWJlbCxcclxuICAgICAgICAyLFxyXG4gICAgICAgIFwiVmFsdWVcIixcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIHRydWVcclxuICAgICk7XHJcbiAgICBpZiAodHlwZW9mIHJldFlBeGlzTGFiZWwgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gcmV0WUF4aXNMYWJlbDsgLy8gZXJyb3JNZXNzYWdlXHJcbiAgICB9XHJcbiAgICBpZiAocmV0WUF4aXNMYWJlbC5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgcmV0dXJuIFwieUF4aXNMYWJlbCBhY2NlcHRzIG5vdCBtb3JlIHRoYW4gdHdvIHZhbHVlcyBmb3IgbGVmdCBhbmQgcmlnaHQgeS1heGVzXCI7XHJcbiAgICB9XHJcbiAgICByZW5kZXJJbmZvLnlBeGlzTGFiZWwgPSByZXRZQXhpc0xhYmVsO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby55QXhpc0xhYmVsKTtcclxuXHJcbiAgICAvLyB5QXhpc0NvbG9yXHJcbiAgICBsZXQgcmV0WUF4aXNDb2xvciA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxyXG4gICAgICAgIFwieUF4aXNDb2xvclwiLFxyXG4gICAgICAgIHlhbWw/LnlBeGlzQ29sb3IsXHJcbiAgICAgICAgMixcclxuICAgICAgICBcIlwiLFxyXG4gICAgICAgIHZhbGlkYXRlQ29sb3IsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgcmV0WUF4aXNDb2xvciA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiByZXRZQXhpc0NvbG9yOyAvLyBlcnJvck1lc3NhZ2VcclxuICAgIH1cclxuICAgIGlmIChyZXRZQXhpc0NvbG9yLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICByZXR1cm4gXCJ5QXhpc0NvbG9yIGFjY2VwdHMgbm90IG1vcmUgdGhhbiB0d28gdmFsdWVzIGZvciBsZWZ0IGFuZCByaWdodCB5LWF4ZXNcIjtcclxuICAgIH1cclxuICAgIHJlbmRlckluZm8ueUF4aXNDb2xvciA9IHJldFlBeGlzQ29sb3I7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnlBeGlzQ29sb3IpO1xyXG5cclxuICAgIC8vIHlBeGlzTGFiZWxDb2xvclxyXG4gICAgbGV0IHJldFlBeGlzTGFiZWxDb2xvciA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxyXG4gICAgICAgIFwieUF4aXNMYWJlbENvbG9yXCIsXHJcbiAgICAgICAgeWFtbD8ueUF4aXNMYWJlbENvbG9yLFxyXG4gICAgICAgIDIsXHJcbiAgICAgICAgXCJcIixcclxuICAgICAgICB2YWxpZGF0ZUNvbG9yLFxyXG4gICAgICAgIHRydWVcclxuICAgICk7XHJcbiAgICBpZiAodHlwZW9mIHJldFlBeGlzTGFiZWxDb2xvciA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiByZXRZQXhpc0xhYmVsQ29sb3I7IC8vIGVycm9yTWVzc2FnZVxyXG4gICAgfVxyXG4gICAgaWYgKHJldFlBeGlzTGFiZWxDb2xvci5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgcmV0dXJuIFwieUF4aXNMYWJlbENvbG9yIGFjY2VwdHMgbm90IG1vcmUgdGhhbiB0d28gdmFsdWVzIGZvciBsZWZ0IGFuZCByaWdodCB5LWF4ZXNcIjtcclxuICAgIH1cclxuICAgIHJlbmRlckluZm8ueUF4aXNMYWJlbENvbG9yID0gcmV0WUF4aXNMYWJlbENvbG9yO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby55QXhpc0xhYmVsQ29sb3IpO1xyXG5cclxuICAgIC8vIHlBeGlzVW5pdFxyXG4gICAgbGV0IHJldFlBeGlzVW5pdCA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxyXG4gICAgICAgIFwieUF4aXNVbml0XCIsXHJcbiAgICAgICAgeWFtbD8ueUF4aXNVbml0LFxyXG4gICAgICAgIDIsXHJcbiAgICAgICAgXCJcIixcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIHRydWVcclxuICAgICk7XHJcbiAgICBpZiAodHlwZW9mIHJldFlBeGlzVW5pdCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiByZXRZQXhpc1VuaXQ7IC8vIGVycm9yTWVzc2FnZVxyXG4gICAgfVxyXG4gICAgaWYgKHJldFlBeGlzVW5pdC5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgcmV0dXJuIFwieUF4aXNVbml0IGFjY2VwdHMgbm90IG1vcmUgdGhhbiB0d28gdmFsdWVzIGZvciBsZWZ0IGFuZCByaWdodCB5LWF4ZXNcIjtcclxuICAgIH1cclxuICAgIHJlbmRlckluZm8ueUF4aXNVbml0ID0gcmV0WUF4aXNVbml0O1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby55QXhpc1VuaXQpO1xyXG5cclxuICAgIC8vIHhBeGlzVGlja0ludGVydmFsXHJcbiAgICByZW5kZXJJbmZvLnhBeGlzVGlja0ludGVydmFsID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxyXG4gICAgICAgIHlhbWw/LnhBeGlzVGlja0ludGVydmFsLFxyXG4gICAgICAgIHJlbmRlckluZm8ueEF4aXNUaWNrSW50ZXJ2YWxcclxuICAgICk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnhBeGlzVGlja0ludGVydmFsKTtcclxuXHJcbiAgICAvLyB5QXhpc1RpY2tJbnRlcnZhbFxyXG4gICAgbGV0IHJldFlBeGlzVGlja0ludGVydmFsID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgXCJ5QXhpc1RpY2tJbnRlcnZhbFwiLFxyXG4gICAgICAgIHlhbWw/LnlBeGlzVGlja0ludGVydmFsLFxyXG4gICAgICAgIDIsXHJcbiAgICAgICAgbnVsbCxcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIHRydWVcclxuICAgICk7XHJcbiAgICBpZiAodHlwZW9mIHJldFlBeGlzVGlja0ludGVydmFsID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldFlBeGlzVGlja0ludGVydmFsOyAvLyBlcnJvck1lc3NhZ2VcclxuICAgIH1cclxuICAgIGlmIChyZXRZQXhpc1RpY2tJbnRlcnZhbC5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgcmV0dXJuIFwieUF4aXNUaWNrSW50ZXJ2YWwgYWNjZXB0cyBub3QgbW9yZSB0aGFuIHR3byB2YWx1ZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHktYXhlc1wiO1xyXG4gICAgfVxyXG4gICAgcmVuZGVySW5mby55QXhpc1RpY2tJbnRlcnZhbCA9IHJldFlBeGlzVGlja0ludGVydmFsO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby55QXhpc1RpY2tJbnRlcnZhbCk7XHJcblxyXG4gICAgLy8geEF4aXNUaWNrTGFiZWxGb3JtYXRcclxuICAgIHJlbmRlckluZm8ueEF4aXNUaWNrTGFiZWxGb3JtYXQgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXHJcbiAgICAgICAgeWFtbD8ueEF4aXNUaWNrTGFiZWxGb3JtYXQsXHJcbiAgICAgICAgcmVuZGVySW5mby54QXhpc1RpY2tMYWJlbEZvcm1hdFxyXG4gICAgKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ueEF4aXNUaWNrTGFiZWxGb3JtYXQpO1xyXG5cclxuICAgIC8vIHlBeGlzVGlja0xhYmVsRm9ybWF0XHJcbiAgICBsZXQgcmV0WUF4aXNUaWNrTGFiZWxGb3JtYXQgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcclxuICAgICAgICBcInlBeGlzVGlja0xhYmVsRm9ybWF0XCIsXHJcbiAgICAgICAgeWFtbD8ueUF4aXNUaWNrTGFiZWxGb3JtYXQsXHJcbiAgICAgICAgMixcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIG51bGwsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgcmV0WUF4aXNUaWNrTGFiZWxGb3JtYXQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gcmV0WUF4aXNUaWNrTGFiZWxGb3JtYXQ7IC8vIGVycm9yTWVzc2FnZVxyXG4gICAgfVxyXG4gICAgaWYgKHJldFlBeGlzVGlja0xhYmVsRm9ybWF0Lmxlbmd0aCA+IDIpIHtcclxuICAgICAgICByZXR1cm4gXCJ5QXhpc1RpY2tMYWJlbEZvcm1hdCBhY2NlcHRzIG5vdCBtb3JlIHRoYW4gdHdvIHZhbHVlcyBmb3IgbGVmdCBhbmQgcmlnaHQgeS1heGVzXCI7XHJcbiAgICB9XHJcbiAgICByZW5kZXJJbmZvLnlBeGlzVGlja0xhYmVsRm9ybWF0ID0gcmV0WUF4aXNUaWNrTGFiZWxGb3JtYXQ7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnlBeGlzVGlja0xhYmVsRm9ybWF0KTtcclxuXHJcbiAgICAvLyB5TWluXHJcbiAgICBsZXQgcmV0WU1pbiA9IGdldE51bWJlckFycmF5RnJvbUlucHV0KFwieU1pblwiLCB5YW1sPy55TWluLCAyLCBudWxsLCB0cnVlKTtcclxuICAgIGlmICh0eXBlb2YgcmV0WU1pbiA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiByZXRZTWluOyAvLyBlcnJvck1lc3NhZ2VcclxuICAgIH1cclxuICAgIGlmIChyZXRZTWluLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICByZXR1cm4gXCJ5TWluIGFjY2VwdHMgbm90IG1vcmUgdGhhbiB0d28gdmFsdWVzIGZvciBsZWZ0IGFuZCByaWdodCB5LWF4ZXNcIjtcclxuICAgIH1cclxuICAgIHJlbmRlckluZm8ueU1pbiA9IHJldFlNaW47XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnlNaW4pO1xyXG5cclxuICAgIC8vIHlNYXhcclxuICAgIGxldCByZXRZTWF4ID0gZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQoXCJ5TWF4XCIsIHlhbWw/LnlNYXgsIDIsIG51bGwsIHRydWUpO1xyXG4gICAgaWYgKHR5cGVvZiByZXRZTWF4ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldFlNYXg7IC8vIGVycm9yTWVzc2FnZVxyXG4gICAgfVxyXG4gICAgaWYgKHJldFlNYXgubGVuZ3RoID4gMikge1xyXG4gICAgICAgIHJldHVybiBcInlNYXggYWNjZXB0cyBub3QgbW9yZSB0aGFuIHR3byB2YWx1ZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHktYXhlc1wiO1xyXG4gICAgfVxyXG4gICAgcmVuZGVySW5mby55TWF4ID0gcmV0WU1heDtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ueU1heCk7XHJcblxyXG4gICAgLy8gcmV2ZXJzZVlBeGlzXHJcbiAgICBsZXQgcmV0UmV2ZXJzZVlBeGlzID0gZ2V0Qm9vbEFycmF5RnJvbUlucHV0KFxyXG4gICAgICAgIFwicmV2ZXJzZVlBeGlzXCIsXHJcbiAgICAgICAgeWFtbD8ucmV2ZXJzZVlBeGlzLFxyXG4gICAgICAgIDIsXHJcbiAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgcmV0UmV2ZXJzZVlBeGlzID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldFJldmVyc2VZQXhpczsgLy8gZXJyb3JNZXNzYWdlXHJcbiAgICB9XHJcbiAgICBpZiAocmV0UmV2ZXJzZVlBeGlzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICByZXR1cm4gXCJyZXZlcnNlWUF4aXMgYWNjZXB0cyBub3QgbW9yZSB0aGFuIHR3byB2YWx1ZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHktYXhlc1wiO1xyXG4gICAgfVxyXG4gICAgcmVuZGVySW5mby5yZXZlcnNlWUF4aXMgPSByZXRSZXZlcnNlWUF4aXM7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnJldmVyc2VZQXhpcyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKG9iajogb2JqZWN0KTogc3RyaW5nW10ge1xyXG4gICAgbGV0IGtleXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBpZiAob2JqICE9PSBudWxsKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzKG9iaikgYXMgQXJyYXk8a2V5b2Ygc3RyaW5nPjtcclxuICAgICAgICBmb3IgKGxldCBrZXkgb2Ygb2JqZWN0S2V5cykge1xyXG4gICAgICAgICAgICBrZXlzLnB1c2goa2V5LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBrZXlzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVuZGVySW5mb0Zyb21ZYW1sKFxyXG4gICAgeWFtbFRleHQ6IHN0cmluZyxcclxuICAgIHBsdWdpbjogVHJhY2tlclxyXG4pOiBSZW5kZXJJbmZvIHwgc3RyaW5nIHtcclxuICAgIGxldCB5YW1sO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyh5YW1sVGV4dCk7XHJcbiAgICAgICAgeWFtbCA9IHBhcnNlWWFtbCh5YW1sVGV4dCk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJFcnJvciBwYXJzaW5nIFlBTUxcIjtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICB9XHJcbiAgICBpZiAoIXlhbWwpIHtcclxuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJFcnJvciBwYXJzaW5nIFlBTUxcIjtcclxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coeWFtbCk7XHJcbiAgICBsZXQga2V5c0ZvdW5kSW5ZQU1MID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoeWFtbCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhrZXlzRm91bmRJbllBTUwpO1xyXG5cclxuICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiO1xyXG5cclxuICAgIC8vIFNlYXJjaCB0YXJnZXRcclxuICAgIGlmICgha2V5c0ZvdW5kSW5ZQU1MLmluY2x1ZGVzKFwic2VhcmNoVGFyZ2V0XCIpKSB7XHJcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiUGFyYW1ldGVyICdzZWFyY2hUYXJnZXQnIG5vdCBmb3VuZCBpbiBZQU1MXCI7XHJcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgIH1cclxuICAgIGxldCBzZWFyY2hUYXJnZXQ6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICAgIGlmICh0eXBlb2YgeWFtbC5zZWFyY2hUYXJnZXQgPT09IFwib2JqZWN0XCIgJiYgeWFtbC5zZWFyY2hUYXJnZXQgIT09IG51bGwpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh5YW1sLnNlYXJjaFRhcmdldCkpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgdGFyZ2V0IG9mIHlhbWwuc2VhcmNoVGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoVGFyZ2V0LnB1c2godGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkVtcHR5IHNlYXJjaCB0YXJnZXQgaXMgbm90IGFsbG93ZWQuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHlhbWwuc2VhcmNoVGFyZ2V0ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgbGV0IHNwbGl0dGVkID0gc3BsaXRJbnB1dEJ5Q29tbWEoeWFtbC5zZWFyY2hUYXJnZXQpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHNwbGl0dGVkKTtcclxuICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBwaWVjZSBvZiBzcGxpdHRlZCkge1xyXG4gICAgICAgICAgICAgICAgcGllY2UgPSBwaWVjZS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocGllY2UgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hUYXJnZXQucHVzaChwaWVjZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiRW1wdHkgc2VhcmNoIHRhcmdldCBpcyBub3QgYWxsb3dlZC5cIjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoeWFtbC5zZWFyY2hUYXJnZXQgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJFbXB0eSBzZWFyY2ggdGFyZ2V0IGlzIG5vdCBhbGxvd2VkLlwiO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNlYXJjaFRhcmdldC5wdXNoKHlhbWwuc2VhcmNoVGFyZ2V0KTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBzZWFyY2ggdGFyZ2V0IChzZWFyY2hUYXJnZXQpXCI7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBzZWFyY2hUYXJnZXQubGVuZ3RoOyBpbmQrKykge1xyXG4gICAgICAgIHNlYXJjaFRhcmdldFtpbmRdID0gaGVscGVyLnJlcGxhY2VJbWdUYWdCeUFsdChzZWFyY2hUYXJnZXRbaW5kXSk7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhzZWFyY2hUYXJnZXQpO1xyXG5cclxuICAgIGlmIChlcnJvck1lc3NhZ2UgIT09IFwiXCIpIHtcclxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBudW1EYXRhc2V0cyA9IHNlYXJjaFRhcmdldC5sZW5ndGg7XHJcblxyXG4gICAgLy8gU2VhcmNoIHR5cGVcclxuICAgIGlmICgha2V5c0ZvdW5kSW5ZQU1MLmluY2x1ZGVzKFwic2VhcmNoVHlwZVwiKSkge1xyXG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlBhcmFtZXRlciAnc2VhcmNoVHlwZScgbm90IGZvdW5kIGluIFlBTUxcIjtcclxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgfVxyXG4gICAgbGV0IHNlYXJjaFR5cGU6IEFycmF5PFNlYXJjaFR5cGU+ID0gW107XHJcbiAgICBsZXQgcmV0U2VhcmNoVHlwZSA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxyXG4gICAgICAgIFwic2VhcmNoVHlwZVwiLFxyXG4gICAgICAgIHlhbWwuc2VhcmNoVHlwZSxcclxuICAgICAgICBudW1EYXRhc2V0cyxcclxuICAgICAgICBcIlwiLFxyXG4gICAgICAgIHZhbGlkYXRlU2VhcmNoVHlwZSxcclxuICAgICAgICBmYWxzZVxyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgcmV0U2VhcmNoVHlwZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiByZXRTZWFyY2hUeXBlOyAvLyBlcnJvck1lc3NhZ2VcclxuICAgIH1cclxuICAgIGZvciAobGV0IHN0clR5cGUgb2YgcmV0U2VhcmNoVHlwZSkge1xyXG4gICAgICAgIHN3aXRjaCAoc3RyVHlwZS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ0YWdcIjpcclxuICAgICAgICAgICAgICAgIHNlYXJjaFR5cGUucHVzaChTZWFyY2hUeXBlLlRhZyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImZyb250bWF0dGVyXCI6XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5Gcm9udG1hdHRlcik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIndpa2lcIjpcclxuICAgICAgICAgICAgICAgIHNlYXJjaFR5cGUucHVzaChTZWFyY2hUeXBlLldpa2kpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ3aWtpLmxpbmtcIjpcclxuICAgICAgICAgICAgICAgIHNlYXJjaFR5cGUucHVzaChTZWFyY2hUeXBlLldpa2lMaW5rKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwid2lraS5kaXNwbGF5XCI6XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5XaWtpRGlzcGxheSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInRleHRcIjpcclxuICAgICAgICAgICAgICAgIHNlYXJjaFR5cGUucHVzaChTZWFyY2hUeXBlLlRleHQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJkdmZpZWxkXCI6XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5kdkZpZWxkKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwidGFibGVcIjpcclxuICAgICAgICAgICAgICAgIHNlYXJjaFR5cGUucHVzaChTZWFyY2hUeXBlLlRhYmxlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiZmlsZW1ldGFcIjpcclxuICAgICAgICAgICAgICAgIHNlYXJjaFR5cGUucHVzaChTZWFyY2hUeXBlLkZpbGVNZXRhKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwidGFza1wiOlxyXG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuVGFzayk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInRhc2suYWxsXCI6XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5UYXNrKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwidGFzay5kb25lXCI6XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5UYXNrRG9uZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInRhc2subm90ZG9uZVwiOlxyXG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuVGFza05vdERvbmUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gQ3VycmVudGx5LCB3ZSBkb24ndCBhbGxvdyB0eXBlICd0YWJsZScgdXNlZCB3aXRoIG90aGVyIHR5cGVzXHJcbiAgICBpZiAoXHJcbiAgICAgICAgc2VhcmNoVHlwZS5pbmNsdWRlcyhTZWFyY2hUeXBlLlRhYmxlKSAmJlxyXG4gICAgICAgIHNlYXJjaFR5cGUuZmlsdGVyKCh0KSA9PiB0ICE9PSBTZWFyY2hUeXBlLlRhYmxlKS5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgXCJzZWFyY2hUeXBlICd0YWJsZScgZG9lc3RuJ3Qgd29yayB3aXRoIG90aGVyIHR5cGVzIGZvciBub3dcIjtcclxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coc2VhcmNoVHlwZSk7XHJcblxyXG4gICAgLy8gc2VwYXJhdG9yXHJcbiAgICBsZXQgbXVsdGlwbGVWYWx1ZVNwYXJhdG9yOiBBcnJheTxzdHJpbmc+ID0gW107XHJcbiAgICBsZXQgcmV0TXVsdGlwbGVWYWx1ZVNwYXJhdG9yID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgXCJzZXBhcmF0b3JcIixcclxuICAgICAgICB5YW1sLnNlcGFyYXRvcixcclxuICAgICAgICBudW1EYXRhc2V0cyxcclxuICAgICAgICBcIlwiLCAvLyBzZXQgdGhlIGRlZmF1bHQgdmFsdWUgbGF0ZXJcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIHRydWVcclxuICAgICk7XHJcbiAgICBpZiAodHlwZW9mIHJldE11bHRpcGxlVmFsdWVTcGFyYXRvciA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiByZXRNdWx0aXBsZVZhbHVlU3BhcmF0b3I7IC8vIGVycm9yTWVzc2FnZVxyXG4gICAgfVxyXG4gICAgbXVsdGlwbGVWYWx1ZVNwYXJhdG9yID0gcmV0TXVsdGlwbGVWYWx1ZVNwYXJhdG9yLm1hcCgoc2VwKSA9PiB7XHJcbiAgICAgICAgaWYgKHNlcCA9PT0gXCJjb21tYVwiIHx8IHNlcCA9PT0gXCJcXFxcLFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIixcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlcDtcclxuICAgIH0pO1xyXG4gICAgLy8gY29uc29sZS5sb2cobXVsdGlwbGVWYWx1ZVNwYXJhdG9yKTtcclxuXHJcbiAgICAvLyB4RGF0YXNldFxyXG4gICAgbGV0IHJldFhEYXRhc2V0ID0gZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgXCJ4RGF0YXNldFwiLFxyXG4gICAgICAgIHlhbWwueERhdGFzZXQsXHJcbiAgICAgICAgbnVtRGF0YXNldHMsXHJcbiAgICAgICAgLTEsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgcmV0WERhdGFzZXQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gcmV0WERhdGFzZXQ7IC8vIGVycm9yTWVzc2FnZVxyXG4gICAgfVxyXG4gICAgbGV0IHhEYXRhc2V0ID0gcmV0WERhdGFzZXQubWFwKChkOiBudW1iZXIpID0+IHtcclxuICAgICAgICBpZiAoZCA8IDAgfHwgZCA+PSBudW1EYXRhc2V0cykge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkO1xyXG4gICAgfSk7XHJcbiAgICAvLyBhc3NpZ24gdGhpcyB0byByZW5kZXJJbmZvIGxhdGVyXHJcblxyXG4gICAgLy8gQ3JlYXRlIHF1ZXJpZXNcclxuICAgIGxldCBxdWVyaWVzOiBBcnJheTxRdWVyeT4gPSBbXTtcclxuICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHNlYXJjaFRhcmdldC5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgbGV0IHF1ZXJ5ID0gbmV3IFF1ZXJ5KFxyXG4gICAgICAgICAgICBxdWVyaWVzLmxlbmd0aCxcclxuICAgICAgICAgICAgc2VhcmNoVHlwZVtpbmRdLFxyXG4gICAgICAgICAgICBzZWFyY2hUYXJnZXRbaW5kXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcXVlcnkuc2V0U2VwYXJhdG9yKG11bHRpcGxlVmFsdWVTcGFyYXRvcltpbmRdKTtcclxuICAgICAgICBpZiAoeERhdGFzZXQuaW5jbHVkZXMoaW5kKSkgcXVlcnkudXNlZEFzWERhdGFzZXQgPSB0cnVlO1xyXG4gICAgICAgIHF1ZXJpZXMucHVzaChxdWVyeSk7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhxdWVyaWVzKTtcclxuXHJcbiAgICAvLyBDcmVhdGUgZ3JhcnBoIGluZm9cclxuICAgIGxldCByZW5kZXJJbmZvID0gbmV3IFJlbmRlckluZm8ocXVlcmllcyk7XHJcbiAgICBsZXQga2V5c09mUmVuZGVySW5mbyA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHJlbmRlckluZm8pO1xyXG4gICAgbGV0IGFkZGl0aW9uYWxBbGxvd2VkS2V5cyA9IFtcInNlYXJjaFR5cGVcIiwgXCJzZWFyY2hUYXJnZXRcIiwgXCJzZXBhcmF0b3JcIl07XHJcbiAgICAvLyBjb25zb2xlLmxvZyhrZXlzT2ZSZW5kZXJJbmZvKTtcclxuICAgIGxldCB5YW1sTGluZUtleXMgPSBbXTtcclxuICAgIGxldCB5YW1sQmFyS2V5cyA9IFtdO1xyXG4gICAgbGV0IHlhbWxQaWVLZXlzID0gW107XHJcbiAgICBsZXQgeWFtbFN1bW1hcnlLZXlzID0gW107XHJcbiAgICBsZXQgeWFtbE1vbnRoS2V5cyA9IFtdO1xyXG4gICAgbGV0IHlhbWxIZWF0bWFwS2V5cyA9IFtdO1xyXG4gICAgbGV0IHlhbWxCdWxsZXRLZXlzID0gW107XHJcbiAgICBmb3IgKGxldCBrZXkgb2Yga2V5c0ZvdW5kSW5ZQU1MKSB7XHJcbiAgICAgICAgaWYgKC9ebGluZVswLTldKiQvLnRlc3Qoa2V5KSkge1xyXG4gICAgICAgICAgICB5YW1sTGluZUtleXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZEtleXMucHVzaChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoL15iYXJbMC05XSokLy50ZXN0KGtleSkpIHtcclxuICAgICAgICAgICAgeWFtbEJhcktleXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZEtleXMucHVzaChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoL15waWVbMC05XSokLy50ZXN0KGtleSkpIHtcclxuICAgICAgICAgICAgeWFtbFBpZUtleXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZEtleXMucHVzaChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoL15zdW1tYXJ5WzAtOV0qJC8udGVzdChrZXkpKSB7XHJcbiAgICAgICAgICAgIHlhbWxTdW1tYXJ5S2V5cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIGFkZGl0aW9uYWxBbGxvd2VkS2V5cy5wdXNoKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgvXmJ1bGxldFswLTldKiQvLnRlc3Qoa2V5KSkge1xyXG4gICAgICAgICAgICB5YW1sQnVsbGV0S2V5cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIGFkZGl0aW9uYWxBbGxvd2VkS2V5cy5wdXNoKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgvXm1vbnRoWzAtOV0qJC8udGVzdChrZXkpKSB7XHJcbiAgICAgICAgICAgIHlhbWxNb250aEtleXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZEtleXMucHVzaChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoL15oZWF0bWFwWzAtOV0qJC8udGVzdChrZXkpKSB7XHJcbiAgICAgICAgICAgIHlhbWxIZWF0bWFwS2V5cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIGFkZGl0aW9uYWxBbGxvd2VkS2V5cy5wdXNoKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gQ3VzdG9tIGRhdGFzZXRcclxuICAgIGxldCB5YW1sQ3VzdG9tRGF0YXNldEtleXMgPSBbXTtcclxuICAgIGZvciAobGV0IGtleSBvZiBrZXlzRm91bmRJbllBTUwpIHtcclxuICAgICAgICBpZiAoL15kYXRhc2V0WzAtOV0qJC8udGVzdChrZXkpKSB7XHJcbiAgICAgICAgICAgIC8vIENoZWNrIHRoZSBpZCBvZiBjdXN0b20gZGF0YXNldCBpcyBub3QgZHVwbGljYXRlZFxyXG4gICAgICAgICAgICBsZXQgY3VzdG9tRGF0YXNldElkID0gLTE7XHJcbiAgICAgICAgICAgIGxldCBzdHJDdXN0b21EYXRhc2V0SWQgPSBrZXkucmVwbGFjZShcImRhdGFzZXRcIiwgXCJcIik7XHJcbiAgICAgICAgICAgIGlmIChzdHJDdXN0b21EYXRhc2V0SWQgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgIGN1c3RvbURhdGFzZXRJZCA9IDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjdXN0b21EYXRhc2V0SWQgPSBwYXJzZUZsb2F0KHN0ckN1c3RvbURhdGFzZXRJZCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHF1ZXJpZXMuc29tZSgocSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBxLmdldElkKCkgPT09IGN1c3RvbURhdGFzZXRJZDtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJEdXBsaWNhdGVkIGRhdGFzZXQgaWQgZm9yIGtleSAnXCIgKyBrZXkgKyBcIidcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHlhbWxDdXN0b21EYXRhc2V0S2V5cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIGFkZGl0aW9uYWxBbGxvd2VkS2V5cy5wdXNoKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coYWRkaXRpb25hbEFsbG93ZWRLZXlzKTtcclxuICAgIGZvciAobGV0IGtleSBvZiBrZXlzRm91bmRJbllBTUwpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICFrZXlzT2ZSZW5kZXJJbmZvLmluY2x1ZGVzKGtleSkgJiZcclxuICAgICAgICAgICAgIWFkZGl0aW9uYWxBbGxvd2VkS2V5cy5pbmNsdWRlcyhrZXkpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiJ1wiICsga2V5ICsgXCInIGlzIG5vdCBhbiBhdmFpbGFibGUga2V5XCI7XHJcbiAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB0b3RhbE51bU91dHB1dHMgPVxyXG4gICAgICAgIHlhbWxMaW5lS2V5cy5sZW5ndGggK1xyXG4gICAgICAgIHlhbWxCYXJLZXlzLmxlbmd0aCArXHJcbiAgICAgICAgeWFtbFBpZUtleXMubGVuZ3RoICtcclxuICAgICAgICB5YW1sU3VtbWFyeUtleXMubGVuZ3RoICtcclxuICAgICAgICB5YW1sQnVsbGV0S2V5cy5sZW5ndGggK1xyXG4gICAgICAgIHlhbWxNb250aEtleXMubGVuZ3RoICtcclxuICAgICAgICB5YW1sSGVhdG1hcEtleXMubGVuZ3RoO1xyXG4gICAgaWYgKHRvdGFsTnVtT3V0cHV0cyA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBcIk5vIG91dHB1dCBwYXJhbWV0ZXIgcHJvdmlkZWQsIHBsZWFzZSBwbGFjZSBsaW5lLCBiYXIsIHBpZSwgbW9udGgsIGJ1bGxldCwgb3Igc3VtbWFyeS5cIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSb290IGZvbGRlciB0byBzZWFyY2hcclxuICAgIHJlbmRlckluZm8uZm9sZGVyID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxyXG4gICAgICAgIHlhbWw/LmZvbGRlcixcclxuICAgICAgICBwbHVnaW4uc2V0dGluZ3MuZm9sZGVyXHJcbiAgICApO1xyXG4gICAgaWYgKHJlbmRlckluZm8uZm9sZGVyLnRyaW0oKSA9PT0gXCJcIikge1xyXG4gICAgICAgIHJlbmRlckluZm8uZm9sZGVyID0gcGx1Z2luLnNldHRpbmdzLmZvbGRlcjtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVySW5mbyBmb2xkZXI6IFwiICsgcmVuZGVySW5mby5mb2xkZXIpO1xyXG5cclxuICAgIGxldCBhYnN0cmFjdEZvbGRlciA9IHBsdWdpbi5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKFxyXG4gICAgICAgIG5vcm1hbGl6ZVBhdGgocmVuZGVySW5mby5mb2xkZXIpXHJcbiAgICApO1xyXG4gICAgaWYgKCFhYnN0cmFjdEZvbGRlciB8fCAhKGFic3RyYWN0Rm9sZGVyIGluc3RhbmNlb2YgVEZvbGRlcikpIHtcclxuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJGb2xkZXIgJ1wiICsgcmVuZGVySW5mby5mb2xkZXIgKyBcIicgZG9lc24ndCBleGlzdFwiO1xyXG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmlsZVxyXG4gICAgaWYgKHR5cGVvZiB5YW1sLmZpbGUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICBsZXQgcmV0RmlsZXMgPSBnZXRTdHJpbmdBcnJheShcImZpbGVcIiwgeWFtbC5maWxlKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldEZpbGVzID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXRGaWxlczsgLy8gZXJyb3IgbWVzc2FnZVxyXG4gICAgICAgIH1cclxuICAgICAgICByZW5kZXJJbmZvLmZpbGUgPSByZXRGaWxlcztcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uZmlsZSk7XHJcblxyXG4gICAgLy8gc3BlY2lmaWVkRmlsZXNPbmx5XHJcbiAgICBpZiAodHlwZW9mIHlhbWwuc3BlY2lmaWVkRmlsZXNPbmx5ID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgIHJlbmRlckluZm8uc3BlY2lmaWVkRmlsZXNPbmx5ID0geWFtbC5zcGVjaWZpZWRGaWxlc09ubHk7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnNwZWNpZmllZEZpbGVzT25seSk7XHJcblxyXG4gICAgLy8gZmlsZUNvbnRhaW5zTGlua2VkRmlsZXNcclxuICAgIGlmICh0eXBlb2YgeWFtbC5maWxlQ29udGFpbnNMaW5rZWRGaWxlcyA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIGxldCByZXRGaWxlcyA9IGdldFN0cmluZ0FycmF5KFxyXG4gICAgICAgICAgICBcImZpbGVDb250YWluc0xpbmtlZEZpbGVzXCIsXHJcbiAgICAgICAgICAgIHlhbWwuZmlsZUNvbnRhaW5zTGlua2VkRmlsZXNcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0RmlsZXMgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldEZpbGVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZW5kZXJJbmZvLmZpbGVDb250YWluc0xpbmtlZEZpbGVzID0gcmV0RmlsZXM7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmZpbGVDb250YWluc0xpbmtlZEZpbGVzKTtcclxuXHJcbiAgICAvLyBmaWxlTXVsdGlwbGllckFmdGVyTGlua1xyXG4gICAgcmVuZGVySW5mby5maWxlTXVsdGlwbGllckFmdGVyTGluayA9IGdldFN0cmluZ0Zyb21JbnB1dChcclxuICAgICAgICB5YW1sPy5maWxlTXVsdGlwbGllckFmdGVyTGluayxcclxuICAgICAgICByZW5kZXJJbmZvLmZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rXHJcbiAgICApO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5maWxlTXVsdGlwbGllckFmdGVyTGluayk7XHJcblxyXG4gICAgLy8gRGF0ZSBmb3JtYXRcclxuICAgIGNvbnN0IGRhdGVGb3JtYXQgPSB5YW1sLmRhdGVGb3JtYXQ7XHJcbiAgICAvLz8/IG5vdCBzdXJlIHdoeSBJIG5lZWQgdGhpcyB0byBtYWtlIGl0IHdvcmtzLFxyXG4gICAgLy8gd2l0aG91dCB0aGF0LCB0aGUgYXNzaWduZWQgdGhlIHJlbmRlckluZm8uZGF0ZUZvcm1hdCB3aWxsIGJlY29tZSB1bmRlZmluZWRcclxuICAgIGlmICh0eXBlb2YgeWFtbC5kYXRlRm9ybWF0ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgaWYgKHlhbWwuZGF0ZUZvcm1hdCA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXQgPSBwbHVnaW4uc2V0dGluZ3MuZGF0ZUZvcm1hdDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXQgPSBkYXRlRm9ybWF0O1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0ID0gcGx1Z2luLnNldHRpbmdzLmRhdGVGb3JtYXQ7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlckluZm8gZGF0ZUZvcm1hdDogXCIgKyByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xyXG5cclxuICAgIC8vIERhdGUgZm9ybWF0IHByZWZpeFxyXG4gICAgcmVuZGVySW5mby5kYXRlRm9ybWF0UHJlZml4ID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxyXG4gICAgICAgIHlhbWw/LmRhdGVGb3JtYXRQcmVmaXgsXHJcbiAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0UHJlZml4XHJcbiAgICApO1xyXG5cclxuICAgIC8vIERhdGUgZnJvbWF0IHN1ZmZpeFxyXG4gICAgcmVuZGVySW5mby5kYXRlRm9ybWF0U3VmZml4ID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxyXG4gICAgICAgIHlhbWw/LmRhdGVGb3JtYXRTdWZmaXgsXHJcbiAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0U3VmZml4XHJcbiAgICApO1xyXG5cclxuICAgIC8vIHN0YXJ0RGF0ZSwgZW5kRGF0ZVxyXG4gICAgLy8gY29uc29sZS5sb2coXCJQYXJzaW5nIHN0YXJ0RGF0ZVwiKTtcclxuICAgIGlmICh0eXBlb2YgeWFtbC5zdGFydERhdGUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICBpZiAoL14oW1xcLV0/WzAtOV0rW1xcLl1bMC05XSt8W1xcLV0/WzAtOV0rKW0kLy50ZXN0KHlhbWwuc3RhcnREYXRlKSkge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgICAgIFwiJ20nIGZvciAnbWludXRlJyBpcyB0b28gc21hbGwgZm9yIHBhcmFtZXRlciBzdGFydERhdGUsIHBsZWFzZSB1c2UgJ2QnIGZvciAnZGF5JyBvciAnTScgZm9yIG1vbnRoXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzdHJTdGFydERhdGUgPSBoZWxwZXIuZ2V0RGF0ZVN0cmluZ0Zyb21JbnB1dFN0cmluZyhcclxuICAgICAgICAgICAgeWFtbC5zdGFydERhdGUsXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFByZWZpeCxcclxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0U3VmZml4XHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhzdHJTdGFydERhdGUpO1xyXG5cclxuICAgICAgICAvLyByZWxhdGl2ZSBkYXRlXHJcbiAgICAgICAgbGV0IHN0YXJ0RGF0ZSA9IG51bGw7XHJcbiAgICAgICAgbGV0IGlzU3RhcnREYXRlVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICBzdGFydERhdGUgPSBoZWxwZXIuZ2V0RGF0ZUJ5RHVyYXRpb25Ub1RvZGF5KFxyXG4gICAgICAgICAgICBzdHJTdGFydERhdGUsXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coc3RhcnREYXRlKTtcclxuXHJcbiAgICAgICAgaWYgKHN0YXJ0RGF0ZSkge1xyXG4gICAgICAgICAgICBpc1N0YXJ0RGF0ZVZhbGlkID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGFydERhdGUgPSBoZWxwZXIuc3RyVG9EYXRlKHN0clN0YXJ0RGF0ZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KTtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0RGF0ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgICAgICAgICAgIGlzU3RhcnREYXRlVmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHN0YXJ0RGF0ZSk7XHJcblxyXG4gICAgICAgIGlmICghaXNTdGFydERhdGVWYWxpZCB8fCBzdGFydERhdGUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgICBcIkludmFsaWQgc3RhcnREYXRlLCB0aGUgZm9ybWF0IG9mIHN0YXJ0RGF0ZSBtYXkgbm90IG1hdGNoIHlvdXIgZGF0ZUZvcm1hdCBcIiArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXQ7XHJcbiAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlbmRlckluZm8uc3RhcnREYXRlID0gc3RhcnREYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbnNvbGUubG9nKFwiUGFyc2luZyBlbmREYXRlXCIpO1xyXG4gICAgaWYgKHR5cGVvZiB5YW1sLmVuZERhdGUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICBpZiAoL14oW1xcLV0/WzAtOV0rW1xcLl1bMC05XSt8W1xcLV0/WzAtOV0rKW0kLy50ZXN0KHlhbWwuZW5kRGF0ZSkpIHtcclxuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgICBcIidtJyBmb3IgJ21pbnV0ZScgaXMgdG9vIHNtYWxsIGZvciBwYXJhbWV0ZXIgZW5kRGF0ZSwgcGxlYXNlIHVzZSAnZCcgZm9yICdkYXknIG9yICdNJyBmb3IgbW9udGhcIjtcclxuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHN0ckVuZERhdGUgPSBoZWxwZXIuZ2V0RGF0ZVN0cmluZ0Zyb21JbnB1dFN0cmluZyhcclxuICAgICAgICAgICAgeWFtbC5lbmREYXRlLFxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRQcmVmaXgsXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFN1ZmZpeFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGxldCBlbmREYXRlID0gbnVsbDtcclxuICAgICAgICBsZXQgaXNFbmREYXRlVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICBlbmREYXRlID0gaGVscGVyLmdldERhdGVCeUR1cmF0aW9uVG9Ub2RheShcclxuICAgICAgICAgICAgc3RyRW5kRGF0ZSxcclxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0XHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoZW5kRGF0ZSkge1xyXG4gICAgICAgICAgICBpc0VuZERhdGVWYWxpZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZW5kRGF0ZSA9IGhlbHBlci5zdHJUb0RhdGUoc3RyRW5kRGF0ZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KTtcclxuICAgICAgICAgICAgaWYgKGVuZERhdGUuaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgICAgICAgICBpc0VuZERhdGVWYWxpZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coZW5kRGF0ZSk7XHJcblxyXG4gICAgICAgIGlmICghaXNFbmREYXRlVmFsaWQgfHwgZW5kRGF0ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgICAgIFwiSW52YWxpZCBlbmREYXRlLCB0aGUgZm9ybWF0IG9mIGVuZERhdGUgbWF5IG5vdCBtYXRjaCB5b3VyIGRhdGVGb3JtYXQgXCIgK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0O1xyXG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZW5kZXJJbmZvLmVuZERhdGUgPSBlbmREYXRlO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICAgIHJlbmRlckluZm8uc3RhcnREYXRlICE9PSBudWxsICYmXHJcbiAgICAgICAgcmVuZGVySW5mby5zdGFydERhdGUuaXNWYWxpZCgpICYmXHJcbiAgICAgICAgcmVuZGVySW5mby5lbmREYXRlICE9PSBudWxsICYmXHJcbiAgICAgICAgcmVuZGVySW5mby5lbmREYXRlLmlzVmFsaWQoKVxyXG4gICAgKSB7XHJcbiAgICAgICAgLy8gTWFrZSBzdXJlIGVuZERhdGUgPiBzdGFydERhdGVcclxuICAgICAgICBpZiAocmVuZGVySW5mby5lbmREYXRlIDwgcmVuZGVySW5mby5zdGFydERhdGUpIHtcclxuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgICBcIkludmFsaWQgZGF0ZSByYW5nZSAoc3RhcnREYXRlIGxhcmdlciB0aGFuIGVuZERhdGUpXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5zdGFydERhdGUpO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5lbmREYXRlKTtcclxuXHJcbiAgICAvLyB4RGF0YXNldFxyXG4gICAgcmVuZGVySW5mby54RGF0YXNldCA9IHhEYXRhc2V0O1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby54RGF0YXNldCk7XHJcblxyXG4gICAgLy8gRGF0YXNldCBuYW1lIChuZWVkIHhEYXRhc2V0IHRvIHNldCBkZWZhdWx0IG5hbWUpXHJcbiAgICBsZXQgcmV0RGF0YXNldE5hbWUgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcclxuICAgICAgICBcImRhdGFzZXROYW1lXCIsXHJcbiAgICAgICAgeWFtbC5kYXRhc2V0TmFtZSxcclxuICAgICAgICBudW1EYXRhc2V0cyxcclxuICAgICAgICBcInVudGl0bGVkXCIsXHJcbiAgICAgICAgbnVsbCxcclxuICAgICAgICB0cnVlXHJcbiAgICApO1xyXG4gICAgaWYgKHR5cGVvZiByZXREYXRhc2V0TmFtZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiByZXREYXRhc2V0TmFtZTsgLy8gZXJyb3JNZXNzYWdlXHJcbiAgICB9XHJcbiAgICAvLyByZW5hbWUgdW50aXRsZWRcclxuICAgIGxldCBpbmRVbnRpdGxlZCA9IDA7XHJcbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCByZXREYXRhc2V0TmFtZS5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgaWYgKHJlbmRlckluZm8ueERhdGFzZXQuaW5jbHVkZXMoaW5kKSkgY29udGludWU7XHJcbiAgICAgICAgaWYgKHJldERhdGFzZXROYW1lW2luZF0gPT09IFwidW50aXRsZWRcIikge1xyXG4gICAgICAgICAgICByZXREYXRhc2V0TmFtZVtpbmRdID0gXCJ1bnRpdGxlZFwiICsgaW5kVW50aXRsZWQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgaW5kVW50aXRsZWQrKztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBkdXBsaWNhdGVkIG5hbWVzXHJcbiAgICBpZiAobmV3IFNldChyZXREYXRhc2V0TmFtZSkuc2l6ZSA9PT0gcmV0RGF0YXNldE5hbWUubGVuZ3RoKSB7XHJcbiAgICAgICAgcmVuZGVySW5mby5kYXRhc2V0TmFtZSA9IHJldERhdGFzZXROYW1lO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJOb3QgZW5vdWdoIGRhdGFzZXQgbmFtZXMgb3IgZHVwbGljYXRlZCBuYW1lc1wiO1xyXG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmRhdGFzZXROYW1lKTtcclxuXHJcbiAgICAvLyBjb25zdFZhbHVlXHJcbiAgICBsZXQgcmV0Q29uc3RWYWx1ZSA9IGdldE51bWJlckFycmF5RnJvbUlucHV0KFxyXG4gICAgICAgIFwiY29uc3RWYWx1ZVwiLFxyXG4gICAgICAgIHlhbWwuY29uc3RWYWx1ZSxcclxuICAgICAgICBudW1EYXRhc2V0cyxcclxuICAgICAgICAxLjAsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgcmV0Q29uc3RWYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiByZXRDb25zdFZhbHVlOyAvLyBlcnJvck1lc3NhZ2VcclxuICAgIH1cclxuICAgIHJlbmRlckluZm8uY29uc3RWYWx1ZSA9IHJldENvbnN0VmFsdWU7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmNvbnN0VmFsdWUpO1xyXG5cclxuICAgIC8vIGlnbm9yZUF0dGFjaGVkVmFsdWVcclxuICAgIGxldCByZXRJZ25vcmVBdHRhY2hlZFZhbHVlID0gZ2V0Qm9vbEFycmF5RnJvbUlucHV0KFxyXG4gICAgICAgIFwiaWdub3JlQXR0YWNoZWRWYWx1ZVwiLFxyXG4gICAgICAgIHlhbWwuaWdub3JlQXR0YWNoZWRWYWx1ZSxcclxuICAgICAgICBudW1EYXRhc2V0cyxcclxuICAgICAgICBmYWxzZSxcclxuICAgICAgICB0cnVlXHJcbiAgICApO1xyXG4gICAgaWYgKHR5cGVvZiByZXRJZ25vcmVBdHRhY2hlZFZhbHVlID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldElnbm9yZUF0dGFjaGVkVmFsdWU7XHJcbiAgICB9XHJcbiAgICByZW5kZXJJbmZvLmlnbm9yZUF0dGFjaGVkVmFsdWUgPSByZXRJZ25vcmVBdHRhY2hlZFZhbHVlO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5pZ25vcmVBdHRhY2hlZFZhbHVlKTtcclxuXHJcbiAgICAvLyBpZ25vcmVaZXJvVmFsdWVcclxuICAgIGxldCByZXRJZ25vcmVaZXJvVmFsdWUgPSBnZXRCb29sQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgXCJpZ25vcmVaZXJvVmFsdWVcIixcclxuICAgICAgICB5YW1sLmlnbm9yZVplcm9WYWx1ZSxcclxuICAgICAgICBudW1EYXRhc2V0cyxcclxuICAgICAgICBmYWxzZSxcclxuICAgICAgICB0cnVlXHJcbiAgICApO1xyXG4gICAgaWYgKHR5cGVvZiByZXRJZ25vcmVaZXJvVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gcmV0SWdub3JlWmVyb1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcmVuZGVySW5mby5pZ25vcmVaZXJvVmFsdWUgPSByZXRJZ25vcmVaZXJvVmFsdWU7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmlnbm9yZUF0dGFjaGVkVmFsdWUpO1xyXG5cclxuICAgIC8vIGFjY3VtXHJcbiAgICBsZXQgcmV0QWNjdW0gPSBnZXRCb29sQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgXCJhY2N1bVwiLFxyXG4gICAgICAgIHlhbWwuYWNjdW0sXHJcbiAgICAgICAgbnVtRGF0YXNldHMsXHJcbiAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgcmV0QWNjdW0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gcmV0QWNjdW07XHJcbiAgICB9XHJcbiAgICByZW5kZXJJbmZvLmFjY3VtID0gcmV0QWNjdW07XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmFjY3VtKTtcclxuXHJcbiAgICAvLyBwZW5hbHR5XHJcbiAgICBsZXQgcmV0UGVuYWx0eSA9IGdldE51bWJlckFycmF5RnJvbUlucHV0KFxyXG4gICAgICAgIFwicGVuYWx0eVwiLFxyXG4gICAgICAgIHlhbWwucGVuYWx0eSxcclxuICAgICAgICBudW1EYXRhc2V0cyxcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIHRydWVcclxuICAgICk7XHJcbiAgICBpZiAodHlwZW9mIHJldFBlbmFsdHkgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gcmV0UGVuYWx0eTtcclxuICAgIH1cclxuICAgIHJlbmRlckluZm8ucGVuYWx0eSA9IHJldFBlbmFsdHk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnBlbmFsdHkpO1xyXG5cclxuICAgIC8vIHZhbHVlU2hpZnRcclxuICAgIGxldCByZXRWYWx1ZVNoaWZ0ID0gZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgXCJ2YWx1ZVNoaWZ0XCIsXHJcbiAgICAgICAgeWFtbC52YWx1ZVNoaWZ0LFxyXG4gICAgICAgIG51bURhdGFzZXRzLFxyXG4gICAgICAgIDAsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgcmV0VmFsdWVTaGlmdCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiByZXRWYWx1ZVNoaWZ0O1xyXG4gICAgfVxyXG4gICAgcmVuZGVySW5mby52YWx1ZVNoaWZ0ID0gcmV0VmFsdWVTaGlmdDtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8udmFsdWVTaGlmdCk7XHJcblxyXG4gICAgLy8gc2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuXHJcbiAgICBsZXQgcmV0U2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuID0gZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgXCJzaGlmdE9ubHlWYWx1ZUxhcmdlclRoYW5cIixcclxuICAgICAgICB5YW1sLnNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbixcclxuICAgICAgICBudW1EYXRhc2V0cyxcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIHRydWVcclxuICAgICk7XHJcbiAgICBpZiAodHlwZW9mIHJldFNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbiA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiByZXRTaGlmdE9ubHlWYWx1ZUxhcmdlclRoYW47XHJcbiAgICB9XHJcbiAgICByZW5kZXJJbmZvLnNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbiA9IHJldFNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbjtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uc2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuKTtcclxuXHJcbiAgICAvLyB0ZXh0VmFsdWVNYXBcclxuICAgIGlmICh0eXBlb2YgeWFtbC50ZXh0VmFsdWVNYXAgIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICBsZXQga2V5cyA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHlhbWwudGV4dFZhbHVlTWFwKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0ZXh0cyk7XHJcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXMpIHtcclxuICAgICAgICAgICAgbGV0IHRleHQgPSBrZXkudHJpbSgpO1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvLnRleHRWYWx1ZU1hcFt0ZXh0XSA9IHlhbWwudGV4dFZhbHVlTWFwW3RleHRdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8udGV4dFZhbHVlTWFwKTtcclxuXHJcbiAgICAvLyBmaXhlZFNjYWxlXHJcbiAgICBpZiAodHlwZW9mIHlhbWwuZml4ZWRTY2FsZSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgIHJlbmRlckluZm8uZml4ZWRTY2FsZSA9IHlhbWwuZml4ZWRTY2FsZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmaXRQYW5lbFdpZHRoXHJcbiAgICBpZiAodHlwZW9mIHlhbWwuZml0UGFuZWxXaWR0aCA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICByZW5kZXJJbmZvLmZpdFBhbmVsV2lkdGggPSB5YW1sLmZpdFBhbmVsV2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbWFyZ2luXHJcbiAgICBsZXQgcmV0TWFyZ2luID0gZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQoXCJtYXJnaW5cIiwgeWFtbC5tYXJnaW4sIDQsIDEwLCB0cnVlKTtcclxuICAgIGlmICh0eXBlb2YgcmV0TWFyZ2luID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldE1hcmdpbjsgLy8gZXJyb3JNZXNzYWdlXHJcbiAgICB9XHJcbiAgICBpZiAocmV0TWFyZ2luLmxlbmd0aCA+IDQpIHtcclxuICAgICAgICByZXR1cm4gXCJtYXJnaW4gYWNjZXB0cyBub3QgbW9yZSB0aGFuIGZvdXIgdmFsdWVzIGZvciB0b3AsIHJpZ2h0LCBib3R0b20sIGFuZCBsZWZ0IG1hcmdpbnMuXCI7XHJcbiAgICB9XHJcbiAgICByZW5kZXJJbmZvLm1hcmdpbiA9IG5ldyBNYXJnaW4oXHJcbiAgICAgICAgcmV0TWFyZ2luWzBdLFxyXG4gICAgICAgIHJldE1hcmdpblsxXSxcclxuICAgICAgICByZXRNYXJnaW5bMl0sXHJcbiAgICAgICAgcmV0TWFyZ2luWzNdXHJcbiAgICApO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5tYXJnaW4pO1xyXG5cclxuICAgIC8vIGN1c3RvbURhdGFzZXQgcmVsYXRlZCBwYXJhbWV0ZXJzXHJcbiAgICBmb3IgKGxldCBkYXRhc2V0S2V5IG9mIHlhbWxDdXN0b21EYXRhc2V0S2V5cykge1xyXG4gICAgICAgIGxldCBjdXN0b21EYXRhc2V0ID0gbmV3IEN1c3RvbURhdGFzZXRJbmZvKCk7XHJcbiAgICAgICAgbGV0IHlhbWxDdXN0b21EYXRhc2V0ID0geWFtbFtkYXRhc2V0S2V5XTtcclxuXHJcbiAgICAgICAgbGV0IGtleXNPZkN1c3RvbURhdGFzZXRJbmZvID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoY3VzdG9tRGF0YXNldCk7XHJcbiAgICAgICAgbGV0IGtleXNGb3VuZEluWUFNTCA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHlhbWxDdXN0b21EYXRhc2V0KTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzT2ZDdXN0b21EYXRhc2V0SW5mbyk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c0ZvdW5kSW5ZQU1MKTtcclxuICAgICAgICBmb3IgKGxldCBrZXkgb2Yga2V5c0ZvdW5kSW5ZQU1MKSB7XHJcbiAgICAgICAgICAgIGlmICgha2V5c09mQ3VzdG9tRGF0YXNldEluZm8uaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCInXCIgKyBrZXkgKyBcIicgaXMgbm90IGFuIGF2YWlsYWJsZSBrZXlcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGlkXHJcbiAgICAgICAgbGV0IGN1c3RvbURhdGFzZXRJZCA9IC0xO1xyXG4gICAgICAgIGxldCBzdHJDdXN0b21EYXRhc2V0SWQgPSBkYXRhc2V0S2V5LnJlcGxhY2UoXCJkYXRhc2V0XCIsIFwiXCIpO1xyXG4gICAgICAgIGlmIChzdHJDdXN0b21EYXRhc2V0SWQgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgY3VzdG9tRGF0YXNldElkID0gMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjdXN0b21EYXRhc2V0SWQgPSBwYXJzZUZsb2F0KHN0ckN1c3RvbURhdGFzZXRJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1c3RvbURhdGFzZXQuaWQgPSBjdXN0b21EYXRhc2V0SWQ7XHJcblxyXG4gICAgICAgIC8vIG5hbWVcclxuICAgICAgICBjdXN0b21EYXRhc2V0Lm5hbWUgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIHlhbWxDdXN0b21EYXRhc2V0Py5uYW1lLFxyXG4gICAgICAgICAgICBjdXN0b21EYXRhc2V0Lm5hbWVcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyB4RGF0YVxyXG4gICAgICAgIGxldCByZXRYRGF0YSA9IGdldFN0cmluZ0FycmF5KFwieERhdGFcIiwgeWFtbEN1c3RvbURhdGFzZXQ/LnhEYXRhKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldFhEYXRhID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXRYRGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY3VzdG9tRGF0YXNldC54RGF0YSA9IHJldFhEYXRhO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGN1c3RvbURhdGFzZXQueERhdGEpO1xyXG4gICAgICAgIGxldCBudW1YRGF0YSA9IGN1c3RvbURhdGFzZXQueERhdGEubGVuZ3RoO1xyXG5cclxuICAgICAgICAvLyB5RGF0YVxyXG4gICAgICAgIGxldCByZXRZRGF0YSA9IGdldFN0cmluZ0FycmF5KFwieURhdGFcIiwgeWFtbEN1c3RvbURhdGFzZXQ/LnlEYXRhKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldFlEYXRhID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXRZRGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY3VzdG9tRGF0YXNldC55RGF0YSA9IHJldFlEYXRhO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGN1c3RvbURhdGFzZXQueURhdGEpO1xyXG4gICAgICAgIGlmIChjdXN0b21EYXRhc2V0LnlEYXRhLmxlbmd0aCAhPT0gbnVtWERhdGEpIHtcclxuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgICBcIk51bWJlciBvZiBlbGVtZW50cyBpbiB4RGF0YSBhbmQgeURhdGEgbm90IG1hdGNoZWRcIjtcclxuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlbmRlckluZm8uY3VzdG9tRGF0YXNldC5wdXNoKGN1c3RvbURhdGFzZXQpO1xyXG4gICAgfSAvLyBjdXN0b21EYXRhc2V0IHJlbGF0ZWQgcGFyYW1ldGVyc1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5jdXN0b21EYXRhc2V0KTtcclxuXHJcbiAgICAvLyBsaW5lIHJlbGF0ZWQgcGFyYW1ldGVyc1xyXG4gICAgZm9yIChsZXQgbGluZUtleSBvZiB5YW1sTGluZUtleXMpIHtcclxuICAgICAgICBsZXQgbGluZSA9IG5ldyBMaW5lSW5mbygpO1xyXG4gICAgICAgIGxldCB5YW1sTGluZSA9IHlhbWxbbGluZUtleV07XHJcblxyXG4gICAgICAgIGxldCBrZXlzT2ZMaW5lSW5mbyA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKGxpbmUpO1xyXG4gICAgICAgIGxldCBrZXlzRm91bmRJbllBTUwgPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyh5YW1sTGluZSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c09mTGluZUluZm8pO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNGb3VuZEluWUFNTCk7XHJcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXNGb3VuZEluWUFNTCkge1xyXG4gICAgICAgICAgICBpZiAoIWtleXNPZkxpbmVJbmZvLmluY2x1ZGVzKGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiJ1wiICsga2V5ICsgXCInIGlzIG5vdCBhbiBhdmFpbGFibGUga2V5XCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcmV0UGFyc2VDb21tb25DaGFydEluZm8gPSBwYXJzZUNvbW1vbkNoYXJ0SW5mbyh5YW1sTGluZSwgbGluZSk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXRQYXJzZUNvbW1vbkNoYXJ0SW5mbyA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0UGFyc2VDb21tb25DaGFydEluZm87XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBsaW5lQ29sb3JcclxuICAgICAgICBsZXQgcmV0TGluZUNvbG9yID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIFwibGluZUNvbG9yXCIsXHJcbiAgICAgICAgICAgIHlhbWxMaW5lPy5saW5lQ29sb3IsXHJcbiAgICAgICAgICAgIG51bURhdGFzZXRzLFxyXG4gICAgICAgICAgICBcIlwiLFxyXG4gICAgICAgICAgICB2YWxpZGF0ZUNvbG9yLFxyXG4gICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldExpbmVDb2xvciA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0TGluZUNvbG9yOyAvLyBlcnJvck1lc3NhZ2VcclxuICAgICAgICB9XHJcbiAgICAgICAgbGluZS5saW5lQ29sb3IgPSByZXRMaW5lQ29sb3I7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobGluZS5saW5lQ29sb3IpO1xyXG5cclxuICAgICAgICAvLyBsaW5lV2lkdGhcclxuICAgICAgICBsZXQgcmV0TGluZVdpZHRoID0gZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIFwibGluZVdpZHRoXCIsXHJcbiAgICAgICAgICAgIHlhbWxMaW5lPy5saW5lV2lkdGgsXHJcbiAgICAgICAgICAgIG51bURhdGFzZXRzLFxyXG4gICAgICAgICAgICAxLjUsXHJcbiAgICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0TGluZVdpZHRoID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXRMaW5lV2lkdGg7IC8vIGVycm9yTWVzc2FnZVxyXG4gICAgICAgIH1cclxuICAgICAgICBsaW5lLmxpbmVXaWR0aCA9IHJldExpbmVXaWR0aDtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lLmxpbmVXaWR0aCk7XHJcblxyXG4gICAgICAgIC8vIHNob3dMaW5lXHJcbiAgICAgICAgbGV0IHJldFNob3dMaW5lID0gZ2V0Qm9vbEFycmF5RnJvbUlucHV0KFxyXG4gICAgICAgICAgICBcInNob3dMaW5lXCIsXHJcbiAgICAgICAgICAgIHlhbWxMaW5lPy5zaG93TGluZSxcclxuICAgICAgICAgICAgbnVtRGF0YXNldHMsXHJcbiAgICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0U2hvd0xpbmUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldFNob3dMaW5lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsaW5lLnNob3dMaW5lID0gcmV0U2hvd0xpbmU7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobGluZS5zaG93TGluZSk7XHJcblxyXG4gICAgICAgIC8vIHNob3dQb2ludFxyXG4gICAgICAgIGxldCByZXRTaG93UG9pbnQgPSBnZXRCb29sQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIFwic2hvd1BvaW50XCIsXHJcbiAgICAgICAgICAgIHlhbWxMaW5lPy5zaG93UG9pbnQsXHJcbiAgICAgICAgICAgIG51bURhdGFzZXRzLFxyXG4gICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldFNob3dQb2ludCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0U2hvd1BvaW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsaW5lLnNob3dQb2ludCA9IHJldFNob3dQb2ludDtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lLnNob3dQb2ludCk7XHJcblxyXG4gICAgICAgIC8vIHBvaW50Q29sb3JcclxuICAgICAgICBsZXQgcmV0UG9pbnRDb2xvciA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxyXG4gICAgICAgICAgICBcInBvaW50Q29sb3JcIixcclxuICAgICAgICAgICAgeWFtbExpbmU/LnBvaW50Q29sb3IsXHJcbiAgICAgICAgICAgIG51bURhdGFzZXRzLFxyXG4gICAgICAgICAgICBcIiM2OWIzYTJcIixcclxuICAgICAgICAgICAgdmFsaWRhdGVDb2xvcixcclxuICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXRQb2ludENvbG9yID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXRQb2ludENvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsaW5lLnBvaW50Q29sb3IgPSByZXRQb2ludENvbG9yO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmUucG9pbnRDb2xvcik7XHJcblxyXG4gICAgICAgIC8vIHBvaW50Qm9yZGVyQ29sb3JcclxuICAgICAgICBsZXQgcmV0UG9pbnRCb3JkZXJDb2xvciA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxyXG4gICAgICAgICAgICBcInBvaW50Qm9yZGVyQ29sb3JcIixcclxuICAgICAgICAgICAgeWFtbExpbmU/LnBvaW50Qm9yZGVyQ29sb3IsXHJcbiAgICAgICAgICAgIG51bURhdGFzZXRzLFxyXG4gICAgICAgICAgICBcIiM2OWIzYTJcIixcclxuICAgICAgICAgICAgdmFsaWRhdGVDb2xvcixcclxuICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXRQb2ludEJvcmRlckNvbG9yID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXRQb2ludEJvcmRlckNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsaW5lLnBvaW50Qm9yZGVyQ29sb3IgPSByZXRQb2ludEJvcmRlckNvbG9yO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmUucG9pbnRCb3JkZXJDb2xvcik7XHJcblxyXG4gICAgICAgIC8vIHBvaW50Qm9yZGVyV2lkdGhcclxuICAgICAgICBsZXQgcmV0UG9pbnRCb3JkZXJXaWR0aCA9IGdldE51bWJlckFycmF5RnJvbUlucHV0KFxyXG4gICAgICAgICAgICBcInBvaW50Qm9yZGVyV2lkdGhcIixcclxuICAgICAgICAgICAgeWFtbExpbmU/LnBvaW50Qm9yZGVyV2lkdGgsXHJcbiAgICAgICAgICAgIG51bURhdGFzZXRzLFxyXG4gICAgICAgICAgICAwLjAsXHJcbiAgICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0UG9pbnRCb3JkZXJXaWR0aCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0UG9pbnRCb3JkZXJXaWR0aDsgLy8gZXJyb3JNZXNzYWdlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpbmUucG9pbnRCb3JkZXJXaWR0aCA9IHJldFBvaW50Qm9yZGVyV2lkdGg7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobGluZS5wb2ludEJvcmRlcldpZHRoKTtcclxuXHJcbiAgICAgICAgLy8gcG9pbnRTaXplXHJcbiAgICAgICAgbGV0IHJldFBvaW50U2l6ZSA9IGdldE51bWJlckFycmF5RnJvbUlucHV0KFxyXG4gICAgICAgICAgICBcInBvaW50U2l6ZVwiLFxyXG4gICAgICAgICAgICB5YW1sTGluZT8ucG9pbnRTaXplLFxyXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcclxuICAgICAgICAgICAgMy4wLFxyXG4gICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldFBvaW50U2l6ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0UG9pbnRTaXplOyAvLyBlcnJvck1lc3NhZ2VcclxuICAgICAgICB9XHJcbiAgICAgICAgbGluZS5wb2ludFNpemUgPSByZXRQb2ludFNpemU7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobGluZS5wb2ludFNpemUpO1xyXG5cclxuICAgICAgICAvLyBmaWxsR2FwXHJcbiAgICAgICAgbGV0IHJldEZpbGxHYXAgPSBnZXRCb29sQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIFwiZmlsbEdhcFwiLFxyXG4gICAgICAgICAgICB5YW1sTGluZT8uZmlsbEdhcCxcclxuICAgICAgICAgICAgbnVtRGF0YXNldHMsXHJcbiAgICAgICAgICAgIGZhbHNlLFxyXG4gICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldEZpbGxHYXAgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldEZpbGxHYXA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpbmUuZmlsbEdhcCA9IHJldEZpbGxHYXA7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobGluZS5maWxsR2FwKTtcclxuXHJcbiAgICAgICAgLy8geUF4aXNMb2NhdGlvblxyXG4gICAgICAgIGxldCByZXRZQXhpc0xvY2F0aW9uID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIFwieUF4aXNMb2NhdGlvblwiLFxyXG4gICAgICAgICAgICB5YW1sTGluZT8ueUF4aXNMb2NhdGlvbixcclxuICAgICAgICAgICAgbnVtRGF0YXNldHMsXHJcbiAgICAgICAgICAgIFwibGVmdFwiLFxyXG4gICAgICAgICAgICB2YWxpZGF0ZVlBeGlzTG9jYXRpb24sXHJcbiAgICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0WUF4aXNMb2NhdGlvbiA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0WUF4aXNMb2NhdGlvbjsgLy8gZXJyb3JNZXNzYWdlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpbmUueUF4aXNMb2NhdGlvbiA9IHJldFlBeGlzTG9jYXRpb247XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobGluZS55QXhpc0xvY2F0aW9uKTtcclxuXHJcbiAgICAgICAgcmVuZGVySW5mby5saW5lLnB1c2gobGluZSk7XHJcbiAgICB9IC8vIGxpbmUgcmVsYXRlZCBwYXJhbWV0ZXJzXHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmxpbmUpO1xyXG5cclxuICAgIC8vIGJhciByZWxhdGVkIHBhcmFtZXRlcnNcclxuICAgIGZvciAobGV0IGJhcktleSBvZiB5YW1sQmFyS2V5cykge1xyXG4gICAgICAgIGxldCBiYXIgPSBuZXcgQmFySW5mbygpO1xyXG4gICAgICAgIGxldCB5YW1sQmFyID0geWFtbFtiYXJLZXldO1xyXG5cclxuICAgICAgICBsZXQga2V5c09mQmFySW5mbyA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKGJhcik7XHJcbiAgICAgICAgbGV0IGtleXNGb3VuZEluWUFNTCA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHlhbWxCYXIpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNPZkJhckluZm8pO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNGb3VuZEluWUFNTCk7XHJcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXNGb3VuZEluWUFNTCkge1xyXG4gICAgICAgICAgICBpZiAoIWtleXNPZkJhckluZm8uaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCInXCIgKyBrZXkgKyBcIicgaXMgbm90IGFuIGF2YWlsYWJsZSBrZXlcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCByZXRQYXJzZUNvbW1vbkNoYXJ0SW5mbyA9IHBhcnNlQ29tbW9uQ2hhcnRJbmZvKHlhbWxCYXIsIGJhcik7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXRQYXJzZUNvbW1vbkNoYXJ0SW5mbyA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0UGFyc2VDb21tb25DaGFydEluZm87XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBiYXJDb2xvclxyXG4gICAgICAgIGxldCByZXRCYXJDb2xvciA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxyXG4gICAgICAgICAgICBcImJhckNvbG9yXCIsXHJcbiAgICAgICAgICAgIHlhbWxCYXI/LmJhckNvbG9yLFxyXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcclxuICAgICAgICAgICAgXCJcIixcclxuICAgICAgICAgICAgdmFsaWRhdGVDb2xvcixcclxuICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXRCYXJDb2xvciA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0QmFyQ29sb3I7IC8vIGVycm9yTWVzc2FnZVxyXG4gICAgICAgIH1cclxuICAgICAgICBiYXIuYmFyQ29sb3IgPSByZXRCYXJDb2xvcjtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhiYXIuYmFyQ29sb3IpO1xyXG5cclxuICAgICAgICAvLyB5QXhpc0xvY2F0aW9uXHJcbiAgICAgICAgbGV0IHJldFlBeGlzTG9jYXRpb24gPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcclxuICAgICAgICAgICAgXCJ5QXhpc0xvY2F0aW9uXCIsXHJcbiAgICAgICAgICAgIHlhbWxCYXI/LnlBeGlzTG9jYXRpb24sXHJcbiAgICAgICAgICAgIG51bURhdGFzZXRzLFxyXG4gICAgICAgICAgICBcImxlZnRcIixcclxuICAgICAgICAgICAgdmFsaWRhdGVZQXhpc0xvY2F0aW9uLFxyXG4gICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldFlBeGlzTG9jYXRpb24gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldFlBeGlzTG9jYXRpb247IC8vIGVycm9yTWVzc2FnZVxyXG4gICAgICAgIH1cclxuICAgICAgICBiYXIueUF4aXNMb2NhdGlvbiA9IHJldFlBeGlzTG9jYXRpb247XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coYmFyLnlBeGlzTG9jYXRpb24pO1xyXG5cclxuICAgICAgICByZW5kZXJJbmZvLmJhci5wdXNoKGJhcik7XHJcbiAgICB9IC8vIGJhciByZWxhdGVkIHBhcmFtZXRlcnNcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uYmFyKTtcclxuXHJcbiAgICAvLyBwaWUgcmVsYXRlZCBwYXJhbWV0ZXJzXHJcbiAgICBmb3IgKGxldCBwaWVLZXkgb2YgeWFtbFBpZUtleXMpIHtcclxuICAgICAgICBsZXQgcGllID0gbmV3IFBpZUluZm8oKTtcclxuICAgICAgICBsZXQgeWFtbFBpZSA9IHlhbWxbcGllS2V5XTtcclxuXHJcbiAgICAgICAgbGV0IGtleXNPZlBpZUluZm8gPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyhwaWUpO1xyXG4gICAgICAgIGxldCBrZXlzRm91bmRJbllBTUwgPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyh5YW1sUGllKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzT2ZQaWVJbmZvKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzRm91bmRJbllBTUwpO1xyXG4gICAgICAgIGZvciAobGV0IGtleSBvZiBrZXlzRm91bmRJbllBTUwpIHtcclxuICAgICAgICAgICAgaWYgKCFrZXlzT2ZQaWVJbmZvLmluY2x1ZGVzKGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiJ1wiICsga2V5ICsgXCInIGlzIG5vdCBhbiBhdmFpbGFibGUga2V5XCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aXRsZVxyXG4gICAgICAgIHBpZS50aXRsZSA9IGdldFN0cmluZ0Zyb21JbnB1dCh5YW1sUGllPy50aXRsZSwgcGllLnRpdGxlKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhwaWUudGl0bGUpO1xyXG5cclxuICAgICAgICAvLyBkYXRhXHJcbiAgICAgICAgbGV0IHJldERhdGEgPSBnZXRTdHJpbmdBcnJheShcImRhdGFcIiwgeWFtbFBpZT8uZGF0YSk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXREYXRhID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXREYXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwaWUuZGF0YSA9IHJldERhdGE7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cocGllLmRhdGEpO1xyXG4gICAgICAgIGxldCBudW1EYXRhID0gcGllLmRhdGEubGVuZ3RoO1xyXG5cclxuICAgICAgICAvLyBkYXRhQ29sb3JcclxuICAgICAgICBsZXQgcmV0RGF0YUNvbG9yID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIFwiZGF0YUNvbG9yXCIsXHJcbiAgICAgICAgICAgIHlhbWxQaWU/LmRhdGFDb2xvcixcclxuICAgICAgICAgICAgbnVtRGF0YSxcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgdmFsaWRhdGVDb2xvcixcclxuICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXREYXRhQ29sb3IgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldERhdGFDb2xvcjsgLy8gZXJyb3JNZXNzYWdlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBpZS5kYXRhQ29sb3IgPSByZXREYXRhQ29sb3I7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cocGllLmRhdGFDb2xvcik7XHJcblxyXG4gICAgICAgIC8vIGRhdGFOYW1lXHJcbiAgICAgICAgbGV0IHJldERhdGFOYW1lID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIFwiZGF0YU5hbWVcIixcclxuICAgICAgICAgICAgeWFtbFBpZT8uZGF0YU5hbWUsXHJcbiAgICAgICAgICAgIG51bURhdGEsXHJcbiAgICAgICAgICAgIFwiXCIsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0RGF0YU5hbWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldERhdGFOYW1lOyAvLyBlcnJvck1lc3NhZ2VcclxuICAgICAgICB9XHJcbiAgICAgICAgcGllLmRhdGFOYW1lID0gcmV0RGF0YU5hbWU7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cocGllLmRhdGFOYW1lKTtcclxuXHJcbiAgICAgICAgLy8gbGFiZWxcclxuICAgICAgICBsZXQgcmV0TGFiZWwgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcclxuICAgICAgICAgICAgXCJsYWJlbFwiLFxyXG4gICAgICAgICAgICB5YW1sUGllPy5sYWJlbCxcclxuICAgICAgICAgICAgbnVtRGF0YSxcclxuICAgICAgICAgICAgXCJcIixcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXRMYWJlbCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0TGFiZWw7IC8vIGVycm9yTWVzc2FnZVxyXG4gICAgICAgIH1cclxuICAgICAgICBwaWUubGFiZWwgPSByZXRMYWJlbDtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhwaWUubGFiZWwpO1xyXG5cclxuICAgICAgICAvLyBoaWRlTGFiZWxMZXNzVGhhblxyXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbFBpZT8uaGlkZUxhYmVsTGVzc1RoYW4gPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgcGllLmhpZGVMYWJlbExlc3NUaGFuID0geWFtbFBpZS5oaWRlTGFiZWxMZXNzVGhhbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cocGllLmhpZGVMYWJlbExlc3NUaGFuKTtcclxuXHJcbiAgICAgICAgLy8gZXh0TGFiZWxcclxuICAgICAgICBsZXQgcmV0RXh0TGFiZWwgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcclxuICAgICAgICAgICAgXCJleHRMYWJlbFwiLFxyXG4gICAgICAgICAgICB5YW1sUGllPy5leHRMYWJlbCxcclxuICAgICAgICAgICAgbnVtRGF0YSxcclxuICAgICAgICAgICAgXCJcIixcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXRFeHRMYWJlbCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0RXh0TGFiZWw7IC8vIGVycm9yTWVzc2FnZVxyXG4gICAgICAgIH1cclxuICAgICAgICBwaWUuZXh0TGFiZWwgPSByZXRFeHRMYWJlbDtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhwaWUuZXh0TGFiZWwpO1xyXG5cclxuICAgICAgICAvLyBzaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsXHJcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sUGllPy5zaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgICAgICBwaWUuc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbCA9IHlhbWxQaWUuc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cocGllLnNob3dFeHRMYWJlbE9ubHlJZk5vTGFiZWwpO1xyXG5cclxuICAgICAgICAvLyByYXRpb0lubmVyUmFkaXVzXHJcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sUGllPy5yYXRpb0lubmVyUmFkaXVzID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgIHBpZS5yYXRpb0lubmVyUmFkaXVzID0geWFtbFBpZS5yYXRpb0lubmVyUmFkaXVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhwaWUucmF0aW9Jbm5lclJhZGl1cyk7XHJcblxyXG4gICAgICAgIC8vIHNob3dMZWdlbmRcclxuICAgICAgICBpZiAodHlwZW9mIHlhbWxQaWU/LnNob3dMZWdlbmQgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgICAgIHBpZS5zaG93TGVnZW5kID0geWFtbFBpZS5zaG93TGVnZW5kO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbGVnZW5kUG9zaXRpb25cclxuICAgICAgICBwaWUubGVnZW5kUG9zaXRpb24gPSBnZXRTdHJpbmdGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIHlhbWxQaWU/LmxlZ2VuZFBvc2l0aW9uLFxyXG4gICAgICAgICAgICBcInJpZ2h0XCJcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBsZWdlbmRPcmllbnRcclxuICAgICAgICBsZXQgZGVmYXVsdExlZ2VuZE9yaWVudGF0aW9uID0gXCJob3Jpem9udGFsXCI7XHJcbiAgICAgICAgaWYgKHBpZS5sZWdlbmRQb3NpdGlvbiA9PT0gXCJ0b3BcIiB8fCBwaWUubGVnZW5kUG9zaXRpb24gPT09IFwiYm90dG9tXCIpIHtcclxuICAgICAgICAgICAgZGVmYXVsdExlZ2VuZE9yaWVudGF0aW9uID0gXCJob3Jpem9udGFsXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgcGllLmxlZ2VuZFBvc2l0aW9uID09PSBcImxlZnRcIiB8fFxyXG4gICAgICAgICAgICBwaWUubGVnZW5kUG9zaXRpb24gPT09IFwicmlnaHRcIlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBkZWZhdWx0TGVnZW5kT3JpZW50YXRpb24gPSBcInZlcnRpY2FsXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZGVmYXVsdExlZ2VuZE9yaWVudGF0aW9uID0gXCJob3Jpem9udGFsXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBpZS5sZWdlbmRPcmllbnRhdGlvbiA9IGdldFN0cmluZ0Zyb21JbnB1dChcclxuICAgICAgICAgICAgeWFtbFBpZT8ubGVnZW5kT3JpZW50YXRpb24sXHJcbiAgICAgICAgICAgIGRlZmF1bHRMZWdlbmRPcmllbnRhdGlvblxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cocGllLmxlZ2VuZFBvc2l0aW9uKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhwaWUubGVnZW5kT3JpZW50YXRpb24pO1xyXG5cclxuICAgICAgICAvLyBsZWdlbmRCZ0NvbG9yXHJcbiAgICAgICAgcGllLmxlZ2VuZEJnQ29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIHlhbWxQaWU/LmxlZ2VuZEJnQ29sb3IsXHJcbiAgICAgICAgICAgIHBpZS5sZWdlbmRCZ0NvbG9yXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gbGVnZW5kQm9yZGVyQ29sb3JcclxuICAgICAgICBwaWUubGVnZW5kQm9yZGVyQ29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIHlhbWxQaWU/LmxlZ2VuZEJvcmRlckNvbG9yLFxyXG4gICAgICAgICAgICBwaWUubGVnZW5kQm9yZGVyQ29sb3JcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZW5kZXJJbmZvLnBpZS5wdXNoKHBpZSk7XHJcbiAgICB9IC8vIHBpZSByZWxhdGVkIHBhcmFtZXRlcnNcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ucGllKTtcclxuXHJcbiAgICAvLyBzdW1tYXJ5IHJlbGF0ZWQgcGFyYW1ldGVyc1xyXG4gICAgZm9yIChsZXQgc3VtbWFyeUtleSBvZiB5YW1sU3VtbWFyeUtleXMpIHtcclxuICAgICAgICBsZXQgc3VtbWFyeSA9IG5ldyBTdW1tYXJ5SW5mbygpO1xyXG4gICAgICAgIGxldCB5YW1sU3VtbWFyeSA9IHlhbWxbc3VtbWFyeUtleV07XHJcblxyXG4gICAgICAgIGxldCBrZXlzT2ZTdW1tYXJ5SW5mbyA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHN1bW1hcnkpO1xyXG4gICAgICAgIGxldCBrZXlzRm91bmRJbllBTUwgPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyh5YW1sU3VtbWFyeSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c09mU3VtbWFyeUluZm8pO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNGb3VuZEluWUFNTCk7XHJcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXNGb3VuZEluWUFNTCkge1xyXG4gICAgICAgICAgICBpZiAoIWtleXNPZlN1bW1hcnlJbmZvLmluY2x1ZGVzKGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiJ1wiICsga2V5ICsgXCInIGlzIG5vdCBhbiBhdmFpbGFibGUga2V5XCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0ZW1wbGF0ZVxyXG4gICAgICAgIHN1bW1hcnkudGVtcGxhdGUgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIHlhbWxTdW1tYXJ5Py50ZW1wbGF0ZSxcclxuICAgICAgICAgICAgc3VtbWFyeS50ZW1wbGF0ZVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIHN0eWxlXHJcbiAgICAgICAgc3VtbWFyeS5zdHlsZSA9IGdldFN0cmluZ0Zyb21JbnB1dCh5YW1sU3VtbWFyeT8uc3R5bGUsIHN1bW1hcnkuc3R5bGUpO1xyXG5cclxuICAgICAgICByZW5kZXJJbmZvLnN1bW1hcnkucHVzaChzdW1tYXJ5KTtcclxuICAgIH0gLy8gc3VtbWFyeSByZWxhdGVkIHBhcmFtZXRlcnNcclxuXHJcbiAgICAvLyBNb250aCByZWxhdGVkIHBhcmFtZXRlcnNcclxuICAgIGZvciAobGV0IG1vbnRoS2V5IG9mIHlhbWxNb250aEtleXMpIHtcclxuICAgICAgICBsZXQgbW9udGggPSBuZXcgTW9udGhJbmZvKCk7XHJcbiAgICAgICAgbGV0IHlhbWxNb250aCA9IHlhbWxbbW9udGhLZXldO1xyXG5cclxuICAgICAgICBsZXQga2V5c09mTW9udGhJbmZvID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MobW9udGgpO1xyXG4gICAgICAgIGxldCBrZXlzRm91bmRJbllBTUwgPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyh5YW1sTW9udGgpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNPZlN1bW1hcnlJbmZvKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzRm91bmRJbllBTUwpO1xyXG4gICAgICAgIGZvciAobGV0IGtleSBvZiBrZXlzRm91bmRJbllBTUwpIHtcclxuICAgICAgICAgICAgaWYgKCFrZXlzT2ZNb250aEluZm8uaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCInXCIgKyBrZXkgKyBcIicgaXMgbm90IGFuIGF2YWlsYWJsZSBrZXlcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG1vZGVcclxuICAgICAgICBtb250aC5tb2RlID0gZ2V0U3RyaW5nRnJvbUlucHV0KHlhbWxNb250aD8ubW9kZSwgbW9udGgubW9kZSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGgubW9kZSk7XHJcblxyXG4gICAgICAgIC8vIGRhdGFzZXRcclxuICAgICAgICBsZXQgcmV0RGF0YXNldCA9IGdldE51bWJlckFycmF5KFwiZGF0YXNldFwiLCB5YW1sTW9udGg/LmRhdGFzZXQpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0RGF0YXNldCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0RGF0YXNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJldERhdGFzZXQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIGluc2VydCB5IGRhdGFzZXQgZ2l2ZW5cclxuICAgICAgICAgICAgZm9yIChsZXQgcSBvZiBxdWVyaWVzKSB7XHJcbiAgICAgICAgICAgICAgICByZXREYXRhc2V0LnB1c2gocS5nZXRJZCgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBtb250aC5kYXRhc2V0ID0gcmV0RGF0YXNldDtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5kYXRhc2V0KTtcclxuICAgICAgICBsZXQgbnVtRGF0YXNldCA9IG1vbnRoLmRhdGFzZXQubGVuZ3RoO1xyXG5cclxuICAgICAgICAvLyBzdGFydFdlZWtPblxyXG4gICAgICAgIG1vbnRoLnN0YXJ0V2Vla09uID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxyXG4gICAgICAgICAgICB5YW1sTW9udGg/LnN0YXJ0V2Vla09uLFxyXG4gICAgICAgICAgICBtb250aC5zdGFydFdlZWtPblxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguc3RhcnRXZWVrT24pO1xyXG5cclxuICAgICAgICAvLyBzaG93Q2lyY2xlXHJcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sTW9udGg/LnNob3dDaXJjbGUgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgICAgIG1vbnRoLnNob3dDaXJjbGUgPSB5YW1sTW9udGguc2hvd0NpcmNsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguc2hvd0NpcmNsZSk7XHJcblxyXG4gICAgICAgIC8vIHRocmVzaG9sZFxyXG4gICAgICAgIGxldCByZXRUaHJlc2hvbGQgPSBnZXROdW1iZXJBcnJheShcInRocmVzaG9sZFwiLCB5YW1sTW9udGg/LnRocmVzaG9sZCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXRUaHJlc2hvbGQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldFRocmVzaG9sZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbW9udGgudGhyZXNob2xkID0gcmV0VGhyZXNob2xkO1xyXG4gICAgICAgIGlmIChtb250aC50aHJlc2hvbGQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZERhdGFzZXQgPSAwOyBpbmREYXRhc2V0IDwgbnVtRGF0YXNldDsgaW5kRGF0YXNldCsrKSB7XHJcbiAgICAgICAgICAgICAgICBtb250aC50aHJlc2hvbGQucHVzaCgwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobW9udGgudGhyZXNob2xkLmxlbmd0aCAhPT0gbW9udGguZGF0YXNldC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGgudGhyZXNob2xkKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguZGF0YXNldCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgICBcIlRoZSBudW1iZXIgb2YgaW5wdXRzIG9mIHRocmVzaG9sZCBhbmQgZGF0YXNldCBub3QgbWF0Y2hlZFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC50aHJlc2hvbGQpO1xyXG5cclxuICAgICAgICAvLyB5TWluXHJcbiAgICAgICAgbGV0IHJldFlNaW4gPSBnZXROdW1iZXJBcnJheShcInlNaW5cIiwgeWFtbE1vbnRoPy55TWluKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldFlNaW4gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldFlNaW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1vbnRoLnlNaW4gPSByZXRZTWluO1xyXG4gICAgICAgIGlmIChtb250aC55TWluLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmREYXRhc2V0ID0gMDsgaW5kRGF0YXNldCA8IG51bURhdGFzZXQ7IGluZERhdGFzZXQrKykge1xyXG4gICAgICAgICAgICAgICAgbW9udGgueU1pbi5wdXNoKG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtb250aC55TWluLmxlbmd0aCAhPT0gbW9udGguZGF0YXNldC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgICAgIFwiVGhlIG51bWJlciBvZiBpbnB1dHMgb2YgeU1pbiBhbmQgZGF0YXNldCBub3QgbWF0Y2hlZFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC55TWluKTtcclxuXHJcbiAgICAgICAgLy8geU1heFxyXG4gICAgICAgIGxldCByZXRZTWF4ID0gZ2V0TnVtYmVyQXJyYXkoXCJ5TWF4XCIsIHlhbWxNb250aD8ueU1heCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXRZTWF4ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXRZTWF4O1xyXG4gICAgICAgIH1cclxuICAgICAgICBtb250aC55TWF4ID0gcmV0WU1heDtcclxuICAgICAgICBpZiAobW9udGgueU1heC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kRGF0YXNldCA9IDA7IGluZERhdGFzZXQgPCBudW1EYXRhc2V0OyBpbmREYXRhc2V0KyspIHtcclxuICAgICAgICAgICAgICAgIG1vbnRoLnlNYXgucHVzaChudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobW9udGgueU1heC5sZW5ndGggIT09IG1vbnRoLmRhdGFzZXQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgICBcIlRoZSBudW1iZXIgb2YgaW5wdXRzIG9mIHlNaW4gYW5kIGRhdGFzZXQgbm90IG1hdGNoZWRcIjtcclxuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGgueU1heCk7XHJcblxyXG4gICAgICAgIC8vIGNvbG9yXHJcbiAgICAgICAgbW9udGguY29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoeWFtbE1vbnRoPy5jb2xvciwgbW9udGguY29sb3IpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLmNvbG9yKTtcclxuXHJcbiAgICAgICAgLy8gZGltTm90SW5Nb250aFxyXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbE1vbnRoPy5kaW1Ob3RJbk1vbnRoID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgICAgICBtb250aC5kaW1Ob3RJbk1vbnRoID0geWFtbE1vbnRoLmRpbU5vdEluTW9udGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLmRpbU5vdEluTW9udGgpO1xyXG5cclxuICAgICAgICAvLyBzaG93U3RyZWFrXHJcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sTW9udGg/LnNob3dTdHJlYWsgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgICAgIG1vbnRoLnNob3dTdHJlYWsgPSB5YW1sTW9udGguc2hvd1N0cmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguc2hvd1N0cmVhayk7XHJcblxyXG4gICAgICAgIC8vIHNob3dUb2RheVJpbmdcclxuICAgICAgICBpZiAodHlwZW9mIHlhbWxNb250aD8uc2hvd1RvZGF5UmluZyA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICAgICAgbW9udGguc2hvd1RvZGF5UmluZyA9IHlhbWxNb250aC5zaG93VG9kYXlSaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5zaG93VG9kYXlSaW5nKTtcclxuXHJcbiAgICAgICAgLy8gc2hvd1NlbGVjdGVkVmFsdWVcclxuICAgICAgICBpZiAodHlwZW9mIHlhbWxNb250aD8uc2hvd1NlbGVjdGVkVmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgICAgIG1vbnRoLnNob3dTZWxlY3RlZFZhbHVlID0geWFtbE1vbnRoLnNob3dTZWxlY3RlZFZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5zaG93U2VsZWN0ZWRWYWx1ZSk7XHJcblxyXG4gICAgICAgIC8vIHNob3dTZWxlY3RlZFJpbmdcclxuICAgICAgICBpZiAodHlwZW9mIHlhbWxNb250aD8uc2hvd1NlbGVjdGVkUmluZyA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICAgICAgbW9udGguc2hvd1NlbGVjdGVkUmluZyA9IHlhbWxNb250aC5zaG93U2VsZWN0ZWRSaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5zaG93U2VsZWN0ZWRSaW5nKTtcclxuXHJcbiAgICAgICAgLy8gY2lyY2xlQ29sb3JcclxuICAgICAgICBtb250aC5jaXJjbGVDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcclxuICAgICAgICAgICAgeWFtbE1vbnRoPy5jaXJjbGVDb2xvcixcclxuICAgICAgICAgICAgbW9udGguY2lyY2xlQ29sb3JcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLmNpcmNsZUNvbG9yKTtcclxuXHJcbiAgICAgICAgLy8gY2lyY2xlQ29sb3JCeVZhbHVlXHJcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sTW9udGg/LmNpcmNsZUNvbG9yQnlWYWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICAgICAgbW9udGguY2lyY2xlQ29sb3JCeVZhbHVlID0geWFtbE1vbnRoLmNpcmNsZUNvbG9yQnlWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguY2lyY2xlQ29sb3JCeVZhbHVlKTtcclxuXHJcbiAgICAgICAgLy8gaGVhZGVyWWVhckNvbG9yXHJcbiAgICAgICAgbW9udGguaGVhZGVyWWVhckNvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxyXG4gICAgICAgICAgICB5YW1sTW9udGg/LmhlYWRlclllYXJDb2xvcixcclxuICAgICAgICAgICAgbW9udGguaGVhZGVyWWVhckNvbG9yXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5oZWFkZXJZZWFyQ29sb3IpO1xyXG5cclxuICAgICAgICAvLyBoZWFkZXJNb250aENvbG9yXHJcbiAgICAgICAgbW9udGguaGVhZGVyTW9udGhDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcclxuICAgICAgICAgICAgeWFtbE1vbnRoPy5oZWFkZXJNb250aENvbG9yLFxyXG4gICAgICAgICAgICBtb250aC5oZWFkZXJNb250aENvbG9yXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5oZWFkZXJNb250aENvbG9yKTtcclxuXHJcbiAgICAgICAgLy8gZGl2aWRpbmdMaW5lQ29sb3JcclxuICAgICAgICBtb250aC5kaXZpZGluZ0xpbmVDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcclxuICAgICAgICAgICAgeWFtbE1vbnRoPy5kaXZpZGluZ0xpbmVDb2xvcixcclxuICAgICAgICAgICAgbW9udGguZGl2aWRpbmdMaW5lQ29sb3JcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLmRpdmlkaW5nTGluZUNvbG9yKTtcclxuXHJcbiAgICAgICAgLy8gdG9kYXlSaW5nQ29sb3JcclxuICAgICAgICBtb250aC50b2RheVJpbmdDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcclxuICAgICAgICAgICAgeWFtbE1vbnRoPy50b2RheVJpbmdDb2xvcixcclxuICAgICAgICAgICAgbW9udGgudG9kYXlSaW5nQ29sb3JcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnRvZGF5UmluZ0NvbG9yKTtcclxuXHJcbiAgICAgICAgLy8gc2VsZWN0ZWRSaW5nQ29sb3JcclxuICAgICAgICBtb250aC5zZWxlY3RlZFJpbmdDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcclxuICAgICAgICAgICAgeWFtbE1vbnRoPy5zZWxlY3RlZFJpbmdDb2xvcixcclxuICAgICAgICAgICAgbW9udGguc2VsZWN0ZWRSaW5nQ29sb3JcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnNlbGVjdGVkUmluZ0NvbG9yKTtcclxuXHJcbiAgICAgICAgLy8gaW5pdE1vbnRoXHJcbiAgICAgICAgbW9udGguaW5pdE1vbnRoID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxyXG4gICAgICAgICAgICB5YW1sTW9udGg/LmluaXRNb250aCxcclxuICAgICAgICAgICAgbW9udGguaW5pdE1vbnRoXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5pbml0TW9udGgpO1xyXG5cclxuICAgICAgICAvLyBzaG93QW5ub3RhdGlvblxyXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbE1vbnRoPy5zaG93QW5ub3RhdGlvbiA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICAgICAgbW9udGguc2hvd0Fubm90YXRpb24gPSB5YW1sTW9udGguc2hvd0Fubm90YXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnNob3dBbm5vdGF0aW9uKTtcclxuXHJcbiAgICAgICAgLy8gYW5ub3RhdGlvblxyXG4gICAgICAgIGxldCByZXRBbm5vdGF0aW9uID0gZ2V0U3RyaW5nQXJyYXkoXCJhbm5vdGF0aW9uXCIsIHlhbWxNb250aD8uYW5ub3RhdGlvbik7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXRBbm5vdGF0aW9uID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXRBbm5vdGF0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtb250aC5hbm5vdGF0aW9uID0gcmV0QW5ub3RhdGlvbjtcclxuICAgICAgICBpZiAobW9udGguYW5ub3RhdGlvbi5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kRGF0YXNldCA9IDA7IGluZERhdGFzZXQgPCBudW1EYXRhc2V0OyBpbmREYXRhc2V0KyspIHtcclxuICAgICAgICAgICAgICAgIG1vbnRoLmFubm90YXRpb24ucHVzaChudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobW9udGguYW5ub3RhdGlvbi5sZW5ndGggIT09IG1vbnRoLmRhdGFzZXQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgICBcIlRoZSBudW1iZXIgb2YgaW5wdXRzIG9mIGFubm90YXRpb24gYW5kIGRhdGFzZXQgbm90IG1hdGNoZWRcIjtcclxuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguYW5ub3RhdGlvbik7XHJcblxyXG4gICAgICAgIC8vIHNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzXHJcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sTW9udGg/LnNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgICAgICBtb250aC5zaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0cyA9XHJcbiAgICAgICAgICAgICAgICB5YW1sTW9udGguc2hvd0Fubm90YXRpb25PZkFsbFRhcmdldHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzKTtcclxuXHJcbiAgICAgICAgcmVuZGVySW5mby5tb250aC5wdXNoKG1vbnRoKTtcclxuICAgIH0gLy8gTW9udGggcmVsYXRlZCBwYXJhbWV0ZXJzXHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLm1vbnRoKTtcclxuXHJcbiAgICAvLyBIZWF0bWFwIHJlbGF0ZWQgcGFyYW1ldGVyc1xyXG4gICAgZm9yIChsZXQgaGVhdG1hcEtleSBvZiB5YW1sSGVhdG1hcEtleXMpIHtcclxuICAgICAgICBsZXQgaGVhdG1hcCA9IG5ldyBIZWF0bWFwSW5mbygpO1xyXG4gICAgICAgIGxldCB5YW1sSGVhdG1hcCA9IHlhbWxbaGVhdG1hcEtleV07XHJcblxyXG4gICAgICAgIGxldCBrZXlzT2ZIZWF0bWFwSW5mbyA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKGhlYXRtYXApO1xyXG4gICAgICAgIGxldCBrZXlzRm91bmRJbllBTUwgPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyh5YW1sSGVhdG1hcCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c09mSGVhdG1hcEluZm8pO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNGb3VuZEluWUFNTCk7XHJcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXNGb3VuZEluWUFNTCkge1xyXG4gICAgICAgICAgICBpZiAoIWtleXNPZkhlYXRtYXBJbmZvLmluY2x1ZGVzKGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiJ1wiICsga2V5ICsgXCInIGlzIG5vdCBhbiBhdmFpbGFibGUga2V5XCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXJJbmZvLmhlYXRtYXAucHVzaChoZWF0bWFwKTtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uaGVhdG1hcCk7XHJcblxyXG4gICAgLy8gQnVsbGV0IHJlbGF0ZWQgcGFyYW1ldGVyc1xyXG4gICAgZm9yIChsZXQgYnVsbGV0S2V5IG9mIHlhbWxCdWxsZXRLZXlzKSB7XHJcbiAgICAgICAgbGV0IGJ1bGxldCA9IG5ldyBCdWxsZXRJbmZvKCk7XHJcbiAgICAgICAgbGV0IHlhbWxCdWxsZXQgPSB5YW1sW2J1bGxldEtleV07XHJcblxyXG4gICAgICAgIGxldCBrZXlzT2ZCdWxsZXRJbmZvID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoYnVsbGV0KTtcclxuICAgICAgICBsZXQga2V5c0ZvdW5kSW5ZQU1MID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoeWFtbEJ1bGxldCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c09mU3VtbWFyeUluZm8pO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNGb3VuZEluWUFNTCk7XHJcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXNGb3VuZEluWUFNTCkge1xyXG4gICAgICAgICAgICBpZiAoIWtleXNPZkJ1bGxldEluZm8uaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCInXCIgKyBrZXkgKyBcIicgaXMgbm90IGFuIGF2YWlsYWJsZSBrZXlcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRpdGxlXHJcbiAgICAgICAgYnVsbGV0LnRpdGxlID0gZ2V0U3RyaW5nRnJvbUlucHV0KHlhbWxCdWxsZXQ/LnRpdGxlLCBidWxsZXQudGl0bGUpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGJ1bGxldC50aXRsZSk7XHJcblxyXG4gICAgICAgIC8vIGRhdGFzZXRcclxuICAgICAgICBidWxsZXQuZGF0YXNldCA9IGdldFN0cmluZ0Zyb21JbnB1dChcclxuICAgICAgICAgICAgeWFtbEJ1bGxldD8uZGF0YXNldCxcclxuICAgICAgICAgICAgYnVsbGV0LmRhdGFzZXRcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGJ1bGxldC5kYXRhc2V0KTtcclxuXHJcbiAgICAgICAgLy8gb3JpZW50YXRpb25cclxuICAgICAgICBidWxsZXQub3JpZW50YXRpb24gPSBnZXRTdHJpbmdGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIHlhbWxCdWxsZXQ/Lm9yaWVudGF0aW9uLFxyXG4gICAgICAgICAgICBidWxsZXQub3JpZW50YXRpb25cclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGJ1bGxldC5vcmllbnRhdGlvbik7XHJcblxyXG4gICAgICAgIC8vIHJhbmdlXHJcbiAgICAgICAgbGV0IHJldFJhbmdlID0gZ2V0TnVtYmVyQXJyYXkoXCJyYW5nZVwiLCB5YW1sQnVsbGV0Py5yYW5nZSk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXRSYW5nZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0UmFuZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCByYW5nZSA9IHJldFJhbmdlIGFzIEFycmF5PG51bWJlcj47XHJcbiAgICAgICAgLy8gQ2hlY2sgdGhlIHZhbHVlIGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZ1xyXG4gICAgICAgIC8vIENoZWNrIHRoZSB2YWx1ZSBpcyBub3QgbmVnYXRpdmVcclxuICAgICAgICBpZiAocmFuZ2UubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIGlmIChyYW5nZVswXSA8IDApIHtcclxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiTmVnYXRpdmUgcmFuZ2UgdmFsdWUgaXMgbm90IGFsbG93ZWRcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHJhbmdlLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgbGV0IGxhc3RCb3VuZCA9IHJhbmdlWzBdO1xyXG4gICAgICAgICAgICBpZiAobGFzdEJvdW5kIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJOZWdhdGl2ZSByYW5nZSB2YWx1ZSBpcyBub3QgYWxsb3dlZFwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDE7IGluZCA8IHJhbmdlLmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2VbaW5kXSA8PSBsYXN0Qm91bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVmFsdWVzIGluIHBhcmFtZXRlciAncmFuZ2UnIHNob3VsZCBiZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmdcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkVtcHR5IHJhbmdlIGlzIG5vdCBhbGxvd2VkXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJ1bGxldC5yYW5nZSA9IHJhbmdlO1xyXG4gICAgICAgIGxldCBudW1SYW5nZSA9IHJhbmdlLmxlbmd0aDtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmJ1bGxldC5yYW5nZSk7XHJcblxyXG4gICAgICAgIC8vIHJhbmdlIGNvbG9yXHJcbiAgICAgICAgbGV0IHJldFJhbmdlQ29sb3IgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcclxuICAgICAgICAgICAgXCJyYW5nZUNvbG9yXCIsXHJcbiAgICAgICAgICAgIHlhbWxCdWxsZXQ/LnJhbmdlQ29sb3IsXHJcbiAgICAgICAgICAgIG51bVJhbmdlLFxyXG4gICAgICAgICAgICBcIlwiLFxyXG4gICAgICAgICAgICB2YWxpZGF0ZUNvbG9yLFxyXG4gICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldFJhbmdlQ29sb3IgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldFJhbmdlQ29sb3I7IC8vIGVycm9yTWVzc2FnZVxyXG4gICAgICAgIH1cclxuICAgICAgICBidWxsZXQucmFuZ2VDb2xvciA9IHJldFJhbmdlQ29sb3I7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coYnVsbGV0LnJhbmdlQ29sb3IpO1xyXG5cclxuICAgICAgICAvLyBhY3R1YWwgdmFsdWUsIGNhbiBwb3NzZXNzIHRlbXBsYXRlIHZhcmlhYmxlXHJcbiAgICAgICAgYnVsbGV0LnZhbHVlID0gZ2V0U3RyaW5nRnJvbUlucHV0KHlhbWxCdWxsZXQ/LnZhbHVlLCBidWxsZXQudmFsdWUpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGJ1bGxldC52YWx1ZSk7XHJcblxyXG4gICAgICAgIC8vIHZhbHVlIHVuaXRcclxuICAgICAgICBidWxsZXQudmFsdWVVbml0ID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxyXG4gICAgICAgICAgICB5YW1sQnVsbGV0Py52YWx1ZVVuaXQsXHJcbiAgICAgICAgICAgIGJ1bGxldC52YWx1ZVVuaXRcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGJ1bGxldC52YWx1ZVVuaXQpO1xyXG5cclxuICAgICAgICAvLyB2YWx1ZSBjb2xvclxyXG4gICAgICAgIGJ1bGxldC52YWx1ZUNvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxyXG4gICAgICAgICAgICB5YW1sQnVsbGV0Py52YWx1ZUNvbG9yLFxyXG4gICAgICAgICAgICBidWxsZXQudmFsdWVDb2xvclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coYnVsbGV0LnZhbHVlQ29sb3IpO1xyXG5cclxuICAgICAgICAvLyBzaG93IG1hcmtcclxuICAgICAgICBpZiAodHlwZW9mIHlhbWxCdWxsZXQ/LnNob3dNYXJrZXIgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgICAgIGJ1bGxldC5zaG93TWFya2VyID0geWFtbEJ1bGxldC5zaG93TWFya2VyO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhidWxsZXQuc2hvd01hcmspO1xyXG5cclxuICAgICAgICAvLyBtYXJrIHZhbHVlXHJcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sQnVsbGV0Py5tYXJrZXJWYWx1ZSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICBidWxsZXQubWFya2VyVmFsdWUgPSB5YW1sQnVsbGV0Lm1hcmtlclZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhidWxsZXQubWFya1ZhbHVlKTtcclxuXHJcbiAgICAgICAgLy8gbWFyayBjb2xvclxyXG4gICAgICAgIGJ1bGxldC5tYXJrZXJDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcclxuICAgICAgICAgICAgeWFtbEJ1bGxldD8ubWFya2VyQ29sb3IsXHJcbiAgICAgICAgICAgIGJ1bGxldC5tYXJrZXJDb2xvclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coYnVsbGV0Lm1hcmtWYWx1ZSk7XHJcblxyXG4gICAgICAgIHJlbmRlckluZm8uYnVsbGV0LnB1c2goYnVsbGV0KTtcclxuICAgIH0gLy8gQnVsbGV0IHJlbGF0ZWQgcGFyYW1ldGVyc1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5idWxsZXQpO1xyXG5cclxuICAgIHJldHVybiByZW5kZXJJbmZvO1xyXG59XHJcbiIsImltcG9ydCB7IENhY2hlZE1ldGFkYXRhLCBURmlsZSwgbm9ybWFsaXplUGF0aCB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQge1xyXG4gICAgRGF0YU1hcCxcclxuICAgIFF1ZXJ5LFxyXG4gICAgUmVuZGVySW5mbyxcclxuICAgIFhWYWx1ZU1hcCxcclxuICAgIFF1ZXJ5VmFsdWVQYWlyLFxyXG4gICAgVGFibGVEYXRhLFxyXG4gICAgU2VhcmNoVHlwZSxcclxuICAgIFZhbHVlVHlwZSxcclxufSBmcm9tIFwiLi9kYXRhXCI7XHJcbmltcG9ydCAqIGFzIGhlbHBlciBmcm9tIFwiLi9oZWxwZXJcIjtcclxuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSBcIm1vbWVudFwiO1xyXG5cclxuLy8gcmVmOiBodHRwczovL3d3dy5yYXBpZHRhYmxlcy5jb20vY29kZS90ZXh0L3VuaWNvZGUtY2hhcmFjdGVycy5odG1sXHJcbmNvbnN0IEN1cnJlbmN5Q29kZXMgPSBcIlxcdTAwMjRcXHUyMEFDXFx1MDBBM1xcdTAwQTVcXHUwMEEyXFx1MjBCOVxcdTIwQThcXHUyMEIxXFx1MjBBOVxcdTBFM0ZcXHUyMEFCXFx1MjBBQVwiO1xyXG5jb25zdCBBbHBoYWJldENvZGVzID0gXCJcXHUwM0IxLVxcdTAzQzlcXHUwMzkxLVxcdTAzQTlcIjtcclxuY29uc3QgSW50ZWxsZWN0dWFsUHJvcGVydHlDb2RlcyA9IFwiXFx1MDBBOVxcdTAwQUVcXHUyMTE3XFx1MjEyMlxcdTIxMjBcIjtcclxuY29uc3QgQ0pLQ29kZXMgPSBcIlxcdTRFMDAtXFx1OUZGRlxcdTM0MDAtXFx1NERCRlxcdTMwMDBcXHUzMDAxLVxcdTMwM0ZcIjtcclxuY29uc3QgV29yZENoYXJhY3RlcnMgPSBcIlxcXFx3XCIgKyBDdXJyZW5jeUNvZGVzICsgQWxwaGFiZXRDb2RlcyArIEludGVsbGVjdHVhbFByb3BlcnR5Q29kZXMgKyBDSktDb2RlcztcclxuXHJcbi8vIGZpbGVCYXNlTmFtZSBpcyBhIHN0cmluZyBjb250YWlucyBkYXRlRm9ybWF0IG9ubHlcclxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVGcm9tRmlsZW5hbWUoXHJcbiAgICBmaWxlOiBURmlsZSxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cclxuKTogTW9tZW50IHtcclxuICAgIC8vIGNvbnNvbGUubG9nKGBnZXREYXRlRnJvbUZpbGVuYW1lOiAke2ZpbGUubmFtZX1gKTtcclxuICAgIC8vIEdldCBkYXRlIGZvcm0gZmlsZUJhc2VOYW1lXHJcblxyXG4gICAgbGV0IGZpbGVCYXNlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgbGV0IGRhdGVTdHJpbmcgPSBoZWxwZXIuZ2V0RGF0ZVN0cmluZ0Zyb21JbnB1dFN0cmluZyhcclxuICAgICAgICBmaWxlQmFzZU5hbWUsXHJcbiAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0UHJlZml4LFxyXG4gICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFN1ZmZpeFxyXG4gICAgKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGRhdGVTdHJpbmcpO1xyXG5cclxuICAgIGxldCBmaWxlRGF0ZSA9IGhlbHBlci5zdHJUb0RhdGUoZGF0ZVN0cmluZywgcmVuZGVySW5mby5kYXRlRm9ybWF0KTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGZpbGVEYXRlKTtcclxuXHJcbiAgICByZXR1cm4gZmlsZURhdGU7XHJcbn1cclxuXHJcbi8vIE5vdCBzdXBwb3J0IG11bHRpcGxlIHRhcmdldHNcclxuLy8gSW4gZm9ybSAna2V5OiB2YWx1ZScsIHRhcmdldCB1c2VkIHRvIGlkZW50aWZ5ICdmcm9udG1hdHRlciBrZXknXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlRnJvbUZyb250bWF0dGVyKFxyXG4gICAgZmlsZUNhY2hlOiBDYWNoZWRNZXRhZGF0YSxcclxuICAgIHF1ZXJ5OiBRdWVyeSxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cclxuKTogTW9tZW50IHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiZ2V0RGF0ZUZyb21Gcm9udG1hdHRlclwiKTtcclxuICAgIC8vIEdldCBkYXRlIGZyb20gJ2Zyb250TWF0dGVyS2V5OiBkYXRlJ1xyXG5cclxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcclxuXHJcbiAgICBsZXQgZnJvbnRNYXR0ZXIgPSBmaWxlQ2FjaGUuZnJvbnRtYXR0ZXI7XHJcbiAgICBpZiAoZnJvbnRNYXR0ZXIpIHtcclxuICAgICAgICBpZiAoaGVscGVyLmRlZXBWYWx1ZShmcm9udE1hdHRlciwgcXVlcnkuZ2V0VGFyZ2V0KCkpKSB7XHJcbiAgICAgICAgICAgIGxldCBzdHJEYXRlID0gaGVscGVyLmRlZXBWYWx1ZShmcm9udE1hdHRlciwgcXVlcnkuZ2V0VGFyZ2V0KCkpO1xyXG5cclxuICAgICAgICAgICAgLy8gV2Ugb25seSBzdXBwb3J0IHNpbmdsZSB2YWx1ZSBmb3Igbm93XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RyRGF0ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgc3RyRGF0ZSA9IGhlbHBlci5nZXREYXRlU3RyaW5nRnJvbUlucHV0U3RyaW5nKFxyXG4gICAgICAgICAgICAgICAgICAgIHN0ckRhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0UHJlZml4LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFN1ZmZpeFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkYXRlID0gaGVscGVyLnN0clRvRGF0ZShzdHJEYXRlLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGU7XHJcbn1cclxuXHJcbi8vIGhlbHBlciBmdW5jdGlvblxyXG4vLyBzdHJSZWdleCBtdXN0IGhhdmUgbmFtZSBncm91cCAndmFsdWUnXHJcbi8vIE5hbWVkIGdyb3VwICd2YWx1ZScgY291bGQgYmUgcHJvdmlkZWQgZnJvbSB1c2VycyBvciBwbHVnaW5cclxuZnVuY3Rpb24gZXh0cmFjdERhdGVVc2luZ1JlZ2V4V2l0aFZhbHVlKFxyXG4gICAgdGV4dDogc3RyaW5nLFxyXG4gICAgc3RyUmVnZXg6IHN0cmluZyxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cclxuKTogTW9tZW50IHtcclxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcclxuXHJcbiAgICBsZXQgcmVnZXggPSBuZXcgUmVnRXhwKHN0clJlZ2V4LCBcImdtXCIpO1xyXG4gICAgbGV0IG1hdGNoO1xyXG4gICAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWModGV4dCkpKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobWF0Y2gpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdHlwZW9mIG1hdGNoLmdyb3VwcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxyXG4gICAgICAgICAgICB0eXBlb2YgbWF0Y2guZ3JvdXBzLnZhbHVlICE9PSBcInVuZGVmaW5lZFwiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIG11c3QgaGF2ZSBncm91cCBuYW1lICd2YWx1ZSdcclxuICAgICAgICAgICAgbGV0IHN0ckRhdGUgPSBtYXRjaC5ncm91cHMudmFsdWUudHJpbSgpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhzdHJEYXRlKTtcclxuXHJcbiAgICAgICAgICAgIHN0ckRhdGUgPSBoZWxwZXIuZ2V0RGF0ZVN0cmluZ0Zyb21JbnB1dFN0cmluZyhcclxuICAgICAgICAgICAgICAgIHN0ckRhdGUsXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRQcmVmaXgsXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRTdWZmaXhcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGRhdGUgPSBoZWxwZXIuc3RyVG9EYXRlKHN0ckRhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCk7XHJcbiAgICAgICAgICAgIGlmIChkYXRlLmlzVmFsaWQoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGU7XHJcbn1cclxuXHJcbi8vIE5vdCBzdXBwb3J0IG11bHRpcGxlIHRhcmdldHNcclxuLy8gSW4gZm9ybSAna2V5OiB2YWx1ZScsIG5hbWUgZ3JvdXAgJ3ZhbHVlJyBmcm9tIHBsdWdpbiwgbm90IGZyb20gdXNlcnNcclxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVGcm9tVGFnKFxyXG4gICAgY29udGVudDogc3RyaW5nLFxyXG4gICAgcXVlcnk6IFF1ZXJ5LFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xyXG4pOiBNb21lbnQge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJnZXREYXRlRnJvbVRhZ1wiKTtcclxuICAgIC8vIEdldCBkYXRlIGZyb20gJyN0YWdOYW1lOiBkYXRlJ1xyXG4gICAgLy8gSW5saW5lIHZhbHVlLWF0dGFjaGVkIHRhZyBvbmx5XHJcblxyXG4gICAgbGV0IGRhdGUgPSB3aW5kb3cubW9tZW50KFwiXCIpO1xyXG5cclxuICAgIGxldCB0YWdOYW1lID0gcXVlcnkuZ2V0VGFyZ2V0KCk7XHJcbiAgICBpZiAocXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCkpIHtcclxuICAgICAgICB0YWdOYW1lID0gcXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCk7IC8vIHVzZSBwYXJlbnQgdGFnIG5hbWUgZm9yIG11bHRpcGxlIHZhbHVlc1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2codGFnTmFtZSk7XHJcblxyXG4gICAgbGV0IHN0clJlZ2V4ID1cclxuICAgICAgICBcIihefFxcXFxzKSNcIiArXHJcbiAgICAgICAgdGFnTmFtZSArXHJcbiAgICAgICAgXCIoXFxcXC9bXFxcXHctXSspKig6KD88dmFsdWU+W1xcXFxkXFxcXC5cXFxcLy1dKilbYS16QS1aXSopPyhbXFxcXC4hLFxcXFw/O34tXSopPyhcXFxcc3wkKVwiO1xyXG4gICAgLy8gY29uc29sZS5sb2coc3RyUmVnZXgpO1xyXG5cclxuICAgIHJldHVybiBleHRyYWN0RGF0ZVVzaW5nUmVnZXhXaXRoVmFsdWUoY29udGVudCwgc3RyUmVnZXgsIHJlbmRlckluZm8pO1xyXG59XHJcblxyXG4vLyBOb3Qgc3VwcG9ydCBtdWx0aXBsZSB0YXJnZXRzXHJcbi8vIEluIGZvcm0gJ3JlZ2V4IHdpdGggdmFsdWUnLCBuYW1lIGdyb3VwICd2YWx1ZScgZnJvbSB1c2Vyc1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZUZyb21UZXh0KFxyXG4gICAgY29udGVudDogc3RyaW5nLFxyXG4gICAgcXVlcnk6IFF1ZXJ5LFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xyXG4pOiBNb21lbnQge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJnZXREYXRlRnJvbVRleHRcIik7XHJcbiAgICAvLyBHZXQgZGF0ZSBmcm9tIHRleHQgdXNpbmcgcmVnZXggd2l0aCB2YWx1ZVxyXG5cclxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcclxuXHJcbiAgICBsZXQgc3RyUmVnZXggPSBxdWVyeS5nZXRUYXJnZXQoKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHN0clRleHRSZWdleCk7XHJcblxyXG4gICAgcmV0dXJuIGV4dHJhY3REYXRlVXNpbmdSZWdleFdpdGhWYWx1ZShjb250ZW50LCBzdHJSZWdleCwgcmVuZGVySW5mbyk7XHJcbn1cclxuXHJcbi8vIE5vdCBzdXBwb3J0IG11bHRpcGxlIHRhcmdldHNcclxuLy8gSW4gZm9ybSAna2V5Ojp2YWx1ZScsIG5hbWVkIGdyb3VwICd2YWx1ZScgZnJvbSBwbHVnaW5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVGcm9tRHZGaWVsZChcclxuICAgIGNvbnRlbnQ6IHN0cmluZyxcclxuICAgIHF1ZXJ5OiBRdWVyeSxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cclxuKTogTW9tZW50IHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiZ2V0RGF0ZUZyb21EdkZpZWxkXCIpO1xyXG4gICAgLy8gR2V0IGRhdGUgZm9ybSAndGFyZ2V0TmFtZTo6IGRhdGUnXHJcblxyXG4gICAgbGV0IGRhdGUgPSB3aW5kb3cubW9tZW50KFwiXCIpO1xyXG5cclxuICAgIGxldCBkdlRhcmdldCA9IHF1ZXJ5LmdldFRhcmdldCgpO1xyXG4gICAgaWYgKHF1ZXJ5LmdldFBhcmVudFRhcmdldCgpKSB7XHJcbiAgICAgICAgZHZUYXJnZXQgPSBxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKTsgLy8gdXNlIHBhcmVudCB0YWcgbmFtZSBmb3IgbXVsdGlwbGUgdmFsdWVzXHJcbiAgICB9XHJcbiAgICAvLyBEYXRhdmlldyBhc2sgdXNlciB0byBhZGQgZGFzaGVzIGZvciBzcGFjZXMgYXMgc2VhcmNoIHRhcmdldFxyXG4gICAgLy8gU28gYSBkYXNoIG1heSBzdGFuZHMgZm9yIGEgcmVhbCBkYXNoIG9yIGEgc3BhY2VcclxuICAgIGR2VGFyZ2V0ID0gZHZUYXJnZXQucmVwbGFjZShcIi1cIiwgXCJbXFxcXHNcXFxcLV1cIik7XHJcblxyXG4gICAgLy8gVGVzdCB0aGlzIGluIFJlZ2V4MTAxXHJcbiAgICAvLyByZW1lbWJlciAnXFxzJyBpbmNsdWRlcyBuZXcgbGluZVxyXG4gICAgLy8gKF58IHxcXHQpXFwqezAsMn1kdlRhcmdldFxcKnswLDJ9KDo6WyB8XFx0XSooPzx2YWx1ZT5bXFxkXFwuXFwvXFwtXFx3LEA7IFxcdDpdKikpKFxccj9cXG58XFxyfCQpXHJcbiAgICBsZXQgc3RyUmVnZXggPVxyXG4gICAgICAgIFwiKF58IHxcXFxcdClcXFxcKnswLDJ9XCIgK1xyXG4gICAgICAgIGR2VGFyZ2V0ICtcclxuICAgICAgICBcIlxcXFwqezAsMn0oOjpbIHxcXFxcdF0qKD88dmFsdWU+W1xcXFxkXFxcXC5cXFxcL1xcXFwtXFxcXHcsQDsgXFxcXHQ6XSopKShcXFxcclxcXFw/XFxcXG58XFxcXHJ8JClcIjtcclxuICAgIC8vIGNvbnNvbGUubG9nKHN0clJlZ2V4KTtcclxuXHJcbiAgICByZXR1cm4gZXh0cmFjdERhdGVVc2luZ1JlZ2V4V2l0aFZhbHVlKGNvbnRlbnQsIHN0clJlZ2V4LCByZW5kZXJJbmZvKTtcclxufVxyXG5cclxuLy8gTm90IHN1cHBvcnQgbXVsdGlwbGUgdGFyZ2V0c1xyXG4vLyBJbiBmb3JtICdyZWdleCB3aXRoIHZhbHVlJywgbmFtZSBncm91cCAndmFsdWUnIGZyb20gdXNlcnNcclxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVGcm9tV2lraShcclxuICAgIGZpbGVDYWNoZTogQ2FjaGVkTWV0YWRhdGEsXHJcbiAgICBxdWVyeTogUXVlcnksXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXHJcbik6IE1vbWVudCB7XHJcbiAgICAvL2NvbnNvbGUubG9nKFwiZ2V0RGF0ZUZyb21XaWtpXCIpO1xyXG4gICAgLy8gR2V0IGRhdGUgZnJvbSAnW1tyZWdleCB3aXRoIHZhbHVlXV0nXHJcblxyXG4gICAgbGV0IGRhdGUgPSB3aW5kb3cubW9tZW50KFwiXCIpO1xyXG5cclxuICAgIGxldCBsaW5rcyA9IGZpbGVDYWNoZS5saW5rcztcclxuICAgIGlmICghbGlua3MpIHJldHVybiBkYXRlO1xyXG5cclxuICAgIGxldCBzZWFyY2hUYXJnZXQgPSBxdWVyeS5nZXRUYXJnZXQoKTtcclxuICAgIGxldCBzZWFyY2hUeXBlID0gcXVlcnkuZ2V0VHlwZSgpO1xyXG5cclxuICAgIGZvciAobGV0IGxpbmsgb2YgbGlua3MpIHtcclxuICAgICAgICBpZiAoIWxpbmspIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICBsZXQgd2lraVRleHQgPSBcIlwiO1xyXG4gICAgICAgIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLldpa2kpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmsuZGlzcGxheVRleHQpIHtcclxuICAgICAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5kaXNwbGF5VGV4dDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5saW5rO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLldpa2lMaW5rKSB7XHJcbiAgICAgICAgICAgIC8vIHdpa2kubGluayBwb2ludCB0byBhIGZpbGUgbmFtZVxyXG4gICAgICAgICAgICAvLyBhIGNvbG9uIGlzIG5vdCBhbGxvd2VkIGJlIGluIGZpbGUgbmFtZVxyXG4gICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsubGluaztcclxuICAgICAgICB9IGVsc2UgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuV2lraURpc3BsYXkpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmsuZGlzcGxheVRleHQpIHtcclxuICAgICAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5kaXNwbGF5VGV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChsaW5rLmRpc3BsYXlUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsuZGlzcGxheVRleHQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsubGluaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB3aWtpVGV4dCA9IHdpa2lUZXh0LnRyaW0oKTtcclxuXHJcbiAgICAgICAgbGV0IHN0clJlZ2V4ID0gXCJeXCIgKyBzZWFyY2hUYXJnZXQgKyBcIiRcIjtcclxuICAgICAgICByZXR1cm4gZXh0cmFjdERhdGVVc2luZ1JlZ2V4V2l0aFZhbHVlKHdpa2lUZXh0LCBzdHJSZWdleCwgcmVuZGVySW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGU7XHJcbn1cclxuXHJcbi8vIE5vdCBzdXBwb3J0IG11bHRpcGxlIHRhcmdldHNcclxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVGcm9tRmlsZU1ldGEoXHJcbiAgICBmaWxlOiBURmlsZSxcclxuICAgIHF1ZXJ5OiBRdWVyeSxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cclxuKTogTW9tZW50IHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiZ2V0RGF0ZUZyb21GaWxlTWV0YVwiKTtcclxuICAgIC8vIEdldCBkYXRlIGZyb20gY0RhdGUsIG1EYXRlIG9yIGJhc2VGaWxlTmFtZVxyXG5cclxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcclxuXHJcbiAgICBpZiAoZmlsZSAmJiBmaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmaWxlLnN0YXQpO1xyXG5cclxuICAgICAgICBsZXQgdGFyZ2V0ID0gcXVlcnkuZ2V0VGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gXCJjRGF0ZVwiKSB7XHJcbiAgICAgICAgICAgIGxldCBjdGltZSA9IGZpbGUuc3RhdC5jdGltZTsgLy8gdW5peCB0aW1lXHJcbiAgICAgICAgICAgIGRhdGUgPSBoZWxwZXIuZ2V0RGF0ZUZyb21Vbml4VGltZShjdGltZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJtRGF0ZVwiKSB7XHJcbiAgICAgICAgICAgIGxldCBtdGltZSA9IGZpbGUuc3RhdC5tdGltZTsgLy8gdW5peCB0aW1lXHJcbiAgICAgICAgICAgIGRhdGUgPSBoZWxwZXIuZ2V0RGF0ZUZyb21Vbml4VGltZShtdGltZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJuYW1lXCIpIHtcclxuICAgICAgICAgICAgZGF0ZSA9IGdldERhdGVGcm9tRmlsZW5hbWUoZmlsZSwgcmVuZGVySW5mbyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbnNvbGUubG9nKGRhdGUpO1xyXG4gICAgcmV0dXJuIGRhdGU7XHJcbn1cclxuXHJcbi8vIE5vdCBzdXBwb3J0IG11bHRpcGxlIHRhcmdldHNcclxuLy8gSW4gZm9ybSAncmVnZXggd2l0aCB2YWx1ZScsIG5hbWUgZ3JvdXAgJ3ZhbHVlJyBmcm9tIHVzZXJzXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlRnJvbVRhc2soXHJcbiAgICBjb250ZW50OiBzdHJpbmcsXHJcbiAgICBxdWVyeTogUXVlcnksXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXHJcbik6IE1vbWVudCB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcImdldERhdGVGcm9tVGFza1wiKTtcclxuICAgIC8vIEdldCBkYXRlIGZyb20gJy0gWyBdIHJlZ2V4IHdpdGggdmFsdWUnIG9yICctIFt4XSByZWdleCB3aXRoIHZhbHVlJ1xyXG5cclxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcclxuICAgIGxldCBzZWFyY2hUeXBlID0gcXVlcnkuZ2V0VHlwZSgpO1xyXG4gICAgLy8gY29uc29sZS5sb2coc2VhcmNoVHlwZSk7XHJcblxyXG4gICAgbGV0IHN0clJlZ2V4ID0gcXVlcnkuZ2V0VGFyZ2V0KCk7XHJcbiAgICBpZiAoc2VhcmNoVHlwZSA9PT0gU2VhcmNoVHlwZS5UYXNrKSB7XHJcbiAgICAgICAgc3RyUmVnZXggPSBcIlxcXFxbW1xcXFxzeF1cXFxcXVxcXFxzXCIgKyBzdHJSZWdleDtcclxuICAgIH0gZWxzZSBpZiAoc2VhcmNoVHlwZSA9PT0gU2VhcmNoVHlwZS5UYXNrRG9uZSkge1xyXG4gICAgICAgIHN0clJlZ2V4ID0gXCJcXFxcW3hcXFxcXVxcXFxzXCIgKyBzdHJSZWdleDtcclxuICAgIH0gZWxzZSBpZiAoc2VhcmNoVHlwZSA9PT0gU2VhcmNoVHlwZS5UYXNrTm90RG9uZSkge1xyXG4gICAgICAgIHN0clJlZ2V4ID0gXCJcXFxcW1xcXFxzXFxcXF1cXFxcc1wiICsgc3RyUmVnZXg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHN0clJlZ2V4ID0gXCJcXFxcW1tcXFxcc3hdXFxcXF1cXFxcc1wiICsgc3RyUmVnZXg7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhzdHJUZXh0UmVnZXgpO1xyXG5cclxuICAgIHJldHVybiBleHRyYWN0RGF0ZVVzaW5nUmVnZXhXaXRoVmFsdWUoY29udGVudCwgc3RyUmVnZXgsIHJlbmRlckluZm8pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWRkVG9EYXRhTWFwKFxyXG4gICAgZGF0YU1hcDogRGF0YU1hcCxcclxuICAgIGRhdGU6IHN0cmluZyxcclxuICAgIHF1ZXJ5OiBRdWVyeSxcclxuICAgIHZhbHVlOiBudW1iZXIgfCBudWxsXHJcbikge1xyXG4gICAgaWYgKCFkYXRhTWFwLmhhcyhkYXRlKSkge1xyXG4gICAgICAgIGxldCBxdWVyeVZhbHVlUGFpcnMgPSBuZXcgQXJyYXk8UXVlcnlWYWx1ZVBhaXI+KCk7XHJcbiAgICAgICAgcXVlcnlWYWx1ZVBhaXJzLnB1c2goeyBxdWVyeTogcXVlcnksIHZhbHVlOiB2YWx1ZSB9KTtcclxuICAgICAgICBkYXRhTWFwLnNldChkYXRlLCBxdWVyeVZhbHVlUGFpcnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgdGFyZ2V0VmFsdWVQYWlycyA9IGRhdGFNYXAuZ2V0KGRhdGUpO1xyXG4gICAgICAgIHRhcmdldFZhbHVlUGFpcnMucHVzaCh7IHF1ZXJ5OiBxdWVyeSwgdmFsdWU6IHZhbHVlIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBIZWxwZXIgZnVuY3Rpb25cclxuLy8gQWNjZXB0IG11bHRpcGxlIHZhbHVlcyB1c2luZyBjdXN0b20gc2VwYXJhdG9yc1xyXG4vLyByZWdleCB3aXRoIHZhbHVlIC0tPiBleHRyYWN0IHZhbHVlXHJcbi8vIHJlZ2V4IHdpdGhvdXQgdmFsdWUgLS0+IGNvdW50IG9jY3VycmVuY2llc1xyXG5mdW5jdGlvbiBleHRyYWN0RGF0YVVzaW5nUmVnZXhXaXRoTXVsdGlwbGVWYWx1ZXMoXHJcbiAgICB0ZXh0OiBzdHJpbmcsXHJcbiAgICBzdHJSZWdleDogc3RyaW5nLFxyXG4gICAgcXVlcnk6IFF1ZXJ5LFxyXG4gICAgZGF0YU1hcDogRGF0YU1hcCxcclxuICAgIHhWYWx1ZU1hcDogWFZhbHVlTWFwLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xyXG4pOiBib29sZWFuIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiZXh0cmFjdERhdGFVc2luZ1JlZ2V4V2l0aE11bHRpcGxlVmFsdWVzXCIpO1xyXG5cclxuICAgIGxldCByZWdleCA9IG5ldyBSZWdFeHAoc3RyUmVnZXgsIFwiZ21cIik7XHJcbiAgICBsZXQgbWF0Y2g7XHJcbiAgICBsZXQgbWVhc3VyZSA9IDAuMDtcclxuICAgIGxldCBleHRyYWN0ZWQgPSBmYWxzZTtcclxuICAgIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHRleHQpKSkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1hdGNoKTtcclxuICAgICAgICBpZiAoIXJlbmRlckluZm8uaWdub3JlQXR0YWNoZWRWYWx1ZVtxdWVyeS5nZXRJZCgpXSkge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICB0eXBlb2YgbWF0Y2guZ3JvdXBzICE9PSBcInVuZGVmaW5lZFwiICYmXHJcbiAgICAgICAgICAgICAgICB0eXBlb2YgbWF0Y2guZ3JvdXBzLnZhbHVlICE9PSBcInVuZGVmaW5lZFwiXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlcyA9IG1hdGNoLmdyb3Vwcy52YWx1ZS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh2YWx1ZXMpO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcnkuZ2V0U2VwYXJhdG9yKCkpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNwbGl0dGVkID0gdmFsdWVzLnNwbGl0KHF1ZXJ5LmdldFNlcGFyYXRvcigpKTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHNwbGl0dGVkKTtcclxuICAgICAgICAgICAgICAgIGlmICghc3BsaXR0ZWQpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwic2luZ2xlLXZhbHVlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0b1BhcnNlID0gc3BsaXR0ZWRbMF0udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRvUGFyc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXRQYXJzZSA9IGhlbHBlci5wYXJzZUZsb2F0RnJvbUFueShcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9QYXJzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby50ZXh0VmFsdWVNYXBcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS52YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0UGFyc2UudHlwZSA9PT0gVmFsdWVUeXBlLlRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmUgPSByZXRQYXJzZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuVGltZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcmVuZGVySW5mby5pZ25vcmVaZXJvVmFsdWVbcXVlcnkuZ2V0SWQoKV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRQYXJzZS52YWx1ZSAhPT0gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZSArPSByZXRQYXJzZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgc3BsaXR0ZWQubGVuZ3RoID4gcXVlcnkuZ2V0QWNjZXNzb3IoKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmdldEFjY2Vzc29yKCkgPj0gMFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJtdWx0aXBsZS12YWx1ZXNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRvUGFyc2UgPSBzcGxpdHRlZFtxdWVyeS5nZXRBY2Nlc3NvcigpXS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldFBhcnNlID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b1BhcnNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnRleHRWYWx1ZU1hcFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhyZXRQYXJzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJldFBhcnNlLnZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS50eXBlID09PSBWYWx1ZVR5cGUuVGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZSA9IHJldFBhcnNlLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LnZhbHVlVHlwZSA9IFZhbHVlVHlwZS5UaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZSArPSByZXRQYXJzZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBubyBuYW1lZCBncm91cHMsIGNvdW50IG9jY3VycmVuY2llc1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJjb3VudCBvY2N1cnJlbmNpZXNcIik7XHJcbiAgICAgICAgICAgICAgICBtZWFzdXJlICs9IHJlbmRlckluZm8uY29uc3RWYWx1ZVtxdWVyeS5nZXRJZCgpXTtcclxuICAgICAgICAgICAgICAgIGV4dHJhY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBmb3JjZSB0byBjb3VudCBvY2N1cnJlbmNpZXNcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJmb3JjZWQgY291bnQgb2NjdXJyZW5jaWVzXCIpO1xyXG4gICAgICAgICAgICBtZWFzdXJlICs9IHJlbmRlckluZm8uY29uc3RWYWx1ZVtxdWVyeS5nZXRJZCgpXTtcclxuICAgICAgICAgICAgZXh0cmFjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXh0cmFjdGVkKSB7XHJcbiAgICAgICAgbGV0IHhWYWx1ZSA9IHhWYWx1ZU1hcC5nZXQocmVuZGVySW5mby54RGF0YXNldFtxdWVyeS5nZXRJZCgpXSk7XHJcbiAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIG1lYXN1cmUpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuLy8gTm8gdmFsdWUsIGNvdW50IG9jY3VycmVuY2VzIG9ubHlcclxuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3REYXRhRnJvbUZyb250bWF0dGVyVGFnKFxyXG4gICAgZmlsZUNhY2hlOiBDYWNoZWRNZXRhZGF0YSxcclxuICAgIHF1ZXJ5OiBRdWVyeSxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBkYXRhTWFwOiBEYXRhTWFwLFxyXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXBcclxuKTogYm9vbGVhbiB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcImNvbGxlY3REYXRhRnJvbUZyb250bWF0dGVyVGFnXCIpO1xyXG4gICAgLy8gY29uc29sZS5sb2cocXVlcnkpO1xyXG4gICAgLy8gY29uc29sZS5sb2coZGF0YU1hcCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh4VmFsdWVNYXApO1xyXG5cclxuICAgIGxldCBmcm9udE1hdHRlciA9IGZpbGVDYWNoZS5mcm9udG1hdHRlcjtcclxuICAgIGxldCBmcm9udE1hdHRlclRhZ3M6IHN0cmluZ1tdID0gW107XHJcbiAgICBpZiAoZnJvbnRNYXR0ZXIgJiYgZnJvbnRNYXR0ZXIudGFncykge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZyb250TWF0dGVyLnRhZ3MpO1xyXG4gICAgICAgIGxldCB0YWdNZWFzdXJlID0gMC4wO1xyXG4gICAgICAgIGxldCB0YWdFeGlzdCA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZyb250TWF0dGVyLnRhZ3MpKSB7XHJcbiAgICAgICAgICAgIGZyb250TWF0dGVyVGFncyA9IGZyb250TWF0dGVyVGFncy5jb25jYXQoZnJvbnRNYXR0ZXIudGFncyk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZnJvbnRNYXR0ZXIudGFncyA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICBsZXQgc3BsaXR0ZWQgPSBmcm9udE1hdHRlci50YWdzLnNwbGl0KHF1ZXJ5LmdldFNlcGFyYXRvcih0cnVlKSk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHNwbGl0dGVkUGFydCBvZiBzcGxpdHRlZCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBhcnQgPSBzcGxpdHRlZFBhcnQudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcnQgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBmcm9udE1hdHRlclRhZ3MucHVzaChwYXJ0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmcm9udE1hdHRlclRhZ3MpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXJ5LmdldFRhcmdldCgpKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgdGFnIG9mIGZyb250TWF0dGVyVGFncykge1xyXG4gICAgICAgICAgICBpZiAodGFnID09PSBxdWVyeS5nZXRUYXJnZXQoKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gc2ltcGxlIHRhZ1xyXG4gICAgICAgICAgICAgICAgdGFnTWVhc3VyZSA9IHRhZ01lYXN1cmUgKyByZW5kZXJJbmZvLmNvbnN0VmFsdWVbcXVlcnkuZ2V0SWQoKV07XHJcbiAgICAgICAgICAgICAgICB0YWdFeGlzdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnLnN0YXJ0c1dpdGgocXVlcnkuZ2V0VGFyZ2V0KCkgKyBcIi9cIikpIHtcclxuICAgICAgICAgICAgICAgIC8vIG5lc3RlZCB0YWdcclxuICAgICAgICAgICAgICAgIHRhZ01lYXN1cmUgPSB0YWdNZWFzdXJlICsgcmVuZGVySW5mby5jb25zdFZhbHVlW3F1ZXJ5LmdldElkKCldO1xyXG4gICAgICAgICAgICAgICAgdGFnRXhpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHZhbHVlZC10YWcgaW4gZnJvbnRtYXR0ZXIgaXMgbm90IHN1cHBvcnRlZFxyXG4gICAgICAgICAgICAvLyBiZWNhdXNlIHRoZSBcInRhZzp2YWx1ZVwiIGluIGZyb250bWF0dGVyIHdpbGwgYmUgY29uc2lkZXIgYXMgYSBuZXcgdGFnIGZvciBlYWNoIGV4aXN0aW5nIHZhbHVlXHJcblxyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAodGFnRXhpc3QpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdGFnTWVhc3VyZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgeFZhbHVlID0geFZhbHVlTWFwLmdldChyZW5kZXJJbmZvLnhEYXRhc2V0W3F1ZXJ5LmdldElkKCldKTtcclxuICAgICAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIHZhbHVlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuLy8gSW4gZm9ybSAna2V5OiB2YWx1ZScsIHRhcmdldCB1c2VkIHRvIGlkZW50aWZ5ICdmcm9udG1hdHRlciBrZXknXHJcbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0RGF0YUZyb21Gcm9udG1hdHRlcktleShcclxuICAgIGZpbGVDYWNoZTogQ2FjaGVkTWV0YWRhdGEsXHJcbiAgICBxdWVyeTogUXVlcnksXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgZGF0YU1hcDogRGF0YU1hcCxcclxuICAgIHhWYWx1ZU1hcDogWFZhbHVlTWFwXHJcbik6IGJvb2xlYW4ge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJjb2xsZWN0RGF0YUZyb21Gcm9udG1hdHRlcktleVwiKTtcclxuXHJcbiAgICBsZXQgZnJvbnRNYXR0ZXIgPSBmaWxlQ2FjaGUuZnJvbnRtYXR0ZXI7XHJcbiAgICBpZiAoZnJvbnRNYXR0ZXIpIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmcm9udE1hdHRlcik7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcnkuZ2V0VGFyZ2V0KCkpO1xyXG4gICAgICAgIGxldCBkZWVwVmFsdWUgPSBoZWxwZXIuZGVlcFZhbHVlKGZyb250TWF0dGVyLCBxdWVyeS5nZXRUYXJnZXQoKSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coZGVlcFZhbHVlKTtcclxuICAgICAgICBpZiAoZGVlcFZhbHVlKSB7XHJcbiAgICAgICAgICAgIGxldCByZXRQYXJzZSA9IGhlbHBlci5wYXJzZUZsb2F0RnJvbUFueShcclxuICAgICAgICAgICAgICAgIGRlZXBWYWx1ZSxcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8udGV4dFZhbHVlTWFwXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJldFBhcnNlKTtcclxuICAgICAgICAgICAgaWYgKHJldFBhcnNlLnZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmV0UGFyc2UudHlwZSA9PT0gVmFsdWVUeXBlLlRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBxdWVyeS52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuVGltZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcclxuICAgICAgICAgICAgICAgIGxldCB4VmFsdWUgPSB4VmFsdWVNYXAuZ2V0KHJlbmRlckluZm8ueERhdGFzZXRbcXVlcnkuZ2V0SWQoKV0pO1xyXG4gICAgICAgICAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIHJldFBhcnNlLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgcXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCkgJiZcclxuICAgICAgICAgICAgaGVscGVyLmRlZXBWYWx1ZShmcm9udE1hdHRlciwgcXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCkpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwibXVsdGlwbGUgdmFsdWVzXCIpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVyeS5nZXRUYXJnZXQoKSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXJ5LmdldFBhcmVudFRhcmdldCgpKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcnkuZ2V0U3ViSWQoKSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAvLyAgICAgZnJvbnRNYXR0ZXJbcXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCldXHJcbiAgICAgICAgICAgIC8vICk7XHJcbiAgICAgICAgICAgIGxldCB0b1BhcnNlID0gaGVscGVyLmRlZXBWYWx1ZShcclxuICAgICAgICAgICAgICAgIGZyb250TWF0dGVyLFxyXG4gICAgICAgICAgICAgICAgcXVlcnkuZ2V0UGFyZW50VGFyZ2V0KClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgbGV0IHNwbGl0dGVkID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodG9QYXJzZSkpIHtcclxuICAgICAgICAgICAgICAgIHNwbGl0dGVkID0gdG9QYXJzZS5tYXAoKHApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcC50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRvUGFyc2UgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgIHNwbGl0dGVkID0gdG9QYXJzZS5zcGxpdChxdWVyeS5nZXRTZXBhcmF0b3IoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc3BsaXR0ZWQpO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBzcGxpdHRlZCAmJlxyXG4gICAgICAgICAgICAgICAgc3BsaXR0ZWQubGVuZ3RoID4gcXVlcnkuZ2V0QWNjZXNzb3IoKSAmJlxyXG4gICAgICAgICAgICAgICAgcXVlcnkuZ2V0QWNjZXNzb3IoKSA+PSAwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogaXQncyBub3QgZWZmaWNlbnQgdG8gcmV0cmlldmUgb25lIHZhbHVlIGF0IGEgdGltZSwgZW5oYW5jZSB0aGlzXHJcbiAgICAgICAgICAgICAgICBsZXQgc3BsaXR0ZWRQYXJ0ID0gc3BsaXR0ZWRbcXVlcnkuZ2V0QWNjZXNzb3IoKV0udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHJldFBhcnNlID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KFxyXG4gICAgICAgICAgICAgICAgICAgIHNwbGl0dGVkUGFydCxcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnRleHRWYWx1ZU1hcFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS52YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS50eXBlID09PSBWYWx1ZVR5cGUuVGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuVGltZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB4VmFsdWUgPSB4VmFsdWVNYXAuZ2V0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnhEYXRhc2V0W3F1ZXJ5LmdldElkKCldXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBhZGRUb0RhdGFNYXAoZGF0YU1hcCwgeFZhbHVlLCBxdWVyeSwgcmV0UGFyc2UudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuLy8gSW4gZm9ybSAncmVnZXggd2l0aCB2YWx1ZScsIG5hbWUgZ3JvdXAgJ3ZhbHVlJyBmcm9tIHVzZXJzXHJcbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0RGF0YUZyb21XaWtpKFxyXG4gICAgZmlsZUNhY2hlOiBDYWNoZWRNZXRhZGF0YSxcclxuICAgIHF1ZXJ5OiBRdWVyeSxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBkYXRhTWFwOiBEYXRhTWFwLFxyXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXBcclxuKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgbGlua3MgPSBmaWxlQ2FjaGUubGlua3M7XHJcbiAgICBpZiAoIWxpbmtzKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHNlYXJjaFRhcmdldCA9IHF1ZXJ5LmdldFRhcmdldCgpO1xyXG4gICAgbGV0IHNlYXJjaFR5cGUgPSBxdWVyeS5nZXRUeXBlKCk7XHJcblxyXG4gICAgbGV0IHRleHRUb1NlYXJjaCA9IFwiXCI7XHJcbiAgICBsZXQgc3RyUmVnZXggPSBzZWFyY2hUYXJnZXQ7XHJcblxyXG4gICAgLy8gUHJlcGFyZSB0ZXh0VG9TZWFyY2hcclxuICAgIGZvciAobGV0IGxpbmsgb2YgbGlua3MpIHtcclxuICAgICAgICBpZiAoIWxpbmspIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICBsZXQgd2lraVRleHQgPSBcIlwiO1xyXG4gICAgICAgIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLldpa2kpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmsuZGlzcGxheVRleHQpIHtcclxuICAgICAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5kaXNwbGF5VGV4dDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5saW5rO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLldpa2lMaW5rKSB7XHJcbiAgICAgICAgICAgIC8vIHdpa2kubGluayBwb2ludCB0byBhIGZpbGUgbmFtZVxyXG4gICAgICAgICAgICAvLyBhIGNvbG9uIGlzIG5vdCBhbGxvd2VkIGJlIGluIGZpbGUgbmFtZVxyXG4gICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsubGluaztcclxuICAgICAgICB9IGVsc2UgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuV2lraURpc3BsYXkpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmsuZGlzcGxheVRleHQpIHtcclxuICAgICAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5kaXNwbGF5VGV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChsaW5rLmRpc3BsYXlUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsuZGlzcGxheVRleHQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsubGluaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB3aWtpVGV4dCA9IHdpa2lUZXh0LnRyaW0oKTtcclxuXHJcbiAgICAgICAgdGV4dFRvU2VhcmNoICs9IHdpa2lUZXh0ICsgXCJcXG5cIjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZXh0cmFjdERhdGFVc2luZ1JlZ2V4V2l0aE11bHRpcGxlVmFsdWVzKFxyXG4gICAgICAgIHRleHRUb1NlYXJjaCxcclxuICAgICAgICBzdHJSZWdleCxcclxuICAgICAgICBxdWVyeSxcclxuICAgICAgICBkYXRhTWFwLFxyXG4gICAgICAgIHhWYWx1ZU1hcCxcclxuICAgICAgICByZW5kZXJJbmZvXHJcbiAgICApO1xyXG59XHJcblxyXG4vLyBJbiBmb3JtICdrZXk6IHZhbHVlJywgbmFtZSBncm91cCAndmFsdWUnIGZyb20gcGx1Z2luLCBub3QgZnJvbSB1c2Vyc1xyXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tSW5saW5lVGFnKFxyXG4gICAgY29udGVudDogc3RyaW5nLFxyXG4gICAgcXVlcnk6IFF1ZXJ5LFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIGRhdGFNYXA6IERhdGFNYXAsXHJcbiAgICB4VmFsdWVNYXA6IFhWYWx1ZU1hcFxyXG4pOiBib29sZWFuIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKGNvbnRlbnQpO1xyXG4gICAgLy8gVGVzdCB0aGlzIGluIFJlZ2V4MTAxXHJcbiAgICAvLyAoXnxcXHMpI3RhZ05hbWUoXFwvW1xcdy1dKykqKDooPzx2YWx1ZT5bXFxkXFwuXFwvLV0qKVthLXpBLVpdKik/KFtcXFxcLiEsXFxcXD87fi1dKik/KFxcc3wkKVxyXG4gICAgbGV0IHRhZ05hbWUgPSBxdWVyeS5nZXRUYXJnZXQoKTtcclxuICAgIGlmIChxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKSkge1xyXG4gICAgICAgIHRhZ05hbWUgPSBxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKTsgLy8gdXNlIHBhcmVudCB0YWcgbmFtZSBmb3IgbXVsdGlwbGUgdmFsdWVzXHJcbiAgICB9XHJcbiAgICBpZiAodGFnTmFtZS5sZW5ndGggPiAxICYmIHRhZ05hbWUuc3RhcnRzV2l0aChcIiNcIikpIHtcclxuICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS5zdWJzdHJpbmcoMSk7XHJcbiAgICB9XHJcbiAgICBsZXQgc3RyUmVnZXggPVxyXG4gICAgICAgIFwiKF58XFxcXHMpI1wiICtcclxuICAgICAgICB0YWdOYW1lICtcclxuICAgICAgICBcIihcXFxcL1tcXFxcdy1dKykqKDooPzx2YWx1ZT5bXFxcXGRcXFxcLlxcXFwvLV0qKVthLXpBLVpdKik/KFtcXFxcLiEsXFxcXD87fi1dKik/KFxcXFxzfCQpXCI7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhzdHJSZWdleCk7XHJcblxyXG4gICAgcmV0dXJuIGV4dHJhY3REYXRhVXNpbmdSZWdleFdpdGhNdWx0aXBsZVZhbHVlcyhcclxuICAgICAgICBjb250ZW50LFxyXG4gICAgICAgIHN0clJlZ2V4LFxyXG4gICAgICAgIHF1ZXJ5LFxyXG4gICAgICAgIGRhdGFNYXAsXHJcbiAgICAgICAgeFZhbHVlTWFwLFxyXG4gICAgICAgIHJlbmRlckluZm9cclxuICAgICk7XHJcbn1cclxuXHJcbi8vIEluIGZvcm0gJ3JlZ2V4IHdpdGggdmFsdWUnLCBuYW1lIGdyb3VwICd2YWx1ZScgZnJvbSB1c2Vyc1xyXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tVGV4dChcclxuICAgIGNvbnRlbnQ6IHN0cmluZyxcclxuICAgIHF1ZXJ5OiBRdWVyeSxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBkYXRhTWFwOiBEYXRhTWFwLFxyXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXBcclxuKTogYm9vbGVhbiB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcImNvbGxlY3REYXRhRnJvbVRleHRcIik7XHJcblxyXG4gICAgbGV0IHN0clJlZ2V4ID0gcXVlcnkuZ2V0VGFyZ2V0KCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhzdHJSZWdleCk7XHJcblxyXG4gICAgcmV0dXJuIGV4dHJhY3REYXRhVXNpbmdSZWdleFdpdGhNdWx0aXBsZVZhbHVlcyhcclxuICAgICAgICBjb250ZW50LFxyXG4gICAgICAgIHN0clJlZ2V4LFxyXG4gICAgICAgIHF1ZXJ5LFxyXG4gICAgICAgIGRhdGFNYXAsXHJcbiAgICAgICAgeFZhbHVlTWFwLFxyXG4gICAgICAgIHJlbmRlckluZm9cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0RGF0YUZyb21GaWxlTWV0YShcclxuICAgIGZpbGU6IFRGaWxlLFxyXG4gICAgY29udGVudDogc3RyaW5nLFxyXG4gICAgcXVlcnk6IFF1ZXJ5LFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIGRhdGFNYXA6IERhdGFNYXAsXHJcbiAgICB4VmFsdWVNYXA6IFhWYWx1ZU1hcFxyXG4pOiBib29sZWFuIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiY29sbGVjdERhdGFGcm9tRmlsZU1ldGFcIik7XHJcblxyXG4gICAgaWYgKGZpbGUgJiYgZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coZmlsZS5zdGF0KTtcclxuXHJcbiAgICAgICAgbGV0IHRhcmdldCA9IHF1ZXJ5LmdldFRhcmdldCgpO1xyXG4gICAgICAgIGxldCB4VmFsdWUgPSB4VmFsdWVNYXAuZ2V0KHJlbmRlckluZm8ueERhdGFzZXRbcXVlcnkuZ2V0SWQoKV0pO1xyXG5cclxuICAgICAgICBpZiAodGFyZ2V0ID09PSBcImNEYXRlXCIpIHtcclxuICAgICAgICAgICAgbGV0IGN0aW1lID0gZmlsZS5zdGF0LmN0aW1lOyAvLyB1bml4IHRpbWVcclxuICAgICAgICAgICAgcXVlcnkudmFsdWVUeXBlID0gVmFsdWVUeXBlLkRhdGU7XHJcbiAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcclxuICAgICAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIGN0aW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgPT09IFwibURhdGVcIikge1xyXG4gICAgICAgICAgICBsZXQgbXRpbWUgPSBmaWxlLnN0YXQubXRpbWU7IC8vIHVuaXggdGltZVxyXG4gICAgICAgICAgICBxdWVyeS52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuRGF0ZTtcclxuICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xyXG4gICAgICAgICAgICBhZGRUb0RhdGFNYXAoZGF0YU1hcCwgeFZhbHVlLCBxdWVyeSwgbXRpbWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJzaXplXCIpIHtcclxuICAgICAgICAgICAgbGV0IHNpemUgPSBmaWxlLnN0YXQuc2l6ZTsgLy8gbnVtYmVyIGluXHJcbiAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcclxuICAgICAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIHNpemUpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJudW1Xb3Jkc1wiKSB7XHJcbiAgICAgICAgICAgIGxldCBudW1Xb3JkcyA9IGhlbHBlci5nZXRXb3JkQ291bnQoY29udGVudCk7XHJcbiAgICAgICAgICAgIGFkZFRvRGF0YU1hcChkYXRhTWFwLCB4VmFsdWUsIHF1ZXJ5LCBudW1Xb3Jkcyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09PSBcIm51bUNoYXJzXCIpIHtcclxuICAgICAgICAgICAgbGV0IG51bUNoYXJzID0gaGVscGVyLmdldENoYXJhY3RlckNvdW50KGNvbnRlbnQpO1xyXG4gICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XHJcbiAgICAgICAgICAgIGFkZFRvRGF0YU1hcChkYXRhTWFwLCB4VmFsdWUsIHF1ZXJ5LCBudW1DaGFycyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09PSBcIm51bVNlbnRlbmNlc1wiKSB7XHJcbiAgICAgICAgICAgIGxldCBudW1TZW50ZW5jZXMgPSBoZWxwZXIuZ2V0U2VudGVuY2VDb3VudChjb250ZW50KTtcclxuICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xyXG4gICAgICAgICAgICBhZGRUb0RhdGFNYXAoZGF0YU1hcCwgeFZhbHVlLCBxdWVyeSwgbnVtU2VudGVuY2VzKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgPT09IFwibmFtZVwiKSB7XHJcbiAgICAgICAgICAgIGxldCB0YXJnZXRNZWFzdXJlID0gMC4wO1xyXG4gICAgICAgICAgICBsZXQgdGFyZ2V0RXhpc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IHJldFBhcnNlID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KFxyXG4gICAgICAgICAgICAgICAgZmlsZS5iYXNlbmFtZSxcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8udGV4dFZhbHVlTWFwXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChyZXRQYXJzZS52YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJldFBhcnNlLnR5cGUgPT09IFZhbHVlVHlwZS5UaW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TWVhc3VyZSA9IHJldFBhcnNlLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldEV4aXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBxdWVyeS52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuVGltZTtcclxuICAgICAgICAgICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgIXJlbmRlckluZm8uaWdub3JlWmVyb1ZhbHVlW3F1ZXJ5LmdldElkKCldIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldFBhcnNlLnZhbHVlICE9PSAwXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE1lYXN1cmUgKz0gcmV0UGFyc2UudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEV4aXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHRhcmdldEV4aXN0KSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRhcmdldE1lYXN1cmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBhZGRUb0RhdGFNYXAoZGF0YU1hcCwgeFZhbHVlLCBxdWVyeSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG4vLyBJbiBmb3JtICdrZXk6OnZhbHVlJywgbmFtZWQgZ3JvdXAgJ3ZhbHVlJyBmcm9tIHBsdWdpblxyXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tRHZGaWVsZChcclxuICAgIGNvbnRlbnQ6IHN0cmluZyxcclxuICAgIHF1ZXJ5OiBRdWVyeSxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBkYXRhTWFwOiBEYXRhTWFwLFxyXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXBcclxuKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgZHZUYXJnZXQgPSBxdWVyeS5nZXRUYXJnZXQoKTtcclxuICAgIGlmIChxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKSkge1xyXG4gICAgICAgIGR2VGFyZ2V0ID0gcXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCk7IC8vIHVzZSBwYXJlbnQgdGFnIG5hbWUgZm9yIG11bHRpcGxlIHZhbHVlc1xyXG4gICAgfVxyXG4gICAgLy8gRGF0YXZpZXcgYXNrIHVzZXIgdG8gYWRkIGRhc2hlcyBmb3Igc3BhY2VzIGFzIHNlYXJjaCB0YXJnZXRcclxuICAgIC8vIFNvIGEgZGFzaCBtYXkgc3RhbmRzIGZvciBhIHJlYWwgZGFzaCBvciBhIHNwYWNlXHJcbiAgICBkdlRhcmdldCA9IGR2VGFyZ2V0LnJlcGxhY2UoXCItXCIsIFwiW1xcXFxzXFxcXC1dXCIpO1xyXG5cclxuICAgIC8vIFRlc3QgdGhpcyBpbiBSZWdleDEwMVxyXG4gICAgLy8gcmVtZW1iZXIgJ1xccycgaW5jbHVkZXMgbmV3IGxpbmVcclxuICAgIC8vIChefCB8XFx0KVxcKnswLDJ9ZHZUYXJnZXRcXCp7MCwyfSg6OlsgfFxcdF0qKD88dmFsdWU+W1xcZFxcLlxcL1xcLVxcdyxAOyBcXHQ6XSopKShcXHI/XFxufFxccnwkKVxyXG4gICAgbGV0IHN0clJlZ2V4ID1cclxuICAgICAgICBcIihefCB8XFxcXHQpXFxcXCp7MCwyfVwiICtcclxuICAgICAgICBkdlRhcmdldCArXHJcbiAgICAgICAgXCJcXFxcKnswLDJ9KDo6WyB8XFxcXHRdKig/PHZhbHVlPltcXFxcZFxcXFwuXFxcXC9cXFxcLSxAOyBcXFxcdDpcIiArIFxyXG4gICAgICAgIFdvcmRDaGFyYWN0ZXJzICtcclxuICAgICAgICBcIl0qKSkoXFxcXHJcXFxcP1xcXFxufFxcXFxyfCQpXCI7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhzdHJSZWdleCk7XHJcblxyXG4gICAgcmV0dXJuIGV4dHJhY3REYXRhVXNpbmdSZWdleFdpdGhNdWx0aXBsZVZhbHVlcyhcclxuICAgICAgICBjb250ZW50LFxyXG4gICAgICAgIHN0clJlZ2V4LFxyXG4gICAgICAgIHF1ZXJ5LFxyXG4gICAgICAgIGRhdGFNYXAsXHJcbiAgICAgICAgeFZhbHVlTWFwLFxyXG4gICAgICAgIHJlbmRlckluZm9cclxuICAgICk7XHJcbn1cclxuXHJcbi8vIEluIGZvcm0gJ3JlZ2V4IHdpdGggdmFsdWUnLCBuYW1lIGdyb3VwICd2YWx1ZScgZnJvbSB1c2Vyc1xyXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tVGFzayhcclxuICAgIGNvbnRlbnQ6IHN0cmluZyxcclxuICAgIHF1ZXJ5OiBRdWVyeSxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBkYXRhTWFwOiBEYXRhTWFwLFxyXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXBcclxuKTogYm9vbGVhbiB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcImNvbGxlY3REYXRhRnJvbVRhc2tcIik7XHJcbiAgICBsZXQgc2VhcmNoVHlwZSA9IHF1ZXJ5LmdldFR5cGUoKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHNlYXJjaFR5cGUpO1xyXG5cclxuICAgIGxldCBzdHJSZWdleCA9IHF1ZXJ5LmdldFRhcmdldCgpO1xyXG4gICAgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuVGFzaykge1xyXG4gICAgICAgIHN0clJlZ2V4ID0gXCJcXFxcW1tcXFxcc3hdXFxcXF1cXFxcc1wiICsgc3RyUmVnZXg7XHJcbiAgICB9IGVsc2UgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuVGFza0RvbmUpIHtcclxuICAgICAgICBzdHJSZWdleCA9IFwiXFxcXFt4XFxcXF1cXFxcc1wiICsgc3RyUmVnZXg7XHJcbiAgICB9IGVsc2UgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuVGFza05vdERvbmUpIHtcclxuICAgICAgICBzdHJSZWdleCA9IFwiXFxcXFtcXFxcc1xcXFxdXFxcXHNcIiArIHN0clJlZ2V4O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBhbGxcclxuICAgICAgICBzdHJSZWdleCA9IFwiXFxcXFtbXFxcXHN4XVxcXFxdXFxcXHNcIiArIHN0clJlZ2V4O1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coc3RyUmVnZXgpO1xyXG5cclxuICAgIHJldHVybiBleHRyYWN0RGF0YVVzaW5nUmVnZXhXaXRoTXVsdGlwbGVWYWx1ZXMoXHJcbiAgICAgICAgY29udGVudCxcclxuICAgICAgICBzdHJSZWdleCxcclxuICAgICAgICBxdWVyeSxcclxuICAgICAgICBkYXRhTWFwLFxyXG4gICAgICAgIHhWYWx1ZU1hcCxcclxuICAgICAgICByZW5kZXJJbmZvXHJcbiAgICApO1xyXG59XHJcbiIsImltcG9ydCB7IEFwcCwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgVHJhY2tlciBmcm9tIFwiLi9tYWluXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNrZXJTZXR0aW5ncyB7XHJcbiAgICBmb2xkZXI6IHN0cmluZztcclxuICAgIGRhdGVGb3JtYXQ6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0VUVElOR1M6IFRyYWNrZXJTZXR0aW5ncyA9IHtcclxuICAgIGZvbGRlcjogXCIvXCIsXHJcbiAgICBkYXRlRm9ybWF0OiBcIllZWVktTU0tRERcIixcclxufTtcclxuXHJcbmV4cG9ydCBjbGFzcyBUcmFja2VyU2V0dGluZ1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xyXG4gICAgcGx1Z2luOiBUcmFja2VyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IFRyYWNrZXIpIHtcclxuICAgICAgICBzdXBlcihhcHAsIHBsdWdpbik7XHJcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcGxheSgpOiB2b2lkIHtcclxuICAgICAgICBsZXQgeyBjb250YWluZXJFbCB9ID0gdGhpcztcclxuXHJcbiAgICAgICAgY29udGFpbmVyRWwuZW1wdHkoKTtcclxuXHJcbiAgICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRGVmYXVsdCBmb2xkZXIgbG9jYXRpb25cIilcclxuICAgICAgICAgICAgLnNldERlc2MoXHJcbiAgICAgICAgICAgICAgICBcIkZpbGVzIGluIHRoaXMgZm9sZGVyIHdpbGwgYmUgcGFyc2VkIGFuZCB1c2VkIGFzIGlucHV0IGRhdGEgb2YgdGhlIHRyYWNrZXIgcGx1Z2luLlxcbllvdSBjYW4gYWxzbyBvdmVycmlkZSBpdCB1c2luZyAnZm9sZGVyJyBhcmd1bWVudCBpbiB0aGUgdHJhY2tlciBjb2RlYmxvY2suXCJcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuYWRkVGV4dCgodGV4dCkgPT5cclxuICAgICAgICAgICAgICAgIHRleHRcclxuICAgICAgICAgICAgICAgICAgICAuc2V0UGxhY2Vob2xkZXIoXCJGb2xkZXIgUGF0aFwiKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXIgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRGVmYXVsdCBkYXRlIGZvcm1hdFwiKVxyXG4gICAgICAgICAgICAuc2V0RGVzYyhcclxuICAgICAgICAgICAgICAgIFwiVGhpcyBmb3JtYXQgaXMgdXNlZCB0byBwYXJzZSB0aGUgZGF0ZSBpbiB5b3VyIGRpYXJ5IHRpdGxlLlxcbllvdSBjYW4gYWxzbyBvdmVycmlkZSBpdCB1c2luZyAnZGF0ZUZvcm1hdCcgYXJndW1lbnQgaW4gdGhlIHRyYWNrZXIgY29kZWJsb2NrLlwiXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+XHJcbiAgICAgICAgICAgICAgICB0ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgLnNldFBsYWNlaG9sZGVyKFwiWVlZWS1NTS1ERFwiKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5kYXRlRm9ybWF0KVxyXG4gICAgICAgICAgICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZGF0ZUZvcm1hdCA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEFwcCwgQ2FjaGVkTWV0YWRhdGEsIGdldExpbmtwYXRoLCBQbHVnaW4gfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0IHsgTWFya2Rvd25Qb3N0UHJvY2Vzc29yQ29udGV4dCwgTWFya2Rvd25WaWV3LCBFZGl0b3IgfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0IHsgVEZpbGUsIFRGb2xkZXIsIG5vcm1hbGl6ZVBhdGggfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0ICogYXMgcmVuZGVyaW5nIGZyb20gXCIuL3JlbmRlcmluZ1wiO1xyXG5pbXBvcnQgeyBnZXRSZW5kZXJJbmZvRnJvbVlhbWwgfSBmcm9tIFwiLi9wYXJzaW5nXCI7XHJcbmltcG9ydCB7XHJcbiAgICBEYXRhc2V0cyxcclxuICAgIFF1ZXJ5LFxyXG4gICAgUXVlcnlWYWx1ZVBhaXIsXHJcbiAgICBHcmFwaFR5cGUsXHJcbiAgICBTZWFyY2hUeXBlLFxyXG4gICAgVGFibGVEYXRhLFxyXG4gICAgUmVuZGVySW5mbyxcclxuICAgIFhWYWx1ZU1hcCxcclxuICAgIERhdGFNYXAsXHJcbiAgICBDdXN0b21EYXRhc2V0SW5mbyxcclxuICAgIENvbGxlY3RpbmdQcm9jZXNzSW5mbyxcclxuICAgIFZhbHVlVHlwZSxcclxufSBmcm9tIFwiLi9kYXRhXCI7XHJcbmltcG9ydCAqIGFzIGNvbGxlY3RpbmcgZnJvbSBcIi4vY29sbGVjdGluZ1wiO1xyXG5pbXBvcnQge1xyXG4gICAgVHJhY2tlclNldHRpbmdzLFxyXG4gICAgREVGQVVMVF9TRVRUSU5HUyxcclxuICAgIFRyYWNrZXJTZXR0aW5nVGFiLFxyXG59IGZyb20gXCIuL3NldHRpbmdzXCI7XHJcbmltcG9ydCAqIGFzIGhlbHBlciBmcm9tIFwiLi9oZWxwZXJcIjtcclxuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSBcIm1vbWVudFwiO1xyXG4vLyBpbXBvcnQgeyBnZXREYWlseU5vdGVTZXR0aW5ncyB9IGZyb20gXCJvYnNpZGlhbi1kYWlseS1ub3Rlcy1pbnRlcmZhY2VcIjtcclxuXHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICAgIGludGVyZmFjZSBXaW5kb3cge1xyXG4gICAgICAgIGFwcDogQXBwO1xyXG4gICAgICAgIG1vbWVudDogKCkgPT4gTW9tZW50O1xyXG4gICAgfVxyXG59XHJcblxyXG5kZWNsYXJlIG1vZHVsZSAnb2JzaWRpYW4nIHtcclxuICAgIGludGVyZmFjZSBWYXVsdCB7XHJcbiAgICAgICAgZ2V0Q29uZmlnKHByb3A6IHN0cmluZyk6IGFueTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVHJhY2tlciBleHRlbmRzIFBsdWdpbiB7XHJcbiAgICBzZXR0aW5nczogVHJhY2tlclNldHRpbmdzO1xyXG5cclxuICAgIGFzeW5jIG9ubG9hZCgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImxvYWRpbmcgb2JzaWRpYW4tdHJhY2tlciBwbHVnaW5cIik7XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgVHJhY2tlclNldHRpbmdUYWIodGhpcy5hcHAsIHRoaXMpKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWdpc3Rlck1hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yKFxyXG4gICAgICAgICAgICBcInRyYWNrZXJcIixcclxuICAgICAgICAgICAgdGhpcy5wb3N0cHJvY2Vzc29yLmJpbmQodGhpcylcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICAgICAgICBpZDogXCJhZGQtbGluZS1jaGFydC10cmFja2VyXCIsXHJcbiAgICAgICAgICAgIG5hbWU6IFwiQWRkIExpbmUgQ2hhcnQgVHJhY2tlclwiLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogKCkgPT4gdGhpcy5hZGRDb2RlQmxvY2soR3JhcGhUeXBlLkxpbmUpLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICAgICAgICBpZDogXCJhZGQtYmFyLWNoYXJ0LXRyYWNrZXJcIixcclxuICAgICAgICAgICAgbmFtZTogXCJBZGQgQmFyIENoYXJ0IFRyYWNrZXJcIixcclxuICAgICAgICAgICAgY2FsbGJhY2s6ICgpID0+IHRoaXMuYWRkQ29kZUJsb2NrKEdyYXBoVHlwZS5CYXIpLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICAgICAgICBpZDogXCJhZGQtc3VtbWFyeS10cmFja2VyXCIsXHJcbiAgICAgICAgICAgIG5hbWU6IFwiQWRkIFN1bW1hcnkgVHJhY2tlclwiLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogKCkgPT4gdGhpcy5hZGRDb2RlQmxvY2soR3JhcGhUeXBlLlN1bW1hcnkpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgIERFRkFVTFRfU0VUVElOR1MsXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZERhdGEoKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyRXJyb3JNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZywgY2FudmFzOiBIVE1MRWxlbWVudCwgZWw6IEhUTUxFbGVtZW50KSB7XHJcbiAgICAgICAgcmVuZGVyaW5nLnJlbmRlckVycm9yTWVzc2FnZShjYW52YXMsIG1lc3NhZ2UpO1xyXG4gICAgICAgIGVsLmFwcGVuZENoaWxkKGNhbnZhcyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIG9udW5sb2FkKCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwidW5sb2FkaW5nIG9ic2lkaWFuLXRyYWNrZXIgcGx1Z2luXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZpbGVzSW5Gb2xkZXIoXHJcbiAgICAgICAgZm9sZGVyOiBURm9sZGVyLFxyXG4gICAgICAgIGluY2x1ZGVTdWJGb2xkZXJzOiBib29sZWFuID0gdHJ1ZVxyXG4gICAgKTogVEZpbGVbXSB7XHJcbiAgICAgICAgbGV0IGZpbGVzOiBURmlsZVtdID0gW107XHJcblxyXG4gICAgICAgIGZvciAobGV0IGl0ZW0gb2YgZm9sZGVyLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmV4dGVuc2lvbiA9PT0gXCJtZFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgVEZvbGRlciAmJiBpbmNsdWRlU3ViRm9sZGVycykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVzID0gZmlsZXMuY29uY2F0KHRoaXMuZ2V0RmlsZXNJbkZvbGRlcihpdGVtKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmaWxlcztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRGaWxlcyhcclxuICAgICAgICBmaWxlczogVEZpbGVbXSxcclxuICAgICAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgICAgIGluY2x1ZGVTdWJGb2xkZXJzOiBib29sZWFuID0gdHJ1ZVxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKCFmaWxlcykgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgZm9sZGVyVG9TZWFyY2ggPSByZW5kZXJJbmZvLmZvbGRlcjtcclxuICAgICAgICBsZXQgdXNlU3BlY2lmaWVkRmlsZXNPbmx5ID0gcmVuZGVySW5mby5zcGVjaWZpZWRGaWxlc09ubHk7XHJcbiAgICAgICAgbGV0IHNwZWNpZmllZEZpbGVzID0gcmVuZGVySW5mby5maWxlO1xyXG4gICAgICAgIGxldCBmaWxlc0NvbnRhaW5zTGlua2VkRmlsZXMgPSByZW5kZXJJbmZvLmZpbGVDb250YWluc0xpbmtlZEZpbGVzO1xyXG4gICAgICAgIGxldCBmaWxlTXVsdGlwbGllckFmdGVyTGluayA9IHJlbmRlckluZm8uZmlsZU11bHRpcGxpZXJBZnRlckxpbms7XHJcblxyXG4gICAgICAgIC8vIEluY2x1ZGUgZmlsZXMgaW4gZm9sZGVyXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codXNlU3BlY2lmaWVkRmlsZXNPbmx5KTtcclxuICAgICAgICBpZiAoIXVzZVNwZWNpZmllZEZpbGVzT25seSkge1xyXG4gICAgICAgICAgICBsZXQgZm9sZGVyID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKFxyXG4gICAgICAgICAgICAgICAgbm9ybWFsaXplUGF0aChmb2xkZXJUb1NlYXJjaClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGZvbGRlciAmJiBmb2xkZXIgaW5zdGFuY2VvZiBURm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZm9sZGVyRmlsZXMgPSB0aGlzLmdldEZpbGVzSW5Gb2xkZXIoZm9sZGVyKTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGZpbGUgb2YgZm9sZGVyRmlsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJbmNsdWRlIHNwZWNpZmllZCBmaWxlXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coc3BlY2lmaWVkRmlsZXMpO1xyXG4gICAgICAgIGZvciAobGV0IGZpbGVQYXRoIG9mIHNwZWNpZmllZEZpbGVzKSB7XHJcbiAgICAgICAgICAgIGxldCBwYXRoID0gZmlsZVBhdGg7XHJcbiAgICAgICAgICAgIGlmICghcGF0aC5lbmRzV2l0aChcIi5tZFwiKSkge1xyXG4gICAgICAgICAgICAgICAgcGF0aCArPSBcIi5tZFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhdGggPSBub3JtYWxpemVQYXRoKHBhdGgpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhwYXRoKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBmaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKHBhdGgpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhmaWxlKTtcclxuICAgICAgICAgICAgaWYgKGZpbGUgJiYgZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbGVzKTtcclxuXHJcbiAgICAgICAgLy8gSW5jbHVkZSBmaWxlcyBpbiBwb2ludGVkIGJ5IGxpbmtzIGluIGZpbGVcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmaWxlc0NvbnRhaW5zTGlua2VkRmlsZXMpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rKTtcclxuICAgICAgICBsZXQgbGlua2VkRmlsZU11bHRpcGxpZXIgPSAxO1xyXG4gICAgICAgIGxldCBzZWFyY2hGaWxlTXVsdGlmcGllckFmdGVyTGluayA9IHRydWU7XHJcbiAgICAgICAgaWYgKGZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIHNlYXJjaEZpbGVNdWx0aWZwaWVyQWZ0ZXJMaW5rID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICgvXlswLTldKyQvLnRlc3QoZmlsZU11bHRpcGxpZXJBZnRlckxpbmspKSB7XHJcbiAgICAgICAgICAgIC8vIGludGVnZXJcclxuICAgICAgICAgICAgbGlua2VkRmlsZU11bHRpcGxpZXIgPSBwYXJzZUZsb2F0KGZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rKTtcclxuICAgICAgICAgICAgc2VhcmNoRmlsZU11bHRpZnBpZXJBZnRlckxpbmsgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKCEvXFw/PHZhbHVlPi8udGVzdChmaWxlTXVsdGlwbGllckFmdGVyTGluaykpIHtcclxuICAgICAgICAgICAgLy8gbm8gJ3ZhbHVlJyBuYW1lZCBncm91cFxyXG4gICAgICAgICAgICBzZWFyY2hGaWxlTXVsdGlmcGllckFmdGVyTGluayA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBmaWxlUGF0aCBvZiBmaWxlc0NvbnRhaW5zTGlua2VkRmlsZXMpIHtcclxuICAgICAgICAgICAgaWYgKCFmaWxlUGF0aC5lbmRzV2l0aChcIi5tZFwiKSkge1xyXG4gICAgICAgICAgICAgICAgZmlsZVBhdGggKz0gXCIubWRcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgZmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChcclxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZVBhdGgoZmlsZVBhdGgpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChmaWxlICYmIGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gR2V0IGxpbmtlZCBmaWxlc1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpbGVDYWNoZSA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpbGVDb250ZW50ID0gYXdhaXQgdGhpcy5hcHAudmF1bHQuYWRhcHRlci5yZWFkKGZpbGUucGF0aCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgbGluZXMgPSBmaWxlQ29udGVudC5zcGxpdChcclxuICAgICAgICAgICAgICAgICAgICAvXFxyXFxufFtcXG5cXHZcXGZcXHJcXHg4NVxcdTIwMjhcXHUyMDI5XS9cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFmaWxlQ2FjaGU/LmxpbmtzKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBsaW5rIG9mIGZpbGVDYWNoZS5saW5rcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbGluaykgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmtlZEZpbGUgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcC5tZXRhZGF0YUNhY2hlLmdldEZpcnN0TGlua3BhdGhEZXN0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluay5saW5rLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobGlua2VkRmlsZSAmJiBsaW5rZWRGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlYXJjaEZpbGVNdWx0aWZwaWVyQWZ0ZXJMaW5rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGxpbmUgb2YgbGluayBpbiBmaWxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluZU51bWJlciA9IGxpbmsucG9zaXRpb24uZW5kLmxpbmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lTnVtYmVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lTnVtYmVyID49IDAgJiYgbGluZU51bWJlciA8IGxpbmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5lID0gbGluZXNbbGluZU51bWJlcl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobGluZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyeSBleHRyYWN0IG11bHRpcGxpZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAobGluay5wb3NpdGlvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3BsaXR0ZWQgPSBsaW5lLnNwbGl0KGxpbmsub3JpZ2luYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHNwbGl0dGVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0b1BhcnNlID0gc3BsaXR0ZWRbMV0udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RyUmVnZXggPSBmaWxlTXVsdGlwbGllckFmdGVyTGluaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnbVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1hdGNoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyh0b1BhcnNlKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG1hdGNoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgbWF0Y2guZ3JvdXBzICE9PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInVuZGVmaW5lZFwiICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIG1hdGNoLmdyb3Vwcy52YWx1ZSAhPT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bmRlZmluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbXVzdCBoYXZlIGdyb3VwIG5hbWUgJ3ZhbHVlJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXRQYXJzZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5wYXJzZUZsb2F0RnJvbUFueShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoLmdyb3Vwcy52YWx1ZS50cmltKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnRleHRWYWx1ZU1hcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS52YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZWRGaWxlTXVsdGlwbGllciA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRQYXJzZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmtlZEZpbGVNdWx0aXBsaWVyOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzLnB1c2gobGlua2VkRmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbGVzKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBwb3N0cHJvY2Vzc29yKFxyXG4gICAgICAgIHNvdXJjZTogc3RyaW5nLFxyXG4gICAgICAgIGVsOiBIVE1MRWxlbWVudCxcclxuICAgICAgICBjdHg6IE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHRcclxuICAgICkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwicG9zdHByb2Nlc3NcIik7XHJcbiAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuXHJcbiAgICAgICAgbGV0IHlhbWxUZXh0ID0gc291cmNlLnRyaW0oKTtcclxuXHJcbiAgICAgICAgLy8gUmVwbGFjZSBhbGwgdGFicyBieSBzcGFjZXNcclxuICAgICAgICBsZXQgdGFiU2l6ZSA9IHRoaXMuYXBwLnZhdWx0LmdldENvbmZpZyhcInRhYlNpemVcIik7XHJcbiAgICAgICAgbGV0IHNwYWNlcyA9IEFycmF5KHRhYlNpemUpLmZpbGwoXCIgXCIpLmpvaW4oXCJcIik7XHJcbiAgICAgICAgeWFtbFRleHQgPSB5YW1sVGV4dC5yZXBsYWNlKC9cXHQvZ20sIHNwYWNlcyk7XHJcblxyXG4gICAgICAgIC8vIEdldCByZW5kZXIgaW5mb1xyXG4gICAgICAgIGxldCByZXRSZW5kZXJJbmZvID0gZ2V0UmVuZGVySW5mb0Zyb21ZYW1sKHlhbWxUZXh0LCB0aGlzKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldFJlbmRlckluZm8gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRXJyb3JNZXNzYWdlKHJldFJlbmRlckluZm8sIGNhbnZhcywgZWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcmVuZGVySW5mbyA9IHJldFJlbmRlckluZm8gYXMgUmVuZGVySW5mbztcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcclxuXHJcbiAgICAgICAgLy8gR2V0IGZpbGVzXHJcbiAgICAgICAgbGV0IGZpbGVzOiBURmlsZVtdID0gW107XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRGaWxlcyhmaWxlcywgcmVuZGVySW5mbyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvck1lc3NhZ2UoZS5tZXNzYWdlLCBjYW52YXMsIGVsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvck1lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICBcIk5vIG1hcmtkb3duIGZpbGVzIGZvdW5kIGluIGZvbGRlclwiLFxyXG4gICAgICAgICAgICAgICAgY2FudmFzLFxyXG4gICAgICAgICAgICAgICAgZWxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coZmlsZXMpO1xyXG5cclxuICAgICAgICAvLyBsZXQgZGFpbHlOb3Rlc1NldHRpbmdzID0gZ2V0RGFpbHlOb3RlU2V0dGluZ3MoKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhkYWlseU5vdGVzU2V0dGluZ3MpO1xyXG4gICAgICAgIC8vIEkgYWx3YXlzIGdvdCBZWVlZLU1NLUREIGZyb20gZGFpbHlOb3Rlc1NldHRpbmdzLmZvcm1hdFxyXG4gICAgICAgIC8vIFVzZSBvd24gc2V0dGluZ3MgcGFuZWwgZm9yIG5vd1xyXG5cclxuICAgICAgICAvLyBDb2xsZWN0aW5nIGRhdGEgdG8gZGF0YU1hcCBmaXJzdFxyXG4gICAgICAgIGxldCBkYXRhTWFwOiBEYXRhTWFwID0gbmV3IE1hcCgpOyAvLyB7c3RyRGF0ZTogW3F1ZXJ5OiB2YWx1ZSwgLi4uXX1cclxuICAgICAgICBsZXQgcHJvY2Vzc0luZm8gPSBuZXcgQ29sbGVjdGluZ1Byb2Nlc3NJbmZvKCk7XHJcbiAgICAgICAgcHJvY2Vzc0luZm8uZmlsZVRvdGFsID0gZmlsZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICAvLyBDb2xsZWN0IGRhdGEgZnJvbSBmaWxlcywgZWFjaCBmaWxlIGhhcyBvbmUgZGF0YSBwb2ludCBmb3IgZWFjaCBxdWVyeVxyXG4gICAgICAgIGNvbnN0IGxvb3BGaWxlUHJvbWlzZXMgPSBmaWxlcy5tYXAoYXN5bmMgKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZmlsZS5iYXNlbmFtZSk7XHJcbiAgICAgICAgICAgIC8vIEdldCBmaWxlQ2FjaGUgYW5kIGNvbnRlbnRcclxuICAgICAgICAgICAgbGV0IGZpbGVDYWNoZTogQ2FjaGVkTWV0YWRhdGEgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgbmVlZEZpbGVDYWNoZSA9IHJlbmRlckluZm8ucXVlcmllcy5zb21lKChxKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdHlwZSA9IHEuZ2V0VHlwZSgpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldCA9IHEuZ2V0VGFyZ2V0KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gU2VhcmNoVHlwZS5Gcm9udG1hdHRlciB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFNlYXJjaFR5cGUuVGFnIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gU2VhcmNoVHlwZS5XaWtpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gU2VhcmNoVHlwZS5XaWtpTGluayB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFNlYXJjaFR5cGUuV2lraURpc3BsYXlcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKG5lZWRGaWxlQ2FjaGUpIHtcclxuICAgICAgICAgICAgICAgIGZpbGVDYWNoZSA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgY29udGVudDogc3RyaW5nID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IG5lZWRDb250ZW50ID0gcmVuZGVySW5mby5xdWVyaWVzLnNvbWUoKHEpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB0eXBlID0gcS5nZXRUeXBlKCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gcS5nZXRUYXJnZXQoKTtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICB0eXBlID09PSBTZWFyY2hUeXBlLlRhZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFNlYXJjaFR5cGUuVGV4dCB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFNlYXJjaFR5cGUuZHZGaWVsZCB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFNlYXJjaFR5cGUuVGFzayB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFNlYXJjaFR5cGUuVGFza0RvbmUgfHxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlID09PSBTZWFyY2hUeXBlLlRhc2tOb3REb25lXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gU2VhcmNoVHlwZS5GaWxlTWV0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID09PSBcIm51bVdvcmRzXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID09PSBcIm51bUNoYXJzXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID09PSBcIm51bVNlbnRlbmNlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChuZWVkQ29udGVudCkge1xyXG4gICAgICAgICAgICAgICAgY29udGVudCA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIucmVhZChmaWxlLnBhdGgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBHZXQgeFZhbHVlIGFuZCBhZGQgaXQgaW50byB4VmFsdWVNYXAgZm9yIGxhdGVyIHVzZVxyXG4gICAgICAgICAgICBsZXQgeFZhbHVlTWFwOiBYVmFsdWVNYXAgPSBuZXcgTWFwKCk7IC8vIHF1ZXJ5SWQ6IHhWYWx1ZSBmb3IgdGhpcyBmaWxlXHJcbiAgICAgICAgICAgIGxldCBza2lwVGhpc0ZpbGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby54RGF0YXNldCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHhEYXRhc2V0SWQgb2YgcmVuZGVySW5mby54RGF0YXNldCkge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYHhEYXRhc2V0SWQ6ICR7eERhdGFzZXRJZH1gKTtcclxuICAgICAgICAgICAgICAgIGlmICgheFZhbHVlTWFwLmhhcyh4RGF0YXNldElkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB4RGF0ZSA9IHdpbmRvdy5tb21lbnQoXCJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgdXNpbmcgZGF0ZSBpbiBmaWxlbmFtZSBhcyB4VmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgeERhdGUgPSBjb2xsZWN0aW5nLmdldERhdGVGcm9tRmlsZW5hbWUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh4RGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHhEYXRhc2V0UXVlcnkgPSByZW5kZXJJbmZvLnF1ZXJpZXNbeERhdGFzZXRJZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHhEYXRhc2V0UXVlcnkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHhEYXRhc2V0UXVlcnkuZ2V0VHlwZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNlYXJjaFR5cGUuRnJvbnRtYXR0ZXI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeERhdGUgPSBjb2xsZWN0aW5nLmdldERhdGVGcm9tRnJvbnRtYXR0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVDYWNoZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeERhdGFzZXRRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNlYXJjaFR5cGUuVGFnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRlID0gY29sbGVjdGluZy5nZXREYXRlRnJvbVRhZyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeERhdGFzZXRRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNlYXJjaFR5cGUuVGV4dDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0ZSA9IGNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21UZXh0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0YXNldFF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2VhcmNoVHlwZS5kdkZpZWxkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRlID0gY29sbGVjdGluZy5nZXREYXRlRnJvbUR2RmllbGQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRhc2V0UXVlcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTZWFyY2hUeXBlLkZpbGVNZXRhOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRlID0gY29sbGVjdGluZy5nZXREYXRlRnJvbUZpbGVNZXRhKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0YXNldFF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2VhcmNoVHlwZS5UYXNrOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTZWFyY2hUeXBlLlRhc2tEb25lOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTZWFyY2hUeXBlLlRhc2tOb3REb25lOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRlID0gY29sbGVjdGluZy5nZXREYXRlRnJvbVRhc2soXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRhc2V0UXVlcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXhEYXRlLmlzVmFsaWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkludmFsaWQgeERhdGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXBUaGlzRmlsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmZpbGVOb3RJbkZvcm1hdCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZmlsZSBcIiArIGZpbGUuYmFzZW5hbWUgKyBcIiBhY2NlcHRlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlckluZm8uc3RhcnREYXRlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGUgPCByZW5kZXJJbmZvLnN0YXJ0RGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBUaGlzRmlsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZmlsZU91dE9mRGF0ZVJhbmdlKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlckluZm8uZW5kRGF0ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRlID4gcmVuZGVySW5mby5lbmREYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFRoaXNGaWxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5maWxlT3V0T2ZEYXRlUmFuZ2UrKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFza2lwVGhpc0ZpbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRYVmFsdWUgfHw9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZU1hcC5zZXQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0YXNldElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVyLmRhdGVUb1N0cih4RGF0ZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5maWxlQXZhaWxhYmxlKys7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgbWluL21heCBkYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzSW5mby5maWxlQXZhaWxhYmxlID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLm1pbkRhdGUgPSB4RGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8ubWF4RGF0ZSA9IHhEYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGUgPCBwcm9jZXNzSW5mby5taW5EYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8ubWluRGF0ZSA9IHhEYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGUgPiBwcm9jZXNzSW5mby5tYXhEYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8ubWF4RGF0ZSA9IHhEYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNraXBUaGlzRmlsZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh4VmFsdWVNYXApO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgbWluRGF0ZTogJHttaW5EYXRlfWApO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgbWF4RGF0ZTogJHttYXhEYXRlfWApO1xyXG5cclxuICAgICAgICAgICAgLy8gTG9vcCBvdmVyIHF1ZXJpZXNcclxuICAgICAgICAgICAgbGV0IHlEYXRhc2V0UXVlcmllcyA9IHJlbmRlckluZm8ucXVlcmllcy5maWx0ZXIoKHEpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBxLmdldFR5cGUoKSAhPT0gU2VhcmNoVHlwZS5UYWJsZSAmJiAhcS51c2VkQXNYRGF0YXNldDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHlEYXRhc2V0UXVlcmllcyk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBsb29wUXVlcnlQcm9taXNlcyA9IHlEYXRhc2V0UXVlcmllcy5tYXAoYXN5bmMgKHF1ZXJ5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBHZXQgeFZhbHVlIGZyb20gZmlsZSBpZiB4RGF0YXNldCBhc3NpZ25lZFxyXG4gICAgICAgICAgICAgICAgLy8gaWYgKHJlbmRlckluZm8ueERhdGFzZXQgIT09IG51bGwpXHJcbiAgICAgICAgICAgICAgICAvLyBsZXQgeERhdGFzZXRJZCA9IHJlbmRlckluZm8ueERhdGFzZXQ7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVyeSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJTZWFyY2ggZnJvbnRtYXR0ZXIgdGFnc1wiKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaWxlQ2FjaGUgJiYgcXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLlRhZykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBmcm9udG1hdHRlciB0YWdzLCBhbGxvdyBzaW1wbGUgdGFnIG9ubHlcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZ290QW55VmFsdWUgPSBjb2xsZWN0aW5nLmNvbGxlY3REYXRhRnJvbUZyb250bWF0dGVyVGFnKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlQ2FjaGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTWFwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVNYXBcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWVZhbHVlIHx8PSBnb3RBbnlWYWx1ZTtcclxuICAgICAgICAgICAgICAgIH0gLy8gU2VhcmNoIGZyb250bWF0dGVyIHRhZ3NcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlNlYXJjaCBmcm9udG1hdHRlciBrZXlzXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVDYWNoZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5Gcm9udG1hdHRlciAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmdldFRhcmdldCgpICE9PSBcInRhZ3NcIlxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdvdEFueVZhbHVlID0gY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21Gcm9udG1hdHRlcktleShcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUNhY2hlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlTWFwXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5nb3RBbnlWYWxpZFlWYWx1ZSB8fD0gZ290QW55VmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9IC8vIGNvbnNvbGUubG9nKFwiU2VhcmNoIGZyb250bWF0dGVyIGtleXNcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJTZWFyY2ggd2lraSBsaW5rc1wiKTtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBmaWxlQ2FjaGUgJiZcclxuICAgICAgICAgICAgICAgICAgICAocXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLldpa2kgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLldpa2lMaW5rIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5XaWtpRGlzcGxheSlcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBnb3RBbnlWYWx1ZSA9IGNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tV2lraShcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUNhY2hlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlTWFwXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5nb3RBbnlWYWxpZFlWYWx1ZSB8fD0gZ290QW55VmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJTZWFyY2ggaW5saW5lIHRhZ3NcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudCAmJiBxdWVyeS5nZXRUeXBlKCkgPT09IFNlYXJjaFR5cGUuVGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdvdEFueVZhbHVlID0gY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21JbmxpbmVUYWcoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTWFwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVNYXBcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWVZhbHVlIHx8PSBnb3RBbnlWYWx1ZTtcclxuICAgICAgICAgICAgICAgIH0gLy8gU2VhcmNoIGlubGluZSB0YWdzXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJTZWFyY2ggVGV4dFwiKTtcclxuICAgICAgICAgICAgICAgIGlmIChjb250ZW50ICYmIHF1ZXJ5LmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5UZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdvdEFueVZhbHVlID0gY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21UZXh0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlTWFwXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5nb3RBbnlWYWxpZFlWYWx1ZSB8fD0gZ290QW55VmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9IC8vIFNlYXJjaCB0ZXh0XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJTZWFyY2ggRmlsZU1ldGFcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLkZpbGVNZXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdvdEFueVZhbHVlID0gY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21GaWxlTWV0YShcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFNYXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZU1hcFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRZVmFsdWUgfHw9IGdvdEFueVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSAvLyBTZWFyY2ggRmlsZU1ldGFcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlNlYXJjaCBkdkZpZWxkXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQgJiYgcXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLmR2RmllbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZ290QW55VmFsdWUgPSBjb2xsZWN0aW5nLmNvbGxlY3REYXRhRnJvbUR2RmllbGQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTWFwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVNYXBcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWVZhbHVlIHx8PSBnb3RBbnlWYWx1ZTtcclxuICAgICAgICAgICAgICAgIH0gLy8gc2VhcmNoIGR2RmllbGRcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlNlYXJjaCBUYXNrXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgJiZcclxuICAgICAgICAgICAgICAgICAgICAocXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLlRhc2sgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLlRhc2tEb25lIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5UYXNrTm90RG9uZSlcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBnb3RBbnlWYWx1ZSA9IGNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tVGFzayhcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFNYXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZU1hcFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRZVmFsdWUgfHw9IGdvdEFueVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSAvLyBzZWFyY2ggVGFza1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwobG9vcFF1ZXJ5UHJvbWlzZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGxvb3BGaWxlUHJvbWlzZXMpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGRhdGFNYXApO1xyXG5cclxuICAgICAgICAvLyBDb2xsZWN0IGRhdGEgZnJvbSBhIGZpbGUsIG9uZSBmaWxlIGNvbnRhaW5zIGZ1bGwgZGF0YXNldFxyXG4gICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdERhdGFGcm9tVGFibGUoZGF0YU1hcCwgcmVuZGVySW5mbywgcHJvY2Vzc0luZm8pO1xyXG4gICAgICAgIGlmIChwcm9jZXNzSW5mby5lcnJvck1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRXJyb3JNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZXJyb3JNZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgY2FudmFzLFxyXG4gICAgICAgICAgICAgICAgZWxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobWluRGF0ZSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobWF4RGF0ZSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coZGF0YU1hcCk7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGRhdGUgcmFuZ2VcclxuICAgICAgICAvLyBtaW5EYXRlIGFuZCBtYXhEYXRlIGFyZSBjb2xsZWN0ZWQgd2l0aG91dCBrbm93aW5nIHN0YXJ0RGF0ZSBhbmQgZW5kRGF0ZVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBmaWxlVG90YWw6ICR7cHJvY2Vzc0luZm8uZmlsZVRvdGFsfWApO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBmaWxlQXZhaWxhYmxlOiAke3Byb2Nlc3NJbmZvLmZpbGVBdmFpbGFibGV9YCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coYGZpbGVOb3RJbkZvcm1hdDogJHtwcm9jZXNzSW5mby5maWxlTm90SW5Gb3JtYXR9YCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coYGZpbGVPdXRPZkRhdGVSYW5nZTogJHtwcm9jZXNzSW5mby5maWxlT3V0T2ZEYXRlUmFuZ2V9YCk7XHJcbiAgICAgICAgbGV0IGRhdGVFcnJvck1lc3NhZ2UgPSBcIlwiO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgIXByb2Nlc3NJbmZvLm1pbkRhdGUuaXNWYWxpZCgpIHx8XHJcbiAgICAgICAgICAgICFwcm9jZXNzSW5mby5tYXhEYXRlLmlzVmFsaWQoKSB8fFxyXG4gICAgICAgICAgICBwcm9jZXNzSW5mby5maWxlQXZhaWxhYmxlID09PSAwIHx8XHJcbiAgICAgICAgICAgICFwcm9jZXNzSW5mby5nb3RBbnlWYWxpZFhWYWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBkYXRlRXJyb3JNZXNzYWdlID0gYE5vIHZhbGlkIGRhdGUgYXMgWCB2YWx1ZSBmb3VuZCBpbiBub3Rlc2A7XHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzSW5mby5maWxlT3V0T2ZEYXRlUmFuZ2UgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRlRXJyb3JNZXNzYWdlICs9IGBcXG4ke3Byb2Nlc3NJbmZvLmZpbGVPdXRPZkRhdGVSYW5nZX0gZmlsZXMgYXJlIG91dCBvZiB0aGUgZGF0ZSByYW5nZS5gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzSW5mby5maWxlTm90SW5Gb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgIGRhdGVFcnJvck1lc3NhZ2UgKz0gYFxcbiR7cHJvY2Vzc0luZm8uZmlsZU5vdEluRm9ybWF0fSBmaWxlcyBhcmUgbm90IGluIHRoZSByaWdodCBmb3JtYXQuYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVuZGVySW5mby5zdGFydERhdGUgPT09IG51bGwgJiYgcmVuZGVySW5mby5lbmREYXRlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIE5vIGRhdGUgYXJndW1lbnRzXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uc3RhcnREYXRlID0gcHJvY2Vzc0luZm8ubWluRGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmVuZERhdGUgPSBwcm9jZXNzSW5mby5tYXhEYXRlLmNsb25lKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgcmVuZGVySW5mby5zdGFydERhdGUgIT09IG51bGwgJiZcclxuICAgICAgICAgICAgcmVuZGVySW5mby5lbmREYXRlID09PSBudWxsXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJJbmZvLnN0YXJ0RGF0ZSA8IHByb2Nlc3NJbmZvLm1heERhdGUpIHtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZW5kRGF0ZSA9IHByb2Nlc3NJbmZvLm1heERhdGUuY2xvbmUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRhdGVFcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgZGF0ZSByYW5nZVwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgcmVuZGVySW5mby5lbmREYXRlICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uc3RhcnREYXRlID09PSBudWxsXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJJbmZvLmVuZERhdGUgPiBwcm9jZXNzSW5mby5taW5EYXRlKSB7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnN0YXJ0RGF0ZSA9IHByb2Nlc3NJbmZvLm1pbkRhdGUuY2xvbmUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRhdGVFcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgZGF0ZSByYW5nZVwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gc3RhcnREYXRlIGFuZCBlbmREYXRlIGFyZSB2YWxpZFxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAocmVuZGVySW5mby5zdGFydERhdGUgPCBwcm9jZXNzSW5mby5taW5EYXRlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby5lbmREYXRlIDwgcHJvY2Vzc0luZm8ubWluRGF0ZSkgfHxcclxuICAgICAgICAgICAgICAgIChyZW5kZXJJbmZvLnN0YXJ0RGF0ZSA+IHByb2Nlc3NJbmZvLm1heERhdGUgJiZcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmVuZERhdGUgPiBwcm9jZXNzSW5mby5tYXhEYXRlKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGRhdGVFcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgZGF0ZSByYW5nZVwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkYXRlRXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9yTWVzc2FnZShkYXRlRXJyb3JNZXNzYWdlLCBjYW52YXMsIGVsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5zdGFydERhdGUpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uZW5kRGF0ZSk7XHJcblxyXG4gICAgICAgIGlmICghcHJvY2Vzc0luZm8uZ290QW55VmFsaWRZVmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRXJyb3JNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgXCJObyB2YWxpZCBZIHZhbHVlIGZvdW5kIGluIG5vdGVzXCIsXHJcbiAgICAgICAgICAgICAgICBjYW52YXMsXHJcbiAgICAgICAgICAgICAgICBlbFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVzaGFwZSBkYXRhIGZvciByZW5kZXJpbmdcclxuICAgICAgICBsZXQgZGF0YXNldHMgPSBuZXcgRGF0YXNldHMocmVuZGVySW5mby5zdGFydERhdGUsIHJlbmRlckluZm8uZW5kRGF0ZSk7XHJcbiAgICAgICAgZm9yIChsZXQgcXVlcnkgb2YgcmVuZGVySW5mby5xdWVyaWVzKSB7XHJcbiAgICAgICAgICAgIC8vIFdlIHN0aWxsIGNyZWF0ZSBhIGRhdGFzZXQgZm9yIHhEYXRhc2V0LFxyXG4gICAgICAgICAgICAvLyB0byBrZWVwIHRoZSBzZXF1ZW5jZSBhbmQgb3JkZXIgb2YgdGFyZ2V0c1xyXG4gICAgICAgICAgICBsZXQgZGF0YXNldCA9IGRhdGFzZXRzLmNyZWF0ZURhdGFzZXQocXVlcnksIHJlbmRlckluZm8pO1xyXG4gICAgICAgICAgICAvLyBBZGQgbnVtYmVyIG9mIHRhcmdldHMgdG8gdGhlIGRhdGFzZXRcclxuICAgICAgICAgICAgLy8gTnVtYmVyIG9mIHRhcmdldHMgaGFzIGJlZW4gYWNjdW11bGF0ZWQgd2hpbGUgY29sbGVjdGluZyBkYXRhXHJcbiAgICAgICAgICAgIGRhdGFzZXQuYWRkTnVtVGFyZ2V0cyhxdWVyeS5nZXROdW1UYXJnZXRzKCkpO1xyXG4gICAgICAgICAgICBmb3IgKFxyXG4gICAgICAgICAgICAgICAgbGV0IGN1ckRhdGUgPSByZW5kZXJJbmZvLnN0YXJ0RGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgICAgY3VyRGF0ZSA8PSByZW5kZXJJbmZvLmVuZERhdGU7XHJcbiAgICAgICAgICAgICAgICBjdXJEYXRlLmFkZCgxLCBcImRheXNcIilcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhjdXJEYXRlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBkYXRhTWFwIC0tPiB7ZGF0ZTogW3F1ZXJ5OiB2YWx1ZSwgLi4uXX1cclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBkYXRhTWFwLmhhcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVyLmRhdGVUb1N0cihjdXJEYXRlLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHF1ZXJ5VmFsdWVQYWlycyA9IGRhdGFNYXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldChoZWxwZXIuZGF0ZVRvU3RyKGN1ckRhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHBhaXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYWlyLnF1ZXJ5LmVxdWFsVG8ocXVlcnkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnlWYWx1ZVBhaXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWVyZ2UgdmFsdWVzIG9mIHRoZSBzYW1lIGRheSBzYW1lIHF1ZXJ5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kUGFpciA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRQYWlyIDwgcXVlcnlWYWx1ZVBhaXJzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZFBhaXIrK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2xsZWN0ZWQgPSBxdWVyeVZhbHVlUGFpcnNbaW5kUGFpcl0udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyLmlzTnVtYmVyKGNvbGxlY3RlZCkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhTnVtYmVyLmlzTmFOKGNvbGxlY3RlZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvbGxlY3RlZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSBjb2xsZWN0ZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGhhc1ZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2codmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuc2V0VmFsdWUoY3VyRGF0ZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlbmRlckluZm8uZGF0YXNldHMgPSBkYXRhc2V0cztcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmRhdGFzZXRzKTtcclxuXHJcbiAgICAgICAgbGV0IHJldFJlbmRlciA9IHJlbmRlcmluZy5yZW5kZXIoY2FudmFzLCByZW5kZXJJbmZvKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldFJlbmRlciA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvck1lc3NhZ2UocmV0UmVuZGVyLCBjYW52YXMsIGVsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsLmFwcGVuZENoaWxkKGNhbnZhcyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVE9ETzogcmVtb3ZlIHRoaXMuYXBwIGFuZCBtb3ZlIHRvIGNvbGxlY3RpbmcudHNcclxuICAgIGFzeW5jIGNvbGxlY3REYXRhRnJvbVRhYmxlKFxyXG4gICAgICAgIGRhdGFNYXA6IERhdGFNYXAsXHJcbiAgICAgICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgICAgICBwcm9jZXNzSW5mbzogQ29sbGVjdGluZ1Byb2Nlc3NJbmZvXHJcbiAgICApIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImNvbGxlY3REYXRhRnJvbVRhYmxlXCIpO1xyXG5cclxuICAgICAgICBsZXQgdGFibGVRdWVyaWVzID0gcmVuZGVySW5mby5xdWVyaWVzLmZpbHRlcihcclxuICAgICAgICAgICAgKHEpID0+IHEuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLlRhYmxlXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0YWJsZVF1ZXJpZXMpO1xyXG4gICAgICAgIC8vIFNlcGFyYXRlIHF1ZXJpZXMgYnkgdGFibGVzIGFuZCB4RGF0YXNldHMveURhdGFzZXRzXHJcbiAgICAgICAgbGV0IHRhYmxlczogQXJyYXk8VGFibGVEYXRhPiA9IFtdO1xyXG4gICAgICAgIGxldCB0YWJsZUZpbGVOb3RGb3VuZCA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IHF1ZXJ5IG9mIHRhYmxlUXVlcmllcykge1xyXG4gICAgICAgICAgICBsZXQgZmlsZVBhdGggPSBxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKTtcclxuICAgICAgICAgICAgbGV0IGZpbGUgPSB0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoXHJcbiAgICAgICAgICAgICAgICBub3JtYWxpemVQYXRoKGZpbGVQYXRoICsgXCIubWRcIilcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFmaWxlIHx8ICEoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgdGFibGVGaWxlTm90Rm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCB0YWJsZUluZGV4ID0gcXVlcnkuZ2V0QWNjZXNzb3IoKTtcclxuICAgICAgICAgICAgbGV0IGlzWCA9IHF1ZXJ5LnVzZWRBc1hEYXRhc2V0O1xyXG5cclxuICAgICAgICAgICAgbGV0IHRhYmxlID0gdGFibGVzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAodCkgPT4gdC5maWxlUGF0aCA9PT0gZmlsZVBhdGggJiYgdC50YWJsZUluZGV4ID09PSB0YWJsZUluZGV4XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmICh0YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzWCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlLnhEYXRhc2V0ID0gcXVlcnk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlLnlEYXRhc2V0cy5wdXNoKHF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCB0YWJsZURhdGEgPSBuZXcgVGFibGVEYXRhKGZpbGVQYXRoLCB0YWJsZUluZGV4KTtcclxuICAgICAgICAgICAgICAgIGlmIChpc1gpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YWJsZURhdGEueERhdGFzZXQgPSBxdWVyeTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFibGVEYXRhLnlEYXRhc2V0cy5wdXNoKHF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRhYmxlcy5wdXNoKHRhYmxlRGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGFibGVzKTtcclxuXHJcbiAgICAgICAgaWYgKHRhYmxlRmlsZU5vdEZvdW5kKSB7XHJcbiAgICAgICAgICAgIHByb2Nlc3NJbmZvLmVycm9yTWVzc2FnZSA9IFwiRmlsZSBjb250YWluaW5nIHRhYmxlcyBub3QgZm91bmRcIjtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgdGFibGVEYXRhIG9mIHRhYmxlcykge1xyXG4gICAgICAgICAgICAvL2V4dHJhY3QgeERhdGFzZXQgZnJvbSBxdWVyeVxyXG4gICAgICAgICAgICBsZXQgeERhdGFzZXRRdWVyeSA9IHRhYmxlRGF0YS54RGF0YXNldDtcclxuICAgICAgICAgICAgaWYgKCF4RGF0YXNldFF1ZXJ5KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBtaXNzaW5nIHhEYXRhc2V0XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgeURhdGFzZXRRdWVyaWVzID0gdGFibGVEYXRhLnlEYXRhc2V0cztcclxuICAgICAgICAgICAgbGV0IGZpbGVQYXRoID0geERhdGFzZXRRdWVyeS5nZXRQYXJlbnRUYXJnZXQoKTtcclxuICAgICAgICAgICAgbGV0IHRhYmxlSW5kZXggPSB4RGF0YXNldFF1ZXJ5LmdldEFjY2Vzc29yKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBHZXQgdGFibGUgdGV4dFxyXG4gICAgICAgICAgICBsZXQgdGV4dFRhYmxlID0gXCJcIjtcclxuICAgICAgICAgICAgZmlsZVBhdGggPSBmaWxlUGF0aCArIFwiLm1kXCI7XHJcbiAgICAgICAgICAgIGxldCBmaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKFxyXG4gICAgICAgICAgICAgICAgbm9ybWFsaXplUGF0aChmaWxlUGF0aClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGZpbGUgJiYgZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5maWxlQXZhaWxhYmxlKys7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIucmVhZChmaWxlLnBhdGgpO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coY29udGVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gVGVzdCB0aGlzIGluIFJlZ2V4MTAxXHJcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgbm90LXNvLXN0cmljdCB0YWJsZSBzZWxlY3RvclxyXG4gICAgICAgICAgICAgICAgLy8gKChcXHI/XFxuKXsyfXxeKShbXlxcclxcbl0qXFx8W15cXHJcXG5dKihcXHI/XFxuKT8pKyg/PShcXHI/XFxuKXsyfXwkKVxyXG4gICAgICAgICAgICAgICAgbGV0IHN0ck1EVGFibGVSZWdleCA9XHJcbiAgICAgICAgICAgICAgICAgICAgXCIoKFxcXFxyP1xcXFxuKXsyfXxeKShbXlxcXFxyXFxcXG5dKlxcXFx8W15cXFxcclxcXFxuXSooXFxcXHI/XFxcXG4pPykrKD89KFxcXFxyP1xcXFxuKXsyfXwkKVwiO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc3RyTURUYWJsZVJlZ2V4KTtcclxuICAgICAgICAgICAgICAgIGxldCBtZFRhYmxlUmVnZXggPSBuZXcgUmVnRXhwKHN0ck1EVGFibGVSZWdleCwgXCJnbVwiKTtcclxuICAgICAgICAgICAgICAgIGxldCBtYXRjaDtcclxuICAgICAgICAgICAgICAgIGxldCBpbmRUYWJsZSA9IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKChtYXRjaCA9IG1kVGFibGVSZWdleC5leGVjKGNvbnRlbnQpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG1hdGNoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kVGFibGUgPT09IHRhYmxlSW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFRhYmxlID0gbWF0Y2hbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpbmRUYWJsZSsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gZmlsZSBub3QgZXhpc3RzXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0ZXh0VGFibGUpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHRhYmxlTGluZXMgPSB0ZXh0VGFibGUuc3BsaXQoL1xccj9cXG4vKTtcclxuICAgICAgICAgICAgdGFibGVMaW5lcyA9IHRhYmxlTGluZXMuZmlsdGVyKChsaW5lKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbGluZSAhPT0gXCJcIjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxldCBudW1Db2x1bW5zID0gMDtcclxuICAgICAgICAgICAgbGV0IG51bURhdGFSb3dzID0gMDtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGFibGVMaW5lcyk7XHJcblxyXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgaXQgaXMgYSB2YWxpZCB0YWJsZSBmaXJzdFxyXG4gICAgICAgICAgICBpZiAodGFibGVMaW5lcy5sZW5ndGggPj0gMikge1xyXG4gICAgICAgICAgICAgICAgLy8gTXVzdCBoYXZlIGhlYWRlciBhbmQgc2VwYXJhdG9yIGxpbmVcclxuICAgICAgICAgICAgICAgIGxldCBoZWFkZXJMaW5lID0gdGFibGVMaW5lcy5zaGlmdCgpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIGhlYWRlckxpbmUgPSBoZWxwZXIudHJpbUJ5Q2hhcihoZWFkZXJMaW5lLCBcInxcIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhZGVyU3BsaXR0ZWQgPSBoZWFkZXJMaW5lLnNwbGl0KFwifFwiKTtcclxuICAgICAgICAgICAgICAgIG51bUNvbHVtbnMgPSBoZWFkZXJTcGxpdHRlZC5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHNlcExpbmUgPSB0YWJsZUxpbmVzLnNoaWZ0KCkudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgc2VwTGluZSA9IGhlbHBlci50cmltQnlDaGFyKHNlcExpbmUsIFwifFwiKTtcclxuICAgICAgICAgICAgICAgIGxldCBzcGVwTGluZVNwbGl0dGVkID0gc2VwTGluZS5zcGxpdChcInxcIik7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjb2wgb2Ygc3BlcExpbmVTcGxpdHRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghY29sLmluY2x1ZGVzKFwiLVwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gTm90IGEgdmFsaWQgc2VwXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG51bURhdGFSb3dzID0gdGFibGVMaW5lcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChudW1EYXRhUm93cyA9PSAwKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdldCB4IGRhdGFcclxuICAgICAgICAgICAgbGV0IGNvbHVtblhEYXRhc2V0ID0geERhdGFzZXRRdWVyeS5nZXRBY2Nlc3NvcigxKTtcclxuICAgICAgICAgICAgaWYgKGNvbHVtblhEYXRhc2V0ID49IG51bUNvbHVtbnMpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBsZXQgeFZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgbGV0IGluZExpbmUgPSAwO1xyXG4gICAgICAgICAgICBmb3IgKGxldCB0YWJsZUxpbmUgb2YgdGFibGVMaW5lcykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGFSb3cgPSBoZWxwZXIudHJpbUJ5Q2hhcih0YWJsZUxpbmUudHJpbSgpLCBcInxcIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YVJvd1NwbGl0dGVkID0gZGF0YVJvdy5zcGxpdChcInxcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uWERhdGFzZXQgPCBkYXRhUm93U3BsaXR0ZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBkYXRhUm93U3BsaXR0ZWRbY29sdW1uWERhdGFzZXRdLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0ZSA9IGhlbHBlci5zdHJUb0RhdGUoZGF0YSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGUuaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZXMucHVzaChkYXRlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFwcm9jZXNzSW5mby5taW5EYXRlLmlzVmFsaWQoKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIXByb2Nlc3NJbmZvLm1heERhdGUuaXNWYWxpZCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8ubWluRGF0ZSA9IGRhdGUuY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLm1heERhdGUgPSBkYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZSA8IHByb2Nlc3NJbmZvLm1pbkRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5taW5EYXRlID0gZGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGUgPiBwcm9jZXNzSW5mby5tYXhEYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8ubWF4RGF0ZSA9IGRhdGUuY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZXMucHVzaChudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHhWYWx1ZXMucHVzaChudWxsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGluZExpbmUrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh4VmFsdWVzKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHhWYWx1ZXMuZXZlcnkoKHYpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdiA9PT0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgICAgICAgICBcIk5vIHZhbGlkIGRhdGUgYXMgWCB2YWx1ZSBmb3VuZCBpbiB0YWJsZVwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRYVmFsdWUgfHw9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGdldCB5IGRhdGFcclxuICAgICAgICAgICAgZm9yIChsZXQgeURhdGFzZXRRdWVyeSBvZiB5RGF0YXNldFF1ZXJpZXMpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5PZkludGVyZXN0ID0geURhdGFzZXRRdWVyeS5nZXRBY2Nlc3NvcigxKTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBjb2x1bW5PZkludGVyZXN0OiAke2NvbHVtbk9mSW50ZXJlc3R9LCBudW1Db2x1bW5zOiAke251bUNvbHVtbnN9YCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uT2ZJbnRlcmVzdCA+PSBudW1Db2x1bW5zKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaW5kTGluZSA9IDA7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB0YWJsZUxpbmUgb2YgdGFibGVMaW5lcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhUm93ID0gaGVscGVyLnRyaW1CeUNoYXIodGFibGVMaW5lLnRyaW0oKSwgXCJ8XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhUm93U3BsaXR0ZWQgPSBkYXRhUm93LnNwbGl0KFwifFwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uT2ZJbnRlcmVzdCA8IGRhdGFSb3dTcGxpdHRlZC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBkYXRhUm93U3BsaXR0ZWRbY29sdW1uT2ZJbnRlcmVzdF0udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3BsaXR0ZWQgPSBkYXRhLnNwbGl0KHlEYXRhc2V0UXVlcnkuZ2V0U2VwYXJhdG9yKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhzcGxpdHRlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3BsaXR0ZWQpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmV0UGFyc2UgPSBoZWxwZXIucGFyc2VGbG9hdEZyb21BbnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0ZWRbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby50ZXh0VmFsdWVNYXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXRQYXJzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0UGFyc2UudmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0UGFyc2UudHlwZSA9PT0gVmFsdWVUeXBlLlRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeURhdGFzZXRRdWVyeS52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuVGltZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gcmV0UGFyc2UudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRMaW5lIDwgeFZhbHVlcy5sZW5ndGggJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlc1tpbmRMaW5lXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5nb3RBbnlWYWxpZFlWYWx1ZSB8fD0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGluZy5hZGRUb0RhdGFNYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTWFwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVyLmRhdGVUb1N0cihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVzW2luZExpbmVdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlEYXRhc2V0UXVlcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dGVkLmxlbmd0aCA+IHlEYXRhc2V0UXVlcnkuZ2V0QWNjZXNzb3IoMikgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlEYXRhc2V0UXVlcnkuZ2V0QWNjZXNzb3IoMikgPj0gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3BsaXR0ZWRQYXJ0ID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHRlZFt5RGF0YXNldFF1ZXJ5LmdldEFjY2Vzc29yKDIpXS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhzcGxpdHRlZFBhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldFBhcnNlID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dGVkUGFydCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnRleHRWYWx1ZU1hcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJldFBhcnNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS52YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS50eXBlID09PSBWYWx1ZVR5cGUuVGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5RGF0YXNldFF1ZXJ5LnZhbHVlVHlwZSA9IFZhbHVlVHlwZS5UaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHJldFBhcnNlLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kTGluZSA8IHhWYWx1ZXMubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZXNbaW5kTGluZV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRZVmFsdWUgfHw9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3RpbmcuYWRkVG9EYXRhTWFwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5kYXRlVG9TdHIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlc1tpbmRMaW5lXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5RGF0YXNldFF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGluZExpbmUrKztcclxuICAgICAgICAgICAgICAgIH0gLy8gTG9vcCBvdmVyIHRhYmxlTGluZXNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRFZGl0b3IoKTogRWRpdG9yIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KS5lZGl0b3I7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQ29kZUJsb2NrKG91dHB1dFR5cGU6IEdyYXBoVHlwZSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmFjdGl2ZUxlYWYudmlldztcclxuXHJcbiAgICAgICAgaWYgKCEoY3VycmVudFZpZXcgaW5zdGFuY2VvZiBNYXJrZG93blZpZXcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjb2RlYmxvY2tUb0luc2VydCA9IFwiXCI7XHJcbiAgICAgICAgc3dpdGNoIChvdXRwdXRUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgR3JhcGhUeXBlLkxpbmU6XHJcbiAgICAgICAgICAgICAgICBjb2RlYmxvY2tUb0luc2VydCA9IGBcXGBcXGBcXGAgdHJhY2tlclxyXG5zZWFyY2hUeXBlOiB0YWdcclxuc2VhcmNoVGFyZ2V0OiB0YWdOYW1lXHJcbmZvbGRlcjogL1xyXG5zdGFydERhdGU6XHJcbmVuZERhdGU6XHJcbmxpbmU6XHJcbiAgICB0aXRsZTogXCJMaW5lIENoYXJ0XCJcclxuICAgIHhBeGlzTGFiZWw6IERhdGVcclxuICAgIHlBeGlzTGFiZWw6IFZhbHVlXHJcblxcYFxcYFxcYGA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBHcmFwaFR5cGUuQmFyOlxyXG4gICAgICAgICAgICAgICAgY29kZWJsb2NrVG9JbnNlcnQgPSBgXFxgXFxgXFxgIHRyYWNrZXJcclxuc2VhcmNoVHlwZTogdGFnXHJcbnNlYXJjaFRhcmdldDogdGFnTmFtZVxyXG5mb2xkZXI6IC9cclxuc3RhcnREYXRlOlxyXG5lbmREYXRlOlxyXG5iYXI6XHJcbiAgICB0aXRsZTogXCJCYXIgQ2hhcnRcIlxyXG4gICAgeEF4aXNMYWJlbDogRGF0ZVxyXG4gICAgeUF4aXNMYWJlbDogVmFsdWVcclxuXFxgXFxgXFxgYDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEdyYXBoVHlwZS5TdW1tYXJ5OlxyXG4gICAgICAgICAgICAgICAgY29kZWJsb2NrVG9JbnNlcnQgPSBgXFxgXFxgXFxgIHRyYWNrZXJcclxuc2VhcmNoVHlwZTogdGFnXHJcbnNlYXJjaFRhcmdldDogdGFnTmFtZVxyXG5mb2xkZXI6IC9cclxuc3RhcnREYXRlOlxyXG5lbmREYXRlOlxyXG5zdW1tYXJ5OlxyXG4gICAgdGVtcGxhdGU6IFwiQXZlcmFnZSB2YWx1ZSBvZiB0YWdOYW1lIGlzIHt7YXZlcmFnZX19XCJcclxuICAgIHN0eWxlOiBcImNvbG9yOndoaXRlO1wiXHJcblxcYFxcYFxcYGA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvZGVibG9ja1RvSW5zZXJ0ICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGxldCB0ZXh0SW5zZXJ0ZWQgPSB0aGlzLmluc2VydFRvTmV4dExpbmUoY29kZWJsb2NrVG9JbnNlcnQpO1xyXG4gICAgICAgICAgICBpZiAoIXRleHRJbnNlcnRlZCkge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGluc2VydFRvTmV4dExpbmUodGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IGVkaXRvciA9IHRoaXMuZ2V0RWRpdG9yKCk7XHJcblxyXG4gICAgICAgIGlmIChlZGl0b3IpIHtcclxuICAgICAgICAgICAgbGV0IGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3IoKTtcclxuICAgICAgICAgICAgbGV0IGxpbmVOdW1iZXIgPSBjdXJzb3IubGluZTtcclxuICAgICAgICAgICAgbGV0IGxpbmUgPSBlZGl0b3IuZ2V0TGluZShsaW5lTnVtYmVyKTtcclxuXHJcbiAgICAgICAgICAgIGN1cnNvci5jaCA9IGxpbmUubGVuZ3RoO1xyXG4gICAgICAgICAgICBlZGl0b3Iuc2V0U2VsZWN0aW9uKGN1cnNvcik7XHJcbiAgICAgICAgICAgIGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKFwiXFxuXCIgKyB0ZXh0KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbiJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInZhbHVlIiwic3RlcCIsIm5leHQiLCJlIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJkb25lIiwidGhlbiIsImFwcGx5IiwiYSIsImIiLCJOYU4iLCJmIiwiZGVsdGEiLCJjb21wYXJlIiwibGVmdCIsIngiLCJsbyIsImhpIiwibGVuZ3RoIiwibWlkIiwiZCIsImFzY2VuZGluZyIsImFzY2VuZGluZ0NvbXBhcmF0b3IiLCJjZW50ZXIiLCJpIiwicmlnaHQiLCJiaXNlY3RSaWdodCIsImJpc2VjdG9yIiwiZTEwIiwiTWF0aCIsInNxcnQiLCJlNSIsImUyIiwidGlja0luY3JlbWVudCIsInN0YXJ0Iiwic3RvcCIsImNvdW50IiwibWF4IiwicG93ZXIiLCJmbG9vciIsImxvZyIsIkxOMTAiLCJlcnJvciIsInBvdyIsInRpY2tTdGVwIiwic3RlcDAiLCJhYnMiLCJzdGVwMSIsInZhbHVlcyIsInZhbHVlb2YiLCJ1bmRlZmluZWQiLCJpbmRleCIsIm1pbiIsInF1aWNrc2VsZWN0IiwiYXJyYXkiLCJrIiwibiIsIm0iLCJ6IiwicyIsImV4cCIsInNkIiwidCIsImoiLCJzd2FwIiwicXVhbnRpbGUiLCJwIiwiRmxvYXQ2NEFycmF5IiwiZnJvbSIsIm51bWJlcnMiLCJpMCIsInZhbHVlMCIsInN1YmFycmF5IiwiYXJndW1lbnRzIiwiY2VpbCIsInJhbmdlIiwiQXJyYXkiLCJzdW0iLCJzbGljZSIsInByb3RvdHlwZSIsInRyYW5zbGF0ZVgiLCJ0cmFuc2xhdGVZIiwieSIsIm51bWJlciIsInNjYWxlIiwib2Zmc2V0IiwiYmFuZHdpZHRoIiwicm91bmQiLCJlbnRlcmluZyIsInRoaXMiLCJfX2F4aXMiLCJheGlzIiwib3JpZW50IiwidGlja0FyZ3VtZW50cyIsInRpY2tWYWx1ZXMiLCJ0aWNrRm9ybWF0IiwidGlja1NpemVJbm5lciIsInRpY2tTaXplT3V0ZXIiLCJ0aWNrUGFkZGluZyIsIndpbmRvdyIsImRldmljZVBpeGVsUmF0aW8iLCJ0cmFuc2Zvcm0iLCJjb250ZXh0IiwidGlja3MiLCJkb21haW4iLCJmb3JtYXQiLCJpZGVudGl0eSIsInNwYWNpbmciLCJyYW5nZTAiLCJyYW5nZTEiLCJwb3NpdGlvbiIsImNvcHkiLCJzZWxlY3Rpb24iLCJwYXRoIiwic2VsZWN0QWxsIiwiZGF0YSIsInRpY2siLCJvcmRlciIsInRpY2tFeGl0IiwiZXhpdCIsInRpY2tFbnRlciIsImVudGVyIiwiYXBwZW5kIiwiYXR0ciIsImxpbmUiLCJzZWxlY3QiLCJ0ZXh0IiwibWVyZ2UiLCJpbnNlcnQiLCJ0cmFuc2l0aW9uIiwiaXNGaW5pdGUiLCJnZXRBdHRyaWJ1dGUiLCJwYXJlbnROb2RlIiwicmVtb3ZlIiwiZmlsdGVyIiwiZWFjaCIsIl8iLCJjYWxsIiwidGlja1NpemUiLCJheGlzQm90dG9tIiwiYXhpc0xlZnQiLCJub29wIiwiZGlzcGF0Y2giLCJ0ZXN0IiwiRXJyb3IiLCJEaXNwYXRjaCIsInBhcnNlVHlwZW5hbWVzIiwidHlwZW5hbWVzIiwidHlwZXMiLCJ0cmltIiwic3BsaXQiLCJtYXAiLCJuYW1lIiwiaW5kZXhPZiIsImhhc093blByb3BlcnR5IiwidHlwZSIsImdldCIsImMiLCJzZXQiLCJjYWxsYmFjayIsImNvbmNhdCIsInB1c2giLCJjb25zdHJ1Y3RvciIsIm9uIiwidHlwZW5hbWUiLCJUIiwidGhhdCIsImFyZ3MiLCJ4aHRtbCIsInN2ZyIsInhsaW5rIiwieG1sIiwieG1sbnMiLCJwcmVmaXgiLCJuYW1lc3BhY2VzIiwic3BhY2UiLCJsb2NhbCIsImNyZWF0b3JJbmhlcml0IiwiZG9jdW1lbnQiLCJvd25lckRvY3VtZW50IiwidXJpIiwibmFtZXNwYWNlVVJJIiwiZG9jdW1lbnRFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImNyZWF0ZUVsZW1lbnROUyIsImNyZWF0b3JGaXhlZCIsImZ1bGxuYW1lIiwibmFtZXNwYWNlIiwibm9uZSIsInNlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsImVtcHR5IiwicXVlcnlTZWxlY3RvckFsbCIsIm1hdGNoZXMiLCJjaGlsZE1hdGNoZXIiLCJub2RlIiwiZmluZCIsImNoaWxkRmlyc3QiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImNoaWxkcmVuIiwidXBkYXRlIiwiRW50ZXJOb2RlIiwicGFyZW50IiwiZGF0dW0iLCJfbmV4dCIsIl9wYXJlbnQiLCJfX2RhdGFfXyIsImJpbmRJbmRleCIsImdyb3VwIiwiZ3JvdXBMZW5ndGgiLCJkYXRhTGVuZ3RoIiwiYmluZEtleSIsImtleSIsImtleVZhbHVlIiwibm9kZUJ5S2V5VmFsdWUiLCJNYXAiLCJrZXlWYWx1ZXMiLCJoYXMiLCJkZWxldGUiLCJhdHRyUmVtb3ZlIiwicmVtb3ZlQXR0cmlidXRlIiwiYXR0clJlbW92ZU5TIiwicmVtb3ZlQXR0cmlidXRlTlMiLCJhdHRyQ29uc3RhbnQiLCJzZXRBdHRyaWJ1dGUiLCJhdHRyQ29uc3RhbnROUyIsInNldEF0dHJpYnV0ZU5TIiwiYXR0ckZ1bmN0aW9uIiwidiIsImF0dHJGdW5jdGlvbk5TIiwiZGVmYXVsdFZpZXciLCJzdHlsZVJlbW92ZSIsInN0eWxlIiwicmVtb3ZlUHJvcGVydHkiLCJzdHlsZUNvbnN0YW50IiwicHJpb3JpdHkiLCJzZXRQcm9wZXJ0eSIsInN0eWxlRnVuY3Rpb24iLCJzdHlsZVZhbHVlIiwiZ2V0UHJvcGVydHlWYWx1ZSIsImdldENvbXB1dGVkU3R5bGUiLCJwcm9wZXJ0eVJlbW92ZSIsInByb3BlcnR5Q29uc3RhbnQiLCJwcm9wZXJ0eUZ1bmN0aW9uIiwiY2xhc3NBcnJheSIsInN0cmluZyIsImNsYXNzTGlzdCIsIkNsYXNzTGlzdCIsIl9ub2RlIiwiX25hbWVzIiwiY2xhc3NlZEFkZCIsIm5hbWVzIiwibGlzdCIsImFkZCIsImNsYXNzZWRSZW1vdmUiLCJjbGFzc2VkVHJ1ZSIsImNsYXNzZWRGYWxzZSIsImNsYXNzZWRGdW5jdGlvbiIsInRleHRSZW1vdmUiLCJ0ZXh0Q29udGVudCIsInRleHRDb25zdGFudCIsInRleHRGdW5jdGlvbiIsImh0bWxSZW1vdmUiLCJpbm5lckhUTUwiLCJodG1sQ29uc3RhbnQiLCJodG1sRnVuY3Rpb24iLCJyYWlzZSIsIm5leHRTaWJsaW5nIiwiYXBwZW5kQ2hpbGQiLCJsb3dlciIsInByZXZpb3VzU2libGluZyIsImluc2VydEJlZm9yZSIsImZpcnN0Q2hpbGQiLCJjb25zdGFudE51bGwiLCJyZW1vdmVDaGlsZCIsInNlbGVjdGlvbl9jbG9uZVNoYWxsb3ciLCJjbG9uZSIsImNsb25lTm9kZSIsInNlbGVjdGlvbl9jbG9uZURlZXAiLCJvblJlbW92ZSIsIl9fb24iLCJvIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImxpc3RlbmVyIiwib3B0aW9ucyIsIm9uQWRkIiwiZXZlbnQiLCJjb250ZXh0TGlzdGVuZXIiLCJhZGRFdmVudExpc3RlbmVyIiwiZGlzcGF0Y2hFdmVudCIsInBhcmFtcyIsIkN1c3RvbUV2ZW50IiwiY3JlYXRlRXZlbnQiLCJpbml0RXZlbnQiLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsImRldGFpbCIsImRpc3BhdGNoQ29uc3RhbnQiLCJkaXNwYXRjaEZ1bmN0aW9uIiwiY2hpbGQiLCJqb2luIiwic3BsaWNlIiwiY29udGFpbnMiLCJyb290IiwiU2VsZWN0aW9uIiwiZ3JvdXBzIiwicGFyZW50cyIsIl9ncm91cHMiLCJfcGFyZW50cyIsImZhY3RvcnkiLCJleHRlbmQiLCJkZWZpbml0aW9uIiwiT2JqZWN0IiwiY3JlYXRlIiwiQ29sb3IiLCJzdWJncm91cHMiLCJzdWJub2RlIiwic3ViZ3JvdXAiLCJhcnJheUFsbCIsInNlbGVjdG9yQWxsIiwic2VsZWN0Q2hpbGQiLCJtYXRjaCIsImNoaWxkRmluZCIsInNlbGVjdENoaWxkcmVuIiwiY2hpbGRyZW5GaWx0ZXIiLCJtYXRjaGVyIiwiYmluZCIsImNvbnN0YW50IiwiZW50ZXJHcm91cCIsInVwZGF0ZUdyb3VwIiwiZXhpdEdyb3VwIiwicHJldmlvdXMiLCJpMSIsIl9lbnRlciIsIl9leGl0Iiwic3BhcnNlIiwib25lbnRlciIsIm9udXBkYXRlIiwib25leGl0IiwiZ3JvdXBzMCIsImdyb3VwczEiLCJtMCIsIm0xIiwibWVyZ2VzIiwiZ3JvdXAwIiwiZ3JvdXAxIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJzb3J0IiwiY29tcGFyZU5vZGUiLCJzb3J0Z3JvdXBzIiwic29ydGdyb3VwIiwibm9kZXMiLCJzaXplIiwiZ2V0QXR0cmlidXRlTlMiLCJwcm9wZXJ0eSIsImNsYXNzZWQiLCJodG1sIiwiY3JlYXRvciIsImJlZm9yZSIsImRlZXAiLCJTeW1ib2wiLCJpdGVyYXRvciIsImJyaWdodGVyIiwicmVJIiwicmVOIiwicmVQIiwicmVIZXgiLCJyZVJnYkludGVnZXIiLCJSZWdFeHAiLCJyZVJnYlBlcmNlbnQiLCJyZVJnYmFJbnRlZ2VyIiwicmVSZ2JhUGVyY2VudCIsInJlSHNsUGVyY2VudCIsInJlSHNsYVBlcmNlbnQiLCJuYW1lZCIsImFsaWNlYmx1ZSIsImFudGlxdWV3aGl0ZSIsImFxdWEiLCJhcXVhbWFyaW5lIiwiYXp1cmUiLCJiZWlnZSIsImJpc3F1ZSIsImJsYWNrIiwiYmxhbmNoZWRhbG1vbmQiLCJibHVlIiwiYmx1ZXZpb2xldCIsImJyb3duIiwiYnVybHl3b29kIiwiY2FkZXRibHVlIiwiY2hhcnRyZXVzZSIsImNob2NvbGF0ZSIsImNvcmFsIiwiY29ybmZsb3dlcmJsdWUiLCJjb3Juc2lsayIsImNyaW1zb24iLCJjeWFuIiwiZGFya2JsdWUiLCJkYXJrY3lhbiIsImRhcmtnb2xkZW5yb2QiLCJkYXJrZ3JheSIsImRhcmtncmVlbiIsImRhcmtncmV5IiwiZGFya2toYWtpIiwiZGFya21hZ2VudGEiLCJkYXJrb2xpdmVncmVlbiIsImRhcmtvcmFuZ2UiLCJkYXJrb3JjaGlkIiwiZGFya3JlZCIsImRhcmtzYWxtb24iLCJkYXJrc2VhZ3JlZW4iLCJkYXJrc2xhdGVibHVlIiwiZGFya3NsYXRlZ3JheSIsImRhcmtzbGF0ZWdyZXkiLCJkYXJrdHVycXVvaXNlIiwiZGFya3Zpb2xldCIsImRlZXBwaW5rIiwiZGVlcHNreWJsdWUiLCJkaW1ncmF5IiwiZGltZ3JleSIsImRvZGdlcmJsdWUiLCJmaXJlYnJpY2siLCJmbG9yYWx3aGl0ZSIsImZvcmVzdGdyZWVuIiwiZnVjaHNpYSIsImdhaW5zYm9ybyIsImdob3N0d2hpdGUiLCJnb2xkIiwiZ29sZGVucm9kIiwiZ3JheSIsImdyZWVuIiwiZ3JlZW55ZWxsb3ciLCJncmV5IiwiaG9uZXlkZXciLCJob3RwaW5rIiwiaW5kaWFucmVkIiwiaW5kaWdvIiwiaXZvcnkiLCJraGFraSIsImxhdmVuZGVyIiwibGF2ZW5kZXJibHVzaCIsImxhd25ncmVlbiIsImxlbW9uY2hpZmZvbiIsImxpZ2h0Ymx1ZSIsImxpZ2h0Y29yYWwiLCJsaWdodGN5YW4iLCJsaWdodGdvbGRlbnJvZHllbGxvdyIsImxpZ2h0Z3JheSIsImxpZ2h0Z3JlZW4iLCJsaWdodGdyZXkiLCJsaWdodHBpbmsiLCJsaWdodHNhbG1vbiIsImxpZ2h0c2VhZ3JlZW4iLCJsaWdodHNreWJsdWUiLCJsaWdodHNsYXRlZ3JheSIsImxpZ2h0c2xhdGVncmV5IiwibGlnaHRzdGVlbGJsdWUiLCJsaWdodHllbGxvdyIsImxpbWUiLCJsaW1lZ3JlZW4iLCJsaW5lbiIsIm1hZ2VudGEiLCJtYXJvb24iLCJtZWRpdW1hcXVhbWFyaW5lIiwibWVkaXVtYmx1ZSIsIm1lZGl1bW9yY2hpZCIsIm1lZGl1bXB1cnBsZSIsIm1lZGl1bXNlYWdyZWVuIiwibWVkaXVtc2xhdGVibHVlIiwibWVkaXVtc3ByaW5nZ3JlZW4iLCJtZWRpdW10dXJxdW9pc2UiLCJtZWRpdW12aW9sZXRyZWQiLCJtaWRuaWdodGJsdWUiLCJtaW50Y3JlYW0iLCJtaXN0eXJvc2UiLCJtb2NjYXNpbiIsIm5hdmFqb3doaXRlIiwibmF2eSIsIm9sZGxhY2UiLCJvbGl2ZSIsIm9saXZlZHJhYiIsIm9yYW5nZSIsIm9yYW5nZXJlZCIsIm9yY2hpZCIsInBhbGVnb2xkZW5yb2QiLCJwYWxlZ3JlZW4iLCJwYWxldHVycXVvaXNlIiwicGFsZXZpb2xldHJlZCIsInBhcGF5YXdoaXAiLCJwZWFjaHB1ZmYiLCJwZXJ1IiwicGluayIsInBsdW0iLCJwb3dkZXJibHVlIiwicHVycGxlIiwicmViZWNjYXB1cnBsZSIsInJlZCIsInJvc3licm93biIsInJveWFsYmx1ZSIsInNhZGRsZWJyb3duIiwic2FsbW9uIiwic2FuZHlicm93biIsInNlYWdyZWVuIiwic2Vhc2hlbGwiLCJzaWVubmEiLCJzaWx2ZXIiLCJza3libHVlIiwic2xhdGVibHVlIiwic2xhdGVncmF5Iiwic2xhdGVncmV5Iiwic25vdyIsInNwcmluZ2dyZWVuIiwic3RlZWxibHVlIiwidGFuIiwidGVhbCIsInRoaXN0bGUiLCJ0b21hdG8iLCJ0dXJxdW9pc2UiLCJ2aW9sZXQiLCJ3aGVhdCIsIndoaXRlIiwid2hpdGVzbW9rZSIsInllbGxvdyIsInllbGxvd2dyZWVuIiwiY29sb3JfZm9ybWF0SGV4IiwicmdiIiwiZm9ybWF0SGV4IiwiY29sb3JfZm9ybWF0UmdiIiwiZm9ybWF0UmdiIiwiY29sb3IiLCJsIiwidG9Mb3dlckNhc2UiLCJleGVjIiwicGFyc2VJbnQiLCJyZ2JuIiwiUmdiIiwicmdiYSIsImhzbGEiLCJyIiwiZyIsInJnYkNvbnZlcnQiLCJvcGFjaXR5IiwicmdiX2Zvcm1hdEhleCIsImhleCIsInJnYl9mb3JtYXRSZ2IiLCJpc05hTiIsInRvU3RyaW5nIiwiaCIsIkhzbCIsImhzbENvbnZlcnQiLCJoc2wycmdiIiwibTIiLCJkZWZpbmUiLCJjaGFubmVscyIsImFzc2lnbiIsImRpc3BsYXlhYmxlIiwiZm9ybWF0SHNsIiwiZGFya2VyIiwicmFkaWFucyIsIlBJIiwiZGVncmVlcyIsInQwIiwidDEiLCJ0MiIsImxhYkNvbnZlcnQiLCJMYWIiLCJIY2wiLCJoY2wybGFiIiwicmdiMmxyZ2IiLCJ4eXoybGFiIiwibGFiIiwibGFiMnh5eiIsImxyZ2IycmdiIiwiaGNsQ29udmVydCIsImF0YW4yIiwiY29zIiwic2luIiwidGFza0hlYWQiLCJ0YXNrVGFpbCIsImZyYW1lIiwidGltZW91dCIsImludGVydmFsIiwiY2xvY2tMYXN0IiwiY2xvY2tOb3ciLCJjbG9ja1NrZXciLCJjbG9jayIsInBlcmZvcm1hbmNlIiwibm93IiwiRGF0ZSIsInNldEZyYW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwic2V0VGltZW91dCIsImNsZWFyTm93IiwiVGltZXIiLCJfY2FsbCIsIl90aW1lIiwidGltZXIiLCJkZWxheSIsInRpbWUiLCJyZXN0YXJ0Iiwid2FrZSIsInRpbWVyRmx1c2giLCJJbmZpbml0eSIsInNsZWVwIiwibmFwIiwicG9rZSIsImNsZWFyVGltZW91dCIsImNsZWFySW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImVsYXBzZWQiLCJUeXBlRXJyb3IiLCJlbXB0eU9uIiwiZW1wdHlUd2VlbiIsImlkIiwidGltaW5nIiwic2NoZWR1bGVzIiwiX190cmFuc2l0aW9uIiwic2VsZiIsInR3ZWVuIiwic2NoZWR1bGUiLCJzdGF0ZSIsImR1cmF0aW9uIiwiZWFzZSIsImluaXQiLCJnYW1tYSIsIm5vZ2FtbWEiLCJleHBvbmVudGlhbCIsImxpbmVhciIsInJnYkdhbW1hIiwiZW5kIiwiY29sb3JSZ2IiLCJyZUEiLCJyZUIiLCJzb3VyY2UiLCJhbSIsImJtIiwiYnMiLCJiaSIsImxhc3RJbmRleCIsInEiLCJvbmUiLCJ6ZXJvIiwic3ZnTm9kZSIsInJvdGF0ZSIsInNrZXdYIiwic2NhbGVYIiwic2NhbGVZIiwiYXRhbiIsImludGVycG9sYXRlVHJhbnNmb3JtIiwicGFyc2UiLCJweENvbW1hIiwicHhQYXJlbiIsImRlZ1BhcmVuIiwicG9wIiwieGEiLCJ5YSIsInhiIiwieWIiLCJ0cmFuc2xhdGUiLCJpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyIsIkRPTU1hdHJpeCIsIldlYktpdENTU01hdHJpeCIsImlzSWRlbnRpdHkiLCJkZWNvbXBvc2UiLCJpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZyIsImJhc2VWYWwiLCJjb25zb2xpZGF0ZSIsIm1hdHJpeCIsInR3ZWVuUmVtb3ZlIiwidHdlZW4wIiwidHdlZW4xIiwidHdlZW5GdW5jdGlvbiIsInR3ZWVuVmFsdWUiLCJfaWQiLCJpbnRlcnBvbGF0ZU51bWJlciIsImludGVycG9sYXRlUmdiIiwiaW50ZXJwb2xhdGVTdHJpbmciLCJpbnRlcnBvbGF0ZSIsInZhbHVlMSIsInN0cmluZzAwIiwiaW50ZXJwb2xhdGUwIiwic3RyaW5nMSIsInN0cmluZzAiLCJzdHJpbmcxMCIsImF0dHJJbnRlcnBvbGF0ZSIsImF0dHJJbnRlcnBvbGF0ZU5TIiwiYXR0clR3ZWVuTlMiLCJfdmFsdWUiLCJhdHRyVHdlZW4iLCJkZWxheUZ1bmN0aW9uIiwiZGVsYXlDb25zdGFudCIsImR1cmF0aW9uRnVuY3Rpb24iLCJkdXJhdGlvbkNvbnN0YW50IiwiZWFzZUNvbnN0YW50Iiwib25GdW5jdGlvbiIsIm9uMCIsIm9uMSIsInNpdCIsImV2ZXJ5Iiwic3R5bGVJbnRlcnBvbGF0ZSIsInN0eWxlVHdlZW4iLCJ0ZXh0SW50ZXJwb2xhdGUiLCJ0ZXh0VHdlZW4iLCJUcmFuc2l0aW9uIiwiX25hbWUiLCJuZXdJZCIsInNlbGVjdGlvbl9wcm90b3R5cGUiLCJpbmhlcml0IiwiaWQwIiwiaWQxIiwic3R5bGVOdWxsIiwibGlzdGVuZXIwIiwic3R5bGVNYXliZVJlbW92ZSIsInJlbW92ZUZ1bmN0aW9uIiwiZWFzZVZhcnlpbmciLCJjYW5jZWwiLCJpbnRlcnJ1cHQiLCJkZWZhdWx0VGltaW5nIiwiYWN0aXZlIiwicGkiLCJ0YXUiLCJ0YXVFcHNpbG9uIiwiUGF0aCIsIl94MCIsIl95MCIsIl94MSIsIl95MSIsImZvcm1hdERlY2ltYWxQYXJ0cyIsInRvRXhwb25lbnRpYWwiLCJjb2VmZmljaWVudCIsIm1vdmVUbyIsImNsb3NlUGF0aCIsImxpbmVUbyIsInF1YWRyYXRpY0N1cnZlVG8iLCJ4MSIsInkxIiwiYmV6aWVyQ3VydmVUbyIsIngyIiwieTIiLCJhcmNUbyIsIngwIiwieTAiLCJ4MjEiLCJ5MjEiLCJ4MDEiLCJ5MDEiLCJsMDFfMiIsIngyMCIsInkyMCIsImwyMV8yIiwibDIwXzIiLCJsMjEiLCJsMDEiLCJhY29zIiwidDAxIiwidDIxIiwiYXJjIiwiYTAiLCJhMSIsImNjdyIsImR4IiwiZHkiLCJjdyIsImRhIiwicmVjdCIsInciLCJwcmVmaXhFeHBvbmVudCIsInJlIiwiZm9ybWF0U3BlY2lmaWVyIiwic3BlY2lmaWVyIiwiRm9ybWF0U3BlY2lmaWVyIiwiZmlsbCIsImFsaWduIiwic2lnbiIsInN5bWJvbCIsIndpZHRoIiwiY29tbWEiLCJwcmVjaXNpb24iLCJleHBvbmVudCIsInRvRml4ZWQiLCJ0b0xvY2FsZVN0cmluZyIsInJlcGxhY2UiLCJ0b1ByZWNpc2lvbiIsImZvcm1hdFJvdW5kZWQiLCJYIiwidG9VcHBlckNhc2UiLCJsb2NhbGUiLCJmb3JtYXRQcmVmaXgiLCJwcmVmaXhlcyIsImdyb3VwaW5nIiwidGhvdXNhbmRzIiwiTnVtYmVyIiwic3Vic3RyaW5nIiwicmV2ZXJzZSIsImN1cnJlbmN5UHJlZml4IiwiY3VycmVuY3kiLCJjdXJyZW5jeVN1ZmZpeCIsImRlY2ltYWwiLCJudW1lcmFscyIsImZvcm1hdE51bWVyYWxzIiwiU3RyaW5nIiwicGVyY2VudCIsIm1pbnVzIiwibmFuIiwibmV3Rm9ybWF0IiwiZm9ybWF0VHlwZXMiLCJzdWZmaXgiLCJmb3JtYXRUeXBlIiwibWF5YmVTdWZmaXgiLCJ2YWx1ZVByZWZpeCIsInZhbHVlU3VmZml4IiwidmFsdWVOZWdhdGl2ZSIsIm91dCIsImZvcm1hdFRyaW0iLCJjaGFyQ29kZUF0IiwicGFkZGluZyIsImZvcm1hdExvY2FsZSIsImNvbG9yTGFiIiwiaW5pdFJhbmdlIiwiaW1wbGljaXQiLCJvcmRpbmFsIiwidW5rbm93biIsImdlbmVyaWNBcnJheSIsIm5iIiwibmEiLCJzZXRUaW1lIiwiZGF0ZSIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiRGF0YVZpZXciLCJpc051bWJlckFycmF5IiwibnVtYmVyQXJyYXkiLCJpc0FycmF5IiwidmFsdWVPZiIsIm9iamVjdCIsInVuaXQiLCJub3JtYWxpemUiLCJiaW1hcCIsImQwIiwiZDEiLCJyMCIsInIxIiwicG9seW1hcCIsImJpc2VjdCIsInRhcmdldCIsImNsYW1wIiwidHJhbnNmb3JtZXIiLCJ1bnRyYW5zZm9ybSIsInBpZWNld2lzZSIsIm91dHB1dCIsImlucHV0IiwiaW50ZXJwb2xhdGVWYWx1ZSIsInJlc2NhbGUiLCJpbnZlcnQiLCJyYW5nZVJvdW5kIiwiaW50ZXJwb2xhdGVSb3VuZCIsInUiLCJjb250aW51b3VzIiwicHJlY2lzaW9uUHJlZml4IiwicHJlY2lzaW9uUm91bmQiLCJwcmVjaXNpb25GaXhlZCIsImxpbmVhcmlzaCIsIm5pY2UiLCJwcmVzdGVwIiwibWF4SXRlciIsIm5ld0ludGVydmFsIiwiZmxvb3JpIiwib2Zmc2V0aSIsImZpZWxkIiwibWlsbGlzZWNvbmQiLCJzZWNvbmQiLCJnZXRNaWxsaXNlY29uZHMiLCJnZXRVVENTZWNvbmRzIiwibWludXRlIiwiZ2V0U2Vjb25kcyIsImR1cmF0aW9uU2Vjb25kIiwiZ2V0TWludXRlcyIsImhvdXIiLCJkdXJhdGlvbk1pbnV0ZSIsImdldEhvdXJzIiwiZGF5Iiwic2V0SG91cnMiLCJzZXREYXRlIiwiZ2V0RGF0ZSIsImdldFRpbWV6b25lT2Zmc2V0IiwiZHVyYXRpb25Ib3VyIiwid2Vla2RheSIsImdldERheSIsImR1cmF0aW9uRGF5Iiwic3VuZGF5IiwibW9uZGF5IiwidGh1cnNkYXkiLCJtb250aCIsInNldE1vbnRoIiwiZ2V0TW9udGgiLCJnZXRGdWxsWWVhciIsInllYXIiLCJzZXRGdWxsWWVhciIsInNldFVUQ1NlY29uZHMiLCJnZXRVVENNaW51dGVzIiwic2V0VVRDTWludXRlcyIsImdldFVUQ0hvdXJzIiwidXRjRGF5Iiwic2V0VVRDSG91cnMiLCJzZXRVVENEYXRlIiwiZ2V0VVRDRGF0ZSIsInV0Y1dlZWtkYXkiLCJnZXRVVENEYXkiLCJ1dGNTdW5kYXkiLCJ1dGNNb25kYXkiLCJ1dGNUaHVyc2RheSIsInNldFVUQ01vbnRoIiwiZ2V0VVRDTW9udGgiLCJnZXRVVENGdWxsWWVhciIsInV0Y1llYXIiLCJzZXRVVENGdWxsWWVhciIsInRpbWVUaWNrcyIsInRpbWVUaWNrSW50ZXJ2YWwiLCJ3ZWVrIiwidGlja0ludGVydmFscyIsInRpY2tJbnRlcnZhbCIsInRpY2tlciIsImxvY2FsRGF0ZSIsIkgiLCJNIiwiUyIsIkwiLCJ1dGNEYXRlIiwiVVRDIiwibmV3RGF0ZSIsInRpbWVGb3JtYXQiLCJwYWRzIiwibnVtYmVyUmUiLCJwZXJjZW50UmUiLCJyZXF1b3RlUmUiLCJwYWQiLCJyZXF1b3RlIiwiZm9ybWF0UmUiLCJmb3JtYXRMb29rdXAiLCJwYXJzZVdlZWtkYXlOdW1iZXJTdW5kYXkiLCJwYXJzZVdlZWtkYXlOdW1iZXJNb25kYXkiLCJwYXJzZVdlZWtOdW1iZXJTdW5kYXkiLCJVIiwicGFyc2VXZWVrTnVtYmVySVNPIiwiViIsInBhcnNlV2Vla051bWJlck1vbmRheSIsIlciLCJwYXJzZUZ1bGxZZWFyIiwicGFyc2VZZWFyIiwicGFyc2Vab25lIiwiWiIsInBhcnNlUXVhcnRlciIsInBhcnNlTW9udGhOdW1iZXIiLCJwYXJzZURheU9mTW9udGgiLCJwYXJzZURheU9mWWVhciIsInBhcnNlSG91cjI0IiwicGFyc2VNaW51dGVzIiwicGFyc2VTZWNvbmRzIiwicGFyc2VNaWxsaXNlY29uZHMiLCJwYXJzZU1pY3Jvc2Vjb25kcyIsInBhcnNlTGl0ZXJhbFBlcmNlbnQiLCJwYXJzZVVuaXhUaW1lc3RhbXAiLCJRIiwicGFyc2VVbml4VGltZXN0YW1wU2Vjb25kcyIsImZvcm1hdERheU9mTW9udGgiLCJmb3JtYXRIb3VyMjQiLCJmb3JtYXRIb3VyMTIiLCJmb3JtYXREYXlPZlllYXIiLCJ0aW1lRGF5IiwidGltZVllYXIiLCJmb3JtYXRNaWxsaXNlY29uZHMiLCJmb3JtYXRNaWNyb3NlY29uZHMiLCJmb3JtYXRNb250aE51bWJlciIsImZvcm1hdE1pbnV0ZXMiLCJmb3JtYXRTZWNvbmRzIiwiZm9ybWF0V2Vla2RheU51bWJlck1vbmRheSIsImZvcm1hdFdlZWtOdW1iZXJTdW5kYXkiLCJ0aW1lU3VuZGF5IiwiZElTTyIsInRpbWVUaHVyc2RheSIsImZvcm1hdFdlZWtOdW1iZXJJU08iLCJmb3JtYXRXZWVrZGF5TnVtYmVyU3VuZGF5IiwiZm9ybWF0V2Vla051bWJlck1vbmRheSIsInRpbWVNb25kYXkiLCJmb3JtYXRZZWFyIiwiZm9ybWF0WWVhcklTTyIsImZvcm1hdEZ1bGxZZWFyIiwiZm9ybWF0RnVsbFllYXJJU08iLCJmb3JtYXRab25lIiwiZm9ybWF0VVRDRGF5T2ZNb250aCIsImZvcm1hdFVUQ0hvdXIyNCIsImZvcm1hdFVUQ0hvdXIxMiIsImZvcm1hdFVUQ0RheU9mWWVhciIsImZvcm1hdFVUQ01pbGxpc2Vjb25kcyIsImdldFVUQ01pbGxpc2Vjb25kcyIsImZvcm1hdFVUQ01pY3Jvc2Vjb25kcyIsImZvcm1hdFVUQ01vbnRoTnVtYmVyIiwiZm9ybWF0VVRDTWludXRlcyIsImZvcm1hdFVUQ1NlY29uZHMiLCJmb3JtYXRVVENXZWVrZGF5TnVtYmVyTW9uZGF5IiwiZG93IiwiZm9ybWF0VVRDV2Vla051bWJlclN1bmRheSIsIlVUQ2RJU08iLCJmb3JtYXRVVENXZWVrTnVtYmVySVNPIiwiZm9ybWF0VVRDV2Vla2RheU51bWJlclN1bmRheSIsImZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXkiLCJmb3JtYXRVVENZZWFyIiwiZm9ybWF0VVRDWWVhcklTTyIsImZvcm1hdFVUQ0Z1bGxZZWFyIiwiZm9ybWF0VVRDRnVsbFllYXJJU08iLCJmb3JtYXRVVENab25lIiwiZm9ybWF0TGl0ZXJhbFBlcmNlbnQiLCJmb3JtYXRVbml4VGltZXN0YW1wIiwiZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMiLCJjYWxlbmRhciIsImZvcm1hdE1pbGxpc2Vjb25kIiwiZm9ybWF0U2Vjb25kIiwiZm9ybWF0TWludXRlIiwiZm9ybWF0SG91ciIsImZvcm1hdERheSIsImZvcm1hdFdlZWsiLCJmb3JtYXRNb250aCIsImxvY2FsZV9kYXRlVGltZSIsImRhdGVUaW1lIiwibG9jYWxlX2RhdGUiLCJsb2NhbGVfdGltZSIsImxvY2FsZV9wZXJpb2RzIiwicGVyaW9kcyIsImxvY2FsZV93ZWVrZGF5cyIsImRheXMiLCJsb2NhbGVfc2hvcnRXZWVrZGF5cyIsInNob3J0RGF5cyIsImxvY2FsZV9tb250aHMiLCJtb250aHMiLCJsb2NhbGVfc2hvcnRNb250aHMiLCJzaG9ydE1vbnRocyIsInBlcmlvZFJlIiwicGVyaW9kTG9va3VwIiwid2Vla2RheVJlIiwid2Vla2RheUxvb2t1cCIsInNob3J0V2Vla2RheVJlIiwic2hvcnRXZWVrZGF5TG9va3VwIiwibW9udGhSZSIsIm1vbnRoTG9va3VwIiwic2hvcnRNb250aFJlIiwic2hvcnRNb250aExvb2t1cCIsImZvcm1hdHMiLCJBIiwiQiIsIkciLCJJIiwiWSIsInV0Y0Zvcm1hdHMiLCJwYXJzZXMiLCJwYXJzZVNwZWNpZmllciIsImNoYXJBdCIsIm5ld1BhcnNlIiwidXRjRm9ybWF0IiwidXRjUGFyc2UiLCJkZWZhdWx0TG9jYWxlIiwic3BsaW5lIiwicmdiQmFzaXMiLCJ2MSIsInYyIiwidjAiLCJ2MyIsInQzIiwiYmFzaXMiLCJjb2xvcnMiLCJzY2hlbWUiLCJpbnRlcnBvbGF0ZVJnYkJhc2lzIiwicmFtcCIsIlNlYXJjaFR5cGUiLCJHcmFwaFR5cGUiLCJWYWx1ZVR5cGUiLCJoYWxmUGkiLCJhc2luIiwiYXJjSW5uZXJSYWRpdXMiLCJpbm5lclJhZGl1cyIsImFyY091dGVyUmFkaXVzIiwib3V0ZXJSYWRpdXMiLCJhcmNTdGFydEFuZ2xlIiwic3RhcnRBbmdsZSIsImFyY0VuZEFuZ2xlIiwiZW5kQW5nbGUiLCJhcmNQYWRBbmdsZSIsInBhZEFuZ2xlIiwiaW50ZXJzZWN0IiwieDMiLCJ5MyIsIngxMCIsInkxMCIsIngzMiIsInkzMiIsImNvcm5lclRhbmdlbnRzIiwicmMiLCJveCIsIm95IiwieDExIiwieTExIiwieDAwIiwieTAwIiwiZDIiLCJEIiwiY3gwIiwiY3kwIiwiY3gxIiwiY3kxIiwiZHgwIiwiZHkwIiwiZHgxIiwiZHkxIiwiY3giLCJjeSIsImNvcm5lclJhZGl1cyIsInBhZFJhZGl1cyIsImJ1ZmZlciIsImEwMSIsImExMSIsImEwMCIsImExMCIsImRhMCIsImRhMSIsImFwIiwicnAiLCJyYzAiLCJyYzEiLCJwMCIsInAxIiwib2MiLCJheCIsImF5IiwiYngiLCJieSIsImtjIiwibGMiLCJjZW50cm9pZCIsIkxpbmVhciIsIl9jb250ZXh0IiwiYXJlYVN0YXJ0IiwiX2xpbmUiLCJhcmVhRW5kIiwibGluZVN0YXJ0IiwiX3BvaW50IiwibGluZUVuZCIsInBvaW50IiwiRGF0YVBvaW50IiwiUXVlcnkiLCJzZWFyY2hUeXBlIiwic2VhcmNoVGFyZ2V0Iiwic2VwYXJhdG9yIiwiYWNjZXNzb3IiLCJhY2Nlc3NvcjEiLCJhY2Nlc3NvcjIiLCJ2YWx1ZVR5cGUiLCJ1c2VkQXNYRGF0YXNldCIsIm51bVRhcmdldHMiLCJUYWJsZSIsInJlZ2V4IiwicGFyc2VGbG9hdCIsImlzTnVtYmVyIiwicGFyZW50VGFyZ2V0IiwiZXF1YWxUbyIsIm90aGVyIiwiZ2V0VHlwZSIsImdldFRhcmdldCIsImdldFBhcmVudFRhcmdldCIsImdldElkIiwiZ2V0QWNjZXNzb3IiLCJzZXRTZXBhcmF0b3IiLCJzZXAiLCJnZXRTZXBhcmF0b3IiLCJpc0ZvckZyb250bWF0dGVyVGFncyIsImFkZE51bVRhcmdldHMiLCJudW0iLCJnZXROdW1UYXJnZXRzIiwiRGF0YXNldCIsInF1ZXJ5IiwieU1pbiIsInlNYXgiLCJzdGFydERhdGUiLCJlbmREYXRlIiwibGluZUluZm8iLCJiYXJJbmZvIiwiaXNUbXBEYXRhc2V0IiwiaW5kIiwiZ2V0RGF0ZXMiLCJjbG9uZVRvVG1wRGF0YXNldCIsInRtcERhdGFzZXQiLCJnZXROYW1lIiwic2V0TmFtZSIsInNldElkIiwiZ2V0VmFsdWUiLCJkYXlTaGlmdCIsImdldEluZGV4T2ZEYXRlIiwic2V0VmFsdWUiLCJyZWNhbGN1bGF0ZU1pbk1heCIsImdldFlNaW4iLCJnZXRZTWF4IiwiZ2V0U3RhcnREYXRlIiwiZ2V0RW5kRGF0ZSIsInNoaWZ0Iiwic2hpZnRBbW91bnQiLCJkb0xhcmdlcnRoYW4iLCJhbnlTaGlmdGVkIiwic2V0UGVuYWx0eSIsInBlbmFsdHkiLCJnZXRRdWVyeSIsImFjY3VtdWxhdGVWYWx1ZXMiLCJhY2N1bVZhbHVlIiwiZ2V0VmFsdWVzIiwiZ2V0TGVuZ3RoIiwiZ2V0TGVuZ3RoTm90TnVsbCIsImNvdW50Tm90TnVsbCIsImN1cnJlbnRJbmRleCIsIkRhdGFzZXRzIiwiZGF0ZXMiLCJkYXRhc2V0cyIsImRhdGVGb3JtYXQiLCJjcmVhdGlvbkRhdGEiLCJjdXJEYXRlIiwibW9tZW50IiwiY3JlYXRlRGF0YXNldCIsInJlbmRlckluZm8iLCJkYXRhc2V0IiwiZGF0YXNldE5hbWUiLCJnZXREYXRhc2V0QnlRdWVyeSIsImdldERhdGFzZXRCeUlkIiwiZ2V0WERhdGFzZXRJZHMiLCJpZHMiLCJpbmNsdWRlcyIsImdldE5hbWVzIiwiUmVuZGVySW5mbyIsInF1ZXJpZXMiLCJ4RGF0YXNldCIsImZvbGRlciIsImZpbGUiLCJzcGVjaWZpZWRGaWxlc09ubHkiLCJmaWxlQ29udGFpbnNMaW5rZWRGaWxlcyIsImZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rIiwiZGF0ZUZvcm1hdFByZWZpeCIsImRhdGVGb3JtYXRTdWZmaXgiLCJjb25zdFZhbHVlIiwiaWdub3JlQXR0YWNoZWRWYWx1ZSIsImlnbm9yZVplcm9WYWx1ZSIsImFjY3VtIiwidmFsdWVTaGlmdCIsInNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbiIsInRleHRWYWx1ZU1hcCIsImRhdGFBcmVhU2l6ZSIsIlNpemUiLCJtYXJnaW4iLCJNYXJnaW4iLCJmaXhlZFNjYWxlIiwiZml0UGFuZWxXaWR0aCIsImJhciIsInBpZSIsInN1bW1hcnkiLCJoZWF0bWFwIiwiYnVsbGV0IiwiY3VzdG9tRGF0YXNldCIsImdldFF1ZXJ5QnlJZCIsIkN1c3RvbURhdGFzZXRJbmZvIiwieERhdGEiLCJ5RGF0YSIsIkNvbW1vbkNoYXJ0SW5mbyIsInRpdGxlIiwieEF4aXNMYWJlbCIsInhBeGlzQ29sb3IiLCJ4QXhpc0xhYmVsQ29sb3IiLCJ5QXhpc0xhYmVsIiwieUF4aXNDb2xvciIsInlBeGlzTGFiZWxDb2xvciIsInlBeGlzVW5pdCIsInhBeGlzVGlja0ludGVydmFsIiwieUF4aXNUaWNrSW50ZXJ2YWwiLCJ4QXhpc1RpY2tMYWJlbEZvcm1hdCIsInlBeGlzVGlja0xhYmVsRm9ybWF0IiwicmV2ZXJzZVlBeGlzIiwiYWxsb3dJbnNwZWN0RGF0YSIsInNob3dMZWdlbmQiLCJsZWdlbmRQb3NpdGlvbiIsImxlZ2VuZE9yaWVudGF0aW9uIiwibGVnZW5kQmdDb2xvciIsImxlZ2VuZEJvcmRlckNvbG9yIiwiR2V0R3JhcGhUeXBlIiwiVW5rbm93biIsIkxpbmVJbmZvIiwic3VwZXIiLCJsaW5lQ29sb3IiLCJsaW5lV2lkdGgiLCJzaG93TGluZSIsInNob3dQb2ludCIsInBvaW50Q29sb3IiLCJwb2ludEJvcmRlckNvbG9yIiwicG9pbnRCb3JkZXJXaWR0aCIsInBvaW50U2l6ZSIsImZpbGxHYXAiLCJ5QXhpc0xvY2F0aW9uIiwiTGluZSIsIkJhckluZm8iLCJiYXJDb2xvciIsIkJhciIsIlBpZUluZm8iLCJkYXRhQ29sb3IiLCJkYXRhTmFtZSIsImxhYmVsIiwiaGlkZUxhYmVsTGVzc1RoYW4iLCJleHRMYWJlbCIsInNob3dFeHRMYWJlbE9ubHlJZk5vTGFiZWwiLCJyYXRpb0lubmVyUmFkaXVzIiwiUGllIiwiU3VtbWFyeUluZm8iLCJ0ZW1wbGF0ZSIsIlN1bW1hcnkiLCJNb250aEluZm8iLCJtb2RlIiwic3RhcnRXZWVrT24iLCJ0aHJlc2hvbGQiLCJkaW1Ob3RJbk1vbnRoIiwiaW5pdE1vbnRoIiwic2hvd1NlbGVjdGVkVmFsdWUiLCJoZWFkZXJZZWFyQ29sb3IiLCJoZWFkZXJNb250aENvbG9yIiwiZGl2aWRpbmdMaW5lQ29sb3IiLCJzaG93Q2lyY2xlIiwic2hvd1N0cmVhayIsInNob3dUb2RheVJpbmciLCJzaG93U2VsZWN0ZWRSaW5nIiwiY2lyY2xlQ29sb3IiLCJjaXJjbGVDb2xvckJ5VmFsdWUiLCJ0b2RheVJpbmdDb2xvciIsInNlbGVjdGVkUmluZ0NvbG9yIiwic2hvd0Fubm90YXRpb24iLCJhbm5vdGF0aW9uIiwic2hvd0Fubm90YXRpb25PZkFsbFRhcmdldHMiLCJzZWxlY3RlZERhdGUiLCJzZWxlY3RlZERhdGFzZXQiLCJNb250aCIsIkhlYXRtYXBJbmZvIiwib3JpZW50YXRpb24iLCJIZWF0bWFwIiwiQnVsbGV0SW5mbyIsInZhbHVlVW5pdCIsInZhbHVlQ29sb3IiLCJyYW5nZUNvbG9yIiwic2hvd01hcmtlciIsIm1hcmtlclZhbHVlIiwibWFya2VyQ29sb3IiLCJCdWxsZXQiLCJoZWlnaHQiLCJ0b3AiLCJib3R0b20iLCJUcmFuc2Zvcm0iLCJUYWJsZURhdGEiLCJmaWxlUGF0aCIsInRhYmxlSW5kZXgiLCJ5RGF0YXNldHMiLCJDb2xsZWN0aW5nUHJvY2Vzc0luZm8iLCJmaWxlVG90YWwiLCJmaWxlQXZhaWxhYmxlIiwiZmlsZU91dE9mRGF0ZVJhbmdlIiwiZmlsZU5vdEluRm9ybWF0IiwiZXJyb3JNZXNzYWdlIiwibWluRGF0ZSIsIm1heERhdGUiLCJnb3RBbnlWYWxpZFhWYWx1ZSIsImdvdEFueVZhbGlkWVZhbHVlIiwiZm10SG91cnMiLCJmbXRNaW5zIiwiZm10U2VjcyIsImZtdEhvdXIiLCJmbXRNaW4iLCJmbXRTZWMiLCJmbXQiLCJtYWtlVGltZUZvcm1hdCIsImdldERhdGVTdHJpbmdGcm9tSW5wdXRTdHJpbmciLCJpbnB1dFN0cmluZyIsImRhdGVTdHJpbmciLCJzdGFydHNXaXRoIiwic3RyVG9EYXRlIiwic3RyRGF0ZSIsImVuZHNXaXRoIiwiSVNPXzg2MDEiLCJzdGFydE9mIiwiZXh0cmFjdFZhbHVlRnJvbUR1cmF0aW9uU3RyaW5nIiwic3RyRHVyYXRpb24iLCJ1bml0cyIsInJlbW92ZVBhdHRlcm4iLCJzdHJSZWdleCIsInBhcnNlRHVyYXRpb25TdHJpbmciLCJoYXNWYWx1ZSIsIm5lZ2F0aXZlVmFsdWUiLCJ5ZWFyVmFsdWUiLCJtb250aFZhbHVlIiwid2Vla1ZhbHVlIiwiZGF5VmFsdWUiLCJob3VyVmFsdWUiLCJtaW51dGVWYWx1ZSIsInNlY29uZFZhbHVlIiwiZ2V0RGF0ZUJ5RHVyYXRpb25Ub1RvZGF5IiwicmVsRGF0ZVN0cmluZyIsImlzRHVyYXRpb24iLCJnZXREYXRlVG9kYXkiLCJpc1ZhbGlkIiwiZGF0ZVRvU3RyIiwiZ2V0RGF0ZUZyb21Vbml4VGltZSIsInVuaXhUaW1lIiwiZGVlcFZhbHVlIiwib2JqIiwic3RyIiwidHJpbUJ5Q2hhciIsImNoYXIiLCJhcnIiLCJmaXJzdCIsImZpbmRJbmRleCIsImxhc3QiLCJyZXBsYWNlSW1nVGFnQnlBbHQiLCJlbW9qaSIsInBhcnNlRmxvYXRGcm9tQW55IiwidG9QYXJzZSIsInRpbWVWYWx1ZSIsImRpZmYiLCJUaW1lIiwia2V5cyIsInN0clJlcGxhY2VkVmFsdWUiLCJtZWFzdXJlVGV4dFNpemUiLCJzdHlsZUNsYXNzIiwiY29udGFpbmVyIiwiZDMuc2VsZWN0IiwidGV4dEJsb2NrIiwiZ2V0QkJveCIsImV4cGFuZEFyZWEiLCJhcmVhIiwiYWRkVyIsImFkZEgiLCJuZXdXaWR0aCIsIm5ld0hlaWdodCIsIm1vdmVBcmVhIiwic2hpZnRYIiwic2hpZnRZIiwidHJhbnMiLCJjbGVhblRleHQiLCJDT01QT1VORCIsIk1FTUJFUl9FWFAiLCJMSVRFUkFMIiwidGhyb3dFcnJvciIsIm1lc3NhZ2UiLCJkZXNjcmlwdGlvbiIsInVuYXJ5X29wcyIsImJpbmFyeV9vcHMiLCJhZGRpdGlvbmFsX2lkZW50aWZpZXJfY2hhcnMiLCIkIiwiZ2V0TWF4S2V5TGVuIiwibGVuIiwibWF4X2xlbiIsIm1heF91bm9wX2xlbiIsIm1heF9iaW5vcF9sZW4iLCJsaXRlcmFscyIsInRydWUiLCJmYWxzZSIsIm51bGwiLCJiaW5hcnlQcmVjZWRlbmNlIiwib3BfdmFsIiwiY3JlYXRlQmluYXJ5RXhwcmVzc2lvbiIsIm9wZXJhdG9yIiwiaXNEZWNpbWFsRGlnaXQiLCJjaCIsImlzSWRlbnRpZmllclN0YXJ0IiwiZnJvbUNoYXJDb2RlIiwiaXNJZGVudGlmaWVyUGFydCIsImpzZXAiLCJleHByIiwiY2hfaSIsImNoYXJBdEZ1bmMiLCJjaGFyQ29kZUF0RnVuYyIsImV4cHJJIiwiZXhwcklDb2RlIiwiZ29iYmxlU3BhY2VzIiwiZ29iYmxlRXhwcmVzc2lvbiIsImNvbnNlcXVlbnQiLCJhbHRlcm5hdGUiLCJnb2JibGVCaW5hcnlFeHByZXNzaW9uIiwiZ29iYmxlQmluYXJ5T3AiLCJ0b19jaGVjayIsInN1YnN0ciIsInRjX2xlbiIsImJpb3AiLCJwcmVjIiwic3RhY2siLCJiaW9wX2luZm8iLCJjdXJfYmlvcCIsImdvYmJsZVRva2VuIiwiZ29iYmxlTnVtZXJpY0xpdGVyYWwiLCJnb2JibGVTdHJpbmdMaXRlcmFsIiwiZ29iYmxlQXJyYXkiLCJhcmd1bWVudCIsImdvYmJsZUlkZW50aWZpZXIiLCJnb2JibGVHcm91cCIsImNvbXB1dGVkIiwiZ29iYmxlQXJndW1lbnRzIiwiY2FsbGVlIiwiY2hDb2RlIiwicmF3IiwicXVvdGUiLCJjbG9zZWQiLCJpZGVudGlmaWVyIiwidGVybWluYXRpb24iLCJzZXBhcmF0b3JfY291bnQiLCJhcmciLCJlbGVtZW50cyIsImJvZHkiLCJ2ZXJzaW9uIiwiYWRkVW5hcnlPcCIsIm9wX25hbWUiLCJhZGRCaW5hcnlPcCIsInByZWNlZGVuY2UiLCJhZGRJZGVudGlmaWVyQ2hhciIsImFkZExpdGVyYWwiLCJsaXRlcmFsX25hbWUiLCJsaXRlcmFsX3ZhbHVlIiwicmVtb3ZlVW5hcnlPcCIsInJlbW92ZUFsbFVuYXJ5T3BzIiwicmVtb3ZlSWRlbnRpZmllckNoYXIiLCJyZW1vdmVCaW5hcnlPcCIsInJlbW92ZUFsbEJpbmFyeU9wcyIsInJlbW92ZUxpdGVyYWwiLCJyZW1vdmVBbGxMaXRlcmFscyIsIm1vZHVsZSIsImV4cG9ydHMiLCJub3Rfc3RyaW5nIiwibm90X2Jvb2wiLCJub3RfdHlwZSIsIm5vdF9wcmltaXRpdmUiLCJudW1lcmljX2FyZyIsImpzb24iLCJub3RfanNvbiIsIm1vZHVsbyIsInBsYWNlaG9sZGVyIiwia2V5X2FjY2VzcyIsImluZGV4X2FjY2VzcyIsInNwcmludGYiLCJzcHJpbnRmX2Zvcm1hdCIsInNwcmludGZfcGFyc2UiLCJ2c3ByaW50ZiIsImFyZ3YiLCJwYXJzZV90cmVlIiwicGgiLCJwYWRfY2hhcmFjdGVyIiwicGFkX2xlbmd0aCIsImlzX3Bvc2l0aXZlIiwiY3Vyc29yIiwidHJlZV9sZW5ndGgiLCJwYXJhbV9ubyIsIkZ1bmN0aW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsInBhZF9jaGFyIiwicmVwZWF0Iiwic3ByaW50Zl9jYWNoZSIsIl9mbXQiLCJhcmdfbmFtZXMiLCJTeW50YXhFcnJvciIsImZpZWxkX2xpc3QiLCJyZXBsYWNlbWVudF9maWVsZCIsImZpZWxkX21hdGNoIiwiY2hlY2tEaXZpc29yIiwiZGl2aXNvciIsInNvbWUiLCJmbk1hcERhdGFzZXRUb1ZhbHVlIiwiZDMubWluIiwiYXJyYXlEYXRhc2V0IiwiZGF0YVBvaW50IiwiZDMubWF4IiwiZDMuc3VtIiwibnVtRGF5cyIsIm51bURheXNIYXZpbmdEYXRhIiwibWF4U3RyZWFrIiwic3RyZWFrIiwibWF4U3RyZWFrU3RhcnQiLCJzdHJlYWtTdGFydCIsIm1heFN0cmVha0VuZCIsInN0cmVha0VuZCIsIm5leHRQb2ludCIsIm1heEJyZWFrcyIsImJyZWFrcyIsIm1heEJyZWFrc1N0YXJ0IiwiYnJlYWtzU3RhcnQiLCJtYXhCcmVha3NFbmQiLCJicmVha3NFbmQiLCJsYXN0U3RyZWFrIiwiY3VycmVudFN0cmVhayIsImN1cnJlbnRTdHJlYWtTdGFydCIsImN1cnJlbnRTdHJlYWtFbmQiLCJjdXJyZW50QnJlYWtzIiwiY3VycmVudEJyZWFrc1N0YXJ0IiwiY3VycmVudEJyZWFrc0VuZCIsImF2ZXJhZ2UiLCJtZWRpYW4iLCJ2YXJpYW5jZSIsIm1lYW4iLCJkMy52YXJpYW5jZSIsImZuTWFwVW5pcnlPcCIsImZvckVhY2giLCJmbk1hcEJpbmFyeU9wIiwiZm5NYXBEYXRhc2V0VG9EYXRhc2V0Iiwibm9ybWFsaXplZCIsInNldE1pc3NpbmdWYWx1ZXMiLCJtaXNzaW5nVmFsdWUiLCJuZXdEYXRhc2V0IiwiZXZhbHVhdGUiLCJpZGVudGlmaWVyTmFtZSIsInVuaXJ5RXhwciIsInJldFVuaXJ5QXJnIiwiYmluYXJ5RXhwciIsImxlZnRWYWx1ZSIsInJpZ2h0VmFsdWUiLCJyZXRDaGVjayIsImlzTW9tZW50IiwiY2hlY2tCaW5hcnlPcGVyYW50VHlwZSIsImNhbGxFeHByIiwiZm5OYW1lIiwiZXZhbHVhdGVkQXJncyIsImV2YWx1YXRlQXJyYXkiLCJkYXRhc2V0SWQiLCJkcyIsImV4cHJNYXAiLCJleHByUmVnZXgiLCJmdWxsbWF0Y2giLCJhc3QiLCJlcnIiLCJyZXNvbHZlVGVtcGxhdGUiLCJyZXRSZXNvbHZlIiwiZXhwclJlc29sdmVkIiwic3RyVmFsdWUiLCJoZWxwZXIuZGF0ZVRvU3RyIiwicmVzb2x2ZVZhbHVlIiwicmVuZGVyUGllIiwiY2FudmFzIiwiY2hhcnRFbGVtZW50cyIsInBpZUluZm8iLCJyYWRpdXMiLCJvdXR0ZXJSYWRpdXMiLCJzdHJFeHByIiwicmV0VmFsdWUiLCJleHByLnJlc29sdmVWYWx1ZSIsImxhYmVscyIsInJldExhYmVsIiwiZXhwci5yZXNvbHZlVGVtcGxhdGUiLCJsYWJlbFNpemVzIiwiaGVscGVyLm1lYXN1cmVUZXh0U2l6ZSIsImV4dExhYmVscyIsInJldEV4dExhYmVsIiwiZXh0TGFiZWxTaXplcyIsImNvbG9yU2NhbGUiLCJkMy5zY2FsZU9yZGluYWwiLCJzZWN0b3JzR3JvdXAiLCJkYXRhQXJlYSIsInNvcnRWYWx1ZXMiLCJkZXNjZW5kaW5nIiwiYXJjcyIsInBhIiwiZDMucGllIiwicGllVmFsdWVzIiwic2VjdG9ycyIsImQzLmFyYyIsImhpZGRlbkFyYyIsImQzXHJcbiAgICAgICAgLmFyYyIsImlzTGFiZWxIaWRkZW4iLCJhcmNPYmoiLCJnZXRNaWRBbmdsZSIsImdldFBvaW50c0ZvckNvbm5lY3Rpb25MaW5lcyIsImxhYmVsV2lkdGgiLCJleHRMYWJlbFdpZHRoIiwibWlkQW5nbGUiLCJwb3NMYWJlbCIsInBvc01pZGRsZSIsInBvc0V4dExhYmVsIiwiZGlzdE1pZGRsZVRvTGFiZWwiLCJyZW5kZXJQaWVDaGFydCIsInByb3BzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImQzXHJcbiAgICAgICAgLnNlbGVjdCIsImdyYXBoQXJlYSIsImNyZWF0ZUFyZWFzIiwiZGVmYXVsdERhdGFDb2xvciIsImQzLnNjaGVtZVNwZWN0cmFsIiwidGl0bGVTaXplIiwiaGVscGVyLmV4cGFuZEFyZWEiLCJoZWxwZXIubW92ZUFyZWEiLCJyZW5kZXJUaXRsZSIsInRpdGxlSGVpZ2h0IiwibmFtZVNpemVzIiwiaW5kTWF4TmFtZSIsIm1heE5hbWVXaWR0aCIsImNoYXJhY3RlcldpZHRoIiwibmFtZUhlaWdodCIsIm51bU5hbWVzIiwieFNwYWNpbmciLCJ5U3BhY2luZyIsIm1hcmtlcldpZHRoIiwibGVnZW5kV2lkdGgiLCJsZWdlbmRIZWlnaHQiLCJsZWdlbmRYIiwibGVnZW5kWSIsImxlZ2VuZCIsImxlZ2VuZEJnIiwiZmlyc3RNYXJrZXJYIiwiZmlyc3RNYXJrZXJZIiwiZmlyc3RMYWJlbFgiLCJmaXJzdExhYmVsWSIsImN1cnJSZW5kZXJQb3NYIiwicmVuZGVyTGVnZW5kIiwiX2NhbnZhcyIsInN2Z1dpZHRoIiwic3ZnSGVpZ2h0Iiwic2V0Q2hhcnRTY2FsZSIsInJlbmRlclN1bW1hcnkiLCJzdW1tYXJ5SW5mbyIsIm91dHB1dFN1bW1hcnkiLCJyZXRSZXNvbHZlZFRlbXBsYXRlIiwib3V0cHV0TGluZXMiLCJvdXRwdXRMaW5lIiwibG9nVG9Db25zb2xlIiwidG9OZXh0RGF0YXNldCIsIm1vbnRoSW5mbyIsImRhdGFzZXRJZHMiLCJjdXJEYXRhc2V0SWQiLCJjdXJJbmRleCIsImNsZWFyU2VsZWN0aW9uIiwiY2lyY2xlcyIsImNpcmNsZSIsIm1vbml0b3IiLCJyZW5kZXJNb250aEhlYWRlciIsImN1ck1vbnRoRGF0ZSIsImRheXNJbk1vbnRoIiwibWF4RGF5VGV4dFNpemUiLCJjZWxsU2l6ZSIsImhlYWRlclllYXJUZXh0IiwiaGVhZGVyTW9udGhUZXh0IiwiaGVhZGVyWWVhclNpemUiLCJoZWFkZXJNb250aFNpemUiLCJoZWFkZXJIZWlnaHQiLCJoZWFkZXJHcm91cCIsImhlYWRlck1vbnRoIiwiaGVhZGVyWWVhciIsImRhdGFzZXROYW1lU2l6ZSIsImRhdGFzZXRSb3RhdG9yIiwicmVmcmVzaCIsIm1vbml0b3JUZXh0U2l6ZSIsImFycm93U2l6ZSIsInByZXZNb250aERhdGUiLCJuZXh0TW9udGhEYXRlIiwidG9kYXlEYXRlIiwiaGVscGVyLmdldERhdGVUb2RheSIsIndlZWtkYXlOYW1lcyIsIndlZWtkYXlOYW1lU2l6ZSIsImRpdmlkaW5nTGluZSIsInJlbmRlck1vbnRoRGF5cyIsImN1ckRhdGFzZXRJbmRleCIsImRvdFJhZGl1cyIsInN0cmVha1dpZHRoIiwiYWxsb3dTY2FsZWRWYWx1ZSIsIm1vbnRoU3RhcnREYXRlIiwic3VidHJhY3QiLCJtb250aEVuZERhdGUiLCJlbmRPZiIsImRhdGFTdGFydERhdGUiLCJkYXRhRW5kRGF0ZSIsImFubm90YXRpb25zIiwiY3VyQW5ub3RhdGlvbiIsImRheXNJbk1vbnRoVmlldyIsImluZENvbCIsImluZFJvdyIsImhlbHBlci5zdHJUb0RhdGUiLCJpc0luVGhpc01vbnRoIiwiaXNPdXRPZkRhdGFSYW5nZSIsImN1clZhbHVlIiwiY29uc29sZSIsInNjYWxlZFZhbHVlIiwibmV4dFZhbHVlIiwicHJldlZhbHVlIiwic3RyZWFrSW4iLCJzdHJlYWtPdXQiLCJ0ZXh0QW5ub3RhdGlvbiIsImRhdGFzZXRJbmRleCIsImRheUluTW9udGgiLCJyb3ciLCJjb2wiLCJ0b3RhbERheUJsb2NrV2lkdGgiLCJkM1xyXG4gICAgICAgIC5zY2FsZUxpbmVhciIsInN0cmVha0NvbG9yIiwic3RyZWFrSGVpZ2h0IiwiZDMuaW50ZXJwb2xhdGVMYWIiLCJ0b2RheSIsInRvZGF5UmluZ3MiLCJ2YWx1ZVRleHQiLCJ0cmFuc1giLCJ0cmFuc1kiLCJncmFwaEFyZWFXaWR0aCIsImdyYXBoQXJlYUhlaWdodCIsInRvdGFsSGVpZ2h0IiwiaGVhZGVyIiwidG90YWxXaWR0aCIsInJlbmRlck1vbnRoIiwibnVtQXZhaWxhYmxlRGF0YXNldCIsIm1vbnRoRGF0ZSIsImhlbHBlci5nZXREYXRlQnlEdXJhdGlvblRvVG9kYXkiLCJyZW5kZXJIZWF0bWFwIiwiaGVhdG1hcEluZm8iLCJyZW5kZXJCdWxsZXQiLCJidWxsZXRJbmZvIiwicmV0UmVuZGVyQXhpcyIsImxhc3RSYW5nZSIsInRpY2tGb3JtYXRGbiIsImQzLnRpY2tGb3JtYXQiLCJtYXhUaWNrTGFiZWxTaXplIiwiZDMuc2NhbGVMaW5lYXIiLCJheGlzR2VuIiwiZDMuYXhpc0JvdHRvbSIsImQzLmF4aXNMZWZ0IiwicmVuZGVyQXhpcyIsInhNaWRkbGUiLCJheGlzV2lkdGgiLCJ1bml0U2l6ZSIsImxhc3RCb3VuZCIsInJlbmRlckJhY2tQYW5lbCIsInJldFJlbmRlckJhciIsInJldEFjdHVhbFZhbHVlIiwiYWN0dWFsVmFsdWUiLCJiYXJXaWR0aCIsInJlbmRlckJhciIsIm1hcmtlckxlbmd0aCIsInJlbmRlck1hcmsiLCJyZW5kZXJYQXhpcyIsImNoYXJ0SW5mbyIsInhEb21haW4iLCJkMy5leHRlbnQiLCJ4U2NhbGUiLCJ0aW1lTW9udGgiLCJ0aW1lV2VlayIsInRpbWVIb3VyIiwidGltZU1pbnV0ZSIsInRpbWVTZWNvbmQiLCJkM1xyXG4gICAgICAgIC5zY2FsZVRpbWUiLCJ0aWNrSW50ZXJ2YWxJbkR1cmF0aW9uIiwiaGVscGVyLnBhcnNlRHVyYXRpb25TdHJpbmciLCJmaXJzdERhdGUiLCJsYXN0RGF0ZSIsImQzLnRpbWVEYXkiLCJ0b0RhdGUiLCJhc0RheXMiLCJkMy50aW1lV2VlayIsImQzLnRpbWVNb250aCIsImQzLnRpbWVZZWFyIiwiZ2V0WFRpY2tWYWx1ZXMiLCJpblRpY2tMYWJlbEZvcm1hdCIsImZuVGlja0xhYmVsRm9ybWF0IiwidGlja0xhYmVsRm9ybWF0IiwiZDMudGltZUZvcm1hdCIsImdldFhUaWNrTGFiZWxGb3JtYXQiLCJ4QXhpc0dlbiIsInhBeGlzIiwidGV4dFNpemUiLCJ4QXhpc1RpY2tMYWJlbHMiLCJ0aWNrTGFiZWxIZWlnaHQiLCJyZW5kZXJZQXhpcyIsInlNaW5PZkRhdGFzZXRzIiwieU1heE9mRGF0YXNldHMiLCJ0bXBWYWx1ZUlzVGltZSIsInZhbHVlSXNUaW1lIiwieU1pbkFzc2lnbmVkIiwieU1heEFzc2lnbmVkIiwieVRtcCIsInlUbXBBc3NpZ25lZCIsInlMb3dlciIsInlVcHBlciIsInlFeHRlbnQiLCJ5U2NhbGUiLCJ5QXhpc0xhYmVsVGV4dCIsInlBeGlzVW5pdFRleHQiLCJ5QXhpc0dlbiIsImlzVGltZVZhbHVlIiwiYWJzRXh0ZW50IiwiaW50ZXJsZWF2ZSIsImdldFlUaWNrTGFiZWxGb3JtYXQiLCJkMy5yYW5nZSIsImFzU2Vjb25kcyIsImdldFlUaWNrVmFsdWVzIiwieUF4aXMiLCJ5QXhpc0xpbmUiLCJ5QXhpc1RpY2tzIiwieUF4aXNUaWNrTGFiZWxzIiwibWF4VGlja0xhYmVsV2lkdGgiLCJsYWJlbFNpemUiLCJ5QXhpc0xhYmVsU2l6ZSIsInlBeGlzV2lkdGgiLCJyZW5kZXJMaW5lIiwibGVmdFlTY2FsZSIsInJpZ2h0WVNjYWxlIiwibGluZUdlbiIsImRlZmluZWQiLCJjdXJ2ZSIsImN1cnZlTGluZWFyIiwiZGVmaW5lZDAiLCJwb2ludFgiLCJwb2ludFkiLCJkM1xyXG4gICAgICAgICAgICAubGluZSIsInJlbmRlclBvaW50cyIsImRvdHMiLCJpc0ludGVnZXIiLCJ0YXJnZXRFbGVtZW50cyIsInRvb2x0aXAiLCJ0b29sdGlwQmciLCJ0b29sdGlwTGFiZWwiLCJ0b29sdGlwTGFiZWxEYXRlIiwidG9vbHRpcExhYmVsVmFsdWUiLCJzb3VyY2VFdmVudCIsImN1cnJlbnRUYXJnZXQiLCJvd25lclNWR0VsZW1lbnQiLCJjcmVhdGVTVkdQb2ludCIsImNsaWVudFgiLCJjbGllbnRZIiwibWF0cml4VHJhbnNmb3JtIiwiZ2V0U2NyZWVuQ1RNIiwiaW52ZXJzZSIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImNsaWVudExlZnQiLCJjbGllbnRUb3AiLCJwYWdlWCIsInBhZ2VZIiwiZDMucG9pbnRlciIsInRvb2x0aXBCZ1dpZHRoIiwidG9vbHRpcEJnSGVpZ2h0IiwibGFiZWxEYXRlVGV4dCIsImxhYmVsRGF0ZVNpemUiLCJsYWJlbFZhbHVlVGV4dCIsImxhYmVsVmFsdWVTaXplIiwidG9vbHRpcFBvc1giLCJ0b29sdGlwUG9zWSIsInRvb2x0aXBYT2Zmc2V0IiwidG9vbHRpcFlPZmZzZXQiLCJyZW5kZXJUb29sdGlwIiwiY3VyckJhclNldCIsInRvdGFsTnVtT2ZCYXJTZXRzIiwiYmFyU2V0V2lkdGgiLCJiYXJzIiwicG9ydGlvblZpc2libGUiLCJsZWZ0WUF4aXMiLCJyaWdodFlBeGlzIiwieEF4aXNIZWlnaHQiLCJsZWZ0WUF4aXNXaWR0aCIsInJpZ2h0WUF4aXNXaWR0aCIsInhEYXRhc2V0SWRzIiwibnVtRWxlbXNFeGNsdWRlZCIsIm5hbWVMYWJlbHMiLCJwb3NYIiwiZW50cmllcyIsInJlbmRlckxpbmVDaGFydCIsImRhdGFzZXRPbkxlZnRZQXhpcyIsImRhdGFzZXRPblJpZ2h0WUF4aXMiLCJ0b0xvY2FsZUxvd2VyQ2FzZSIsInJldFJlbmRlckxlZnRZQXhpcyIsInJldFJlbmRlclJpZ2h0WUF4aXMiLCJyZW5kZXJCYXJDaGFydCIsInN0clRvQm9vbCIsInZhbGlkYXRlU2VhcmNoVHlwZSIsInZhbGlkYXRlWUF4aXNMb2NhdGlvbiIsImxvY2F0aW9uIiwidmFsaWRhdGVDb2xvciIsInNwbGl0SW5wdXRCeUNvbW1hIiwiZHVtbXkiLCJzcGxpdHRlZCIsImdldEJvb2xBcnJheUZyb21JbnB1dCIsIm51bURhdGFzZXQiLCJkZWZhdWx0VmFsdWUiLCJhbGxvd05vVmFsaWRWYWx1ZSIsIm51bVZhbGlkVmFsdWUiLCJjdXJyIiwicHJldiIsImN1cnJCb29sIiwiaW5wdXRCb29sIiwiZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQiLCJoZWxwZXIucGFyc2VGbG9hdEZyb21BbnkiLCJjdXJyTnVtIiwiaW5wdXROdW0iLCJnZXRTdHJpbmdGcm9tSW5wdXQiLCJoZWxwZXIucmVwbGFjZUltZ1RhZ0J5QWx0IiwiZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQiLCJ2YWxpZGF0b3IiLCJzdHJOdW1iZXIiLCJnZXROdW1iZXJBcnJheSIsIm51bUFycmF5IiwiZWxlbSIsInBpZWNlIiwiZ2V0U3RyaW5nQXJyYXkiLCJzdHJBcnJheSIsInBhcnNlQ29tbW9uQ2hhcnRJbmZvIiwieWFtbCIsInJldFlBeGlzTGFiZWwiLCJyZXRZQXhpc0NvbG9yIiwicmV0WUF4aXNMYWJlbENvbG9yIiwicmV0WUF4aXNVbml0IiwicmV0WUF4aXNUaWNrSW50ZXJ2YWwiLCJyZXRZQXhpc1RpY2tMYWJlbEZvcm1hdCIsInJldFlNaW4iLCJyZXRZTWF4IiwicmV0UmV2ZXJzZVlBeGlzIiwiZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MiLCJvYmplY3RLZXlzIiwiZ2V0RGF0ZUZyb21GaWxlbmFtZSIsImhlbHBlci5nZXREYXRlU3RyaW5nRnJvbUlucHV0U3RyaW5nIiwiYmFzZW5hbWUiLCJnZXREYXRlRnJvbUZyb250bWF0dGVyIiwiZmlsZUNhY2hlIiwiZnJvbnRNYXR0ZXIiLCJmcm9udG1hdHRlciIsImhlbHBlci5kZWVwVmFsdWUiLCJleHRyYWN0RGF0ZVVzaW5nUmVnZXhXaXRoVmFsdWUiLCJnZXREYXRlRnJvbVRhZyIsImNvbnRlbnQiLCJ0YWdOYW1lIiwiZ2V0RGF0ZUZyb21UZXh0IiwiZ2V0RGF0ZUZyb21EdkZpZWxkIiwiZHZUYXJnZXQiLCJnZXREYXRlRnJvbUZpbGVNZXRhIiwiVEZpbGUiLCJoZWxwZXIuZ2V0RGF0ZUZyb21Vbml4VGltZSIsInN0YXQiLCJjdGltZSIsIm10aW1lIiwiZ2V0RGF0ZUZyb21UYXNrIiwiVGFzayIsIlRhc2tEb25lIiwiVGFza05vdERvbmUiLCJhZGRUb0RhdGFNYXAiLCJkYXRhTWFwIiwicXVlcnlWYWx1ZVBhaXJzIiwiZXh0cmFjdERhdGFVc2luZ1JlZ2V4V2l0aE11bHRpcGxlVmFsdWVzIiwieFZhbHVlTWFwIiwibWVhc3VyZSIsImV4dHJhY3RlZCIsInJldFBhcnNlIiwiY29sbGVjdERhdGFGcm9tRmlsZU1ldGEiLCJ4VmFsdWUiLCJwYXR0ZXJuIiwiaGVscGVyLmdldFdvcmRDb3VudCIsIm51bUNoYXJzIiwibnVtU2VudGVuY2VzIiwiaGVscGVyLmdldFNlbnRlbmNlQ291bnQiLCJ0YXJnZXRNZWFzdXJlIiwidGFyZ2V0RXhpc3QiLCJERUZBVUxUX1NFVFRJTkdTIiwiVHJhY2tlclNldHRpbmdUYWIiLCJQbHVnaW5TZXR0aW5nVGFiIiwiYXBwIiwicGx1Z2luIiwiZGlzcGxheSIsImNvbnRhaW5lckVsIiwiU2V0dGluZyIsInNldERlc2MiLCJhZGRUZXh0Iiwic2V0UGxhY2Vob2xkZXIiLCJzZXR0aW5ncyIsIm9uQ2hhbmdlIiwic2F2ZVNldHRpbmdzIiwiVHJhY2tlciIsIlBsdWdpbiIsIm9ubG9hZCIsImxvYWRTZXR0aW5ncyIsImFkZFNldHRpbmdUYWIiLCJyZWdpc3Rlck1hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yIiwicG9zdHByb2Nlc3NvciIsImFkZENvbW1hbmQiLCJhZGRDb2RlQmxvY2siLCJsb2FkRGF0YSIsInNhdmVEYXRhIiwicmVuZGVyRXJyb3JNZXNzYWdlIiwiZWwiLCJyZW5kZXJpbmcucmVuZGVyRXJyb3JNZXNzYWdlIiwib251bmxvYWQiLCJnZXRGaWxlc0luRm9sZGVyIiwiaW5jbHVkZVN1YkZvbGRlcnMiLCJmaWxlcyIsIml0ZW0iLCJleHRlbnNpb24iLCJURm9sZGVyIiwiZ2V0RmlsZXMiLCJmb2xkZXJUb1NlYXJjaCIsInVzZVNwZWNpZmllZEZpbGVzT25seSIsInNwZWNpZmllZEZpbGVzIiwiZmlsZXNDb250YWluc0xpbmtlZEZpbGVzIiwidmF1bHQiLCJnZXRBYnN0cmFjdEZpbGVCeVBhdGgiLCJub3JtYWxpemVQYXRoIiwiZm9sZGVyRmlsZXMiLCJsaW5rZWRGaWxlTXVsdGlwbGllciIsInNlYXJjaEZpbGVNdWx0aWZwaWVyQWZ0ZXJMaW5rIiwibWV0YWRhdGFDYWNoZSIsImdldEZpbGVDYWNoZSIsImxpbmVzIiwiYWRhcHRlciIsInJlYWQiLCJsaW5rcyIsImxpbmsiLCJsaW5rZWRGaWxlIiwiZ2V0Rmlyc3RMaW5rcGF0aERlc3QiLCJsaW5lTnVtYmVyIiwib3JpZ2luYWwiLCJjdHgiLCJ5YW1sVGV4dCIsInRhYlNpemUiLCJnZXRDb25maWciLCJzcGFjZXMiLCJyZXRSZW5kZXJJbmZvIiwicGFyc2VZYW1sIiwia2V5c0ZvdW5kSW5ZQU1MIiwibnVtRGF0YXNldHMiLCJyZXRTZWFyY2hUeXBlIiwic3RyVHlwZSIsIlRhZyIsIkZyb250bWF0dGVyIiwiV2lraSIsIldpa2lMaW5rIiwiV2lraURpc3BsYXkiLCJUZXh0IiwiZHZGaWVsZCIsIkZpbGVNZXRhIiwibXVsdGlwbGVWYWx1ZVNwYXJhdG9yIiwicmV0TXVsdGlwbGVWYWx1ZVNwYXJhdG9yIiwicmV0WERhdGFzZXQiLCJrZXlzT2ZSZW5kZXJJbmZvIiwiYWRkaXRpb25hbEFsbG93ZWRLZXlzIiwieWFtbExpbmVLZXlzIiwieWFtbEJhcktleXMiLCJ5YW1sUGllS2V5cyIsInlhbWxTdW1tYXJ5S2V5cyIsInlhbWxNb250aEtleXMiLCJ5YW1sSGVhdG1hcEtleXMiLCJ5YW1sQnVsbGV0S2V5cyIsInlhbWxDdXN0b21EYXRhc2V0S2V5cyIsImN1c3RvbURhdGFzZXRJZCIsInN0ckN1c3RvbURhdGFzZXRJZCIsImFic3RyYWN0Rm9sZGVyIiwicmV0RmlsZXMiLCJzdHJTdGFydERhdGUiLCJpc1N0YXJ0RGF0ZVZhbGlkIiwic3RyRW5kRGF0ZSIsImlzRW5kRGF0ZVZhbGlkIiwicmV0RGF0YXNldE5hbWUiLCJpbmRVbnRpdGxlZCIsIlNldCIsInJldENvbnN0VmFsdWUiLCJyZXRJZ25vcmVBdHRhY2hlZFZhbHVlIiwicmV0SWdub3JlWmVyb1ZhbHVlIiwicmV0QWNjdW0iLCJyZXRQZW5hbHR5IiwicmV0VmFsdWVTaGlmdCIsInJldFNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbiIsInJldE1hcmdpbiIsImRhdGFzZXRLZXkiLCJ5YW1sQ3VzdG9tRGF0YXNldCIsImtleXNPZkN1c3RvbURhdGFzZXRJbmZvIiwicmV0WERhdGEiLCJudW1YRGF0YSIsInJldFlEYXRhIiwibGluZUtleSIsInlhbWxMaW5lIiwia2V5c09mTGluZUluZm8iLCJyZXRQYXJzZUNvbW1vbkNoYXJ0SW5mbyIsInJldExpbmVDb2xvciIsInJldExpbmVXaWR0aCIsInJldFNob3dMaW5lIiwicmV0U2hvd1BvaW50IiwicmV0UG9pbnRDb2xvciIsInJldFBvaW50Qm9yZGVyQ29sb3IiLCJyZXRQb2ludEJvcmRlcldpZHRoIiwicmV0UG9pbnRTaXplIiwicmV0RmlsbEdhcCIsInJldFlBeGlzTG9jYXRpb24iLCJiYXJLZXkiLCJ5YW1sQmFyIiwia2V5c09mQmFySW5mbyIsInJldEJhckNvbG9yIiwicGllS2V5IiwieWFtbFBpZSIsImtleXNPZlBpZUluZm8iLCJyZXREYXRhIiwibnVtRGF0YSIsInJldERhdGFDb2xvciIsInJldERhdGFOYW1lIiwiZGVmYXVsdExlZ2VuZE9yaWVudGF0aW9uIiwic3VtbWFyeUtleSIsInlhbWxTdW1tYXJ5Iiwia2V5c09mU3VtbWFyeUluZm8iLCJtb250aEtleSIsInlhbWxNb250aCIsImtleXNPZk1vbnRoSW5mbyIsInJldERhdGFzZXQiLCJyZXRUaHJlc2hvbGQiLCJpbmREYXRhc2V0IiwicmV0QW5ub3RhdGlvbiIsImhlYXRtYXBLZXkiLCJ5YW1sSGVhdG1hcCIsImtleXNPZkhlYXRtYXBJbmZvIiwiYnVsbGV0S2V5IiwieWFtbEJ1bGxldCIsImtleXNPZkJ1bGxldEluZm8iLCJyZXRSYW5nZSIsIm51bVJhbmdlIiwicmV0UmFuZ2VDb2xvciIsImdldFJlbmRlckluZm9Gcm9tWWFtbCIsInByb2Nlc3NJbmZvIiwibG9vcEZpbGVQcm9taXNlcyIsInNraXBUaGlzRmlsZSIsInhEYXRhc2V0SWQiLCJ4RGF0ZSIsImNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21GaWxlbmFtZSIsInhEYXRhc2V0UXVlcnkiLCJjb2xsZWN0aW5nLmdldERhdGVGcm9tRnJvbnRtYXR0ZXIiLCJjb2xsZWN0aW5nLmdldERhdGVGcm9tVGFnIiwiY29sbGVjdGluZy5nZXREYXRlRnJvbVRleHQiLCJjb2xsZWN0aW5nLmdldERhdGVGcm9tRHZGaWVsZCIsImNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21GaWxlTWV0YSIsImNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21UYXNrIiwibG9vcFF1ZXJ5UHJvbWlzZXMiLCJnb3RBbnlWYWx1ZSIsImZyb250TWF0dGVyVGFncyIsInRhZ3MiLCJ0YWdNZWFzdXJlIiwidGFnRXhpc3QiLCJzcGxpdHRlZFBhcnQiLCJwYXJ0IiwidGFnIiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21Gcm9udG1hdHRlclRhZyIsImNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tRnJvbnRtYXR0ZXJLZXkiLCJ0ZXh0VG9TZWFyY2giLCJ3aWtpVGV4dCIsImRpc3BsYXlUZXh0IiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21XaWtpIiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21JbmxpbmVUYWciLCJjb2xsZWN0aW5nLmNvbGxlY3REYXRhRnJvbVRleHQiLCJjb2xsZWN0aW5nLmNvbGxlY3REYXRhRnJvbUZpbGVNZXRhIiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21EdkZpZWxkIiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21UYXNrIiwiYWxsIiwiY29sbGVjdERhdGFGcm9tVGFibGUiLCJkYXRlRXJyb3JNZXNzYWdlIiwicGFpciIsImluZFBhaXIiLCJjb2xsZWN0ZWQiLCJyZXRSZW5kZXIiLCJyZXQiLCJwaWUucmVuZGVyUGllQ2hhcnQiLCJzdW1tYXJ5LnJlbmRlclN1bW1hcnkiLCJidWxsZXQucmVuZGVyQnVsbGV0IiwibW9udGgucmVuZGVyTW9udGgiLCJoZWF0bWFwLnJlbmRlckhlYXRtYXAiLCJyZW5kZXJpbmcucmVuZGVyIiwidGFibGVRdWVyaWVzIiwidGFibGVzIiwidGFibGVGaWxlTm90Rm91bmQiLCJpc1giLCJ0YWJsZSIsInRhYmxlRGF0YSIsInlEYXRhc2V0UXVlcmllcyIsInRleHRUYWJsZSIsIm1kVGFibGVSZWdleCIsImluZFRhYmxlIiwidGFibGVMaW5lcyIsIm51bUNvbHVtbnMiLCJudW1EYXRhUm93cyIsImhlYWRlckxpbmUiLCJoZWxwZXIudHJpbUJ5Q2hhciIsInNlcExpbmUiLCJzcGVwTGluZVNwbGl0dGVkIiwiY29sdW1uWERhdGFzZXQiLCJ4VmFsdWVzIiwidGFibGVMaW5lIiwiZGF0YVJvd1NwbGl0dGVkIiwieURhdGFzZXRRdWVyeSIsImNvbHVtbk9mSW50ZXJlc3QiLCJpbmRMaW5lIiwiY29sbGVjdGluZy5hZGRUb0RhdGFNYXAiLCJnZXRFZGl0b3IiLCJ3b3Jrc3BhY2UiLCJnZXRBY3RpdmVWaWV3T2ZUeXBlIiwiTWFya2Rvd25WaWV3IiwiZWRpdG9yIiwib3V0cHV0VHlwZSIsImFjdGl2ZUxlYWYiLCJ2aWV3IiwiY29kZWJsb2NrVG9JbnNlcnQiLCJpbnNlcnRUb05leHRMaW5lIiwiZ2V0Q3Vyc29yIiwiZ2V0TGluZSIsInNldFNlbGVjdGlvbiIsInJlcGxhY2VTZWxlY3Rpb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O2dGQXFFTyxTQUFTQSxFQUFVQyxFQUFTQyxFQUFZQyxFQUFHQyxHQUU5QyxPQUFPLElBQUtELElBQU1BLEVBQUlFLFdBQVUsU0FBVUMsRUFBU0MsR0FDL0MsU0FBU0MsRUFBVUMsR0FBUyxJQUFNQyxFQUFLTixFQUFVTyxLQUFLRixJQUFXLE1BQU9HLEdBQUtMLEVBQU9LLElBQ3BGLFNBQVNDLEVBQVNKLEdBQVMsSUFBTUMsRUFBS04sRUFBaUIsTUFBRUssSUFBVyxNQUFPRyxHQUFLTCxFQUFPSyxJQUN2RixTQUFTRixFQUFLSSxHQUpsQixJQUFlTCxFQUlhSyxFQUFPQyxLQUFPVCxFQUFRUSxFQUFPTCxRQUoxQ0EsRUFJeURLLEVBQU9MLE1BSmhEQSxhQUFpQk4sRUFBSU0sRUFBUSxJQUFJTixHQUFFLFNBQVVHLEdBQVdBLEVBQVFHLE9BSVRPLEtBQUtSLEVBQVdLLEdBQ2xHSCxHQUFNTixFQUFZQSxFQUFVYSxNQUFNaEIsRUFBU0MsR0FBYyxLQUFLUyxXQzNFdkQsV0FBU08sRUFBR0MsR0FDekIsT0FBT0QsRUFBSUMsR0FBSyxFQUFJRCxFQUFJQyxFQUFJLEVBQUlELEdBQUtDLEVBQUksRUFBSUMsSUNDaEMsV0FBU0MsR0FDdEIsSUFBSUMsRUFBUUQsRUFDUkUsRUFBVUYsRUFPZCxTQUFTRyxFQUFLTixFQUFHTyxFQUFHQyxFQUFJQyxHQUd0QixJQUZVLE1BQU5ELElBQVlBLEVBQUssR0FDWCxNQUFOQyxJQUFZQSxFQUFLVCxFQUFFVSxRQUNoQkYsRUFBS0MsR0FBSSxDQUNkLE1BQU1FLEVBQU9ILEVBQUtDLElBQVEsRUFDdEJKLEVBQVFMLEVBQUVXLEdBQU1KLEdBQUssRUFBR0MsRUFBS0csRUFBTSxFQUNsQ0YsRUFBS0UsRUFFWixPQUFPSCxFQXFCVCxPQWxDaUIsSUFBYkwsRUFBRU8sU0FDSk4sRUFBUSxDQUFDUSxFQUFHTCxJQUFNSixFQUFFUyxHQUFLTCxFQUN6QkYsRUFtQ0osU0FBNkJGLEdBQzNCLE1BQU8sQ0FBQ1MsRUFBR0wsSUFBTU0sRUFBVVYsRUFBRVMsR0FBSUwsR0FwQ3JCTyxDQUFvQlgsSUFnQ3pCLENBQUNHLEtBQUFBLEVBQU1TLE9BUGQsU0FBZ0JmLEVBQUdPLEVBQUdDLEVBQUlDLEdBQ2QsTUFBTkQsSUFBWUEsRUFBSyxHQUNYLE1BQU5DLElBQVlBLEVBQUtULEVBQUVVLFFBQ3ZCLE1BQU1NLEVBQUlWLEVBQUtOLEVBQUdPLEVBQUdDLEVBQUlDLEVBQUssR0FDOUIsT0FBT08sRUFBSVIsR0FBTUosRUFBTUosRUFBRWdCLEVBQUksR0FBSVQsSUFBTUgsRUFBTUosRUFBRWdCLEdBQUlULEdBQUtTLEVBQUksRUFBSUEsR0FHNUNDLE1BbEJ0QixTQUFlakIsRUFBR08sRUFBR0MsRUFBSUMsR0FHdkIsSUFGVSxNQUFORCxJQUFZQSxFQUFLLEdBQ1gsTUFBTkMsSUFBWUEsRUFBS1QsRUFBRVUsUUFDaEJGLEVBQUtDLEdBQUksQ0FDZCxNQUFNRSxFQUFPSCxFQUFLQyxJQUFRLEVBQ3RCSixFQUFRTCxFQUFFVyxHQUFNSixHQUFLLEVBQUdFLEVBQUtFLEVBQzVCSCxFQUFLRyxFQUFNLEVBRWxCLE9BQU9ILElDMUJYLE1BQ2FVLEVBRFdDLEVBQVNOLEdBQ1VJLE1BRWZFLEdDUGIsU0FBU1osR0FDdEIsT0FBYSxPQUFOQSxFQUFhTCxLQUFPSyxLRE1nQlEsT0FDN0MsTUFBZUcsOE5FUmYsSUFBSUUsRUFBTUMsS0FBS0MsS0FBSyxJQUNoQkMsRUFBS0YsS0FBS0MsS0FBSyxJQUNmRSxFQUFLSCxLQUFLQyxLQUFLLEdBa0NaLFNBQVNHLEVBQWNDLEVBQU9DLEVBQU1DLEdBQ3pDLElBQUlwQyxHQUFRbUMsRUFBT0QsR0FBU0wsS0FBS1EsSUFBSSxFQUFHRCxHQUNwQ0UsRUFBUVQsS0FBS1UsTUFBTVYsS0FBS1csSUFBSXhDLEdBQVE2QixLQUFLWSxNQUN6Q0MsRUFBUTFDLEVBQU82QixLQUFLYyxJQUFJLEdBQUlMLEdBQ2hDLE9BQU9BLEdBQVMsR0FDVEksR0FBU2QsRUFBTSxHQUFLYyxHQUFTWCxFQUFLLEVBQUlXLEdBQVNWLEVBQUssRUFBSSxHQUFLSCxLQUFLYyxJQUFJLEdBQUlMLElBQzFFVCxLQUFLYyxJQUFJLElBQUtMLElBQVVJLEdBQVNkLEVBQU0sR0FBS2MsR0FBU1gsRUFBSyxFQUFJVyxHQUFTVixFQUFLLEVBQUksR0FHbEYsU0FBU1ksRUFBU1YsRUFBT0MsRUFBTUMsR0FDcEMsSUFBSVMsRUFBUWhCLEtBQUtpQixJQUFJWCxFQUFPRCxHQUFTTCxLQUFLUSxJQUFJLEVBQUdELEdBQzdDVyxFQUFRbEIsS0FBS2MsSUFBSSxHQUFJZCxLQUFLVSxNQUFNVixLQUFLVyxJQUFJSyxHQUFTaEIsS0FBS1ksT0FDdkRDLEVBQVFHLEVBQVFFLEVBSXBCLE9BSElMLEdBQVNkLEVBQUttQixHQUFTLEdBQ2xCTCxHQUFTWCxFQUFJZ0IsR0FBUyxFQUN0QkwsR0FBU1YsSUFBSWUsR0FBUyxHQUN4QlosRUFBT0QsR0FBU2EsRUFBUUEsRUNwRGxCLFNBQVNWLEVBQUlXLEVBQVFDLEdBQ2xDLElBQUlaLEVBQ0osUUFBZ0JhLElBQVpELEVBQ0YsSUFBSyxNQUFNbEQsS0FBU2lELEVBQ0wsTUFBVGpELElBQ0lzQyxFQUFNdEMsUUFBa0JtRCxJQUFSYixHQUFxQnRDLEdBQVNBLEtBQ3BEc0MsRUFBTXRDLE9BR0wsQ0FDTCxJQUFJb0QsR0FBUyxFQUNiLElBQUssSUFBSXBELEtBQVNpRCxFQUNpQyxPQUE1Q2pELEVBQVFrRCxFQUFRbEQsSUFBU29ELEVBQU9ILE1BQzdCWCxFQUFNdEMsUUFBa0JtRCxJQUFSYixHQUFxQnRDLEdBQVNBLEtBQ3BEc0MsRUFBTXRDLEdBSVosT0FBT3NDLEVDbEJNLFNBQVNlLEVBQUlKLEVBQVFDLEdBQ2xDLElBQUlHLEVBQ0osUUFBZ0JGLElBQVpELEVBQ0YsSUFBSyxNQUFNbEQsS0FBU2lELEVBQ0wsTUFBVGpELElBQ0lxRCxFQUFNckQsUUFBa0JtRCxJQUFSRSxHQUFxQnJELEdBQVNBLEtBQ3BEcUQsRUFBTXJELE9BR0wsQ0FDTCxJQUFJb0QsR0FBUyxFQUNiLElBQUssSUFBSXBELEtBQVNpRCxFQUNpQyxPQUE1Q2pELEVBQVFrRCxFQUFRbEQsSUFBU29ELEVBQU9ILE1BQzdCSSxFQUFNckQsUUFBa0JtRCxJQUFSRSxHQUFxQnJELEdBQVNBLEtBQ3BEcUQsRUFBTXJELEdBSVosT0FBT3FELEVDZE0sU0FBU0MsRUFBWUMsRUFBT0MsRUFBR3pDLEVBQU8sRUFBR1csRUFBUTZCLEVBQU1wQyxPQUFTLEVBQUdMLEVBQVVRLEdBQzFGLEtBQU9JLEVBQVFYLEdBQU0sQ0FDbkIsR0FBSVcsRUFBUVgsRUFBTyxJQUFLLENBQ3RCLE1BQU0wQyxFQUFJL0IsRUFBUVgsRUFBTyxFQUNuQjJDLEVBQUlGLEVBQUl6QyxFQUFPLEVBQ2Y0QyxFQUFJN0IsS0FBS1csSUFBSWdCLEdBQ2JHLEVBQUksR0FBTTlCLEtBQUsrQixJQUFJLEVBQUlGLEVBQUksR0FDM0JHLEVBQUssR0FBTWhDLEtBQUtDLEtBQUs0QixFQUFJQyxHQUFLSCxFQUFJRyxHQUFLSCxJQUFNQyxFQUFJRCxFQUFJLEVBQUksR0FBSyxFQUFJLEdBR3hFSCxFQUFZQyxFQUFPQyxFQUZIMUIsS0FBS1EsSUFBSXZCLEVBQU1lLEtBQUtVLE1BQU1nQixFQUFJRSxFQUFJRSxFQUFJSCxFQUFJSyxJQUN6Q2hDLEtBQUt1QixJQUFJM0IsRUFBT0ksS0FBS1UsTUFBTWdCLEdBQUtDLEVBQUlDLEdBQUtFLEVBQUlILEVBQUlLLElBQ3pCaEQsR0FHM0MsTUFBTWlELEVBQUlSLEVBQU1DLEdBQ2hCLElBQUkvQixFQUFJVixFQUNKaUQsRUFBSXRDLEVBS1IsSUFIQXVDLEVBQUtWLEVBQU94QyxFQUFNeUMsR0FDZDFDLEVBQVF5QyxFQUFNN0IsR0FBUXFDLEdBQUssR0FBR0UsRUFBS1YsRUFBT3hDLEVBQU1XLEdBRTdDRCxFQUFJdUMsR0FBRyxDQUVaLElBREFDLEVBQUtWLEVBQU85QixFQUFHdUMsS0FBTXZDLElBQUt1QyxFQUNuQmxELEVBQVF5QyxFQUFNOUIsR0FBSXNDLEdBQUssS0FBS3RDLEVBQ25DLEtBQU9YLEVBQVF5QyxFQUFNUyxHQUFJRCxHQUFLLEtBQUtDLEVBR0wsSUFBNUJsRCxFQUFReUMsRUFBTXhDLEdBQU9nRCxHQUFVRSxFQUFLVixFQUFPeEMsRUFBTWlELE1BQzlDQSxFQUFHQyxFQUFLVixFQUFPUyxFQUFHdEMsSUFFckJzQyxHQUFLUixJQUFHekMsRUFBT2lELEVBQUksR0FDbkJSLEdBQUtRLElBQUd0QyxFQUFRc0MsRUFBSSxHQUUxQixPQUFPVCxFQUdULFNBQVNVLEVBQUtWLEVBQU85QixFQUFHdUMsR0FDdEIsTUFBTUQsRUFBSVIsRUFBTTlCLEdBQ2hCOEIsRUFBTTlCLEdBQUs4QixFQUFNUyxHQUNqQlQsRUFBTVMsR0FBS0QsRUNyQ0UsU0FBU0csRUFBU2pCLEVBQVFrQixFQUFHakIsR0FFMUMsR0FEQUQsRUFBU21CLGFBQWFDLEtMRmpCLFVBQWtCcEIsRUFBUUMsR0FDL0IsUUFBZ0JDLElBQVpELEVBQ0YsSUFBSyxJQUFJbEQsS0FBU2lELEVBQ0gsTUFBVGpELElBQWtCQSxHQUFTQSxJQUFVQSxVQUNqQ0EsT0FHTCxDQUNMLElBQUlvRCxHQUFTLEVBQ2IsSUFBSyxJQUFJcEQsS0FBU2lELEVBQ2lDLE9BQTVDakQsRUFBUWtELEVBQVFsRCxJQUFTb0QsRUFBT0gsTUFBcUJqRCxHQUFTQSxJQUFVQSxVQUNyRUEsSUtUZXNFLENBQVFyQixFQUFRQyxJQUNyQ08sRUFBSVIsRUFBTzlCLE9BQWpCLENBQ0EsSUFBS2dELEdBQUtBLElBQU0sR0FBS1YsRUFBSSxFQUFHLE9BQU9KLEVBQUlKLEdBQ3ZDLEdBQUlrQixHQUFLLEVBQUcsT0FBTzdCLEVBQUlXLEdBQ3ZCLElBQUlRLEVBQ0FoQyxHQUFLZ0MsRUFBSSxHQUFLVSxFQUNkSSxFQUFLekMsS0FBS1UsTUFBTWYsR0FDaEIrQyxFQUFTbEMsRUFBSWdCLEVBQVlMLEVBQVFzQixHQUFJRSxTQUFTLEVBQUdGLEVBQUssSUFFMUQsT0FBT0MsR0FETW5CLEVBQUlKLEVBQU93QixTQUFTRixFQUFLLElBQ1pDLElBQVcvQyxFQUFJOEMsSUNmNUIsV0FBU3BDLEVBQU9DLEVBQU1uQyxHQUNuQ2tDLEdBQVNBLEVBQU9DLEdBQVFBLEVBQU1uQyxHQUFRd0QsRUFBSWlCLFVBQVV2RCxRQUFVLEdBQUtpQixFQUFPRCxFQUFPQSxFQUFRLEVBQUcsR0FBS3NCLEVBQUksRUFBSSxHQUFLeEQsRUFNOUcsSUFKQSxJQUFJd0IsR0FBSyxFQUNMZ0MsRUFBb0QsRUFBaEQzQixLQUFLUSxJQUFJLEVBQUdSLEtBQUs2QyxNQUFNdkMsRUFBT0QsR0FBU2xDLElBQzNDMkUsRUFBUSxJQUFJQyxNQUFNcEIsS0FFYmhDLEVBQUlnQyxHQUNYbUIsRUFBTW5ELEdBQUtVLEVBQVFWLEVBQUl4QixFQUd6QixPQUFPMkUsRUNYTSxTQUFTRSxFQUFJN0IsRUFBUUMsR0FDbEMsSUFBSTRCLEVBQU0sRUFDVixRQUFnQjNCLElBQVpELEVBQ0YsSUFBSyxJQUFJbEQsS0FBU2lELEdBQ1pqRCxHQUFTQSxLQUNYOEUsR0FBTzlFLE9BR04sQ0FDTCxJQUFJb0QsR0FBUyxFQUNiLElBQUssSUFBSXBELEtBQVNpRCxHQUNaakQsR0FBU2tELEVBQVFsRCxJQUFTb0QsRUFBT0gsTUFDbkM2QixHQUFPOUUsR0FJYixPQUFPOEUsRUNoQkYsSUFBSUMsRUFBUUYsTUFBTUcsVUFBVUQsTUNBcEIsV0FBUy9ELEdBQ3RCLE9BQU9BLEVDUVQsU0FBU2lFLEVBQVdqRSxHQUNsQixNQUFPLGFBQWVBLEVBQUksTUFHNUIsU0FBU2tFLEVBQVdDLEdBQ2xCLE1BQU8sZUFBaUJBLEVBQUksSUFHOUIsU0FBU0MsRUFBT0MsR0FDZCxPQUFPaEUsSUFBTWdFLEVBQU1oRSxHQUdyQixTQUFTRyxFQUFPNkQsRUFBT0MsR0FHckIsT0FGQUEsRUFBU3hELEtBQUtRLElBQUksRUFBRytDLEVBQU1FLFlBQXVCLEVBQVRELEdBQWMsRUFDbkRELEVBQU1HLFVBQVNGLEVBQVN4RCxLQUFLMEQsTUFBTUYsSUFDaENqRSxJQUFNZ0UsRUFBTWhFLEdBQUtpRSxFQUcxQixTQUFTRyxJQUNQLE9BQVFDLEtBQUtDLE9BR2YsU0FBU0MsRUFBS0MsRUFBUVIsR0FDcEIsSUFBSVMsRUFBZ0IsR0FDaEJDLEVBQWEsS0FDYkMsRUFBYSxLQUNiQyxFQUFnQixFQUNoQkMsRUFBZ0IsRUFDaEJDLEVBQWMsRUFDZGIsRUFBMkIsb0JBQVhjLFFBQTBCQSxPQUFPQyxpQkFBbUIsRUFBSSxFQUFJLEdBQzVFN0MsRUFwQ0ksSUFvQ0FxQyxHQWpDQyxJQWlDaUJBLEdBQW1CLEVBQUksRUFDN0M3RSxFQWxDSyxJQWtDRDZFLEdBcENFLElBb0NpQkEsRUFBbUIsSUFBTSxJQUNoRFMsRUF0Q0ksSUFzQ1FULEdBcENMLElBb0N1QkEsRUFBb0JaLEVBQWFDLEVBRW5FLFNBQVNVLEVBQUtXLEdBQ1osSUFBSXRELEVBQXVCLE1BQWQ4QyxFQUFzQlYsRUFBTW1CLE1BQVFuQixFQUFNbUIsTUFBTWhHLE1BQU02RSxFQUFPUyxHQUFpQlQsRUFBTW9CLFNBQVlWLEVBQ3pHVyxFQUF1QixNQUFkVixFQUFzQlgsRUFBTVcsV0FBYVgsRUFBTVcsV0FBV3hGLE1BQU02RSxFQUFPUyxHQUFpQmEsRUFBWVgsRUFDN0dZLEVBQVU5RSxLQUFLUSxJQUFJMkQsRUFBZSxHQUFLRSxFQUN2Q3ZCLEVBQVFTLEVBQU1ULFFBQ2RpQyxHQUFVakMsRUFBTSxHQUFLVSxFQUNyQndCLEdBQVVsQyxFQUFNQSxFQUFNekQsT0FBUyxHQUFLbUUsRUFDcEN5QixHQUFZMUIsRUFBTUUsVUFBWS9ELEVBQVM0RCxHQUFRQyxFQUFNMkIsT0FBUTFCLEdBQzdEMkIsRUFBWVYsRUFBUVUsVUFBWVYsRUFBUVUsWUFBY1YsRUFDdERXLEVBQU9ELEVBQVVFLFVBQVUsV0FBV0MsS0FBSyxDQUFDLE9BQzVDQyxFQUFPSixFQUFVRSxVQUFVLFNBQVNDLEtBQUtuRSxFQUFRb0MsR0FBT2lDLFFBQ3hEQyxFQUFXRixFQUFLRyxPQUNoQkMsRUFBWUosRUFBS0ssUUFBUUMsT0FBTyxLQUFLQyxLQUFLLFFBQVMsUUFDbkRDLEVBQU9SLEVBQUtTLE9BQU8sUUFDbkJDLEVBQU9WLEVBQUtTLE9BQU8sUUFFdkJaLEVBQU9BLEVBQUtjLE1BQU1kLEVBQUtRLFFBQVFPLE9BQU8sT0FBUSxTQUN6Q0wsS0FBSyxRQUFTLFVBQ2RBLEtBQUssU0FBVSxpQkFFcEJQLEVBQU9BLEVBQUtXLE1BQU1QLEdBRWxCSSxFQUFPQSxFQUFLRyxNQUFNUCxFQUFVRSxPQUFPLFFBQzlCQyxLQUFLLFNBQVUsZ0JBQ2ZBLEtBQUs1RyxFQUFJLElBQUt3QyxFQUFJeUMsSUFFdkI4QixFQUFPQSxFQUFLQyxNQUFNUCxFQUFVRSxPQUFPLFFBQzlCQyxLQUFLLE9BQVEsZ0JBQ2JBLEtBQUs1RyxFQUFHd0MsRUFBSW9ELEdBQ1pnQixLQUFLLEtBckVKLElBcUVVL0IsRUFBaUIsTUFuRXhCLElBbUVnQ0EsRUFBb0IsU0FBVyxXQUVwRVUsSUFBWVUsSUFDZEMsRUFBT0EsRUFBS2dCLFdBQVczQixHQUN2QmMsRUFBT0EsRUFBS2EsV0FBVzNCLEdBQ3ZCc0IsRUFBT0EsRUFBS0ssV0FBVzNCLEdBQ3ZCd0IsRUFBT0EsRUFBS0csV0FBVzNCLEdBRXZCZ0IsRUFBV0EsRUFBU1csV0FBVzNCLEdBQzFCcUIsS0FBSyxVQTFFRixNQTJFSEEsS0FBSyxhQUFhLFNBQVN2RyxHQUFLLE9BQU84RyxTQUFTOUcsRUFBSTBGLEVBQVMxRixJQUFNaUYsRUFBVWpGLEVBQUlpRSxHQUFVSSxLQUFLMEMsYUFBYSxnQkFFbEhYLEVBQ0tHLEtBQUssVUE5RUYsTUErRUhBLEtBQUssYUFBYSxTQUFTdkcsR0FBSyxJQUFJOEMsRUFBSXVCLEtBQUsyQyxXQUFXMUMsT0FBUSxPQUFPVyxHQUFXbkMsR0FBS2dFLFNBQVNoRSxFQUFJQSxFQUFFOUMsSUFBTThDLEVBQUk0QyxFQUFTMUYsSUFBTWlFLE9BR3RJaUMsRUFBU2UsU0FFVHBCLEVBQ0tVLEtBQUssSUF0RkgsSUFzRlEvQixHQXhGUCxJQXdGMEJBLEVBQ3ZCSyxFQUFnQixJQUFNMUMsRUFBSTBDLEVBQWdCLElBQU1XLEVBQVMsSUFBTXZCLEVBQVMsSUFBTXdCLEVBQVMsSUFBTXRELEVBQUkwQyxFQUFnQixJQUFNWixFQUFTLElBQU11QixFQUFTLElBQU1DLEVBQ3JKWixFQUFnQixJQUFNVyxFQUFTLElBQU1yRCxFQUFJMEMsRUFBZ0IsSUFBTVosRUFBUyxJQUFNd0IsRUFBUyxJQUFNdEQsRUFBSTBDLEVBQWdCLElBQU1XLEVBQVMsSUFBTXZCLEVBQVMsSUFBTXdCLEdBRWhLTyxFQUNLTyxLQUFLLFVBQVcsR0FDaEJBLEtBQUssYUFBYSxTQUFTdkcsR0FBSyxPQUFPaUYsRUFBVVMsRUFBUzFGLEdBQUtpRSxNQUVwRXVDLEVBQ0tELEtBQUs1RyxFQUFJLElBQUt3QyxFQUFJeUMsR0FFdkI4QixFQUNLSCxLQUFLNUcsRUFBR3dDLEVBQUlvRCxHQUNabUIsS0FBS3JCLEdBRVZPLEVBQVVzQixPQUFPOUMsR0FDWm1DLEtBQUssT0FBUSxRQUNiQSxLQUFLLFlBQWEsSUFDbEJBLEtBQUssY0FBZSxjQUNwQkEsS0FBSyxjQTNHRixJQTJHaUIvQixFQUFtQixRQXpHckMsSUF5RytDQSxFQUFrQixNQUFRLFVBRWhGb0IsRUFDS3VCLE1BQUssV0FBYTlDLEtBQUtDLE9BQVNvQixLQTJDdkMsT0F4Q0FuQixFQUFLUCxNQUFRLFNBQVNvRCxHQUNwQixPQUFPL0QsVUFBVXZELFFBQVVrRSxFQUFRb0QsRUFBRzdDLEdBQVFQLEdBR2hETyxFQUFLWSxNQUFRLFdBQ1gsT0FBT1YsRUFBZ0JmLEVBQU0yRCxLQUFLaEUsV0FBWWtCLEdBR2hEQSxFQUFLRSxjQUFnQixTQUFTMkMsR0FDNUIsT0FBTy9ELFVBQVV2RCxRQUFVMkUsRUFBcUIsTUFBTDJDLEVBQVksR0FBSzFELEVBQU0yRCxLQUFLRCxHQUFJN0MsR0FBUUUsRUFBY2YsU0FHbkdhLEVBQUtHLFdBQWEsU0FBUzBDLEdBQ3pCLE9BQU8vRCxVQUFVdkQsUUFBVTRFLEVBQWtCLE1BQUwwQyxFQUFZLEtBQU8xRCxFQUFNMkQsS0FBS0QsR0FBSTdDLEdBQVFHLEdBQWNBLEVBQVdoQixTQUc3R2EsRUFBS0ksV0FBYSxTQUFTeUMsR0FDekIsT0FBTy9ELFVBQVV2RCxRQUFVNkUsRUFBYXlDLEVBQUc3QyxHQUFRSSxHQUdyREosRUFBSytDLFNBQVcsU0FBU0YsR0FDdkIsT0FBTy9ELFVBQVV2RCxRQUFVOEUsRUFBZ0JDLEdBQWlCdUMsRUFBRzdDLEdBQVFLLEdBR3pFTCxFQUFLSyxjQUFnQixTQUFTd0MsR0FDNUIsT0FBTy9ELFVBQVV2RCxRQUFVOEUsR0FBaUJ3QyxFQUFHN0MsR0FBUUssR0FHekRMLEVBQUtNLGNBQWdCLFNBQVN1QyxHQUM1QixPQUFPL0QsVUFBVXZELFFBQVUrRSxHQUFpQnVDLEVBQUc3QyxHQUFRTSxHQUd6RE4sRUFBS08sWUFBYyxTQUFTc0MsR0FDMUIsT0FBTy9ELFVBQVV2RCxRQUFVZ0YsR0FBZXNDLEVBQUc3QyxHQUFRTyxHQUd2RFAsRUFBS04sT0FBUyxTQUFTbUQsR0FDckIsT0FBTy9ELFVBQVV2RCxRQUFVbUUsR0FBVW1ELEVBQUc3QyxHQUFRTixHQUczQ00sRUFXRixTQUFTZ0QsRUFBV3ZELEdBQ3pCLE9BQU9PLEVBcEtJLEVBb0tTUCxHQUdmLFNBQVN3RCxFQUFTeEQsR0FDdkIsT0FBT08sRUF2S0UsRUF1S1NQLEdDN0twQixJQUFJeUQsRUFBTyxDQUFDOUksTUFBTyxRQUVuQixTQUFTK0ksSUFDUCxJQUFLLElBQXlDaEYsRUFBckN0QyxFQUFJLEVBQUdnQyxFQUFJaUIsVUFBVXZELE9BQVFzSCxFQUFJLEdBQU9oSCxFQUFJZ0MsSUFBS2hDLEVBQUcsQ0FDM0QsS0FBTXNDLEVBQUlXLFVBQVVqRCxHQUFLLEtBQVFzQyxLQUFLMEUsR0FBTSxRQUFRTyxLQUFLakYsR0FBSSxNQUFNLElBQUlrRixNQUFNLGlCQUFtQmxGLEdBQ2hHMEUsRUFBRTFFLEdBQUssR0FFVCxPQUFPLElBQUltRixFQUFTVCxHQUd0QixTQUFTUyxFQUFTVCxHQUNoQi9DLEtBQUsrQyxFQUFJQSxFQUdYLFNBQVNVLEVBQWVDLEVBQVdDLEdBQ2pDLE9BQU9ELEVBQVVFLE9BQU9DLE1BQU0sU0FBU0MsS0FBSSxTQUFTekYsR0FDbEQsSUFBSTBGLEVBQU8sR0FBSWhJLEVBQUlzQyxFQUFFMkYsUUFBUSxLQUU3QixHQURJakksR0FBSyxJQUFHZ0ksRUFBTzFGLEVBQUVnQixNQUFNdEQsRUFBSSxHQUFJc0MsRUFBSUEsRUFBRWdCLE1BQU0sRUFBR3RELElBQzlDc0MsSUFBTXNGLEVBQU1NLGVBQWU1RixHQUFJLE1BQU0sSUFBSWtGLE1BQU0saUJBQW1CbEYsR0FDdEUsTUFBTyxDQUFDNkYsS0FBTTdGLEVBQUcwRixLQUFNQSxNQTZDM0IsU0FBU0ksRUFBSUQsRUFBTUgsR0FDakIsSUFBSyxJQUE0QkssRUFBeEJySSxFQUFJLEVBQUdnQyxFQUFJbUcsRUFBS3pJLE9BQVdNLEVBQUlnQyxJQUFLaEMsRUFDM0MsSUFBS3FJLEVBQUlGLEVBQUtuSSxJQUFJZ0ksT0FBU0EsRUFDekIsT0FBT0ssRUFBRTlKLE1BS2YsU0FBUytKLEVBQUlILEVBQU1ILEVBQU1PLEdBQ3ZCLElBQUssSUFBSXZJLEVBQUksRUFBR2dDLEVBQUltRyxFQUFLekksT0FBUU0sRUFBSWdDLElBQUtoQyxFQUN4QyxHQUFJbUksRUFBS25JLEdBQUdnSSxPQUFTQSxFQUFNLENBQ3pCRyxFQUFLbkksR0FBS3FILEVBQU1jLEVBQU9BLEVBQUs3RSxNQUFNLEVBQUd0RCxHQUFHd0ksT0FBT0wsRUFBSzdFLE1BQU10RCxFQUFJLElBQzlELE1BSUosT0FEZ0IsTUFBWnVJLEdBQWtCSixFQUFLTSxLQUFLLENBQUNULEtBQU1BLEVBQU16SixNQUFPZ0ssSUFDN0NKLEVBekRUVixFQUFTbEUsVUFBWStELEVBQVMvRCxVQUFZLENBQ3hDbUYsWUFBYWpCLEVBQ2JrQixHQUFJLFNBQVNDLEVBQVVMLEdBQ3JCLElBRUlqRyxFQUZBMEUsRUFBSS9DLEtBQUsrQyxFQUNUNkIsRUFBSW5CLEVBQWVrQixFQUFXLEdBQUk1QixHQUVsQ2hILEdBQUssRUFDTGdDLEVBQUk2RyxFQUFFbkosT0FHVixLQUFJdUQsVUFBVXZELE9BQVMsR0FBdkIsQ0FPQSxHQUFnQixNQUFaNkksR0FBd0MsbUJBQWJBLEVBQXlCLE1BQU0sSUFBSWYsTUFBTSxxQkFBdUJlLEdBQy9GLE9BQVN2SSxFQUFJZ0MsR0FDWCxHQUFJTSxHQUFLc0csRUFBV0MsRUFBRTdJLElBQUltSSxLQUFNbkIsRUFBRTFFLEdBQUtnRyxFQUFJdEIsRUFBRTFFLEdBQUlzRyxFQUFTWixLQUFNTyxRQUMzRCxHQUFnQixNQUFaQSxFQUFrQixJQUFLakcsS0FBSzBFLEVBQUdBLEVBQUUxRSxHQUFLZ0csRUFBSXRCLEVBQUUxRSxHQUFJc0csRUFBU1osS0FBTSxNQUcxRSxPQUFPL0QsS0FaTCxPQUFTakUsRUFBSWdDLE9BQVFNLEdBQUtzRyxFQUFXQyxFQUFFN0ksSUFBSW1JLFFBQVU3RixFQUFJOEYsRUFBSXBCLEVBQUUxRSxHQUFJc0csRUFBU1osT0FBUSxPQUFPMUYsR0FjL0ZpRCxLQUFNLFdBQ0osSUFBSUEsRUFBTyxHQUFJeUIsRUFBSS9DLEtBQUsrQyxFQUN4QixJQUFLLElBQUkxRSxLQUFLMEUsRUFBR3pCLEVBQUtqRCxHQUFLMEUsRUFBRTFFLEdBQUdnQixRQUNoQyxPQUFPLElBQUltRSxFQUFTbEMsSUFFdEIwQixLQUFNLFNBQVNrQixFQUFNVyxHQUNuQixJQUFLOUcsRUFBSWlCLFVBQVV2RCxPQUFTLEdBQUssRUFBRyxJQUFLLElBQWdDc0MsRUFBR00sRUFBL0J5RyxFQUFPLElBQUkzRixNQUFNcEIsR0FBSWhDLEVBQUksRUFBU0EsRUFBSWdDLElBQUtoQyxFQUFHK0ksRUFBSy9JLEdBQUtpRCxVQUFVakQsRUFBSSxHQUNuSCxJQUFLaUUsS0FBSytDLEVBQUVrQixlQUFlQyxHQUFPLE1BQU0sSUFBSVgsTUFBTSxpQkFBbUJXLEdBQ3JFLElBQXVCbkksRUFBSSxFQUFHZ0MsR0FBekJNLEVBQUkyQixLQUFLK0MsRUFBRW1CLElBQW9CekksT0FBUU0sRUFBSWdDLElBQUtoQyxFQUFHc0MsRUFBRXRDLEdBQUd6QixNQUFNUSxNQUFNK0osRUFBTUMsSUFFakZoSyxNQUFPLFNBQVNvSixFQUFNVyxFQUFNQyxHQUMxQixJQUFLOUUsS0FBSytDLEVBQUVrQixlQUFlQyxHQUFPLE1BQU0sSUFBSVgsTUFBTSxpQkFBbUJXLEdBQ3JFLElBQUssSUFBSTdGLEVBQUkyQixLQUFLK0MsRUFBRW1CLEdBQU9uSSxFQUFJLEVBQUdnQyxFQUFJTSxFQUFFNUMsT0FBUU0sRUFBSWdDLElBQUtoQyxFQUFHc0MsRUFBRXRDLEdBQUd6QixNQUFNUSxNQUFNK0osRUFBTUMsS0M1RGhGLElBQUlDLEVBQVEsaUNBRUosQ0FDYkMsSUFBSyw2QkFDTEQsTUFBT0EsRUFDUEUsTUFBTywrQkFDUEMsSUFBSyx1Q0FDTEMsTUFBTyxpQ0NMTSxXQUFTcEIsR0FDdEIsSUFBSXFCLEVBQVNyQixHQUFRLEdBQUloSSxFQUFJcUosRUFBT3BCLFFBQVEsS0FFNUMsT0FESWpJLEdBQUssR0FBcUMsV0FBL0JxSixFQUFTckIsRUFBSzFFLE1BQU0sRUFBR3RELE1BQWlCZ0ksRUFBT0EsRUFBSzFFLE1BQU10RCxFQUFJLElBQ3RFc0osRUFBV3BCLGVBQWVtQixHQUFVLENBQUNFLE1BQU9ELEVBQVdELEdBQVNHLE1BQU94QixHQUFRQSxFQ0Z4RixTQUFTeUIsRUFBZXpCLEdBQ3RCLE9BQU8sV0FDTCxJQUFJMEIsRUFBV3pGLEtBQUswRixjQUNoQkMsRUFBTTNGLEtBQUs0RixhQUNmLE9BQU9ELElBQVFaLEdBQVNVLEVBQVNJLGdCQUFnQkQsZUFBaUJiLEVBQzVEVSxFQUFTSyxjQUFjL0IsR0FDdkIwQixFQUFTTSxnQkFBZ0JKLEVBQUs1QixJQUl4QyxTQUFTaUMsRUFBYUMsR0FDcEIsT0FBTyxXQUNMLE9BQU9qRyxLQUFLMEYsY0FBY0ssZ0JBQWdCRSxFQUFTWCxNQUFPVyxFQUFTVixRQUl4RCxXQUFTeEIsR0FDdEIsSUFBSWtDLEVBQVdDLEVBQVVuQyxHQUN6QixPQUFRa0MsRUFBU1YsTUFDWFMsRUFDQVIsR0FBZ0JTLEdDdkJ4QixTQUFTRSxLQUVNLFdBQVNDLEdBQ3RCLE9BQW1CLE1BQVpBLEVBQW1CRCxFQUFPLFdBQy9CLE9BQU9uRyxLQUFLcUcsY0FBY0QsSUNKZixXQUFTOUssR0FDdEIsTUFBb0IsaUJBQU5BLEdBQWtCLFdBQVlBLEVBQ3hDQSxFQUNBNkQsTUFBTVIsS0FBS3JELEdDSGpCLFNBQVNnTCxJQUNQLE1BQU8sR0FHTSxXQUFTRixHQUN0QixPQUFtQixNQUFaQSxFQUFtQkUsRUFBUSxXQUNoQyxPQUFPdEcsS0FBS3VHLGlCQUFpQkgsSUNObEIsV0FBU0EsR0FDdEIsT0FBTyxXQUNMLE9BQU9wRyxLQUFLd0csUUFBUUosSUFJakIsU0FBU0ssRUFBYUwsR0FDM0IsT0FBTyxTQUFTTSxHQUNkLE9BQU9BLEVBQUtGLFFBQVFKLElDTnhCLElBQUlPLEVBQU94SCxNQUFNRyxVQUFVcUgsS0FRM0IsU0FBU0MsSUFDUCxPQUFPNUcsS0FBSzZHLGtCQ1RkLElBQUloRSxFQUFTMUQsTUFBTUcsVUFBVXVELE9BRTdCLFNBQVNpRSxJQUNQLE9BQU85RyxLQUFLOEcsU0NMQyxXQUFTQyxHQUN0QixPQUFPLElBQUk1SCxNQUFNNEgsRUFBT3RMLFFDTW5CLFNBQVN1TCxFQUFVQyxFQUFRQyxHQUNoQ2xILEtBQUswRixjQUFnQnVCLEVBQU92QixjQUM1QjFGLEtBQUs0RixhQUFlcUIsRUFBT3JCLGFBQzNCNUYsS0FBS21ILE1BQVEsS0FDYm5ILEtBQUtvSCxRQUFVSCxFQUNmakgsS0FBS3FILFNBQVdILEVDWkgsWUFBUzVMLEdBQ3RCLE9BQU8sV0FDTCxPQUFPQSxHQ0dYLFNBQVNnTSxHQUFVTCxFQUFRTSxFQUFPdkYsRUFBTytFLEVBQVFqRixFQUFNSixHQVNyRCxJQVJBLElBQ0lnRixFQURBM0ssRUFBSSxFQUVKeUwsRUFBY0QsRUFBTTlMLE9BQ3BCZ00sRUFBYS9GLEVBQUtqRyxPQUtmTSxFQUFJMEwsSUFBYzFMLEdBQ25CMkssRUFBT2EsRUFBTXhMLEtBQ2YySyxFQUFLVyxTQUFXM0YsRUFBSzNGLEdBQ3JCZ0wsRUFBT2hMLEdBQUsySyxHQUVaMUUsRUFBTWpHLEdBQUssSUFBSWlMLEVBQVVDLEVBQVF2RixFQUFLM0YsSUFLMUMsS0FBT0EsRUFBSXlMLElBQWV6TCxHQUNwQjJLLEVBQU9hLEVBQU14TCxNQUNmK0YsRUFBSy9GLEdBQUsySyxHQUtoQixTQUFTZ0IsR0FBUVQsRUFBUU0sRUFBT3ZGLEVBQU8rRSxFQUFRakYsRUFBTUosRUFBTWlHLEdBQ3pELElBQUk1TCxFQUNBMkssRUFLQWtCLEVBSkFDLEVBQWlCLElBQUlDLElBQ3JCTixFQUFjRCxFQUFNOUwsT0FDcEJnTSxFQUFhL0YsRUFBS2pHLE9BQ2xCc00sRUFBWSxJQUFJNUksTUFBTXFJLEdBSzFCLElBQUt6TCxFQUFJLEVBQUdBLEVBQUl5TCxJQUFlekwsR0FDekIySyxFQUFPYSxFQUFNeEwsTUFDZmdNLEVBQVVoTSxHQUFLNkwsRUFBV0QsRUFBSTNFLEtBQUswRCxFQUFNQSxFQUFLVyxTQUFVdEwsRUFBR3dMLEdBQVMsR0FDaEVNLEVBQWVHLElBQUlKLEdBQ3JCOUYsRUFBSy9GLEdBQUsySyxFQUVWbUIsRUFBZXhELElBQUl1RCxFQUFVbEIsSUFRbkMsSUFBSzNLLEVBQUksRUFBR0EsRUFBSTBMLElBQWMxTCxFQUM1QjZMLEVBQVdELEVBQUkzRSxLQUFLaUUsRUFBUXZGLEVBQUszRixHQUFJQSxFQUFHMkYsR0FBUSxJQUM1Q2dGLEVBQU9tQixFQUFlMUQsSUFBSXlELEtBQzVCYixFQUFPaEwsR0FBSzJLLEVBQ1pBLEVBQUtXLFNBQVczRixFQUFLM0YsR0FDckI4TCxFQUFlSSxPQUFPTCxJQUV0QjVGLEVBQU1qRyxHQUFLLElBQUlpTCxFQUFVQyxFQUFRdkYsRUFBSzNGLElBSzFDLElBQUtBLEVBQUksRUFBR0EsRUFBSXlMLElBQWV6TCxHQUN4QjJLLEVBQU9hLEVBQU14TCxLQUFROEwsRUFBZTFELElBQUk0RCxFQUFVaE0sTUFBUTJLLElBQzdENUUsRUFBSy9GLEdBQUsySyxHQUtoQixTQUFTUSxHQUFNUixHQUNiLE9BQU9BLEVBQUtXLFNDdkRkLFNBQVN6TCxHQUFVYixFQUFHQyxHQUNwQixPQUFPRCxFQUFJQyxHQUFLLEVBQUlELEVBQUlDLEVBQUksRUFBSUQsR0FBS0MsRUFBSSxFQUFJQyxJQ3BCL0MsU0FBU2lOLEdBQVduRSxHQUNsQixPQUFPLFdBQ0wvRCxLQUFLbUksZ0JBQWdCcEUsSUFJekIsU0FBU3FFLEdBQWFuQyxHQUNwQixPQUFPLFdBQ0xqRyxLQUFLcUksa0JBQWtCcEMsRUFBU1gsTUFBT1csRUFBU1YsUUFJcEQsU0FBUytDLEdBQWF2RSxFQUFNekosR0FDMUIsT0FBTyxXQUNMMEYsS0FBS3VJLGFBQWF4RSxFQUFNekosSUFJNUIsU0FBU2tPLEdBQWV2QyxFQUFVM0wsR0FDaEMsT0FBTyxXQUNMMEYsS0FBS3lJLGVBQWV4QyxFQUFTWCxNQUFPVyxFQUFTVixNQUFPakwsSUFJeEQsU0FBU29PLEdBQWEzRSxFQUFNekosR0FDMUIsT0FBTyxXQUNMLElBQUlxTyxFQUFJck8sRUFBTVEsTUFBTWtGLEtBQU1oQixXQUNqQixNQUFMMkosRUFBVzNJLEtBQUttSSxnQkFBZ0JwRSxHQUMvQi9ELEtBQUt1SSxhQUFheEUsRUFBTTRFLElBSWpDLFNBQVNDLEdBQWUzQyxFQUFVM0wsR0FDaEMsT0FBTyxXQUNMLElBQUlxTyxFQUFJck8sRUFBTVEsTUFBTWtGLEtBQU1oQixXQUNqQixNQUFMMkosRUFBVzNJLEtBQUtxSSxrQkFBa0JwQyxFQUFTWCxNQUFPVyxFQUFTVixPQUMxRHZGLEtBQUt5SSxlQUFleEMsRUFBU1gsTUFBT1csRUFBU1YsTUFBT29ELElDdEM5QyxZQUFTakMsR0FDdEIsT0FBUUEsRUFBS2hCLGVBQWlCZ0IsRUFBS2hCLGNBQWNtRCxhQUN6Q25DLEVBQUtqQixVQUFZaUIsR0FDbEJBLEVBQUttQyxZQ0RkLFNBQVNDLEdBQVkvRSxHQUNuQixPQUFPLFdBQ0wvRCxLQUFLK0ksTUFBTUMsZUFBZWpGLElBSTlCLFNBQVNrRixHQUFjbEYsRUFBTXpKLEVBQU80TyxHQUNsQyxPQUFPLFdBQ0xsSixLQUFLK0ksTUFBTUksWUFBWXBGLEVBQU16SixFQUFPNE8sSUFJeEMsU0FBU0UsR0FBY3JGLEVBQU16SixFQUFPNE8sR0FDbEMsT0FBTyxXQUNMLElBQUlQLEVBQUlyTyxFQUFNUSxNQUFNa0YsS0FBTWhCLFdBQ2pCLE1BQUwySixFQUFXM0ksS0FBSytJLE1BQU1DLGVBQWVqRixHQUNwQy9ELEtBQUsrSSxNQUFNSSxZQUFZcEYsRUFBTTRFLEVBQUdPLElBYWxDLFNBQVNHLEdBQVczQyxFQUFNM0MsR0FDL0IsT0FBTzJDLEVBQUtxQyxNQUFNTyxpQkFBaUJ2RixJQUM1QjhFLEdBQVluQyxHQUFNNkMsaUJBQWlCN0MsRUFBTSxNQUFNNEMsaUJBQWlCdkYsR0NqQ3pFLFNBQVN5RixHQUFlekYsR0FDdEIsT0FBTyxrQkFDRS9ELEtBQUsrRCxJQUloQixTQUFTMEYsR0FBaUIxRixFQUFNekosR0FDOUIsT0FBTyxXQUNMMEYsS0FBSytELEdBQVF6SixHQUlqQixTQUFTb1AsR0FBaUIzRixFQUFNekosR0FDOUIsT0FBTyxXQUNMLElBQUlxTyxFQUFJck8sRUFBTVEsTUFBTWtGLEtBQU1oQixXQUNqQixNQUFMMkosU0FBa0IzSSxLQUFLK0QsR0FDdEIvRCxLQUFLK0QsR0FBUTRFLEdDaEJ0QixTQUFTZ0IsR0FBV0MsR0FDbEIsT0FBT0EsRUFBT2hHLE9BQU9DLE1BQU0sU0FHN0IsU0FBU2dHLEdBQVVuRCxHQUNqQixPQUFPQSxFQUFLbUQsV0FBYSxJQUFJQyxHQUFVcEQsR0FHekMsU0FBU29ELEdBQVVwRCxHQUNqQjFHLEtBQUsrSixNQUFRckQsRUFDYjFHLEtBQUtnSyxPQUFTTCxHQUFXakQsRUFBS2hFLGFBQWEsVUFBWSxJQXVCekQsU0FBU3VILEdBQVd2RCxFQUFNd0QsR0FFeEIsSUFEQSxJQUFJQyxFQUFPTixHQUFVbkQsR0FBTzNLLEdBQUssRUFBR2dDLEVBQUltTSxFQUFNek8sU0FDckNNLEVBQUlnQyxHQUFHb00sRUFBS0MsSUFBSUYsRUFBTW5PLElBR2pDLFNBQVNzTyxHQUFjM0QsRUFBTXdELEdBRTNCLElBREEsSUFBSUMsRUFBT04sR0FBVW5ELEdBQU8zSyxHQUFLLEVBQUdnQyxFQUFJbU0sRUFBTXpPLFNBQ3JDTSxFQUFJZ0MsR0FBR29NLEVBQUt2SCxPQUFPc0gsRUFBTW5PLElBR3BDLFNBQVN1TyxHQUFZSixHQUNuQixPQUFPLFdBQ0xELEdBQVdqSyxLQUFNa0ssSUFJckIsU0FBU0ssR0FBYUwsR0FDcEIsT0FBTyxXQUNMRyxHQUFjckssS0FBTWtLLElBSXhCLFNBQVNNLEdBQWdCTixFQUFPNVAsR0FDOUIsT0FBTyxZQUNKQSxFQUFNUSxNQUFNa0YsS0FBTWhCLFdBQWFpTCxHQUFhSSxJQUFlckssS0FBTWtLLElDekR0RSxTQUFTTyxLQUNQekssS0FBSzBLLFlBQWMsR0FHckIsU0FBU0MsR0FBYXJRLEdBQ3BCLE9BQU8sV0FDTDBGLEtBQUswSyxZQUFjcFEsR0FJdkIsU0FBU3NRLEdBQWF0USxHQUNwQixPQUFPLFdBQ0wsSUFBSXFPLEVBQUlyTyxFQUFNUSxNQUFNa0YsS0FBTWhCLFdBQzFCZ0IsS0FBSzBLLFlBQW1CLE1BQUwvQixFQUFZLEdBQUtBLEdDYnhDLFNBQVNrQyxLQUNQN0ssS0FBSzhLLFVBQVksR0FHbkIsU0FBU0MsR0FBYXpRLEdBQ3BCLE9BQU8sV0FDTDBGLEtBQUs4SyxVQUFZeFEsR0FJckIsU0FBUzBRLEdBQWExUSxHQUNwQixPQUFPLFdBQ0wsSUFBSXFPLEVBQUlyTyxFQUFNUSxNQUFNa0YsS0FBTWhCLFdBQzFCZ0IsS0FBSzhLLFVBQWlCLE1BQUxuQyxFQUFZLEdBQUtBLEdDYnRDLFNBQVNzQyxLQUNIakwsS0FBS2tMLGFBQWFsTCxLQUFLMkMsV0FBV3dJLFlBQVluTCxNQ0RwRCxTQUFTb0wsS0FDSHBMLEtBQUtxTCxpQkFBaUJyTCxLQUFLMkMsV0FBVzJJLGFBQWF0TCxLQUFNQSxLQUFLMkMsV0FBVzRJLFlDRS9FLFNBQVNDLEtBQ1AsT0FBTyxLQ0pULFNBQVM1SSxLQUNQLElBQUlxRSxFQUFTakgsS0FBSzJDLFdBQ2RzRSxHQUFRQSxFQUFPd0UsWUFBWXpMLE1DRmpDLFNBQVMwTCxLQUNQLElBQUlDLEVBQVEzTCxLQUFLNEwsV0FBVSxHQUFRM0UsRUFBU2pILEtBQUsyQyxXQUNqRCxPQUFPc0UsRUFBU0EsRUFBT3FFLGFBQWFLLEVBQU8zTCxLQUFLa0wsYUFBZVMsRUFHakUsU0FBU0UsS0FDUCxJQUFJRixFQUFRM0wsS0FBSzRMLFdBQVUsR0FBTzNFLEVBQVNqSCxLQUFLMkMsV0FDaEQsT0FBT3NFLEVBQVNBLEVBQU9xRSxhQUFhSyxFQUFPM0wsS0FBS2tMLGFBQWVTLEVDRGpFLFNBQVNsSSxHQUFlQyxHQUN0QixPQUFPQSxFQUFVRSxPQUFPQyxNQUFNLFNBQVNDLEtBQUksU0FBU3pGLEdBQ2xELElBQUkwRixFQUFPLEdBQUloSSxFQUFJc0MsRUFBRTJGLFFBQVEsS0FFN0IsT0FESWpJLEdBQUssSUFBR2dJLEVBQU8xRixFQUFFZ0IsTUFBTXRELEVBQUksR0FBSXNDLEVBQUlBLEVBQUVnQixNQUFNLEVBQUd0RCxJQUMzQyxDQUFDbUksS0FBTTdGLEVBQUcwRixLQUFNQSxNQUkzQixTQUFTK0gsR0FBU25ILEdBQ2hCLE9BQU8sV0FDTCxJQUFJRCxFQUFLMUUsS0FBSytMLEtBQ2QsR0FBS3JILEVBQUwsQ0FDQSxJQUFLLElBQWtDc0gsRUFBOUIxTixFQUFJLEVBQUd2QyxHQUFLLEVBQUdpQyxFQUFJMEcsRUFBR2pKLE9BQVc2QyxFQUFJTixJQUFLTSxFQUM3QzBOLEVBQUl0SCxFQUFHcEcsR0FBTXFHLEVBQVNULE1BQVE4SCxFQUFFOUgsT0FBU1MsRUFBU1QsTUFBUzhILEVBQUVqSSxPQUFTWSxFQUFTWixLQUdqRlcsSUFBSzNJLEdBQUtpUSxFQUZWaE0sS0FBS2lNLG9CQUFvQkQsRUFBRTlILEtBQU04SCxFQUFFRSxTQUFVRixFQUFFRyxXQUs3Q3BRLEVBQUcySSxFQUFHakosT0FBU00sU0FDVGlFLEtBQUsrTCxPQUlyQixTQUFTSyxHQUFNekgsRUFBVXJLLEVBQU82UixHQUM5QixPQUFPLFdBQ0wsSUFBb0JILEVBQWhCdEgsRUFBSzFFLEtBQUsrTCxLQUFTRyxFQWhDM0IsU0FBeUJBLEdBQ3ZCLE9BQU8sU0FBU0csR0FDZEgsRUFBU2xKLEtBQUtoRCxLQUFNcU0sRUFBT3JNLEtBQUtxSCxXQThCRWlGLENBQWdCaFMsR0FDbEQsR0FBSW9LLEVBQUksSUFBSyxJQUFJcEcsRUFBSSxFQUFHTixFQUFJMEcsRUFBR2pKLE9BQVE2QyxFQUFJTixJQUFLTSxFQUM5QyxJQUFLME4sRUFBSXRILEVBQUdwRyxJQUFJNEYsT0FBU1MsRUFBU1QsTUFBUThILEVBQUVqSSxPQUFTWSxFQUFTWixLQUk1RCxPQUhBL0QsS0FBS2lNLG9CQUFvQkQsRUFBRTlILEtBQU04SCxFQUFFRSxTQUFVRixFQUFFRyxTQUMvQ25NLEtBQUt1TSxpQkFBaUJQLEVBQUU5SCxLQUFNOEgsRUFBRUUsU0FBV0EsRUFBVUYsRUFBRUcsUUFBVUEsUUFDakVILEVBQUUxUixNQUFRQSxHQUlkMEYsS0FBS3VNLGlCQUFpQjVILEVBQVNULEtBQU1nSSxFQUFVQyxHQUMvQ0gsRUFBSSxDQUFDOUgsS0FBTVMsRUFBU1QsS0FBTUgsS0FBTVksRUFBU1osS0FBTXpKLE1BQU9BLEVBQU80UixTQUFVQSxFQUFVQyxRQUFTQSxHQUNyRnpILEVBQ0FBLEVBQUdGLEtBQUt3SCxHQURKaE0sS0FBSytMLEtBQU8sQ0FBQ0MsSUN6QzFCLFNBQVNRLEdBQWM5RixFQUFNeEMsRUFBTXVJLEdBQ2pDLElBQUkvTCxFQUFTbUksR0FBWW5DLEdBQ3JCMkYsRUFBUTNMLEVBQU9nTSxZQUVFLG1CQUFWTCxFQUNUQSxFQUFRLElBQUlBLEVBQU1uSSxFQUFNdUksSUFFeEJKLEVBQVEzTCxFQUFPK0UsU0FBU2tILFlBQVksU0FDaENGLEdBQVFKLEVBQU1PLFVBQVUxSSxFQUFNdUksRUFBT0ksUUFBU0osRUFBT0ssWUFBYVQsRUFBTVUsT0FBU04sRUFBT00sUUFDdkZWLEVBQU1PLFVBQVUxSSxHQUFNLEdBQU8sSUFHcEN3QyxFQUFLOEYsY0FBY0gsR0FHckIsU0FBU1csR0FBaUI5SSxFQUFNdUksR0FDOUIsT0FBTyxXQUNMLE9BQU9ELEdBQWN4TSxLQUFNa0UsRUFBTXVJLElBSXJDLFNBQVNRLEdBQWlCL0ksRUFBTXVJLEdBQzlCLE9BQU8sV0FDTCxPQUFPRCxHQUFjeE0sS0FBTWtFLEVBQU11SSxFQUFPM1IsTUFBTWtGLEtBQU1oQixhakJWeERnSSxFQUFVMUgsVUFBWSxDQUNwQm1GLFlBQWF1QyxFQUNibUUsWUFBYSxTQUFTK0IsR0FBUyxPQUFPbE4sS0FBS29ILFFBQVFrRSxhQUFhNEIsRUFBT2xOLEtBQUttSCxRQUM1RW1FLGFBQWMsU0FBUzRCLEVBQU8xUyxHQUFRLE9BQU93RixLQUFLb0gsUUFBUWtFLGFBQWE0QixFQUFPMVMsSUFDOUU2TCxjQUFlLFNBQVNELEdBQVksT0FBT3BHLEtBQUtvSCxRQUFRZixjQUFjRCxJQUN0RUcsaUJBQWtCLFNBQVNILEdBQVksT0FBT3BHLEtBQUtvSCxRQUFRYixpQkFBaUJILEtRUDlFMEQsR0FBVXhLLFVBQVksQ0FDcEI4SyxJQUFLLFNBQVNyRyxHQUNKL0QsS0FBS2dLLE9BQU9oRyxRQUFRRCxHQUNwQixJQUNOL0QsS0FBS2dLLE9BQU94RixLQUFLVCxHQUNqQi9ELEtBQUsrSixNQUFNeEIsYUFBYSxRQUFTdkksS0FBS2dLLE9BQU9tRCxLQUFLLFFBR3REdkssT0FBUSxTQUFTbUIsR0FDZixJQUFJaEksRUFBSWlFLEtBQUtnSyxPQUFPaEcsUUFBUUQsR0FDeEJoSSxHQUFLLElBQ1BpRSxLQUFLZ0ssT0FBT29ELE9BQU9yUixFQUFHLEdBQ3RCaUUsS0FBSytKLE1BQU14QixhQUFhLFFBQVN2SSxLQUFLZ0ssT0FBT21ELEtBQUssUUFHdERFLFNBQVUsU0FBU3RKLEdBQ2pCLE9BQU8vRCxLQUFLZ0ssT0FBT2hHLFFBQVFELElBQVMsSVVNakMsSUFBSXVKLEdBQU8sQ0FBQyxNQUVaLFNBQVNDLEdBQVVDLEVBQVFDLEdBQ2hDek4sS0FBSzBOLFFBQVVGLEVBQ2Z4TixLQUFLMk4sU0FBV0YsRUFHbEIsU0FBU2xNLEtBQ1AsT0FBTyxJQUFJZ00sR0FBVSxDQUFDLENBQUM5SCxTQUFTSSxrQkFBbUJ5SCxJQ3pDdEMsWUFBU2xILEdBQ3RCLE1BQTJCLGlCQUFiQSxFQUNSLElBQUltSCxHQUFVLENBQUMsQ0FBQzlILFNBQVNZLGNBQWNELEtBQWEsQ0FBQ1gsU0FBU0ksa0JBQzlELElBQUkwSCxHQUFVLENBQUMsQ0FBQ25ILElBQVlrSCxJQ0xyQixZQUFTN0ksRUFBYW1KLEVBQVN0TyxHQUM1Q21GLEVBQVluRixVQUFZc08sRUFBUXRPLFVBQVlBLEVBQzVDQSxFQUFVbUYsWUFBY0EsRUFHbkIsU0FBU29KLEdBQU81RyxFQUFRNkcsR0FDN0IsSUFBSXhPLEVBQVl5TyxPQUFPQyxPQUFPL0csRUFBTzNILFdBQ3JDLElBQUssSUFBSXFJLEtBQU9tRyxFQUFZeE8sRUFBVXFJLEdBQU9tRyxFQUFXbkcsR0FDeEQsT0FBT3JJLEVDTkYsU0FBUzJPLE1IZ0RoQlYsR0FBVWpPLFVBQVlpQyxHQUFVakMsVUFBWSxDQUMxQ21GLFlBQWE4SSxHQUNibkwsT0lqRGEsU0FBU0EsR0FDQSxtQkFBWEEsSUFBdUJBLEVBQVNnRSxFQUFTaEUsSUFFcEQsSUFBSyxJQUFJb0wsRUFBU3hOLEtBQUswTixRQUFTMVAsRUFBSXdQLEVBQU8vUixPQUFReVMsRUFBWSxJQUFJL08sTUFBTW5CLEdBQUlNLEVBQUksRUFBR0EsRUFBSU4sSUFBS00sRUFDM0YsSUFBSyxJQUFpRm9JLEVBQU15SCxFQUFuRjVHLEVBQVFpRyxFQUFPbFAsR0FBSVAsRUFBSXdKLEVBQU05TCxPQUFRMlMsRUFBV0YsRUFBVTVQLEdBQUssSUFBSWEsTUFBTXBCLEdBQW1CaEMsRUFBSSxFQUFHQSxFQUFJZ0MsSUFBS2hDLEdBQzlHMkssRUFBT2EsRUFBTXhMLE1BQVFvUyxFQUFVL0wsRUFBT1ksS0FBSzBELEVBQU1BLEVBQUtXLFNBQVV0TCxFQUFHd0wsTUFDbEUsYUFBY2IsSUFBTXlILEVBQVE5RyxTQUFXWCxFQUFLVyxVQUNoRCtHLEVBQVNyUyxHQUFLb1MsR0FLcEIsT0FBTyxJQUFJWixHQUFVVyxFQUFXbE8sS0FBSzJOLFdKc0NyQ2xNLFVLMUNhLFNBQVNXLEdBQ1lBLEVBQVosbUJBQVhBLEVBUmIsU0FBa0JBLEdBQ2hCLE9BQU8sV0FDTCxJQUFJbUYsRUFBUW5GLEVBQU90SCxNQUFNa0YsS0FBTWhCLFdBQy9CLE9BQWdCLE1BQVR1SSxFQUFnQixHQUFLMUosRUFBTTBKLElBS084RyxDQUFTak0sR0FDdENrTSxFQUFZbE0sR0FFMUIsSUFBSyxJQUFJb0wsRUFBU3hOLEtBQUswTixRQUFTMVAsRUFBSXdQLEVBQU8vUixPQUFReVMsRUFBWSxHQUFJVCxFQUFVLEdBQUluUCxFQUFJLEVBQUdBLEVBQUlOLElBQUtNLEVBQy9GLElBQUssSUFBeUNvSSxFQUFyQ2EsRUFBUWlHLEVBQU9sUCxHQUFJUCxFQUFJd0osRUFBTTlMLE9BQWNNLEVBQUksRUFBR0EsRUFBSWdDLElBQUtoQyxHQUM5RDJLLEVBQU9hLEVBQU14TCxNQUNmbVMsRUFBVTFKLEtBQUtwQyxFQUFPWSxLQUFLMEQsRUFBTUEsRUFBS1csU0FBVXRMLEVBQUd3TCxJQUNuRGtHLEVBQVFqSixLQUFLa0MsSUFLbkIsT0FBTyxJQUFJNkcsR0FBVVcsRUFBV1QsSUw4QmhDYyxZckJ4Q2EsU0FBU0MsR0FDdEIsT0FBT3hPLEtBQUtvQyxPQUFnQixNQUFUb00sRUFBZ0I1SCxFQVhyQyxTQUFtQjRILEdBQ2pCLE9BQU8sV0FDTCxPQUFPN0gsRUFBSzNELEtBQUtoRCxLQUFLOEcsU0FBVTBILElBVTVCQyxDQUEyQixtQkFBVkQsRUFBdUJBLEVBQVEvSCxFQUFhK0gsTXFCdUNuRUUsZXBCekNhLFNBQVNGLEdBQ3RCLE9BQU94TyxLQUFLeUIsVUFBbUIsTUFBVCtNLEVBQWdCMUgsRUFQeEMsU0FBd0IwSCxHQUN0QixPQUFPLFdBQ0wsT0FBTzNMLEVBQU9HLEtBQUtoRCxLQUFLOEcsU0FBVTBILElBTTlCRyxDQUFnQyxtQkFBVkgsRUFBdUJBLEVBQVEvSCxFQUFhK0gsTW9Cd0N4RTNMLE9NckRhLFNBQVMyTCxHQUNELG1CQUFWQSxJQUFzQkEsRUFBUUksRUFBUUosSUFFakQsSUFBSyxJQUFJaEIsRUFBU3hOLEtBQUswTixRQUFTMVAsRUFBSXdQLEVBQU8vUixPQUFReVMsRUFBWSxJQUFJL08sTUFBTW5CLEdBQUlNLEVBQUksRUFBR0EsRUFBSU4sSUFBS00sRUFDM0YsSUFBSyxJQUF1RW9JLEVBQW5FYSxFQUFRaUcsRUFBT2xQLEdBQUlQLEVBQUl3SixFQUFNOUwsT0FBUTJTLEVBQVdGLEVBQVU1UCxHQUFLLEdBQVV2QyxFQUFJLEVBQUdBLEVBQUlnQyxJQUFLaEMsR0FDM0YySyxFQUFPYSxFQUFNeEwsS0FBT3lTLEVBQU14TCxLQUFLMEQsRUFBTUEsRUFBS1csU0FBVXRMLEVBQUd3TCxJQUMxRDZHLEVBQVM1SixLQUFLa0MsR0FLcEIsT0FBTyxJQUFJNkcsR0FBVVcsRUFBV2xPLEtBQUsyTixXTjJDckNqTSxLaEJzQmEsU0FBU3BILEVBQU9xTixHQUM3QixJQUFLM0ksVUFBVXZELE9BQVEsT0FBTzBELE1BQU1SLEtBQUtxQixLQUFNa0gsSUFFL0MsSUFBSTJILEVBQU9sSCxFQUFNRCxHQUFVSixHQUN2Qm1HLEVBQVV6TixLQUFLMk4sU0FDZkgsRUFBU3hOLEtBQUswTixRQUVHLG1CQUFWcFQsSUFBc0JBLEVBQVF3VSxHQUFTeFUsSUFFbEQsSUFBSyxJQUFJMEQsRUFBSXdQLEVBQU8vUixPQUFRc0wsRUFBUyxJQUFJNUgsTUFBTW5CLEdBQUlnRSxFQUFRLElBQUk3QyxNQUFNbkIsR0FBSThELEVBQU8sSUFBSTNDLE1BQU1uQixHQUFJTSxFQUFJLEVBQUdBLEVBQUlOLElBQUtNLEVBQUcsQ0FDL0csSUFBSTJJLEVBQVN3RyxFQUFRblAsR0FDakJpSixFQUFRaUcsRUFBT2xQLEdBQ2ZrSixFQUFjRCxFQUFNOUwsT0FDcEJpRyxFQUFPN0QsRUFBTXZELEVBQU0wSSxLQUFLaUUsRUFBUUEsR0FBVUEsRUFBT0ksU0FBVS9JLEVBQUdtUCxJQUM5RGhHLEVBQWEvRixFQUFLakcsT0FDbEJzVCxFQUFhL00sRUFBTTFELEdBQUssSUFBSWEsTUFBTXNJLEdBQ2xDdUgsRUFBY2pJLEVBQU96SSxHQUFLLElBQUlhLE1BQU1zSSxHQUNwQ3dILEVBQVluTixFQUFLeEQsR0FBSyxJQUFJYSxNQUFNcUksR0FFcENxSCxFQUFLNUgsRUFBUU0sRUFBT3dILEVBQVlDLEVBQWFDLEVBQVd2TixFQUFNaUcsR0FLOUQsSUFBSyxJQUFvQnVILEVBQVUxVSxFQUExQnFFLEVBQUssRUFBR3NRLEVBQUssRUFBbUJ0USxFQUFLNEksSUFBYzVJLEVBQzFELEdBQUlxUSxFQUFXSCxFQUFXbFEsR0FBSyxDQUU3QixJQURJQSxHQUFNc1EsSUFBSUEsRUFBS3RRLEVBQUssS0FDZnJFLEVBQU93VSxFQUFZRyxPQUFVQSxFQUFLMUgsSUFDM0N5SCxFQUFTL0gsTUFBUTNNLEdBQVEsTUFRL0IsT0FIQXVNLEVBQVMsSUFBSXdHLEdBQVV4RyxFQUFRMEcsSUFDeEIyQixPQUFTcE4sRUFDaEIrRSxFQUFPc0ksTUFBUXZOLEVBQ1JpRixHZ0J6RFAvRSxNbEJ2RGEsV0FDYixPQUFPLElBQUl1TCxHQUFVdk4sS0FBS29QLFFBQVVwUCxLQUFLME4sUUFBUTVKLElBQUl3TCxHQUFTdFAsS0FBSzJOLFdrQnVEbkU3TCxLT3hEYSxXQUNiLE9BQU8sSUFBSXlMLEdBQVV2TixLQUFLcVAsT0FBU3JQLEtBQUswTixRQUFRNUosSUFBSXdMLEdBQVN0UCxLQUFLMk4sV1B3RGxFUixLUTVEYSxTQUFTb0MsRUFBU0MsRUFBVUMsR0FDekMsSUFBSXpOLEVBQVFoQyxLQUFLZ0MsUUFBUytFLEVBQVMvRyxLQUFNOEIsRUFBTzlCLEtBQUs4QixPQUlyRCxPQUhBRSxFQUEyQixtQkFBWnVOLEVBQXlCQSxFQUFRdk4sR0FBU0EsRUFBTUMsT0FBT3NOLEVBQVUsSUFDaEUsTUFBWkMsSUFBa0J6SSxFQUFTeUksRUFBU3pJLElBQzFCLE1BQVYwSSxFQUFnQjNOLEVBQUtjLFNBQWU2TSxFQUFPM04sR0FDeENFLEdBQVMrRSxFQUFTL0UsRUFBTU0sTUFBTXlFLEdBQVFuRixRQUFVbUYsR1J3RHZEekUsTVMzRGEsU0FBU2YsR0FDdEIsS0FBTUEsYUFBcUJnTSxJQUFZLE1BQU0sSUFBSWhLLE1BQU0saUJBRXZELElBQUssSUFBSW1NLEVBQVUxUCxLQUFLME4sUUFBU2lDLEVBQVVwTyxFQUFVbU0sUUFBU2tDLEVBQUtGLEVBQVFqVSxPQUFRb1UsRUFBS0YsRUFBUWxVLE9BQVF1QyxFQUFJNUIsS0FBS3VCLElBQUlpUyxFQUFJQyxHQUFLQyxFQUFTLElBQUkzUSxNQUFNeVEsR0FBS3RSLEVBQUksRUFBR0EsRUFBSU4sSUFBS00sRUFDcEssSUFBSyxJQUFtR29JLEVBQS9GcUosRUFBU0wsRUFBUXBSLEdBQUkwUixFQUFTTCxFQUFRclIsR0FBSVAsRUFBSWdTLEVBQU90VSxPQUFRNkcsRUFBUXdOLEVBQU94UixHQUFLLElBQUlhLE1BQU1wQixHQUFVaEMsRUFBSSxFQUFHQSxFQUFJZ0MsSUFBS2hDLEdBQ3hIMkssRUFBT3FKLEVBQU9oVSxJQUFNaVUsRUFBT2pVLE1BQzdCdUcsRUFBTXZHLEdBQUsySyxHQUtqQixLQUFPcEksRUFBSXNSLElBQU10UixFQUNmd1IsRUFBT3hSLEdBQUtvUixFQUFRcFIsR0FHdEIsT0FBTyxJQUFJaVAsR0FBVXVDLEVBQVE5UCxLQUFLMk4sV1Q2Q2xDcE0sVUFoQkYsV0FDRSxPQUFPdkIsTUFnQlA0QixNVS9EYSxXQUViLElBQUssSUFBSTRMLEVBQVN4TixLQUFLME4sUUFBU3BQLEdBQUssRUFBR04sRUFBSXdQLEVBQU8vUixTQUFVNkMsRUFBSU4sR0FDL0QsSUFBSyxJQUE4RDBJLEVBQTFEYSxFQUFRaUcsRUFBT2xQLEdBQUl2QyxFQUFJd0wsRUFBTTlMLE9BQVMsRUFBR2pCLEVBQU8rTSxFQUFNeEwsS0FBWUEsR0FBSyxJQUMxRTJLLEVBQU9hLEVBQU14TCxNQUNYdkIsR0FBNkMsRUFBckNrTSxFQUFLdUosd0JBQXdCelYsSUFBV0EsRUFBS21JLFdBQVcySSxhQUFhNUUsRUFBTWxNLEdBQ3ZGQSxFQUFPa00sR0FLYixPQUFPMUcsTVZxRFBrUSxLZjlEYSxTQUFTOVUsR0FHdEIsU0FBUytVLEVBQVlwVixFQUFHQyxHQUN0QixPQUFPRCxHQUFLQyxFQUFJSSxFQUFRTCxFQUFFc00sU0FBVXJNLEVBQUVxTSxXQUFhdE0sR0FBS0MsRUFIckRJLElBQVNBLEVBQVVRLElBTXhCLElBQUssSUFBSTRSLEVBQVN4TixLQUFLME4sUUFBUzFQLEVBQUl3UCxFQUFPL1IsT0FBUTJVLEVBQWEsSUFBSWpSLE1BQU1uQixHQUFJTSxFQUFJLEVBQUdBLEVBQUlOLElBQUtNLEVBQUcsQ0FDL0YsSUFBSyxJQUFtRm9JLEVBQS9FYSxFQUFRaUcsRUFBT2xQLEdBQUlQLEVBQUl3SixFQUFNOUwsT0FBUTRVLEVBQVlELEVBQVc5UixHQUFLLElBQUlhLE1BQU1wQixHQUFVaEMsRUFBSSxFQUFHQSxFQUFJZ0MsSUFBS2hDLEdBQ3hHMkssRUFBT2EsRUFBTXhMLE1BQ2ZzVSxFQUFVdFUsR0FBSzJLLEdBR25CMkosRUFBVUgsS0FBS0MsR0FHakIsT0FBTyxJQUFJNUMsR0FBVTZDLEVBQVlwUSxLQUFLMk4sVUFBVS9MLFNlK0NoRG9CLEtXakVhLFdBQ2IsSUFBSXNCLEVBQVd0RixVQUFVLEdBR3pCLE9BRkFBLFVBQVUsR0FBS2dCLEtBQ2ZzRSxFQUFTeEosTUFBTSxLQUFNa0UsV0FDZGdCLE1YOERQc1EsTVlsRWEsV0FDYixPQUFPblIsTUFBTVIsS0FBS3FCLE9aa0VsQjBHLEthbkVhLFdBRWIsSUFBSyxJQUFJOEcsRUFBU3hOLEtBQUswTixRQUFTcFAsRUFBSSxFQUFHTixFQUFJd1AsRUFBTy9SLE9BQVE2QyxFQUFJTixJQUFLTSxFQUNqRSxJQUFLLElBQUlpSixFQUFRaUcsRUFBT2xQLEdBQUl2QyxFQUFJLEVBQUdnQyxFQUFJd0osRUFBTTlMLE9BQVFNLEVBQUlnQyxJQUFLaEMsRUFBRyxDQUMvRCxJQUFJMkssRUFBT2EsRUFBTXhMLEdBQ2pCLEdBQUkySyxFQUFNLE9BQU9BLEVBSXJCLE9BQU8sTWIyRFA2SixLY3BFYSxXQUNiLElBQUlBLEVBQU8sRUFDWCxJQUFLLE1BQU03SixLQUFRMUcsT0FBUXVRLEVBQzNCLE9BQU9BLEdka0VQakssTWVyRWEsV0FDYixPQUFRdEcsS0FBSzBHLFFmcUViNUQsS2dCdEVhLFNBQVN3QixHQUV0QixJQUFLLElBQUlrSixFQUFTeE4sS0FBSzBOLFFBQVNwUCxFQUFJLEVBQUdOLEVBQUl3UCxFQUFPL1IsT0FBUTZDLEVBQUlOLElBQUtNLEVBQ2pFLElBQUssSUFBZ0RvSSxFQUE1Q2EsRUFBUWlHLEVBQU9sUCxHQUFJdkMsRUFBSSxFQUFHZ0MsRUFBSXdKLEVBQU05TCxPQUFjTSxFQUFJZ0MsSUFBS2hDLEdBQzlEMkssRUFBT2EsRUFBTXhMLEtBQUl1SSxFQUFTdEIsS0FBSzBELEVBQU1BLEVBQUtXLFNBQVV0TCxFQUFHd0wsR0FJL0QsT0FBT3ZILE1oQitEUGtDLEtkN0JhLFNBQVM2QixFQUFNekosR0FDNUIsSUFBSTJMLEVBQVdDLEVBQVVuQyxHQUV6QixHQUFJL0UsVUFBVXZELE9BQVMsRUFBRyxDQUN4QixJQUFJaUwsRUFBTzFHLEtBQUswRyxPQUNoQixPQUFPVCxFQUFTVixNQUNWbUIsRUFBSzhKLGVBQWV2SyxFQUFTWCxNQUFPVyxFQUFTVixPQUM3Q21CLEVBQUtoRSxhQUFhdUQsR0FHMUIsT0FBT2pHLEtBQUs4QyxNQUFlLE1BQVR4SSxFQUNYMkwsRUFBU1YsTUFBUTZDLEdBQWVGLEdBQWdDLG1CQUFWNU4sRUFDdEQyTCxFQUFTVixNQUFRcUQsR0FBaUJGLEdBQ2xDekMsRUFBU1YsTUFBUWlELEdBQWlCRixJQUFnQnJDLEVBQVUzTCxLY2lCbkV5TyxNWmxEYSxTQUFTaEYsRUFBTXpKLEVBQU80TyxHQUNuQyxPQUFPbEssVUFBVXZELE9BQVMsRUFDcEJ1RSxLQUFLOEMsTUFBZSxNQUFUeEksRUFDTHdPLEdBQStCLG1CQUFWeE8sRUFDckI4TyxHQUNBSCxJQUFlbEYsRUFBTXpKLEVBQW1CLE1BQVo0TyxFQUFtQixHQUFLQSxJQUMxREcsR0FBV3JKLEtBQUswRyxPQUFRM0MsSVk2QzlCME0sU1hyRGEsU0FBUzFNLEVBQU16SixHQUM1QixPQUFPMEUsVUFBVXZELE9BQVMsRUFDcEJ1RSxLQUFLOEMsTUFBZSxNQUFUeEksRUFDUGtQLEdBQWtDLG1CQUFWbFAsRUFDeEJvUCxHQUNBRCxJQUFrQjFGLEVBQU16SixJQUM1QjBGLEtBQUswRyxPQUFPM0MsSVdnRGxCMk0sUVZiYSxTQUFTM00sRUFBTXpKLEdBQzVCLElBQUk0UCxFQUFRUCxHQUFXNUYsRUFBTyxJQUU5QixHQUFJL0UsVUFBVXZELE9BQVMsRUFBRyxDQUV4QixJQURBLElBQUkwTyxFQUFPTixHQUFVN0osS0FBSzBHLFFBQVMzSyxHQUFLLEVBQUdnQyxFQUFJbU0sRUFBTXpPLFNBQzVDTSxFQUFJZ0MsT0FBUW9NLEVBQUtrRCxTQUFTbkQsRUFBTW5PLElBQUssT0FBTyxFQUNyRCxPQUFPLEVBR1QsT0FBT2lFLEtBQUs4QyxNQUF1QixtQkFBVnhJLEVBQ25Ca1EsR0FBa0JsUSxFQUNsQmdRLEdBQ0FDLElBQWNMLEVBQU81UCxLVUUzQitILEtUMURhLFNBQVMvSCxHQUN0QixPQUFPMEUsVUFBVXZELE9BQ1h1RSxLQUFLOEMsS0FBYyxNQUFUeEksRUFDTm1RLElBQStCLG1CQUFWblEsRUFDckJzUSxHQUNBRCxJQUFjclEsSUFDbEIwRixLQUFLMEcsT0FBT2dFLGFTcURsQmlHLEtSM0RhLFNBQVNyVyxHQUN0QixPQUFPMEUsVUFBVXZELE9BQ1h1RSxLQUFLOEMsS0FBYyxNQUFUeEksRUFDTnVRLElBQStCLG1CQUFWdlEsRUFDckIwUSxHQUNBRCxJQUFjelEsSUFDbEIwRixLQUFLMEcsT0FBT29FLFdRc0RsQkcsTVB6RWEsV0FDYixPQUFPakwsS0FBSzhDLEtBQUttSSxLT3lFakJHLE1OMUVhLFdBQ2IsT0FBT3BMLEtBQUs4QyxLQUFLc0ksS00wRWpCbkosT2lCN0VhLFNBQVM4QixHQUN0QixJQUFJaUssRUFBeUIsbUJBQVRqSyxFQUFzQkEsRUFBTzZNLEVBQVE3TSxHQUN6RCxPQUFPL0QsS0FBS29DLFFBQU8sV0FDakIsT0FBT3BDLEtBQUttTCxZQUFZNkMsRUFBT2xULE1BQU1rRixLQUFNaEIsZ0JqQjJFN0N1RCxPTHpFYSxTQUFTd0IsRUFBTThNLEdBQzVCLElBQUk3QyxFQUF5QixtQkFBVGpLLEVBQXNCQSxFQUFPNk0sRUFBUTdNLEdBQ3JEM0IsRUFBbUIsTUFBVnlPLEVBQWlCckYsR0FBaUMsbUJBQVhxRixFQUF3QkEsRUFBU3pLLEVBQVN5SyxHQUM5RixPQUFPN1EsS0FBS29DLFFBQU8sV0FDakIsT0FBT3BDLEtBQUtzTCxhQUFhMEMsRUFBT2xULE1BQU1rRixLQUFNaEIsV0FBWW9ELEVBQU90SCxNQUFNa0YsS0FBTWhCLFlBQWMsVUtzRTNGNEQsT0o1RWEsV0FDYixPQUFPNUMsS0FBSzhDLEtBQUtGLEtJNEVqQitJLE1IeEVhLFNBQVNtRixHQUN0QixPQUFPOVEsS0FBS29DLE9BQU8wTyxFQUFPakYsR0FBc0JILEtHd0VoRHhFLE1rQm5GYSxTQUFTNU0sR0FDdEIsT0FBTzBFLFVBQVV2RCxPQUNYdUUsS0FBS3lRLFNBQVMsV0FBWW5XLEdBQzFCMEYsS0FBSzBHLE9BQU9XLFVsQmlGbEIzQyxHRnBDYSxTQUFTQyxFQUFVckssRUFBTzZSLEdBQ3ZDLElBQStDcFEsRUFBeUJzQyxFQUFwRXFGLEVBQVlELEdBQWVrQixFQUFXLElBQVE1RyxFQUFJMkYsRUFBVWpJLE9BRWhFLEtBQUl1RCxVQUFVdkQsT0FBUyxHQUF2QixDQWFBLElBREFpSixFQUFLcEssRUFBUThSLEdBQVFOLEdBQ2hCL1AsRUFBSSxFQUFHQSxFQUFJZ0MsSUFBS2hDLEVBQUdpRSxLQUFLOEMsS0FBSzRCLEVBQUdoQixFQUFVM0gsR0FBSXpCLEVBQU82UixJQUMxRCxPQUFPbk0sS0FiTCxJQUFJMEUsRUFBSzFFLEtBQUswRyxPQUFPcUYsS0FDckIsR0FBSXJILEVBQUksSUFBSyxJQUEwQnNILEVBQXRCMU4sRUFBSSxFQUFHTixFQUFJMEcsRUFBR2pKLE9BQVc2QyxFQUFJTixJQUFLTSxFQUNqRCxJQUFLdkMsRUFBSSxFQUFHaVEsRUFBSXRILEVBQUdwRyxHQUFJdkMsRUFBSWdDLElBQUtoQyxFQUM5QixJQUFLc0MsRUFBSXFGLEVBQVUzSCxJQUFJbUksT0FBUzhILEVBQUU5SCxNQUFRN0YsRUFBRTBGLE9BQVNpSSxFQUFFakksS0FDckQsT0FBT2lJLEVBQUUxUixPRTZCakIrSSxTRHhEYSxTQUFTYSxFQUFNdUksR0FDNUIsT0FBT3pNLEtBQUs4QyxNQUF3QixtQkFBWDJKLEVBQ25CUSxHQUNBRCxJQUFrQjlJLEVBQU11SSxLQ3NEOUIsQ0FBQ3NFLE9BQU9DLFVtQnRGSyxZQUNiLElBQUssSUFBSXhELEVBQVN4TixLQUFLME4sUUFBU3BQLEVBQUksRUFBR04sRUFBSXdQLEVBQU8vUixPQUFRNkMsRUFBSU4sSUFBS00sRUFDakUsSUFBSyxJQUFnRG9JLEVBQTVDYSxFQUFRaUcsRUFBT2xQLEdBQUl2QyxFQUFJLEVBQUdnQyxFQUFJd0osRUFBTTlMLE9BQWNNLEVBQUlnQyxJQUFLaEMsR0FDOUQySyxFQUFPYSxFQUFNeEwsWUFBVTJLLEtoQkMxQixJQUNJdUssR0FBVyxFQURGLEdBR2hCQyxHQUFNLHNCQUNOQyxHQUFNLGdEQUNOQyxHQUFNLGlEQUNOQyxHQUFRLHFCQUNSQyxHQUFlLElBQUlDLE9BQU8sVUFBWSxDQUFDTCxHQUFLQSxHQUFLQSxJQUFPLFFBQ3hETSxHQUFlLElBQUlELE9BQU8sVUFBWSxDQUFDSCxHQUFLQSxHQUFLQSxJQUFPLFFBQ3hESyxHQUFnQixJQUFJRixPQUFPLFdBQWEsQ0FBQ0wsR0FBS0EsR0FBS0EsR0FBS0MsSUFBTyxRQUMvRE8sR0FBZ0IsSUFBSUgsT0FBTyxXQUFhLENBQUNILEdBQUtBLEdBQUtBLEdBQUtELElBQU8sUUFDL0RRLEdBQWUsSUFBSUosT0FBTyxVQUFZLENBQUNKLEdBQUtDLEdBQUtBLElBQU8sUUFDeERRLEdBQWdCLElBQUlMLE9BQU8sV0FBYSxDQUFDSixHQUFLQyxHQUFLQSxHQUFLRCxJQUFPLFFBRS9EVSxHQUFRLENBQ1ZDLFVBQVcsU0FDWEMsYUFBYyxTQUNkQyxLQUFNLE1BQ05DLFdBQVksUUFDWkMsTUFBTyxTQUNQQyxNQUFPLFNBQ1BDLE9BQVEsU0FDUkMsTUFBTyxFQUNQQyxlQUFnQixTQUNoQkMsS0FBTSxJQUNOQyxXQUFZLFFBQ1pDLE1BQU8sU0FDUEMsVUFBVyxTQUNYQyxVQUFXLFFBQ1hDLFdBQVksUUFDWkMsVUFBVyxTQUNYQyxNQUFPLFNBQ1BDLGVBQWdCLFFBQ2hCQyxTQUFVLFNBQ1ZDLFFBQVMsU0FDVEMsS0FBTSxNQUNOQyxTQUFVLElBQ1ZDLFNBQVUsTUFDVkMsY0FBZSxTQUNmQyxTQUFVLFNBQ1ZDLFVBQVcsTUFDWEMsU0FBVSxTQUNWQyxVQUFXLFNBQ1hDLFlBQWEsUUFDYkMsZUFBZ0IsUUFDaEJDLFdBQVksU0FDWkMsV0FBWSxTQUNaQyxRQUFTLFFBQ1RDLFdBQVksU0FDWkMsYUFBYyxRQUNkQyxjQUFlLFFBQ2ZDLGNBQWUsUUFDZkMsY0FBZSxRQUNmQyxjQUFlLE1BQ2ZDLFdBQVksUUFDWkMsU0FBVSxTQUNWQyxZQUFhLE1BQ2JDLFFBQVMsUUFDVEMsUUFBUyxRQUNUQyxXQUFZLFFBQ1pDLFVBQVcsU0FDWEMsWUFBYSxTQUNiQyxZQUFhLFFBQ2JDLFFBQVMsU0FDVEMsVUFBVyxTQUNYQyxXQUFZLFNBQ1pDLEtBQU0sU0FDTkMsVUFBVyxTQUNYQyxLQUFNLFFBQ05DLE1BQU8sTUFDUEMsWUFBYSxTQUNiQyxLQUFNLFFBQ05DLFNBQVUsU0FDVkMsUUFBUyxTQUNUQyxVQUFXLFNBQ1hDLE9BQVEsUUFDUkMsTUFBTyxTQUNQQyxNQUFPLFNBQ1BDLFNBQVUsU0FDVkMsY0FBZSxTQUNmQyxVQUFXLFFBQ1hDLGFBQWMsU0FDZEMsVUFBVyxTQUNYQyxXQUFZLFNBQ1pDLFVBQVcsU0FDWEMscUJBQXNCLFNBQ3RCQyxVQUFXLFNBQ1hDLFdBQVksUUFDWkMsVUFBVyxTQUNYQyxVQUFXLFNBQ1hDLFlBQWEsU0FDYkMsY0FBZSxRQUNmQyxhQUFjLFFBQ2RDLGVBQWdCLFFBQ2hCQyxlQUFnQixRQUNoQkMsZUFBZ0IsU0FDaEJDLFlBQWEsU0FDYkMsS0FBTSxNQUNOQyxVQUFXLFFBQ1hDLE1BQU8sU0FDUEMsUUFBUyxTQUNUQyxPQUFRLFFBQ1JDLGlCQUFrQixRQUNsQkMsV0FBWSxJQUNaQyxhQUFjLFNBQ2RDLGFBQWMsUUFDZEMsZUFBZ0IsUUFDaEJDLGdCQUFpQixRQUNqQkMsa0JBQW1CLE1BQ25CQyxnQkFBaUIsUUFDakJDLGdCQUFpQixTQUNqQkMsYUFBYyxRQUNkQyxVQUFXLFNBQ1hDLFVBQVcsU0FDWEMsU0FBVSxTQUNWQyxZQUFhLFNBQ2JDLEtBQU0sSUFDTkMsUUFBUyxTQUNUQyxNQUFPLFFBQ1BDLFVBQVcsUUFDWEMsT0FBUSxTQUNSQyxVQUFXLFNBQ1hDLE9BQVEsU0FDUkMsY0FBZSxTQUNmQyxVQUFXLFNBQ1hDLGNBQWUsU0FDZkMsY0FBZSxTQUNmQyxXQUFZLFNBQ1pDLFVBQVcsU0FDWEMsS0FBTSxTQUNOQyxLQUFNLFNBQ05DLEtBQU0sU0FDTkMsV0FBWSxTQUNaQyxPQUFRLFFBQ1JDLGNBQWUsUUFDZkMsSUFBSyxTQUNMQyxVQUFXLFNBQ1hDLFVBQVcsUUFDWEMsWUFBYSxRQUNiQyxPQUFRLFNBQ1JDLFdBQVksU0FDWkMsU0FBVSxRQUNWQyxTQUFVLFNBQ1ZDLE9BQVEsU0FDUkMsT0FBUSxTQUNSQyxRQUFTLFFBQ1RDLFVBQVcsUUFDWEMsVUFBVyxRQUNYQyxVQUFXLFFBQ1hDLEtBQU0sU0FDTkMsWUFBYSxNQUNiQyxVQUFXLFFBQ1hDLElBQUssU0FDTEMsS0FBTSxNQUNOQyxRQUFTLFNBQ1RDLE9BQVEsU0FDUkMsVUFBVyxRQUNYQyxPQUFRLFNBQ1JDLE1BQU8sU0FDUEMsTUFBTyxTQUNQQyxXQUFZLFNBQ1pDLE9BQVEsU0FDUkMsWUFBYSxVQWlCZixTQUFTQyxLQUNQLE9BQU9sYixLQUFLbWIsTUFBTUMsWUFPcEIsU0FBU0MsS0FDUCxPQUFPcmIsS0FBS21iLE1BQU1HLFlBR0wsU0FBU0MsR0FBTXZhLEdBQzVCLElBQUloRCxFQUFHd2QsRUFFUCxPQURBeGEsR0FBVUEsRUFBUyxJQUFJNEMsT0FBTzZYLGVBQ3RCemQsRUFBSXFULEdBQU1xSyxLQUFLMWEsS0FBWXdhLEVBQUl4ZCxFQUFFLEdBQUd2QyxPQUFRdUMsRUFBSTJkLFNBQVMzZCxFQUFFLEdBQUksSUFBVyxJQUFOd2QsRUFBVUksR0FBSzVkLEdBQy9FLElBQU53ZCxFQUFVLElBQUlLLEdBQUs3ZCxHQUFLLEVBQUksR0FBUUEsR0FBSyxFQUFJLElBQVFBLEdBQUssRUFBSSxHQUFZLElBQUpBLEdBQWlCLEdBQUpBLElBQVksRUFBVSxHQUFKQSxFQUFVLEdBQ3pHLElBQU53ZCxFQUFVTSxHQUFLOWQsR0FBSyxHQUFLLElBQU1BLEdBQUssR0FBSyxJQUFNQSxHQUFLLEVBQUksS0FBVyxJQUFKQSxHQUFZLEtBQ3JFLElBQU53ZCxFQUFVTSxHQUFNOWQsR0FBSyxHQUFLLEdBQVFBLEdBQUssRUFBSSxJQUFRQSxHQUFLLEVBQUksR0FBUUEsR0FBSyxFQUFJLElBQVFBLEdBQUssRUFBSSxHQUFZLElBQUpBLElBQWtCLEdBQUpBLElBQVksRUFBVSxHQUFKQSxHQUFZLEtBQ2xKLE9BQ0NBLEVBQUlzVCxHQUFhb0ssS0FBSzFhLElBQVcsSUFBSTZhLEdBQUk3ZCxFQUFFLEdBQUlBLEVBQUUsR0FBSUEsRUFBRSxHQUFJLElBQzNEQSxFQUFJd1QsR0FBYWtLLEtBQUsxYSxJQUFXLElBQUk2YSxHQUFXLElBQVA3ZCxFQUFFLEdBQVcsSUFBWSxJQUFQQSxFQUFFLEdBQVcsSUFBWSxJQUFQQSxFQUFFLEdBQVcsSUFBSyxJQUMvRkEsRUFBSXlULEdBQWNpSyxLQUFLMWEsSUFBVzhhLEdBQUs5ZCxFQUFFLEdBQUlBLEVBQUUsR0FBSUEsRUFBRSxHQUFJQSxFQUFFLEtBQzNEQSxFQUFJMFQsR0FBY2dLLEtBQUsxYSxJQUFXOGEsR0FBWSxJQUFQOWQsRUFBRSxHQUFXLElBQVksSUFBUEEsRUFBRSxHQUFXLElBQVksSUFBUEEsRUFBRSxHQUFXLElBQUtBLEVBQUUsS0FDL0ZBLEVBQUkyVCxHQUFhK0osS0FBSzFhLElBQVcrYSxHQUFLL2QsRUFBRSxHQUFJQSxFQUFFLEdBQUssSUFBS0EsRUFBRSxHQUFLLElBQUssSUFDcEVBLEVBQUk0VCxHQUFjOEosS0FBSzFhLElBQVcrYSxHQUFLL2QsRUFBRSxHQUFJQSxFQUFFLEdBQUssSUFBS0EsRUFBRSxHQUFLLElBQUtBLEVBQUUsSUFDeEU2VCxHQUFNNU4sZUFBZWpELEdBQVU0YSxHQUFLL0osR0FBTTdRLElBQy9CLGdCQUFYQSxFQUEyQixJQUFJNmEsR0FBSTVnQixJQUFLQSxJQUFLQSxJQUFLLEdBQ2xELEtBR1IsU0FBUzJnQixHQUFLN2QsR0FDWixPQUFPLElBQUk4ZCxHQUFJOWQsR0FBSyxHQUFLLElBQU1BLEdBQUssRUFBSSxJQUFVLElBQUpBLEVBQVUsR0FHMUQsU0FBUytkLEdBQUtFLEVBQUdDLEVBQUdqaEIsRUFBR0QsR0FFckIsT0FESUEsR0FBSyxJQUFHaWhCLEVBQUlDLEVBQUlqaEIsRUFBSUMsS0FDakIsSUFBSTRnQixHQUFJRyxFQUFHQyxFQUFHamhCLEVBQUdELEdBR25CLFNBQVNtaEIsR0FBV2xRLEdBRXpCLE9BRE1BLGFBQWFpQyxLQUFRakMsRUFBSXVQLEdBQU12UCxJQUNoQ0EsRUFFRSxJQUFJNlAsSUFEWDdQLEVBQUlBLEVBQUVtUCxPQUNXYSxFQUFHaFEsRUFBRWlRLEVBQUdqUSxFQUFFaFIsRUFBR2dSLEVBQUVtUSxTQUZqQixJQUFJTixHQUtkLFNBQVNWLEdBQUlhLEVBQUdDLEVBQUdqaEIsRUFBR21oQixHQUMzQixPQUE0QixJQUFyQm5kLFVBQVV2RCxPQUFleWdCLEdBQVdGLEdBQUssSUFBSUgsR0FBSUcsRUFBR0MsRUFBR2poQixFQUFjLE1BQVhtaEIsRUFBa0IsRUFBSUEsR0FHbEYsU0FBU04sR0FBSUcsRUFBR0MsRUFBR2poQixFQUFHbWhCLEdBQzNCbmMsS0FBS2djLEdBQUtBLEVBQ1ZoYyxLQUFLaWMsR0FBS0EsRUFDVmpjLEtBQUtoRixHQUFLQSxFQUNWZ0YsS0FBS21jLFNBQVdBLEVBMkJsQixTQUFTQyxLQUNQLE1BQU8sSUFBTUMsR0FBSXJjLEtBQUtnYyxHQUFLSyxHQUFJcmMsS0FBS2ljLEdBQUtJLEdBQUlyYyxLQUFLaEYsR0FHcEQsU0FBU3NoQixLQUNQLElBQUl2aEIsRUFBSWlGLEtBQUttYyxRQUNiLE9BQWMsS0FEUXBoQixFQUFJd2hCLE1BQU14aEIsR0FBSyxFQUFJcUIsS0FBS1EsSUFBSSxFQUFHUixLQUFLdUIsSUFBSSxFQUFHNUMsS0FDL0MsT0FBUyxTQUNyQnFCLEtBQUtRLElBQUksRUFBR1IsS0FBS3VCLElBQUksSUFBS3ZCLEtBQUswRCxNQUFNRSxLQUFLZ2MsSUFBTSxJQUFNLEtBQ3RENWYsS0FBS1EsSUFBSSxFQUFHUixLQUFLdUIsSUFBSSxJQUFLdkIsS0FBSzBELE1BQU1FLEtBQUtpYyxJQUFNLElBQU0sS0FDdEQ3ZixLQUFLUSxJQUFJLEVBQUdSLEtBQUt1QixJQUFJLElBQUt2QixLQUFLMEQsTUFBTUUsS0FBS2hGLElBQU0sS0FDekMsSUFBTkQsRUFBVSxJQUFNLEtBQU9BLEVBQUksS0FHcEMsU0FBU3NoQixHQUFJL2hCLEdBRVgsUUFEQUEsRUFBUThCLEtBQUtRLElBQUksRUFBR1IsS0FBS3VCLElBQUksSUFBS3ZCLEtBQUswRCxNQUFNeEYsSUFBVSxLQUN2QyxHQUFLLElBQU0sSUFBTUEsRUFBTWtpQixTQUFTLElBR2xELFNBQVNULEdBQUtVLEVBQUd2ZSxFQUFHc2QsRUFBR3pnQixHQUlyQixPQUhJQSxHQUFLLEVBQUcwaEIsRUFBSXZlLEVBQUlzZCxFQUFJdmdCLElBQ2Z1Z0IsR0FBSyxHQUFLQSxHQUFLLEVBQUdpQixFQUFJdmUsRUFBSWpELElBQzFCaUQsR0FBSyxJQUFHdWUsRUFBSXhoQixLQUNkLElBQUl5aEIsR0FBSUQsRUFBR3ZlLEVBQUdzZCxFQUFHemdCLEdBR25CLFNBQVM0aEIsR0FBVzNRLEdBQ3pCLEdBQUlBLGFBQWEwUSxHQUFLLE9BQU8sSUFBSUEsR0FBSTFRLEVBQUV5USxFQUFHelEsRUFBRTlOLEVBQUc4TixFQUFFd1AsRUFBR3hQLEVBQUVtUSxTQUV0RCxHQURNblEsYUFBYWlDLEtBQVFqQyxFQUFJdVAsR0FBTXZQLEtBQ2hDQSxFQUFHLE9BQU8sSUFBSTBRLEdBQ25CLEdBQUkxUSxhQUFhMFEsR0FBSyxPQUFPMVEsRUFFN0IsSUFBSWdRLEdBREpoUSxFQUFJQSxFQUFFbVAsT0FDSWEsRUFBSSxJQUNWQyxFQUFJalEsRUFBRWlRLEVBQUksSUFDVmpoQixFQUFJZ1IsRUFBRWhSLEVBQUksSUFDVjJDLEVBQU12QixLQUFLdUIsSUFBSXFlLEVBQUdDLEVBQUdqaEIsR0FDckI0QixFQUFNUixLQUFLUSxJQUFJb2YsRUFBR0MsRUFBR2poQixHQUNyQnloQixFQUFJeGhCLElBQ0ppRCxFQUFJdEIsRUFBTWUsRUFDVjZkLEdBQUs1ZSxFQUFNZSxHQUFPLEVBVXRCLE9BVElPLEdBQ2F1ZSxFQUFYVCxJQUFNcGYsR0FBVXFmLEVBQUlqaEIsR0FBS2tELEVBQWMsR0FBVCtkLEVBQUlqaEIsR0FDN0JpaEIsSUFBTXJmLEdBQVU1QixFQUFJZ2hCLEdBQUs5ZCxFQUFJLEdBQzVCOGQsRUFBSUMsR0FBSy9kLEVBQUksRUFDdkJBLEdBQUtzZCxFQUFJLEdBQU01ZSxFQUFNZSxFQUFNLEVBQUlmLEVBQU1lLEVBQ3JDOGUsR0FBSyxJQUVMdmUsRUFBSXNkLEVBQUksR0FBS0EsRUFBSSxFQUFJLEVBQUlpQixFQUVwQixJQUFJQyxHQUFJRCxFQUFHdmUsRUFBR3NkLEVBQUd4UCxFQUFFbVEsU0FPNUIsU0FBU08sR0FBSUQsRUFBR3ZlLEVBQUdzZCxFQUFHVyxHQUNwQm5jLEtBQUt5YyxHQUFLQSxFQUNWemMsS0FBSzlCLEdBQUtBLEVBQ1Y4QixLQUFLd2IsR0FBS0EsRUFDVnhiLEtBQUttYyxTQUFXQSxFQXlDbEIsU0FBU1MsR0FBUUgsRUFBRzVNLEVBQUlnTixHQUN0QixPQUdZLEtBSEpKLEVBQUksR0FBSzVNLEdBQU1nTixFQUFLaE4sR0FBTTRNLEVBQUksR0FDaENBLEVBQUksSUFBTUksRUFDVkosRUFBSSxJQUFNNU0sR0FBTWdOLEVBQUtoTixJQUFPLElBQU00TSxHQUFLLEdBQ3ZDNU0sR0F4TVJpTixHQUFPN08sR0FBT3NOLEdBQU8sQ0FDbkJqYSxLQUFNLFNBQVN5YixHQUNiLE9BQU9oUCxPQUFPaVAsT0FBTyxJQUFJaGQsS0FBS3lFLFlBQWF6RSxLQUFNK2MsSUFFbkRFLFlBQWEsV0FDWCxPQUFPamQsS0FBS21iLE1BQU04QixlQUVwQlosSUFBS25CLEdBQ0xFLFVBQVdGLEdBQ1hnQyxVQVNGLFdBQ0UsT0FBT1AsR0FBVzNjLE1BQU1rZCxhQVR4QjVCLFVBQVdELEdBQ1htQixTQUFVbkIsS0E2RFp5QixHQUFPakIsR0FBS1YsR0FBS3ROLEdBQU9JLEdBQU8sQ0FDN0JnRCxTQUFVLFNBQVNuVCxHQUVqQixPQURBQSxFQUFTLE1BQUxBLEVBQVltVCxHQUFXN1UsS0FBS2MsSUFBSStULEdBQVVuVCxHQUN2QyxJQUFJK2QsR0FBSTdiLEtBQUtnYyxFQUFJbGUsRUFBR2tDLEtBQUtpYyxFQUFJbmUsRUFBR2tDLEtBQUtoRixFQUFJOEMsRUFBR2tDLEtBQUttYyxVQUUxRGdCLE9BQVEsU0FBU3JmLEdBRWYsT0FEQUEsRUFBUyxNQUFMQSxFQW5QWSxHQW1QUzFCLEtBQUtjLElBblBkLEdBbVAwQlksR0FDbkMsSUFBSStkLEdBQUk3YixLQUFLZ2MsRUFBSWxlLEVBQUdrQyxLQUFLaWMsRUFBSW5lLEVBQUdrQyxLQUFLaEYsRUFBSThDLEVBQUdrQyxLQUFLbWMsVUFFMURoQixJQUFLLFdBQ0gsT0FBT25iLE1BRVRpZCxZQUFhLFdBQ1gsT0FBUyxJQUFPamQsS0FBS2djLEdBQUtoYyxLQUFLZ2MsRUFBSSxRQUMxQixJQUFPaGMsS0FBS2ljLEdBQUtqYyxLQUFLaWMsRUFBSSxRQUMxQixJQUFPamMsS0FBS2hGLEdBQUtnRixLQUFLaEYsRUFBSSxPQUMzQixHQUFLZ0YsS0FBS21jLFNBQVduYyxLQUFLbWMsU0FBVyxHQUUvQ0UsSUFBS0QsR0FDTGhCLFVBQVdnQixHQUNYZCxVQUFXZ0IsR0FDWEUsU0FBVUYsTUFpRVpRLEdBQU9KLElBWEEsU0FBYUQsRUFBR3ZlLEVBQUdzZCxFQUFHVyxHQUMzQixPQUE0QixJQUFyQm5kLFVBQVV2RCxPQUFla2hCLEdBQVdGLEdBQUssSUFBSUMsR0FBSUQsRUFBR3ZlLEVBQUdzZCxFQUFjLE1BQVhXLEVBQWtCLEVBQUlBLEtBVXhFdE8sR0FBT0ksR0FBTyxDQUM3QmdELFNBQVUsU0FBU25ULEdBRWpCLE9BREFBLEVBQVMsTUFBTEEsRUFBWW1ULEdBQVc3VSxLQUFLYyxJQUFJK1QsR0FBVW5ULEdBQ3ZDLElBQUk0ZSxHQUFJMWMsS0FBS3ljLEVBQUd6YyxLQUFLOUIsRUFBRzhCLEtBQUt3YixFQUFJMWQsRUFBR2tDLEtBQUttYyxVQUVsRGdCLE9BQVEsU0FBU3JmLEdBRWYsT0FEQUEsRUFBUyxNQUFMQSxFQXpVWSxHQXlVUzFCLEtBQUtjLElBelVkLEdBeVUwQlksR0FDbkMsSUFBSTRlLEdBQUkxYyxLQUFLeWMsRUFBR3pjLEtBQUs5QixFQUFHOEIsS0FBS3diLEVBQUkxZCxFQUFHa0MsS0FBS21jLFVBRWxEaEIsSUFBSyxXQUNILElBQUlzQixFQUFJemMsS0FBS3ljLEVBQUksSUFBcUIsS0FBZHpjLEtBQUt5YyxFQUFJLEdBQzdCdmUsRUFBSXFlLE1BQU1FLElBQU1GLE1BQU12YyxLQUFLOUIsR0FBSyxFQUFJOEIsS0FBSzlCLEVBQ3pDc2QsRUFBSXhiLEtBQUt3YixFQUNUcUIsRUFBS3JCLEdBQUtBLEVBQUksR0FBTUEsRUFBSSxFQUFJQSxHQUFLdGQsRUFDakMyUixFQUFLLEVBQUkyTCxFQUFJcUIsRUFDakIsT0FBTyxJQUFJaEIsR0FDVGUsR0FBUUgsR0FBSyxJQUFNQSxFQUFJLElBQU1BLEVBQUksSUFBSzVNLEVBQUlnTixHQUMxQ0QsR0FBUUgsRUFBRzVNLEVBQUlnTixHQUNmRCxHQUFRSCxFQUFJLElBQU1BLEVBQUksSUFBTUEsRUFBSSxJQUFLNU0sRUFBSWdOLEdBQ3pDN2MsS0FBS21jLFVBR1RjLFlBQWEsV0FDWCxPQUFRLEdBQUtqZCxLQUFLOUIsR0FBSzhCLEtBQUs5QixHQUFLLEdBQUtxZSxNQUFNdmMsS0FBSzlCLEtBQ3pDLEdBQUs4QixLQUFLd2IsR0FBS3hiLEtBQUt3YixHQUFLLEdBQ3pCLEdBQUt4YixLQUFLbWMsU0FBV25jLEtBQUttYyxTQUFXLEdBRS9DZSxVQUFXLFdBQ1QsSUFBSW5pQixFQUFJaUYsS0FBS21jLFFBQ2IsT0FBYyxLQURRcGhCLEVBQUl3aEIsTUFBTXhoQixHQUFLLEVBQUlxQixLQUFLUSxJQUFJLEVBQUdSLEtBQUt1QixJQUFJLEVBQUc1QyxLQUMvQyxPQUFTLFVBQ3BCaUYsS0FBS3ljLEdBQUssR0FBSyxLQUNBLEtBQWZ6YyxLQUFLOUIsR0FBSyxHQUFXLE1BQ04sS0FBZjhCLEtBQUt3YixHQUFLLEdBQVcsS0FDZixJQUFOemdCLEVBQVUsSUFBTSxLQUFPQSxFQUFJLFNpQnhXL0IsTUFBTXFpQixHQUFVaGhCLEtBQUtpaEIsR0FBSyxJQUNwQkMsR0FBVSxJQUFNbGhCLEtBQUtpaEIsR0NROUJFLEdBQUssRUFBSSxHQUNUQyxHQUFLLEVBQUksR0FDVEMsR0FBSyxFQUFJRCxHQUFLQSxHQUdsQixTQUFTRSxHQUFXMVIsR0FDbEIsR0FBSUEsYUFBYTJSLEdBQUssT0FBTyxJQUFJQSxHQUFJM1IsRUFBRXdQLEVBQUd4UCxFQUFFalIsRUFBR2lSLEVBQUVoUixFQUFHZ1IsRUFBRW1RLFNBQ3RELEdBQUluUSxhQUFhNFIsR0FBSyxPQUFPQyxHQUFRN1IsR0FDL0JBLGFBQWE2UCxLQUFNN1AsRUFBSWtRLEdBQVdsUSxJQUN4QyxJQUd1RTFRLEVBQUcyQyxFQUh0RStkLEVBQUk4QixHQUFTOVIsRUFBRWdRLEdBQ2ZDLEVBQUk2QixHQUFTOVIsRUFBRWlRLEdBQ2ZqaEIsRUFBSThpQixHQUFTOVIsRUFBRWhSLEdBQ2Z5RSxFQUFJc2UsSUFBUyxTQUFZL0IsRUFBSSxTQUFZQyxFQUFJLFNBQVlqaEIsR0FkdEQsR0FtQlAsT0FKSWdoQixJQUFNQyxHQUFLQSxJQUFNamhCLEVBQUdNLEVBQUkyQyxFQUFJd0IsR0FDOUJuRSxFQUFJeWlCLElBQVMsU0FBWS9CLEVBQUksU0FBWUMsRUFBSSxTQUFZamhCLEdBakJwRCxRQWtCTGlELEVBQUk4ZixJQUFTLFNBQVkvQixFQUFJLFNBQVlDLEVBQUksU0FBWWpoQixHQWhCcEQsU0FrQkEsSUFBSTJpQixHQUFJLElBQU1sZSxFQUFJLEdBQUksS0FBT25FLEVBQUltRSxHQUFJLEtBQU9BLEVBQUl4QixHQUFJK04sRUFBRW1RLFNBT2hELFNBQVM2QixHQUFJeEMsRUFBR3pnQixFQUFHQyxFQUFHbWhCLEdBQ25DLE9BQTRCLElBQXJCbmQsVUFBVXZELE9BQWVpaUIsR0FBV2xDLEdBQUssSUFBSW1DLEdBQUluQyxFQUFHemdCLEVBQUdDLEVBQWMsTUFBWG1oQixFQUFrQixFQUFJQSxHQUdsRixTQUFTd0IsR0FBSW5DLEVBQUd6Z0IsRUFBR0MsRUFBR21oQixHQUMzQm5jLEtBQUt3YixHQUFLQSxFQUNWeGIsS0FBS2pGLEdBQUtBLEVBQ1ZpRixLQUFLaEYsR0FBS0EsRUFDVmdGLEtBQUttYyxTQUFXQSxFQTBCbEIsU0FBUzRCLEdBQVExZixHQUNmLE9BQU9BLEVBeERBbWYsb0JBd0RTcGhCLEtBQUtjLElBQUltQixFQUFHLEVBQUksR0FBS0EsRUFBSW9mLEdBQUtGLEdBR2hELFNBQVNVLEdBQVE1ZixHQUNmLE9BQU9BLEVBQUltZixHQUFLbmYsRUFBSUEsRUFBSUEsRUFBSW9mLElBQU1wZixFQUFJa2YsSUFHeEMsU0FBU1csR0FBUzVpQixHQUNoQixPQUFPLEtBQU9BLEdBQUssU0FBWSxNQUFRQSxFQUFJLE1BQVFjLEtBQUtjLElBQUk1QixFQUFHLEVBQUksS0FBTyxNQUc1RSxTQUFTd2lCLEdBQVN4aUIsR0FDaEIsT0FBUUEsR0FBSyxNQUFRLE9BQVVBLEVBQUksTUFBUWMsS0FBS2MsS0FBSzVCLEVBQUksTUFBUyxNQUFPLEtBRzNFLFNBQVM2aUIsR0FBV25TLEdBQ2xCLEdBQUlBLGFBQWE0UixHQUFLLE9BQU8sSUFBSUEsR0FBSTVSLEVBQUV5USxFQUFHelEsRUFBRTVILEVBQUc0SCxFQUFFd1AsRUFBR3hQLEVBQUVtUSxTQUV0RCxHQURNblEsYUFBYTJSLEtBQU0zUixFQUFJMFIsR0FBVzFSLElBQzVCLElBQVJBLEVBQUVqUixHQUFtQixJQUFSaVIsRUFBRWhSLEVBQVMsT0FBTyxJQUFJNGlCLEdBQUkzaUIsSUFBSyxFQUFJK1EsRUFBRXdQLEdBQUt4UCxFQUFFd1AsRUFBSSxJQUFNLEVBQUl2Z0IsSUFBSytRLEVBQUV3UCxFQUFHeFAsRUFBRW1RLFNBQ3ZGLElBQUlNLEVBQUlyZ0IsS0FBS2dpQixNQUFNcFMsRUFBRWhSLEVBQUdnUixFQUFFalIsR0FBS3VpQixHQUMvQixPQUFPLElBQUlNLEdBQUluQixFQUFJLEVBQUlBLEVBQUksSUFBTUEsRUFBR3JnQixLQUFLQyxLQUFLMlAsRUFBRWpSLEVBQUlpUixFQUFFalIsRUFBSWlSLEVBQUVoUixFQUFJZ1IsRUFBRWhSLEdBQUlnUixFQUFFd1AsRUFBR3hQLEVBQUVtUSxTQVd4RSxTQUFTeUIsR0FBSW5CLEVBQUdyWSxFQUFHb1gsRUFBR1csR0FDM0JuYyxLQUFLeWMsR0FBS0EsRUFDVnpjLEtBQUtvRSxHQUFLQSxFQUNWcEUsS0FBS3diLEdBQUtBLEVBQ1Z4YixLQUFLbWMsU0FBV0EsRUFHbEIsU0FBUzBCLEdBQVE3UixHQUNmLEdBQUl1USxNQUFNdlEsRUFBRXlRLEdBQUksT0FBTyxJQUFJa0IsR0FBSTNSLEVBQUV3UCxFQUFHLEVBQUcsRUFBR3hQLEVBQUVtUSxTQUM1QyxJQUFJTSxFQUFJelEsRUFBRXlRLEVBQUlXLEdBQ2QsT0FBTyxJQUFJTyxHQUFJM1IsRUFBRXdQLEVBQUdwZixLQUFLaWlCLElBQUk1QixHQUFLelEsRUFBRTVILEVBQUdoSSxLQUFLa2lCLElBQUk3QixHQUFLelEsRUFBRTVILEVBQUc0SCxFQUFFbVEsU0FqRTlEVyxHQUFPYSxHQUFLSyxHQUFLblEsR0FBT0ksR0FBTyxDQUM3QmdELFNBQVUsU0FBU25ULEdBQ2pCLE9BQU8sSUFBSTZmLEdBQUkzZCxLQUFLd2IsRUF6Q2QsSUF5QzRCLE1BQUwxZCxFQUFZLEVBQUlBLEdBQUlrQyxLQUFLakYsRUFBR2lGLEtBQUtoRixFQUFHZ0YsS0FBS21jLFVBRXhFZ0IsT0FBUSxTQUFTcmYsR0FDZixPQUFPLElBQUk2ZixHQUFJM2QsS0FBS3diLEVBNUNkLElBNEM0QixNQUFMMWQsRUFBWSxFQUFJQSxHQUFJa0MsS0FBS2pGLEVBQUdpRixLQUFLaEYsRUFBR2dGLEtBQUttYyxVQUV4RWhCLElBQUssV0FDSCxJQUFJMWIsR0FBS08sS0FBS3diLEVBQUksSUFBTSxJQUNwQmxnQixFQUFJaWhCLE1BQU12YyxLQUFLakYsR0FBSzBFLEVBQUlBLEVBQUlPLEtBQUtqRixFQUFJLElBQ3JDa0QsRUFBSXNlLE1BQU12YyxLQUFLaEYsR0FBS3lFLEVBQUlBLEVBQUlPLEtBQUtoRixFQUFJLElBSXpDLE9BQU8sSUFBSTZnQixHQUNUcUMsR0FBVSxXQUpaNWlCLEVBakRLLE9BaURJMmlCLEdBQVEzaUIsSUFJVyxXQUg1Qm1FLEVBakRLLEVBaURJd2UsR0FBUXhlLElBRzJCLFVBRjVDeEIsRUFqREssT0FpRElnZ0IsR0FBUWhnQixLQUdmaWdCLElBQVUsU0FBWTVpQixFQUFJLFVBQVltRSxFQUFJLFFBQVl4QixHQUN0RGlnQixHQUFVLFNBQVk1aUIsRUFBSSxTQUFZbUUsRUFBSSxVQUFZeEIsR0FDdEQrQixLQUFLbWMsYUFrRFhXLEdBQU9jLElBakJBLFNBQWFuQixFQUFHclksRUFBR29YLEVBQUdXLEdBQzNCLE9BQTRCLElBQXJCbmQsVUFBVXZELE9BQWUwaUIsR0FBVzFCLEdBQUssSUFBSW1CLEdBQUluQixFQUFHclksRUFBR29YLEVBQWMsTUFBWFcsRUFBa0IsRUFBSUEsS0FnQnhFdE8sR0FBT0ksR0FBTyxDQUM3QmdELFNBQVUsU0FBU25ULEdBQ2pCLE9BQU8sSUFBSThmLEdBQUk1ZCxLQUFLeWMsRUFBR3pjLEtBQUtvRSxFQUFHcEUsS0FBS3diLEVBN0c5QixJQTZHNEMsTUFBTDFkLEVBQVksRUFBSUEsR0FBSWtDLEtBQUttYyxVQUV4RWdCLE9BQVEsU0FBU3JmLEdBQ2YsT0FBTyxJQUFJOGYsR0FBSTVkLEtBQUt5YyxFQUFHemMsS0FBS29FLEVBQUdwRSxLQUFLd2IsRUFoSDlCLElBZ0g0QyxNQUFMMWQsRUFBWSxFQUFJQSxHQUFJa0MsS0FBS21jLFVBRXhFaEIsSUFBSyxXQUNILE9BQU8wQyxHQUFRN2QsTUFBTW1iLFVDeEh6QixJQUlJb0QsR0FDQUMsR0FMQUMsR0FBUSxFQUNSQyxHQUFVLEVBQ1ZDLEdBQVcsRUFJWEMsR0FBWSxFQUNaQyxHQUFXLEVBQ1hDLEdBQVksRUFDWkMsR0FBK0IsaUJBQWhCQyxhQUE0QkEsWUFBWUMsSUFBTUQsWUFBY0UsS0FDM0VDLEdBQTZCLGlCQUFYemUsUUFBdUJBLE9BQU8wZSxzQkFBd0IxZSxPQUFPMGUsc0JBQXNCdlEsS0FBS25PLFFBQVUsU0FBU3hGLEdBQUtta0IsV0FBV25rQixFQUFHLEtBRTdJLFNBQVMrakIsS0FDZCxPQUFPSixLQUFhTSxHQUFTRyxJQUFXVCxHQUFXRSxHQUFNRSxNQUFRSCxJQUduRSxTQUFTUSxLQUNQVCxHQUFXLEVBR04sU0FBU1UsS0FDZHZmLEtBQUt3ZixNQUNMeGYsS0FBS3lmLE1BQ0x6ZixLQUFLbUgsTUFBUSxLQTBCUixTQUFTdVksR0FBTXBiLEVBQVVxYixFQUFPQyxHQUNyQyxJQUFJdmhCLEVBQUksSUFBSWtoQixHQUVaLE9BREFsaEIsRUFBRXdoQixRQUFRdmIsRUFBVXFiLEVBQU9DLEdBQ3BCdmhCLEVBY1QsU0FBU3loQixLQUNQakIsSUFBWUQsR0FBWUcsR0FBTUUsT0FBU0gsR0FDdkNMLEdBQVFDLEdBQVUsRUFDbEIsS0FkSyxXQUNMTyxPQUNFUixHQUVGLElBREEsSUFBa0Joa0IsRUFBZDRELEVBQUlrZ0IsR0FDRGxnQixJQUNBNUQsRUFBSW9rQixHQUFXeGdCLEVBQUVvaEIsUUFBVSxHQUFHcGhCLEVBQUVtaEIsTUFBTXhjLEtBQUssS0FBTXZJLEdBQ3RENEQsRUFBSUEsRUFBRThJLFFBRU5zWCxHQU9Bc0IsV0FFQXRCLEdBQVEsRUFXWixXQUNFLElBQUlsQixFQUFtQkUsRUFBZkQsRUFBS2UsR0FBY3FCLEVBQU9JLEVBQUFBLEVBQ2xDLEtBQU94QyxHQUNEQSxFQUFHZ0MsT0FDREksRUFBT3BDLEVBQUdpQyxRQUFPRyxFQUFPcEMsRUFBR2lDLE9BQy9CbEMsRUFBS0MsRUFBSUEsRUFBS0EsRUFBR3JXLFFBRWpCc1csRUFBS0QsRUFBR3JXLE1BQU9xVyxFQUFHclcsTUFBUSxLQUMxQnFXLEVBQUtELEVBQUtBLEVBQUdwVyxNQUFRc1csRUFBS2MsR0FBV2QsR0FHekNlLEdBQVdqQixFQUNYMEMsR0FBTUwsR0F0QkpNLEdBQ0FyQixHQUFXLEdBSWYsU0FBU3NCLEtBQ1AsSUFBSWxCLEVBQU1GLEdBQU1FLE1BQU9VLEVBQVFWLEVBQU1MLEdBQ2pDZSxFQTdFVSxNQTZFU2IsSUFBYWEsRUFBT2YsR0FBWUssR0FrQnpELFNBQVNnQixHQUFNTCxHQUNUbkIsS0FDQUMsS0FBU0EsR0FBVTBCLGFBQWExQixLQUN4QmtCLEVBQU9mLEdBQ1AsSUFDTmUsRUFBT0ksRUFBQUEsSUFBVXRCLEdBQVVXLFdBQVdTLEdBQU1GLEVBQU9iLEdBQU1FLE1BQVFILEtBQ2pFSCxLQUFVQSxHQUFXMEIsY0FBYzFCLE9BRWxDQSxLQUFVQyxHQUFZRyxHQUFNRSxNQUFPTixHQUFXMkIsWUFBWUgsR0F2R25ELE1Bd0daMUIsR0FBUSxFQUFHVSxHQUFTVyxNQ3pHVCxZQUFTeGIsRUFBVXFiLEVBQU9DLEdBQ3ZDLElBQUl2aEIsRUFBSSxJQUFJa2hCLEdBTVosT0FMQUksRUFBaUIsTUFBVEEsRUFBZ0IsR0FBS0EsRUFDN0J0aEIsRUFBRXdoQixTQUFRVSxJQUNSbGlCLEVBQUUzQixPQUNGNEgsRUFBU2ljLEVBQVVaLEtBQ2xCQSxFQUFPQyxHQUNIdmhCLEVEaUJUa2hCLEdBQU1qZ0IsVUFBWW9nQixHQUFNcGdCLFVBQVksQ0FDbENtRixZQUFhOGEsR0FDYk0sUUFBUyxTQUFTdmIsRUFBVXFiLEVBQU9DLEdBQ2pDLEdBQXdCLG1CQUFidGIsRUFBeUIsTUFBTSxJQUFJa2MsVUFBVSw4QkFDeERaLEdBQWdCLE1BQVJBLEVBQWVYLE1BQVNXLElBQWtCLE1BQVRELEVBQWdCLEdBQUtBLEdBQ3pEM2YsS0FBS21ILE9BQVNxWCxLQUFheGUsT0FDMUJ3ZSxHQUFVQSxHQUFTclgsTUFBUW5ILEtBQzFCdWUsR0FBV3ZlLEtBQ2hCd2UsR0FBV3hlLE1BRWJBLEtBQUt3ZixNQUFRbGIsRUFDYnRFLEtBQUt5ZixNQUFRRyxFQUNiSyxNQUVGdmpCLEtBQU0sV0FDQXNELEtBQUt3ZixRQUNQeGYsS0FBS3dmLE1BQVEsS0FDYnhmLEtBQUt5ZixNQUFRTyxFQUFBQSxFQUNiQyxRRXpDTixJQUFJUSxHQUFVcGQsRUFBUyxRQUFTLE1BQU8sU0FBVSxhQUM3Q3FkLEdBQWEsR0FVRixZQUFTaGEsRUFBTTNDLEVBQU00YyxFQUFJampCLEVBQU82SixFQUFPcVosR0FDcEQsSUFBSUMsRUFBWW5hLEVBQUtvYSxhQUNyQixHQUFLRCxHQUNBLEdBQUlGLEtBQU1FLEVBQVcsWUFEVm5hLEVBQUtvYSxhQUFlLElBbUN0QyxTQUFnQnBhLEVBQU1pYSxFQUFJSSxHQUN4QixJQUNJQyxFQURBSCxFQUFZbmEsRUFBS29hLGFBUXJCLFNBQVNHLEVBQVNWLEdBQ2hCUSxFQUFLRyxNQXREYyxFQXVEbkJILEVBQUtyQixNQUFNRyxRQUFRcGpCLEVBQU9za0IsRUFBS3BCLE1BQU9vQixFQUFLbkIsTUFHdkNtQixFQUFLcEIsT0FBU1ksR0FBUzlqQixFQUFNOGpCLEVBQVVRLEVBQUtwQixPQUdsRCxTQUFTbGpCLEVBQU04akIsR0FDYixJQUFJeGtCLEVBQUd1QyxFQUFHUCxFQUFHaU8sRUFHYixHQWpFbUIsSUFpRWYrVSxFQUFLRyxNQUFxQixPQUFPeGtCLElBRXJDLElBQUtYLEtBQUs4a0IsRUFFUixJQURBN1UsRUFBSTZVLEVBQVU5a0IsSUFDUmdJLE9BQVNnZCxFQUFLaGQsS0FBcEIsQ0FLQSxHQXhFZSxJQXdFWGlJLEVBQUVrVixNQUFtQixPQUFPeEMsR0FBUWppQixHQXZFekIsSUEwRVh1UCxFQUFFa1YsT0FDSmxWLEVBQUVrVixNQXpFUyxFQTBFWGxWLEVBQUUwVCxNQUFNaGpCLE9BQ1JzUCxFQUFFdEgsR0FBRzFCLEtBQUssWUFBYTBELEVBQU1BLEVBQUtXLFNBQVUyRSxFQUFFdE8sTUFBT3NPLEVBQUV6RSxjQUNoRHNaLEVBQVU5a0IsS0FJVEEsRUFBSTRrQixJQUNaM1UsRUFBRWtWLE1BakZTLEVBa0ZYbFYsRUFBRTBULE1BQU1oakIsT0FDUnNQLEVBQUV0SCxHQUFHMUIsS0FBSyxTQUFVMEQsRUFBTUEsRUFBS1csU0FBVTJFLEVBQUV0TyxNQUFPc08sRUFBRXpFLGNBQzdDc1osRUFBVTlrQixJQW9CckIsR0FaQTJpQixJQUFRLFdBL0ZTLElBZ0dYcUMsRUFBS0csUUFDUEgsRUFBS0csTUFoR1EsRUFpR2JILEVBQUtyQixNQUFNRyxRQUFRbGUsRUFBTW9mLEVBQUtwQixNQUFPb0IsRUFBS25CLE1BQzFDamUsRUFBSzRlLE9BTVRRLEVBQUtHLE1BMUdhLEVBMkdsQkgsRUFBS3JjLEdBQUcxQixLQUFLLFFBQVMwRCxFQUFNQSxFQUFLVyxTQUFVMFosRUFBS3JqQixNQUFPcWpCLEVBQUt4WixPQTNHMUMsSUE0R2R3WixFQUFLRyxNQUFULENBS0EsSUFKQUgsRUFBS0csTUE1R1ksRUErR2pCRixFQUFRLElBQUk3aEIsTUFBTXBCLEVBQUlnakIsRUFBS0MsTUFBTXZsQixRQUM1Qk0sRUFBSSxFQUFHdUMsR0FBSyxFQUFHdkMsRUFBSWdDLElBQUtoQyxHQUN2QmlRLEVBQUkrVSxFQUFLQyxNQUFNamxCLEdBQUd6QixNQUFNMEksS0FBSzBELEVBQU1BLEVBQUtXLFNBQVUwWixFQUFLcmpCLE1BQU9xakIsRUFBS3haLFVBQ3JFeVosSUFBUTFpQixHQUFLME4sR0FHakJnVixFQUFNdmxCLE9BQVM2QyxFQUFJLEdBR3JCLFNBQVNxRCxFQUFLNGUsR0FLWixJQUpBLElBQUlsaUIsRUFBSWtpQixFQUFVUSxFQUFLSSxTQUFXSixFQUFLSyxLQUFLcGUsS0FBSyxLQUFNdWQsRUFBVVEsRUFBS0ksV0FBYUosRUFBS3JCLE1BQU1HLFFBQVFuakIsR0FBT3FrQixFQUFLRyxNQXZIbEcsRUF1SGtILEdBQzlIbmxCLEdBQUssRUFDTGdDLEVBQUlpakIsRUFBTXZsQixTQUVMTSxFQUFJZ0MsR0FDWGlqQixFQUFNamxCLEdBQUdpSCxLQUFLMEQsRUFBTXJJLEdBNUhOLElBZ0laMGlCLEVBQUtHLFFBQ1BILEVBQUtyYyxHQUFHMUIsS0FBSyxNQUFPMEQsRUFBTUEsRUFBS1csU0FBVTBaLEVBQUtyakIsTUFBT3FqQixFQUFLeFosT0FDMUQ3SyxLQUlKLFNBQVNBLElBSVAsSUFBSyxJQUFJWCxLQUhUZ2xCLEVBQUtHLE1BdElVLEVBdUlmSCxFQUFLckIsTUFBTWhqQixjQUNKbWtCLEVBQVVGLEdBQ0hFLEVBQVcsY0FDbEJuYSxFQUFLb2EsYUE3RmRELEVBQVVGLEdBQU1JLEVBQ2hCQSxFQUFLckIsTUFBUUEsR0FBTXVCLEVBQVUsRUFBR0YsRUFBS25CLE1BeENyQzVSLENBQU90SCxFQUFNaWEsRUFBSSxDQUNmNWMsS0FBTUEsRUFDTnJHLE1BQU9BLEVBQ1A2SixNQUFPQSxFQUNQN0MsR0FBSStiLEdBQ0pPLE1BQU9OLEdBQ1BkLEtBQU1nQixFQUFPaEIsS0FDYkQsTUFBT2lCLEVBQU9qQixNQUNkd0IsU0FBVVAsRUFBT08sU0FDakJDLEtBQU1SLEVBQU9RLEtBQ2IxQixNQUFPLEtBQ1B3QixNQXZCaUIsSUEyQmQsU0FBU0csR0FBSzNhLEVBQU1pYSxHQUN6QixJQUFJTSxFQUFXOWMsR0FBSXVDLEVBQU1pYSxHQUN6QixHQUFJTSxFQUFTQyxNQTdCTSxFQTZCVyxNQUFNLElBQUkzZCxNQUFNLCtCQUM5QyxPQUFPMGQsRUFHRixTQUFTNWMsR0FBSXFDLEVBQU1pYSxHQUN4QixJQUFJTSxFQUFXOWMsR0FBSXVDLEVBQU1pYSxHQUN6QixHQUFJTSxFQUFTQyxNQWhDTSxFQWdDVyxNQUFNLElBQUkzZCxNQUFNLDZCQUM5QyxPQUFPMGQsRUFHRixTQUFTOWMsR0FBSXVDLEVBQU1pYSxHQUN4QixJQUFJTSxFQUFXdmEsRUFBS29hLGFBQ3BCLElBQUtHLEtBQWNBLEVBQVdBLEVBQVNOLElBQU0sTUFBTSxJQUFJcGQsTUFBTSx3QkFDN0QsT0FBTzBkLEVDaERULE9BQWUzbEIsR0FBSyxJQUFNQSxFQ21CbkIsU0FBU2dtQixHQUFNN2hCLEdBQ3BCLE9BQW9CLElBQVpBLEdBQUtBLEdBQVc4aEIsR0FBVSxTQUFTeG1CLEVBQUdDLEdBQzVDLE9BQU9BLEVBQUlELEVBYmYsU0FBcUJBLEVBQUdDLEVBQUd5RSxHQUN6QixPQUFPMUUsRUFBSXFCLEtBQUtjLElBQUluQyxFQUFHMEUsR0FBSXpFLEVBQUlvQixLQUFLYyxJQUFJbEMsRUFBR3lFLEdBQUsxRSxFQUFHMEUsRUFBSSxFQUFJQSxFQUFHLFNBQVNwQixHQUNyRSxPQUFPakMsS0FBS2MsSUFBSW5DLEVBQUlzRCxFQUFJckQsRUFBR3lFLElBV1oraEIsQ0FBWXptQixFQUFHQyxFQUFHeUUsR0FBS3FQLEdBQVN5TixNQUFNeGhCLEdBQUtDLEVBQUlELElBSW5ELFNBQVN3bUIsR0FBUXhtQixFQUFHQyxHQUNqQyxJQUFJVyxFQUFJWCxFQUFJRCxFQUNaLE9BQU9ZLEVBekJULFNBQWdCWixFQUFHWSxHQUNqQixPQUFPLFNBQVMwQyxHQUNkLE9BQU90RCxFQUFJc0QsRUFBSTFDLEdBdUJOOGxCLENBQU8xbUIsRUFBR1ksR0FBS21ULEdBQVN5TixNQUFNeGhCLEdBQUtDLEVBQUlELEdDdEJwRCxPQUFlLFNBQVUybUIsRUFBU2ppQixHQUNoQyxJQUFJOGIsRUFBUStGLEdBQU03aEIsR0FFbEIsU0FBUzBiLEVBQUkxZSxFQUFPa2xCLEdBQ2xCLElBQUkzRixFQUFJVCxHQUFPOWUsRUFBUW1sQixHQUFTbmxCLElBQVF1ZixHQUFJMkYsRUFBTUMsR0FBU0QsSUFBTTNGLEdBQzdEQyxFQUFJVixFQUFNOWUsRUFBTXdmLEVBQUcwRixFQUFJMUYsR0FDdkJqaEIsRUFBSXVnQixFQUFNOWUsRUFBTXpCLEVBQUcybUIsRUFBSTNtQixHQUN2Qm1oQixFQUFVb0YsR0FBUTlrQixFQUFNMGYsUUFBU3dGLEVBQUl4RixTQUN6QyxPQUFPLFNBQVM5ZCxHQUtkLE9BSkE1QixFQUFNdWYsRUFBSUEsRUFBRTNkLEdBQ1o1QixFQUFNd2YsRUFBSUEsRUFBRTVkLEdBQ1o1QixFQUFNekIsRUFBSUEsRUFBRXFELEdBQ1o1QixFQUFNMGYsUUFBVUEsRUFBUTlkLEdBQ2pCNUIsRUFBUSxJQU1uQixPQUZBMGUsRUFBSW1HLE1BQVFJLEVBRUx2RyxFQW5CTSxDQW9CWixHQ3pCWSxZQUFTcGdCLEVBQUdDLEdBQ3pCLE9BQU9ELEdBQUtBLEVBQUdDLEdBQUtBLEVBQUcsU0FBU3FELEdBQzlCLE9BQU90RCxHQUFLLEVBQUlzRCxHQUFLckQsRUFBSXFELEdDQTdCLElBQUl3akIsR0FBTSw4Q0FDTkMsR0FBTSxJQUFJdlEsT0FBT3NRLEdBQUlFLE9BQVEsS0FjbEIsWUFBU2huQixFQUFHQyxHQUN6QixJQUNJZ25CLEVBQ0FDLEVBQ0FDLEVBSEFDLEVBQUtOLEdBQUlPLFVBQVlOLEdBQUlNLFVBQVksRUFJckNybUIsR0FBSyxFQUNMbUMsRUFBSSxHQUNKbWtCLEVBQUksR0FNUixJQUhBdG5CLEdBQVEsR0FBSUMsR0FBUSxJQUdaZ25CLEVBQUtILEdBQUluRyxLQUFLM2dCLE1BQ2RrbkIsRUFBS0gsR0FBSXBHLEtBQUsxZ0IsTUFDZmtuQixFQUFLRCxFQUFHdmtCLE9BQVN5a0IsSUFDcEJELEVBQUtsbkIsRUFBRXFFLE1BQU04aUIsRUFBSUQsR0FDYmhrQixFQUFFbkMsR0FBSW1DLEVBQUVuQyxJQUFNbW1CLEVBQ2Joa0IsSUFBSW5DLEdBQUttbUIsSUFFWEYsRUFBS0EsRUFBRyxPQUFTQyxFQUFLQSxFQUFHLElBQ3hCL2pCLEVBQUVuQyxHQUFJbUMsRUFBRW5DLElBQU1rbUIsRUFDYi9qQixJQUFJbkMsR0FBS2ttQixHQUVkL2pCLElBQUluQyxHQUFLLEtBQ1RzbUIsRUFBRTdkLEtBQUssQ0FBQ3pJLEVBQUdBLEVBQUdULEVBQUdvRSxHQUFPc2lCLEVBQUlDLE1BRTlCRSxFQUFLTCxHQUFJTSxVQVlYLE9BUklELEVBQUtubkIsRUFBRVMsU0FDVHltQixFQUFLbG5CLEVBQUVxRSxNQUFNOGlCLEdBQ1Rqa0IsRUFBRW5DLEdBQUltQyxFQUFFbkMsSUFBTW1tQixFQUNiaGtCLElBQUluQyxHQUFLbW1CLEdBS1Roa0IsRUFBRXpDLE9BQVMsRUFBSzRtQixFQUFFLEdBN0MzQixTQUFhcm5CLEdBQ1gsT0FBTyxTQUFTcUQsR0FDZCxPQUFPckQsRUFBRXFELEdBQUssSUE0Q1Zpa0IsQ0FBSUQsRUFBRSxHQUFHL21CLEdBcERqQixTQUFjTixHQUNaLE9BQU8sV0FDTCxPQUFPQSxHQW1ESHVuQixDQUFLdm5CLElBQ0pBLEVBQUlxbkIsRUFBRTVtQixPQUFRLFNBQVM0QyxHQUN0QixJQUFLLElBQVcyTixFQUFQalEsRUFBSSxFQUFNQSxFQUFJZixJQUFLZSxFQUFHbUMsR0FBRzhOLEVBQUlxVyxFQUFFdG1CLElBQUlBLEdBQUtpUSxFQUFFMVEsRUFBRStDLEdBQ3JELE9BQU9ILEVBQUVpUCxLQUFLLE1DN0R4QixJQ0VJcVYsR0RGQWxGLEdBQVUsSUFBTWxoQixLQUFLaWhCLEdBRWRwYyxHQUFXLENBQ3BCMUIsV0FBWSxFQUNaQyxXQUFZLEVBQ1ppakIsT0FBUSxFQUNSQyxNQUFPLEVBQ1BDLE9BQVEsRUFDUkMsT0FBUSxHQUdLLFlBQVM3bkIsRUFBR0MsRUFBR29KLEVBQUd6SSxFQUFHbEIsRUFBR1MsR0FDckMsSUFBSXluQixFQUFRQyxFQUFRRixFQUtwQixPQUpJQyxFQUFTdm1CLEtBQUtDLEtBQUt0QixFQUFJQSxFQUFJQyxFQUFJQSxNQUFJRCxHQUFLNG5CLEVBQVEzbkIsR0FBSzJuQixJQUNyREQsRUFBUTNuQixFQUFJcUosRUFBSXBKLEVBQUlXLEtBQUd5SSxHQUFLckosRUFBSTJuQixFQUFPL21CLEdBQUtYLEVBQUkwbkIsSUFDaERFLEVBQVN4bUIsS0FBS0MsS0FBSytILEVBQUlBLEVBQUl6SSxFQUFJQSxNQUFJeUksR0FBS3dlLEVBQVFqbkIsR0FBS2luQixFQUFRRixHQUFTRSxHQUN0RTduQixFQUFJWSxFQUFJWCxFQUFJb0osSUFBR3JKLEdBQUtBLEVBQUdDLEdBQUtBLEVBQUcwbkIsR0FBU0EsRUFBT0MsR0FBVUEsR0FDdEQsQ0FDTHBqQixXQUFZOUUsRUFDWitFLFdBQVl0RSxFQUNadW5CLE9BQVFybUIsS0FBS2dpQixNQUFNcGpCLEVBQUdELEdBQUt1aUIsR0FDM0JvRixNQUFPdG1CLEtBQUt5bUIsS0FBS0gsR0FBU3BGLEdBQzFCcUYsT0FBUUEsRUFDUkMsT0FBUUEsR0VwQlosU0FBU0UsR0FBcUJDLEVBQU9DLEVBQVNDLEVBQVNDLEdBRXJELFNBQVNDLEVBQUlqbEIsR0FDWCxPQUFPQSxFQUFFekMsT0FBU3lDLEVBQUVpbEIsTUFBUSxJQUFNLEdBc0NwQyxPQUFPLFNBQVNwb0IsRUFBR0MsR0FDakIsSUFBSWtELEVBQUksR0FDSm1rQixFQUFJLEdBT1IsT0FOQXRuQixFQUFJZ29CLEVBQU1ob0IsR0FBSUMsRUFBSStuQixFQUFNL25CLEdBdEMxQixTQUFtQm9vQixFQUFJQyxFQUFJQyxFQUFJQyxFQUFJcmxCLEVBQUdta0IsR0FDcEMsR0FBSWUsSUFBT0UsR0FBTUQsSUFBT0UsRUFBSSxDQUMxQixJQUFJeG5CLEVBQUltQyxFQUFFc0csS0FBSyxhQUFjLEtBQU13ZSxFQUFTLEtBQU1DLEdBQ2xEWixFQUFFN2QsS0FBSyxDQUFDekksRUFBR0EsRUFBSSxFQUFHVCxFQUFHb0UsR0FBTzBqQixFQUFJRSxJQUFNLENBQUN2bkIsRUFBR0EsRUFBSSxFQUFHVCxFQUFHb0UsR0FBTzJqQixFQUFJRSxVQUN0REQsR0FBTUMsSUFDZnJsQixFQUFFc0csS0FBSyxhQUFlOGUsRUFBS04sRUFBVU8sRUFBS04sR0FrQzVDTyxDQUFVem9CLEVBQUV3RSxXQUFZeEUsRUFBRXlFLFdBQVl4RSxFQUFFdUUsV0FBWXZFLEVBQUV3RSxXQUFZdEIsRUFBR21rQixHQTlCdkUsU0FBZ0J0bkIsRUFBR0MsRUFBR2tELEVBQUdta0IsR0FDbkJ0bkIsSUFBTUMsR0FDSkQsRUFBSUMsRUFBSSxJQUFLQSxHQUFLLElBQWNBLEVBQUlELEVBQUksTUFBS0EsR0FBSyxLQUN0RHNuQixFQUFFN2QsS0FBSyxDQUFDekksRUFBR21DLEVBQUVzRyxLQUFLMmUsRUFBSWpsQixHQUFLLFVBQVcsS0FBTWdsQixHQUFZLEVBQUc1bkIsRUFBR29FLEdBQU8zRSxFQUFHQyxNQUMvREEsR0FDVGtELEVBQUVzRyxLQUFLMmUsRUFBSWpsQixHQUFLLFVBQVlsRCxFQUFJa29CLEdBMEJsQ1QsQ0FBTzFuQixFQUFFMG5CLE9BQVF6bkIsRUFBRXluQixPQUFRdmtCLEVBQUdta0IsR0F0QmhDLFNBQWV0bkIsRUFBR0MsRUFBR2tELEVBQUdta0IsR0FDbEJ0bkIsSUFBTUMsRUFDUnFuQixFQUFFN2QsS0FBSyxDQUFDekksRUFBR21DLEVBQUVzRyxLQUFLMmUsRUFBSWpsQixHQUFLLFNBQVUsS0FBTWdsQixHQUFZLEVBQUc1bkIsRUFBR29FLEdBQU8zRSxFQUFHQyxLQUM5REEsR0FDVGtELEVBQUVzRyxLQUFLMmUsRUFBSWpsQixHQUFLLFNBQVdsRCxFQUFJa29CLEdBbUJqQ1IsQ0FBTTNuQixFQUFFMm5CLE1BQU8xbkIsRUFBRTBuQixNQUFPeGtCLEVBQUdta0IsR0FmN0IsU0FBZWUsRUFBSUMsRUFBSUMsRUFBSUMsRUFBSXJsQixFQUFHbWtCLEdBQ2hDLEdBQUllLElBQU9FLEdBQU1ELElBQU9FLEVBQUksQ0FDMUIsSUFBSXhuQixFQUFJbUMsRUFBRXNHLEtBQUsyZSxFQUFJamxCLEdBQUssU0FBVSxLQUFNLElBQUssS0FBTSxLQUNuRG1rQixFQUFFN2QsS0FBSyxDQUFDekksRUFBR0EsRUFBSSxFQUFHVCxFQUFHb0UsR0FBTzBqQixFQUFJRSxJQUFNLENBQUN2bkIsRUFBR0EsRUFBSSxFQUFHVCxFQUFHb0UsR0FBTzJqQixFQUFJRSxVQUMvQyxJQUFQRCxHQUFtQixJQUFQQyxHQUNyQnJsQixFQUFFc0csS0FBSzJlLEVBQUlqbEIsR0FBSyxTQUFXb2xCLEVBQUssSUFBTUMsRUFBSyxLQVc3QzVqQixDQUFNNUUsRUFBRTRuQixPQUFRNW5CLEVBQUU2bkIsT0FBUTVuQixFQUFFMm5CLE9BQVEzbkIsRUFBRTRuQixPQUFRMWtCLEVBQUdta0IsR0FDakR0bkIsRUFBSUMsRUFBSSxLQUNELFNBQVNxRCxHQUVkLElBREEsSUFBMEIyTixFQUF0QmpRLEdBQUssRUFBR2dDLEVBQUlza0IsRUFBRTVtQixTQUNUTSxFQUFJZ0MsR0FBR0csR0FBRzhOLEVBQUlxVyxFQUFFdG1CLElBQUlBLEdBQUtpUSxFQUFFMVEsRUFBRStDLEdBQ3RDLE9BQU9ILEVBQUVpUCxLQUFLLE1BS2IsSUFBSXNXLEdBQTBCWCxJRHhEOUIsU0FBa0J4b0IsR0FDdkIsTUFBTTBELEVBQUksSUFBMEIsbUJBQWQwbEIsVUFBMkJBLFVBQVlDLGlCQUFpQnJwQixFQUFRLElBQ3RGLE9BQU8wRCxFQUFFNGxCLFdBQWEzaUIsR0FBVzRpQixHQUFVN2xCLEVBQUVqRCxFQUFHaUQsRUFBRWhELEVBQUdnRCxFQUFFb0csRUFBR3BHLEVBQUVyQyxFQUFHcUMsRUFBRXZELEVBQUd1RCxFQUFFOUMsS0NzREosT0FBUSxNQUFPLFFBQ3hFNG9CLEdBQTBCaEIsSURwRDlCLFNBQWtCeG9CLEdBQ3ZCLE9BQWEsTUFBVEEsRUFBc0IyRyxJQUNyQnVoQixLQUFTQSxHQUFVL2MsU0FBU00sZ0JBQWdCLDZCQUE4QixNQUMvRXljLEdBQVFqYSxhQUFhLFlBQWFqTyxJQUM1QkEsRUFBUWtvQixHQUFRNWhCLFVBQVVtakIsUUFBUUMsZUFFakNILElBRFB2cEIsRUFBUUEsRUFBTTJwQixRQUNTbHBCLEVBQUdULEVBQU1VLEVBQUdWLEVBQU04SixFQUFHOUosRUFBTXFCLEVBQUdyQixFQUFNRyxFQUFHSCxFQUFNWSxHQUZMK0YsTUNnREcsS0FBTSxJQUFLLEtDNUQvRSxTQUFTaWpCLEdBQVl2RCxFQUFJNWMsR0FDdkIsSUFBSW9nQixFQUFRQyxFQUNaLE9BQU8sV0FDTCxJQUFJbkQsRUFBVzVjLEdBQUlyRSxLQUFNMmdCLEdBQ3JCSyxFQUFRQyxFQUFTRCxNQUtyQixHQUFJQSxJQUFVbUQsRUFFWixJQUFLLElBQUlwb0IsRUFBSSxFQUFHZ0MsR0FEaEJxbUIsRUFBU0QsRUFBU25ELEdBQ1N2bEIsT0FBUU0sRUFBSWdDLElBQUtoQyxFQUMxQyxHQUFJcW9CLEVBQU9yb0IsR0FBR2dJLE9BQVNBLEVBQU0sRUFDM0JxZ0IsRUFBU0EsRUFBTy9rQixTQUNUK04sT0FBT3JSLEVBQUcsR0FDakIsTUFLTmtsQixFQUFTRCxNQUFRb0QsR0FJckIsU0FBU0MsR0FBYzFELEVBQUk1YyxFQUFNekosR0FDL0IsSUFBSTZwQixFQUFRQyxFQUNaLEdBQXFCLG1CQUFWOXBCLEVBQXNCLE1BQU0sSUFBSWlKLE1BQzNDLE9BQU8sV0FDTCxJQUFJMGQsRUFBVzVjLEdBQUlyRSxLQUFNMmdCLEdBQ3JCSyxFQUFRQyxFQUFTRCxNQUtyQixHQUFJQSxJQUFVbUQsRUFBUSxDQUNwQkMsR0FBVUQsRUFBU25ELEdBQU8zaEIsUUFDMUIsSUFBSyxJQUFJaEIsRUFBSSxDQUFDMEYsS0FBTUEsRUFBTXpKLE1BQU9BLEdBQVF5QixFQUFJLEVBQUdnQyxFQUFJcW1CLEVBQU8zb0IsT0FBUU0sRUFBSWdDLElBQUtoQyxFQUMxRSxHQUFJcW9CLEVBQU9yb0IsR0FBR2dJLE9BQVNBLEVBQU0sQ0FDM0JxZ0IsRUFBT3JvQixHQUFLc0MsRUFDWixNQUdBdEMsSUFBTWdDLEdBQUdxbUIsRUFBTzVmLEtBQUtuRyxHQUczQjRpQixFQUFTRCxNQUFRb0QsR0FzQmQsU0FBU0UsR0FBVzloQixFQUFZdUIsRUFBTXpKLEdBQzNDLElBQUlxbUIsRUFBS25lLEVBQVcraEIsSUFPcEIsT0FMQS9oQixFQUFXTSxNQUFLLFdBQ2QsSUFBSW1lLEVBQVc1YyxHQUFJckUsS0FBTTJnQixJQUN4Qk0sRUFBUzNtQixRQUFVMm1CLEVBQVMzbUIsTUFBUSxLQUFLeUosR0FBUXpKLEVBQU1RLE1BQU1rRixLQUFNaEIsY0FHL0QsU0FBUzBILEdBQ2QsT0FBT3ZDLEdBQUl1QyxFQUFNaWEsR0FBSXJtQixNQUFNeUosSUMzRWhCLFlBQVNoSixFQUFHQyxHQUN6QixJQUFJb0osRUFDSixPQUFxQixpQkFBTnBKLEVBQWlCd3BCLEdBQzFCeHBCLGFBQWF1Z0IsR0FBUWtKLElBQ3BCcmdCLEVBQUltWCxHQUFNdmdCLEtBQU9BLEVBQUlvSixFQUFHcWdCLElBQ3pCQyxJQUFtQjNwQixFQUFHQyxHQ0g5QixTQUFTa04sR0FBV25FLEdBQ2xCLE9BQU8sV0FDTC9ELEtBQUttSSxnQkFBZ0JwRSxJQUl6QixTQUFTcUUsR0FBYW5DLEdBQ3BCLE9BQU8sV0FDTGpHLEtBQUtxSSxrQkFBa0JwQyxFQUFTWCxNQUFPVyxFQUFTVixRQUlwRCxTQUFTK0MsR0FBYXZFLEVBQU00Z0IsRUFBYUMsR0FDdkMsSUFBSUMsRUFFQUMsRUFEQUMsRUFBVUgsRUFBUyxHQUV2QixPQUFPLFdBQ0wsSUFBSUksRUFBVWhsQixLQUFLMEMsYUFBYXFCLEdBQ2hDLE9BQU9paEIsSUFBWUQsRUFBVSxLQUN2QkMsSUFBWUgsRUFBV0MsRUFDdkJBLEVBQWVILEVBQVlFLEVBQVdHLEVBQVNKLElBSXpELFNBQVNwYyxHQUFldkMsRUFBVTBlLEVBQWFDLEdBQzdDLElBQUlDLEVBRUFDLEVBREFDLEVBQVVILEVBQVMsR0FFdkIsT0FBTyxXQUNMLElBQUlJLEVBQVVobEIsS0FBS3dRLGVBQWV2SyxFQUFTWCxNQUFPVyxFQUFTVixPQUMzRCxPQUFPeWYsSUFBWUQsRUFBVSxLQUN2QkMsSUFBWUgsRUFBV0MsRUFDdkJBLEVBQWVILEVBQVlFLEVBQVdHLEVBQVNKLElBSXpELFNBQVNsYyxHQUFhM0UsRUFBTTRnQixFQUFhcnFCLEdBQ3ZDLElBQUl1cUIsRUFDQUksRUFDQUgsRUFDSixPQUFPLFdBQ0wsSUFBSUUsRUFBK0JELEVBQXRCSCxFQUFTdHFCLEVBQU0wRixNQUM1QixHQUFjLE1BQVY0a0IsRUFHSixPQUZBSSxFQUFVaGxCLEtBQUswQyxhQUFhcUIsT0FDNUJnaEIsRUFBVUgsRUFBUyxJQUNVLEtBQ3ZCSSxJQUFZSCxHQUFZRSxJQUFZRSxFQUFXSCxHQUM5Q0csRUFBV0YsRUFBU0QsRUFBZUgsRUFBWUUsRUFBV0csRUFBU0osSUFMMUM1a0IsS0FBS21JLGdCQUFnQnBFLElBU3pELFNBQVM2RSxHQUFlM0MsRUFBVTBlLEVBQWFycUIsR0FDN0MsSUFBSXVxQixFQUNBSSxFQUNBSCxFQUNKLE9BQU8sV0FDTCxJQUFJRSxFQUErQkQsRUFBdEJILEVBQVN0cUIsRUFBTTBGLE1BQzVCLEdBQWMsTUFBVjRrQixFQUdKLE9BRkFJLEVBQVVobEIsS0FBS3dRLGVBQWV2SyxFQUFTWCxNQUFPVyxFQUFTVixXQUN2RHdmLEVBQVVILEVBQVMsSUFDVSxLQUN2QkksSUFBWUgsR0FBWUUsSUFBWUUsRUFBV0gsR0FDOUNHLEVBQVdGLEVBQVNELEVBQWVILEVBQVlFLEVBQVdHLEVBQVNKLElBTDFDNWtCLEtBQUtxSSxrQkFBa0JwQyxFQUFTWCxNQUFPVyxFQUFTVixRQzVEcEYsU0FBUzJmLEdBQWdCbmhCLEVBQU1oSSxHQUM3QixPQUFPLFNBQVNzQyxHQUNkMkIsS0FBS3VJLGFBQWF4RSxFQUFNaEksRUFBRWlILEtBQUtoRCxLQUFNM0IsS0FJekMsU0FBUzhtQixHQUFrQmxmLEVBQVVsSyxHQUNuQyxPQUFPLFNBQVNzQyxHQUNkMkIsS0FBS3lJLGVBQWV4QyxFQUFTWCxNQUFPVyxFQUFTVixNQUFPeEosRUFBRWlILEtBQUtoRCxLQUFNM0IsS0FJckUsU0FBUyttQixHQUFZbmYsRUFBVTNMLEdBQzdCLElBQUlpakIsRUFBSTFlLEVBQ1IsU0FBU21pQixJQUNQLElBQUlqbEIsRUFBSXpCLEVBQU1RLE1BQU1rRixLQUFNaEIsV0FFMUIsT0FESWpELElBQU04QyxJQUFJMGUsR0FBTTFlLEVBQUs5QyxJQUFNb3BCLEdBQWtCbGYsRUFBVWxLLElBQ3BEd2hCLEVBR1QsT0FEQXlELEVBQU1xRSxPQUFTL3FCLEVBQ1IwbUIsRUFHVCxTQUFTc0UsR0FBVXZoQixFQUFNekosR0FDdkIsSUFBSWlqQixFQUFJMWUsRUFDUixTQUFTbWlCLElBQ1AsSUFBSWpsQixFQUFJekIsRUFBTVEsTUFBTWtGLEtBQU1oQixXQUUxQixPQURJakQsSUFBTThDLElBQUkwZSxHQUFNMWUsRUFBSzlDLElBQU1tcEIsR0FBZ0JuaEIsRUFBTWhJLElBQzlDd2hCLEVBR1QsT0FEQXlELEVBQU1xRSxPQUFTL3FCLEVBQ1IwbUIsRUMvQlQsU0FBU3VFLEdBQWM1RSxFQUFJcm1CLEdBQ3pCLE9BQU8sV0FDTCttQixHQUFLcmhCLEtBQU0yZ0IsR0FBSWhCLE9BQVNybEIsRUFBTVEsTUFBTWtGLEtBQU1oQixZQUk5QyxTQUFTd21CLEdBQWM3RSxFQUFJcm1CLEdBQ3pCLE9BQU9BLEdBQVNBLEVBQU8sV0FDckIrbUIsR0FBS3JoQixLQUFNMmdCLEdBQUloQixNQUFRcmxCLEdDUjNCLFNBQVNtckIsR0FBaUI5RSxFQUFJcm1CLEdBQzVCLE9BQU8sV0FDTCtKLEdBQUlyRSxLQUFNMmdCLEdBQUlRLFVBQVk3bUIsRUFBTVEsTUFBTWtGLEtBQU1oQixZQUloRCxTQUFTMG1CLEdBQWlCL0UsRUFBSXJtQixHQUM1QixPQUFPQSxHQUFTQSxFQUFPLFdBQ3JCK0osR0FBSXJFLEtBQU0yZ0IsR0FBSVEsU0FBVzdtQixHQ1I3QixTQUFTcXJCLEdBQWFoRixFQUFJcm1CLEdBQ3hCLEdBQXFCLG1CQUFWQSxFQUFzQixNQUFNLElBQUlpSixNQUMzQyxPQUFPLFdBQ0xjLEdBQUlyRSxLQUFNMmdCLEdBQUlTLEtBQU85bUIsR0NLekIsU0FBU3NyQixHQUFXakYsRUFBSTVjLEVBQU1tSSxHQUM1QixJQUFJMlosRUFBS0MsRUFBS0MsRUFUaEIsU0FBZWhpQixHQUNiLE9BQVFBLEVBQU8sSUFBSUgsT0FBT0MsTUFBTSxTQUFTbWlCLE9BQU0sU0FBUzNuQixHQUN0RCxJQUFJdEMsRUFBSXNDLEVBQUUyRixRQUFRLEtBRWxCLE9BRElqSSxHQUFLLElBQUdzQyxFQUFJQSxFQUFFZ0IsTUFBTSxFQUFHdEQsS0FDbkJzQyxHQUFXLFVBQU5BLEtBS0s1QixDQUFNc0gsR0FBUXNkLEdBQU9oZCxHQUN6QyxPQUFPLFdBQ0wsSUFBSTRjLEVBQVc4RSxFQUFJL2xCLEtBQU0yZ0IsR0FDckJqYyxFQUFLdWMsRUFBU3ZjLEdBS2RBLElBQU9taEIsSUFBTUMsR0FBT0QsRUFBTW5oQixHQUFJcEQsUUFBUW9ELEdBQUdYLEVBQU1tSSxHQUVuRCtVLEVBQVN2YyxHQUFLb2hCLEdDbkJsQixJQUFJdlksR0FBWWhNLEdBQVVqQyxVQUFVbUYsWUNpQnBDLFNBQVNxRSxHQUFZL0UsR0FDbkIsT0FBTyxXQUNML0QsS0FBSytJLE1BQU1DLGVBQWVqRixJQ3JCOUIsU0FBU2tpQixHQUFpQmxpQixFQUFNaEksRUFBR21OLEdBQ2pDLE9BQU8sU0FBUzdLLEdBQ2QyQixLQUFLK0ksTUFBTUksWUFBWXBGLEVBQU1oSSxFQUFFaUgsS0FBS2hELEtBQU0zQixHQUFJNkssSUFJbEQsU0FBU2dkLEdBQVduaUIsRUFBTXpKLEVBQU80TyxHQUMvQixJQUFJN0ssRUFBR1EsRUFDUCxTQUFTbWlCLElBQ1AsSUFBSWpsQixFQUFJekIsRUFBTVEsTUFBTWtGLEtBQU1oQixXQUUxQixPQURJakQsSUFBTThDLElBQUlSLEdBQUtRLEVBQUs5QyxJQUFNa3FCLEdBQWlCbGlCLEVBQU1oSSxFQUFHbU4sSUFDakQ3SyxFQUdULE9BREEyaUIsRUFBTXFFLE9BQVMvcUIsRUFDUjBtQixFQ2RULFNBQVNtRixHQUFnQnBxQixHQUN2QixPQUFPLFNBQVNzQyxHQUNkMkIsS0FBSzBLLFlBQWMzTyxFQUFFaUgsS0FBS2hELEtBQU0zQixJQUlwQyxTQUFTK25CLEdBQVU5ckIsR0FDakIsSUFBSWlqQixFQUFJMWUsRUFDUixTQUFTbWlCLElBQ1AsSUFBSWpsQixFQUFJekIsRUFBTVEsTUFBTWtGLEtBQU1oQixXQUUxQixPQURJakQsSUFBTThDLElBQUkwZSxHQUFNMWUsRUFBSzlDLElBQU1vcUIsR0FBZ0JwcUIsSUFDeEN3aEIsRUFHVCxPQURBeUQsRUFBTXFFLE9BQVMvcUIsRUFDUjBtQixFQ1FULElBQUlMLEdBQUssRUFFRixTQUFTMEYsR0FBVzdZLEVBQVFDLEVBQVMxSixFQUFNNGMsR0FDaEQzZ0IsS0FBSzBOLFFBQVVGLEVBQ2Z4TixLQUFLMk4sU0FBV0YsRUFDaEJ6TixLQUFLc21CLE1BQVF2aUIsRUFDYi9ELEtBQUt1a0IsSUFBTTVELEVBT04sU0FBUzRGLEtBQ2QsUUFBUzVGLEdBR1gsSUFBSTZGLEdBQXNCamxCLEdBQVVqQyxVQUVwQyttQixHQUFXL21CLFVBQW1DLENBQzVDbUYsWUFBYTRoQixHQUNiamtCLE9DdkNhLFNBQVNBLEdBQ3RCLElBQUkyQixFQUFPL0QsS0FBS3NtQixNQUNaM0YsRUFBSzNnQixLQUFLdWtCLElBRVEsbUJBQVhuaUIsSUFBdUJBLEVBQVNnRSxFQUFTaEUsSUFFcEQsSUFBSyxJQUFJb0wsRUFBU3hOLEtBQUswTixRQUFTMVAsRUFBSXdQLEVBQU8vUixPQUFReVMsRUFBWSxJQUFJL08sTUFBTW5CLEdBQUlNLEVBQUksRUFBR0EsRUFBSU4sSUFBS00sRUFDM0YsSUFBSyxJQUFpRm9JLEVBQU15SCxFQUFuRjVHLEVBQVFpRyxFQUFPbFAsR0FBSVAsRUFBSXdKLEVBQU05TCxPQUFRMlMsRUFBV0YsRUFBVTVQLEdBQUssSUFBSWEsTUFBTXBCLEdBQW1CaEMsRUFBSSxFQUFHQSxFQUFJZ0MsSUFBS2hDLEdBQzlHMkssRUFBT2EsRUFBTXhMLE1BQVFvUyxFQUFVL0wsRUFBT1ksS0FBSzBELEVBQU1BLEVBQUtXLFNBQVV0TCxFQUFHd0wsTUFDbEUsYUFBY2IsSUFBTXlILEVBQVE5RyxTQUFXWCxFQUFLVyxVQUNoRCtHLEVBQVNyUyxHQUFLb1MsRUFDZDhTLEdBQVM3UyxFQUFTclMsR0FBSWdJLEVBQU00YyxFQUFJNWtCLEVBQUdxUyxFQUFVakssR0FBSXVDLEVBQU1pYSxLQUs3RCxPQUFPLElBQUkwRixHQUFXblksRUFBV2xPLEtBQUsyTixTQUFVNUosRUFBTTRjLElEd0J0RGxmLFVFeENhLFNBQVNXLEdBQ3RCLElBQUkyQixFQUFPL0QsS0FBS3NtQixNQUNaM0YsRUFBSzNnQixLQUFLdWtCLElBRVEsbUJBQVhuaUIsSUFBdUJBLEVBQVNrTSxFQUFZbE0sSUFFdkQsSUFBSyxJQUFJb0wsRUFBU3hOLEtBQUswTixRQUFTMVAsRUFBSXdQLEVBQU8vUixPQUFReVMsRUFBWSxHQUFJVCxFQUFVLEdBQUluUCxFQUFJLEVBQUdBLEVBQUlOLElBQUtNLEVBQy9GLElBQUssSUFBeUNvSSxFQUFyQ2EsRUFBUWlHLEVBQU9sUCxHQUFJUCxFQUFJd0osRUFBTTlMLE9BQWNNLEVBQUksRUFBR0EsRUFBSWdDLElBQUtoQyxFQUNsRSxHQUFJMkssRUFBT2EsRUFBTXhMLEdBQUksQ0FDbkIsSUFBSyxJQUEyRG1SLEVBQXZEcEcsRUFBVzFFLEVBQU9ZLEtBQUswRCxFQUFNQSxFQUFLVyxTQUFVdEwsRUFBR3dMLEdBQWVrZixFQUFVdGlCLEdBQUl1QyxFQUFNaWEsR0FBSzdpQixFQUFJLEVBQUcwZCxFQUFJMVUsRUFBU3JMLE9BQVFxQyxFQUFJMGQsSUFBSzFkLEdBQy9Ib1AsRUFBUXBHLEVBQVNoSixLQUNuQm1qQixHQUFTL1QsRUFBT25KLEVBQU00YyxFQUFJN2lCLEVBQUdnSixFQUFVMmYsR0FHM0N2WSxFQUFVMUosS0FBS3NDLEdBQ2YyRyxFQUFRakosS0FBS2tDLEdBS25CLE9BQU8sSUFBSTJmLEdBQVduWSxFQUFXVCxFQUFTMUosRUFBTTRjLElGcUJoRDlkLE9HMUNhLFNBQVMyTCxHQUNELG1CQUFWQSxJQUFzQkEsRUFBUUksRUFBUUosSUFFakQsSUFBSyxJQUFJaEIsRUFBU3hOLEtBQUswTixRQUFTMVAsRUFBSXdQLEVBQU8vUixPQUFReVMsRUFBWSxJQUFJL08sTUFBTW5CLEdBQUlNLEVBQUksRUFBR0EsRUFBSU4sSUFBS00sRUFDM0YsSUFBSyxJQUF1RW9JLEVBQW5FYSxFQUFRaUcsRUFBT2xQLEdBQUlQLEVBQUl3SixFQUFNOUwsT0FBUTJTLEVBQVdGLEVBQVU1UCxHQUFLLEdBQVV2QyxFQUFJLEVBQUdBLEVBQUlnQyxJQUFLaEMsR0FDM0YySyxFQUFPYSxFQUFNeEwsS0FBT3lTLEVBQU14TCxLQUFLMEQsRUFBTUEsRUFBS1csU0FBVXRMLEVBQUd3TCxJQUMxRDZHLEVBQVM1SixLQUFLa0MsR0FLcEIsT0FBTyxJQUFJMmYsR0FBV25ZLEVBQVdsTyxLQUFLMk4sU0FBVTNOLEtBQUtzbUIsTUFBT3RtQixLQUFLdWtCLE1IZ0NqRWppQixNSTVDYSxTQUFTRSxHQUN0QixHQUFJQSxFQUFXK2hCLE1BQVF2a0IsS0FBS3VrQixJQUFLLE1BQU0sSUFBSWhoQixNQUUzQyxJQUFLLElBQUltTSxFQUFVMVAsS0FBSzBOLFFBQVNpQyxFQUFVbk4sRUFBV2tMLFFBQVNrQyxFQUFLRixFQUFRalUsT0FBUW9VLEVBQUtGLEVBQVFsVSxPQUFRdUMsRUFBSTVCLEtBQUt1QixJQUFJaVMsRUFBSUMsR0FBS0MsRUFBUyxJQUFJM1EsTUFBTXlRLEdBQUt0UixFQUFJLEVBQUdBLEVBQUlOLElBQUtNLEVBQ3JLLElBQUssSUFBbUdvSSxFQUEvRnFKLEVBQVNMLEVBQVFwUixHQUFJMFIsRUFBU0wsRUFBUXJSLEdBQUlQLEVBQUlnUyxFQUFPdFUsT0FBUTZHLEVBQVF3TixFQUFPeFIsR0FBSyxJQUFJYSxNQUFNcEIsR0FBVWhDLEVBQUksRUFBR0EsRUFBSWdDLElBQUtoQyxHQUN4SDJLLEVBQU9xSixFQUFPaFUsSUFBTWlVLEVBQU9qVSxNQUM3QnVHLEVBQU12RyxHQUFLMkssR0FLakIsS0FBT3BJLEVBQUlzUixJQUFNdFIsRUFDZndSLEVBQU94UixHQUFLb1IsRUFBUXBSLEdBR3RCLE9BQU8sSUFBSStuQixHQUFXdlcsRUFBUTlQLEtBQUsyTixTQUFVM04sS0FBS3NtQixNQUFPdG1CLEtBQUt1a0IsTUo4QjlEaGpCLFVKM0NhLFdBQ2IsT0FBTyxJQUFJZ00sR0FBVXZOLEtBQUswTixRQUFTMU4sS0FBSzJOLFdJMkN4Q25MLFdLN0NhLFdBS2IsSUFKQSxJQUFJdUIsRUFBTy9ELEtBQUtzbUIsTUFDWkksRUFBTTFtQixLQUFLdWtCLElBQ1hvQyxFQUFNSixLQUVEL1ksRUFBU3hOLEtBQUswTixRQUFTMVAsRUFBSXdQLEVBQU8vUixPQUFRNkMsRUFBSSxFQUFHQSxFQUFJTixJQUFLTSxFQUNqRSxJQUFLLElBQXlDb0ksRUFBckNhLEVBQVFpRyxFQUFPbFAsR0FBSVAsRUFBSXdKLEVBQU05TCxPQUFjTSxFQUFJLEVBQUdBLEVBQUlnQyxJQUFLaEMsRUFDbEUsR0FBSTJLLEVBQU9hLEVBQU14TCxHQUFJLENBQ25CLElBQUkwcUIsRUFBVXRpQixHQUFJdUMsRUFBTWdnQixHQUN4QnpGLEdBQVN2YSxFQUFNM0MsRUFBTTRpQixFQUFLNXFCLEVBQUd3TCxFQUFPLENBQ2xDcVksS0FBTTZHLEVBQVE3RyxLQUFPNkcsRUFBUTlHLE1BQVE4RyxFQUFRdEYsU0FDN0N4QixNQUFPLEVBQ1B3QixTQUFVc0YsRUFBUXRGLFNBQ2xCQyxLQUFNcUYsRUFBUXJGLE9BTXRCLE9BQU8sSUFBSWlGLEdBQVc3WSxFQUFReE4sS0FBSzJOLFNBQVU1SixFQUFNNGlCLElMMkJuRDNqQixLQUFNd2pCLEdBQW9CeGpCLEtBQzFCc04sTUFBT2tXLEdBQW9CbFcsTUFDM0I1SixLQUFNOGYsR0FBb0I5ZixLQUMxQjZKLEtBQU1pVyxHQUFvQmpXLEtBQzFCakssTUFBT2tnQixHQUFvQmxnQixNQUMzQnhELEtBQU0wakIsR0FBb0IxakIsS0FDMUI0QixHTDlCYSxTQUFTWCxFQUFNbUksR0FDNUIsSUFBSXlVLEVBQUszZ0IsS0FBS3VrQixJQUVkLE9BQU92bEIsVUFBVXZELE9BQVMsRUFDcEIwSSxHQUFJbkUsS0FBSzBHLE9BQVFpYSxHQUFJamMsR0FBR0EsR0FBR1gsR0FDM0IvRCxLQUFLOEMsS0FBSzhpQixHQUFXakYsRUFBSTVjLEVBQU1tSSxLSzBCckNoSyxLVmVhLFNBQVM2QixFQUFNekosR0FDNUIsSUFBSTJMLEVBQVdDLEVBQVVuQyxHQUFPaEksRUFBaUIsY0FBYmtLLEVBQTJCNmMsR0FBdUI2QixHQUN0RixPQUFPM2tCLEtBQUtzbEIsVUFBVXZoQixFQUF1QixtQkFBVnpKLEdBQzVCMkwsRUFBU1YsTUFBUXFELEdBQWlCRixJQUFjekMsRUFBVWxLLEVBQUd1b0IsR0FBV3RrQixLQUFNLFFBQVUrRCxFQUFNekosSUFDdEYsTUFBVEEsR0FBaUIyTCxFQUFTVixNQUFRNkMsR0FBZUYsSUFBWWpDLElBQzVEQSxFQUFTVixNQUFRaUQsR0FBaUJGLElBQWNyQyxFQUFVbEssRUFBR3pCLEtVbkJwRWdyQixVVHJCYSxTQUFTdmhCLEVBQU16SixHQUM1QixJQUFJcU4sRUFBTSxRQUFVNUQsRUFDcEIsR0FBSS9FLFVBQVV2RCxPQUFTLEVBQUcsT0FBUWtNLEVBQU0zSCxLQUFLZ2hCLE1BQU1yWixLQUFTQSxFQUFJMGQsT0FDaEUsR0FBYSxNQUFUL3FCLEVBQWUsT0FBTzBGLEtBQUtnaEIsTUFBTXJaLEVBQUssTUFDMUMsR0FBcUIsbUJBQVZyTixFQUFzQixNQUFNLElBQUlpSixNQUMzQyxJQUFJMEMsRUFBV0MsRUFBVW5DLEdBQ3pCLE9BQU8vRCxLQUFLZ2hCLE1BQU1yWixHQUFNMUIsRUFBU1YsTUFBUTZmLEdBQWNFLElBQVdyZixFQUFVM0wsS1NnQjVFeU8sTUhVYSxTQUFTaEYsRUFBTXpKLEVBQU80TyxHQUNuQyxJQUFJbk4sRUFBcUIsY0FBaEJnSSxHQUFRLElBQXNCK2UsR0FBdUI2QixHQUM5RCxPQUFnQixNQUFUcnFCLEVBQWdCMEYsS0FDbEJrbUIsV0FBV25pQixFQWpFbEIsU0FBbUJBLEVBQU00Z0IsR0FDdkIsSUFBSUUsRUFDQUksRUFDQUgsRUFDSixPQUFPLFdBQ0wsSUFBSUUsRUFBVWpjLEdBQU0vSSxLQUFNK0QsR0FDdEJnaEIsR0FBVy9rQixLQUFLK0ksTUFBTUMsZUFBZWpGLEdBQU9nRixHQUFNL0ksS0FBTStELElBQzVELE9BQU9paEIsSUFBWUQsRUFBVSxLQUN2QkMsSUFBWUgsR0FBWUUsSUFBWUUsRUFBV0gsRUFDL0NBLEVBQWVILEVBQVlFLEVBQVdHLEVBQVNDLEVBQVdGLElBd0Q1QzZCLENBQVU3aUIsRUFBTWhJLElBQ2pDMkksR0FBRyxhQUFlWCxFQUFNK0UsR0FBWS9FLElBQ3BCLG1CQUFWekosRUFBdUIwRixLQUM3QmttQixXQUFXbmlCLEVBckNsQixTQUF1QkEsRUFBTTRnQixFQUFhcnFCLEdBQ3hDLElBQUl1cUIsRUFDQUksRUFDQUgsRUFDSixPQUFPLFdBQ0wsSUFBSUUsRUFBVWpjLEdBQU0vSSxLQUFNK0QsR0FDdEI2Z0IsRUFBU3RxQixFQUFNMEYsTUFDZitrQixFQUFVSCxFQUFTLEdBRXZCLE9BRGMsTUFBVkEsSUFBb0M1a0IsS0FBSytJLE1BQU1DLGVBQWVqRixHQUE5Q2doQixFQUFVSCxFQUEyQzdiLEdBQU0vSSxLQUFNK0QsSUFDOUVpaEIsSUFBWUQsRUFBVSxLQUN2QkMsSUFBWUgsR0FBWUUsSUFBWUUsRUFBV0gsR0FDOUNHLEVBQVdGLEVBQVNELEVBQWVILEVBQVlFLEVBQVdHLEVBQVNKLEtBMEJ0RHhiLENBQWNyRixFQUFNaEksRUFBR3VvQixHQUFXdGtCLEtBQU0sU0FBVytELEVBQU16SixLQUMxRXdJLEtBdkJQLFNBQTBCNmQsRUFBSTVjLEdBQzVCLElBQUk4aEIsRUFBS0MsRUFBS2UsRUFBd0Rqa0IsRUFBN0MrRSxFQUFNLFNBQVc1RCxFQUFNc0ksRUFBUSxPQUFTMUUsRUFDakUsT0FBTyxXQUNMLElBQUlzWixFQUFXNWMsR0FBSXJFLEtBQU0yZ0IsR0FDckJqYyxFQUFLdWMsRUFBU3ZjLEdBQ2R3SCxFQUFrQyxNQUF2QitVLEVBQVMzbUIsTUFBTXFOLEdBQWUvRSxJQUFXQSxFQUFTa0csR0FBWS9FLFNBQVN0RyxFQUtsRmlILElBQU9taEIsR0FBT2dCLElBQWMzYSxJQUFXNFosR0FBT0QsRUFBTW5oQixHQUFJcEQsUUFBUW9ELEdBQUcySCxFQUFPd2EsRUFBWTNhLEdBRTFGK1UsRUFBU3ZjLEdBQUtvaEIsR0FXTmdCLENBQWlCOW1CLEtBQUt1a0IsSUFBS3hnQixJQUNqQy9ELEtBQ0NrbUIsV0FBV25pQixFQXBEbEIsU0FBdUJBLEVBQU00Z0IsRUFBYUMsR0FDeEMsSUFBSUMsRUFFQUMsRUFEQUMsRUFBVUgsRUFBUyxHQUV2QixPQUFPLFdBQ0wsSUFBSUksRUFBVWpjLEdBQU0vSSxLQUFNK0QsR0FDMUIsT0FBT2loQixJQUFZRCxFQUFVLEtBQ3ZCQyxJQUFZSCxFQUFXQyxFQUN2QkEsRUFBZUgsRUFBWUUsRUFBV0csRUFBU0osSUE0Q2pDM2IsQ0FBY2xGLEVBQU1oSSxFQUFHekIsR0FBUTRPLEdBQ2hEeEUsR0FBRyxhQUFlWCxFQUFNLE9HbkI3Qm1pQixXRjFDYSxTQUFTbmlCLEVBQU16SixFQUFPNE8sR0FDbkMsSUFBSXZCLEVBQU0sVUFBWTVELEdBQVEsSUFDOUIsR0FBSS9FLFVBQVV2RCxPQUFTLEVBQUcsT0FBUWtNLEVBQU0zSCxLQUFLZ2hCLE1BQU1yWixLQUFTQSxFQUFJMGQsT0FDaEUsR0FBYSxNQUFUL3FCLEVBQWUsT0FBTzBGLEtBQUtnaEIsTUFBTXJaLEVBQUssTUFDMUMsR0FBcUIsbUJBQVZyTixFQUFzQixNQUFNLElBQUlpSixNQUMzQyxPQUFPdkQsS0FBS2doQixNQUFNclosRUFBS3VlLEdBQVduaUIsRUFBTXpKLEVBQW1CLE1BQVo0TyxFQUFtQixHQUFLQSxLRXNDdkU3RyxLTTdDYSxTQUFTL0gsR0FDdEIsT0FBTzBGLEtBQUtnaEIsTUFBTSxPQUF5QixtQkFBVjFtQixFQVJuQyxTQUFzQkEsR0FDcEIsT0FBTyxXQUNMLElBQUlzcUIsRUFBU3RxQixFQUFNMEYsTUFDbkJBLEtBQUswSyxZQUF3QixNQUFWa2EsRUFBaUIsR0FBS0EsR0FNckNoYSxDQUFhMFosR0FBV3RrQixLQUFNLE9BQVExRixJQWY5QyxTQUFzQkEsR0FDcEIsT0FBTyxXQUNMMEYsS0FBSzBLLFlBQWNwUSxHQWNmcVEsQ0FBc0IsTUFBVHJRLEVBQWdCLEdBQUtBLEVBQVEsTU4yQ2hEOHJCLFVENUNhLFNBQVM5ckIsR0FDdEIsSUFBSXFOLEVBQU0sT0FDVixHQUFJM0ksVUFBVXZELE9BQVMsRUFBRyxPQUFRa00sRUFBTTNILEtBQUtnaEIsTUFBTXJaLEtBQVNBLEVBQUkwZCxPQUNoRSxHQUFhLE1BQVQvcUIsRUFBZSxPQUFPMEYsS0FBS2doQixNQUFNclosRUFBSyxNQUMxQyxHQUFxQixtQkFBVnJOLEVBQXNCLE1BQU0sSUFBSWlKLE1BQzNDLE9BQU92RCxLQUFLZ2hCLE1BQU1yWixFQUFLeWUsR0FBVTlyQixLQ3dDakNzSSxPT3REYSxXQUNiLE9BQU81QyxLQUFLMEUsR0FBRyxhQVRqQixTQUF3QmljLEdBQ3RCLE9BQU8sV0FDTCxJQUFJMVosRUFBU2pILEtBQUsyQyxXQUNsQixJQUFLLElBQUk1RyxLQUFLaUUsS0FBSzhnQixhQUFjLElBQUsva0IsSUFBTTRrQixFQUFJLE9BQzVDMVosR0FBUUEsRUFBT3dFLFlBQVl6TCxPQUtKK21CLENBQWUvbUIsS0FBS3VrQixPUHNEakR2RCxNWlphLFNBQVNqZCxFQUFNekosR0FDNUIsSUFBSXFtQixFQUFLM2dCLEtBQUt1a0IsSUFJZCxHQUZBeGdCLEdBQVEsR0FFSi9FLFVBQVV2RCxPQUFTLEVBQUcsQ0FFeEIsSUFEQSxJQUNrQzRDLEVBRDlCMmlCLEVBQVE3YyxHQUFJbkUsS0FBSzBHLE9BQVFpYSxHQUFJSyxNQUN4QmpsQixFQUFJLEVBQUdnQyxFQUFJaWpCLEVBQU12bEIsT0FBV00sRUFBSWdDLElBQUtoQyxFQUM1QyxJQUFLc0MsRUFBSTJpQixFQUFNamxCLElBQUlnSSxPQUFTQSxFQUMxQixPQUFPMUYsRUFBRS9ELE1BR2IsT0FBTyxLQUdULE9BQU8wRixLQUFLOEMsTUFBZSxNQUFUeEksRUFBZ0I0cEIsR0FBY0csSUFBZTFELEVBQUk1YyxFQUFNekosS1lGekVxbEIsTVJsRGEsU0FBU3JsQixHQUN0QixJQUFJcW1CLEVBQUszZ0IsS0FBS3VrQixJQUVkLE9BQU92bEIsVUFBVXZELE9BQ1h1RSxLQUFLOEMsTUFBdUIsbUJBQVZ4SSxFQUNkaXJCLEdBQ0FDLElBQWU3RSxFQUFJcm1CLElBQ3ZCNkosR0FBSW5FLEtBQUswRyxPQUFRaWEsR0FBSWhCLE9RNEMzQndCLFNQbkRhLFNBQVM3bUIsR0FDdEIsSUFBSXFtQixFQUFLM2dCLEtBQUt1a0IsSUFFZCxPQUFPdmxCLFVBQVV2RCxPQUNYdUUsS0FBSzhDLE1BQXVCLG1CQUFWeEksRUFDZG1yQixHQUNBQyxJQUFrQi9FLEVBQUlybUIsSUFDMUI2SixHQUFJbkUsS0FBSzBHLE9BQVFpYSxHQUFJUSxVTzZDM0JDLEtOekRhLFNBQVM5bUIsR0FDdEIsSUFBSXFtQixFQUFLM2dCLEtBQUt1a0IsSUFFZCxPQUFPdmxCLFVBQVV2RCxPQUNYdUUsS0FBSzhDLEtBQUs2aUIsR0FBYWhGLEVBQUlybUIsSUFDM0I2SixHQUFJbkUsS0FBSzBHLE9BQVFpYSxHQUFJUyxNTXFEM0I0RixZUXpEYSxTQUFTMXNCLEdBQ3RCLEdBQXFCLG1CQUFWQSxFQUFzQixNQUFNLElBQUlpSixNQUMzQyxPQUFPdkQsS0FBSzhDLEtBVmQsU0FBcUI2ZCxFQUFJcm1CLEdBQ3ZCLE9BQU8sV0FDTCxJQUFJcU8sRUFBSXJPLEVBQU1RLE1BQU1rRixLQUFNaEIsV0FDMUIsR0FBaUIsbUJBQU4ySixFQUFrQixNQUFNLElBQUlwRixNQUN2Q2MsR0FBSXJFLEtBQU0yZ0IsR0FBSVMsS0FBT3pZLEdBTU5xZSxDQUFZaG5CLEtBQUt1a0IsSUFBS2pxQixLUndEdkNxbkIsSVNsRWEsV0FDYixJQUFJa0UsRUFBS0MsRUFBS2poQixFQUFPN0UsS0FBTTJnQixFQUFLOWIsRUFBSzBmLElBQUtoVSxFQUFPMUwsRUFBSzBMLE9BQ3RELE9BQU8sSUFBSXJXLFNBQVEsU0FBU0MsRUFBU0MsR0FDbkMsSUFBSTZzQixFQUFTLENBQUMzc0IsTUFBT0YsR0FDakJ1bkIsRUFBTSxDQUFDcm5CLE1BQU8sV0FBNEIsS0FBVGlXLEdBQVlwVyxNQUVqRDBLLEVBQUsvQixNQUFLLFdBQ1IsSUFBSW1lLEVBQVc1YyxHQUFJckUsS0FBTTJnQixHQUNyQmpjLEVBQUt1YyxFQUFTdmMsR0FLZEEsSUFBT21oQixLQUNUQyxHQUFPRCxFQUFNbmhCLEdBQUlwRCxRQUNieUIsRUFBRWtrQixPQUFPemlCLEtBQUt5aUIsR0FDbEJuQixFQUFJL2lCLEVBQUVta0IsVUFBVTFpQixLQUFLeWlCLEdBQ3JCbkIsRUFBSS9pQixFQUFFNGUsSUFBSW5kLEtBQUttZCxJQUdqQlYsRUFBU3ZjLEdBQUtvaEIsS0FJSCxJQUFUdlYsR0FBWXBXLFFUMkNsQixDQUFDNFcsT0FBT0MsVUFBV3dWLEdBQW9CelYsT0FBT0MsV1VoRWhELElBQUltVyxHQUFnQixDQUNsQnZILEtBQU0sS0FDTkQsTUFBTyxFQUNQd0IsU0FBVSxJQUNWQyxLQ0RLLFNBQW9CL2lCLEdBQ3pCLFFBQVNBLEdBQUssSUFBTSxFQUFJQSxFQUFJQSxFQUFJQSxHQUFLQSxHQUFLLEdBQUtBLEVBQUlBLEVBQUksR0FBSyxJREc5RCxTQUFTb29CLEdBQVEvZixFQUFNaWEsR0FFckIsSUFEQSxJQUFJQyxJQUNLQSxFQUFTbGEsRUFBS29hLGlCQUFtQkYsRUFBU0EsRUFBT0QsS0FDeEQsS0FBTWphLEVBQU9BLEVBQUsvRCxZQUNoQixNQUFNLElBQUlZLE1BQU0sY0FBY29kLGVBR2xDLE9BQU9DLEVFZlRyZixHQUFVakMsVUFBVTRuQixVQ0ZMLFNBQVNuakIsR0FDdEIsT0FBTy9ELEtBQUs4QyxNQUFLLFlDREosU0FBUzRELEVBQU0zQyxHQUM1QixJQUNJa2QsRUFDQW1HLEVBRUFyckIsRUFKQThrQixFQUFZbmEsRUFBS29hLGFBR2pCeGEsR0FBUSxFQUdaLEdBQUt1YSxFQUFMLENBSUEsSUFBSzlrQixLQUZMZ0ksRUFBZSxNQUFSQSxFQUFlLEtBQU9BLEVBQU8sR0FFMUI4YyxHQUNISSxFQUFXSixFQUFVOWtCLElBQUlnSSxPQUFTQSxHQUN2Q3FqQixFQUFTbkcsRUFBU0MsTW5DUEEsR21DT29CRCxFQUFTQyxNbkNKL0IsRW1DS2hCRCxFQUFTQyxNbkNKTSxFbUNLZkQsRUFBU3ZCLE1BQU1oakIsT0FDZnVrQixFQUFTdmMsR0FBRzFCLEtBQUtva0IsRUFBUyxZQUFjLFNBQVUxZ0IsRUFBTUEsRUFBS1csU0FBVTRaLEVBQVN2akIsTUFBT3VqQixFQUFTMVosY0FDekZzWixFQUFVOWtCLElBTDhCdUssR0FBUSxFQVFyREEsVUFBY0ksRUFBS29hLGNEbEJyQm9HLENBQVVsbkIsS0FBTStELE9EQ3BCeEMsR0FBVWpDLFVBQVVrRCxXRmlCTCxTQUFTdUIsR0FDdEIsSUFBSTRjLEVBQ0FDLEVBRUE3YyxhQUFnQnNpQixJQUNsQjFGLEVBQUs1YyxFQUFLd2dCLElBQUt4Z0IsRUFBT0EsRUFBS3VpQixRQUUzQjNGLEVBQUs0RixNQUFVM0YsRUFBU3VHLElBQWV2SCxLQUFPWCxLQUFPbGIsRUFBZSxNQUFSQSxFQUFlLEtBQU9BLEVBQU8sSUFHM0YsSUFBSyxJQUFJeUosRUFBU3hOLEtBQUswTixRQUFTMVAsRUFBSXdQLEVBQU8vUixPQUFRNkMsRUFBSSxFQUFHQSxFQUFJTixJQUFLTSxFQUNqRSxJQUFLLElBQXlDb0ksRUFBckNhLEVBQVFpRyxFQUFPbFAsR0FBSVAsRUFBSXdKLEVBQU05TCxPQUFjTSxFQUFJLEVBQUdBLEVBQUlnQyxJQUFLaEMsR0FDOUQySyxFQUFPYSxFQUFNeEwsS0FDZmtsQixHQUFTdmEsRUFBTTNDLEVBQU00YyxFQUFJNWtCLEVBQUd3TCxFQUFPcVosR0FBVTZGLEdBQVEvZixFQUFNaWEsSUFLakUsT0FBTyxJQUFJMEYsR0FBVzdZLEVBQVF4TixLQUFLMk4sU0FBVTVKLEVBQU00YyxJS3hDckQsTUFBTTBHLEdBQUtqckIsS0FBS2loQixHQUNaaUssR0FBTSxFQUFJRCxHQUVWRSxHQUFhRCxHQURILEtBR2QsU0FBU0UsS0FDUHhuQixLQUFLeW5CLElBQU16bkIsS0FBSzBuQixJQUNoQjFuQixLQUFLMm5CLElBQU0zbkIsS0FBSzRuQixJQUFNLEtBQ3RCNW5CLEtBQUsrQyxFQUFJLEdBR1gsU0FBU3ZCLEtBQ1AsT0FBTyxJQUFJZ21CLEdDSE4sU0FBU0ssR0FBbUJ2c0IsRUFBR21ELEdBQ3BDLElBQUsxQyxHQUFLVCxFQUFJbUQsRUFBSW5ELEVBQUV3c0IsY0FBY3JwQixFQUFJLEdBQUtuRCxFQUFFd3NCLGlCQUFpQjlqQixRQUFRLE1BQVEsRUFBRyxPQUFPLEtBQ3hGLElBQUlqSSxFQUFHZ3NCLEVBQWN6c0IsRUFBRStELE1BQU0sRUFBR3RELEdBSWhDLE1BQU8sQ0FDTGdzQixFQUFZdHNCLE9BQVMsRUFBSXNzQixFQUFZLEdBQUtBLEVBQVkxb0IsTUFBTSxHQUFLMG9CLEdBQ2hFenNCLEVBQUUrRCxNQUFNdEQsRUFBSSxJQ2ZGLFlBQVNULEdBQ3RCLE9BQU9BLEVBQUl1c0IsR0FBbUJ6ckIsS0FBS2lCLElBQUkvQixLQUFTQSxFQUFFLEdBQUtMLElGWXpEdXNCLEdBQUtsb0IsVUFBWWtDLEdBQUtsQyxVQUFZLENBQ2hDbUYsWUFBYStpQixHQUNiUSxPQUFRLFNBQVMxc0IsRUFBR21FLEdBQ2xCTyxLQUFLK0MsR0FBSyxLQUFPL0MsS0FBS3luQixJQUFNem5CLEtBQUsybkIsS0FBT3JzQixHQUFLLEtBQU8wRSxLQUFLMG5CLElBQU0xbkIsS0FBSzRuQixLQUFPbm9CLElBRTdFd29CLFVBQVcsV0FDUSxPQUFiam9CLEtBQUsybkIsTUFDUDNuQixLQUFLMm5CLElBQU0zbkIsS0FBS3luQixJQUFLem5CLEtBQUs0bkIsSUFBTTVuQixLQUFLMG5CLElBQ3JDMW5CLEtBQUsrQyxHQUFLLE1BR2RtbEIsT0FBUSxTQUFTNXNCLEVBQUdtRSxHQUNsQk8sS0FBSytDLEdBQUssS0FBTy9DLEtBQUsybkIsS0FBT3JzQixHQUFLLEtBQU8wRSxLQUFLNG5CLEtBQU9ub0IsSUFFdkQwb0IsaUJBQWtCLFNBQVNDLEVBQUlDLEVBQUkvc0IsRUFBR21FLEdBQ3BDTyxLQUFLK0MsR0FBSyxNQUFRcWxCLEVBQU0sTUFBUUMsRUFBTSxLQUFPcm9CLEtBQUsybkIsS0FBT3JzQixHQUFLLEtBQU8wRSxLQUFLNG5CLEtBQU9ub0IsSUFFbkY2b0IsY0FBZSxTQUFTRixFQUFJQyxFQUFJRSxFQUFJQyxFQUFJbHRCLEVBQUdtRSxHQUN6Q08sS0FBSytDLEdBQUssTUFBUXFsQixFQUFNLE1BQVFDLEVBQU0sTUFBUUUsRUFBTSxNQUFRQyxFQUFNLEtBQU94b0IsS0FBSzJuQixLQUFPcnNCLEdBQUssS0FBTzBFLEtBQUs0bkIsS0FBT25vQixJQUUvR2dwQixNQUFPLFNBQVNMLEVBQUlDLEVBQUlFLEVBQUlDLEVBQUl4TSxHQUM5Qm9NLEdBQU1BLEVBQUlDLEdBQU1BLEVBQUlFLEdBQU1BLEVBQUlDLEdBQU1BLEVBQUl4TSxHQUFLQSxFQUM3QyxJQUFJME0sRUFBSzFvQixLQUFLMm5CLElBQ1ZnQixFQUFLM29CLEtBQUs0bkIsSUFDVmdCLEVBQU1MLEVBQUtILEVBQ1hTLEVBQU1MLEVBQUtILEVBQ1hTLEVBQU1KLEVBQUtOLEVBQ1hXLEVBQU1KLEVBQUtOLEVBQ1hXLEVBQVFGLEVBQU1BLEVBQU1DLEVBQU1BLEVBRzlCLEdBQUkvTSxFQUFJLEVBQUcsTUFBTSxJQUFJelksTUFBTSxvQkFBc0J5WSxHQUdqRCxHQUFpQixPQUFiaGMsS0FBSzJuQixJQUNQM25CLEtBQUsrQyxHQUFLLEtBQU8vQyxLQUFLMm5CLElBQU1TLEdBQU0sS0FBT3BvQixLQUFLNG5CLElBQU1TLFFBSWpELEdBQU1XLEVBcERELEtBeURMLEdBQU01c0IsS0FBS2lCLElBQUkwckIsRUFBTUgsRUFBTUMsRUFBTUMsR0F6RDVCLE1BeURnRDlNLEVBS3JELENBQ0gsSUFBSWlOLEVBQU1WLEVBQUtHLEVBQ1hRLEVBQU1WLEVBQUtHLEVBQ1hRLEVBQVFQLEVBQU1BLEVBQU1DLEVBQU1BLEVBQzFCTyxFQUFRSCxFQUFNQSxFQUFNQyxFQUFNQSxFQUMxQkcsRUFBTWp0QixLQUFLQyxLQUFLOHNCLEdBQ2hCRyxFQUFNbHRCLEtBQUtDLEtBQUsyc0IsR0FDaEJ4TixFQUFJUSxFQUFJNWYsS0FBS21lLEtBQUs4TSxHQUFLanJCLEtBQUttdEIsTUFBTUosRUFBUUgsRUFBUUksSUFBVSxFQUFJQyxFQUFNQyxLQUFTLEdBQy9FRSxFQUFNaE8sRUFBSThOLEVBQ1ZHLEVBQU1qTyxFQUFJNk4sRUFHVmp0QixLQUFLaUIsSUFBSW1zQixFQUFNLEdBMUVYLE9BMkVOeHBCLEtBQUsrQyxHQUFLLEtBQU9xbEIsRUFBS29CLEVBQU1WLEdBQU8sS0FBT1QsRUFBS21CLEVBQU1ULElBR3ZEL29CLEtBQUsrQyxHQUFLLElBQU1pWixFQUFJLElBQU1BLEVBQUksV0FBYStNLEVBQU1FLEVBQU1ILEVBQU1JLEdBQVEsS0FBT2xwQixLQUFLMm5CLElBQU1TLEVBQUtxQixFQUFNYixHQUFPLEtBQU81b0IsS0FBSzRuQixJQUFNUyxFQUFLb0IsRUFBTVosUUFwQnRJN29CLEtBQUsrQyxHQUFLLEtBQU8vQyxLQUFLMm5CLElBQU1TLEdBQU0sS0FBT3BvQixLQUFLNG5CLElBQU1TLFVBdUJ4RHFCLElBQUssU0FBU3B1QixFQUFHbUUsRUFBR3VjLEVBQUcyTixFQUFJQyxFQUFJQyxHQUM3QnZ1QixHQUFLQSxFQUFHbUUsR0FBS0EsRUFBV29xQixJQUFRQSxFQUNoQyxJQUFJQyxHQURZOU4sR0FBS0EsR0FDUjVmLEtBQUtpaUIsSUFBSXNMLEdBQ2xCSSxFQUFLL04sRUFBSTVmLEtBQUtraUIsSUFBSXFMLEdBQ2xCakIsRUFBS3B0QixFQUFJd3VCLEVBQ1RuQixFQUFLbHBCLEVBQUlzcUIsRUFDVEMsRUFBSyxFQUFJSCxFQUNUSSxFQUFLSixFQUFNRixFQUFLQyxFQUFLQSxFQUFLRCxFQUc5QixHQUFJM04sRUFBSSxFQUFHLE1BQU0sSUFBSXpZLE1BQU0sb0JBQXNCeVksR0FHaEMsT0FBYmhjLEtBQUsybkIsSUFDUDNuQixLQUFLK0MsR0FBSyxJQUFNMmxCLEVBQUssSUFBTUMsR0FJcEJ2c0IsS0FBS2lCLElBQUkyQyxLQUFLMm5CLElBQU1lLEdBbkduQixNQW1Hb0N0c0IsS0FBS2lCLElBQUkyQyxLQUFLNG5CLElBQU1lLEdBbkd4RCxRQW9HUjNvQixLQUFLK0MsR0FBSyxJQUFNMmxCLEVBQUssSUFBTUMsR0FJeEIzTSxJQUdEaU8sRUFBSyxJQUFHQSxFQUFLQSxFQUFLM0MsR0FBTUEsSUFHeEIyQyxFQUFLMUMsR0FDUHZuQixLQUFLK0MsR0FBSyxJQUFNaVosRUFBSSxJQUFNQSxFQUFJLFFBQVVnTyxFQUFLLEtBQU8xdUIsRUFBSXd1QixHQUFNLEtBQU9ycUIsRUFBSXNxQixHQUFNLElBQU0vTixFQUFJLElBQU1BLEVBQUksUUFBVWdPLEVBQUssS0FBT2hxQixLQUFLMm5CLElBQU1lLEdBQU0sS0FBTzFvQixLQUFLNG5CLElBQU1lLEdBSXJKc0IsRUFuSEMsT0FvSFJqcUIsS0FBSytDLEdBQUssSUFBTWlaLEVBQUksSUFBTUEsRUFBSSxTQUFXaU8sR0FBTTVDLElBQU8sSUFBTTJDLEVBQUssS0FBT2hxQixLQUFLMm5CLElBQU1yc0IsRUFBSTBnQixFQUFJNWYsS0FBS2lpQixJQUFJdUwsSUFBTyxLQUFPNXBCLEtBQUs0bkIsSUFBTW5vQixFQUFJdWMsRUFBSTVmLEtBQUtraUIsSUFBSXNMLE9BR2xKTSxLQUFNLFNBQVM1dUIsRUFBR21FLEVBQUcwcUIsRUFBRzFOLEdBQ3RCemMsS0FBSytDLEdBQUssS0FBTy9DLEtBQUt5bkIsSUFBTXpuQixLQUFLMm5CLEtBQU9yc0IsR0FBSyxLQUFPMEUsS0FBSzBuQixJQUFNMW5CLEtBQUs0bkIsS0FBT25vQixHQUFLLE1BQVEwcUIsRUFBSyxNQUFRMU4sRUFBSyxLQUFRME4sRUFBSyxLQUV6SDNOLFNBQVUsV0FDUixPQUFPeGMsS0FBSytDLElHNUhoQixJQ0NXcW5CLEdERFBDLEdBQUssMkVBRU0sU0FBU0MsR0FBZ0JDLEdBQ3RDLEtBQU0vYixFQUFRNmIsR0FBRzNPLEtBQUs2TyxJQUFhLE1BQU0sSUFBSWhuQixNQUFNLG1CQUFxQmduQixHQUN4RSxJQUFJL2IsRUFDSixPQUFPLElBQUlnYyxHQUFnQixDQUN6QkMsS0FBTWpjLEVBQU0sR0FDWmtjLE1BQU9sYyxFQUFNLEdBQ2JtYyxLQUFNbmMsRUFBTSxHQUNab2MsT0FBUXBjLEVBQU0sR0FDZCtULEtBQU0vVCxFQUFNLEdBQ1pxYyxNQUFPcmMsRUFBTSxHQUNic2MsTUFBT3RjLEVBQU0sR0FDYnVjLFVBQVd2YyxFQUFNLElBQU1BLEVBQU0sR0FBR25QLE1BQU0sR0FDdEN1RSxLQUFNNEssRUFBTSxHQUNadEssS0FBTXNLLEVBQU0sTUFNVCxTQUFTZ2MsR0FBZ0JELEdBQzlCdnFCLEtBQUt5cUIsVUFBMEJodEIsSUFBbkI4c0IsRUFBVUUsS0FBcUIsSUFBTUYsRUFBVUUsS0FBTyxHQUNsRXpxQixLQUFLMHFCLFdBQTRCanRCLElBQXBCOHNCLEVBQVVHLE1BQXNCLElBQU1ILEVBQVVHLE1BQVEsR0FDckUxcUIsS0FBSzJxQixVQUEwQmx0QixJQUFuQjhzQixFQUFVSSxLQUFxQixJQUFNSixFQUFVSSxLQUFPLEdBQ2xFM3FCLEtBQUs0cUIsWUFBOEJudEIsSUFBckI4c0IsRUFBVUssT0FBdUIsR0FBS0wsRUFBVUssT0FBUyxHQUN2RTVxQixLQUFLdWlCLE9BQVNnSSxFQUFVaEksS0FDeEJ2aUIsS0FBSzZxQixXQUE0QnB0QixJQUFwQjhzQixFQUFVTSxXQUFzQnB0QixHQUFhOHNCLEVBQVVNLE1BQ3BFN3FCLEtBQUs4cUIsUUFBVVAsRUFBVU8sTUFDekI5cUIsS0FBSytxQixlQUFvQ3R0QixJQUF4QjhzQixFQUFVUSxlQUEwQnR0QixHQUFhOHNCLEVBQVVRLFVBQzVFL3FCLEtBQUs0RCxPQUFTMm1CLEVBQVUzbUIsS0FDeEI1RCxLQUFLa0UsVUFBMEJ6RyxJQUFuQjhzQixFQUFVcm1CLEtBQXFCLEdBQUtxbUIsRUFBVXJtQixLQUFPLEdFOUJwRCxZQUFTNUksRUFBR21ELEdBQ3pCLElBQUk5QyxFQUFJa3NCLEdBQW1CdnNCLEVBQUdtRCxHQUM5QixJQUFLOUMsRUFBRyxPQUFPTCxFQUFJLEdBQ25CLElBQUl5c0IsRUFBY3BzQixFQUFFLEdBQ2hCcXZCLEVBQVdydkIsRUFBRSxHQUNqQixPQUFPcXZCLEVBQVcsRUFBSSxLQUFPLElBQUk3ckIsT0FBTzZyQixHQUFVN2QsS0FBSyxLQUFPNGEsRUFDeERBLEVBQVl0c0IsT0FBU3V2QixFQUFXLEVBQUlqRCxFQUFZMW9CLE1BQU0sRUFBRzJyQixFQUFXLEdBQUssSUFBTWpELEVBQVkxb0IsTUFBTTJyQixFQUFXLEdBQzVHakQsRUFBYyxJQUFJNW9CLE1BQU02ckIsRUFBV2pELEVBQVl0c0IsT0FBUyxHQUFHMFIsS0FBSyxLRld4RW1kLEdBQWdCaHJCLFVBQVlrckIsR0FBZ0JsckIsVUFlNUNrckIsR0FBZ0JsckIsVUFBVWtkLFNBQVcsV0FDbkMsT0FBT3hjLEtBQUt5cUIsS0FDTnpxQixLQUFLMHFCLE1BQ0wxcUIsS0FBSzJxQixLQUNMM3FCLEtBQUs0cUIsUUFDSjVxQixLQUFLdWlCLEtBQU8sSUFBTSxVQUNIOWtCLElBQWZ1QyxLQUFLNnFCLE1BQXNCLEdBQUt6dUIsS0FBS1EsSUFBSSxFQUFnQixFQUFib0QsS0FBSzZxQixTQUNqRDdxQixLQUFLOHFCLE1BQVEsSUFBTSxVQUNBcnRCLElBQW5CdUMsS0FBSytxQixVQUEwQixHQUFLLElBQU0zdUIsS0FBS1EsSUFBSSxFQUFvQixFQUFqQm9ELEtBQUsrcUIsYUFDM0QvcUIsS0FBSzRELEtBQU8sSUFBTSxJQUNuQjVELEtBQUtrRSxNR3pDYixPQUFlLENBQ2IsSUFBSyxDQUFDNUksRUFBR21ELEtBQVcsSUFBSm5ELEdBQVMydkIsUUFBUXhzQixHQUNqQ3pELEVBQU1NLEdBQU1jLEtBQUswRCxNQUFNeEUsR0FBR2toQixTQUFTLEdBQ25DcFksRUFBTTlJLEdBQU1BLEVBQUksR0FDaEJLLEVMUmEsU0FBU0wsR0FDdEIsT0FBT2MsS0FBS2lCLElBQUkvQixFQUFJYyxLQUFLMEQsTUFBTXhFLEtBQU8sS0FDaENBLEVBQUU0dkIsZUFBZSxNQUFNQyxRQUFRLEtBQU0sSUFDckM3dkIsRUFBRWtoQixTQUFTLEtLTWpCL2hCLEVBQUssQ0FBQ2EsRUFBR21ELElBQU1uRCxFQUFFd3NCLGNBQWNycEIsR0FDL0J2RCxFQUFLLENBQUNJLEVBQUdtRCxJQUFNbkQsRUFBRTJ2QixRQUFReHNCLEdBQ3pCd2QsRUFBSyxDQUFDM2dCLEVBQUdtRCxJQUFNbkQsRUFBRTh2QixZQUFZM3NCLEdBQzdCdU4sRUFBTTFRLEdBQU1jLEtBQUswRCxNQUFNeEUsR0FBR2toQixTQUFTLEdBQ25DL2QsRUFBSyxDQUFDbkQsRUFBR21ELElBQU00c0IsR0FBa0IsSUFBSi92QixFQUFTbUQsR0FDdEN1ZCxFQUFLcVAsR0FDTG50QixFRlhhLFNBQVM1QyxFQUFHbUQsR0FDekIsSUFBSTlDLEVBQUlrc0IsR0FBbUJ2c0IsRUFBR21ELEdBQzlCLElBQUs5QyxFQUFHLE9BQU9MLEVBQUksR0FDbkIsSUFBSXlzQixFQUFjcHNCLEVBQUUsR0FDaEJxdkIsRUFBV3J2QixFQUFFLEdBQ2JJLEVBQUlpdkIsR0FBWVosR0FBdUUsRUFBdERodUIsS0FBS1EsS0FBSyxFQUFHUixLQUFLdUIsSUFBSSxFQUFHdkIsS0FBS1UsTUFBTWt1QixFQUFXLE1BQVksRUFDNUZqdEIsRUFBSWdxQixFQUFZdHNCLE9BQ3BCLE9BQU9NLElBQU1nQyxFQUFJZ3FCLEVBQ1hoc0IsRUFBSWdDLEVBQUlncUIsRUFBYyxJQUFJNW9CLE1BQU1wRCxFQUFJZ0MsRUFBSSxHQUFHb1AsS0FBSyxLQUNoRHBSLEVBQUksRUFBSWdzQixFQUFZMW9CLE1BQU0sRUFBR3RELEdBQUssSUFBTWdzQixFQUFZMW9CLE1BQU10RCxHQUMxRCxLQUFPLElBQUlvRCxNQUFNLEVBQUlwRCxHQUFHb1IsS0FBSyxLQUFPMGEsR0FBbUJ2c0IsRUFBR2MsS0FBS1EsSUFBSSxFQUFHNkIsRUFBSTFDLEVBQUksSUFBSSxJRUV4RnV2QixFQUFNaHdCLEdBQU1jLEtBQUswRCxNQUFNeEUsR0FBR2toQixTQUFTLElBQUkrTyxjQUN2Q2p3QixFQUFNQSxHQUFNYyxLQUFLMEQsTUFBTXhFLEdBQUdraEIsU0FBUyxLQ2pCdEIsWUFBU2xoQixHQUN0QixPQUFPQSxFQ1FULElDUElrd0IsR0FDT3hxQixHQUNBeXFCLEdES1AzbkIsR0FBTTNFLE1BQU1HLFVBQVV3RSxJQUN0QjRuQixHQUFXLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxLQUVoRSxZQUFTRixHQUN0QixJRWJzQkcsRUFBVUMsRUZhNUJya0IsT0FBNEI5SixJQUFwQit0QixFQUFPRyxlQUErQ2x1QixJQUFyQit0QixFQUFPSSxVQUEwQjNxQixJRWJ4RDBxQixFRmErRTduQixHQUFJZCxLQUFLd29CLEVBQU9HLFNBQVVFLFFFYi9GRCxFRmF3R0osRUFBT0ksVUFBWSxHRVpwSixTQUFTdHhCLEVBQU91d0IsR0FPckIsSUFOQSxJQUFJOXVCLEVBQUl6QixFQUFNbUIsT0FDVjRDLEVBQUksR0FDSkMsRUFBSSxFQUNKMmQsRUFBSTBQLEVBQVMsR0FDYmx3QixFQUFTLEVBRU5NLEVBQUksR0FBS2tnQixFQUFJLElBQ2R4Z0IsRUFBU3dnQixFQUFJLEVBQUk0TyxJQUFPNU8sRUFBSTdmLEtBQUtRLElBQUksRUFBR2l1QixFQUFRcHZCLElBQ3BENEMsRUFBRW1HLEtBQUtsSyxFQUFNd3hCLFVBQVUvdkIsR0FBS2tnQixFQUFHbGdCLEVBQUlrZ0IsT0FDOUJ4Z0IsR0FBVXdnQixFQUFJLEdBQUs0TyxLQUN4QjVPLEVBQUkwUCxFQUFTcnRCLEdBQUtBLEVBQUksR0FBS3F0QixFQUFTbHdCLFFBR3RDLE9BQU80QyxFQUFFMHRCLFVBQVU1ZSxLQUFLeWUsS0ZEdEJJLE9BQXFDdnVCLElBQXBCK3RCLEVBQU9TLFNBQXlCLEdBQUtULEVBQU9TLFNBQVMsR0FBSyxHQUMzRUMsT0FBcUN6dUIsSUFBcEIrdEIsRUFBT1MsU0FBeUIsR0FBS1QsRUFBT1MsU0FBUyxHQUFLLEdBQzNFRSxPQUE2QjF1QixJQUFuQit0QixFQUFPVyxRQUF3QixJQUFNWCxFQUFPVyxRQUFVLEdBQ2hFQyxPQUErQjN1QixJQUFwQit0QixFQUFPWSxTQUF5Qm5yQixHR2pCbEMsU0FBU21yQixHQUN0QixPQUFPLFNBQVM5eEIsR0FDZCxPQUFPQSxFQUFNNndCLFFBQVEsVUFBVSxTQUFTcHZCLEdBQ3RDLE9BQU9xd0IsR0FBVXJ3QixPSGNxQ3N3QixDQUFldm9CLEdBQUlkLEtBQUt3b0IsRUFBT1ksU0FBVUUsU0FDL0ZDLE9BQTZCOXVCLElBQW5CK3RCLEVBQU9lLFFBQXdCLElBQU1mLEVBQU9lLFFBQVUsR0FDaEVDLE9BQXlCL3VCLElBQWpCK3RCLEVBQU9nQixNQUFzQixJQUFNaEIsRUFBT2dCLE1BQVEsR0FDMURDLE9BQXFCaHZCLElBQWYrdEIsRUFBT2lCLElBQW9CLE1BQVFqQixFQUFPaUIsSUFBTSxHQUUxRCxTQUFTQyxFQUFVbkMsR0FHakIsSUFBSUUsR0FGSkYsRUFBWUQsR0FBZ0JDLElBRVBFLEtBQ2pCQyxFQUFRSCxFQUFVRyxNQUNsQkMsRUFBT0osRUFBVUksS0FDakJDLEVBQVNMLEVBQVVLLE9BQ25CckksRUFBT2dJLEVBQVVoSSxLQUNqQnNJLEVBQVFOLEVBQVVNLE1BQ2xCQyxFQUFRUCxFQUFVTyxNQUNsQkMsRUFBWVIsRUFBVVEsVUFDdEJubkIsRUFBTzJtQixFQUFVM21CLEtBQ2pCTSxFQUFPcW1CLEVBQVVybUIsS0FHUixNQUFUQSxHQUFjNG1CLEdBQVEsRUFBTTVtQixFQUFPLEtBRzdCeW9CLEdBQVl6b0IsVUFBcUJ6RyxJQUFkc3RCLElBQTRCQSxFQUFZLElBQUtubkIsR0FBTyxFQUFNTSxFQUFPLE1BRzFGcWUsR0FBa0IsTUFBVGtJLEdBQTBCLE1BQVZDLEtBQWdCbkksR0FBTyxFQUFNa0ksRUFBTyxJQUFLQyxFQUFRLEtBSTlFLElBQUl0bEIsRUFBb0IsTUFBWHdsQixFQUFpQm9CLEVBQTRCLE1BQVhwQixHQUFrQixTQUFTdG5CLEtBQUtZLEdBQVEsSUFBTUEsRUFBS3VYLGNBQWdCLEdBQzlHbVIsRUFBb0IsTUFBWGhDLEVBQWlCc0IsRUFBaUIsT0FBTzVvQixLQUFLWSxHQUFRcW9CLEVBQVUsR0FLekVNLEVBQWFGLEdBQVl6b0IsR0FDekI0b0IsRUFBYyxhQUFheHBCLEtBQUtZLEdBVXBDLFNBQVNsRCxFQUFPMUcsR0FDZCxJQUVJeUIsRUFBR2dDLEVBQUdxRyxFQUZOMm9CLEVBQWMzbkIsRUFDZDRuQixFQUFjSixFQUdsQixHQUFhLE1BQVQxb0IsRUFDRjhvQixFQUFjSCxFQUFXdnlCLEdBQVMweUIsRUFDbEMxeUIsRUFBUSxPQUNILENBSUwsSUFBSTJ5QixHQUhKM3lCLEdBQVNBLEdBR21CLEdBQUssRUFBSUEsRUFBUSxFQWlCN0MsR0FkQUEsRUFBUWlpQixNQUFNamlCLEdBQVNteUIsRUFBTUksRUFBV3p3QixLQUFLaUIsSUFBSS9DLEdBQVF5d0IsR0FHckRubkIsSUFBTXRKLEVJakZILFNBQVM0RCxHQUN0Qmd2QixFQUFLLElBQUssSUFBa0MvZCxFQUE5QnBSLEVBQUlHLEVBQUV6QyxPQUFRTSxFQUFJLEVBQUc4QyxHQUFNLEVBQU85QyxFQUFJZ0MsSUFBS2hDLEVBQ3ZELE9BQVFtQyxFQUFFbkMsSUFDUixJQUFLLElBQUs4QyxFQUFLc1EsRUFBS3BULEVBQUcsTUFDdkIsSUFBSyxJQUFnQixJQUFQOEMsSUFBVUEsRUFBSzlDLEdBQUdvVCxFQUFLcFQsRUFBRyxNQUN4QyxRQUFTLEtBQU1tQyxFQUFFbkMsR0FBSSxNQUFNbXhCLEVBQVNydUIsRUFBSyxJQUFHQSxFQUFLLEdBR3JELE9BQU9BLEVBQUssRUFBSVgsRUFBRW1CLE1BQU0sRUFBR1IsR0FBTVgsRUFBRW1CLE1BQU04UCxFQUFLLEdBQUtqUixFSnlFM0JpdkIsQ0FBVzd5QixJQUd6QjJ5QixHQUE0QixJQUFWM3lCLEdBQXdCLE1BQVRxd0IsSUFBY3NDLEdBQWdCLEdBR25FRixHQUFlRSxFQUEwQixNQUFUdEMsRUFBZUEsRUFBTzZCLEVBQWtCLE1BQVQ3QixHQUF5QixNQUFUQSxFQUFlLEdBQUtBLEdBQVFvQyxFQUMzR0MsR0FBd0IsTUFBVDlvQixFQUFld25CLEdBQVMsRUFBSXRCLEdBQWlCLEdBQUssSUFBTTRDLEdBQWVDLEdBQTBCLE1BQVR0QyxFQUFlLElBQU0sSUFJeEhtQyxFQUVGLElBREEvd0IsR0FBSyxFQUFHZ0MsRUFBSXpELEVBQU1tQixTQUNUTSxFQUFJZ0MsR0FDWCxHQUE2QixJQUF6QnFHLEVBQUk5SixFQUFNOHlCLFdBQVdyeEIsS0FBY3FJLEVBQUksR0FBSSxDQUM3QzRvQixHQUFxQixLQUFONW9CLEVBQVcrbkIsRUFBVTd4QixFQUFNK0UsTUFBTXRELEVBQUksR0FBS3pCLEVBQU0rRSxNQUFNdEQsSUFBTWl4QixFQUMzRTF5QixFQUFRQSxFQUFNK0UsTUFBTSxFQUFHdEQsR0FDdkIsT0FPSit1QixJQUFVdkksSUFBTWpvQixFQUFRaU4sRUFBTWpOLEVBQU8wbEIsRUFBQUEsSUFHekMsSUFBSXZrQixFQUFTc3hCLEVBQVl0eEIsT0FBU25CLEVBQU1tQixPQUFTdXhCLEVBQVl2eEIsT0FDekQ0eEIsRUFBVTV4QixFQUFTb3ZCLEVBQVEsSUFBSTFyQixNQUFNMHJCLEVBQVFwdkIsRUFBUyxHQUFHMFIsS0FBS3NkLEdBQVEsR0FNMUUsT0FISUssR0FBU3ZJLElBQU1qb0IsRUFBUWlOLEVBQU04bEIsRUFBVS95QixFQUFPK3lCLEVBQVE1eEIsT0FBU292QixFQUFRbUMsRUFBWXZ4QixPQUFTdWtCLEVBQUFBLEdBQVdxTixFQUFVLElBRzdHM0MsR0FDTixJQUFLLElBQUtwd0IsRUFBUXl5QixFQUFjenlCLEVBQVEweUIsRUFBY0ssRUFBUyxNQUMvRCxJQUFLLElBQUsveUIsRUFBUXl5QixFQUFjTSxFQUFVL3lCLEVBQVEweUIsRUFBYSxNQUMvRCxJQUFLLElBQUsxeUIsRUFBUSt5QixFQUFRaHVCLE1BQU0sRUFBRzVELEVBQVM0eEIsRUFBUTV4QixRQUFVLEdBQUtzeEIsRUFBY3p5QixFQUFRMHlCLEVBQWNLLEVBQVFodUIsTUFBTTVELEdBQVMsTUFDOUgsUUFBU25CLEVBQVEreUIsRUFBVU4sRUFBY3p5QixFQUFRMHlCLEVBR25ELE9BQU9aLEVBQVM5eEIsR0FPbEIsT0F0RUF5d0IsT0FBMEJ0dEIsSUFBZHN0QixFQUEwQixFQUNoQyxTQUFTem5CLEtBQUtZLEdBQVE5SCxLQUFLUSxJQUFJLEVBQUdSLEtBQUt1QixJQUFJLEdBQUlvdEIsSUFDL0MzdUIsS0FBS1EsSUFBSSxFQUFHUixLQUFLdUIsSUFBSSxHQUFJb3RCLElBZ0UvQi9wQixFQUFPd2IsU0FBVyxXQUNoQixPQUFPK04sRUFBWSxJQUdkdnBCLEVBYVQsTUFBTyxDQUNMQSxPQUFRMHJCLEVBQ1JqQixhQVpGLFNBQXNCbEIsRUFBV2p3QixHQUMvQixJQUFJWSxFQUFJd3hCLElBQVduQyxFQUFZRCxHQUFnQkMsSUFBc0JybUIsS0FBTyxJQUFLcW1CLElBQzdFOXZCLEVBQWlFLEVBQTdEMkIsS0FBS1EsS0FBSyxFQUFHUixLQUFLdUIsSUFBSSxFQUFHdkIsS0FBS1UsTUFBTWt1QixHQUFTMXdCLEdBQVMsS0FDMUR3RCxFQUFJMUIsS0FBS2MsSUFBSSxJQUFLekMsR0FDbEIySyxFQUFTc21CLEdBQVMsRUFBSWp4QixFQUFJLEdBQzlCLE9BQU8sU0FBU0gsR0FDZCxPQUFPWSxFQUFFNEMsRUFBSXhELEdBQVM4SyxLQzlIMUJvbUIsR0FBUzhCLEdBUEcsQ0FDWjFCLFVBQVcsSUFDWEQsU0FBVSxDQUFDLEdBQ1hNLFNBQVUsQ0FBQyxJQUFLLE1BS2hCanJCLEdBQVN3cUIsR0FBT3hxQixPQUNoQnlxQixHQUFlRCxHQUFPQyxhSVVULFNBQVNsSyxHQUFReG1CLEVBQUdDLEdBQ2pDLElBQUlXLEVBQUlYLEVBQUlELEVBQ1osT0FBT1ksRUF6QlQsU0FBZ0JaLEVBQUdZLEdBQ2pCLE9BQU8sU0FBUzBDLEdBQ2QsT0FBT3RELEVBQUlzRCxFQUFJMUMsR0F1Qk44bEIsQ0FBTzFtQixFQUFHWSxHQzNCUkwsQ0FBQUEsR0FBSyxJQUFNQSxFRDJCRXdULENBQVN5TixNQUFNeGhCLEdBQUtDLEVBQUlELEdFeEJyQyxTQUFTaWpCLEdBQUl2aEIsRUFBT2tsQixHQUNqQyxJQUFJbkcsRUFBSUQsSUFBTzllLEVBQVE4d0IsR0FBUzl3QixJQUFRK2UsR0FBSW1HLEVBQU00TCxHQUFTNUwsSUFBTW5HLEdBQzdEemdCLEVBQUl3Z0IsR0FBTTllLEVBQU0xQixFQUFHNG1CLEVBQUk1bUIsR0FDdkJDLEVBQUl1Z0IsR0FBTTllLEVBQU16QixFQUFHMm1CLEVBQUkzbUIsR0FDdkJtaEIsRUFBVVosR0FBTTllLEVBQU0wZixRQUFTd0YsRUFBSXhGLFNBQ3ZDLE9BQU8sU0FBUzlkLEdBS2QsT0FKQTVCLEVBQU0rZSxFQUFJQSxFQUFFbmQsR0FDWjVCLEVBQU0xQixFQUFJQSxFQUFFc0QsR0FDWjVCLEVBQU16QixFQUFJQSxFQUFFcUQsR0FDWjVCLEVBQU0wZixRQUFVQSxFQUFROWQsR0FDakI1QixFQUFRLElDYlosU0FBUyt3QixHQUFVenNCLEVBQVE3QixHQUNoQyxPQUFRRixVQUFVdkQsUUFDaEIsS0FBSyxFQUFHLE1BQ1IsS0FBSyxFQUFHdUUsS0FBS2QsTUFBTTZCLEdBQVMsTUFDNUIsUUFBU2YsS0FBS2QsTUFBTUEsR0FBTzZCLE9BQU9BLEdBRXBDLE9BQU9mLEtDSkYsTUFBTXl0QixHQUFXMWMsT0FBTyxZQUVoQixTQUFTMmMsS0FDdEIsSUFBSWh3QixFQUFRLElBQUlvSyxJQUNaL0csRUFBUyxHQUNUN0IsRUFBUSxHQUNSeXVCLEVBQVVGLEdBRWQsU0FBUzl0QixFQUFNaEUsR0FDYixJQUFJZ00sRUFBTWhNLEVBQUksR0FBSUksRUFBSTJCLEVBQU15RyxJQUFJd0QsR0FDaEMsSUFBSzVMLEVBQUcsQ0FDTixHQUFJNHhCLElBQVlGLEdBQVUsT0FBT0UsRUFDakNqd0IsRUFBTTJHLElBQUlzRCxFQUFLNUwsRUFBSWdGLEVBQU95RCxLQUFLN0ksSUFFakMsT0FBT3VELEdBQU9uRCxFQUFJLEdBQUttRCxFQUFNekQsUUE0Qi9CLE9BekJBa0UsRUFBTW9CLE9BQVMsU0FBU2dDLEdBQ3RCLElBQUsvRCxVQUFVdkQsT0FBUSxPQUFPc0YsRUFBTzFCLFFBQ3JDMEIsRUFBUyxHQUFJckQsRUFBUSxJQUFJb0ssSUFDekIsSUFBSyxNQUFNeE4sS0FBU3lJLEVBQUcsQ0FDckIsTUFBTTRFLEVBQU1yTixFQUFRLEdBQ2hCb0QsRUFBTXNLLElBQUlMLElBQ2RqSyxFQUFNMkcsSUFBSXNELEVBQUs1RyxFQUFPeUQsS0FBS2xLLElBRTdCLE9BQU9xRixHQUdUQSxFQUFNVCxNQUFRLFNBQVM2RCxHQUNyQixPQUFPL0QsVUFBVXZELFFBQVV5RCxFQUFRQyxNQUFNUixLQUFLb0UsR0FBSXBELEdBQVNULEVBQU1HLFNBR25FTSxFQUFNZ3VCLFFBQVUsU0FBUzVxQixHQUN2QixPQUFPL0QsVUFBVXZELFFBQVVreUIsRUFBVTVxQixFQUFHcEQsR0FBU2d1QixHQUduRGh1QixFQUFNMkIsS0FBTyxXQUNYLE9BQU9vc0IsR0FBUTNzQixFQUFRN0IsR0FBT3l1QixRQUFRQSxJQUd4Q0gsR0FBVTF5QixNQUFNNkUsRUFBT1gsV0FFaEJXLEVDNUNULE9BQWVyRSxHQUFLLElBQU1BLEVDbUJuQixTQUFTZ21CLEdBQU03aEIsR0FDcEIsT0FBb0IsSUFBWkEsR0FBS0EsR0FBVzhoQixHQUFVLFNBQVN4bUIsRUFBR0MsR0FDNUMsT0FBT0EsRUFBSUQsRUFiZixTQUFxQkEsRUFBR0MsRUFBR3lFLEdBQ3pCLE9BQU8xRSxFQUFJcUIsS0FBS2MsSUFBSW5DLEVBQUcwRSxHQUFJekUsRUFBSW9CLEtBQUtjLElBQUlsQyxFQUFHeUUsR0FBSzFFLEVBQUcwRSxFQUFJLEVBQUlBLEVBQUcsU0FBU3BCLEdBQ3JFLE9BQU9qQyxLQUFLYyxJQUFJbkMsRUFBSXNELEVBQUlyRCxFQUFHeUUsSUFXWitoQixDQUFZem1CLEVBQUdDLEVBQUd5RSxHQUFLcVAsR0FBU3lOLE1BQU14aEIsR0FBS0MsRUFBSUQsSUFJbkQsU0FBU3dtQixHQUFReG1CLEVBQUdDLEdBQ2pDLElBQUlXLEVBQUlYLEVBQUlELEVBQ1osT0FBT1ksRUF6QlQsU0FBZ0JaLEVBQUdZLEdBQ2pCLE9BQU8sU0FBUzBDLEdBQ2QsT0FBT3RELEVBQUlzRCxFQUFJMUMsR0F1Qk44bEIsQ0FBTzFtQixFQUFHWSxHQUFLbVQsR0FBU3lOLE1BQU14aEIsR0FBS0MsRUFBSUQsR0N0QnBELE9BQWUsU0FBVTJtQixFQUFTamlCLEdBQ2hDLElBQUk4YixFQUFRK0YsR0FBTTdoQixHQUVsQixTQUFTMGIsRUFBSTFlLEVBQU9rbEIsR0FDbEIsSUFBSTNGLEVBQUlULEdBQU85ZSxFQUFRbWxCLEdBQVNubEIsSUFBUXVmLEdBQUkyRixFQUFNQyxHQUFTRCxJQUFNM0YsR0FDN0RDLEVBQUlWLEVBQU05ZSxFQUFNd2YsRUFBRzBGLEVBQUkxRixHQUN2QmpoQixFQUFJdWdCLEVBQU05ZSxFQUFNekIsRUFBRzJtQixFQUFJM21CLEdBQ3ZCbWhCLEVBQVVvRixHQUFROWtCLEVBQU0wZixRQUFTd0YsRUFBSXhGLFNBQ3pDLE9BQU8sU0FBUzlkLEdBS2QsT0FKQTVCLEVBQU11ZixFQUFJQSxFQUFFM2QsR0FDWjVCLEVBQU13ZixFQUFJQSxFQUFFNWQsR0FDWjVCLEVBQU16QixFQUFJQSxFQUFFcUQsR0FDWjVCLEVBQU0wZixRQUFVQSxFQUFROWQsR0FDakI1QixFQUFRLElBTW5CLE9BRkEwZSxFQUFJbUcsTUFBUUksRUFFTHZHLEVBbkJNLENBb0JaLEdDekJZLFlBQVNwZ0IsRUFBR0MsR0FDcEJBLElBQUdBLEVBQUksSUFDWixJQUVJZSxFQUZBZ0MsRUFBSWhELEVBQUlxQixLQUFLdUIsSUFBSTNDLEVBQUVTLE9BQVFWLEVBQUVVLFFBQVUsRUFDdkMySSxFQUFJcEosRUFBRXFFLFFBRVYsT0FBTyxTQUFTaEIsR0FDZCxJQUFLdEMsRUFBSSxFQUFHQSxFQUFJZ0MsSUFBS2hDLEVBQUdxSSxFQUFFckksR0FBS2hCLEVBQUVnQixJQUFNLEVBQUlzQyxHQUFLckQsRUFBRWUsR0FBS3NDLEVBQ3ZELE9BQU8rRixHQ0FKLFNBQVN3cEIsR0FBYTd5QixFQUFHQyxHQUM5QixJQUlJZSxFQUpBOHhCLEVBQUs3eUIsRUFBSUEsRUFBRVMsT0FBUyxFQUNwQnF5QixFQUFLL3lCLEVBQUlxQixLQUFLdUIsSUFBSWt3QixFQUFJOXlCLEVBQUVVLFFBQVUsRUFDbENILEVBQUksSUFBSTZELE1BQU0ydUIsR0FDZDFwQixFQUFJLElBQUlqRixNQUFNMHVCLEdBR2xCLElBQUs5eEIsRUFBSSxFQUFHQSxFQUFJK3hCLElBQU0veEIsRUFBR1QsRUFBRVMsR0FBS3pCLEdBQU1TLEVBQUVnQixHQUFJZixFQUFFZSxJQUM5QyxLQUFPQSxFQUFJOHhCLElBQU05eEIsRUFBR3FJLEVBQUVySSxHQUFLZixFQUFFZSxHQUU3QixPQUFPLFNBQVNzQyxHQUNkLElBQUt0QyxFQUFJLEVBQUdBLEVBQUkreEIsSUFBTS94QixFQUFHcUksRUFBRXJJLEdBQUtULEVBQUVTLEdBQUdzQyxHQUNyQyxPQUFPK0YsR0NuQkksWUFBU3JKLEVBQUdDLEdBQ3pCLElBQUlXLEVBQUksSUFBSXVqQixLQUNaLE9BQU9ua0IsR0FBS0EsRUFBR0MsR0FBS0EsRUFBRyxTQUFTcUQsR0FDOUIsT0FBTzFDLEVBQUVveUIsUUFBUWh6QixHQUFLLEVBQUlzRCxHQUFLckQsRUFBSXFELEdBQUkxQyxHQ0g1QixZQUFTWixFQUFHQyxHQUN6QixPQUFPRCxHQUFLQSxFQUFHQyxHQUFLQSxFQUFHLFNBQVNxRCxHQUM5QixPQUFPdEQsR0FBSyxFQUFJc0QsR0FBS3JELEVBQUlxRCxHQ0FkLFlBQVN0RCxFQUFHQyxHQUN6QixJQUVJOEMsRUFGQS9CLEVBQUksR0FDSnFJLEVBQUksR0FNUixJQUFLdEcsS0FISyxPQUFOL0MsR0FBMkIsaUJBQU5BLElBQWdCQSxFQUFJLElBQ25DLE9BQU5DLEdBQTJCLGlCQUFOQSxJQUFnQkEsRUFBSSxJQUVuQ0EsRUFDSjhDLEtBQUsvQyxFQUNQZ0IsRUFBRStCLEdBQUt4RCxHQUFNUyxFQUFFK0MsR0FBSTlDLEVBQUU4QyxJQUVyQnNHLEVBQUV0RyxHQUFLOUMsRUFBRThDLEdBSWIsT0FBTyxTQUFTTyxHQUNkLElBQUtQLEtBQUsvQixFQUFHcUksRUFBRXRHLEdBQUsvQixFQUFFK0IsR0FBR08sR0FDekIsT0FBTytGLEdDbEJYLElBQUl5ZCxHQUFNLDhDQUNOQyxHQUFNLElBQUl2USxPQUFPc1EsR0FBSUUsT0FBUSxLQWNsQixZQUFTaG5CLEVBQUdDLEdBQ3pCLElBQ0lnbkIsRUFDQUMsRUFDQUMsRUFIQUMsRUFBS04sR0FBSU8sVUFBWU4sR0FBSU0sVUFBWSxFQUlyQ3JtQixHQUFLLEVBQ0xtQyxFQUFJLEdBQ0pta0IsRUFBSSxHQU1SLElBSEF0bkIsR0FBUSxHQUFJQyxHQUFRLElBR1pnbkIsRUFBS0gsR0FBSW5HLEtBQUszZ0IsTUFDZGtuQixFQUFLSCxHQUFJcEcsS0FBSzFnQixNQUNma25CLEVBQUtELEVBQUd2a0IsT0FBU3lrQixJQUNwQkQsRUFBS2xuQixFQUFFcUUsTUFBTThpQixFQUFJRCxHQUNiaGtCLEVBQUVuQyxHQUFJbUMsRUFBRW5DLElBQU1tbUIsRUFDYmhrQixJQUFJbkMsR0FBS21tQixJQUVYRixFQUFLQSxFQUFHLE9BQVNDLEVBQUtBLEVBQUcsSUFDeEIvakIsRUFBRW5DLEdBQUltQyxFQUFFbkMsSUFBTWttQixFQUNiL2pCLElBQUluQyxHQUFLa21CLEdBRWQvakIsSUFBSW5DLEdBQUssS0FDVHNtQixFQUFFN2QsS0FBSyxDQUFDekksRUFBR0EsRUFBR1QsRUFBR29FLEdBQU9zaUIsRUFBSUMsTUFFOUJFLEVBQUtMLEdBQUlNLFVBWVgsT0FSSUQsRUFBS25uQixFQUFFUyxTQUNUeW1CLEVBQUtsbkIsRUFBRXFFLE1BQU04aUIsR0FDVGprQixFQUFFbkMsR0FBSW1DLEVBQUVuQyxJQUFNbW1CLEVBQ2Joa0IsSUFBSW5DLEdBQUttbUIsR0FLVGhrQixFQUFFekMsT0FBUyxFQUFLNG1CLEVBQUUsR0E3QzNCLFNBQWFybkIsR0FDWCxPQUFPLFNBQVNxRCxHQUNkLE9BQU9yRCxFQUFFcUQsR0FBSyxJQTRDVmlrQixDQUFJRCxFQUFFLEdBQUcvbUIsR0FwRGpCLFNBQWNOLEdBQ1osT0FBTyxXQUNMLE9BQU9BLEdBbURIdW5CLENBQUt2bkIsSUFDSkEsRUFBSXFuQixFQUFFNW1CLE9BQVEsU0FBUzRDLEdBQ3RCLElBQUssSUFBVzJOLEVBQVBqUSxFQUFJLEVBQU1BLEVBQUlmLElBQUtlLEVBQUdtQyxHQUFHOE4sRUFBSXFXLEVBQUV0bUIsSUFBSUEsR0FBS2lRLEVBQUUxUSxFQUFFK0MsR0FDckQsT0FBT0gsRUFBRWlQLEtBQUssTUNuRFQsWUFBU3BTLEVBQUdDLEdBQ3pCLElBQWtCb0osRUFBZC9GLFNBQVdyRCxFQUNmLE9BQVksTUFBTEEsR0FBbUIsWUFBTnFELEVBQWtCeVEsR0FBUzlULElBQ2xDLFdBQU5xRCxFQUFpQnFCLEdBQ1osV0FBTnJCLEdBQW1CK0YsRUFBSW1YLEdBQU12Z0IsS0FBT0EsRUFBSW9KLEVBQUcrVyxJQUFPdlIsR0FDbEQ1TyxhQUFhdWdCLEdBQVFKLEdBQ3JCbmdCLGFBQWFra0IsS0FBTzhPLEdOTHJCLFNBQXVCMXlCLEdBQzVCLE9BQU8yeUIsWUFBWUMsT0FBTzV5QixNQUFRQSxhQUFhNnlCLFVNS3pDQyxDQUFjcHpCLEdBQUtxekIsR0FDbkJsdkIsTUFBTW12QixRQUFRdHpCLEdBQUs0eUIsR0FDRSxtQkFBZDV5QixFQUFFdXpCLFNBQWdELG1CQUFmdnpCLEVBQUV3aEIsVUFBMkJELE1BQU12aEIsR0FBS3d6QixHQUNsRjl1QixJQUFRM0UsRUFBR0MsR0NwQkosWUFBU0QsRUFBR0MsR0FDekIsT0FBT0QsR0FBS0EsRUFBR0MsR0FBS0EsRUFBRyxTQUFTcUQsR0FDOUIsT0FBT2pDLEtBQUswRCxNQUFNL0UsR0FBSyxFQUFJc0QsR0FBS3JELEVBQUlxRCxJQ0Z6QixTQUFTcUIsR0FBT3BFLEdBQzdCLE9BQVFBLEVDSVYsSUFBSW16QixHQUFPLENBQUMsRUFBRyxHQUVSLFNBQVN4dEIsR0FBUzNGLEdBQ3ZCLE9BQU9BLEVBR1QsU0FBU296QixHQUFVM3pCLEVBQUdDLEdBQ3BCLE9BQVFBLEdBQU1ELEdBQUtBLEdBQ2IsU0FBU08sR0FBSyxPQUFRQSxFQUFJUCxHQUFLQyxHQ2J4QixTQUFtQk0sR0FDaEMsT0FBTyxXQUNMLE9BQU9BLEdEWUh3VCxDQUFTeU4sTUFBTXZoQixHQUFLQyxJQUFNLElBV2xDLFNBQVMwekIsR0FBTTV0QixFQUFRN0IsRUFBT3lsQixHQUM1QixJQUFJaUssRUFBSzd0QixFQUFPLEdBQUk4dEIsRUFBSzl0QixFQUFPLEdBQUkrdEIsRUFBSzV2QixFQUFNLEdBQUk2dkIsRUFBSzd2QixFQUFNLEdBRzlELE9BRkkydkIsRUFBS0QsR0FBSUEsRUFBS0YsR0FBVUcsRUFBSUQsR0FBS0UsRUFBS25LLEVBQVlvSyxFQUFJRCxLQUNyREYsRUFBS0YsR0FBVUUsRUFBSUMsR0FBS0MsRUFBS25LLEVBQVltSyxFQUFJQyxJQUMzQyxTQUFTenpCLEdBQUssT0FBT3d6QixFQUFHRixFQUFHdHpCLEtBR3BDLFNBQVMwekIsR0FBUWp1QixFQUFRN0IsRUFBT3lsQixHQUM5QixJQUFJcm1CLEVBQUlsQyxLQUFLdUIsSUFBSW9ELEVBQU90RixPQUFReUQsRUFBTXpELFFBQVUsRUFDNUNFLEVBQUksSUFBSXdELE1BQU1iLEdBQ2QwZCxFQUFJLElBQUk3YyxNQUFNYixHQUNkdkMsR0FBSyxFQVFULElBTElnRixFQUFPekMsR0FBS3lDLEVBQU8sS0FDckJBLEVBQVNBLEVBQU8xQixRQUFRMHNCLFVBQ3hCN3NCLEVBQVFBLEVBQU1HLFFBQVEwc0IsYUFHZmh3QixFQUFJdUMsR0FDWDNDLEVBQUVJLEdBQUsyeUIsR0FBVTN0QixFQUFPaEYsR0FBSWdGLEVBQU9oRixFQUFJLElBQ3ZDaWdCLEVBQUVqZ0IsR0FBSzRvQixFQUFZemxCLEVBQU1uRCxHQUFJbUQsRUFBTW5ELEVBQUksSUFHekMsT0FBTyxTQUFTVCxHQUNkLElBQUlTLEVBQUlrekIsRUFBT2x1QixFQUFRekYsRUFBRyxFQUFHZ0QsR0FBSyxFQUNsQyxPQUFPMGQsRUFBRWpnQixHQUFHSixFQUFFSSxHQUFHVCxLQUlkLFNBQVNnRyxHQUFLeWdCLEVBQVFtTixHQUMzQixPQUFPQSxFQUNGbnVCLE9BQU9naEIsRUFBT2hoQixVQUNkN0IsTUFBTTZpQixFQUFPN2lCLFNBQ2J5bEIsWUFBWTVDLEVBQU80QyxlQUNuQndLLE1BQU1wTixFQUFPb04sU0FDYnhCLFFBQVE1TCxFQUFPNEwsV0FHZixTQUFTeUIsS0FDZCxJQUdJeHVCLEVBQ0F5dUIsRUFDQTFCLEVBRUEyQixFQUNBQyxFQUNBQyxFQVRBenVCLEVBQVMwdEIsR0FDVHZ2QixFQUFRdXZCLEdBQ1I5SixFQUFjOEssR0FJZE4sRUFBUWx1QixHQUtaLFNBQVN5dUIsSUFDUCxJQTVEYTMwQixFQUFHQyxFQUNkcUQsRUEyREVOLEVBQUkzQixLQUFLdUIsSUFBSW9ELEVBQU90RixPQUFReUQsRUFBTXpELFFBSXRDLE9BSEkwekIsSUFBVWx1QixLQTdERGxHLEVBNkQyQmdHLEVBQU8sR0E3RC9CL0YsRUE2RG1DK0YsRUFBT2hELEVBQUksR0EzRDVEaEQsRUFBSUMsSUFBR3FELEVBQUl0RCxFQUFHQSxFQUFJQyxFQUFHQSxFQUFJcUQsR0EyREg4d0IsRUExRG5CLFNBQVM3ekIsR0FBSyxPQUFPYyxLQUFLUSxJQUFJN0IsRUFBR3FCLEtBQUt1QixJQUFJM0MsRUFBR00sTUEyRGxEZzBCLEVBQVl2eEIsRUFBSSxFQUFJaXhCLEdBQVVMLEdBQzlCWSxFQUFTQyxFQUFRLEtBQ1Y3dkIsRUFHVCxTQUFTQSxFQUFNckUsR0FDYixPQUFZLE1BQUxBLEdBQWFpaEIsTUFBTWpoQixHQUFLQSxHQUFLcXlCLEdBQVc0QixJQUFXQSxFQUFTRCxFQUFVdnVCLEVBQU8rQyxJQUFJbEQsR0FBWTFCLEVBQU95bEIsS0FBZS9qQixFQUFVdXVCLEVBQU03ekIsS0ErQjVJLE9BNUJBcUUsRUFBTWd3QixPQUFTLFNBQVNsd0IsR0FDdEIsT0FBTzB2QixFQUFNRSxHQUFhRyxJQUFVQSxFQUFRRixFQUFVcHdCLEVBQU82QixFQUFPK0MsSUFBSWxELEdBQVk0akIsTUFBcUIva0IsTUFHM0dFLEVBQU1vQixPQUFTLFNBQVNnQyxHQUN0QixPQUFPL0QsVUFBVXZELFFBQVVzRixFQUFTNUIsTUFBTVIsS0FBS29FLEVBQUdyRCxJQUFTZ3dCLEtBQWEzdUIsRUFBTzFCLFNBR2pGTSxFQUFNVCxNQUFRLFNBQVM2RCxHQUNyQixPQUFPL0QsVUFBVXZELFFBQVV5RCxFQUFRQyxNQUFNUixLQUFLb0UsR0FBSTJzQixLQUFheHdCLEVBQU1HLFNBR3ZFTSxFQUFNaXdCLFdBQWEsU0FBUzdzQixHQUMxQixPQUFPN0QsRUFBUUMsTUFBTVIsS0FBS29FLEdBQUk0aEIsRUFBY2tMLEdBQWtCSCxLQUdoRS92QixFQUFNd3ZCLE1BQVEsU0FBU3BzQixHQUNyQixPQUFPL0QsVUFBVXZELFFBQVUwekIsSUFBUXBzQixHQUFXOUIsR0FBVXl1QixLQUFhUCxJQUFVbHVCLElBR2pGdEIsRUFBTWdsQixZQUFjLFNBQVM1aEIsR0FDM0IsT0FBTy9ELFVBQVV2RCxRQUFVa3BCLEVBQWM1aEIsRUFBRzJzQixLQUFhL0ssR0FHM0RobEIsRUFBTWd1QixRQUFVLFNBQVM1cUIsR0FDdkIsT0FBTy9ELFVBQVV2RCxRQUFVa3lCLEVBQVU1cUIsRUFBR3BELEdBQVNndUIsR0FHNUMsU0FBU3R2QixFQUFHeXhCLEdBRWpCLE9BREFsdkIsRUFBWXZDLEVBQUdneEIsRUFBY1MsRUFDdEJKLEtBSUksU0FBU0ssS0FDdEIsT0FBT1gsSUFBQUEsQ0FBY251QixHQUFVQSxJRXhIbEIsU0FBU1gsR0FBVzdELEVBQU9DLEVBQU1DLEVBQU80dEIsR0FDckQsSUFDSVEsRUFEQXh3QixFQUFPNEMsRUFBU1YsRUFBT0MsRUFBTUMsR0FHakMsUUFEQTR0QixFQUFZRCxHQUE2QixNQUFiQyxFQUFvQixLQUFPQSxJQUNyQ3JtQixNQUNoQixJQUFLLElBQ0gsSUFBSTVKLEVBQVE4QixLQUFLUSxJQUFJUixLQUFLaUIsSUFBSVosR0FBUUwsS0FBS2lCLElBQUlYLElBRS9DLE9BRDJCLE1BQXZCNnRCLEVBQVVRLFdBQXNCeE8sTUFBTXdPLEVDUmpDLFNBQVN4d0IsRUFBTUQsR0FDNUIsT0FBTzhCLEtBQUtRLElBQUksRUFBZ0UsRUFBN0RSLEtBQUtRLEtBQUssRUFBR1IsS0FBS3VCLElBQUksRUFBR3ZCLEtBQUtVLE1BQU1rdUIsR0FBUzF3QixHQUFTLEtBQVcwd0IsR0FBUzV1QixLQUFLaUIsSUFBSTlDLEtETzVDeTFCLENBQWdCejFCLEVBQU1ELE1BQVNpd0IsRUFBVVEsVUFBWUEsR0FDcEdVLEdBQWFsQixFQUFXandCLEdBRWpDLElBQUssR0FDTCxJQUFLLElBQ0wsSUFBSyxJQUNMLElBQUssSUFDTCxJQUFLLElBQ3dCLE1BQXZCaXdCLEVBQVVRLFdBQXNCeE8sTUFBTXdPLEVFaEJqQyxTQUFTeHdCLEVBQU1xQyxHQUU1QixPQURBckMsRUFBTzZCLEtBQUtpQixJQUFJOUMsR0FBT3FDLEVBQU1SLEtBQUtpQixJQUFJVCxHQUFPckMsRUFDdEM2QixLQUFLUSxJQUFJLEVBQUdvdUIsR0FBU3B1QixHQUFPb3VCLEdBQVN6d0IsSUFBUyxFRmNLMDFCLENBQWUxMUIsRUFBTTZCLEtBQUtRLElBQUlSLEtBQUtpQixJQUFJWixHQUFRTCxLQUFLaUIsSUFBSVgsUUFBVTZ0QixFQUFVUSxVQUFZQSxHQUFnQyxNQUFuQlIsRUFBVXJtQixPQUNySyxNQUVGLElBQUssSUFDTCxJQUFLLElBQ3dCLE1BQXZCcW1CLEVBQVVRLFdBQXNCeE8sTUFBTXdPLEVHckJqQyxTQUFTeHdCLEdBQ3RCLE9BQU82QixLQUFLUSxJQUFJLEdBQUlvdUIsR0FBUzV1QixLQUFLaUIsSUFBSTlDLEtIb0JvQjIxQixDQUFlMzFCLE1BQVFnd0IsRUFBVVEsVUFBWUEsRUFBdUMsR0FBUCxNQUFuQlIsRUFBVXJtQixPQUk5SCxPQUFPbEQsR0FBT3VwQixHSXRCVCxTQUFTNEYsR0FBVXh3QixHQUN4QixJQUFJb0IsRUFBU3BCLEVBQU1vQixPQWtEbkIsT0FoREFwQixFQUFNbUIsTUFBUSxTQUFTbkUsR0FDckIsSUFBSWhCLEVBQUlvRixJQUNSLE92SU5XLFNBQVN0RSxFQUFPQyxFQUFNQyxHQUNuQyxJQUFJb3ZCLEVBRUFodUIsRUFDQStDLEVBQ0F2RyxFQUhBd0IsR0FBSyxFQU1ULEdBRDhCWSxHQUFTQSxHQUF6QkYsR0FBU0EsS0FBdkJDLEdBQVFBLElBQ2NDLEVBQVEsRUFBRyxNQUFPLENBQUNGLEdBRXpDLElBRElzdkIsRUFBVXJ2QixFQUFPRCxLQUFPc0IsRUFBSXRCLEVBQU9BLEVBQVFDLEVBQU1BLEVBQU9xQixHQUNULEtBQTlDeEQsRUFBT2lDLEVBQWNDLEVBQU9DLEVBQU1DLE1BQWtCOEYsU0FBU2xJLEdBQU8sTUFBTyxHQUVoRixHQUFJQSxFQUFPLEVBQUcsQ0FDWixJQUFJdTBCLEVBQUsxeUIsS0FBSzBELE1BQU1yRCxFQUFRbEMsR0FBT3cwQixFQUFLM3lCLEtBQUswRCxNQUFNcEQsRUFBT25DLEdBSTFELElBSEl1MEIsRUFBS3YwQixFQUFPa0MsS0FBU3F5QixFQUNyQkMsRUFBS3gwQixFQUFPbUMsS0FBUXF5QixFQUN4Qmp1QixFQUFRLElBQUkzQixNQUFNcEIsRUFBSWd4QixFQUFLRCxFQUFLLEtBQ3ZCL3lCLEVBQUlnQyxHQUFHK0MsRUFBTS9FLElBQU0reUIsRUFBSy95QixHQUFLeEIsTUFDakMsQ0FDTEEsR0FBUUEsRUFDUixJQUFJdTBCLEVBQUsxeUIsS0FBSzBELE1BQU1yRCxFQUFRbEMsR0FBT3cwQixFQUFLM3lCLEtBQUswRCxNQUFNcEQsRUFBT25DLEdBSTFELElBSEl1MEIsRUFBS3YwQixFQUFPa0MsS0FBU3F5QixFQUNyQkMsRUFBS3gwQixFQUFPbUMsS0FBUXF5QixFQUN4Qmp1QixFQUFRLElBQUkzQixNQUFNcEIsRUFBSWd4QixFQUFLRCxFQUFLLEtBQ3ZCL3lCLEVBQUlnQyxHQUFHK0MsRUFBTS9FLElBQU0reUIsRUFBSy95QixHQUFLeEIsRUFLeEMsT0FGSXd4QixHQUFTanJCLEVBQU1pckIsVUFFWmpyQixFdUl2QkVBLENBQU1uRixFQUFFLEdBQUlBLEVBQUVBLEVBQUVGLE9BQVMsR0FBYSxNQUFUa0IsRUFBZ0IsR0FBS0EsSUFHM0RnRCxFQUFNVyxXQUFhLFNBQVMzRCxFQUFPNHRCLEdBQ2pDLElBQUk1dUIsRUFBSW9GLElBQ1IsT0FBT1QsR0FBVzNFLEVBQUUsR0FBSUEsRUFBRUEsRUFBRUYsT0FBUyxHQUFhLE1BQVRrQixFQUFnQixHQUFLQSxFQUFPNHRCLElBR3ZFNXFCLEVBQU15d0IsS0FBTyxTQUFTenpCLEdBQ1AsTUFBVEEsSUFBZUEsRUFBUSxJQUUzQixJQUtJMHpCLEVBQ0E5MUIsRUFOQW9CLEVBQUlvRixJQUNKbEMsRUFBSyxFQUNMc1EsRUFBS3hULEVBQUVGLE9BQVMsRUFDaEJnQixFQUFRZCxFQUFFa0QsR0FDVm5DLEVBQU9mLEVBQUV3VCxHQUdUbWhCLEVBQVUsR0FPZCxJQUxJNXpCLEVBQU9ELElBQ1RsQyxFQUFPa0MsRUFBT0EsRUFBUUMsRUFBTUEsRUFBT25DLEVBQ25DQSxFQUFPc0UsRUFBSUEsRUFBS3NRLEVBQUlBLEVBQUs1VSxHQUdwQisxQixLQUFZLEdBQUcsQ0FFcEIsSUFEQS8xQixFQUFPaUMsRUFBY0MsRUFBT0MsRUFBTUMsTUFDckIwekIsRUFHWCxPQUZBMTBCLEVBQUVrRCxHQUFNcEMsRUFDUmQsRUFBRXdULEdBQU16UyxFQUNEcUUsRUFBT3BGLEdBQ1QsR0FBSXBCLEVBQU8sRUFDaEJrQyxFQUFRTCxLQUFLVSxNQUFNTCxFQUFRbEMsR0FBUUEsRUFDbkNtQyxFQUFPTixLQUFLNkMsS0FBS3ZDLEVBQU9uQyxHQUFRQSxNQUMzQixDQUFBLEtBQUlBLEVBQU8sR0FJaEIsTUFIQWtDLEVBQVFMLEtBQUs2QyxLQUFLeEMsRUFBUWxDLEdBQVFBLEVBQ2xDbUMsRUFBT04sS0FBS1UsTUFBTUosRUFBT25DLEdBQVFBLEVBSW5DODFCLEVBQVU5MUIsRUFHWixPQUFPb0YsR0FHRkEsRUFHTSxTQUFTOGhCLEtBQ3RCLElBQUk5aEIsRUFBUW93QixLQVFaLE9BTkFwd0IsRUFBTTJCLEtBQU8sV0FDWCxPQUFPQSxHQUFLM0IsRUFBTzhoQixPQUdyQitMLEdBQVUxeUIsTUFBTTZFLEVBQU9YLFdBRWhCbXhCLEdBQVV4d0IsR0NwRW5CLElBQUk0ZCxHQUFLLElBQUkyQixLQUNUMUIsR0FBSyxJQUFJMEIsS0FFRSxTQUFTcVIsR0FBWUMsRUFBUUMsRUFBUzl6QixFQUFPK3pCLEdBRTFELFNBQVMvUixFQUFTcVAsR0FDaEIsT0FBT3dDLEVBQU94QyxFQUE0QixJQUFyQmh2QixVQUFVdkQsT0FBZSxJQUFJeWpCLEtBQU8sSUFBSUEsTUFBTThPLElBQVFBLEVBOEQ3RSxPQTNEQXJQLEVBQVM3aEIsTUFBUSxTQUFTa3hCLEdBQ3hCLE9BQU93QyxFQUFPeEMsRUFBTyxJQUFJOU8sTUFBTThPLElBQVFBLEdBR3pDclAsRUFBUzFmLEtBQU8sU0FBUyt1QixHQUN2QixPQUFPd0MsRUFBT3hDLEVBQU8sSUFBSTlPLEtBQUs4TyxFQUFPLElBQUt5QyxFQUFRekMsRUFBTSxHQUFJd0MsRUFBT3hDLEdBQU9BLEdBRzVFclAsRUFBUzdlLE1BQVEsU0FBU2t1QixHQUN4QixJQUFJWSxFQUFLalEsRUFBU3FQLEdBQ2RhLEVBQUtsUSxFQUFTMWYsS0FBSyt1QixHQUN2QixPQUFPQSxFQUFPWSxFQUFLQyxFQUFLYixFQUFPWSxFQUFLQyxHQUd0Q2xRLEVBQVMvZSxPQUFTLFNBQVNvdUIsRUFBTXp6QixHQUMvQixPQUFPazJCLEVBQVF6QyxFQUFPLElBQUk5TyxNQUFNOE8sR0FBZSxNQUFSenpCLEVBQWUsRUFBSTZCLEtBQUtVLE1BQU12QyxJQUFReXpCLEdBRy9FclAsRUFBU3pmLE1BQVEsU0FBU3pDLEVBQU9DLEVBQU1uQyxHQUNyQyxJQUFnQjJVLEVBQVpoUSxFQUFRLEdBR1osR0FGQXpDLEVBQVFraUIsRUFBUzFmLEtBQUt4QyxHQUN0QmxDLEVBQWUsTUFBUkEsRUFBZSxFQUFJNkIsS0FBS1UsTUFBTXZDLEtBQy9Ca0MsRUFBUUMsR0FBV25DLEVBQU8sR0FBSSxPQUFPMkUsRUFDM0MsR0FBR0EsRUFBTXNGLEtBQUswSyxFQUFXLElBQUlnUSxNQUFNemlCLElBQVNnMEIsRUFBUWgwQixFQUFPbEMsR0FBT2kyQixFQUFPL3pCLFNBQ2xFeVMsRUFBV3pTLEdBQVNBLEVBQVFDLEdBQ25DLE9BQU93QyxHQUdUeWYsRUFBUzliLE9BQVMsU0FBU1MsR0FDekIsT0FBT2l0QixJQUFZLFNBQVN2QyxHQUMxQixHQUFJQSxHQUFRQSxFQUFNLEtBQU93QyxFQUFPeEMsSUFBUTFxQixFQUFLMHFCLElBQU9BLEVBQUtELFFBQVFDLEVBQU8sTUFDdkUsU0FBU0EsRUFBTXp6QixHQUNoQixHQUFJeXpCLEdBQVFBLEVBQ1YsR0FBSXp6QixFQUFPLEVBQUcsT0FBU0EsR0FBUSxHQUM3QixLQUFPazJCLEVBQVF6QyxHQUFPLElBQUsxcUIsRUFBSzBxQixVQUMzQixPQUFTenpCLEdBQVEsR0FDdEIsS0FBT2syQixFQUFRekMsRUFBTSxJQUFNMXFCLEVBQUswcUIsVUFNcENyeEIsSUFDRmdpQixFQUFTaGlCLE1BQVEsU0FBU0YsRUFBT2tsQixHQUcvQixPQUZBcEUsR0FBR3dRLFNBQVN0eEIsR0FBUStnQixHQUFHdVEsU0FBU3BNLEdBQ2hDNk8sRUFBT2pULElBQUtpVCxFQUFPaFQsSUFDWnBoQixLQUFLVSxNQUFNSCxFQUFNNGdCLEdBQUlDLE1BRzlCbUIsRUFBU3FILE1BQVEsU0FBU3pyQixHQUV4QixPQURBQSxFQUFPNkIsS0FBS1UsTUFBTXZDLEdBQ1ZrSSxTQUFTbEksSUFBV0EsRUFBTyxFQUMzQkEsRUFBTyxFQUNUb2tCLEVBQVM5YixPQUFPNnRCLEVBQ1osU0FBUy8wQixHQUFLLE9BQU8rMEIsRUFBTS8wQixHQUFLcEIsR0FBUyxHQUN6QyxTQUFTb0IsR0FBSyxPQUFPZ2pCLEVBQVNoaUIsTUFBTSxFQUFHaEIsR0FBS3BCLEdBQVMsSUFIM0Nva0IsRUFEb0IsT0FRckNBLEVDbEVULElBQUlnUyxHQUFjaFMsSUFBUyxlQUV4QixTQUFTcVAsRUFBTXp6QixHQUNoQnl6QixFQUFLRCxTQUFTQyxFQUFPenpCLE1BQ3BCLFNBQVNrQyxFQUFPa2xCLEdBQ2pCLE9BQU9BLEVBQU1sbEIsS0FJZmswQixHQUFZM0ssTUFBUSxTQUFTbG9CLEdBRTNCLE9BREFBLEVBQUkxQixLQUFLVSxNQUFNZ0IsR0FDVjJFLFNBQVMzRSxJQUFRQSxFQUFJLEVBQ3BCQSxFQUFJLEVBQ0g2Z0IsSUFBUyxTQUFTcVAsR0FDdkJBLEVBQUtELFFBQVEzeEIsS0FBS1UsTUFBTWt4QixFQUFPbHdCLEdBQUtBLE1BQ25DLFNBQVNrd0IsRUFBTXp6QixHQUNoQnl6QixFQUFLRCxTQUFTQyxFQUFPenpCLEVBQU91RCxNQUMzQixTQUFTckIsRUFBT2tsQixHQUNqQixPQUFRQSxFQUFNbGxCLEdBQVNxQixLQU5KNnlCLEdBRGdCLE1DVnZDLElBQUlDLEdBQVNqUyxJQUFTLFNBQVNxUCxHQUM3QkEsRUFBS0QsUUFBUUMsRUFBT0EsRUFBSzZDLHNCQUN4QixTQUFTN0MsRUFBTXp6QixHQUNoQnl6QixFQUFLRCxTQUFTQyxFQ05jLElETVB6ekIsTUFDcEIsU0FBU2tDLEVBQU9rbEIsR0FDakIsT0FBUUEsRUFBTWxsQixHQ1JjLE9EUzNCLFNBQVN1eEIsR0FDVixPQUFPQSxFQUFLOEMsbUJFUFZDLEdBQVNwUyxJQUFTLFNBQVNxUCxHQUM3QkEsRUFBS0QsUUFBUUMsRUFBT0EsRUFBSzZDLGtCREpHLElDSWlCN0MsRUFBS2dELGlCQUNqRCxTQUFTaEQsRUFBTXp6QixHQUNoQnl6QixFQUFLRCxTQUFTQyxFRExjaUQsSUNLUDEyQixNQUNwQixTQUFTa0MsRUFBT2tsQixHQUNqQixPQUFRQSxFQUFNbGxCLEdEUGN3MEIsT0NRM0IsU0FBU2pELEdBQ1YsT0FBT0EsRUFBS2tELGdCQ1BWQyxHQUFPeFMsSUFBUyxTQUFTcVAsR0FDM0JBLEVBQUtELFFBQVFDLEVBQU9BLEVBQUs2QyxrQkZKRyxJRUlpQjdDLEVBQUtnRCxhRkh0QkMsSUVHc0RqRCxFQUFLa0QsaUJBQ3RGLFNBQVNsRCxFQUFNenpCLEdBQ2hCeXpCLEVBQUtELFNBQVNDLEVGSllvRCxLRUlMNzJCLE1BQ3BCLFNBQVNrQyxFQUFPa2xCLEdBQ2pCLE9BQVFBLEVBQU1sbEIsR0ZOWTIwQixRRU96QixTQUFTcEQsR0FDVixPQUFPQSxFQUFLcUQsY0NQVkMsR0FBTTNTLElBQ1JxUCxHQUFRQSxFQUFLdUQsU0FBUyxFQUFHLEVBQUcsRUFBRyxLQUMvQixDQUFDdkQsRUFBTXp6QixJQUFTeXpCLEVBQUt3RCxRQUFReEQsRUFBS3lELFVBQVlsM0IsS0FDOUMsQ0FBQ2tDLEVBQU9rbEIsS0FBU0EsRUFBTWxsQixFSExLdzBCLEtHS0l0UCxFQUFJK1Asb0JBQXNCajFCLEVBQU1pMUIsc0JISHZDQyxRR0l6QjNELEdBQVFBLEVBQUt5RCxVQUFZLElDSjNCLFNBQVNHLEdBQVE3MUIsR0FDZixPQUFPNGlCLElBQVMsU0FBU3FQLEdBQ3ZCQSxFQUFLd0QsUUFBUXhELEVBQUt5RCxXQUFhekQsRUFBSzZELFNBQVcsRUFBSTkxQixHQUFLLEdBQ3hEaXlCLEVBQUt1RCxTQUFTLEVBQUcsRUFBRyxFQUFHLE1BQ3RCLFNBQVN2RCxFQUFNenpCLEdBQ2hCeXpCLEVBQUt3RCxRQUFReEQsRUFBS3lELFVBQW1CLEVBQVBsM0IsTUFDN0IsU0FBU2tDLEVBQU9rbEIsR0FDakIsT0FBUUEsRUFBTWxsQixFSlRZdzBCLEtJU0h0UCxFQUFJK1Asb0JBQXNCajFCLEVBQU1pMUIsc0JKTi9CSSxVSVVyQixJQUFJQyxHQUFTSCxHQUFRLEdBQ2pCSSxHQUFTSixHQUFRLEdBQ1BBLEdBQVEsR0FDTkEsR0FBUSxHQUN4QixJQUFJSyxHQUFXTCxHQUFRLEdBQ1ZBLEdBQVEsR0FDTkEsR0FBUSxHQ2xCOUIsSUFBSU0sR0FBUXZULElBQVMsU0FBU3FQLEdBQzVCQSxFQUFLd0QsUUFBUSxHQUNieEQsRUFBS3VELFNBQVMsRUFBRyxFQUFHLEVBQUcsTUFDdEIsU0FBU3ZELEVBQU16ekIsR0FDaEJ5ekIsRUFBS21FLFNBQVNuRSxFQUFLb0UsV0FBYTczQixNQUMvQixTQUFTa0MsRUFBT2tsQixHQUNqQixPQUFPQSxFQUFJeVEsV0FBYTMxQixFQUFNMjFCLFdBQXlELElBQTNDelEsRUFBSTBRLGNBQWdCNTFCLEVBQU00MUIsa0JBQ3JFLFNBQVNyRSxHQUNWLE9BQU9BLEVBQUtvRSxjQ1JWRSxHQUFPM1QsSUFBUyxTQUFTcVAsR0FDM0JBLEVBQUttRSxTQUFTLEVBQUcsR0FDakJuRSxFQUFLdUQsU0FBUyxFQUFHLEVBQUcsRUFBRyxNQUN0QixTQUFTdkQsRUFBTXp6QixHQUNoQnl6QixFQUFLdUUsWUFBWXZFLEVBQUtxRSxjQUFnQjkzQixNQUNyQyxTQUFTa0MsRUFBT2tsQixHQUNqQixPQUFPQSxFQUFJMFEsY0FBZ0I1MUIsRUFBTTQxQixpQkFDaEMsU0FBU3JFLEdBQ1YsT0FBT0EsRUFBS3FFLGlCQUlkQyxHQUFLdE0sTUFBUSxTQUFTbG9CLEdBQ3BCLE9BQVEyRSxTQUFTM0UsRUFBSTFCLEtBQUtVLE1BQU1nQixLQUFTQSxFQUFJLEVBQVk2Z0IsSUFBUyxTQUFTcVAsR0FDekVBLEVBQUt1RSxZQUFZbjJCLEtBQUtVLE1BQU1reEIsRUFBS3FFLGNBQWdCdjBCLEdBQUtBLEdBQ3REa3dCLEVBQUttRSxTQUFTLEVBQUcsR0FDakJuRSxFQUFLdUQsU0FBUyxFQUFHLEVBQUcsRUFBRyxNQUN0QixTQUFTdkQsRUFBTXp6QixHQUNoQnl6QixFQUFLdUUsWUFBWXZFLEVBQUtxRSxjQUFnQjkzQixFQUFPdUQsTUFMRyxNQ1pwQzZnQixJQUFTLFNBQVNxUCxHQUNoQ0EsRUFBS3dFLGNBQWMsRUFBRyxNQUNyQixTQUFTeEUsRUFBTXp6QixHQUNoQnl6QixFQUFLRCxTQUFTQyxFUExjaUQsSU9LUDEyQixNQUNwQixTQUFTa0MsRUFBT2tsQixHQUNqQixPQUFRQSxFQUFNbGxCLEdQUGN3MEIsT09RM0IsU0FBU2pELEdBQ1YsT0FBT0EsRUFBS3lFLG1CQ1BBOVQsSUFBUyxTQUFTcVAsR0FDOUJBLEVBQUswRSxjQUFjLEVBQUcsRUFBRyxNQUN4QixTQUFTMUUsRUFBTXp6QixHQUNoQnl6QixFQUFLRCxTQUFTQyxFUkpZb0QsS1FJTDcyQixNQUNwQixTQUFTa0MsRUFBT2tsQixHQUNqQixPQUFRQSxFQUFNbGxCLEdSTlkyMEIsUVFPekIsU0FBU3BELEdBQ1YsT0FBT0EsRUFBSzJFLGlCQ1BkLElBQUlDLEdBQVNqVSxJQUFTLFNBQVNxUCxHQUM3QkEsRUFBSzZFLFlBQVksRUFBRyxFQUFHLEVBQUcsTUFDekIsU0FBUzdFLEVBQU16ekIsR0FDaEJ5ekIsRUFBSzhFLFdBQVc5RSxFQUFLK0UsYUFBZXg0QixNQUNuQyxTQUFTa0MsRUFBT2tsQixHQUNqQixPQUFRQSxFQUFNbGxCLEdUTFdrMUIsU1NNeEIsU0FBUzNELEdBQ1YsT0FBT0EsRUFBSytFLGFBQWUsS0NQN0IsU0FBU0MsR0FBV2ozQixHQUNsQixPQUFPNGlCLElBQVMsU0FBU3FQLEdBQ3ZCQSxFQUFLOEUsV0FBVzlFLEVBQUsrRSxjQUFnQi9FLEVBQUtpRixZQUFjLEVBQUlsM0IsR0FBSyxHQUNqRWl5QixFQUFLNkUsWUFBWSxFQUFHLEVBQUcsRUFBRyxNQUN6QixTQUFTN0UsRUFBTXp6QixHQUNoQnl6QixFQUFLOEUsV0FBVzlFLEVBQUsrRSxhQUFzQixFQUFQeDRCLE1BQ25DLFNBQVNrQyxFQUFPa2xCLEdBQ2pCLE9BQVFBLEVBQU1sbEIsR1ZOVXExQixVVVVyQixJQUFJb0IsR0FBWUYsR0FBVyxHQUN2QkcsR0FBWUgsR0FBVyxHQUNWQSxHQUFXLEdBQ1RBLEdBQVcsR0FDOUIsSUFBSUksR0FBY0osR0FBVyxHQUNiQSxHQUFXLEdBQ1RBLEdBQVcsR0NsQnJCclUsSUFBUyxTQUFTcVAsR0FDL0JBLEVBQUs4RSxXQUFXLEdBQ2hCOUUsRUFBSzZFLFlBQVksRUFBRyxFQUFHLEVBQUcsTUFDekIsU0FBUzdFLEVBQU16ekIsR0FDaEJ5ekIsRUFBS3FGLFlBQVlyRixFQUFLc0YsY0FBZ0IvNEIsTUFDckMsU0FBU2tDLEVBQU9rbEIsR0FDakIsT0FBT0EsRUFBSTJSLGNBQWdCNzJCLEVBQU02MkIsY0FBa0UsSUFBakQzUixFQUFJNFIsaUJBQW1COTJCLEVBQU04MkIscUJBQzlFLFNBQVN2RixHQUNWLE9BQU9BLEVBQUtzRixpQkNSZCxJQUFJRSxHQUFVN1UsSUFBUyxTQUFTcVAsR0FDOUJBLEVBQUtxRixZQUFZLEVBQUcsR0FDcEJyRixFQUFLNkUsWUFBWSxFQUFHLEVBQUcsRUFBRyxNQUN6QixTQUFTN0UsRUFBTXp6QixHQUNoQnl6QixFQUFLeUYsZUFBZXpGLEVBQUt1RixpQkFBbUJoNUIsTUFDM0MsU0FBU2tDLEVBQU9rbEIsR0FDakIsT0FBT0EsRUFBSTRSLGlCQUFtQjkyQixFQUFNODJCLG9CQUNuQyxTQUFTdkYsR0FDVixPQUFPQSxFQUFLdUYsb0JBSWRDLEdBQVF4TixNQUFRLFNBQVNsb0IsR0FDdkIsT0FBUTJFLFNBQVMzRSxFQUFJMUIsS0FBS1UsTUFBTWdCLEtBQVNBLEVBQUksRUFBWTZnQixJQUFTLFNBQVNxUCxHQUN6RUEsRUFBS3lGLGVBQWVyM0IsS0FBS1UsTUFBTWt4QixFQUFLdUYsaUJBQW1CejFCLEdBQUtBLEdBQzVEa3dCLEVBQUtxRixZQUFZLEVBQUcsR0FDcEJyRixFQUFLNkUsWUFBWSxFQUFHLEVBQUcsRUFBRyxNQUN6QixTQUFTN0UsRUFBTXp6QixHQUNoQnl6QixFQUFLeUYsZUFBZXpGLEVBQUt1RixpQkFBbUJoNUIsRUFBT3VELE1BTEgsTUM4Q3BELE1BQU80MUIsR0FBV0MsSUE1Q2xCLFNBQWdCckIsRUFBTUosRUFBTzBCLEVBQU10QyxFQUFLSCxFQUFNSixHQUU1QyxNQUFNOEMsRUFBZ0IsQ0FDcEIsQ0FBQ2pELEdBQVMsRWJwQmdCLEthcUIxQixDQUFDQSxHQUFTLEVBQUksS0FDZCxDQUFDQSxHQUFRLEdBQUksTUFDYixDQUFDQSxHQUFRLEdBQUksS0FDYixDQUFDRyxFQUFTLEVidkJnQkUsS2F3QjFCLENBQUNGLEVBQVMsRUFBSSxLQUNkLENBQUNBLEVBQVEsR0FBSSxLQUNiLENBQUNBLEVBQVEsR0FBSSxNQUNiLENBQUdJLEVBQU8sRWIxQmNDLE1hMkJ4QixDQUFHRCxFQUFPLEVBQUksT0FDZCxDQUFHQSxFQUFPLEVBQUksT0FDZCxDQUFHQSxFQUFNLEdBQUksT0FDYixDQUFJRyxFQUFNLEViN0JhSyxPYThCdkIsQ0FBSUwsRUFBTSxFQUFJLFFBQ2QsQ0FBR3NDLEVBQU8sRWI5QmM5QixRYStCeEIsQ0FBRUksRUFBUSxFYjlCZUosUWErQnpCLENBQUVJLEVBQVEsRUFBSSxRQUNkLENBQUdJLEVBQU8sRWIvQmNSLFVhMEMxQixTQUFTZ0MsRUFBYXIzQixFQUFPQyxFQUFNQyxHQUNqQyxNQUFNdXlCLEVBQVM5eUIsS0FBS2lCLElBQUlYLEVBQU9ELEdBQVNFLEVBQ2xDWixFQUFJRyxHQUFTLElBQUszQixLQUFVQSxJQUFNeUIsTUFBTTYzQixFQUFlM0UsR0FDN0QsR0FBSW56QixJQUFNODNCLEVBQWNwNEIsT0FBUSxPQUFPNjJCLEVBQUt0TSxNQUFNN29CLEVBQVNWLEViN0NuQ3ExQixRYTZDeURwMUIsRWI3Q3pEbzFCLFFhNkM4RW4xQixJQUN0RyxHQUFVLElBQU5aLEVBQVMsT0FBTzQwQixHQUFZM0ssTUFBTTVwQixLQUFLUSxJQUFJTyxFQUFTVixFQUFPQyxFQUFNQyxHQUFRLElBQzdFLE1BQU8wQixFQUFHOUQsR0FBUXM1QixFQUFjM0UsRUFBUzJFLEVBQWM5M0IsRUFBSSxHQUFHLEdBQUs4M0IsRUFBYzkzQixHQUFHLEdBQUttekIsRUFBU256QixFQUFJLEVBQUlBLEdBQzFHLE9BQU9zQyxFQUFFMm5CLE1BQU16ckIsR0FHakIsTUFBTyxDQWpCUCxTQUFla0MsRUFBT0MsRUFBTUMsR0FDMUIsTUFBTW92QixFQUFVcnZCLEVBQU9ELEVBQ25Cc3ZCLEtBQVV0dkIsRUFBT0MsR0FBUSxDQUFDQSxFQUFNRCxJQUNwQyxNQUFNa2lCLEVBQVdoaUIsR0FBZ0MsbUJBQWhCQSxFQUFNdUMsTUFBdUJ2QyxFQUFRbTNCLEVBQWFyM0IsRUFBT0MsRUFBTUMsR0FDMUZtRSxFQUFRNmQsRUFBV0EsRUFBU3pmLE1BQU16QyxHQUFRQyxFQUFPLEdBQUssR0FDNUQsT0FBT3F2QixFQUFVanJCLEVBQU1pckIsVUFBWWpyQixHQVl0Qmd6QixHQUlxQkMsQ0FBT3pCLEdBQU1KLEdBQU8wQixHQUFNdEMsR0FBS0gsR0FBTUosSUNoRDNFLFNBQVNpRCxHQUFVcjRCLEdBQ2pCLEdBQUksR0FBS0EsRUFBRThELEdBQUs5RCxFQUFFOEQsRUFBSSxJQUFLLENBQ3pCLElBQUl1dUIsRUFBTyxJQUFJOU8sTUFBTSxFQUFHdmpCLEVBQUVxQyxFQUFHckMsRUFBRUEsRUFBR0EsRUFBRXM0QixFQUFHdDRCLEVBQUV1NEIsRUFBR3Y0QixFQUFFdzRCLEVBQUd4NEIsRUFBRXk0QixHQUVuRCxPQURBcEcsRUFBS3VFLFlBQVk1MkIsRUFBRThELEdBQ1p1dUIsRUFFVCxPQUFPLElBQUk5TyxLQUFLdmpCLEVBQUU4RCxFQUFHOUQsRUFBRXFDLEVBQUdyQyxFQUFFQSxFQUFHQSxFQUFFczRCLEVBQUd0NEIsRUFBRXU0QixFQUFHdjRCLEVBQUV3NEIsRUFBR3g0QixFQUFFeTRCLEdBR2xELFNBQVNDLEdBQVExNEIsR0FDZixHQUFJLEdBQUtBLEVBQUU4RCxHQUFLOUQsRUFBRThELEVBQUksSUFBSyxDQUN6QixJQUFJdXVCLEVBQU8sSUFBSTlPLEtBQUtBLEtBQUtvVixLQUFLLEVBQUczNEIsRUFBRXFDLEVBQUdyQyxFQUFFQSxFQUFHQSxFQUFFczRCLEVBQUd0NEIsRUFBRXU0QixFQUFHdjRCLEVBQUV3NEIsRUFBR3g0QixFQUFFeTRCLElBRTVELE9BREFwRyxFQUFLeUYsZUFBZTkzQixFQUFFOEQsR0FDZnV1QixFQUVULE9BQU8sSUFBSTlPLEtBQUtBLEtBQUtvVixJQUFJMzRCLEVBQUU4RCxFQUFHOUQsRUFBRXFDLEVBQUdyQyxFQUFFQSxFQUFHQSxFQUFFczRCLEVBQUd0NEIsRUFBRXU0QixFQUFHdjRCLEVBQUV3NEIsRUFBR3g0QixFQUFFeTRCLElBRzNELFNBQVNHLEdBQVE5MEIsRUFBR3pCLEVBQUdyQyxHQUNyQixNQUFPLENBQUM4RCxFQUFHQSxFQUFHekIsRUFBR0EsRUFBR3JDLEVBQUdBLEVBQUdzNEIsRUFBRyxFQUFHQyxFQUFHLEVBQUdDLEVBQUcsRUFBR0MsRUFBRyxHQW1XakQsSUNqWUk1SSxHQUNPZ0osR0RnWVBDLEdBQU8sQ0FBQyxJQUFLLEdBQUkxeEIsRUFBSyxJQUFLLEVBQUssS0FDaEMyeEIsR0FBVyxVQUNYQyxHQUFZLEtBQ1pDLEdBQVksc0JBRWhCLFNBQVNDLEdBQUl2NkIsRUFBT213QixFQUFNSSxHQUN4QixJQUFJRixFQUFPcndCLEVBQVEsRUFBSSxJQUFNLEdBQ3pCc1AsR0FBVStnQixHQUFRcndCLEVBQVFBLEdBQVMsR0FDbkNtQixFQUFTbU8sRUFBT25PLE9BQ3BCLE9BQU9rdkIsR0FBUWx2QixFQUFTb3ZCLEVBQVEsSUFBSTFyQixNQUFNMHJCLEVBQVFwdkIsRUFBUyxHQUFHMFIsS0FBS3NkLEdBQVE3Z0IsRUFBU0EsR0FHdEYsU0FBU2tyQixHQUFRNTJCLEdBQ2YsT0FBT0EsRUFBRWl0QixRQUFReUosR0FBVyxRQUc5QixTQUFTRyxHQUFTN3FCLEdBQ2hCLE9BQU8sSUFBSXFILE9BQU8sT0FBU3JILEVBQU1wRyxJQUFJZ3hCLElBQVMzbkIsS0FBSyxLQUFPLElBQUssS0FHakUsU0FBUzZuQixHQUFhOXFCLEdBQ3BCLE9BQU8sSUFBSXBDLElBQUlvQyxFQUFNcEcsS0FBSSxDQUFDQyxFQUFNaEksSUFBTSxDQUFDZ0ksRUFBSzBYLGNBQWUxZixNQUc3RCxTQUFTazVCLEdBQXlCdDVCLEVBQUdpTyxFQUFRN04sR0FDM0MsSUFBSWdDLEVBQUkyMkIsR0FBU2haLEtBQUs5UixFQUFPdkssTUFBTXRELEVBQUdBLEVBQUksSUFDMUMsT0FBT2dDLEdBQUtwQyxFQUFFd3VCLEdBQUtwc0IsRUFBRSxHQUFJaEMsRUFBSWdDLEVBQUUsR0FBR3RDLFNBQVcsRUFHL0MsU0FBU3k1QixHQUF5QnY1QixFQUFHaU8sRUFBUTdOLEdBQzNDLElBQUlnQyxFQUFJMjJCLEdBQVNoWixLQUFLOVIsRUFBT3ZLLE1BQU10RCxFQUFHQSxFQUFJLElBQzFDLE9BQU9nQyxHQUFLcEMsRUFBRW0wQixHQUFLL3hCLEVBQUUsR0FBSWhDLEVBQUlnQyxFQUFFLEdBQUd0QyxTQUFXLEVBRy9DLFNBQVMwNUIsR0FBc0J4NUIsRUFBR2lPLEVBQVE3TixHQUN4QyxJQUFJZ0MsRUFBSTIyQixHQUFTaFosS0FBSzlSLEVBQU92SyxNQUFNdEQsRUFBR0EsRUFBSSxJQUMxQyxPQUFPZ0MsR0FBS3BDLEVBQUV5NUIsR0FBS3IzQixFQUFFLEdBQUloQyxFQUFJZ0MsRUFBRSxHQUFHdEMsU0FBVyxFQUcvQyxTQUFTNDVCLEdBQW1CMTVCLEVBQUdpTyxFQUFRN04sR0FDckMsSUFBSWdDLEVBQUkyMkIsR0FBU2haLEtBQUs5UixFQUFPdkssTUFBTXRELEVBQUdBLEVBQUksSUFDMUMsT0FBT2dDLEdBQUtwQyxFQUFFMjVCLEdBQUt2M0IsRUFBRSxHQUFJaEMsRUFBSWdDLEVBQUUsR0FBR3RDLFNBQVcsRUFHL0MsU0FBUzg1QixHQUFzQjU1QixFQUFHaU8sRUFBUTdOLEdBQ3hDLElBQUlnQyxFQUFJMjJCLEdBQVNoWixLQUFLOVIsRUFBT3ZLLE1BQU10RCxFQUFHQSxFQUFJLElBQzFDLE9BQU9nQyxHQUFLcEMsRUFBRTY1QixHQUFLejNCLEVBQUUsR0FBSWhDLEVBQUlnQyxFQUFFLEdBQUd0QyxTQUFXLEVBRy9DLFNBQVNnNkIsR0FBYzk1QixFQUFHaU8sRUFBUTdOLEdBQ2hDLElBQUlnQyxFQUFJMjJCLEdBQVNoWixLQUFLOVIsRUFBT3ZLLE1BQU10RCxFQUFHQSxFQUFJLElBQzFDLE9BQU9nQyxHQUFLcEMsRUFBRThELEdBQUsxQixFQUFFLEdBQUloQyxFQUFJZ0MsRUFBRSxHQUFHdEMsU0FBVyxFQUcvQyxTQUFTaTZCLEdBQVUvNUIsRUFBR2lPLEVBQVE3TixHQUM1QixJQUFJZ0MsRUFBSTIyQixHQUFTaFosS0FBSzlSLEVBQU92SyxNQUFNdEQsRUFBR0EsRUFBSSxJQUMxQyxPQUFPZ0MsR0FBS3BDLEVBQUU4RCxHQUFLMUIsRUFBRSxLQUFPQSxFQUFFLEdBQUssR0FBSyxLQUFPLEtBQU9oQyxFQUFJZ0MsRUFBRSxHQUFHdEMsU0FBVyxFQUc1RSxTQUFTazZCLEdBQVVoNkIsRUFBR2lPLEVBQVE3TixHQUM1QixJQUFJZ0MsRUFBSSwrQkFBK0IyZCxLQUFLOVIsRUFBT3ZLLE1BQU10RCxFQUFHQSxFQUFJLElBQ2hFLE9BQU9nQyxHQUFLcEMsRUFBRWk2QixFQUFJNzNCLEVBQUUsR0FBSyxJQUFNQSxFQUFFLElBQU1BLEVBQUUsSUFBTSxPQUFRaEMsRUFBSWdDLEVBQUUsR0FBR3RDLFNBQVcsRUFHN0UsU0FBU282QixHQUFhbDZCLEVBQUdpTyxFQUFRN04sR0FDL0IsSUFBSWdDLEVBQUkyMkIsR0FBU2haLEtBQUs5UixFQUFPdkssTUFBTXRELEVBQUdBLEVBQUksSUFDMUMsT0FBT2dDLEdBQUtwQyxFQUFFMG1CLEVBQVcsRUFBUHRrQixFQUFFLEdBQVMsRUFBR2hDLEVBQUlnQyxFQUFFLEdBQUd0QyxTQUFXLEVBR3RELFNBQVNxNkIsR0FBaUJuNkIsRUFBR2lPLEVBQVE3TixHQUNuQyxJQUFJZ0MsRUFBSTIyQixHQUFTaFosS0FBSzlSLEVBQU92SyxNQUFNdEQsRUFBR0EsRUFBSSxJQUMxQyxPQUFPZ0MsR0FBS3BDLEVBQUVxQyxFQUFJRCxFQUFFLEdBQUssRUFBR2hDLEVBQUlnQyxFQUFFLEdBQUd0QyxTQUFXLEVBR2xELFNBQVNzNkIsR0FBZ0JwNkIsRUFBR2lPLEVBQVE3TixHQUNsQyxJQUFJZ0MsRUFBSTIyQixHQUFTaFosS0FBSzlSLEVBQU92SyxNQUFNdEQsRUFBR0EsRUFBSSxJQUMxQyxPQUFPZ0MsR0FBS3BDLEVBQUVBLEdBQUtvQyxFQUFFLEdBQUloQyxFQUFJZ0MsRUFBRSxHQUFHdEMsU0FBVyxFQUcvQyxTQUFTdTZCLEdBQWVyNkIsRUFBR2lPLEVBQVE3TixHQUNqQyxJQUFJZ0MsRUFBSTIyQixHQUFTaFosS0FBSzlSLEVBQU92SyxNQUFNdEQsRUFBR0EsRUFBSSxJQUMxQyxPQUFPZ0MsR0FBS3BDLEVBQUVxQyxFQUFJLEVBQUdyQyxFQUFFQSxHQUFLb0MsRUFBRSxHQUFJaEMsRUFBSWdDLEVBQUUsR0FBR3RDLFNBQVcsRUFHeEQsU0FBU3c2QixHQUFZdDZCLEVBQUdpTyxFQUFRN04sR0FDOUIsSUFBSWdDLEVBQUkyMkIsR0FBU2haLEtBQUs5UixFQUFPdkssTUFBTXRELEVBQUdBLEVBQUksSUFDMUMsT0FBT2dDLEdBQUtwQyxFQUFFczRCLEdBQUtsMkIsRUFBRSxHQUFJaEMsRUFBSWdDLEVBQUUsR0FBR3RDLFNBQVcsRUFHL0MsU0FBU3k2QixHQUFhdjZCLEVBQUdpTyxFQUFRN04sR0FDL0IsSUFBSWdDLEVBQUkyMkIsR0FBU2haLEtBQUs5UixFQUFPdkssTUFBTXRELEVBQUdBLEVBQUksSUFDMUMsT0FBT2dDLEdBQUtwQyxFQUFFdTRCLEdBQUtuMkIsRUFBRSxHQUFJaEMsRUFBSWdDLEVBQUUsR0FBR3RDLFNBQVcsRUFHL0MsU0FBUzA2QixHQUFheDZCLEVBQUdpTyxFQUFRN04sR0FDL0IsSUFBSWdDLEVBQUkyMkIsR0FBU2haLEtBQUs5UixFQUFPdkssTUFBTXRELEVBQUdBLEVBQUksSUFDMUMsT0FBT2dDLEdBQUtwQyxFQUFFdzRCLEdBQUtwMkIsRUFBRSxHQUFJaEMsRUFBSWdDLEVBQUUsR0FBR3RDLFNBQVcsRUFHL0MsU0FBUzI2QixHQUFrQno2QixFQUFHaU8sRUFBUTdOLEdBQ3BDLElBQUlnQyxFQUFJMjJCLEdBQVNoWixLQUFLOVIsRUFBT3ZLLE1BQU10RCxFQUFHQSxFQUFJLElBQzFDLE9BQU9nQyxHQUFLcEMsRUFBRXk0QixHQUFLcjJCLEVBQUUsR0FBSWhDLEVBQUlnQyxFQUFFLEdBQUd0QyxTQUFXLEVBRy9DLFNBQVM0NkIsR0FBa0IxNkIsRUFBR2lPLEVBQVE3TixHQUNwQyxJQUFJZ0MsRUFBSTIyQixHQUFTaFosS0FBSzlSLEVBQU92SyxNQUFNdEQsRUFBR0EsRUFBSSxJQUMxQyxPQUFPZ0MsR0FBS3BDLEVBQUV5NEIsRUFBSWg0QixLQUFLVSxNQUFNaUIsRUFBRSxHQUFLLEtBQU9oQyxFQUFJZ0MsRUFBRSxHQUFHdEMsU0FBVyxFQUdqRSxTQUFTNjZCLEdBQW9CMzZCLEVBQUdpTyxFQUFRN04sR0FDdEMsSUFBSWdDLEVBQUk0MkIsR0FBVWpaLEtBQUs5UixFQUFPdkssTUFBTXRELEVBQUdBLEVBQUksSUFDM0MsT0FBT2dDLEVBQUloQyxFQUFJZ0MsRUFBRSxHQUFHdEMsUUFBVSxFQUdoQyxTQUFTODZCLEdBQW1CNTZCLEVBQUdpTyxFQUFRN04sR0FDckMsSUFBSWdDLEVBQUkyMkIsR0FBU2haLEtBQUs5UixFQUFPdkssTUFBTXRELElBQ25DLE9BQU9nQyxHQUFLcEMsRUFBRTY2QixHQUFLejRCLEVBQUUsR0FBSWhDLEVBQUlnQyxFQUFFLEdBQUd0QyxTQUFXLEVBRy9DLFNBQVNnN0IsR0FBMEI5NkIsRUFBR2lPLEVBQVE3TixHQUM1QyxJQUFJZ0MsRUFBSTIyQixHQUFTaFosS0FBSzlSLEVBQU92SyxNQUFNdEQsSUFDbkMsT0FBT2dDLEdBQUtwQyxFQUFFdUMsR0FBS0gsRUFBRSxHQUFJaEMsRUFBSWdDLEVBQUUsR0FBR3RDLFNBQVcsRUFHL0MsU0FBU2k3QixHQUFpQi82QixFQUFHOEMsR0FDM0IsT0FBT28yQixHQUFJbDVCLEVBQUU4MUIsVUFBV2h6QixFQUFHLEdBRzdCLFNBQVNrNEIsR0FBYWg3QixFQUFHOEMsR0FDdkIsT0FBT28yQixHQUFJbDVCLEVBQUUwMUIsV0FBWTV5QixFQUFHLEdBRzlCLFNBQVNtNEIsR0FBYWo3QixFQUFHOEMsR0FDdkIsT0FBT28yQixHQUFJbDVCLEVBQUUwMUIsV0FBYSxJQUFNLEdBQUk1eUIsRUFBRyxHQUd6QyxTQUFTbzRCLEdBQWdCbDdCLEVBQUc4QyxHQUMxQixPQUFPbzJCLEdBQUksRUFBSWlDLEdBQVFuNkIsTUFBTW82QixHQUFTcDdCLEdBQUlBLEdBQUk4QyxFQUFHLEdBR25ELFNBQVN1NEIsR0FBbUJyN0IsRUFBRzhDLEdBQzdCLE9BQU9vMkIsR0FBSWw1QixFQUFFazFCLGtCQUFtQnB5QixFQUFHLEdBR3JDLFNBQVN3NEIsR0FBbUJ0N0IsRUFBRzhDLEdBQzdCLE9BQU91NEIsR0FBbUJyN0IsRUFBRzhDLEdBQUssTUFHcEMsU0FBU3k0QixHQUFrQnY3QixFQUFHOEMsR0FDNUIsT0FBT28yQixHQUFJbDVCLEVBQUV5MkIsV0FBYSxFQUFHM3pCLEVBQUcsR0FHbEMsU0FBUzA0QixHQUFjeDdCLEVBQUc4QyxHQUN4QixPQUFPbzJCLEdBQUlsNUIsRUFBRXUxQixhQUFjenlCLEVBQUcsR0FHaEMsU0FBUzI0QixHQUFjejdCLEVBQUc4QyxHQUN4QixPQUFPbzJCLEdBQUlsNUIsRUFBRXExQixhQUFjdnlCLEVBQUcsR0FHaEMsU0FBUzQ0QixHQUEwQjE3QixHQUNqQyxJQUFJMjFCLEVBQU0zMUIsRUFBRWsyQixTQUNaLE9BQWUsSUFBUlAsRUFBWSxFQUFJQSxFQUd6QixTQUFTZ0csR0FBdUIzN0IsRUFBRzhDLEdBQ2pDLE9BQU9vMkIsR0FBSTBDLEdBQVc1NkIsTUFBTW82QixHQUFTcDdCLEdBQUssRUFBR0EsR0FBSThDLEVBQUcsR0FHdEQsU0FBUys0QixHQUFLNzdCLEdBQ1osSUFBSTIxQixFQUFNMzFCLEVBQUVrMkIsU0FDWixPQUFRUCxHQUFPLEdBQWEsSUFBUkEsRUFBYW1HLEdBQWE5N0IsR0FBSzg3QixHQUFheDRCLEtBQUt0RCxHQUd2RSxTQUFTKzdCLEdBQW9CLzdCLEVBQUc4QyxHQUU5QixPQURBOUMsRUFBSTY3QixHQUFLNzdCLEdBQ0ZrNUIsR0FBSTRDLEdBQWE5NkIsTUFBTW82QixHQUFTcDdCLEdBQUlBLElBQStCLElBQXpCbzdCLEdBQVNwN0IsR0FBR2syQixVQUFpQnB6QixFQUFHLEdBR25GLFNBQVNrNUIsR0FBMEJoOEIsR0FDakMsT0FBT0EsRUFBRWsyQixTQUdYLFNBQVMrRixHQUF1Qmo4QixFQUFHOEMsR0FDakMsT0FBT28yQixHQUFJZ0QsR0FBV2w3QixNQUFNbzZCLEdBQVNwN0IsR0FBSyxFQUFHQSxHQUFJOEMsRUFBRyxHQUd0RCxTQUFTcTVCLEdBQVduOEIsRUFBRzhDLEdBQ3JCLE9BQU9vMkIsR0FBSWw1QixFQUFFMDJCLGNBQWdCLElBQUs1ekIsRUFBRyxHQUd2QyxTQUFTczVCLEdBQWNwOEIsRUFBRzhDLEdBRXhCLE9BQU9vMkIsSUFEUGw1QixFQUFJNjdCLEdBQUs3N0IsSUFDSTAyQixjQUFnQixJQUFLNXpCLEVBQUcsR0FHdkMsU0FBU3U1QixHQUFlcjhCLEVBQUc4QyxHQUN6QixPQUFPbzJCLEdBQUlsNUIsRUFBRTAyQixjQUFnQixJQUFPNXpCLEVBQUcsR0FHekMsU0FBU3c1QixHQUFrQnQ4QixFQUFHOEMsR0FDNUIsSUFBSTZ5QixFQUFNMzFCLEVBQUVrMkIsU0FFWixPQUFPZ0QsSUFEUGw1QixFQUFLMjFCLEdBQU8sR0FBYSxJQUFSQSxFQUFhbUcsR0FBYTk3QixHQUFLODdCLEdBQWF4NEIsS0FBS3RELElBQ3JEMDJCLGNBQWdCLElBQU81ekIsRUFBRyxHQUd6QyxTQUFTeTVCLEdBQVd2OEIsR0FDbEIsSUFBSXNDLEVBQUl0QyxFQUFFKzFCLG9CQUNWLE9BQVF6ekIsRUFBSSxFQUFJLEtBQU9BLElBQU0sRUFBRyxNQUMxQjQyQixHQUFJNTJCLEVBQUksR0FBSyxFQUFHLElBQUssR0FDckI0MkIsR0FBSTUyQixFQUFJLEdBQUksSUFBSyxHQUd6QixTQUFTazZCLEdBQW9CeDhCLEVBQUc4QyxHQUM5QixPQUFPbzJCLEdBQUlsNUIsRUFBRW8zQixhQUFjdDBCLEVBQUcsR0FHaEMsU0FBUzI1QixHQUFnQno4QixFQUFHOEMsR0FDMUIsT0FBT28yQixHQUFJbDVCLEVBQUVnM0IsY0FBZWwwQixFQUFHLEdBR2pDLFNBQVM0NUIsR0FBZ0IxOEIsRUFBRzhDLEdBQzFCLE9BQU9vMkIsR0FBSWw1QixFQUFFZzNCLGNBQWdCLElBQU0sR0FBSWwwQixFQUFHLEdBRzVDLFNBQVM2NUIsR0FBbUIzOEIsRUFBRzhDLEdBQzdCLE9BQU9vMkIsR0FBSSxFQUFJakMsR0FBT2oyQixNQUFNNjJCLEdBQVE3M0IsR0FBSUEsR0FBSThDLEVBQUcsR0FHakQsU0FBUzg1QixHQUFzQjU4QixFQUFHOEMsR0FDaEMsT0FBT28yQixHQUFJbDVCLEVBQUU2OEIscUJBQXNCLzVCLEVBQUcsR0FHeEMsU0FBU2c2QixHQUFzQjk4QixFQUFHOEMsR0FDaEMsT0FBTzg1QixHQUFzQjU4QixFQUFHOEMsR0FBSyxNQUd2QyxTQUFTaTZCLEdBQXFCLzhCLEVBQUc4QyxHQUMvQixPQUFPbzJCLEdBQUlsNUIsRUFBRTIzQixjQUFnQixFQUFHNzBCLEVBQUcsR0FHckMsU0FBU2s2QixHQUFpQmg5QixFQUFHOEMsR0FDM0IsT0FBT28yQixHQUFJbDVCLEVBQUU4MkIsZ0JBQWlCaDBCLEVBQUcsR0FHbkMsU0FBU202QixHQUFpQmo5QixFQUFHOEMsR0FDM0IsT0FBT28yQixHQUFJbDVCLEVBQUVtMUIsZ0JBQWlCcnlCLEVBQUcsR0FHbkMsU0FBU282QixHQUE2Qmw5QixHQUNwQyxJQUFJbTlCLEVBQU1uOUIsRUFBRXMzQixZQUNaLE9BQWUsSUFBUjZGLEVBQVksRUFBSUEsRUFHekIsU0FBU0MsR0FBMEJwOUIsRUFBRzhDLEdBQ3BDLE9BQU9vMkIsR0FBSTNCLEdBQVV2MkIsTUFBTTYyQixHQUFRNzNCLEdBQUssRUFBR0EsR0FBSThDLEVBQUcsR0FHcEQsU0FBU3U2QixHQUFRcjlCLEdBQ2YsSUFBSTIxQixFQUFNMzFCLEVBQUVzM0IsWUFDWixPQUFRM0IsR0FBTyxHQUFhLElBQVJBLEVBQWE4QixHQUFZejNCLEdBQUt5M0IsR0FBWW4wQixLQUFLdEQsR0FHckUsU0FBU3M5QixHQUF1QnQ5QixFQUFHOEMsR0FFakMsT0FEQTlDLEVBQUlxOUIsR0FBUXI5QixHQUNMazVCLEdBQUl6QixHQUFZejJCLE1BQU02MkIsR0FBUTczQixHQUFJQSxJQUFpQyxJQUEzQjYzQixHQUFRNzNCLEdBQUdzM0IsYUFBb0J4MEIsRUFBRyxHQUduRixTQUFTeTZCLEdBQTZCdjlCLEdBQ3BDLE9BQU9BLEVBQUVzM0IsWUFHWCxTQUFTa0csR0FBMEJ4OUIsRUFBRzhDLEdBQ3BDLE9BQU9vMkIsR0FBSTFCLEdBQVV4MkIsTUFBTTYyQixHQUFRNzNCLEdBQUssRUFBR0EsR0FBSThDLEVBQUcsR0FHcEQsU0FBUzI2QixHQUFjejlCLEVBQUc4QyxHQUN4QixPQUFPbzJCLEdBQUlsNUIsRUFBRTQzQixpQkFBbUIsSUFBSzkwQixFQUFHLEdBRzFDLFNBQVM0NkIsR0FBaUIxOUIsRUFBRzhDLEdBRTNCLE9BQU9vMkIsSUFEUGw1QixFQUFJcTlCLEdBQVFyOUIsSUFDQzQzQixpQkFBbUIsSUFBSzkwQixFQUFHLEdBRzFDLFNBQVM2NkIsR0FBa0IzOUIsRUFBRzhDLEdBQzVCLE9BQU9vMkIsR0FBSWw1QixFQUFFNDNCLGlCQUFtQixJQUFPOTBCLEVBQUcsR0FHNUMsU0FBUzg2QixHQUFxQjU5QixFQUFHOEMsR0FDL0IsSUFBSTZ5QixFQUFNMzFCLEVBQUVzM0IsWUFFWixPQUFPNEIsSUFEUGw1QixFQUFLMjFCLEdBQU8sR0FBYSxJQUFSQSxFQUFhOEIsR0FBWXozQixHQUFLeTNCLEdBQVluMEIsS0FBS3RELElBQ25ENDNCLGlCQUFtQixJQUFPOTBCLEVBQUcsR0FHNUMsU0FBUys2QixLQUNQLE1BQU8sUUFHVCxTQUFTQyxLQUNQLE1BQU8sSUFHVCxTQUFTQyxHQUFvQi85QixHQUMzQixPQUFRQSxFQUdWLFNBQVNnK0IsR0FBMkJoK0IsR0FDbEMsT0FBT1MsS0FBS1UsT0FBT25CLEVBQUksS0VqckJ6QixTQUFTcXlCLEdBQUszdkIsR0FDWixPQUFPLElBQUk2Z0IsS0FBSzdnQixHQUdsQixTQUFTcUIsR0FBT3JCLEdBQ2QsT0FBT0EsYUFBYTZnQixNQUFRN2dCLEdBQUssSUFBSTZnQixNQUFNN2dCLEdBR3RDLFNBQVN1N0IsR0FBUzk0QixFQUFPZ3pCLEVBQWN4QixFQUFNSixFQUFPMEIsRUFBTXRDLEVBQUtILEVBQU1KLEVBQVFILEVBQVE1dkIsR0FDMUYsSUFBSXJCLEVBQVFvd0IsS0FDUkosRUFBU2h3QixFQUFNZ3dCLE9BQ2Y1dUIsRUFBU3BCLEVBQU1vQixPQUVmODRCLEVBQW9CNzRCLEVBQU8sT0FDM0I4NEIsRUFBZTk0QixFQUFPLE9BQ3RCKzRCLEVBQWUvNEIsRUFBTyxTQUN0Qmc1QixFQUFhaDVCLEVBQU8sU0FDcEJpNUIsRUFBWWo1QixFQUFPLFNBQ25CazVCLEVBQWFsNUIsRUFBTyxTQUNwQm01QixFQUFjbjVCLEVBQU8sTUFDckI4MkIsRUFBYTkyQixFQUFPLE1BRXhCLFNBQVNWLEVBQVcwdEIsR0FDbEIsT0FBUTRDLEVBQU81QyxHQUFRQSxFQUFPNkwsRUFDeEI5SSxFQUFPL0MsR0FBUUEsRUFBTzhMLEVBQ3RCM0ksRUFBS25ELEdBQVFBLEVBQU8rTCxFQUNwQnpJLEVBQUl0RCxHQUFRQSxFQUFPZ00sRUFDbkI5SCxFQUFNbEUsR0FBUUEsRUFBUTRGLEVBQUs1RixHQUFRQSxFQUFPaU0sRUFBWUMsRUFDdEQ1SCxFQUFLdEUsR0FBUUEsRUFBT21NLEVBQ3BCckMsR0FBWTlKLEdBOEJwQixPQTNCQXJ1QixFQUFNZ3dCLE9BQVMsU0FBU2x3QixHQUN0QixPQUFPLElBQUl5ZixLQUFLeVEsRUFBT2x3QixLQUd6QkUsRUFBTW9CLE9BQVMsU0FBU2dDLEdBQ3RCLE9BQU8vRCxVQUFVdkQsT0FBU3NGLEVBQU81QixNQUFNUixLQUFLb0UsRUFBR3JELEtBQVdxQixJQUFTK0MsSUFBSWtxQixLQUd6RXJ1QixFQUFNbUIsTUFBUSxTQUFTNmQsR0FDckIsSUFBSWhqQixFQUFJb0YsSUFDUixPQUFPRCxFQUFNbkYsRUFBRSxHQUFJQSxFQUFFQSxFQUFFRixPQUFTLEdBQWdCLE1BQVprakIsRUFBbUIsR0FBS0EsSUFHOURoZixFQUFNVyxXQUFhLFNBQVMzRCxFQUFPNHRCLEdBQ2pDLE9BQW9CLE1BQWJBLEVBQW9CanFCLEVBQWFVLEVBQU91cEIsSUFHakQ1cUIsRUFBTXl3QixLQUFPLFNBQVN6UixHQUNwQixJQUFJaGpCLEVBQUlvRixJQUVSLE9BREs0ZCxHQUFzQyxtQkFBbkJBLEVBQVN6ZixRQUFzQnlmLEVBQVdtVixFQUFhbjRCLEVBQUUsR0FBSUEsRUFBRUEsRUFBRUYsT0FBUyxHQUFnQixNQUFaa2pCLEVBQW1CLEdBQUtBLElBQ3ZIQSxFQUFXNWQsRUMxRFAsU0FBY0EsRUFBUTRkLEdBR25DLElBSUl0Z0IsRUFKQVEsRUFBSyxFQUNMc1EsR0FISnBPLEVBQVNBLEVBQU8xQixTQUdBNUQsT0FBUyxFQUNyQml0QixFQUFLM25CLEVBQU9sQyxHQUNadXBCLEVBQUtybkIsRUFBT29PLEdBVWhCLE9BUElpWixFQUFLTSxJQUNQcnFCLEVBQUlRLEVBQUlBLEVBQUtzUSxFQUFJQSxFQUFLOVEsRUFDdEJBLEVBQUlxcUIsRUFBSUEsRUFBS04sRUFBSUEsRUFBSy9wQixHQUd4QjBDLEVBQU9sQyxHQUFNOGYsRUFBUzdoQixNQUFNNHJCLEdBQzVCM25CLEVBQU9vTyxHQUFNd1AsRUFBUzFmLEtBQUttcEIsR0FDcEJybkIsRUQwQ29CcXZCLENBQUt6MEIsRUFBR2dqQixJQUFhaGYsR0FHaERBLEVBQU0yQixLQUFPLFdBQ1gsT0FBT0EsR0FBSzNCLEVBQU9pNkIsR0FBUzk0QixFQUFPZ3pCLEVBQWN4QixFQUFNSixFQUFPMEIsRUFBTXRDLEVBQUtILEVBQU1KLEVBQVFILEVBQVE1dkIsS0FHMUZyQixHRDlDTSxTQUF1Qm1PLEdBQ3BDMGQsR0RlYSxTQUFzQkEsR0FDbkMsSUFBSTRPLEVBQWtCNU8sRUFBTzZPLFNBQ3pCQyxFQUFjOU8sRUFBT3dDLEtBQ3JCdU0sRUFBYy9PLEVBQU81TCxLQUNyQjRhLEVBQWlCaFAsRUFBT2lQLFFBQ3hCQyxFQUFrQmxQLEVBQU9tUCxLQUN6QkMsRUFBdUJwUCxFQUFPcVAsVUFDOUJDLEVBQWdCdFAsRUFBT3VQLE9BQ3ZCQyxFQUFxQnhQLEVBQU95UCxZQUU1QkMsRUFBV25HLEdBQVN5RixHQUNwQlcsRUFBZW5HLEdBQWF3RixHQUM1QlksRUFBWXJHLEdBQVMyRixHQUNyQlcsRUFBZ0JyRyxHQUFhMEYsR0FDN0JZLEVBQWlCdkcsR0FBUzZGLEdBQzFCVyxFQUFxQnZHLEdBQWE0RixHQUNsQ1ksRUFBVXpHLEdBQVMrRixHQUNuQlcsRUFBY3pHLEdBQWE4RixHQUMzQlksRUFBZTNHLEdBQVNpRyxHQUN4QlcsRUFBbUIzRyxHQUFhZ0csR0FFaENZLEVBQVUsQ0FDWjdnQyxFQWtRRixTQUE0QlksR0FDMUIsT0FBT2kvQixFQUFxQmovQixFQUFFazJCLFdBbFE5QmdLLEVBcVFGLFNBQXVCbGdDLEdBQ3JCLE9BQU8rK0IsRUFBZ0IvK0IsRUFBRWsyQixXQXJRekI3MkIsRUF3UUYsU0FBMEJXLEdBQ3hCLE9BQU9xL0IsRUFBbUJyL0IsRUFBRXkyQixhQXhRNUIwSixFQTJRRixTQUFxQm5nQyxHQUNuQixPQUFPbS9CLEVBQWNuL0IsRUFBRXkyQixhQTNRdkJodUIsRUFBSyxLQUNMekksRUFBSys2QixHQUNMajhCLEVBQUtpOEIsR0FDTHg3QixFQUFLKzdCLEdBQ0xoYixFQUFLOGIsR0FDTGdFLEVBQUs5RCxHQUNMaEUsRUFBSzBDLEdBQ0xxRixFQUFLcEYsR0FDTHQ0QixFQUFLdTRCLEdBQ0x6QyxFQUFLNEMsR0FDTGg1QixFQUFLazVCLEdBQ0xoRCxFQUFLaUQsR0FDTDE0QixFQWtRRixTQUFzQjlDLEdBQ3BCLE9BQU82K0IsSUFBaUI3K0IsRUFBRTAxQixZQUFjLE1BbFF4Q2hQLEVBcVFGLFNBQXVCMW1CLEdBQ3JCLE9BQU8sS0FBT0EsRUFBRXkyQixXQUFhLElBclE3Qm9FLEVBQUtrRCxHQUNMeDdCLEVBQUt5N0IsR0FDTHhGLEVBQUtpRCxHQUNMdEgsRUFBS3VILEdBQ0xqQyxFQUFLa0MsR0FDTGhDLEVBQUtvQyxHQUNMdk4sRUFBS3dOLEdBQ0xuQyxFQUFLb0MsR0FDTHQ4QixFQUFLLEtBQ0xnd0IsRUFBSyxLQUNMN3JCLEVBQUtxNEIsR0FDTG1FLEVBQUtqRSxHQUNMcEMsRUFBS3NDLEdBQ0wsSUFBS3VCLElBR0h5QyxFQUFhLENBQ2ZuaEMsRUF1UEYsU0FBK0JZLEdBQzdCLE9BQU9pL0IsRUFBcUJqL0IsRUFBRXMzQixjQXZQOUI0SSxFQTBQRixTQUEwQmxnQyxHQUN4QixPQUFPKytCLEVBQWdCLytCLEVBQUVzM0IsY0ExUHpCajRCLEVBNlBGLFNBQTZCVyxHQUMzQixPQUFPcS9CLEVBQW1Cci9CLEVBQUUyM0IsZ0JBN1A1QndJLEVBZ1FGLFNBQXdCbmdDLEdBQ3RCLE9BQU9tL0IsRUFBY24vQixFQUFFMjNCLGdCQWhRdkJsdkIsRUFBSyxLQUNMekksRUFBS3c4QixHQUNMMTlCLEVBQUswOUIsR0FDTGo5QixFQUFLdTlCLEdBQ0x4YyxFQUFLb2QsR0FDTDBDLEVBQUt4QyxHQUNMdEYsRUFBS21FLEdBQ0w0RCxFQUFLM0QsR0FDTC81QixFQUFLZzZCLEdBQ0xsRSxFQUFLbUUsR0FDTHY2QixFQUFLMDZCLEdBQ0x4RSxFQUFLeUUsR0FDTGw2QixFQXVQRixTQUF5QjlDLEdBQ3ZCLE9BQU82K0IsSUFBaUI3K0IsRUFBRWczQixlQUFpQixNQXZQM0N0USxFQTBQRixTQUEwQjFtQixHQUN4QixPQUFPLEtBQU9BLEVBQUUyM0IsY0FBZ0IsSUExUGhDa0QsRUFBS2tELEdBQ0x4N0IsRUFBS3k3QixHQUNMeEYsRUFBS3lFLEdBQ0w5SSxFQUFLK0ksR0FDTHpELEVBQUsyRCxHQUNMekQsRUFBSzJELEdBQ0w5TyxFQUFLK08sR0FDTDFELEVBQUsyRCxHQUNMNzlCLEVBQUssS0FDTGd3QixFQUFLLEtBQ0w3ckIsRUFBSzI1QixHQUNMNkMsRUFBSzNDLEdBQ0wxRCxFQUFLNEQsR0FDTCxJQUFLQyxJQUdIMEMsRUFBUyxDQUNYcGhDLEVBNEpGLFNBQTJCWSxFQUFHaU8sRUFBUTdOLEdBQ3BDLElBQUlnQyxFQUFJdTlCLEVBQWU1ZixLQUFLOVIsRUFBT3ZLLE1BQU10RCxJQUN6QyxPQUFPZ0MsR0FBS3BDLEVBQUV3dUIsRUFBSW9SLEVBQW1CcDNCLElBQUlwRyxFQUFFLEdBQUcwZCxlQUFnQjFmLEVBQUlnQyxFQUFFLEdBQUd0QyxTQUFXLEdBN0psRm9nQyxFQWdLRixTQUFzQmxnQyxFQUFHaU8sRUFBUTdOLEdBQy9CLElBQUlnQyxFQUFJcTlCLEVBQVUxZixLQUFLOVIsRUFBT3ZLLE1BQU10RCxJQUNwQyxPQUFPZ0MsR0FBS3BDLEVBQUV3dUIsRUFBSWtSLEVBQWNsM0IsSUFBSXBHLEVBQUUsR0FBRzBkLGVBQWdCMWYsRUFBSWdDLEVBQUUsR0FBR3RDLFNBQVcsR0FqSzdFVCxFQW9LRixTQUF5QlcsRUFBR2lPLEVBQVE3TixHQUNsQyxJQUFJZ0MsRUFBSTI5QixFQUFhaGdCLEtBQUs5UixFQUFPdkssTUFBTXRELElBQ3ZDLE9BQU9nQyxHQUFLcEMsRUFBRXFDLEVBQUkyOUIsRUFBaUJ4M0IsSUFBSXBHLEVBQUUsR0FBRzBkLGVBQWdCMWYsRUFBSWdDLEVBQUUsR0FBR3RDLFNBQVcsR0FyS2hGcWdDLEVBd0tGLFNBQW9CbmdDLEVBQUdpTyxFQUFRN04sR0FDN0IsSUFBSWdDLEVBQUl5OUIsRUFBUTlmLEtBQUs5UixFQUFPdkssTUFBTXRELElBQ2xDLE9BQU9nQyxHQUFLcEMsRUFBRXFDLEVBQUl5OUIsRUFBWXQzQixJQUFJcEcsRUFBRSxHQUFHMGQsZUFBZ0IxZixFQUFJZ0MsRUFBRSxHQUFHdEMsU0FBVyxHQXpLM0UySSxFQTRLRixTQUE2QnpJLEVBQUdpTyxFQUFRN04sR0FDdEMsT0FBT3FnQyxFQUFlemdDLEVBQUd5K0IsRUFBaUJ4d0IsRUFBUTdOLElBNUtsREosRUFBS282QixHQUNMdDdCLEVBQUtzN0IsR0FDTDc2QixFQUFLbTdCLEdBQ0xwYSxFQUFLeVosR0FDTHFHLEVBQUt0RyxHQUNMeEIsRUFBS2dDLEdBQ0wrRixFQUFLL0YsR0FDTDMzQixFQUFLMDNCLEdBQ0w1QixFQUFLZ0MsR0FDTHA0QixFQUFLODNCLEdBQ0w1QixFQUFLZ0MsR0FDTHozQixFQXVJRixTQUFxQjlDLEVBQUdpTyxFQUFRN04sR0FDOUIsSUFBSWdDLEVBQUltOUIsRUFBU3hmLEtBQUs5UixFQUFPdkssTUFBTXRELElBQ25DLE9BQU9nQyxHQUFLcEMsRUFBRThDLEVBQUkwOEIsRUFBYWgzQixJQUFJcEcsRUFBRSxHQUFHMGQsZUFBZ0IxZixFQUFJZ0MsRUFBRSxHQUFHdEMsU0FBVyxHQXhJNUU0bUIsRUFBS3dULEdBQ0xXLEVBQUtELEdBQ0xyNEIsRUFBS3U0QixHQUNMdEMsRUFBS2dDLEdBQ0xyRyxFQUFLb0YsR0FDTEUsRUFBS0QsR0FDTEcsRUFBS0QsR0FDTGxMLEVBQUs4SyxHQUNMTyxFQUFLRCxHQUNMajZCLEVBMEpGLFNBQXlCSyxFQUFHaU8sRUFBUTdOLEdBQ2xDLE9BQU9xZ0MsRUFBZXpnQyxFQUFHMitCLEVBQWExd0IsRUFBUTdOLElBMUo5Q3V2QixFQTZKRixTQUF5QjN2QixFQUFHaU8sRUFBUTdOLEdBQ2xDLE9BQU9xZ0MsRUFBZXpnQyxFQUFHNCtCLEVBQWEzd0IsRUFBUTdOLElBN0o5QzBELEVBQUtpMkIsR0FDTHVHLEVBQUt4RyxHQUNMRyxFQUFLRCxHQUNMLElBQUtXLElBV1AsU0FBUzVKLEVBQVVuQyxFQUFXcVIsR0FDNUIsT0FBTyxTQUFTNU4sR0FDZCxJQUlJNXBCLEVBQ0F5d0IsRUFDQTd6QixFQU5BNEksRUFBUyxHQUNUN04sR0FBSyxFQUNMdUMsRUFBSSxFQUNKUCxFQUFJd3NCLEVBQVU5dUIsT0FPbEIsSUFGTXV5QixhQUFnQjlPLE9BQU84TyxFQUFPLElBQUk5TyxNQUFNOE8sTUFFckNqeUIsRUFBSWdDLEdBQ3FCLEtBQTVCd3NCLEVBQVU2QyxXQUFXcnhCLEtBQ3ZCNk4sRUFBT3BGLEtBQUsrbEIsRUFBVWxyQixNQUFNZixFQUFHdkMsSUFDZ0IsT0FBMUM4NEIsRUFBTUosR0FBS3J3QixFQUFJbW1CLEVBQVU4UixTQUFTdGdDLEtBQWNxSSxFQUFJbW1CLEVBQVU4UixTQUFTdGdDLEdBQ3ZFODRCLEVBQVksTUFBTnp3QixFQUFZLElBQU0sS0FDekJwRCxFQUFTNDZCLEVBQVF4M0IsTUFBSUEsRUFBSXBELEVBQU9ndEIsRUFBTTZHLElBQzFDanJCLEVBQU9wRixLQUFLSixHQUNaOUYsRUFBSXZDLEVBQUksR0FLWixPQURBNk4sRUFBT3BGLEtBQUsrbEIsRUFBVWxyQixNQUFNZixFQUFHdkMsSUFDeEI2TixFQUFPdUQsS0FBSyxLQUl2QixTQUFTbXZCLEVBQVMvUixFQUFXcUwsR0FDM0IsT0FBTyxTQUFTaHNCLEdBQ2QsSUFFSWdxQixFQUFNdEMsRUFGTjMxQixFQUFJNDRCLEdBQVEsVUFBTTkyQixFQUFXLEdBR2pDLEdBRlEyK0IsRUFBZXpnQyxFQUFHNHVCLEVBQVczZ0IsR0FBVSxHQUFJLElBRTFDQSxFQUFPbk8sT0FBUSxPQUFPLEtBRy9CLEdBQUksTUFBT0UsRUFBRyxPQUFPLElBQUl1akIsS0FBS3ZqQixFQUFFNjZCLEdBQ2hDLEdBQUksTUFBTzc2QixFQUFHLE9BQU8sSUFBSXVqQixLQUFXLElBQU52akIsRUFBRXVDLEdBQVksTUFBT3ZDLEVBQUlBLEVBQUV5NEIsRUFBSSxJQVk3RCxHQVRJd0IsS0FBTyxNQUFPajZCLEtBQUlBLEVBQUVpNkIsRUFBSSxHQUd4QixNQUFPajZCLElBQUdBLEVBQUVzNEIsRUFBSXQ0QixFQUFFczRCLEVBQUksR0FBVyxHQUFOdDRCLEVBQUU4QyxRQUdyQmhCLElBQVI5QixFQUFFcUMsSUFBaUJyQyxFQUFFcUMsRUFBSSxNQUFPckMsRUFBSUEsRUFBRTBtQixFQUFJLEdBRzFDLE1BQU8xbUIsRUFBRyxDQUNaLEdBQUlBLEVBQUUyNUIsRUFBSSxHQUFLMzVCLEVBQUUyNUIsRUFBSSxHQUFJLE9BQU8sS0FDMUIsTUFBTzM1QixJQUFJQSxFQUFFd3VCLEVBQUksR0FDbkIsTUFBT3h1QixHQUMyQjIxQixHQUFwQ3NDLEVBQU9TLEdBQVFFLEdBQVE1NEIsRUFBRThELEVBQUcsRUFBRyxLQUFnQnd6QixZQUMvQ1csRUFBT3RDLEVBQU0sR0FBYSxJQUFSQSxFQUFZNkIsR0FBVWwwQixLQUFLMjBCLEdBQVFULEdBQVVTLEdBQy9EQSxFQUFPaEIsR0FBT2h6QixPQUFPZzBCLEVBQWtCLEdBQVhqNEIsRUFBRTI1QixFQUFJLElBQ2xDMzVCLEVBQUU4RCxFQUFJbTBCLEVBQUtMLGlCQUNYNTNCLEVBQUVxQyxFQUFJNDFCLEVBQUtOLGNBQ1gzM0IsRUFBRUEsRUFBSWk0QixFQUFLYixjQUFnQnAzQixFQUFFd3VCLEVBQUksR0FBSyxJQUVBbUgsR0FBdENzQyxFQUFPSSxHQUFVTyxHQUFRNTRCLEVBQUU4RCxFQUFHLEVBQUcsS0FBZ0JveUIsU0FDakQrQixFQUFPdEMsRUFBTSxHQUFhLElBQVJBLEVBQVl1RyxHQUFXNTRCLEtBQUsyMEIsR0FBUWlFLEdBQVdqRSxHQUNqRUEsRUFBT2tELEdBQVFsM0IsT0FBT2cwQixFQUFrQixHQUFYajRCLEVBQUUyNUIsRUFBSSxJQUNuQzM1QixFQUFFOEQsRUFBSW0wQixFQUFLdkIsY0FDWDEyQixFQUFFcUMsRUFBSTQxQixFQUFLeEIsV0FDWHoyQixFQUFFQSxFQUFJaTRCLEVBQUtuQyxXQUFhOTFCLEVBQUV3dUIsRUFBSSxHQUFLLFFBRTVCLE1BQU94dUIsR0FBSyxNQUFPQSxLQUN0QixNQUFPQSxJQUFJQSxFQUFFd3VCLEVBQUksTUFBT3h1QixFQUFJQSxFQUFFbTBCLEVBQUksRUFBSSxNQUFPbjBCLEVBQUksRUFBSSxHQUMzRDIxQixFQUFNLE1BQU8zMUIsRUFBSTA0QixHQUFRRSxHQUFRNTRCLEVBQUU4RCxFQUFHLEVBQUcsSUFBSXd6QixZQUFjZSxHQUFVTyxHQUFRNTRCLEVBQUU4RCxFQUFHLEVBQUcsSUFBSW95QixTQUN6RmwyQixFQUFFcUMsRUFBSSxFQUNOckMsRUFBRUEsRUFBSSxNQUFPQSxHQUFLQSxFQUFFd3VCLEVBQUksR0FBSyxFQUFVLEVBQU54dUIsRUFBRTY1QixHQUFTbEUsRUFBTSxHQUFLLEVBQUkzMUIsRUFBRXd1QixFQUFVLEVBQU54dUIsRUFBRXk1QixHQUFTOUQsRUFBTSxHQUFLLEdBS3pGLE1BQUksTUFBTzMxQixHQUNUQSxFQUFFczRCLEdBQUt0NEIsRUFBRWk2QixFQUFJLElBQU0sRUFDbkJqNkIsRUFBRXU0QixHQUFLdjRCLEVBQUVpNkIsRUFBSSxJQUNOdkIsR0FBUTE0QixJQUlWcTRCLEdBQVVyNEIsSUFJckIsU0FBU3lnQyxFQUFlemdDLEVBQUc0dUIsRUFBVzNnQixFQUFRdEwsR0FPNUMsSUFOQSxJQUdJOEYsRUFDQTJlLEVBSkFobkIsRUFBSSxFQUNKZ0MsRUFBSXdzQixFQUFVOXVCLE9BQ2R1QyxFQUFJNEwsRUFBT25PLE9BSVJNLEVBQUlnQyxHQUFHLENBQ1osR0FBSU8sR0FBS04sRUFBRyxPQUFRLEVBRXBCLEdBQVUsTUFEVm9HLEVBQUltbUIsRUFBVTZDLFdBQVdyeEIsT0FJdkIsR0FGQXFJLEVBQUltbUIsRUFBVThSLE9BQU90Z0MsT0FDckJnbkIsRUFBUW9aLEVBQU8vM0IsS0FBS3F3QixHQUFPbEssRUFBVThSLE9BQU90Z0MsS0FBT3FJLE1BQ25DOUYsRUFBSXlrQixFQUFNcG5CLEVBQUdpTyxFQUFRdEwsSUFBTSxFQUFJLE9BQVEsT0FDbEQsR0FBSThGLEdBQUt3RixFQUFPd2pCLFdBQVc5dUIsS0FDaEMsT0FBUSxFQUlaLE9BQU9BLEVBd0ZULE9Bek1BczlCLEVBQVF0Z0MsRUFBSW94QixFQUFVNE4sRUFBYXNCLEdBQ25DQSxFQUFRdFEsRUFBSW9CLEVBQVU2TixFQUFhcUIsR0FDbkNBLEVBQVF4M0IsRUFBSXNvQixFQUFVME4sRUFBaUJ3QixHQUN2Q00sRUFBVzVnQyxFQUFJb3hCLEVBQVU0TixFQUFhNEIsR0FDdENBLEVBQVc1USxFQUFJb0IsRUFBVTZOLEVBQWEyQixHQUN0Q0EsRUFBVzkzQixFQUFJc29CLEVBQVUwTixFQUFpQjhCLEdBb01uQyxDQUNMbDdCLE9BQVEsU0FBU3VwQixHQUNmLElBQUlydkIsRUFBSXd4QixFQUFVbkMsR0FBYSxHQUFJcVIsR0FFbkMsT0FEQTFnQyxFQUFFc2hCLFNBQVcsV0FBYSxPQUFPK04sR0FDMUJydkIsR0FFVDZuQixNQUFPLFNBQVN3SCxHQUNkLElBQUk5ckIsRUFBSTY5QixFQUFTL1IsR0FBYSxJQUFJLEdBRWxDLE9BREE5ckIsRUFBRStkLFNBQVcsV0FBYSxPQUFPK04sR0FDMUI5ckIsR0FFVDg5QixVQUFXLFNBQVNoUyxHQUNsQixJQUFJcnZCLEVBQUl3eEIsRUFBVW5DLEdBQWEsR0FBSTJSLEdBRW5DLE9BREFoaEMsRUFBRXNoQixTQUFXLFdBQWEsT0FBTytOLEdBQzFCcnZCLEdBRVRzaEMsU0FBVSxTQUFTalMsR0FDakIsSUFBSTlyQixFQUFJNjlCLEVBQVMvUixHQUFhLElBQUksR0FFbEMsT0FEQTlyQixFQUFFK2QsU0FBVyxXQUFhLE9BQU8rTixHQUMxQjlyQixJQzFXRjZ1QixDQUFheGYsR0FDdEIwbUIsR0FBYWhKLEdBQU94cUIsT0FidEJ5N0IsQ0FBYyxDQUNacEMsU0FBVSxTQUNWck0sS0FBTSxhQUNOcE8sS0FBTSxlQUNONmEsUUFBUyxDQUFDLEtBQU0sTUFDaEJFLEtBQU0sQ0FBQyxTQUFVLFNBQVUsVUFBVyxZQUFhLFdBQVksU0FBVSxZQUN6RUUsVUFBVyxDQUFDLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLE9BQ3RERSxPQUFRLENBQUMsVUFBVyxXQUFZLFFBQVMsUUFBUyxNQUFPLE9BQVEsT0FBUSxTQUFVLFlBQWEsVUFBVyxXQUFZLFlBQ3ZIRSxZQUFhLENBQUMsTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLFNHcUN0RixJQTFCWXlCLEdBMEJSQyxJQTFCUUQsR0NuQkosU0FBU24vQixHQUN0QixJQUFJUSxFQUFJUixFQUFPOUIsT0FBUyxFQUN4QixPQUFPLFNBQVM0QyxHQUNkLElBQUl0QyxFQUFJc0MsR0FBSyxFQUFLQSxFQUFJLEVBQUtBLEdBQUssR0FBS0EsRUFBSSxFQUFHTixFQUFJLEdBQUszQixLQUFLVSxNQUFNdUIsRUFBSU4sR0FDaEU2K0IsRUFBS3IvQixFQUFPeEIsR0FDWjhnQyxFQUFLdC9CLEVBQU94QixFQUFJLEdBQ2hCK2dDLEVBQUsvZ0MsRUFBSSxFQUFJd0IsRUFBT3hCLEVBQUksR0FBSyxFQUFJNmdDLEVBQUtDLEVBQ3RDRSxFQUFLaGhDLEVBQUlnQyxFQUFJLEVBQUlSLEVBQU94QixFQUFJLEdBQUssRUFBSThnQyxFQUFLRCxFQUM5QyxPQWhCRyxTQUFlcGYsRUFBSXNmLEVBQUlGLEVBQUlDLEVBQUlFLEdBQ3BDLElBQUl0ZixFQUFLRCxFQUFLQSxFQUFJd2YsRUFBS3ZmLEVBQUtELEVBQzVCLFFBQVMsRUFBSSxFQUFJQSxFQUFLLEVBQUlDLEVBQUt1ZixHQUFNRixHQUM5QixFQUFJLEVBQUlyZixFQUFLLEVBQUl1ZixHQUFNSixHQUN2QixFQUFJLEVBQUlwZixFQUFLLEVBQUlDLEVBQUssRUFBSXVmLEdBQU1ILEVBQ2pDRyxFQUFLRCxHQUFNLEVBV1JFLEVBQU81K0IsRUFBSXRDLEVBQUlnQyxHQUFLQSxFQUFHKytCLEVBQUlGLEVBQUlDLEVBQUlFLEtEWXJDLFNBQVNHLEdBQ2QsSUFJSW5oQyxFQUFHd2YsRUFKSHhkLEVBQUltL0IsRUFBT3poQyxPQUNYdWdCLEVBQUksSUFBSTdjLE1BQU1wQixHQUNka2UsRUFBSSxJQUFJOWMsTUFBTXBCLEdBQ2QvQyxFQUFJLElBQUltRSxNQUFNcEIsR0FFbEIsSUFBS2hDLEVBQUksRUFBR0EsRUFBSWdDLElBQUtoQyxFQUNuQndmLEVBQVFxRyxHQUFTc2IsRUFBT25oQyxJQUN4QmlnQixFQUFFamdCLEdBQUt3ZixFQUFNUyxHQUFLLEVBQ2xCQyxFQUFFbGdCLEdBQUt3ZixFQUFNVSxHQUFLLEVBQ2xCamhCLEVBQUVlLEdBQUt3ZixFQUFNdmdCLEdBQUssRUFNcEIsT0FKQWdoQixFQUFJMGdCLEdBQU8xZ0IsR0FDWEMsRUFBSXlnQixHQUFPemdCLEdBQ1hqaEIsRUFBSTBoQyxHQUFPMWhDLEdBQ1h1Z0IsRUFBTVksUUFBVSxFQUNULFNBQVM5ZCxHQUlkLE9BSEFrZCxFQUFNUyxFQUFJQSxFQUFFM2QsR0FDWmtkLEVBQU1VLEVBQUlBLEVBQUU1ZCxHQUNaa2QsRUFBTXZnQixFQUFJQSxFQUFFcUQsR0FDTGtkLEVBQVEsTUU3Q1Y0aEIsR0FBUyxJQUFJaCtCLE1BQU0sR0FBR29GLE9BQy9CLHFCQUNBLDJCQUNBLGlDQUNBLHVDQUNBLDZDQUNBLG1EQUNBLHlEQUNBLCtEQUNBLHNFQUNBVCxLQ2JhLFNBQVN5bUIsR0FFdEIsSUFEQSxJQUFJeHNCLEVBQUl3c0IsRUFBVTl1QixPQUFTLEVBQUksRUFBR3loQyxFQUFTLElBQUkvOUIsTUFBTXBCLEdBQUloQyxFQUFJLEVBQ3REQSxFQUFJZ0MsR0FBR20vQixFQUFPbmhDLEdBQUssSUFBTXd1QixFQUFVbHJCLE1BQVUsRUFBSnRELEVBQWEsSUFBSkEsR0FDekQsT0FBT21oQyxLQ0hNLFlBQVM1aEMsR0FDdEIsT0FBTyxXQUNMLE9BQU9BLEdDQUk2aEMsQ0FBQUEsSUFBVUMsR0FBb0JELEVBQU9BLEVBQU8xaEMsT0FBUyxLSGFyRDRoQyxDQUFLRixJSWZiLElDRUtHLEdBZUFDLEdBYUFDLEdEOUJEbmdDLEdBQU1qQixLQUFLaUIsSUFDWCtnQixHQUFRaGlCLEtBQUtnaUIsTUFDYkMsR0FBTWppQixLQUFLaWlCLElBQ1h6aEIsR0FBTVIsS0FBS1EsSUFDWGUsR0FBTXZCLEtBQUt1QixJQUNYMmdCLEdBQU1saUIsS0FBS2tpQixJQUNYamlCLEdBQU9ELEtBQUtDLEtBR1pnckIsR0FBS2pyQixLQUFLaWhCLEdBQ1ZvZ0IsR0FBU3BXLEdBQUssRUFDZEMsR0FBTSxFQUFJRCxHQUVkLFNBQVNrQyxHQUFLanVCLEdBQ25CLE9BQU9BLEVBQUksRUFBSSxFQUFJQSxHQUFLLEVBQUkrckIsR0FBS2pyQixLQUFLbXRCLEtBQUtqdUIsR0FHdEMsU0FBU29pQyxHQUFLcGlDLEdBQ25CLE9BQU9BLEdBQUssRUFBSW1pQyxHQUFTbmlDLElBQU0sR0FBS21pQyxHQUFTcmhDLEtBQUtzaEMsS0FBS3BpQyxHRWR6RCxTQUFTcWlDLEdBQWVoaUMsR0FDdEIsT0FBT0EsRUFBRWlpQyxZQUdYLFNBQVNDLEdBQWVsaUMsR0FDdEIsT0FBT0EsRUFBRW1pQyxZQUdYLFNBQVNDLEdBQWNwaUMsR0FDckIsT0FBT0EsRUFBRXFpQyxXQUdYLFNBQVNDLEdBQVl0aUMsR0FDbkIsT0FBT0EsRUFBRXVpQyxTQUdYLFNBQVNDLEdBQVl4aUMsR0FDbkIsT0FBT0EsR0FBS0EsRUFBRXlpQyxTQUdoQixTQUFTQyxHQUFVM1YsRUFBSUMsRUFBSVAsRUFBSUMsRUFBSUUsRUFBSUMsRUFBSThWLEVBQUlDLEdBQzdDLElBQUlDLEVBQU1wVyxFQUFLTSxFQUFJK1YsRUFBTXBXLEVBQUtNLEVBQzFCK1YsRUFBTUosRUFBSy9WLEVBQUlvVyxFQUFNSixFQUFLL1YsRUFDMUJucUIsRUFBSXNnQyxFQUFNSCxFQUFNRSxFQUFNRCxFQUMxQixLQUFJcGdDLEVBQUlBLEVGcEJXLE9Fc0JuQixNQUFPLENBQUNxcUIsR0FEUnJxQixHQUFLcWdDLEdBQU8vVixFQUFLSCxHQUFNbVcsR0FBT2pXLEVBQUtILElBQU9scUIsR0FDekJtZ0MsRUFBSzdWLEVBQUt0cUIsRUFBSW9nQyxHQUtqQyxTQUFTRyxHQUFlbFcsRUFBSUMsRUFBSVAsRUFBSUMsRUFBSTBHLEVBQUk4UCxFQUFJN1UsR0FDOUMsSUFBSWxCLEVBQU1KLEVBQUtOLEVBQ1hXLEVBQU1KLEVBQUtOLEVBQ1g5c0IsR0FBTXl1QixFQUFLNlUsR0FBTUEsR0FBTXhpQyxHQUFLeXNCLEVBQU1BLEVBQU1DLEVBQU1BLEdBQzlDK1YsRUFBS3ZqQyxFQUFLd3RCLEVBQ1ZnVyxHQUFNeGpDLEVBQUt1dEIsRUFDWGtXLEVBQU10VyxFQUFLb1csRUFDWEcsRUFBTXRXLEVBQUtvVyxFQUNYUCxFQUFNcFcsRUFBSzBXLEVBQ1hMLEVBQU1wVyxFQUFLMFcsRUFDWEcsR0FBT0YsRUFBTVIsR0FBTyxFQUNwQlcsR0FBT0YsRUFBTVIsR0FBTyxFQUNwQjNVLEVBQUswVSxFQUFNUSxFQUNYalYsRUFBSzBVLEVBQU1RLEVBQ1hHLEVBQUt0VixFQUFLQSxFQUFLQyxFQUFLQSxFQUNwQi9OLEVBQUkrUyxFQUFLOFAsRUFDVFEsRUFBSUwsRUFBTVAsRUFBTUQsRUFBTVMsRUFDdEJ0akMsR0FBS291QixFQUFLLEdBQUssRUFBSSxHQUFLMXRCLEdBQUtPLEdBQUksRUFBR29mLEVBQUlBLEVBQUlvakIsRUFBS0MsRUFBSUEsSUFDckRDLEdBQU9ELEVBQUl0VixFQUFLRCxFQUFLbnVCLEdBQUt5akMsRUFDMUJHLElBQVFGLEVBQUl2VixFQUFLQyxFQUFLcHVCLEdBQUt5akMsRUFDM0JJLEdBQU9ILEVBQUl0VixFQUFLRCxFQUFLbnVCLEdBQUt5akMsRUFDMUJLLElBQVFKLEVBQUl2VixFQUFLQyxFQUFLcHVCLEdBQUt5akMsRUFDM0JNLEVBQU1KLEVBQU1KLEVBQ1pTLEVBQU1KLEVBQU1KLEVBQ1pTLEVBQU1KLEVBQU1OLEVBQ1pXLEVBQU1KLEVBQU1OLEVBTWhCLE9BRklPLEVBQU1BLEVBQU1DLEVBQU1BLEVBQU1DLEVBQU1BLEVBQU1DLEVBQU1BLElBQUtQLEVBQU1FLEVBQUtELEVBQU1FLEdBRTdELENBQ0xLLEdBQUlSLEVBQ0pTLEdBQUlSLEVBQ0p6VyxLQUFNZ1csRUFDTi9WLEtBQU1nVyxFQUNOQyxJQUFLTSxHQUFPdlEsRUFBSy9TLEVBQUksR0FDckJpakIsSUFBS00sR0FBT3hRLEVBQUsvUyxFQUFJLElBSVYsY0FDYixJQUFJNGhCLEVBQWNELEdBQ2RHLEVBQWNELEdBQ2RtQyxFQUFlbHhCLEdBQVMsR0FDeEJteEIsRUFBWSxLQUNaakMsRUFBYUQsR0FDYkcsRUFBV0QsR0FDWEcsRUFBV0QsR0FDWHQ5QixFQUFVLEtBRWQsU0FBUzZvQixJQUNQLElBQUl3VyxFQUNBbGtCLEVBQ0E4UyxHQUFNOE8sRUFBWTlpQyxNQUFNa0YsS0FBTWhCLFdBQzlCK3ZCLEdBQU0rTyxFQUFZaGpDLE1BQU1rRixLQUFNaEIsV0FDOUIycUIsRUFBS3FVLEVBQVdsakMsTUFBTWtGLEtBQU1oQixXQUFheStCLEdBQ3pDN1QsRUFBS3NVLEVBQVNwakMsTUFBTWtGLEtBQU1oQixXQUFheStCLEdBQ3ZDeFQsRUFBSzVzQixHQUFJdXNCLEVBQUtELEdBQ2RLLEVBQUtKLEVBQUtELEVBUWQsR0FOSzlvQixJQUFTQSxFQUFVcS9CLEVBQVMxK0IsTUFHN0J1dEIsRUFBS0QsSUFBSTlTLEVBQUkrUyxFQUFJQSxFQUFLRCxFQUFJQSxFQUFLOVMsR0FHN0IrUyxFRjlGVyxNRWlHWixHQUFJOUUsRUFBSzNDLEdGakdHLE1Fa0dmem1CLEVBQVFtbkIsT0FBTytHLEVBQUsxUSxHQUFJc0wsR0FBS29GLEVBQUt6USxHQUFJcUwsSUFDdEM5b0IsRUFBUTZvQixJQUFJLEVBQUcsRUFBR3FGLEVBQUlwRixFQUFJQyxHQUFLSSxHQUMzQjhFLEVGcEdXLFFFcUdianVCLEVBQVFtbkIsT0FBTzhHLEVBQUt6USxHQUFJdUwsR0FBS2tGLEVBQUt4USxHQUFJc0wsSUFDdEMvb0IsRUFBUTZvQixJQUFJLEVBQUcsRUFBR29GLEVBQUlsRixFQUFJRCxFQUFJSyxRQUs3QixDQUNILElBV0l6TSxFQUNBQyxFQVpBMmlCLEVBQU14VyxFQUNOeVcsRUFBTXhXLEVBQ055VyxFQUFNMVcsRUFDTjJXLEVBQU0xVyxFQUNOMlcsRUFBTXRXLEVBQ051VyxFQUFNdlcsRUFDTndXLEVBQUtyQyxFQUFTdGpDLE1BQU1rRixLQUFNaEIsV0FBYSxFQUN2QzBoQyxFQUFNRCxFRm5ISyxRRW1IYVIsR0FBYUEsRUFBVW5sQyxNQUFNa0YsS0FBTWhCLFdBQWEzQyxHQUFLeXlCLEVBQUtBLEVBQUtDLEVBQUtBLElBQzVGOFAsRUFBS2xoQyxHQUFJTixHQUFJMHhCLEVBQUtELEdBQU0sR0FBSWtSLEVBQWFsbEMsTUFBTWtGLEtBQU1oQixZQUNyRDJoQyxFQUFNOUIsRUFDTitCLEVBQU0vQixFQUtWLEdBQUk2QixFRjNIVyxNRTJIRyxDQUNoQixJQUFJRyxFQUFLbkQsR0FBS2dELEVBQUs1UixFQUFLeFEsR0FBSW1pQixJQUN4QkssRUFBS3BELEdBQUtnRCxFQUFLM1IsRUFBS3pRLEdBQUltaUIsS0FDdkJGLEdBQVksRUFBTE0sR0Y5SEMsT0U4SHVDUixHQUFyQlEsR0FBTzdXLEVBQUssR0FBSyxFQUFlc1csR0FBT08sSUFDakVOLEVBQU0sRUFBR0YsRUFBTUMsR0FBTzNXLEVBQUtDLEdBQU0sSUFDakM0VyxHQUFZLEVBQUxNLEdGaElDLE9FZ0l1Q1gsR0FBckJXLEdBQU85VyxFQUFLLEdBQUssRUFBZW9XLEdBQU9VLElBQ2pFTixFQUFNLEVBQUdMLEVBQU1DLEdBQU96VyxFQUFLQyxHQUFNLEdBR3hDLElBQUlkLEVBQU1pRyxFQUFLMVEsR0FBSThoQixHQUNmcFgsRUFBTWdHLEVBQUt6USxHQUFJNmhCLEdBQ2YzQixFQUFNMVAsRUFBS3pRLEdBQUlpaUIsR0FDZjdCLEVBQU0zUCxFQUFLeFEsR0FBSWdpQixHQUduQixHQUFJekIsRUYxSVcsTUUwSUcsQ0FDaEIsSUFJSWtDLEVBSkEvQixFQUFNalEsRUFBSzFRLEdBQUkraEIsR0FDZm5CLEVBQU1sUSxFQUFLelEsR0FBSThoQixHQUNmbEIsRUFBTXBRLEVBQUt6USxHQUFJZ2lCLEdBQ2ZsQixFQUFNclEsRUFBS3hRLEdBQUkraEIsR0FJbkIsR0FBSXBXLEVBQUs1QyxLQUFPMFosRUFBSzFDLEdBQVV2VixFQUFLQyxFQUFLbVcsRUFBS0MsRUFBS0gsRUFBS0MsRUFBS1QsRUFBS0MsSUFBTyxDQUN2RSxJQUFJdUMsRUFBS2xZLEVBQU1pWSxFQUFHLEdBQ2RFLEVBQUtsWSxFQUFNZ1ksRUFBRyxHQUNkRyxFQUFLbEMsRUFBTStCLEVBQUcsR0FDZEksRUFBS2xDLEVBQU04QixFQUFHLEdBQ2RLLEVBQUssRUFBSTlpQixHQUFJaUwsSUFBTXlYLEVBQUtFLEVBQUtELEVBQUtFLElBQU85a0MsR0FBSzJrQyxFQUFLQSxFQUFLQyxFQUFLQSxHQUFNNWtDLEdBQUs2a0MsRUFBS0EsRUFBS0MsRUFBS0EsS0FBUSxHQUMvRkUsRUFBS2hsQyxHQUFLMGtDLEVBQUcsR0FBS0EsRUFBRyxHQUFLQSxFQUFHLEdBQUtBLEVBQUcsSUFDekNKLEVBQU1oakMsR0FBSWtoQyxHQUFLL1AsRUFBS3VTLElBQU9ELEVBQUssSUFDaENSLEVBQU1qakMsR0FBSWtoQyxHQUFLOVAsRUFBS3NTLElBQU9ELEVBQUssS0FLOUJaLEVGL0pTLE1Fa0tOSSxFRmxLTSxPRW1LYnJqQixFQUFLcWhCLEdBQWVNLEVBQUtDLEVBQUtyVyxFQUFLQyxFQUFLZ0csRUFBSTZSLEVBQUs1VyxHQUNqRHhNLEVBQUtvaEIsR0FBZUksRUFBS0MsRUFBS1QsRUFBS0MsRUFBSzFQLEVBQUk2UixFQUFLNVcsR0FFakRucEIsRUFBUW1uQixPQUFPekssRUFBR3VpQixHQUFLdmlCLEVBQUd1TCxJQUFLdkwsRUFBR3dpQixHQUFLeGlCLEVBQUd3TCxLQUd0QzZYLEVBQU0vQixFQUFJaCtCLEVBQVE2b0IsSUFBSW5NLEVBQUd1aUIsR0FBSXZpQixFQUFHd2lCLEdBQUlhLEVBQUt4aUIsR0FBTWIsRUFBR3dMLElBQUt4TCxFQUFHdUwsS0FBTTFLLEdBQU1aLEVBQUd1TCxJQUFLdkwsRUFBR3NMLE1BQU9rQixJQUkxRm5wQixFQUFRNm9CLElBQUluTSxFQUFHdWlCLEdBQUl2aUIsRUFBR3dpQixHQUFJYSxFQUFLeGlCLEdBQU1iLEVBQUd3TCxJQUFLeEwsRUFBR3VMLEtBQU0xSyxHQUFNYixFQUFHMGhCLElBQUsxaEIsRUFBR3loQixNQUFPaFYsR0FDOUVucEIsRUFBUTZvQixJQUFJLEVBQUcsRUFBR3FGLEVBQUkzUSxHQUFNYixFQUFHd2lCLEdBQUt4aUIsRUFBRzBoQixJQUFLMWhCLEVBQUd1aUIsR0FBS3ZpQixFQUFHeWhCLEtBQU01Z0IsR0FBTVosRUFBR3VpQixHQUFLdmlCLEVBQUd5aEIsSUFBS3poQixFQUFHc2lCLEdBQUt0aUIsRUFBR3doQixNQUFPaFYsR0FDckducEIsRUFBUTZvQixJQUFJbE0sRUFBR3NpQixHQUFJdGlCLEVBQUd1aUIsR0FBSWEsRUFBS3hpQixHQUFNWixFQUFHeWhCLElBQUt6aEIsRUFBR3doQixLQUFNNWdCLEdBQU1aLEVBQUd1TCxJQUFLdkwsRUFBR3NMLE1BQU9rQixNQUs3RW5wQixFQUFRbW5CLE9BQU9jLEVBQUtDLEdBQU1sb0IsRUFBUTZvQixJQUFJLEVBQUcsRUFBR3FGLEVBQUlvUixFQUFLQyxHQUFNcFcsSUFyQjFDbnBCLEVBQVFtbkIsT0FBT2MsRUFBS0MsR0F5QnBDK0YsRUZ4TFMsT0V3TFV5UixFRnhMVixNRTJMTkksRUYzTE0sT0U0TGJwakIsRUFBS3FoQixHQUFlSixFQUFLQyxFQUFLTyxFQUFLQyxFQUFLblEsR0FBSzZSLEVBQUszVyxHQUNsRHhNLEVBQUtvaEIsR0FBZTlWLEVBQUtDLEVBQUttVyxFQUFLQyxFQUFLclEsR0FBSzZSLEVBQUszVyxHQUVsRG5wQixFQUFRcW5CLE9BQU8zSyxFQUFHdWlCLEdBQUt2aUIsRUFBR3VMLElBQUt2TCxFQUFHd2lCLEdBQUt4aUIsRUFBR3dMLEtBR3RDNFgsRUFBTTlCLEVBQUloK0IsRUFBUTZvQixJQUFJbk0sRUFBR3VpQixHQUFJdmlCLEVBQUd3aUIsR0FBSVksRUFBS3ZpQixHQUFNYixFQUFHd0wsSUFBS3hMLEVBQUd1TCxLQUFNMUssR0FBTVosRUFBR3VMLElBQUt2TCxFQUFHc0wsTUFBT2tCLElBSTFGbnBCLEVBQVE2b0IsSUFBSW5NLEVBQUd1aUIsR0FBSXZpQixFQUFHd2lCLEdBQUlZLEVBQUt2aUIsR0FBTWIsRUFBR3dMLElBQUt4TCxFQUFHdUwsS0FBTTFLLEdBQU1iLEVBQUcwaEIsSUFBSzFoQixFQUFHeWhCLE1BQU9oVixHQUM5RW5wQixFQUFRNm9CLElBQUksRUFBRyxFQUFHb0YsRUFBSTFRLEdBQU1iLEVBQUd3aUIsR0FBS3hpQixFQUFHMGhCLElBQUsxaEIsRUFBR3VpQixHQUFLdmlCLEVBQUd5aEIsS0FBTTVnQixHQUFNWixFQUFHdWlCLEdBQUt2aUIsRUFBR3loQixJQUFLemhCLEVBQUdzaUIsR0FBS3RpQixFQUFHd2hCLEtBQU1oVixHQUNwR25wQixFQUFRNm9CLElBQUlsTSxFQUFHc2lCLEdBQUl0aUIsRUFBR3VpQixHQUFJWSxFQUFLdmlCLEdBQU1aLEVBQUd5aEIsSUFBS3poQixFQUFHd2hCLEtBQU01Z0IsR0FBTVosRUFBR3VMLElBQUt2TCxFQUFHc0wsTUFBT2tCLEtBSzdFbnBCLEVBQVE2b0IsSUFBSSxFQUFHLEVBQUdvRixFQUFJd1IsRUFBS0QsRUFBS3JXLEdBckJJbnBCLEVBQVFxbkIsT0FBT3NXLEVBQUtDLFFBMUYxQzU5QixFQUFRbW5CLE9BQU8sRUFBRyxHQW9IdkMsR0FGQW5uQixFQUFRb25CLFlBRUppWSxFQUFRLE9BQU9yL0IsRUFBVSxLQUFNcS9CLEVBQVMsSUFBTSxLQXlDcEQsT0F0Q0F4VyxFQUFJNFgsU0FBVyxXQUNiLElBQUl0bEIsSUFBTTRoQixFQUFZOWlDLE1BQU1rRixLQUFNaEIsYUFBYzgrQixFQUFZaGpDLE1BQU1rRixLQUFNaEIsWUFBYyxFQUNsRmpFLElBQU1pakMsRUFBV2xqQyxNQUFNa0YsS0FBTWhCLGFBQWNrL0IsRUFBU3BqQyxNQUFNa0YsS0FBTWhCLFlBQWMsRUFBSXFvQixHQUFLLEVBQzNGLE1BQU8sQ0FBQ2hKLEdBQUl0akIsR0FBS2loQixFQUFHc0MsR0FBSXZqQixHQUFLaWhCLElBRy9CME4sRUFBSWtVLFlBQWMsU0FBUzc2QixHQUN6QixPQUFPL0QsVUFBVXZELFFBQVVtaUMsRUFBMkIsbUJBQU43NkIsRUFBbUJBLEVBQUkrTCxJQUFVL0wsR0FBSTJtQixHQUFPa1UsR0FHOUZsVSxFQUFJb1UsWUFBYyxTQUFTLzZCLEdBQ3pCLE9BQU8vRCxVQUFVdkQsUUFBVXFpQyxFQUEyQixtQkFBTi82QixFQUFtQkEsRUFBSStMLElBQVUvTCxHQUFJMm1CLEdBQU9vVSxHQUc5RnBVLEVBQUlzVyxhQUFlLFNBQVNqOUIsR0FDMUIsT0FBTy9ELFVBQVV2RCxRQUFVdWtDLEVBQTRCLG1CQUFOajlCLEVBQW1CQSxFQUFJK0wsSUFBVS9MLEdBQUkybUIsR0FBT3NXLEdBRy9GdFcsRUFBSXVXLFVBQVksU0FBU2w5QixHQUN2QixPQUFPL0QsVUFBVXZELFFBQVV3a0MsRUFBaUIsTUFBTGw5QixFQUFZLEtBQW9CLG1CQUFOQSxFQUFtQkEsRUFBSStMLElBQVUvTCxHQUFJMm1CLEdBQU91VyxHQUcvR3ZXLEVBQUlzVSxXQUFhLFNBQVNqN0IsR0FDeEIsT0FBTy9ELFVBQVV2RCxRQUFVdWlDLEVBQTBCLG1CQUFOajdCLEVBQW1CQSxFQUFJK0wsSUFBVS9MLEdBQUkybUIsR0FBT3NVLEdBRzdGdFUsRUFBSXdVLFNBQVcsU0FBU243QixHQUN0QixPQUFPL0QsVUFBVXZELFFBQVV5aUMsRUFBd0IsbUJBQU5uN0IsRUFBbUJBLEVBQUkrTCxJQUFVL0wsR0FBSTJtQixHQUFPd1UsR0FHM0Z4VSxFQUFJMFUsU0FBVyxTQUFTcjdCLEdBQ3RCLE9BQU8vRCxVQUFVdkQsUUFBVTJpQyxFQUF3QixtQkFBTnI3QixFQUFtQkEsRUFBSStMLElBQVUvTCxHQUFJMm1CLEdBQU8wVSxHQUczRjFVLEVBQUk3b0IsUUFBVSxTQUFTa0MsR0FDckIsT0FBTy9ELFVBQVV2RCxRQUFXb0YsRUFBZSxNQUFMa0MsRUFBWSxLQUFPQSxFQUFJMm1CLEdBQU83b0IsR0FHL0Q2b0IsRUNqUU0sWUFBU3B1QixHQUN0QixNQUFvQixpQkFBTkEsR0FBa0IsV0FBWUEsRUFDeENBLEVBQ0E2RCxNQUFNUixLQUFLckQsR0NMakIsU0FBU2ltQyxHQUFPMWdDLEdBQ2RiLEtBQUt3aEMsU0FBVzNnQyxFQTJCSCxZQUFTQSxHQUN0QixPQUFPLElBQUkwZ0MsR0FBTzFnQyxHQzdCYixTQUFTdkYsR0FBRW1ELEdBQ2hCLE9BQU9BLEVBQUUsR0FHSixTQUFTZ0IsR0FBRWhCLEdBQ2hCLE9BQU9BLEVBQUUsR0NMSSxZQUFTMUQsRUFBR0MsR0FDekIsT0FBT0EsRUFBSUQsR0FBSyxFQUFJQyxFQUFJRCxFQUFJLEVBQUlDLEdBQUtELEVBQUksRUFBSUUsSUNEaEMsWUFBU1UsR0FDdEIsT0FBT0EsRUhHVDRsQyxHQUFPamlDLFVBQVksQ0FDakJtaUMsVUFBVyxXQUNUemhDLEtBQUswaEMsTUFBUSxHQUVmQyxRQUFTLFdBQ1AzaEMsS0FBSzBoQyxNQUFRem1DLEtBRWYybUMsVUFBVyxXQUNUNWhDLEtBQUs2aEMsT0FBUyxHQUVoQkMsUUFBUyxZQUNIOWhDLEtBQUswaEMsT0FBeUIsSUFBZjFoQyxLQUFLMGhDLE9BQStCLElBQWhCMWhDLEtBQUs2aEMsU0FBZTdoQyxLQUFLd2hDLFNBQVN2WixZQUN6RWpvQixLQUFLMGhDLE1BQVEsRUFBSTFoQyxLQUFLMGhDLE9BRXhCSyxNQUFPLFNBQVN6bUMsRUFBR21FLEdBRWpCLE9BREFuRSxHQUFLQSxFQUFHbUUsR0FBS0EsRUFDTE8sS0FBSzZoQyxRQUNYLEtBQUssRUFBRzdoQyxLQUFLNmhDLE9BQVMsRUFBRzdoQyxLQUFLMGhDLE1BQVExaEMsS0FBS3doQyxTQUFTdFosT0FBTzVzQixFQUFHbUUsR0FBS08sS0FBS3doQyxTQUFTeFosT0FBTzFzQixFQUFHbUUsR0FBSSxNQUMvRixLQUFLLEVBQUdPLEtBQUs2aEMsT0FBUyxFQUN0QixRQUFTN2hDLEtBQUt3aEMsU0FBU3RaLE9BQU81c0IsRUFBR21FLE1IckJ2QyxTQUFZNjlCLEdBQ1JBLGlCQUNBQSxpQ0FDQUEsbUJBQ0FBLDJCQUNBQSxpQ0FDQUEsbUJBQ0FBLHlCQUNBQSxxQkFDQUEsMkJBQ0FBLG1CQUNBQSw0QkFDQUEsa0NBWkosQ0FBWUEsS0FBQUEsUUFlWixTQUFZQyxHQUNSQSxtQkFDQUEsaUJBQ0FBLGlCQUNBQSxxQkFDQUEseUJBQ0FBLHFCQUNBQSxxQkFDQUEseUJBQ0FBLHVCQUNBQSx5QkFWSixDQUFZQSxLQUFBQSxRQWFaLFNBQVlDLEdBQ1JBLHVCQUNBQSxpQkFDQUEsbUJBQ0FBLG1CQUNBQSwyQkFDQUEsdUJBTkosQ0FBWUEsS0FBQUEsY0FhQ3dFLEdBSVR2OUIsWUFBWXVwQixFQUFjMXpCLEdBQ3RCMEYsS0FBS2d1QixLQUFPQSxFQUNaaHVCLEtBQUsxRixNQUFRQSxTQUlSMm5DLEdBY1R4OUIsWUFBWWtjLEVBQVl1aEIsRUFBd0JDLEdBWTVDLEdBWEFuaUMsS0FBS2tFLEtBQU9nK0IsRUFDWmxpQyxLQUFLa3ZCLE9BQVNpVCxFQUNkbmlDLEtBQUtvaUMsVUFBWSxHQUNqQnBpQyxLQUFLMmdCLEdBQUtBLEVBQ1YzZ0IsS0FBS3FpQyxVQUFZLEVBQ2pCcmlDLEtBQUtzaUMsV0FBYSxFQUNsQnRpQyxLQUFLdWlDLFdBQWEsRUFDbEJ2aUMsS0FBS3dpQyxVQUFZaEYsR0FBVTNSLE9BQzNCN3JCLEtBQUt5aUMsZ0JBQWlCLEVBQ3RCemlDLEtBQUswaUMsV0FBYSxFQUVkUixJQUFlNUUsR0FBV3FGLE1BQU8sQ0FFakMsSUFHSW4wQixFQURBbzBCLEVBQVEsSUFBSXJ4QixPQURaLG1GQUM2QixNQUVqQyxLQUFRL0MsRUFBUW8wQixFQUFNbG5CLEtBQUt5bUIsSUFDdkIsUUFBcUMsSUFBMUIzekIsRUFBTWhCLE9BQU82MEIsU0FBMEIsQ0FDOUMsSUFBSUEsRUFBV1EsV0FBV3IwQixFQUFNaEIsT0FBTzYwQixVQUN2QyxHQUFJeFcsT0FBT2lYLFNBQVNULFNBQ3NCLElBQTNCN3pCLEVBQU1oQixPQUFPODBCLFVBQTJCLENBQy9DLElBQUlBLEVBQVlPLFdBQVdyMEIsRUFBTWhCLE9BQU84MEIsV0FDeEMsR0FBSXpXLE9BQU9pWCxTQUFTUixHQUFZLENBQzVCLElBQUlDLE9BR0EsSUFETy96QixFQUFNaEIsT0FBTyswQixZQUdwQkEsRUFBWU0sV0FDUnIwQixFQUFNaEIsT0FBTyswQixZQUlyQnZpQyxLQUFLcWlDLFNBQVdBLEVBQ2hCcmlDLEtBQUtzaUMsVUFBWUEsRUFDYnpXLE9BQU9pWCxTQUFTUCxLQUNoQnZpQyxLQUFLdWlDLFVBQVlBLEdBRXJCdmlDLEtBQUsraUMsYUFBZVosRUFBYWhYLFFBQzdCeVgsRUFDQSxJQUdSLFlBS2IsQ0FDSCxJQUVJcDBCLEVBREFvMEIsRUFBUSxJQUFJcnhCLE9BREQsNEJBQ2tCLE1BRWpDLEtBQVEvQyxFQUFRbzBCLEVBQU1sbkIsS0FBS3ltQixJQUN2QixRQUFxQyxJQUExQjN6QixFQUFNaEIsT0FBTzYwQixTQUEwQixDQUM5QyxJQUFJQSxFQUFXUSxXQUFXcjBCLEVBQU1oQixPQUFPNjBCLFVBQ25DeFcsT0FBT2lYLFNBQVNULEtBQ2hCcmlDLEtBQUtxaUMsU0FBV0EsRUFDaEJyaUMsS0FBSytpQyxhQUFlWixFQUFhaFgsUUFBUXlYLEVBQU8sS0FFcEQsUUFNVEksUUFBUUMsR0FDWCxPQUFJampDLEtBQUtrRSxPQUFTKytCLEVBQU0vK0IsTUFBUWxFLEtBQUtrdkIsU0FBVytULEVBQU0vVCxPQU1uRGdVLFVBQ0gsT0FBT2xqQyxLQUFLa0UsS0FHVGkvQixZQUNILE9BQU9uakMsS0FBS2t2QixPQUdUa1Usa0JBQ0gsT0FBT3BqQyxLQUFLK2lDLGFBR1RNLFFBQ0gsT0FBT3JqQyxLQUFLMmdCLEdBR1QyaUIsWUFBWTVsQyxFQUFRLEdBQ3ZCLE9BQVFBLEdBQ0osS0FBSyxFQUNELE9BQU9zQyxLQUFLcWlDLFNBQ2hCLEtBQUssRUFDRCxPQUFPcmlDLEtBQUtzaUMsVUFDaEIsS0FBSyxFQUNELE9BQU90aUMsS0FBS3VpQyxVQUdwQixPQUFPLEtBR0pnQixhQUFhQyxHQUNoQnhqQyxLQUFLb2lDLFVBQVlvQixFQUdkQyxhQUFhQyxHQUFnQyxHQUNoRCxNQUF1QixLQUFuQjFqQyxLQUFLb2lDLFVBQ0RzQixFQUNPLElBRUosSUFFSjFqQyxLQUFLb2lDLFVBR1R1QixjQUFjQyxFQUFjLEdBQy9CNWpDLEtBQUswaUMsV0FBYTFpQyxLQUFLMGlDLFdBQWFrQixFQUdqQ0MsZ0JBQ0gsT0FBTzdqQyxLQUFLMGlDLGtCQVNQb0IsR0FxQlRyL0IsWUFBWXdDLEVBQWtCODhCLEdBRnRCL2pDLGtCQUFlLEVBR25CQSxLQUFLK0QsS0FBTyxXQUNaL0QsS0FBSytqQyxNQUFRQSxFQUNiL2pDLEtBQUt6QyxPQUFTLEdBQ2R5QyxLQUFLaUgsT0FBU0EsRUFDZGpILEtBQUsyZ0IsSUFBTSxFQUNYM2dCLEtBQUtna0MsS0FBTyxLQUNaaGtDLEtBQUtpa0MsS0FBTyxLQUNaamtDLEtBQUtra0MsVUFBWSxLQUNqQmxrQyxLQUFLbWtDLFFBQVUsS0FDZm5rQyxLQUFLMGlDLFdBQWEsRUFDbEIxaUMsS0FBS29rQyxTQUFXLEtBQ2hCcGtDLEtBQUtxa0MsUUFBVSxLQUVmcmtDLEtBQUtza0MsY0FBZSxFQUVwQnRrQyxLQUFLd2lDLFVBQVl1QixNQUFBQSxTQUFBQSxFQUFPdkIsVUFFeEIsSUFBSyxJQUFJK0IsRUFBTSxFQUFHQSxFQUFNdDlCLEVBQU91OUIsV0FBVy9vQyxPQUFROG9DLElBQzlDdmtDLEtBQUt6QyxPQUFPaUgsS0FBSyxNQUlsQmlnQyxvQkFDSCxJQUFLemtDLEtBQUtza0MsYUFBYyxDQUNwQixJQUFJSSxFQUFhLElBQUlaLEdBQVE5akMsS0FBS2lILE9BQVEsTUFVMUMsT0FUQXk5QixFQUFXM2dDLEtBQU8sTUFDbEIyZ0MsRUFBV25uQyxPQUFTLElBQUl5QyxLQUFLekMsUUFDN0JtbkMsRUFBV1YsS0FBT2hrQyxLQUFLZ2tDLEtBQ3ZCVSxFQUFXVCxLQUFPamtDLEtBQUtpa0MsS0FDdkJTLEVBQVdSLFVBQVlsa0MsS0FBS2trQyxVQUFVdjRCLFFBQ3RDKzRCLEVBQVdQLFFBQVVua0MsS0FBS21rQyxRQUFReDRCLFFBQ2xDKzRCLEVBQVdoQyxXQUFhMWlDLEtBQUswaUMsV0FDN0JnQyxFQUFXSixjQUFlLEVBQzFCSSxFQUFXbEMsVUFBWXhpQyxLQUFLd2lDLFVBQ3JCa0MsRUFFWCxPQUFPMWtDLEtBR0oya0MsVUFDSCxPQUFPM2tDLEtBQUsrRCxLQUdUNmdDLFFBQVE3Z0MsR0FDWC9ELEtBQUsrRCxLQUFPQSxFQUdUcy9CLFFBQ0gsT0FBT3JqQyxLQUFLMmdCLEdBR1Rra0IsTUFBTWxrQixHQUNUM2dCLEtBQUsyZ0IsR0FBS0EsRUFHUGdqQixjQUFjQyxHQUNqQjVqQyxLQUFLMGlDLFdBQWExaUMsS0FBSzBpQyxXQUFha0IsRUFHakNDLGdCQUNILE9BQU83akMsS0FBSzBpQyxXQUdUb0MsU0FBUzlXLEVBQWMrVyxFQUFtQixHQUM3QyxJQUFJUixFQUFNdmtDLEtBQUtpSCxPQUFPKzlCLGVBQWVoWCxHQUFRNXhCLEtBQUtVLE1BQU1pb0MsR0FDeEQsT0FBSVIsR0FBTyxHQUFLQSxFQUFNdmtDLEtBQUt6QyxPQUFPOUIsT0FDdkJ1RSxLQUFLekMsT0FBT2duQyxHQUVoQixLQUdKVSxTQUFTalgsRUFBYzF6QixHQUMxQixJQUFJaXFDLEVBQU12a0MsS0FBS2lILE9BQU8rOUIsZUFBZWhYLEdBR2pDdVcsR0FBTyxHQUFLQSxFQUFNdmtDLEtBQUt6QyxPQUFPOUIsU0FFOUJ1RSxLQUFLekMsT0FBT2duQyxHQUFPanFDLEdBR0QsT0FBZDBGLEtBQUtna0MsTUFBaUIxcEMsRUFBUTBGLEtBQUtna0MsUUFDbkNoa0MsS0FBS2drQyxLQUFPMXBDLElBRUUsT0FBZDBGLEtBQUtpa0MsTUFBaUIzcEMsRUFBUTBGLEtBQUtpa0MsUUFDbkNqa0MsS0FBS2lrQyxLQUFPM3BDLElBSU8sT0FBbkIwRixLQUFLa2tDLFdBQXNCbFcsRUFBT2h1QixLQUFLa2tDLGFBQ3ZDbGtDLEtBQUtra0MsVUFBWWxXLEVBQUtyaUIsVUFFTCxPQUFqQjNMLEtBQUtta0MsU0FBb0JuVyxFQUFPaHVCLEtBQUtta0MsV0FDckNua0MsS0FBS21rQyxRQUFVblcsRUFBS3JpQixVQUt6QnU1QixvQkFDSGxsQyxLQUFLZ2tDLEtBQU81bkMsS0FBS3VCLE9BQU9xQyxLQUFLekMsUUFDN0J5QyxLQUFLaWtDLEtBQU83bkMsS0FBS1EsT0FBT29ELEtBQUt6QyxRQUcxQjRuQyxVQUNILE9BQU9ubEMsS0FBS2drQyxLQUdUb0IsVUFDSCxPQUFPcGxDLEtBQUtpa0MsS0FHVG9CLGVBQ0gsT0FBT3JsQyxLQUFLa2tDLFVBR1RvQixhQUNILE9BQU90bEMsS0FBS21rQyxRQUdUb0IsTUFBTUMsRUFBcUJDLEdBQzlCLElBQUlDLEdBQWEsRUFDakIsSUFBSyxJQUFJbkIsRUFBTSxFQUFHQSxFQUFNdmtDLEtBQUt6QyxPQUFPOUIsT0FBUThvQyxJQUNmLE9BQXJCdmtDLEtBQUt6QyxPQUFPZ25DLEtBQ1MsT0FBakJrQixHQUlJemxDLEtBQUt6QyxPQUFPZ25DLElBQVFrQixLQUh4QnpsQyxLQUFLekMsT0FBT2duQyxHQUFPdmtDLEtBQUt6QyxPQUFPZ25DLEdBQU9pQixFQUN0Q0UsR0FBYSxHQVNyQkEsSUFDQTFsQyxLQUFLZ2tDLEtBQU9oa0MsS0FBS2drQyxLQUFPd0IsRUFDeEJ4bEMsS0FBS2lrQyxLQUFPamtDLEtBQUtpa0MsS0FBT3VCLEdBSXpCRyxXQUFXQyxHQUNkLElBQUssSUFBSXJCLEVBQU0sRUFBR0EsRUFBTXZrQyxLQUFLekMsT0FBTzlCLE9BQVE4b0MsSUFDZixPQUFyQnZrQyxLQUFLekMsT0FBT2duQyxLQUNadmtDLEtBQUt6QyxPQUFPZ25DLEdBQU9xQixFQUNmQSxFQUFVNWxDLEtBQUtna0MsT0FDZmhrQyxLQUFLZ2tDLEtBQU80QixHQUVaQSxFQUFVNWxDLEtBQUtpa0MsT0FDZmprQyxLQUFLaWtDLEtBQU8yQixJQU1yQkMsV0FDSCxPQUFPN2xDLEtBQUsrakMsTUFHVCtCLG1CQUNILElBQUlDLEVBQWEsRUFDakIsSUFBSyxJQUFJeEIsRUFBTSxFQUFHQSxFQUFNdmtDLEtBQUt6QyxPQUFPOUIsT0FBUThvQyxJQUNmLE9BQXJCdmtDLEtBQUt6QyxPQUFPZ25DLEtBQ1p3QixHQUFjL2xDLEtBQUt6QyxPQUFPZ25DLElBRTlCdmtDLEtBQUt6QyxPQUFPZ25DLEdBQU93QixFQUNmQSxFQUFhL2xDLEtBQUtna0MsT0FDbEJoa0MsS0FBS2drQyxLQUFPK0IsR0FFWkEsRUFBYS9sQyxLQUFLaWtDLE9BQ2xCamtDLEtBQUtpa0MsS0FBTzhCLEdBS2pCQyxZQUNILE9BQU9obUMsS0FBS3pDLE9BR1Qwb0MsWUFDSCxPQUFPam1DLEtBQUt6QyxPQUFPOUIsT0FHaEJ5cUMsbUJBQ0gsSUFBSUMsRUFBZSxFQUNuQixJQUFLLElBQUk1QixFQUFNLEVBQUdBLEVBQU12a0MsS0FBS3pDLE9BQU85QixPQUFROG9DLElBQ2YsT0FBckJ2a0MsS0FBS3pDLE9BQU9nbkMsSUFDWjRCLElBR1IsT0FBT0EsRUFHWDNyQyxPQUNJLEdBQUl3RixLQUFLb21DLGFBQWVwbUMsS0FBS3pDLE9BQU85QixPQUFRLENBQ3hDLElBQUk4b0MsRUFBTXZrQyxLQUFLb21DLGVBS2YsTUFBTyxDQUNIeHJDLE1BQU0sRUFDTk4sTUFOWSxJQUFJMG5DLEdBQ2hCaGlDLEtBQUtpSCxPQUFPdTlCLFdBQVdELEdBQ3ZCdmtDLEtBQUt6QyxPQUFPZ25DLEtBUWhCLE9BREF2a0MsS0FBS29tQyxhQUFlLEVBQ2IsQ0FDSHhyQyxNQUFNLEVBQ05OLE1BQU8sTUFLbkIsQ0FBQ3lXLE9BQU9DLFlBQ0osT0FBT2hSLFlBSUZxbUMsR0FPVDVoQyxZQUFZeS9CLEVBQW1CQyxHQUZ2Qm5rQyxrQkFBZSxFQUduQkEsS0FBS3NtQyxNQUFRLEdBQ2J0bUMsS0FBS3VtQyxTQUFXLEdBSWhCLE1BQU1DLEVBRk10QyxFQUFVdUMsZUFFR3psQyxPQUFPd2IsV0FDaEMsSUFDSSxJQUFJa3FCLEVBQVV4QyxFQUFVdjRCLFFBQ3hCKzZCLEdBQVd2QyxFQUNYdUMsRUFBUXQ4QixJQUFJLEVBQUcsUUFDakIsQ0FDRSxJQUFJbXFCLEVBQVU3ekIsT0FBT2ltQyxPQUNqQkQsRUFBUTFsQyxPQUFPd2xDLEdBQ2ZBLEdBQ0EsR0FFSnhtQyxLQUFLc21DLE1BQU05aEMsS0FBSyt2QixJQUtqQnFTLGNBQWM3QyxFQUFjOEMsR0FDL0IsSUFBSUMsRUFBVSxJQUFJaEQsR0FBUTlqQyxLQUFNK2pDLEdBUWhDLE9BUEErQyxFQUFRakMsTUFBTWQsRUFBTVYsU0FDaEJ3RCxHQUNBQyxFQUFRbEMsUUFBUWlDLEVBQVdFLFlBQVloRCxFQUFNVixVQUdqRHJqQyxLQUFLdW1DLFNBQVMvaEMsS0FBS3NpQyxHQUVaQSxFQUdKOUIsZUFBZWhYLEdBRWxCLE1BQU13WSxFQURNeFksRUFBS3lZLGVBQ1F6bEMsT0FBT3diLFdBQ2hDLElBQUssSUFBSStuQixFQUFNLEVBQUdBLEVBQU12a0MsS0FBS3NtQyxNQUFNN3FDLE9BQVE4b0MsSUFDdkMsR0FDSXZrQyxLQUFLc21DLE1BQU0vQixHQUFLdmpDLE9BQU93bEMsS0FBZ0J4WSxFQUFLaHRCLE9BQU93bEMsR0FFbkQsT0FBT2pDLEVBR2YsT0FBUSxFQUdMeUMsa0JBQWtCakQsR0FDckIsSUFBSyxJQUFJK0MsS0FBVzltQyxLQUFLdW1DLFNBQ3JCLEdBQUlPLEVBQVFqQixXQUFXN0MsUUFBUWUsR0FDM0IsT0FBTytDLEVBR2YsT0FBTyxLQUdKRyxlQUFldG1CLEdBQ2xCLElBQUssSUFBSW1tQixLQUFXOW1DLEtBQUt1bUMsU0FDckIsR0FBSU8sRUFBUXpELFVBQVkxaUIsRUFDcEIsT0FBT21tQixFQUlmLE9BQU8sS0FHSkksaUJBQ0gsSUFBSUMsRUFBcUIsR0FDekIsSUFBSyxJQUFJTCxLQUFXOW1DLEtBQUt1bUMsU0FDckIsR0FBSU8sRUFBUWpCLFdBQVdwRCxlQUFnQixDQUNuQyxJQUFJOWhCLEVBQUttbUIsRUFBUWpCLFdBQVd4QyxRQUN2QjhELEVBQUlDLFNBQVN6bUIsS0FBZSxJQUFSQSxHQUNyQndtQixFQUFJM2lDLEtBQUttYyxHQUlyQixPQUFPd21CLEVBR0ozQyxXQUNILE9BQU94a0MsS0FBS3NtQyxNQUdUZSxXQUNILElBQUluOUIsRUFBUSxHQUNaLElBQUssSUFBSTQ4QixLQUFXOW1DLEtBQUt1bUMsU0FDckJyOEIsRUFBTTFGLEtBQUtzaUMsRUFBUW5DLFdBRXZCLE9BQU96NkIsRUFHWDFQLE9BQ0ksT0FBSXdGLEtBQUtvbUMsYUFBZXBtQyxLQUFLdW1DLFNBQVM5cUMsT0FDM0IsQ0FDSGIsTUFBTSxFQUNOTixNQUFPMEYsS0FBS3VtQyxTQUFTdm1DLEtBQUtvbUMsa0JBRzlCcG1DLEtBQUtvbUMsYUFBZSxFQUNiLENBQ0h4ckMsTUFBTSxFQUNOTixNQUFPLE9BS25CLENBQUN5VyxPQUFPQyxZQUNKLE9BQU9oUixZQUlGc25DLEdBMkNUN2lDLFlBQVk4aUMsR0FDUnZuQyxLQUFLdW5DLFFBQVVBLEVBQ2Z2bkMsS0FBS3duQyxTQUFXLEdBQ2hCeG5DLEtBQUt5bkMsT0FBUyxJQUNkem5DLEtBQUswbkMsS0FBTyxHQUNaMW5DLEtBQUsybkMsb0JBQXFCLEVBQzFCM25DLEtBQUs0bkMsd0JBQTBCLEdBQy9CNW5DLEtBQUs2bkMsd0JBQTBCLEdBQy9CN25DLEtBQUt3bUMsV0FBYSxhQUNsQnhtQyxLQUFLOG5DLGlCQUFtQixHQUN4QjluQyxLQUFLK25DLGlCQUFtQixHQUN4Qi9uQyxLQUFLa2tDLFVBQVksS0FDakJsa0MsS0FBS21rQyxRQUFVLEtBQ2Zua0MsS0FBSyttQyxZQUFjLEdBQ25CL21DLEtBQUtnb0MsV0FBYSxDQUFDLEdBQ25CaG9DLEtBQUtpb0Msb0JBQXNCLEdBQzNCam9DLEtBQUtrb0MsZ0JBQWtCLEdBQ3ZCbG9DLEtBQUttb0MsTUFBUSxHQUNibm9DLEtBQUs0bEMsUUFBVSxHQUNmNWxDLEtBQUtvb0MsV0FBYSxHQUNsQnBvQyxLQUFLcW9DLHlCQUEyQixHQUNoQ3JvQyxLQUFLd2lDLFVBQVksR0FDakJ4aUMsS0FBS3NvQyxhQUFlLEdBRXBCdG9DLEtBQUt1b0MsYUFBZSxJQUFJQyxHQUFLLElBQUssS0FDbEN4b0MsS0FBS3lvQyxPQUFTLElBQUlDLEdBQU8sR0FBSSxHQUFJLEdBQUksSUFFckMxb0MsS0FBSzJvQyxXQUFhLEVBQ2xCM29DLEtBQUs0b0MsZUFBZ0IsRUFFckI1b0MsS0FBS3V2QixPQUFTLEdBQ2R2dkIsS0FBS21DLEtBQU8sR0FDWm5DLEtBQUs2b0MsSUFBTSxHQUNYN29DLEtBQUs4b0MsSUFBTSxHQUNYOW9DLEtBQUsrb0MsUUFBVSxHQUNmL29DLEtBQUtreUIsTUFBUSxHQUNibHlCLEtBQUtncEMsUUFBVSxHQUNmaHBDLEtBQUtpcEMsT0FBUyxHQUNkanBDLEtBQUtrcEMsY0FBZ0IsR0FFckJscEMsS0FBS3VtQyxTQUFXLEtBR2I0QyxhQUFheG9CLEdBQ2hCLElBQUssSUFBSW9qQixLQUFTL2pDLEtBQUt1bkMsUUFDbkIsR0FBSXhELEVBQU1WLFVBQVkxaUIsRUFDbEIsT0FBT29qQixTQU1WcUYsR0FNVDNrQyxjQUNJekUsS0FBSzJnQixJQUFNLEVBQ1gzZ0IsS0FBSytELEtBQU8sR0FDWi9ELEtBQUtxcEMsTUFBUSxHQUNicnBDLEtBQUtzcEMsTUFBUSxVQWdCUkMsR0F5QlQ5a0MsY0FDSXpFLEtBQUt3cEMsTUFBUSxHQUNieHBDLEtBQUt5cEMsV0FBYSxPQUNsQnpwQyxLQUFLMHBDLFdBQWEsR0FDbEIxcEMsS0FBSzJwQyxnQkFBa0IsR0FDdkIzcEMsS0FBSzRwQyxXQUFhLEdBQ2xCNXBDLEtBQUs2cEMsV0FBYSxHQUNsQjdwQyxLQUFLOHBDLGdCQUFrQixHQUN2QjlwQyxLQUFLK3BDLFVBQVksR0FDakIvcEMsS0FBS2dxQyxrQkFBb0IsS0FDekJocUMsS0FBS2lxQyxrQkFBb0IsR0FDekJqcUMsS0FBS2txQyxxQkFBdUIsS0FDNUJscUMsS0FBS21xQyxxQkFBdUIsR0FDNUJucUMsS0FBS2drQyxLQUFPLEdBQ1poa0MsS0FBS2lrQyxLQUFPLEdBQ1pqa0MsS0FBS29xQyxhQUFlLEdBQ3BCcHFDLEtBQUtxcUMsa0JBQW1CLEVBR3hCcnFDLEtBQUtzcUMsWUFBYSxFQUNsQnRxQyxLQUFLdXFDLGVBQWlCLEdBQ3RCdnFDLEtBQUt3cUMsa0JBQW9CLEdBQ3pCeHFDLEtBQUt5cUMsY0FBZ0IsR0FDckJ6cUMsS0FBSzBxQyxrQkFBb0IsR0FHdEJDLGVBQ0gsT0FBT3BOLEdBQVVxTixlQUlaQyxXQUFpQnRCLEdBWTFCOWtDLGNBQ0lxbUMsUUFDQTlxQyxLQUFLK3FDLFVBQVksR0FDakIvcUMsS0FBS2dyQyxVQUFZLEdBQ2pCaHJDLEtBQUtpckMsU0FBVyxHQUNoQmpyQyxLQUFLa3JDLFVBQVksR0FDakJsckMsS0FBS21yQyxXQUFhLEdBQ2xCbnJDLEtBQUtvckMsaUJBQW1CLEdBQ3hCcHJDLEtBQUtxckMsaUJBQW1CLEdBQ3hCcnJDLEtBQUtzckMsVUFBWSxHQUNqQnRyQyxLQUFLdXJDLFFBQVUsR0FDZnZyQyxLQUFLd3JDLGNBQWdCLEdBR2xCYixlQUNILE9BQU9wTixHQUFVa08sWUFJWkMsV0FBZ0JuQyxHQUl6QjlrQyxjQUNJcW1DLFFBQ0E5cUMsS0FBSzJyQyxTQUFXLEdBQ2hCM3JDLEtBQUt3ckMsY0FBZ0IsR0FHbEJiLGVBQ0gsT0FBT3BOLEdBQVVxTyxXQUlaQyxHQW1CVHBuQyxjQUNJekUsS0FBS3dwQyxNQUFRLEdBQ2J4cEMsS0FBSzBCLEtBQU8sR0FDWjFCLEtBQUs4ckMsVUFBWSxHQUNqQjlyQyxLQUFLK3JDLFNBQVcsR0FDaEIvckMsS0FBS2dzQyxNQUFRLEdBQ2Joc0MsS0FBS2lzQyxrQkFBb0IsSUFDekJqc0MsS0FBS2tzQyxTQUFXLEdBQ2hCbHNDLEtBQUttc0MsMkJBQTRCLEVBQ2pDbnNDLEtBQUtvc0MsaUJBQW1CLEVBR3hCcHNDLEtBQUtzcUMsWUFBYSxFQUNsQnRxQyxLQUFLdXFDLGVBQWlCLEdBQ3RCdnFDLEtBQUt3cUMsa0JBQW9CLEdBQ3pCeHFDLEtBQUt5cUMsY0FBZ0IsR0FDckJ6cUMsS0FBSzBxQyxrQkFBb0IsR0FHdEJDLGVBQ0gsT0FBT3BOLEdBQVU4TyxXQUlaQyxHQUlUN25DLGNBQ0l6RSxLQUFLdXNDLFNBQVcsR0FDaEJ2c0MsS0FBSytJLE1BQVEsR0FHVjRoQyxlQUNILE9BQU9wTixHQUFVaVAsZUFJWkMsR0FvQ1Rob0MsY0FDSXpFLEtBQUswc0MsS0FBTyxTQUNaMXNDLEtBQUs4bUMsUUFBVSxHQUNmOW1DLEtBQUsyc0MsWUFBYyxNQUNuQjNzQyxLQUFLNHNDLFVBQVksR0FDakI1c0MsS0FBS2drQyxLQUFPLEdBQ1poa0MsS0FBS2lrQyxLQUFPLEdBQ1pqa0MsS0FBS3ViLE1BQVEsS0FDYnZiLEtBQUs2c0MsZUFBZ0IsRUFDckI3c0MsS0FBSzhzQyxVQUFZLEdBQ2pCOXNDLEtBQUsrc0MsbUJBQW9CLEVBR3pCL3NDLEtBQUtndEMsZ0JBQWtCLEtBQ3ZCaHRDLEtBQUtpdEMsaUJBQW1CLEtBQ3hCanRDLEtBQUtrdEMsa0JBQW9CLEtBR3pCbHRDLEtBQUttdEMsWUFBYSxFQUNsQm50QyxLQUFLb3RDLFlBQWEsRUFDbEJwdEMsS0FBS3F0QyxlQUFnQixFQUNyQnJ0QyxLQUFLc3RDLGtCQUFtQixFQUN4QnR0QyxLQUFLdXRDLFlBQWMsS0FDbkJ2dEMsS0FBS3d0QyxvQkFBcUIsRUFDMUJ4dEMsS0FBS3l0QyxlQUFpQixHQUN0Qnp0QyxLQUFLMHRDLGtCQUFvQixZQUd6QjF0QyxLQUFLMnRDLGdCQUFpQixFQUN0QjN0QyxLQUFLNHRDLFdBQWEsR0FDbEI1dEMsS0FBSzZ0Qyw0QkFBNkIsRUFHbEM3dEMsS0FBSzh0QyxhQUFlLEdBQ3BCOXRDLEtBQUsrdEMsZ0JBQWtCLEtBR3BCcEQsZUFDSCxPQUFPcE4sR0FBVXlRLGFBSVpDLEdBUVR4cEMsY0FDSXpFLEtBQUs4bUMsUUFBVSxJQUNmOW1DLEtBQUsyc0MsWUFBYyxNQUNuQjNzQyxLQUFLa3VDLFlBQWMsV0FDbkJsdUMsS0FBS2drQyxLQUFPLEtBQ1poa0MsS0FBS2lrQyxLQUFPLEtBQ1pqa0MsS0FBS3ViLE1BQVEsS0FHVm92QixlQUNILE9BQU9wTixHQUFVNFEsZUFJWkMsR0FhVDNwQyxjQUNJekUsS0FBS3dwQyxNQUFRLEdBQ2J4cEMsS0FBSzhtQyxRQUFVLElBQ2Y5bUMsS0FBS2t1QyxZQUFjLGFBQ25CbHVDLEtBQUsxRixNQUFRLEdBQ2IwRixLQUFLcXVDLFVBQVksR0FDakJydUMsS0FBS3N1QyxXQUFhLFVBQ2xCdHVDLEtBQUtkLE1BQVEsR0FDYmMsS0FBS3V1QyxXQUFhLEdBQ2xCdnVDLEtBQUt3dUMsWUFBYSxFQUNsQnh1QyxLQUFLeXVDLFlBQWMsRUFDbkJ6dUMsS0FBSzB1QyxZQUFjLEdBR2hCL0QsZUFDSCxPQUFPcE4sR0FBVW9SLGNBSVpuRyxHQUlUL2pDLFlBQVkwbEIsRUFBVzFOLEdBQ25CemMsS0FBSzZxQixNQUFRVixFQUNibnFCLEtBQUs0dUMsT0FBU255QixTQUlUaXNCLEdBTVRqa0MsWUFBWW9xQyxFQUFhN3lDLEVBQWU4eUMsRUFBZ0J6ekMsR0FDcEQyRSxLQUFLNnVDLElBQU1BLEVBQ1g3dUMsS0FBS2hFLE1BQVFBLEVBQ2JnRSxLQUFLOHVDLE9BQVNBLEVBQ2Q5dUMsS0FBSzNFLEtBQU9BLFNBSVAwekMsR0FJVHRxQyxZQUFZN0QsR0FJUixHQUhBWixLQUFLVCxXQUFhLEVBQ2xCUyxLQUFLUixXQUFhLEVBRU8saUJBQWRvQixFQUF3QixDQUMvQixJQUFJNE0sRUFBUzVNLEVBQVU0TixNQUNuQiw4REFDRmhCLE9BQ0VBLElBQ0F4TixLQUFLVCxXQUFhc2pDLFdBQVdyMUIsRUFBT2xTLEdBQ3BDMEUsS0FBS1IsV0FBYXFqQyxXQUFXcjFCLEVBQU8vTixZQVV2Q3V2QyxHQU1UdnFDLFlBQVl3cUMsRUFBa0JDLEdBQzFCbHZDLEtBQUtpdkMsU0FBV0EsRUFDaEJqdkMsS0FBS2t2QyxXQUFhQSxFQUNsQmx2QyxLQUFLd25DLFNBQVcsS0FDaEJ4bkMsS0FBS212QyxVQUFZLFVBSVpDLEdBV1QzcUMsY0FDSXpFLEtBQUtxdkMsVUFBWSxFQUNqQnJ2QyxLQUFLc3ZDLGNBQWdCLEVBQ3JCdHZDLEtBQUt1dkMsbUJBQXFCLEVBQzFCdnZDLEtBQUt3dkMsZ0JBQWtCLEVBQ3ZCeHZDLEtBQUt5dkMsYUFBZSxHQUNwQnp2QyxLQUFLMHZDLFFBQVVodkMsT0FBT2ltQyxPQUFPLElBQzdCM21DLEtBQUsydkMsUUFBVWp2QyxPQUFPaW1DLE9BQU8sSUFDN0IzbUMsS0FBSzR2QyxtQkFBb0IsRUFDekI1dkMsS0FBSzZ2QyxtQkFBb0IsR09wL0JqQyxNQUFNcmIsR0E3Qk4sV0FJSSxNQUFNc2IsRUFBVyxDQUFDLEtBQU0sSUFBSyxLQUFNLEtBRTdCQyxFQUFVLENBQUMsS0FBTSxLQUdqQkMsRUFBVSxDQUFDLEtBQU0sSUFBSyxJQUU1QixJQUFJeGIsRUFBYSxHQUNqQixJQUFLLElBQUl5YixLQUFXSCxFQUNoQixJQUFLLElBQUlJLEtBQVVILEVBQ2YsSUFBSyxJQUFJSSxLQUFVSCxFQUFTLENBQ3hCLElBQUlJLEVBQU0sR0FBR0gsS0FBV0MsSUFDVCxLQUFYQyxJQUNBQyxHQUFPLElBQUlELEtBRVhGLEVBQVE1aUMsU0FBUyxPQUNqQitpQyxHQUFPLE1BRVg1YixFQUFXaHdCLEtBQUs0ckMsR0FLNUIsT0FBTzViLEVBRVE2YixZQUVIQyxHQUNaQyxFQUNBekksRUFDQUMsR0FFQSxJQUFLRCxJQUFxQkMsRUFBa0IsT0FBT3dJLEVBRW5ELElBQUlDLEVBQWFELEVBTWpCLEdBTElDLEVBQVdDLFdBQVcsT0FDdEJELEVBQWFBLEVBQVdueEMsTUFBTSxJQUk5QnlvQyxFQUFrQixDQUNsQixJQUVJbEYsRUFBUSxJQUFJcnhCLE9BRkQsS0FBT3UyQixFQUFtQixJQUVSLE1BQzdCbEYsRUFBTXQvQixLQUFLa3RDLEtBQ1hBLEVBQWFBLEVBQVdybEIsUUFBUXlYLEVBQU8sS0FLL0MsR0FBSW1GLEVBQWtCLENBQ2xCLElBRUluRixFQUFRLElBQUlyeEIsT0FGRCxJQUFNdzJCLEVBQW1CLEtBRVAsTUFDN0JuRixFQUFNdC9CLEtBQUtrdEMsS0FDWEEsRUFBYUEsRUFBV3JsQixRQUFReVgsRUFBTyxLQUsvQyxPQUFPNE4sV0FHS0UsR0FBVUMsRUFBaUJuSyxHQUN2QyxJQUFJeGxDLEVBQWN3bEMsRUFHZG1LLEVBQVFsMUMsT0FBUyxHQUNqQmsxQyxFQUFRRixXQUFXLE9BQ25CRSxFQUFRQyxTQUFTLFFBRWpCRCxFQUFVQSxFQUFRN2tCLFVBQVUsRUFBRzZrQixFQUFRbDFDLE9BQVMsSUFHbkIsYUFBN0IrcUMsRUFBVy9xQixnQkFDWHphLEVBQVNOLE9BQU9pbUMsT0FBT2tLLFVBRzNCLElBQUk3aUIsRUFBT3R0QixPQUFPaW1DLE9BQU9nSyxFQUFTM3ZDLEdBQVEsR0FLMUMsT0FGQWd0QixFQUFPQSxFQUFLOGlCLFFBQVEsT0FFYjlpQixFQUdYLFNBQVMraUIsR0FDTEMsRUFDQUMsRUFDQUMsR0FBeUIsR0FFekIsSUFBS0YsSUFBZ0JDLEdBQTBCLElBQWpCQSxFQUFNeDFDLE9BQ2hDLE1BQU8sQ0FBQyxLQUFNdTFDLEdBR2xCLElBQUkxMkMsRUFBUSxLQUNaLE1BQU02MkMsRUFBVyxxQkFBdUJGLEVBQU05akMsS0FBSyxLQUFPLEtBRXBEeTFCLEVBQVEsSUFBSXJ4QixPQUFPNC9CLEVBQVUsTUFDbkMsSUFBSTNpQyxFQUFRbzBCLEVBQU1sbkIsS0FBS3MxQixHQUN2QixPQUNJeGlDLFFBQ3dCLElBQWpCQSxFQUFNaEIsYUFDaUIsSUFBdkJnQixFQUFNaEIsT0FBT2xULFFBR3BCQSxFQUFRdW9DLFdBQVdyMEIsRUFBTWhCLE9BQU9sVCxPQUM1QnV4QixPQUFPaVgsU0FBU3hvQyxLQUFXdXhCLE9BQU90UCxNQUFNamlCLEtBQ3BDNDJDLElBQ0FGLEVBQWNBLEVBQVk3bEIsUUFBUXlYLEVBQU8sS0FJdEMsQ0FBQ3RvQyxFQUFPMDJDLElBSWhCLENBQUMsS0FBTUEsWUFHRkksR0FBb0JKLEdBU2hDLElBQUtBLEVBQWEsT0FBTyxLQUV6QixJQUFJN3ZCLEVBQXFCemdCLE9BQU9pbUMsT0FBT3hsQixTQUFTLEdBQzVDa3dCLEdBQVcsRUFFWEMsR0FBZ0IsRUFDaEJOLEVBQVlQLFdBQVcsT0FDdkJhLEdBQWdCLEVBQ2hCTixFQUFjQSxFQUFZbGxCLFVBQVUsSUFFcENrbEIsRUFBWVAsV0FBVyxPQUN2QmEsR0FBZ0IsRUFDaEJOLEVBQWNBLEVBQVlsbEIsVUFBVSxJQUd4QyxJQUFJeWxCLEVBQVksTUFDZkEsRUFBV1AsR0FBZUQsR0FBK0JDLEVBQWEsQ0FDbkUsT0FDQSxRQUNBLElBQ0EsTUFFYyxPQUFkTyxJQUNJRCxJQUNBQyxJQUFjLEdBRWxCcHdCLEVBQVMvVyxJQUFJbW5DLEVBQVcsU0FDeEJGLEdBQVcsR0FHZixJQUFJRyxFQUFhLE1BQ2hCQSxFQUFZUixHQUFlRCxHQUErQkMsRUFBYSxDQUNwRSxRQUNBLFNBQ0EsTUFFZSxPQUFmUSxJQUNJRixJQUNBRSxJQUFlLEdBRW5CcndCLEVBQVMvVyxJQUFJb25DLEVBQVksVUFDekJILEdBQVcsR0FHZixJQUFJSSxFQUFZLE1BQ2ZBLEVBQVdULEdBQWVELEdBQStCQyxFQUFhLENBQ25FLE9BQ0EsUUFDQSxJQUNBLE1BRWMsT0FBZFMsSUFDSUgsSUFDQUcsSUFBYyxHQUVsQnR3QixFQUFTL1csSUFBSXFuQyxFQUFXLFNBQ3hCSixHQUFXLEdBR2YsSUFBSUssRUFBVyxNQUNkQSxFQUFVVixHQUFlRCxHQUErQkMsRUFBYSxDQUNsRSxNQUNBLE9BQ0EsSUFDQSxNQUVhLE9BQWJVLElBQ0lKLElBQ0FJLElBQWEsR0FFakJ2d0IsRUFBUy9XLElBQUlzbkMsRUFBVSxRQUN2QkwsR0FBVyxHQUdmLElBQUlNLEVBQVksTUFDZkEsRUFBV1gsR0FBZUQsR0FBK0JDLEVBQWEsQ0FDbkUsT0FDQSxRQUNBLElBQ0EsTUFFYyxPQUFkVyxJQUNJTCxJQUNBSyxJQUFjLEdBRWxCeHdCLEVBQVMvVyxJQUFJdW5DLEVBQVcsU0FDeEJOLEdBQVcsR0FHZixJQUFJTyxFQUFjLE1BQ2pCQSxFQUFhWixHQUFlRCxHQUErQkMsRUFBYSxDQUNyRSxTQUNBLFVBQ0EsTUFFZ0IsT0FBaEJZLElBQ0lOLElBQ0FNLElBQWdCLEdBRXBCendCLEVBQVMvVyxJQUFJd25DLEVBQWEsV0FDMUJQLEdBQVcsR0FHZixJQUFJUSxFQUFjLEtBZWxCLE9BZENBLEVBQWFiLEdBQWVELEdBQStCQyxFQUFhLENBQ3JFLFNBQ0EsVUFDQSxJQUNBLE1BRWdCLE9BQWhCYSxJQUNJUCxJQUNBTyxJQUFnQixHQUVwQjF3QixFQUFTL1csSUFBSXluQyxFQUFhLFdBQzFCUixHQUFXLEdBR1ZBLEVBQ0Vsd0IsRUFEZSxjQUlWMndCLEdBQ1pDLEVBQ0F2TCxHQUVBLElBQUl4WSxFQUFPLEtBQ1A3TSxFQUFXaXdCLEdBQW9CVyxHQUNuQyxPQUFJNXdCLEdBQVl6Z0IsT0FBT2ltQyxPQUFPcUwsV0FBVzd3QixLQUNyQzZNLEVBQU9pa0IsR0FBYXpMLEdBQ3BCeFksRUFBT0EsRUFBSzVqQixJQUFJK1csR0FFWjZNLEdBQVFBLEVBQUtra0IsV0FDTmxrQixXQU9IbWtCLEdBQVVua0IsRUFBY3dZLEdBQ3BDLE9BQUksTUFBT3hZLEVBQThDLEtBRXhCLGFBQTdCd1ksRUFBVy9xQixjQUNKdVMsRUFBS2h0QixTQUVUZ3RCLEVBQUtodEIsT0FBT3dsQyxZQUdQNEwsR0FDWkMsRUFDQTdMLEdBSUEsT0FBT2tLLEdBRE95QixHQURIenhDLE9BQU9pbUMsT0FBTzBMLEdBQ0s3TCxHQUNKQSxZQUdkeUwsR0FBYXpMLEdBR3pCLE9BQU9rSyxHQURReUIsR0FESHp4QyxPQUFPaW1DLFNBQ2FILEdBQ0xBLFlBSWY4TCxHQUFVQyxFQUFVQyxHQUdoQyxJQURBLElBQUl6M0MsR0FESnkzQyxFQUFNQSxFQUFJcm5CLFFBQVEsTUFBTyxLQUNidG5CLE1BQU0sS0FDVDlILEVBQUksRUFBR2dDLEVBQUloRCxFQUFFVSxPQUFRTSxFQUFJZ0MsSUFBS2hDLEVBQUcsQ0FDdEMsSUFBSStCLEVBQUkvQyxFQUFFZ0IsR0FDVixLQUFJK0IsS0FBS3kwQyxHQUdMLE9BQU8sS0FGUEEsRUFBTUEsRUFBSXowQyxHQUtsQixNQUFtQixpQkFBUnkwQyxHQUFvQnB6QyxNQUFNbXZCLFFBQVFpa0IsR0FDbENBLEVBQ2UsaUJBQVJBLEVBQ1BBLEVBQUkvMUIsV0FFUixjQUlLaTJCLEdBQVdELEVBQWFFLEdBQ3BDLE1BQU1DLEVBQU14ekMsTUFBTVIsS0FBSzZ6QyxHQUNqQkksRUFBUUQsRUFBSUUsV0FBV3p1QyxHQUFNQSxJQUFNc3VDLElBQ25DSSxFQUFPSCxFQUFJNW1CLFVBQVU4bUIsV0FBV3p1QyxHQUFNQSxJQUFNc3VDLElBQ2xELE9BQWtCLElBQVhFLElBQTBCLElBQVZFLEVBQ2pCTixFQUNBQSxFQUFJMW1CLFVBQVU4bUIsRUFBT0osRUFBSS8yQyxPQUFTcTNDLFlBRzVCQyxHQUFtQnZqQixHQUMvQixHQUFjLE9BQVZBLEVBQWdCLE9BQU8sS0FHM0IsSUFHSW9ULEVBQVEsSUFBSXJ4QixPQUZaLG1FQUU2QixLQVVqQyxPQVJhaWUsRUFBTXJFLFFBQVF5WCxHQUFPLElBQUk5OUIsS0FDbEMsSUFBSTBJLEVBQVMxSSxFQUFLQSxFQUFLckosT0FBUyxHQUNoQyxPQUFJK1IsR0FBVUEsRUFBT3dsQyxNQUNWeGxDLEVBQU93bEMsTUFBTXB2QyxPQUVqQixlQU1DcXZDLEdBQ1pDLEVBQ0E1SyxFQUE2QixNQUs3QixJQUFJaHVDLEVBQVEsS0FDUmtvQyxFQUFZaEYsR0FBVTNSLE9BQzFCLEdBQXVCLGlCQUFacW5CLEVBRVAsR0FBSUEsRUFBUTlMLFNBQVMsS0FBTSxDQUN2QixJQUFJa0ssR0FBZ0IsRUFDaEI0QixFQUFRekMsV0FBVyxPQUNuQmEsR0FBZ0IsRUFDaEI0QixFQUFVQSxFQUFRcG5CLFVBQVUsSUFFaEMsSUFBSXFuQixFQUFZenlDLE9BQU9pbUMsT0FBT3VNLEVBQVMxZSxJQUFZLEdBQy9DMmUsRUFBVWpCLFlBQ1Y1M0MsRUFBUTY0QyxFQUFVQyxLQUNkMXlDLE9BQU9pbUMsT0FBTyxRQUFTLFNBQVMsR0FDaEMsV0FFQTJLLElBQ0FoM0MsSUFBUyxHQUVia29DLEVBQVloRixHQUFVNlYsV0FHMUIsR0FBSS9LLEVBQWMsQ0FFZCxNQUFNZ0wsRUFBT3ZsQyxPQUFPdWxDLEtBQUtoTCxHQUN6QixJQUFLLElBQUkzZ0MsS0FBTzJyQyxFQUNaLEdBQW1CLGlCQUFSM3JDLEVBQWtCLENBQ3pCLElBQUlpN0IsRUFBUSxJQUFJcnhCLE9BQU81SixFQUFLLE1BRTVCLEdBQ0lpN0IsRUFBTXQvQixLQUFLNHZDLElBQ1hybkIsT0FBT2lYLFNBQVN3RixFQUFhM2dDLElBQy9CLENBQ0UsSUFBSTRyQyxFQUFtQmpMLEVBQWEzZ0MsR0FBSzZVLFdBQ3pDMDJCLEVBQVVBLEVBQVEvbkIsUUFBUXlYLEVBQU8yUSxHQUdqQyxPQUtaajVDLEVBQVF1b0MsV0FBV3FRLEdBQ2ZybkIsT0FBT3RQLE1BQU1qaUIsS0FDYkEsRUFBUSxXQUdaQSxFQUFRdW9DLFdBQVdxUSxHQUNmcm5CLE9BQU90UCxNQUFNamlCLEtBQ2JBLEVBQVEsVUFJTSxpQkFBWjQ0QyxJQUNkNTRDLEVBQVE0NEMsR0FHWixNQUFPLENBQUVodkMsS0FBTXMrQixFQUFXbG9DLE1BQU9BLFlBSXJCazVDLEdBQ1pueEMsRUFDQW94QyxFQUFxQixHQUNyQmh4QixFQUFpQixJQUVqQixJQUFJaXhCLEVBQVlDLEdBQVUsUUFBUTF4QyxPQUFPLE9BQ3pDLElBQUkyeEMsRUFBWUYsRUFDWHp4QyxPQUFPLFFBQ1BJLEtBQUtBLEdBQ0xILEtBQUssS0FBTSxPQUNYQSxLQUFLLEtBQU0sT0FDWnV4QyxHQUNBRyxFQUFVMXhDLEtBQUssUUFBU3V4QyxHQUV4Qmh4QixHQUNBbXhCLEVBQVUxeEMsS0FBSyxZQUFhLFVBQVl1Z0IsRUFBUyxLQUVyRCxJQUFJbFMsRUFBT21qQyxFQUFVaHRDLE9BQU9tdEMsVUFFNUIsT0FEQUgsRUFBVTl3QyxTQUNILENBQUVpb0IsTUFBT3RhLEVBQUtzYSxNQUFPK2pCLE9BQVFyK0IsRUFBS3ErQixpQkFJN0JrRixHQUFXQyxFQUFXQyxFQUFjQyxHQUNoRCxJQUVJQyxHQUY0QyxFQUFqQ3JSLFdBQVdrUixFQUFLN3hDLEtBQUssV0FFVjh4QyxFQUN0QkcsR0FGOEMsRUFBbEN0UixXQUFXa1IsRUFBSzd4QyxLQUFLLFlBRVQreEMsRUFDNUJGLEVBQUs3eEMsS0FBSyxRQUFTZ3lDLEdBQ25CSCxFQUFLN3hDLEtBQUssU0FBVWl5QyxZQUdSQyxHQUFTTCxFQUFXTSxFQUFnQkMsR0FDaEQsSUFBSUMsRUFBUSxJQUFJeEYsR0FBVWdGLEVBQUs3eEMsS0FBSyxjQUNwQzZ4QyxFQUFLN3hDLEtBQ0QsWUFDQSxjQUNLcXlDLEVBQU1oMUMsV0FBYTgwQyxHQUNwQixLQUNDRSxFQUFNLzBDLFdBQWE4MEMsR0FDcEIsS0FLWixTQUFTRSxHQUFVbnlDLEdBTWYsT0FEQUEsR0FEQUEsR0FEQUEsRUFBT0EsRUFBSzhvQixRQUFRLHNCQUF1QixLQUMvQkEsUUFBUSxjQUFlLE1BQ3ZCQSxRQUFRLE9BQVEsZ0NDbmQvQixTQUFVN2QsR0FPVixJQUFJbW5DLEVBQVcsV0FFZEMsRUFBYSxtQkFDYkMsRUFBVSxVQXFCVkMsRUFBYSxTQUFTQyxFQUFTbjNDLEdBQzlCLElBQUlULEVBQVEsSUFBSXNHLE1BQU1zeEMsRUFBVSxpQkFBbUJuM0MsR0FHbkQsTUFGQVQsRUFBTVMsTUFBUUEsRUFDZFQsRUFBTTYzQyxZQUFjRCxFQUNkNTNDLEdBT1BvQixHQUFJLEVBR0owMkMsRUFBWSxDQUFDLElBQUsxMkMsRUFBRyxJQUFLQSxFQUFHLElBQUtBLEVBQUcsSUFBS0EsR0FJMUMyMkMsRUFBYSxDQUNaLEtBQU0sRUFBRyxLQUFNLEVBQUcsSUFBSyxFQUFJLElBQUssRUFBSSxJQUFLLEVBQ3pDLEtBQU0sRUFBRyxLQUFNLEVBQUcsTUFBTyxFQUFHLE1BQU8sRUFDbkMsSUFBSyxFQUFJLElBQUssRUFBSSxLQUFNLEVBQUksS0FBTSxFQUNsQyxLQUFLLEVBQUksS0FBTSxFQUFHLE1BQU8sRUFDekIsSUFBSyxFQUFHLElBQUssRUFDYixJQUFLLEdBQUksSUFBSyxHQUFJLElBQUssSUFHeEJDLEVBQThCLENBQUNDLEVBQUs3MkMsRUFBRzBFLEVBQUsxRSxHQUU1QzgyQyxFQUFlLFNBQVM1QyxHQUN2QixJQUFpQjZDLEVBQWJDLEVBQVUsRUFDZCxJQUFJLElBQUkxdEMsS0FBTzRxQyxHQUNWNkMsRUFBTXp0QyxFQUFJbE0sUUFBVTQ1QyxHQUFXOUMsRUFBSXR1QyxlQUFlMEQsS0FDckQwdEMsRUFBVUQsR0FHWixPQUFPQyxHQUVSQyxFQUFlSCxFQUFhSixHQUM1QlEsRUFBZ0JKLEVBQWFILEdBSTdCUSxFQUFXLENBQ1ZDLE1BQVEsRUFDUkMsT0FBUyxFQUNUQyxLQUFRLE1BS1RDLEVBQW1CLFNBQVNDLEdBQzNCLE9BQU9iLEVBQVdhLElBQVcsR0FJOUJDLEVBQXlCLFNBQVVDLEVBQVUxNkMsRUFBTVcsR0FFbEQsTUFBTyxDQUNOa0ksS0FGd0IsT0FBYjZ4QyxHQUFrQyxPQUFiQSxFQXpFcEIsb0JBREQsbUJBNkVYQSxTQUFVQSxFQUNWMTZDLEtBQU1BLEVBQ05XLE1BQU9BLElBSVRnNkMsRUFBaUIsU0FBU0MsR0FDekIsT0FBUUEsR0FBTSxJQUFNQSxHQUFNLElBRTNCQyxFQUFvQixTQUFTRCxHQUM1QixPQUFTQSxHQUFNLElBQU1BLEdBQU0sSUFDeEJBLEdBQU0sSUFBTUEsR0FBTSxLQUNsQkEsR0FBTSxNQUFRakIsRUFBVzFvQixPQUFPNnBCLGFBQWFGLEtBQzdDaEIsRUFBNEJoeEMsZUFBZXFvQixPQUFPNnBCLGFBQWFGLEtBRW5FRyxFQUFtQixTQUFTSCxHQUMzQixPQUFTQSxHQUFNLElBQU1BLEdBQU0sSUFDeEJBLEdBQU0sSUFBTUEsR0FBTSxLQUNsQkEsR0FBTSxJQUFNQSxHQUFNLElBQ2xCQSxHQUFNLE1BQVFqQixFQUFXMW9CLE9BQU82cEIsYUFBYUYsS0FDN0NoQixFQUE0Qmh4QyxlQUFlcW9CLE9BQU82cEIsYUFBYUYsS0FNbkVJLEVBQU8sU0FBU0MsR0FpYmYsSUE5YUEsSUE0YWFDLEVBQU03dkMsRUE1YWZoSixFQUFRLEVBQ1g4NEMsRUFBYUYsRUFBS2phLE9BQ2xCb2EsRUFBaUJILEVBQUtscEIsV0FDdEJzcEIsRUFBUSxTQUFTMzZDLEdBQUssT0FBT3k2QyxFQUFXeHpDLEtBQUtzekMsRUFBTXY2QyxJQUNuRDQ2QyxFQUFZLFNBQVM1NkMsR0FBSyxPQUFPMDZDLEVBQWV6ekMsS0FBS3N6QyxFQUFNdjZDLElBQzNETixFQUFTNjZDLEVBQUs3NkMsT0FHZG03QyxFQUFlLFdBR2QsSUFGQSxJQUFJWCxFQUFLVSxFQUFVajVDLEdBRU4sS0FBUHU0QyxHQUFvQixJQUFQQSxHQUFtQixLQUFQQSxHQUFvQixLQUFQQSxHQUMzQ0EsRUFBS1UsSUFBWWo1QyxJQUtuQm01QyxFQUFtQixXQUNsQixJQUNDQyxFQUFZQyxFQURUenpDLEVBQU8wekMsSUFJWCxPQUZBSixJQWpIVyxLQW1IUkQsRUFBVWo1QyxHQXdCTDRGLEdBdEJQNUYsS0FDQW81QyxFQUFhRCxNQUVaakMsRUFBVyxzQkFBdUJsM0MsR0FFbkNrNUMsSUF4SFUsS0F5SFBELEVBQVVqNUMsSUFDWkEsS0FDQXE1QyxFQUFZRixNQUVYakMsRUFBVyxzQkFBdUJsM0MsR0FFNUIsQ0FDTndHLEtBN0lZLHdCQThJWlosS0FBTUEsRUFDTnd6QyxXQUFZQSxFQUNaQyxVQUFXQSxTQUdabkMsRUFBVyxhQUFjbDNDLEtBVzVCdTVDLEVBQWlCLFdBQ2hCTCxJQUVBLFFBRFVNLEVBQVdaLEVBQUthLE9BQU96NUMsRUFBTzYzQyxHQUFnQjZCLEVBQVNGLEVBQVN6N0MsT0FDcEUyN0MsRUFBUyxHQUFHLENBSWpCLEdBQUdwQyxFQUFXL3dDLGVBQWVpekMsTUFDM0JoQixFQUFrQlMsRUFBVWo1QyxLQUM1QkEsRUFBTXc1QyxFQUFTejdDLE9BQVE2NkMsRUFBSzc2QyxTQUFXMjZDLEVBQWlCTyxFQUFVajVDLEVBQU13NUMsRUFBU3o3QyxVQUdsRixPQURBaUMsR0FBUzA1QyxFQUNGRixFQUVSQSxFQUFXQSxFQUFTQyxPQUFPLElBQUtDLEdBRWpDLE9BQU8sR0FLUkosRUFBeUIsZUFDZHR3QyxFQUFNMndDLEVBQU1DLEVBQU1DLEVBQU9DLEVBQVduOEMsRUFBTVcsRUFBT0QsRUFBRzA3QyxFQVE5RCxHQUpBcDhDLEVBQU9xOEMsTUFDUEwsRUFBT0osS0FJTixPQUFPNTdDLEVBY1IsSUFUQW04QyxFQUFZLENBQUVsOUMsTUFBTys4QyxFQUFNQyxLQUFNMUIsRUFBaUJ5QixLQUVsRHI3QyxFQUFRMDdDLE1BRVA5QyxFQUFXLDZCQUErQnlDLEVBQU0zNUMsR0FFakQ2NUMsRUFBUSxDQUFDbDhDLEVBQU1tOEMsRUFBV3g3QyxJQUduQnE3QyxFQUFPSixNQUdELEtBRlpLLEVBQU8xQixFQUFpQnlCLEtBRFEsQ0FVaEMsSUFKQUcsRUFBWSxDQUFFbDlDLE1BQU8rOEMsRUFBTUMsS0FBTUEsR0FFakNHLEVBQVdKLEVBRUhFLEVBQU05N0MsT0FBUyxHQUFPNjdDLEdBQVFDLEVBQU1BLEVBQU05N0MsT0FBUyxHQUFHNjdDLE1BQzdEdDdDLEVBQVF1N0MsRUFBTXAwQixNQUNkazBCLEVBQU9FLEVBQU1wMEIsTUFBTTdvQixNQUNuQmUsRUFBT2s4QyxFQUFNcDBCLE1BQ2J6YyxFQUFPb3ZDLEVBQXVCdUIsRUFBTWg4QyxFQUFNVyxHQUMxQ3U3QyxFQUFNL3lDLEtBQUtrQyxJQUdaQSxFQUFPZ3hDLE1BRU45QyxFQUFXLDZCQUErQjZDLEVBQVUvNUMsR0FFckQ2NUMsRUFBTS95QyxLQUFLZ3pDLEVBQVc5d0MsR0FLdkIsSUFEQUEsRUFBTzZ3QyxFQURQeDdDLEVBQUl3N0MsRUFBTTk3QyxPQUFTLEdBRWJNLEVBQUksR0FDVDJLLEVBQU9vdkMsRUFBdUJ5QixFQUFNeDdDLEVBQUksR0FBR3pCLE1BQU9pOUMsRUFBTXg3QyxFQUFJLEdBQUkySyxHQUNoRTNLLEdBQUssRUFFTixPQUFPMkssR0FLUmd4QyxFQUFjLFdBQ2IsSUFBSXpCLEVBQUlpQixFQUFVRSxFQUFRMXdDLEVBSzFCLEdBSEFrd0MsSUFDQVgsRUFBS1UsRUFBVWo1QyxHQUVaczRDLEVBQWVDLElBbFBQLEtBa1BjQSxFQUV4QixPQUFPMEIsSUFHUixHQXJQVyxLQXFQUjFCLEdBcFBRLEtBb1BjQSxFQUV4QnZ2QyxFQUFPa3hDLFNBQ0QsR0FwUEksS0FvUEEzQixFQUNWdnZDLEVBQU9teEMsUUFDRCxDQUdOLElBREFULEdBREFGLEVBQVdaLEVBQUthLE9BQU96NUMsRUFBTzQzQyxJQUNaNzVDLE9BQ1oyN0MsRUFBUyxHQUFHLENBSWpCLEdBQUdyQyxFQUFVOXdDLGVBQWVpekMsTUFDMUJoQixFQUFrQlMsRUFBVWo1QyxLQUM1QkEsRUFBTXc1QyxFQUFTejdDLE9BQVM2NkMsRUFBSzc2QyxTQUFXMjZDLEVBQWlCTyxFQUFVajVDLEVBQU13NUMsRUFBU3o3QyxVQUduRixPQURBaUMsR0FBUzA1QyxFQUNGLENBQ05sekMsS0EvUUssa0JBZ1JMNnhDLFNBQVVtQixFQUNWWSxTQUFVSixJQUNWdHlDLFFBQVEsR0FHVjh4QyxFQUFXQSxFQUFTQyxPQUFPLElBQUtDLEdBRzdCbEIsRUFBa0JELEdBQ3JCdnZDLEVBQU9xeEMsSUEvUUUsS0FnUkM5QixJQUNWdnZDLEVBQU9zeEMsS0FJVCxJQUFLdHhDLEVBQ0osT0FBTyxFQVlSLElBVEFrd0MsSUFFQVgsRUFBS1UsRUFBVWo1QyxHQS9SSixLQXNTTHU0QyxHQWhTSyxLQWdTaUJBLEdBbFNqQixLQWtTdUNBLEdBQ2pEdjRDLElBdlNVLEtBd1NQdTRDLEdBQ0ZXLElBQ0Fsd0MsRUFBTyxDQUNOeEMsS0FBTXd3QyxFQUNOdUQsVUFBVSxFQUNWenBCLE9BQVE5bkIsRUFDUitKLFNBQVVzbkMsTUF4U0YsS0EwU0E5QixHQUNUdnZDLEVBQU8sQ0FDTnhDLEtBQU13d0MsRUFDTnVELFVBQVUsRUFDVnpwQixPQUFROW5CLEVBQ1IrSixTQUFVb21DLEtBRVhELElBaFRTLE1BaVRUWCxFQUFLVSxFQUFVajVDLEtBRWRrM0MsRUFBVyxhQUFjbDNDLEdBRTFCQSxLQXhUUyxLQXlUQXU0QyxJQUVUdnZDLEVBQU8sQ0FDTnhDLEtBdlVLLGlCQXdVTGxGLFVBQWFrNUMsRUE1VEwsSUE2VFJDLE9BQVF6eEMsSUFHVmt3QyxJQUNBWCxFQUFLVSxFQUFVajVDLEdBR2hCLE9BQU9nSixHQUlSaXhDLEVBQXVCLFdBRXRCLElBREEsSUFBaUIxQixFQUFJbUMsRUFBakIxNEMsRUFBUyxHQUNQczJDLEVBQWVXLEVBQVVqNUMsS0FDOUJnQyxHQUFVZzNDLEVBQU1oNUMsS0FHakIsR0FuVlcsS0FtVlJpNUMsRUFBVWo1QyxHQUdaLElBRkFnQyxHQUFVZzNDLEVBQU1oNUMsS0FFVnM0QyxFQUFlVyxFQUFVajVDLEtBQzlCZ0MsR0FBVWczQyxFQUFNaDVDLEtBS2xCLEdBQVUsT0FEVnU0QyxFQUFLUyxFQUFNaDVDLEtBQ2EsTUFBUHU0QyxFQUFZLENBTTVCLElBTEF2MkMsR0FBVWczQyxFQUFNaDVDLEtBRU4sT0FEVnU0QyxFQUFLUyxFQUFNaDVDLEtBQ2EsTUFBUHU0QyxJQUNoQnYyQyxHQUFVZzNDLEVBQU1oNUMsTUFFWHM0QyxFQUFlVyxFQUFVajVDLEtBQzlCZ0MsR0FBVWczQyxFQUFNaDVDLEtBRWJzNEMsRUFBZVcsRUFBVWo1QyxFQUFNLEtBQ2xDazNDLEVBQVcsc0JBQXdCbDFDLEVBQVNnM0MsRUFBTWg1QyxHQUFTLElBQUtBLEdBY2xFLE9BVEEwNkMsRUFBU3pCLEVBQVVqNUMsR0FFaEJ3NEMsRUFBa0JrQyxHQUNwQnhELEVBQVcsOENBQ1JsMUMsRUFBU2czQyxFQUFNaDVDLEdBQVMsSUFBS0EsR0EvV3RCLEtBZ1hEMDZDLEdBQ1R4RCxFQUFXLG9CQUFxQmwzQyxHQUcxQixDQUNOd0csS0FBTXl3QyxFQUNOcjZDLE1BQU91b0MsV0FBV25qQyxHQUNsQjI0QyxJQUFLMzRDLElBTVBrNEMsRUFBc0IsV0FHckIsSUFGQSxJQUFzRDNCLEVBQWxEekQsRUFBTSxHQUFJOEYsRUFBUTVCLEVBQU1oNUMsS0FBVTY2QyxHQUFTLEVBRXpDNzZDLEVBQVFqQyxHQUFRLENBRXJCLElBREF3NkMsRUFBS1MsRUFBTWg1QyxRQUNENDZDLEVBQU8sQ0FDaEJDLEdBQVMsRUFDVCxNQUNNLEdBQVUsT0FBUHRDLEVBR1QsT0FEQUEsRUFBS1MsRUFBTWg1QyxNQUVWLElBQUssSUFBSzgwQyxHQUFPLEtBQU0sTUFDdkIsSUFBSyxJQUFLQSxHQUFPLEtBQU0sTUFDdkIsSUFBSyxJQUFLQSxHQUFPLEtBQU0sTUFDdkIsSUFBSyxJQUFLQSxHQUFPLEtBQU0sTUFDdkIsSUFBSyxJQUFLQSxHQUFPLEtBQU0sTUFDdkIsSUFBSyxJQUFLQSxHQUFPLEtBQVEsTUFDekIsUUFBVUEsR0FBT3lELE9BR2xCekQsR0FBT3lELEVBUVQsT0FKSXNDLEdBQ0gzRCxFQUFXLHlCQUF5QnBDLEVBQUksSUFBSzkwQyxHQUd2QyxDQUNOd0csS0FBTXl3QyxFQUNOcjZDLE1BQU9rNEMsRUFDUDZGLElBQUtDLEVBQVE5RixFQUFNOEYsSUFRckJQLEVBQW1CLFdBQ2xCLElBQTBDUyxFQUF0Q3ZDLEVBQUtVLEVBQVVqNUMsR0FBUWpCLEVBQVFpQixFQVFuQyxJQU5HdzRDLEVBQWtCRCxHQUNwQnY0QyxJQUVBazNDLEVBQVcsY0FBZ0I4QixFQUFNaDVDLEdBQVFBLEdBR3BDQSxFQUFRakMsSUFDYnc2QyxFQUFLVSxFQUFVajVDLEdBQ1owNEMsRUFBaUJILEtBQ25CdjRDLElBT0YsT0FGQTg2QyxFQUFhbEMsRUFBS2ozQyxNQUFNNUMsRUFBT2lCLEdBRTVCODNDLEVBQVN2eEMsZUFBZXUwQyxHQUNuQixDQUNOdDBDLEtBQU15d0MsRUFDTnI2QyxNQUFPazdDLEVBQVNnRCxHQUNoQkgsSUFBS0csR0EvWEMsU0FpWUVBLEVBQ0YsQ0FBRXQwQyxLQXZjRixrQkF5Y0EsQ0FDTkEsS0E3Y1EsYUE4Y1JILEtBQU15MEMsSUFVVE4sRUFBa0IsU0FBU08sR0FHMUIsSUFGQSxJQUFJbEMsRUFBaUI3dkMsRUFBWDVCLEVBQU8sR0FBVXl6QyxHQUFTLEVBQ2hDRyxFQUFrQixFQUNoQmg3QyxFQUFRakMsR0FBUSxDQUdyQixHQUZBbTdDLEtBQ0FMLEVBQU9JLEVBQVVqNUMsTUFDTCs2QyxFQUFhLENBQ3hCRixHQUFTLEVBQ1Q3NkMsSUFoZFMsS0FpZE4rNkMsR0FBK0JDLEdBQW1CQSxHQUFtQjV6QyxFQUFLckosUUFDNUVtNUMsRUFBVyxvQkFBc0J0b0IsT0FBTzZwQixhQUFhc0MsR0FBYy82QyxHQUVwRSxNQUNNLEdBemRHLEtBeWRDNjRDLEdBR1YsR0FGQTc0QyxNQUNBZzdDLElBQ3VCNXpDLEVBQUtySixPQUMzQixHQXpkUSxLQXlkTGc5QyxFQUNGN0QsRUFBVyxxQkFBc0JsM0MsUUFFN0IsR0ExZEcsS0EwZEErNkMsRUFDUCxJQUFJLElBQUlFLEVBQU03ekMsRUFBS3JKLE9BQVFrOUMsRUFBS0QsRUFBaUJDLElBQ2hEN3pDLEVBQUtOLEtBQUssV0FLYmtDLEVBQU9td0MsTUFDS253QyxFQUFLeEMsT0FBU3V3QyxHQUN6QkcsRUFBVyxpQkFBa0JsM0MsR0FFOUJvSCxFQUFLTixLQUFLa0MsR0FNWixPQUhLNnhDLEdBQ0ozRCxFQUFXLFlBQWN0b0IsT0FBTzZwQixhQUFhc0MsR0FBYy82QyxHQUVyRG9ILEdBUVJrekMsRUFBYyxXQUNidDZDLElBQ0EsSUFBSWdKLEVBQU9td0MsSUFFWCxHQURBRCxJQXhmVyxLQXlmUkQsRUFBVWo1QyxHQUVaLE9BREFBLElBQ09nSixFQUVQa3VDLEVBQVcsYUFBY2wzQyxJQU8zQm02QyxFQUFjLFdBRWIsT0FEQW42QyxJQUNPLENBQ053RyxLQTlnQlEsa0JBK2dCUjAwQyxTQUFVVixFQXRnQkEsTUEwZ0JaNW5DLEVBQVEsR0FFSDVTLEVBQVFqQyxHQTFnQkQsTUEyZ0JaODZDLEVBQU9JLEVBQVVqNUMsS0FuaEJMLEtBdWhCZTY0QyxFQUMxQjc0QyxLQUdJZ0osRUFBT213QyxLQUNWdm1DLEVBQU05TCxLQUFLa0MsR0FHRmhKLEVBQVFqQyxHQUNqQm01QyxFQUFXLGVBQWlCOEIsRUFBTWg1QyxHQUFTLElBQUtBLEdBTW5ELE9BQW9CLElBQWpCNFMsRUFBTTdVLE9BQ0Q2VSxFQUFNLEdBRU4sQ0FDTnBNLEtBQU11d0MsRUFDTm9FLEtBQU12b0MsSUFNVitsQyxFQUFLeUMsUUFBVSxRQUNmekMsRUFBSzc1QixTQUFXLFdBQWEsTUFBTyx3Q0FBMEM2NUIsRUFBS3lDLFNBT25GekMsRUFBSzBDLFdBQWEsU0FBU0MsR0FFRixPQUR4QjFELEVBQWVsNUMsS0FBS1EsSUFBSW84QyxFQUFRdjlDLE9BQVE2NUMsR0FDeENQLEVBQVVpRSxHQUFXMzZDLEVBQVUyQixNQVNoQ3EyQyxFQUFLNEMsWUFBYyxTQUFTRCxFQUFTRSxHQUdwQyxPQUZBM0QsRUFBZ0JuNUMsS0FBS1EsSUFBSW84QyxFQUFRdjlDLE9BQVE4NUMsR0FDekNQLEVBQVdnRSxHQUFXRSxFQUNmbDVDLE1BUVJxMkMsRUFBSzhDLGtCQUFvQixTQUFTekcsR0FDTSxPQUF2Q3VDLEVBQTRCdkMsR0FBUXIwQyxFQUFVMkIsTUFTL0NxMkMsRUFBSytDLFdBQWEsU0FBU0MsRUFBY0MsR0FFeEMsT0FEQTlELEVBQVM2RCxHQUFnQkMsRUFDbEJ0NUMsTUFRUnEyQyxFQUFLa0QsY0FBZ0IsU0FBU1AsR0FLN0IsY0FKT2pFLEVBQVVpRSxHQUNkQSxFQUFRdjlDLFNBQVc2NUMsSUFDckJBLEVBQWVILEVBQWFKLElBRXRCLzBDLE1BT1JxMkMsRUFBS21ELGtCQUFvQixXQUl4QixPQUhBekUsRUFBWSxHQUNaTyxFQUFlLEVBRVJ0MUMsTUFRUnEyQyxFQUFLb0QscUJBQXVCLFNBQVMvRyxHQUVwQyxjQURPdUMsRUFBNEJ2QyxHQUM1QjF5QyxNQVNScTJDLEVBQUtxRCxlQUFpQixTQUFTVixHQUs5QixjQUpPaEUsRUFBV2dFLEdBQ2ZBLEVBQVF2OUMsU0FBVzg1QyxJQUNyQkEsRUFBZ0JKLEVBQWFILElBRXZCaDFDLE1BT1JxMkMsRUFBS3NELG1CQUFxQixXQUl6QixPQUhBM0UsRUFBYSxHQUNiTyxFQUFnQixFQUVUdjFDLE1BUVJxMkMsRUFBS3VELGNBQWdCLFNBQVNQLEdBRTdCLGNBRE83RCxFQUFTNkQsR0FDVHI1QyxNQU9ScTJDLEVBQUt3RCxrQkFBb0IsV0FHeEIsT0FGQXJFLEVBQVcsR0FFSngxQyxNQWlCOEI4NUMsRUFBT0MsUUFDM0NBLEVBQVVELFVBQWlCekQsRUFFM0IwRCxRQUFnQjFELEVBbHRCbkIsMkJDSEMsV0FHRyxJQUFJaHNCLEVBQUssQ0FDTDJ2QixXQUFZLE9BQ1pDLFNBQVUsT0FDVkMsU0FBVSxPQUNWQyxjQUFlLE9BQ2Z6NkMsT0FBUSxVQUNSMDZDLFlBQWEsZUFDYkMsS0FBTSxNQUNOQyxTQUFVLE9BQ1ZqNEMsS0FBTSxZQUNOazRDLE9BQVEsV0FDUkMsWUFBYSwyRkFDYjd5QyxJQUFLLHNCQUNMOHlDLFdBQVksd0JBQ1pDLGFBQWMsYUFDZC92QixLQUFNLFNBR1YsU0FBU2d3QixFQUFRaHpDLEdBRWIsT0FBT2l6QyxFQUFlQyxFQUFjbHpDLEdBQU0zSSxXQUc5QyxTQUFTODdDLEVBQVMxSyxFQUFLMkssR0FDbkIsT0FBT0osRUFBUTcvQyxNQUFNLEtBQU0sQ0FBQ3MxQyxHQUFLN3JDLE9BQU93MkMsR0FBUSxLQUdwRCxTQUFTSCxFQUFlSSxFQUFZRCxHQUNoQyxJQUFpRHBDLEVBQWtCNThDLEVBQUcrQixFQUFHbTlDLEVBQUlwbUIsRUFBS3FtQixFQUFlQyxFQUFZQyxFQUFhendCLEVBQXRIMHdCLEVBQVMsRUFBR0MsRUFBY04sRUFBV3YvQyxPQUFhOHpCLEVBQVMsR0FDL0QsSUFBS3h6QixFQUFJLEVBQUdBLEVBQUl1L0MsRUFBYXYvQyxJQUN6QixHQUE2QixpQkFBbEJpL0MsRUFBV2ovQyxHQUNsQnd6QixHQUFVeXJCLEVBQVdqL0MsUUFFcEIsR0FBNkIsaUJBQWxCaS9DLEVBQVdqL0MsR0FBaUIsQ0FFeEMsSUFEQWsvQyxFQUFLRCxFQUFXai9DLElBQ1R1M0MsS0FFSCxJQURBcUYsRUFBTW9DLEVBQUtNLEdBQ052OUMsRUFBSSxFQUFHQSxFQUFJbTlDLEVBQUczSCxLQUFLNzNDLE9BQVFxQyxJQUFLLENBQ2pDLEdBQVdMLE1BQVBrN0MsRUFDQSxNQUFNLElBQUlwMUMsTUFBTW8zQyxFQUFRLGdFQUFpRU0sRUFBRzNILEtBQUt4MUMsR0FBSW05QyxFQUFHM0gsS0FBS3gxQyxFQUFFLEtBRW5INjZDLEVBQU1BLEVBQUlzQyxFQUFHM0gsS0FBS3gxQyxTQUl0QjY2QyxFQURLc0MsRUFBR00sU0FDRlIsRUFBS0UsRUFBR00sVUFHUlIsRUFBS00sS0FPZixHQUpJaHhCLEVBQUc2dkIsU0FBUzUyQyxLQUFLMjNDLEVBQUcvMkMsT0FBU21tQixFQUFHOHZCLGNBQWM3MkMsS0FBSzIzQyxFQUFHLzJDLE9BQVN5MEMsYUFBZTZDLFdBQzlFN0MsRUFBTUEsS0FHTnR1QixFQUFHK3ZCLFlBQVk5MkMsS0FBSzIzQyxFQUFHLzJDLE9BQXlCLGlCQUFSeTBDLEdBQW9CcDhCLE1BQU1vOEIsR0FDbEUsTUFBTSxJQUFJbjRCLFVBQVVtNkIsRUFBUSwwQ0FBMkNoQyxJQU8zRSxPQUpJdHVCLEVBQUczcUIsT0FBTzRELEtBQUsyM0MsRUFBRy8yQyxRQUNsQmszQyxFQUFjekMsR0FBTyxHQUdqQnNDLEVBQUcvMkMsTUFDUCxJQUFLLElBQ0R5MEMsRUFBTWg5QixTQUFTZzlCLEVBQUssSUFBSW44QixTQUFTLEdBQ2pDLE1BQ0osSUFBSyxJQUNEbThCLEVBQU1yc0IsT0FBTzZwQixhQUFheDZCLFNBQVNnOUIsRUFBSyxLQUN4QyxNQUNKLElBQUssSUFDTCxJQUFLLElBQ0RBLEVBQU1oOUIsU0FBU2c5QixFQUFLLElBQ3BCLE1BQ0osSUFBSyxJQUNEQSxFQUFNOEMsS0FBS0MsVUFBVS9DLEVBQUssS0FBTXNDLEVBQUdwd0IsTUFBUWxQLFNBQVNzL0IsRUFBR3B3QixPQUFTLEdBQ2hFLE1BQ0osSUFBSyxJQUNEOHRCLEVBQU1zQyxFQUFHbHdCLFVBQVk4WCxXQUFXOFYsR0FBSzd3QixjQUFjbXpCLEVBQUdsd0IsV0FBYThYLFdBQVc4VixHQUFLN3dCLGdCQUNuRixNQUNKLElBQUssSUFDRDZ3QixFQUFNc0MsRUFBR2x3QixVQUFZOFgsV0FBVzhWLEdBQUsxdEIsUUFBUWd3QixFQUFHbHdCLFdBQWE4WCxXQUFXOFYsR0FDeEUsTUFDSixJQUFLLElBQ0RBLEVBQU1zQyxFQUFHbHdCLFVBQVl1QixPQUFPVCxPQUFPOHNCLEVBQUl2dEIsWUFBWTZ2QixFQUFHbHdCLGFBQWU4WCxXQUFXOFYsR0FDaEYsTUFDSixJQUFLLElBQ0RBLEdBQU9oOUIsU0FBU2c5QixFQUFLLE1BQVEsR0FBR244QixTQUFTLEdBQ3pDLE1BQ0osSUFBSyxJQUNEbThCLEVBQU1yc0IsT0FBT3FzQixHQUNiQSxFQUFPc0MsRUFBR2x3QixVQUFZNHRCLEVBQUk3c0IsVUFBVSxFQUFHbXZCLEVBQUdsd0IsV0FBYTR0QixFQUN2RCxNQUNKLElBQUssSUFDREEsRUFBTXJzQixTQUFTcXNCLEdBQ2ZBLEVBQU9zQyxFQUFHbHdCLFVBQVk0dEIsRUFBSTdzQixVQUFVLEVBQUdtdkIsRUFBR2x3QixXQUFhNHRCLEVBQ3ZELE1BQ0osSUFBSyxJQUNEQSxFQUFNNXFDLE9BQU96TyxVQUFVa2QsU0FBU3haLEtBQUsyMUMsR0FBS3Q1QyxNQUFNLEdBQUksR0FBR29jLGNBQ3ZEazlCLEVBQU9zQyxFQUFHbHdCLFVBQVk0dEIsRUFBSTdzQixVQUFVLEVBQUdtdkIsRUFBR2x3QixXQUFhNHRCLEVBQ3ZELE1BQ0osSUFBSyxJQUNEQSxFQUFNaDlCLFNBQVNnOUIsRUFBSyxNQUFRLEVBQzVCLE1BQ0osSUFBSyxJQUNEQSxFQUFNQSxFQUFJcHFCLFVBQ1ZvcUIsRUFBT3NDLEVBQUdsd0IsVUFBWTR0QixFQUFJN3NCLFVBQVUsRUFBR212QixFQUFHbHdCLFdBQWE0dEIsRUFDdkQsTUFDSixJQUFLLElBQ0RBLEdBQU9oOUIsU0FBU2c5QixFQUFLLE1BQVEsR0FBR244QixTQUFTLElBQ3pDLE1BQ0osSUFBSyxJQUNEbThCLEdBQU9oOUIsU0FBU2c5QixFQUFLLE1BQVEsR0FBR244QixTQUFTLElBQUkrTyxjQUdqRGxCLEVBQUdnd0IsS0FBSy8yQyxLQUFLMjNDLEVBQUcvMkMsTUFDaEJxckIsR0FBVW9wQixJQUdOdHVCLEVBQUczcUIsT0FBTzRELEtBQUsyM0MsRUFBRy8yQyxPQUFXazNDLElBQWVILEVBQUd0d0IsS0FLL0NBLEVBQU8sSUFKUEEsRUFBT3l3QixFQUFjLElBQU0sSUFDM0J6QyxFQUFNQSxFQUFJbjhCLFdBQVcyTyxRQUFRZCxFQUFHTSxLQUFNLEtBSzFDdXdCLEVBQWdCRCxFQUFHVSxTQUEyQixNQUFoQlYsRUFBR1UsU0FBbUIsSUFBTVYsRUFBR1UsU0FBU3RmLE9BQU8sR0FBSyxJQUNsRjhlLEVBQWFGLEVBQUdwd0IsT0FBU0YsRUFBT2d1QixHQUFLbDlDLE9BQ3JDbzVCLEVBQU1vbUIsRUFBR3B3QixPQUFTc3dCLEVBQWEsRUFBSUQsRUFBY1UsT0FBT1QsR0FBb0IsR0FDNUU1ckIsR0FBVTByQixFQUFHdndCLE1BQVFDLEVBQU9ndUIsRUFBTTlqQixFQUF5QixNQUFsQnFtQixFQUF3QnZ3QixFQUFPa0ssRUFBTThqQixFQUFNOWpCLEVBQU1sSyxFQUFPZ3VCLEdBSTdHLE9BQU9wcEIsRUFHWCxJQUFJc3NCLEVBQWdCOXRDLE9BQU9DLE9BQU8sTUFFbEMsU0FBUzZzQyxFQUFjekssR0FDbkIsR0FBSXlMLEVBQWN6TCxHQUNkLE9BQU95TCxFQUFjekwsR0FJekIsSUFEQSxJQUFnQjVoQyxFQUFac3RDLEVBQU8xTCxFQUFZNEssRUFBYSxHQUFJZSxFQUFZLEVBQzdDRCxHQUFNLENBQ1QsR0FBcUMsUUFBaEN0dEMsRUFBUTZiLEVBQUdob0IsS0FBS3FaLEtBQUtvZ0MsSUFDdEJkLEVBQVd4MkMsS0FBS2dLLEVBQU0sU0FFckIsR0FBdUMsUUFBbENBLEVBQVE2YixFQUFHa3dCLE9BQU83K0IsS0FBS29nQyxJQUM3QmQsRUFBV3gyQyxLQUFLLFNBRWYsQ0FBQSxHQUE0QyxRQUF2Q2dLLEVBQVE2YixFQUFHbXdCLFlBQVk5K0IsS0FBS29nQyxJQTZDbEMsTUFBTSxJQUFJRSxZQUFZLG9DQTVDdEIsR0FBSXh0QyxFQUFNLEdBQUksQ0FDVnV0QyxHQUFhLEVBQ2IsSUFBSUUsRUFBYSxHQUFJQyxFQUFvQjF0QyxFQUFNLEdBQUkydEMsRUFBYyxHQUNqRSxHQUF1RCxRQUFsREEsRUFBYzl4QixFQUFHMWlCLElBQUkrVCxLQUFLd2dDLElBZTNCLE1BQU0sSUFBSUYsWUFBWSxnREFidEIsSUFEQUMsRUFBV3ozQyxLQUFLMjNDLEVBQVksSUFDd0QsTUFBNUVELEVBQW9CQSxFQUFrQnB3QixVQUFVcXdCLEVBQVksR0FBRzFnRCxVQUNuRSxHQUE4RCxRQUF6RDBnRCxFQUFjOXhCLEVBQUdvd0IsV0FBVy8rQixLQUFLd2dDLElBQ2xDRCxFQUFXejNDLEtBQUsyM0MsRUFBWSxRQUUzQixDQUFBLEdBQWdFLFFBQTNEQSxFQUFjOXhCLEVBQUdxd0IsYUFBYWgvQixLQUFLd2dDLElBSXpDLE1BQU0sSUFBSUYsWUFBWSxnREFIdEJDLEVBQVd6M0MsS0FBSzIzQyxFQUFZLElBVXhDM3RDLEVBQU0sR0FBS3l0QyxPQUdYRixHQUFhLEVBRWpCLEdBQWtCLElBQWRBLEVBQ0EsTUFBTSxJQUFJeDRDLE1BQU0sNkVBR3BCeTNDLEVBQVd4MkMsS0FDUCxDQUNJZzJDLFlBQWFoc0MsRUFBTSxHQUNuQitzQyxTQUFhL3NDLEVBQU0sR0FDbkI4a0MsS0FBYTlrQyxFQUFNLEdBQ25CbWMsS0FBYW5jLEVBQU0sR0FDbkJtdEMsU0FBYW50QyxFQUFNLEdBQ25Ca2MsTUFBYWxjLEVBQU0sR0FDbkJxYyxNQUFhcmMsRUFBTSxHQUNuQnVjLFVBQWF2YyxFQUFNLEdBQ25CdEssS0FBYXNLLEVBQU0sS0FPL0JzdEMsRUFBT0EsRUFBS2h3QixVQUFVdGQsRUFBTSxHQUFHL1MsUUFFbkMsT0FBT29nRCxFQUFjekwsR0FBTzRLLEVBUTVCakIsRUFBaUIsUUFBSVksRUFDckJaLEVBQWtCLFNBQUllLEVBRUosb0JBQVhwNkMsU0FDUEEsT0FBZ0IsUUFBSWk2QyxFQUNwQmo2QyxPQUFpQixTQUFJbzZDLEdBeE41QixNQ3VDRCxTQUFTc0IsR0FBYUMsR0FFbEIsR0FBdUIsaUJBQVpBLEdBQ1AsR0FBZ0IsSUFBWkEsRUFBZSxPQUFPLE9BQ3ZCLEdBQUlBLGFBQW1CdlksSUFFdEJ1WSxFQUFRclcsWUFBWXNXLE1BQUssU0FBVTN6QyxHQUMvQixPQUFhLElBQU5BLEtBR1gsT0FBTyxFQUdmLE9BQU8sRUF1QlgsTUFBTTR6QyxHQUEyQyxDQUU3QzUrQyxJQUFLLFNBQVVtcEMsRUFBU0QsR0FFcEIsT0FBTzJWLEVBQU8xVixFQUFRZCxjQUcxQjBKLFFBQVMsU0FBVTVJLEVBQVNELEdBRXhCLElBQUlscEMsRUFBTTYrQyxFQUFPMVYsRUFBUWQsYUFDekIsR0FBSW5hLE9BQU9pWCxTQUFTbmxDLEdBQU0sQ0FDdEIsSUFBSTgrQyxFQUFldDlDLE1BQU1SLEtBQUttb0MsR0FDOUIsSUFBSyxJQUFJNFYsS0FBYUQsRUFBYTF3QixVQUMvQixHQUF3QixPQUFwQjJ3QixFQUFVcGlELE9BQWtCb2lELEVBQVVwaUQsUUFBVXFELEVBQ2hELE9BQU8rK0MsRUFBVTF1QixLQUk3QixNQUFPLHdCQUdYcHhCLElBQUssU0FBVWtxQyxFQUFTRCxHQUVwQixPQUFPOFYsRUFBTzdWLEVBQVFkLGNBRzFCMkosUUFBUyxTQUFVN0ksRUFBU0QsR0FFeEIsSUFBSWpxQyxFQUFNKy9DLEVBQU83VixFQUFRZCxhQUN6QixHQUFJbmEsT0FBT2lYLFNBQVNsbUMsR0FBTSxDQUN0QixJQUFJNi9DLEVBQWV0OUMsTUFBTVIsS0FBS21vQyxHQUM5QixJQUFLLElBQUk0VixLQUFhRCxFQUFhMXdCLFVBQy9CLEdBQXdCLE9BQXBCMndCLEVBQVVwaUQsT0FBa0JvaUQsRUFBVXBpRCxRQUFVc0MsRUFDaEQsT0FBTzgvQyxFQUFVMXVCLEtBSTdCLE1BQU8sd0JBSVhrVyxVQUFXLFNBQVU0QyxFQUFTRCxHQUUxQixHQUFJQyxFQUFTLENBQ1QsSUFBSTVDLEVBQVk0QyxFQUFRekIsZUFDeEIsR0FBSW5CLEdBQWFBLEVBQVVnTyxVQUN2QixPQUFPaE8sRUFHZixPQUFPMkMsRUFBVzNDLFdBSXRCQyxRQUFTLFNBQVUyQyxFQUFTRCxHQUV4QixHQUFJQyxFQUFTLENBQ1QsSUFBSTNDLEVBQVUyQyxFQUFReEIsYUFDdEIsR0FBSW5CLEdBQVdBLEVBQVErTixVQUNuQixPQUFPL04sRUFHZixPQUFPMEMsRUFBVzFDLFNBR3RCL2tDLElBQUssU0FBVTBuQyxFQUFTRCxHQUVwQixPQUFPK1YsRUFBTzlWLEVBQVFkLGNBRTFCcnBDLE1BQU8sU0FBVW1xQyxFQUFTRCxHQUN0QixNQUFPLHNDQUdYbkUsV0FBWSxTQUFVb0UsRUFBU0QsR0FFM0IsT0FBT0MsRUFBUWpELGlCQUVuQmxKLEtBQU0sU0FBVW1NLEVBQVNELEdBQ3JCLE1BQU8scUNBRVhnVyxRQUFTLFNBQVUvVixFQUFTRCxHQUV4QixPQUFPQyxFQUFRYixhQUVuQjZXLGtCQUFtQixTQUFVaFcsRUFBU0QsR0FFbEMsT0FBT0MsRUFBUVosb0JBRW5CNlcsVUFBVyxTQUFValcsRUFBU0QsR0FFMUIsSUFBSW1XLEVBQVMsRUFDVEQsRUFBWSxFQUNoQixJQUFLLElBQUlMLEtBQWE1VixFQUNNLE9BQXBCNFYsRUFBVXBpRCxNQUNWMGlELElBRUFBLEVBQVMsRUFFVEEsR0FBVUQsSUFDVkEsRUFBWUMsR0FHcEIsT0FBT0QsR0FFWEUsZUFBZ0IsU0FBVW5XLEVBQVNELEdBRS9CLElBQUltVyxFQUFTLEVBQ1RELEVBQVksRUFDWkcsRUFBc0IsS0FDdEJELEVBQXlCLEtBQzdCLEdBQUluVyxFQUNBLElBQUssSUFBSTRWLEtBQWE1VixFQUNNLE9BQXBCNFYsRUFBVXBpRCxPQUNLLElBQVgwaUQsSUFDQUUsRUFBY1IsRUFBVTF1QixNQUU1Qmd2QixLQUVBQSxFQUFTLEVBRVRBLEdBQVVELElBQ1ZBLEVBQVlDLEVBQ1pDLEVBQWlCQyxHQUk3QixPQUFPRCxHQUVYRSxhQUFjLFNBQVVyVyxFQUFTRCxHQUU3QixJQUFJbVcsRUFBUyxFQUNURCxFQUFZLEVBQ1pLLEVBQW9CLEtBQ3BCRCxFQUF1QixLQUMzQixHQUFJclcsRUFBUyxDQUNULElBQUkyVixFQUFldDlDLE1BQU1SLEtBQUttb0MsR0FDOUIsSUFBSyxJQUFJdkMsRUFBTSxFQUFHQSxFQUFNa1ksRUFBYWhoRCxPQUFROG9DLElBQU8sQ0FDaEQsSUFBSXhDLEVBQVEwYSxFQUFhbFksR0FDckI4WSxFQUFZLEtBQ1o5WSxFQUFNa1ksRUFBYWhoRCxPQUFTLElBQzVCNGhELEVBQVlaLEVBQWFsWSxFQUFNLElBRWYsT0FBaEJ4QyxFQUFNem5DLE9BQ04waUQsSUFDeUIsUUFBckJLLE1BQUFBLFNBQUFBLEVBQVcvaUQsU0FDWDhpRCxFQUFZcmIsRUFBTS9ULE9BR3RCZ3ZCLEVBQVMsRUFFVEEsR0FBVUQsSUFHVkEsRUFBWUMsRUFDWkcsRUFBZUMsSUFJM0IsT0FBT0QsR0FFWEcsVUFBVyxTQUFVeFcsRUFBU0QsR0FFMUIsSUFBSTBXLEVBQVMsRUFDVEQsRUFBWSxFQUNoQixJQUFLLElBQUlaLEtBQWE1VixFQUNNLE9BQXBCNFYsRUFBVXBpRCxNQUNWaWpELElBRUFBLEVBQVMsRUFFVEEsRUFBU0QsSUFDVEEsRUFBWUMsR0FHcEIsT0FBT0QsR0FFWEUsZUFBZ0IsU0FBVTFXLEVBQVNELEdBRS9CLElBQUkwVyxFQUFTLEVBQ1RELEVBQVksRUFDWkcsRUFBc0IsS0FDdEJELEVBQXlCLEtBQzdCLEdBQUkxVyxFQUNBLElBQUssSUFBSTRWLEtBQWE1VixFQUNNLE9BQXBCNFYsRUFBVXBpRCxPQUNLLElBQVhpakQsSUFDQUUsRUFBY2YsRUFBVTF1QixNQUU1QnV2QixLQUVBQSxFQUFTLEVBRVRBLEdBQVVELElBQ1ZBLEVBQVlDLEVBQ1pDLEVBQWlCQyxHQUk3QixPQUFPRCxHQUVYRSxhQUFjLFNBQVU1VyxFQUFTRCxHQUU3QixJQUFJMFcsRUFBUyxFQUNURCxFQUFZLEVBQ1pLLEVBQW9CLEtBQ3BCRCxFQUF1QixLQUMzQixHQUFJNVcsRUFBUyxDQUNULElBQUkyVixFQUFldDlDLE1BQU1SLEtBQUttb0MsR0FDOUIsSUFBSyxJQUFJdkMsRUFBTSxFQUFHQSxFQUFNa1ksRUFBYWhoRCxPQUFROG9DLElBQU8sQ0FDaEQsSUFBSXhDLEVBQVEwYSxFQUFhbFksR0FDckI4WSxFQUFZLEtBQ1o5WSxFQUFNa1ksRUFBYWhoRCxPQUFTLElBQzVCNGhELEVBQVlaLEVBQWFsWSxFQUFNLElBRWYsT0FBaEJ4QyxFQUFNem5DLE9BQ05pakQsSUFDeUIsUUFBckJGLE1BQUFBLFNBQUFBLEVBQVcvaUQsU0FDWHFqRCxFQUFZNWIsRUFBTS9ULE9BR3RCdXZCLEVBQVMsRUFFVEEsR0FBVUQsSUFDVkEsRUFBWUMsRUFDWkcsRUFBZUMsSUFJM0IsT0FBT0QsR0FFWEUsV0FBWSxTQUFVOVcsRUFBU0QsR0FDM0IsTUFBTywyQ0FFWGdYLGNBQWUsU0FBVS9XLEVBQVNELEdBRTlCLElBQUlnWCxFQUFnQixFQUNwQixHQUFJL1csRUFBUyxDQUNULElBQUkyVixFQUFldDlDLE1BQU1SLEtBQUttb0MsR0FDOUIsSUFBSyxJQUFJdkMsRUFBTWtZLEVBQWFoaEQsT0FBUyxFQUFHOG9DLEdBQU8sRUFBR0EsSUFBTyxDQUVyRCxHQUFvQixPQURSa1ksRUFBYWxZLEdBQ2ZqcUMsTUFDTixNQUVBdWpELEtBSVosT0FBT0EsR0FFWEMsbUJBQW9CLFNBQVVoWCxFQUFTRCxHQUduQyxJQUFJaVgsRUFBNkIsS0FDakMsR0FBSWhYLEVBQVMsQ0FDVCxJQUFJMlYsRUFBZXQ5QyxNQUFNUixLQUFLbW9DLEdBQzlCLElBQUssSUFBSXZDLEVBQU1rWSxFQUFhaGhELE9BQVMsRUFBRzhvQyxHQUFPLEVBQUdBLElBQU8sQ0FDckQsSUFBSXhDLEVBQVEwYSxFQUFhbFksR0FJekIsR0FISUEsRUFBTWtZLEVBQWFoaEQsT0FBUyxJQUM1QnFpRCxFQUFxQnJCLEVBQWFsWSxFQUFNLEdBQUd2VyxNQUUzQixPQUFoQitULEVBQU16bkMsTUFDTixPQU9aLE9BQTJCLE9BQXZCd2pELEVBQ08saUJBRUpBLEdBRVhDLGlCQUFrQixTQUFValgsRUFBU0QsR0FFakMsSUFBSWdYLEVBQWdCLEVBQ2hCRSxFQUEyQixLQUMvQixHQUFJalgsRUFBUyxDQUNULElBQUkyVixFQUFldDlDLE1BQU1SLEtBQUttb0MsR0FDOUIsSUFBSyxJQUFJdkMsRUFBTWtZLEVBQWFoaEQsT0FBUyxFQUFHOG9DLEdBQU8sRUFBR0EsSUFBTyxDQUNyRCxJQUFJeEMsRUFBUTBhLEVBQWFsWSxHQUN6QixHQUFvQixPQUFoQnhDLEVBQU16bkMsTUFDTixNQUVzQixJQUFsQnVqRCxJQUNBRSxFQUFtQmhjLEVBQU0vVCxNQUU3QjZ2QixLQUtaLE9BQXlCLE9BQXJCRSxFQUNPLGlCQUVKQSxHQUVYQyxjQUFlLFNBQVVsWCxFQUFTRCxHQUU5QixJQUFJbVgsRUFBZ0IsRUFDcEIsR0FBSWxYLEVBQVMsQ0FDVCxJQUFJMlYsRUFBZXQ5QyxNQUFNUixLQUFLbW9DLEdBQzlCLElBQUssSUFBSXZDLEVBQU1rWSxFQUFhaGhELE9BQVMsRUFBRzhvQyxHQUFPLEVBQUdBLElBQU8sQ0FFckQsR0FBb0IsT0FEUmtZLEVBQWFsWSxHQUNmanFDLE1BR04sTUFGQTBqRCxLQU1aLE9BQU9BLEdBRVhDLG1CQUFvQixTQUFVblgsRUFBU0QsR0FHbkMsSUFBSW9YLEVBQTZCLEtBQ2pDLEdBQUluWCxFQUFTLENBQ1QsSUFBSTJWLEVBQWV0OUMsTUFBTVIsS0FBS21vQyxHQUM5QixJQUFLLElBQUl2QyxFQUFNa1ksRUFBYWhoRCxPQUFTLEVBQUc4b0MsR0FBTyxFQUFHQSxJQUFPLENBQ3JELElBQUl4QyxFQUFRMGEsRUFBYWxZLEdBSXpCLEdBSElBLEVBQU1rWSxFQUFhaGhELE9BQVMsSUFDNUJ3aUQsRUFBcUJ4QixFQUFhbFksRUFBTSxHQUFHdlcsTUFFM0IsT0FBaEIrVCxFQUFNem5DLE1BR04sT0FLWixPQUEyQixPQUF2QjJqRCxFQUNPLGlCQUVKQSxHQUVYQyxpQkFBa0IsU0FBVXBYLEVBQVNELEdBRWpDLElBQUltWCxFQUFnQixFQUNoQkUsRUFBMkIsS0FDL0IsR0FBSXBYLEVBQVMsQ0FDVCxJQUFJMlYsRUFBZXQ5QyxNQUFNUixLQUFLbW9DLEdBQzlCLElBQUssSUFBSXZDLEVBQU1rWSxFQUFhaGhELE9BQVMsRUFBRzhvQyxHQUFPLEVBQUdBLElBQU8sQ0FDckQsSUFBSXhDLEVBQVEwYSxFQUFhbFksR0FDekIsR0FBb0IsT0FBaEJ4QyxFQUFNem5DLE1BTU4sTUFMc0IsSUFBbEIwakQsSUFDQUUsRUFBbUJuYyxFQUFNL1QsTUFFN0Jnd0IsS0FPWixPQUF5QixPQUFyQkUsRUFDTyxpQkFFSkEsR0FFWEMsUUFBUyxTQUFVclgsRUFBU0QsR0FFeEIsSUFBSVYsRUFBZVcsRUFBUVosbUJBQzNCLE9BQUtrVyxHQUFhalcsR0FHUnlXLEVBQU85VixFQUFRZCxhQUNaRyxFQUhGLHVDQUtmaVksT0FBUSxTQUFVdFgsRUFBU0QsR0FFdkIsT0M3YkNyb0MsRUQ2YmdCc29DLEVBQVFkLFlDN2JQLEdBQUt4b0MsR0FEaEIsSUFBaUJBLEdEZ2M1QjZnRCxTQUFVLFNBQVV2WCxFQUFTRCxHQUV6QixPRXBjTyxTQUFrQnRwQyxFQUFRQyxHQUN2QyxJQUNJckMsRUFEQXdCLEVBQVEsRUFFUjJoRCxFQUFPLEVBQ1BsL0MsRUFBTSxFQUNWLFFBQWdCM0IsSUFBWkQsRUFDRixJQUFLLElBQUlsRCxLQUFTaUQsRUFDSCxNQUFUakQsSUFBa0JBLEdBQVNBLElBQVVBLElBQ3ZDYSxFQUFRYixFQUFRZ2tELEVBQ2hCQSxHQUFRbmpELElBQVV3QixFQUNsQnlDLEdBQU9qRSxHQUFTYixFQUFRZ2tELFFBR3ZCLENBQ0wsSUFBSTVnRCxHQUFTLEVBQ2IsSUFBSyxJQUFJcEQsS0FBU2lELEVBQ2lDLE9BQTVDakQsRUFBUWtELEVBQVFsRCxJQUFTb0QsRUFBT0gsTUFBcUJqRCxHQUFTQSxJQUFVQSxJQUMzRWEsRUFBUWIsRUFBUWdrRCxFQUNoQkEsR0FBUW5qRCxJQUFVd0IsRUFDbEJ5QyxHQUFPakUsR0FBU2IsRUFBUWdrRCxJQUk5QixHQUFJM2hELEVBQVEsRUFBRyxPQUFPeUMsR0FBT3pDLEVBQVEsR0Y2YXhCNGhELENBQVl6WCxFQUFRZCxlQUk3QndZLEdBQTZCLENBQy9CLElBQUssU0FBVTF1QixHQUNYLEdBQWlCLGlCQUFOQSxFQUNQLE9BQVEsRUFBSUEsRUFDVCxHQUFJQSxhQUFhZ1UsR0FBUyxDQUM3QixJQUFJWSxFQUFhNVUsRUFBRTJVLG9CQU9uQixPQU5BQyxFQUFXc0IsWUFBWXlZLFNBQVEsU0FBVW5rRCxFQUFPb0QsRUFBT0csR0FDOUIsT0FBakJBLEVBQU1ILEtBQ05HLEVBQU1ILElBQVUsRUFBSXBELE1BRzVCb3FDLEVBQVdRLG9CQUNKUixFQUVYLE1BQU8sb0NBRVgsSUFBSyxTQUFVNVUsR0FDWCxHQUFpQixpQkFBTkEsRUFDUCxPQUFPQSxFQUNKLEdBQUlBLGFBQWFnVSxHQUFTLENBRTdCLE9BRGlCaFUsRUFBRTJVLG9CQUd2QixNQUFPLHFDQUlUaWEsR0FBK0IsQ0FDakMsSUFBSyxTQUFVbGpDLEVBQUdRLEdBQ2QsR0FBaUIsaUJBQU5SLEdBQStCLGlCQUFOUSxFQUVoQyxPQUFPUixFQUFJUSxFQUNSLEdBQWlCLGlCQUFOUixHQUFrQlEsYUFBYThuQixHQUFTLENBRXRELElBQUlZLEVBQWExb0IsRUFBRXlvQixvQkFTbkIsT0FSQUMsRUFBV3NCLFlBQVl5WSxTQUFRLFNBQVVua0QsRUFBT29ELEVBQU9HLEdBQzlCLE9BQWpCQSxFQUFNSCxHQUNORyxFQUFNSCxHQUFTOGQsRUFBSWxoQixFQUVuQnVELEVBQU1ILEdBQVMsUUFHdkJnbkMsRUFBV1Esb0JBQ0pSLEVBQ0osR0FBSWxwQixhQUFhc29CLElBQXdCLGlCQUFOOW5CLEVBQWdCLENBRXRELElBQUkwb0IsRUFBYWxwQixFQUFFaXBCLG9CQVNuQixPQVJBQyxFQUFXc0IsWUFBWXlZLFNBQVEsU0FBVW5rRCxFQUFPb0QsRUFBT0csR0FDOUIsT0FBakJBLEVBQU1ILEdBQ05HLEVBQU1ILEdBQVNwRCxFQUFRMGhCLEVBRXZCbmUsRUFBTUgsR0FBUyxRQUd2QmduQyxFQUFXUSxvQkFDSlIsRUFDSixHQUFJbHBCLGFBQWFzb0IsSUFBVzluQixhQUFhOG5CLEdBQVMsQ0FFckQsSUFBSVksRUFBYWxwQixFQUFFaXBCLG9CQVNuQixPQVJBQyxFQUFXc0IsWUFBWXlZLFNBQVEsU0FBVW5rRCxFQUFPb0QsRUFBT0csR0FDOUIsT0FBakJBLEVBQU1ILEdBQ05HLEVBQU1ILEdBQVNwRCxFQUFRMGhCLEVBQUVncUIsWUFBWXRvQyxHQUVyQ0csRUFBTUgsR0FBUyxRQUd2QmduQyxFQUFXUSxvQkFDSlIsRUFFWCxNQUFPLG9DQUVYLElBQUssU0FBVWxwQixFQUFHUSxHQUNkLEdBQWlCLGlCQUFOUixHQUErQixpQkFBTlEsRUFFaEMsT0FBT1IsRUFBSVEsRUFDUixHQUFpQixpQkFBTlIsR0FBa0JRLGFBQWE4bkIsR0FBUyxDQUV0RCxJQUFJWSxFQUFhMW9CLEVBQUV5b0Isb0JBU25CLE9BUkFDLEVBQVdzQixZQUFZeVksU0FBUSxTQUFVbmtELEVBQU9vRCxFQUFPRyxHQUM5QixPQUFqQkEsRUFBTUgsR0FDTkcsRUFBTUgsR0FBUzhkLEVBQUlsaEIsRUFFbkJ1RCxFQUFNSCxHQUFTLFFBR3ZCZ25DLEVBQVdRLG9CQUNKUixFQUNKLEdBQUlscEIsYUFBYXNvQixJQUF3QixpQkFBTjluQixFQUFnQixDQUV0RCxJQUFJMG9CLEVBQWFscEIsRUFBRWlwQixvQkFRbkIsT0FQQUMsRUFBV3NCLFlBQVl5WSxTQUFRLFNBQVVua0QsRUFBT29ELEVBQU9HLEdBQzlCLE9BQWpCQSxFQUFNSCxHQUNORyxFQUFNSCxHQUFTcEQsRUFBUTBoQixFQUV2Qm5lLEVBQU1ILEdBQVMsUUFHaEJnbkMsRUFDSixHQUFJbHBCLGFBQWFzb0IsSUFBVzluQixhQUFhOG5CLEdBQVMsQ0FFckQsSUFBSVksRUFBYWxwQixFQUFFaXBCLG9CQVNuQixPQVJBQyxFQUFXc0IsWUFBWXlZLFNBQVEsU0FBVW5rRCxFQUFPb0QsRUFBT0csR0FDOUIsT0FBakJBLEVBQU1ILEdBQ05HLEVBQU1ILEdBQVNwRCxFQUFRMGhCLEVBQUVncUIsWUFBWXRvQyxHQUVyQ0csRUFBTUgsR0FBUyxRQUd2QmduQyxFQUFXUSxvQkFDSlIsRUFFWCxNQUFPLG9DQUVYLElBQUssU0FBVWxwQixFQUFHUSxHQUNkLEdBQWlCLGlCQUFOUixHQUErQixpQkFBTlEsRUFFaEMsT0FBT1IsRUFBSVEsRUFDUixHQUFpQixpQkFBTlIsR0FBa0JRLGFBQWE4bkIsR0FBUyxDQUV0RCxJQUFJWSxFQUFhMW9CLEVBQUV5b0Isb0JBU25CLE9BUkFDLEVBQVdzQixZQUFZeVksU0FBUSxTQUFVbmtELEVBQU9vRCxFQUFPRyxHQUM5QixPQUFqQkEsRUFBTUgsR0FDTkcsRUFBTUgsR0FBUzhkLEVBQUlsaEIsRUFFbkJ1RCxFQUFNSCxHQUFTLFFBR3ZCZ25DLEVBQVdRLG9CQUNKUixFQUNKLEdBQUlscEIsYUFBYXNvQixJQUF3QixpQkFBTjluQixFQUFnQixDQUV0RCxJQUFJMG9CLEVBQWFscEIsRUFBRWlwQixvQkFTbkIsT0FSQUMsRUFBV3NCLFlBQVl5WSxTQUFRLFNBQVVua0QsRUFBT29ELEVBQU9HLEdBQzlCLE9BQWpCQSxFQUFNSCxHQUNORyxFQUFNSCxHQUFTcEQsRUFBUTBoQixFQUV2Qm5lLEVBQU1ILEdBQVMsUUFHdkJnbkMsRUFBV1Esb0JBQ0pSLEVBQ0osR0FBSWxwQixhQUFhc29CLElBQVc5bkIsYUFBYThuQixHQUFTLENBRXJELElBQUlZLEVBQWFscEIsRUFBRWlwQixvQkFTbkIsT0FSQUMsRUFBV3NCLFlBQVl5WSxTQUFRLFNBQVVua0QsRUFBT29ELEVBQU9HLEdBQzlCLE9BQWpCQSxFQUFNSCxHQUNORyxFQUFNSCxHQUFTcEQsRUFBUTBoQixFQUFFZ3FCLFlBQVl0b0MsR0FFckNHLEVBQU1ILEdBQVMsUUFHdkJnbkMsRUFBV1Esb0JBQ0pSLEVBRVgsTUFBTyxvQ0FFWCxJQUFLLFNBQVVscEIsRUFBR1EsR0FDZCxJQUFLb2dDLEdBQWFwZ0MsR0FDZCxNQUFPLHNDQUVYLEdBQWlCLGlCQUFOUixHQUErQixpQkFBTlEsRUFFaEMsT0FBT1IsRUFBSVEsRUFDUixHQUFpQixpQkFBTlIsR0FBa0JRLGFBQWE4bkIsR0FBUyxDQUV0RCxJQUFJWSxFQUFhMW9CLEVBQUV5b0Isb0JBU25CLE9BUkFDLEVBQVdzQixZQUFZeVksU0FBUSxTQUFVbmtELEVBQU9vRCxFQUFPRyxHQUM5QixPQUFqQkEsRUFBTUgsR0FDTkcsRUFBTUgsR0FBUzhkLEVBQUlsaEIsRUFFbkJ1RCxFQUFNSCxHQUFTLFFBR3ZCZ25DLEVBQVdRLG9CQUNKUixFQUNKLEdBQUlscEIsYUFBYXNvQixJQUF3QixpQkFBTjluQixFQUFnQixDQUV0RCxJQUFJMG9CLEVBQWFscEIsRUFBRWlwQixvQkFTbkIsT0FSQUMsRUFBV3NCLFlBQVl5WSxTQUFRLFNBQVVua0QsRUFBT29ELEVBQU9HLEdBQzlCLE9BQWpCQSxFQUFNSCxHQUNORyxFQUFNSCxHQUFTcEQsRUFBUTBoQixFQUV2Qm5lLEVBQU1ILEdBQVMsUUFHdkJnbkMsRUFBV1Esb0JBQ0pSLEVBQ0osR0FBSWxwQixhQUFhc29CLElBQVc5bkIsYUFBYThuQixHQUFTLENBRXJELElBQUlZLEVBQWFscEIsRUFBRWlwQixvQkFTbkIsT0FSQUMsRUFBV3NCLFlBQVl5WSxTQUFRLFNBQVVua0QsRUFBT29ELEVBQU9HLEdBQzlCLE9BQWpCQSxFQUFNSCxHQUNORyxFQUFNSCxHQUFTcEQsRUFBUTBoQixFQUFFZ3FCLFlBQVl0b0MsR0FFckNHLEVBQU1ILEdBQVMsUUFHdkJnbkMsRUFBV1Esb0JBQ0pSLEVBRVgsTUFBTyxvQ0FFWCxJQUFLLFNBQVVscEIsRUFBR1EsR0FDZCxJQUFLb2dDLEdBQWFwZ0MsR0FDZCxNQUFPLHNDQUVYLEdBQWlCLGlCQUFOUixHQUErQixpQkFBTlEsRUFFaEMsT0FBT1IsRUFBSVEsRUFDUixHQUFpQixpQkFBTlIsR0FBa0JRLGFBQWE4bkIsR0FBUyxDQUV0RCxJQUFJWSxFQUFhMW9CLEVBQUV5b0Isb0JBU25CLE9BUkFDLEVBQVdzQixZQUFZeVksU0FBUSxTQUFVbmtELEVBQU9vRCxFQUFPRyxHQUM5QixPQUFqQkEsRUFBTUgsR0FDTkcsRUFBTUgsR0FBUzhkLEVBQUlsaEIsRUFFbkJ1RCxFQUFNSCxHQUFTLFFBR3ZCZ25DLEVBQVdRLG9CQUNKUixFQUNKLEdBQUlscEIsYUFBYXNvQixJQUF3QixpQkFBTjluQixFQUFnQixDQUV0RCxJQUFJMG9CLEVBQWFscEIsRUFBRWlwQixvQkFTbkIsT0FSQUMsRUFBV3NCLFlBQVl5WSxTQUFRLFNBQVVua0QsRUFBT29ELEVBQU9HLEdBQzlCLE9BQWpCQSxFQUFNSCxHQUNORyxFQUFNSCxHQUFTcEQsRUFBUTBoQixFQUV2Qm5lLEVBQU1ILEdBQVMsUUFHdkJnbkMsRUFBV1Esb0JBQ0pSLEVBQ0osR0FBSWxwQixhQUFhc29CLElBQVc5bkIsYUFBYThuQixHQUFTLENBRXJELElBQUlZLEVBQWFscEIsRUFBRWlwQixvQkFTbkIsT0FSQUMsRUFBV3NCLFlBQVl5WSxTQUFRLFNBQVVua0QsRUFBT29ELEVBQU9HLEdBQzlCLE9BQWpCQSxFQUFNSCxHQUNORyxFQUFNSCxHQUFTcEQsRUFBUTBoQixFQUFFZ3FCLFlBQVl0b0MsR0FFckNHLEVBQU1ILEdBQVMsUUFHdkJnbkMsRUFBV1Esb0JBQ0pSLEVBRVgsTUFBTyxxQ0FJVGlhLEdBQStDLENBRWpEandCLFVBQVcsU0FBVW9ZLEVBQVNoaUMsRUFBTStoQyxHQUdoQyxJQUFJN0MsRUFBTzhDLEVBQVEzQixVQUNmbEIsRUFBTzZDLEVBQVExQixVQUVuQixHQUFhLE9BQVRwQixHQUEwQixPQUFUQyxHQUFpQkEsRUFBT0QsRUFBTSxDQUMvQyxJQUFJNGEsRUFBYTlYLEVBQVFyQyxvQkFLekIsT0FKQW1hLEVBQVc1WSxZQUFZeVksU0FBUSxTQUFVbmtELEVBQU9vRCxFQUFPRyxHQUNuREEsRUFBTUgsSUFBVXBELEVBQVEwcEMsSUFBU0MsRUFBT0QsTUFFNUM0YSxFQUFXMVosb0JBQ0owWixFQUVYLE1BQU8sc0RBRVhDLGlCQUFrQixTQUFVL1gsRUFBU2hpQyxFQUFNK2hDLEdBSXZDLEdBQUkvaEMsR0FBUUEsRUFBS3JKLE9BQVMsRUFBRyxDQUN6QixJQUFJcWpELEVBQWVoNkMsRUFBSyxHQUVwQmk2QyxFQUFhalksRUFBUXJDLG9CQUN6QixPQUFJNVksT0FBT2lYLFNBQVNnYyxLQUFrQmp6QixPQUFPdFAsTUFBTXVpQyxJQUMvQ0MsRUFBVy9ZLFlBQVl5WSxTQUFRLFNBQVVua0QsRUFBT29ELEVBQU9HLEdBQ3JDLE9BQVZ2RCxJQUNBdUQsRUFBTUgsR0FBU29oRCxNQUd2QkMsRUFBVzdaLG9CQUNKNlosR0FFSiwyREFFWCxNQUFPLDREQWNmLFNBQVNDLEdBQVMxSSxFQUF1QnpQLEdBR3JDLE9BQVF5UCxFQUFLcHlDLE1BQ1QsSUFBSyxVQUVELE9BRGtCb3lDLEVBQ0NoOEMsTUFFdkIsSUFBSyxhQUNELElBQ0kya0QsRUFEaUIzSSxFQUNldnlDLEtBQ3BDLE9BQUlrN0MsS0FBa0IxQyxJQUVYMEMsS0FBa0JOLEdBRGxCLHdDQUF3Q00sWUFBeUJBLGVBSXJFLGlDQUFpQ0EsS0FFNUMsSUFBSyxrQkFDRCxJQUFJQyxFQUFZNUksRUFDWjZJLEVBQWNILEdBQVNFLEVBQVVwSCxTQUFValIsR0FDL0MsTUFBMkIsaUJBQWhCc1ksRUFDQUEsRUFFSlgsR0FBYVUsRUFBVW5KLFVBQVVvSixHQUU1QyxJQUFLLG1CQUNELElBQUlDLEVBQWE5SSxFQUNiK0ksRUFBWUwsR0FBU0ksRUFBVy9qRCxLQUFNd3JDLEdBQ3RDeVksRUFBYU4sR0FBU0ksRUFBV3BqRCxNQUFPNnFDLEdBQ3hDMFksRUExdEJoQixTQUFnQ2xrRCxFQUFXVyxHQUN2QyxNQUFvQixpQkFBVFgsRUFBMEJBLEVBQ2hCLGlCQUFWVyxFQUEyQkEsRUFFbEIsaUJBQVRYLEdBQ05xRixPQUFPaW1DLE9BQU82WSxTQUFTbmtELElBQ3RCQSxhQUFnQnlvQyxHQUtELGlCQUFWOW5DLEdBQ04wRSxPQUFPaW1DLE9BQU82WSxTQUFTeGpELElBQ3RCQSxhQUFpQjhuQyxHQUloQixHQUZJLCtCQVBBLDhCQWt0QlkyYixDQUF1QkosRUFBV0MsR0FDakQsTUFBd0IsaUJBQWJDLEdBQXlCQSxFQUFTOU8sV0FBVyxVQUM3QzhPLEVBRUpiLEdBQWNVLEVBQVdySixVQUFVc0osRUFBV0MsR0FFekQsSUFBSyxpQkFDRCxJQUFJSSxFQUFXcEosRUFHWHFKLEVBRG1CRCxFQUFTdkgsT0FDRnAwQyxLQUkxQjY3QyxFQWxEaEIsU0FBdUJqTixFQUFVOUwsR0FDN0IsT0FBTzhMLEVBQUk3dUMsS0FBSSxTQUFVd3lDLEdBQ3JCLE9BQU8wSSxHQUFTMUksRUFBTXpQLE1BZ0RFZ1osQ0FIVEgsRUFBUzFnRCxVQUdvQjZuQyxHQUN4QyxHQUE2QixpQkFBbEIrWSxFQUE0QixPQUFPQSxFQUc5QyxHQUFlLFlBQVhELEdBQ0EsR0FBNkIsSUFBekJDLEVBQWNua0QsT0FBYyxDQUM1QixJQUFJazlDLEVBQU1pSCxFQUFjLEdBQ3hCLEdBQW1CLGlCQUFSakgsRUFBa0IsT0FBT0EsRUFDcEMsR0FBbUIsaUJBQVJBLEVBQ1AsTUFBTyxzREFFWCxJQUFJN1IsRUFqRXhCLFNBQXdCZ1osRUFBbUJqWixHQUN2QyxPQUFPQSxFQUFXTixTQUFTVSxlQUFlNlksR0FnRVo3WSxDQUFlMFIsRUFBSzlSLEdBQ2xDLE9BQUtDLEdBQ00sbUNBQW1DNlIsVUFNakQsQ0FBQSxHQUFJZ0gsS0FBVXBELEdBQXFCLENBQ3BDLEdBQTZCLElBQXpCcUQsRUFBY25rRCxPQUFjLENBRTVCLElBQUlxckMsRUFBVSxLQUNkLElBQUssSUFBSWlaLEtBQU1sWixFQUFXTixTQUNqQk8sR0FBWWlaLEVBQUdsYSxXQUFXcEQsaUJBQzNCcUUsRUFBVWlaLEdBSWxCLE9BQUtqWixFQUdFeVYsR0FBb0JvRCxHQUFRN1ksRUFBU0QsR0FGakMsMkNBQTJDOFksSUFJMUQsR0FBNkIsSUFBekJDLEVBQWNua0QsT0FBYyxDQUM1QixJQUFJazlDLEVBQU1pSCxFQUFjLEdBQ3hCLE1BQW1CLGlCQUFSakgsRUFBeUJBLEVBQ2hDQSxhQUFlN1UsR0FDUnlZLEdBQW9Cb0QsR0FBUWhILEVBQUs5UixHQUVqQyxvQkFBb0I4WSwwQkFHbkMsTUFBTywwQ0FBMENBLElBQzlDLEdBQUlBLEtBQVVoQixHQUF1QixDQUN4QyxHQUE2QixJQUF6QmlCLEVBQWNua0QsT0FBYyxDQUM1QixHQUFnQyxpQkFBckJta0QsRUFBYyxHQUNyQixPQUFPQSxFQUFjLEdBQ3pCLEdBQUlBLEVBQWMsYUFBYzliLEdBQVMsQ0FDckMsSUFBSWdELEVBQVU4WSxFQUFjLEdBQzVCLE9BQU9qQixHQUFzQmdCLEdBQ3pCN1ksRUFDQSxLQUNBRCxHQUdKLE1BQU8sbUJBQW1COFksd0JBRTNCLEdBQUlDLEVBQWNua0QsT0FBUyxFQUFHLENBQ2pDLEdBQWdDLGlCQUFyQm1rRCxFQUFjLEdBQ3JCLE9BQU9BLEVBQWMsR0FFekIsR0FBSUEsRUFBYyxhQUFjOWIsR0FBUyxDQUNyQyxJQUFJZ0QsRUFBVThZLEVBQWMsR0FDNUIsT0FBT2pCLEdBQXNCZ0IsR0FDekI3WSxFQUNBOFksRUFBYy84QyxRQUFPLFNBQ2pCdkksRUFDQW9ELEVBQ0FpMUMsR0FFQSxPQUFPajFDLEVBQVEsS0FFbkJtcEMsR0FHSixNQUFPLG1CQUFtQjhZLHdCQUdsQyxNQUFPLDBDQUEwQ0EsS0FFckQsTUFBTyxpQ0FBaUNBLEtBRWhELE1BQU8sNEJBVVgsU0FBU3hsRCxHQUNMa0ksRUFDQXdrQyxHQUlBLElBTUlyNEIsRUFOQXd4QyxFQUErQixHQUsvQkMsRUFBWSxJQUFJMXVDLE9BRGhCLDhGQUNxQyxNQUV6QyxLQUFRL0MsRUFBUXl4QyxFQUFVdmtDLEtBQUtyWixJQUFRLENBRW5DLElBQUk2OUMsRUFBWTF4QyxFQUFNLEdBQ3RCLElBQUl3eEMsRUFBUTFELE1BQU03aEQsR0FBTUEsRUFBRXNuQixTQUFXbStCLFdBRVQsSUFBakIxeEMsRUFBTWhCLGFBQ29CLElBQXRCZ0IsRUFBTWhCLE9BQU84b0MsTUFBc0IsQ0FDMUMsSUFBSUEsRUFBTzluQyxFQUFNaEIsT0FBTzhvQyxLQUVwQjZKLEVBQU0sS0FDVixJQUNJQSxFQUFNOUosR0FBS0MsR0FDYixNQUFPOEosR0FDTCxNQUFPLFNBQVdBLEVBQUl2TCxRQUUxQixJQUFLc0wsRUFDRCxNQUFPLG9DQUlYLE1BQU03bEQsRUFBUTBrRCxHQUFTbUIsRUFBS3RaLEdBQzVCLEdBQXFCLGlCQUFWdnNDLEVBQ1AsT0FBT0EsRUFHWCxHQUNxQixpQkFBVkEsR0FDUG9HLE9BQU9pbUMsT0FBTzZZLFNBQVNsbEQsR0FDekIsQ0FDRSxJQUFJMEcsRUFBUyxVQUNzQixJQUF4QndOLEVBQU1oQixPQUFPeE0sU0FDcEJBLEVBQVN3TixFQUFNaEIsT0FBT3hNLFFBRzFCZy9DLEVBQVF4N0MsS0FBSyxDQUNUdWQsT0FBUW0rQixFQUNSNWxELE1BQU9BLEVBQ1AwRyxPQUFRQSxNQU81QixPQUFPZy9DLFdBSUtLLEdBQ1o5VCxFQUNBMUYsR0FFQSxJQUFJeVosRUFBYW5tRCxHQUFRb3lDLEVBQVUxRixHQUNuQyxHQUEwQixpQkFBZnlaLEVBQ1AsT0FBT0EsRUFFWCxJQUFJTixFQUFVTSxFQUVkLElBQUssSUFBSUMsS0FBZ0JQLEVBQVMsQ0FDOUIsSUFBSWorQixFQUFTdytCLEVBQWF4K0IsT0FDdEJ6bkIsRUFBUWltRCxFQUFham1ELE1BQ3JCMEcsRUFBU3UvQyxFQUFhdi9DLE9BQ3RCdy9DLEVBQVcsR0FDTSxpQkFBVmxtRCxFQUVIa21ELEVBREF4L0MsRUFDVzI1QyxXQUFRLElBQU0zNUMsRUFBUTFHLEdBRXRCQSxFQUFNMndCLFFBQVEsR0FFdEJ2cUIsT0FBT2ltQyxPQUFPNlksU0FBU2xsRCxLQUUxQmttRCxFQUFXQyxHQUFpQm5tRCxFQUQ1QjBHLEdBR21DNmxDLEVBQVdMLGFBSWxEZ2EsSUFFQWpVLEVBQVdBLEVBQVMxb0MsTUFBTWtlLEdBQVE1VSxLQUFLcXpDLElBSS9DLE9BQU9qVSxXQUlLbVUsR0FDWnIrQyxFQUNBd2tDLEdBTUEsR0FIQXhrQyxFQUFPQSxFQUFLdUIsT0FHUix3Q0FBd0NOLEtBQUtqQixHQUM3QyxPQUFPd2dDLFdBQVd4Z0MsR0FJdEIsSUFBSWkrQyxFQUFhbm1ELEdBQVFrSSxFQUFNd2tDLEdBQy9CLEdBQTBCLGlCQUFmeVosRUFDUCxPQUFPQSxFQUVYLElBQUlOLEVBQVVNLEVBRWQsT0FBSU4sRUFBUXZrRCxPQUFTLEVBQ1Z1a0QsRUFBUSxHQUFHMWxELE1BR2Ysa0NHbG9CWCxTQUFTcW1ELEdBQ0xDLEVBQ0FDLEVBQ0FoYSxFQUNBaWEsR0FJQSxJQUFJclIsRUFBZSxHQUVmc1IsRUFBeUMsR0FBaENsYSxFQUFXMEIsYUFBYTFkLE1BQ2pDbTJCLEVBQXdCLEdBQVRELEVBQ2ZuakIsRUFBY29qQixFQUFlRixFQUFRMVUsaUJBR3JDN3VDLEVBQXdCLEdBQzVCLElBQUssSUFBSTBqRCxLQUFXSCxFQUFRcC9DLEtBQU0sQ0FDOUIsSUFBSXcvQyxFQUFXQyxHQUFrQkYsRUFBU3BhLEdBQzFDLEdBQXdCLGlCQUFicWEsRUFBdUIsQ0FDOUJ6UixFQUFleVIsRUFDZixNQUMyQixpQkFBYkEsR0FDZDNqRCxFQUFPaUgsS0FBSzA4QyxHQUdwQixHQUFxQixLQUFqQnpSLEVBQ0EsT0FBT0EsRUFLWCxJQUFJMlIsRUFBd0IsR0FDNUIsSUFBSyxJQUFJSCxLQUFXSCxFQUFROVUsTUFBTyxDQUMvQixJQUFJcVYsRUFBV0MsR0FBcUJMLEVBQVNwYSxHQUU3QyxHQUFJd2EsRUFBUzVRLFdBQVcsU0FBVSxDQUM5QmhCLEVBQWU0UixFQUNmLE1BRUpELEVBQU81OEMsS0FBSzY4QyxHQUVoQixHQUFxQixLQUFqQjVSLEVBQ0EsT0FBT0EsRUFLWCxJQUFJeEQsRUFBb0I2VSxFQUFRN1Usa0JBRzVCc1YsRUFBYUgsRUFBT3Q5QyxLQUFJLFNBQVUvRixHQUNsQyxPQUFPeWpELEdBQXVCempELEVBQUcseUJBSWpDMGpELEVBQTJCLEdBQy9CLElBQUssSUFBSVIsS0FBV0gsRUFBUTVVLFNBQVUsQ0FDbEMsSUFBSXdWLEVBQWNKLEdBQXFCTCxFQUFTcGEsR0FDaEQsR0FBSTZhLEVBQVlqUixXQUFXLFNBQVUsQ0FDakNoQixFQUFlaVMsRUFDZixNQUVKRCxFQUFVajlDLEtBQUtrOUMsR0FFbkIsR0FBcUIsS0FBakJqUyxFQUNBLE9BQU9BLEVBS1gsSUFBSWtTLEVBQWdCRixFQUFVMzlDLEtBQUksU0FBVS9GLEdBQ3hDLE9BQU95akQsR0FBdUJ6akQsRUFBRyx3QkFJakNvdUMsRUFBNEIyVSxFQUFRM1UsMEJBR3BDeVYsRUFBYUMsS0FBa0IzaUQsTUFBTTRoRCxFQUFRaFYsV0FFN0NnVyxFQUFlakIsRUFBY2tCLFNBQVM5L0MsT0FBTyxLQUNqRDYvQyxFQUFhNS9DLEtBQUssYUFBYSxXQVEzQixNQU5JLGFBQ2dDLEdBQWhDMmtDLEVBQVcwQixhQUFhMWQsTUFDeEIsSUFDaUMsR0FBakNnYyxFQUFXMEIsYUFBYXFHLE9BQ3hCLE9BS1IsSUFBSTlGLEVDN2NPLFdBQ2IsSUFBSXh1QyxFQUFRMkcsR0FDUitnRCxFQUFhQyxHQUNiL3hDLEVBQU8sS0FDUDh0QixFQUFhbHZCLEdBQVMsR0FDdEJvdkIsRUFBV3B2QixHQUFTd1ksSUFDcEI4VyxFQUFXdHZCLEdBQVMsR0FFeEIsU0FBU2c2QixFQUFJcG5DLEdBQ1gsSUFBSTNGLEVBRUF1QyxFQUNBUixFQU1BOHJCLEVBR0FqaEIsRUFYQTVLLEdBQUsyRCxFQUFPN0QsR0FBTTZELElBQU9qRyxPQUd6QjJELEVBQU0sRUFDTjFCLEVBQVEsSUFBSXlCLE1BQU1wQixHQUNsQm1rRCxFQUFPLElBQUkvaUQsTUFBTXBCLEdBQ2pCNHJCLEdBQU1xVSxFQUFXbGpDLE1BQU1rRixLQUFNaEIsV0FDN0JpckIsRUFBSzd0QixLQUFLdUIsSUFBSTJwQixHQUFLbHJCLEtBQUtRLEtBQUswcUIsR0FBSzRXLEVBQVNwakMsTUFBTWtGLEtBQU1oQixXQUFhMnFCLElBRXBFbHJCLEVBQUlyQyxLQUFLdUIsSUFBSXZCLEtBQUtpQixJQUFJNHNCLEdBQU1sc0IsRUFBR3FnQyxFQUFTdGpDLE1BQU1rRixLQUFNaEIsWUFDcERtakQsRUFBSzFqRCxHQUFLd3JCLEVBQUssR0FBSyxFQUFJLEdBRzVCLElBQUtsdUIsRUFBSSxFQUFHQSxFQUFJZ0MsSUFBS2hDLEdBQ2Q0TSxFQUFJdTVDLEVBQUt4a0QsRUFBTTNCLEdBQUtBLElBQU16QixFQUFNb0gsRUFBSzNGLEdBQUlBLEVBQUcyRixJQUFTLElBQ3hEdEMsR0FBT3VKLEdBU1gsSUFKa0IsTUFBZHE1QyxFQUFvQnRrRCxFQUFNd1MsTUFBSyxTQUFTblUsRUFBR3VDLEdBQUssT0FBTzBqRCxFQUFXRSxFQUFLbm1ELEdBQUltbUQsRUFBSzVqRCxPQUNuRSxNQUFSNFIsR0FBY3hTLEVBQU13UyxNQUFLLFNBQVNuVSxFQUFHdUMsR0FBSyxPQUFPNFIsRUFBS3hPLEVBQUszRixHQUFJMkYsRUFBS3BELE9BR3hFdkMsRUFBSSxFQUFHK0IsRUFBSXNCLEdBQU82cUIsRUFBS2xzQixFQUFJb2tELEdBQU0vaUQsRUFBTSxFQUFHckQsRUFBSWdDLElBQUtoQyxFQUFHNHRCLEVBQUtDLEVBQzlEdHJCLEVBQUlaLEVBQU0zQixHQUFpQjZ0QixFQUFLRCxJQUFsQmhoQixFQUFJdTVDLEVBQUs1akQsSUFBbUIsRUFBSXFLLEVBQUk3SyxFQUFJLEdBQUtxa0QsRUFBSUQsRUFBSzVqRCxHQUFLLENBQ3ZFb0QsS0FBTUEsRUFBS3BELEdBQ1haLE1BQU8zQixFQUNQekIsTUFBT3FPLEVBQ1BxMUIsV0FBWXJVLEVBQ1p1VSxTQUFVdFUsRUFDVndVLFNBQVUzL0IsR0FJZCxPQUFPeWpELEVBMkJULE9BeEJBcFosRUFBSXh1QyxNQUFRLFNBQVN5SSxHQUNuQixPQUFPL0QsVUFBVXZELFFBQVVuQixFQUFxQixtQkFBTnlJLEVBQW1CQSxFQUFJK0wsSUFBVS9MLEdBQUkrbEMsR0FBT3h1QyxHQUd4Rnd1QyxFQUFJa1osV0FBYSxTQUFTai9DLEdBQ3hCLE9BQU8vRCxVQUFVdkQsUUFBVXVtRCxFQUFhai9DLEVBQUdtTixFQUFPLEtBQU00NEIsR0FBT2taLEdBR2pFbFosRUFBSTU0QixLQUFPLFNBQVNuTixHQUNsQixPQUFPL0QsVUFBVXZELFFBQVV5VSxFQUFPbk4sRUFBR2kvQyxFQUFhLEtBQU1sWixHQUFPNTRCLEdBR2pFNDRCLEVBQUk5SyxXQUFhLFNBQVNqN0IsR0FDeEIsT0FBTy9ELFVBQVV2RCxRQUFVdWlDLEVBQTBCLG1CQUFOajdCLEVBQW1CQSxFQUFJK0wsSUFBVS9MLEdBQUkrbEMsR0FBTzlLLEdBRzdGOEssRUFBSTVLLFNBQVcsU0FBU243QixHQUN0QixPQUFPL0QsVUFBVXZELFFBQVV5aUMsRUFBd0IsbUJBQU5uN0IsRUFBbUJBLEVBQUkrTCxJQUFVL0wsR0FBSStsQyxHQUFPNUssR0FHM0Y0SyxFQUFJMUssU0FBVyxTQUFTcjdCLEdBQ3RCLE9BQU8vRCxVQUFVdkQsUUFBVTJpQyxFQUF3QixtQkFBTnI3QixFQUFtQkEsRUFBSStMLElBQVUvTCxHQUFJK2xDLEdBQU8xSyxHQUdwRjBLLEVEcVlLc1osR0FDTkMsRUFBWXZaLEVBQUl2ckMsR0FFaEIra0QsRUFBVVIsRUFDVHJnRCxVQUFVLFVBQ1ZDLEtBQUsyZ0QsR0FDTHJnRCxRQUNBQyxPQUFPLEtBQ1BDLEtBQUssUUFBUyxVQUVmd25CLEVBQU02NEIsS0FBUzNrQixZQUFZQSxHQUFhRSxZQUFZa2pCLEdBRXhELElBQUl3QixFQUFZQyxLQUVYN2tCLFlBQXFCLEdBQVRtakIsR0FDWmpqQixZQUFxQixHQUFUaWpCLEdBU2pCLFNBQVMyQixFQUFjQyxHQUduQixPQURnQkEsRUFBT3prQixTQUFXeWtCLEVBQU8za0IsYUFBZSxFQUFNNWhDLEtBQUtpaEIsSUFDcEQ0dUIsRUE4Qm5CLFNBQVMyVyxFQUFZRCxHQUNqQixPQUFPQSxFQUFPM2tCLFlBQWMya0IsRUFBT3prQixTQUFXeWtCLEVBQU8za0IsWUFBYyxFQWtDdkUsU0FBUzZrQixFQUE0QkYsRUFBYTVtRCxHQUM5QyxJQUFJK21ELEVBQWF2QixFQUFXeGxELEdBQUc4dUIsTUFDM0JrNEIsRUFBZ0JwQixFQUFjNWxELEdBQUc4dUIsTUFDbkI2M0IsRUFBY0MsR0FDaEMsSUFBSUssRUFBV0osRUFBWUQsR0FFdkJNLEVBQVd2NUIsRUFBSTRYLFNBQVNxaEIsR0FDeEJPLEVBQVlWLEVBQVVsaEIsU0FBU3FoQixHQUMvQlEsRUFBY1gsRUFBVWxoQixTQUFTcWhCLEdBSWpDUyxFQUFvQmhuRCxLQUFLQyxLQUN6QkQsU0FBQzhtRCxFQUFVLEdBQUtELEVBQVMsR0FBTyxHQUM1QjdtRCxTQUFDOG1ELEVBQVUsR0FBS0QsRUFBUyxHQUFPLElBNEJ4QyxNQXpCa0IsS0FBZDdCLEVBQU9ybEQsS0FFUGtuRCxFQUFTLEdBQ0xBLEVBQVMsSUFDUEMsRUFBVSxHQUFLRCxFQUFTLElBQU1ILEVBQWNNLEVBQ2xESCxFQUFTLEdBQ0xBLEVBQVMsSUFDUEMsRUFBVSxHQUFLRCxFQUFTLElBQU1ILEVBQWNNLEVBR2xERCxFQUFZLElBQ0UsSUFBVHBDLEVBQWdCZ0MsRUFBZ0IsSUFDaENDLEVBQVc1bUQsS0FBS2loQixHQUFLLEdBQUssSUFHbkMrbEMsRUFBb0JobkQsS0FBS0MsS0FDckJELFNBQUM4bUQsRUFBVSxHQUFLRCxFQUFTLEdBQU8sR0FDNUI3bUQsU0FBQzhtRCxFQUFVLEdBQUtELEVBQVMsR0FBTyxJQVFwQ0csRUFMc0JobkQsS0FBS0MsS0FDM0JELFNBQUMrbUQsRUFBWSxHQUFLRixFQUFTLEdBQU8sR0FDOUI3bUQsU0FBQyttRCxFQUFZLEdBQUtGLEVBQVMsR0FBTyxJQUsvQixDQUFDQSxFQUFVRSxHQUVmLENBQUNGLEVBQVVDLEVBQVdDLEdBekhmYixFQUNicmdELE9BQU8sUUFDUEMsS0FBSyxRQUFRLFNBQVV2RyxFQUFRSSxHQUM1QixPQUFPNmxELEVBQVc3bEQsRUFBRXlnQixlQUV2QnRhLEtBQUssSUFBS3duQixHQVlLbzRCLEVBQ2ZyZ0QsVUFBVSxTQUNWQyxLQUFLb25DLEVBQUl2ckMsSUFDVHlFLFFBQ0FDLE9BQU8sUUFDUEksTUFBSyxTQUFVc2dELEVBQWE1bUQsR0FDekIsT0FBSTJtRCxFQUFjQyxHQUNQLEdBRUp2QixFQUFPcmxELE1BRWpCbUcsS0FBSyxhQUFhLFNBQVV2RyxHQUN6QixNQUNJLGFBQ0ErdEIsRUFBSTRYLFNBQVMzbEMsR0FBRyxHQUNoQixJQUNBK3RCLEVBQUk0WCxTQUFTM2xDLEdBQUcsR0FDaEIsT0FHUG9OLE1BQU0sY0FBZSxVQUNyQjdHLEtBQUssUUFBUyxxQkFPSTQvQyxFQUNsQnJnRCxVQUFVLFlBQ1ZDLEtBQUsyZ0QsR0FDTHJnRCxRQUNBQyxPQUFPLFFBQ1BJLE1BQUssU0FBVXNnRCxFQUFhNW1ELEdBQ3pCLE9BQUlvd0MsRUFDa0IsS0FBZGlWLEVBQU9ybEQsSUFBYTJtRCxFQUFjQyxHQUMzQmxCLEVBQVUxbEQsR0FFZCxHQUVBMGxELEVBQVUxbEQsTUFHeEJtRyxLQUFLLGFBQWEsU0FBVXlnRCxFQUFhNW1ELEdBQ3RDLElBQUlrbkQsRUFBV1QsRUFBVWxoQixTQUFTcWhCLEdBQzlCSyxFQUFXSixFQUFZRCxHQUszQixPQUhBTSxFQUFTLElBQ0ssSUFBVGxDLEVBQWdCWSxFQUFjNWxELEdBQUc4dUIsUUFDakNtNEIsRUFBVzVtRCxLQUFLaWhCLEdBQUssR0FBSyxHQUN4QixhQUFlNGxDLEVBQVMsR0FBSyxJQUFNQSxFQUFTLEdBQUssT0FFM0RsNkMsTUFBTSxlQUFlLFNBQVU0NUMsR0FFNUIsT0FEZUMsRUFBWUQsR0FDVHZtRCxLQUFLaWhCLEdBQUssUUFBVSxTQUV6Q25iLEtBQUssUUFBUyxxQkFvRFA0L0MsRUFDUHJnRCxVQUFVLFFBQ1ZDLEtBQUsyZ0QsR0FDTHJnRCxRQUNBQyxPQUFPLFlBQ1BDLEtBQUssU0FBVSxTQUNmNkcsTUFBTSxPQUFRLFFBQ2Q3RyxLQUFLLGVBQWdCLEdBQ3JCQSxLQUFLLFVBQVUsU0FBVXlnRCxFQUFhNW1ELEdBQ25DLEdBQUlvd0MsR0FDQSxJQUFrQixLQUFkaVYsRUFBT3JsRCxJQUFhMm1ELEVBQWNDLEtBQ2IsS0FBakJsQixFQUFVMWxELEdBQ1YsT0FBTzhtRCxFQUE0QkYsRUFBUTVtRCxRQUluRCxHQUFxQixLQUFqQjBsRCxFQUFVMWxELEdBQ1YsT0FBTzhtRCxFQUE0QkYsRUFBUTVtRCxNQUl0RG1HLEtBQUssUUFBUyx5QkFHUG1oRCxHQUNaekMsRUFDQS9aLEVBQ0FpYSxHQUlBLElBQUtqYSxJQUFlaWEsRUFBUyxPQUk3QixJQUFJRCxFQUErQixHQUNuQ0EsRUF0bEJKLFNBQ0lBLEVBQ0FELEVBQ0EvWixFQUNBaWEsR0FHQW5OLEdBQVVpTixHQUFReCtDLE9BQU8sUUFBUVEsU0FFakMsSUFEQSxJQUFJMGdELEVBQVF2MUMsT0FBT3cxQyxvQkFBb0IxQyxHQUM5QjlrRCxFQUFJLEVBQUdBLEVBQUl1bkQsRUFBTTduRCxPQUFRTSxXQUV2QjhrRCxFQUFjeUMsRUFBTXZuRCxJQUsvQixJQUFJaUosRUFBTXcrQyxHQUNFNUMsR0FDUDMrQyxPQUFPLE9BQ1BDLEtBQUssS0FBTSxPQUNYQSxLQUNHLFFBQ0Eya0MsRUFBVzBCLGFBQWExZCxNQUNwQmdjLEVBQVc0QixPQUFPcHRDLEtBQ2xCd3JDLEVBQVc0QixPQUFPenNDLE9BRXpCa0csS0FDRyxTQUNBMmtDLEVBQVcwQixhQUFhcUcsT0FDcEIvSCxFQUFXNEIsT0FBT29HLElBQ2xCaEksRUFBVzRCLE9BQU9xRyxRQUU5QitSLEVBQW1CLElBQUk3N0MsRUFHdkIsSUFBSXkrQyxFQUFZeitDLEVBQ1gvQyxPQUFPLEtBQ1BDLEtBQUssS0FBTSxhQUNYQSxLQUNHLFlBQ0EsYUFDSTJrQyxFQUFXNEIsT0FBT3B0QyxLQUNsQixJQUNBd3JDLEVBQVc0QixPQUFPb0csSUFDbEIsS0FFUDNzQyxLQUFLLFFBQVMya0MsRUFBVzBCLGFBQWExZCxNQUFRZ2MsRUFBVzRCLE9BQU96c0MsT0FDaEVrRyxLQUNHLFNBQ0Eya0MsRUFBVzBCLGFBQWFxRyxPQUFTL0gsRUFBVzRCLE9BQU9xRyxRQUUzRCtSLEVBQXlCLFVBQUk0QyxFQUc3QixJQUFJMUIsRUFBVzBCLEVBQ1Z4aEQsT0FBTyxLQUNQQyxLQUFLLEtBQU0sWUFDWEEsS0FBSyxRQUFTMmtDLEVBQVcwQixhQUFhMWQsT0FDdEMzb0IsS0FBSyxTQUFVMmtDLEVBQVcwQixhQUFhcUcsUUFHNUMsT0FGQWlTLEVBQXdCLFNBQUlrQixFQUVyQmxCLEVBeWhCUzZDLENBQVk3QyxFQUFlRCxFQUFRL1osR0FHbkQsSUFBSThjLEVBQW1CQyxHQUFrQjlDLEVBQVFoVixVQUFVcndDLFFBQzNELElBQUssSUFBSU0sRUFBSSxFQUFHQSxFQUFJK2tELEVBQVFoVixVQUFVcndDLE9BQVFNLElBQ2IsT0FBekIra0QsRUFBUWhWLFVBQVUvdkMsS0FDbEIra0QsRUFBUWhWLFVBQVUvdkMsR0FBSzRuRCxFQUFpQjVuRCxLQTVoQnBELFNBQ0k2a0QsRUFDQUMsRUFDQWhhLEVBQ0FpYSxHQUtBLElBQUtqYSxJQUFlaWEsRUFBUyxPQUU3QixJQUFLQSxFQUFRdFgsTUFBTyxPQUNwQixJQUFJcWEsRUFBWXJDLEdBQXVCVixFQUFRdFgsTUFBTyxpQkFHbERBLEVBQVFxWCxFQUFjNEMsVUFDckJ4aEQsT0FBTyxRQUNQSSxLQUFLeStDLEVBQVF0WCxPQUNidG5DLEtBQUssS0FBTSxTQUNYQSxLQUNHLFlBQ0EsYUFDSTJrQyxFQUFXMEIsYUFBYTFkLE1BQVEsRUFDaEMsSUFDQWc1QixFQUFValYsT0FBUyxFQUNuQixLQUVQMXNDLEtBQUssU0FBVTJoRCxFQUFValYsUUFDekIxc0MsS0FBSyxRQUFTLGlCQUNuQjIrQyxFQUFxQixNQUFJclgsRUFHekJzYSxHQUFrQmpELEVBQWM3N0MsSUFBSyxFQUFHNitDLEVBQVVqVixRQUNsRGtWLEdBQWtCakQsRUFBYzRDLFVBQVcsRUFBR0ksRUFBVWpWLFFBR3hEbVYsR0FBZ0JsRCxFQUFja0IsU0FBVSxFQUFHOEIsRUFBVWpWLFFBNGZyRG9WLENBQVlwRCxFQUFRQyxFQUFlaGEsRUFBWWlhLEdBRS9DSCxHQUFVQyxFQUFRQyxFQUFlaGEsRUFBWWlhLEdBRXpDQSxFQUFReFcsWUEzZmhCLFNBQ0lzVyxFQUNBQyxFQUNBaGEsRUFDQWlhLEdBT0EsSUFBSTk3QyxFQUFNNjdDLEVBQWM3N0MsSUFDUjY3QyxFQUFjNEMsVUFDOUIsSUFBSTFCLEVBQVdsQixFQUFja0IsU0FDekJ2WSxFQUFRcVgsRUFBY3JYLE1BR3RCeWEsRUFBYyxFQUNkemEsSUFDQXlhLEVBQWNwaEIsV0FBVzJHLEVBQU10bkMsS0FBSyxZQUl4QyxJQUFJZ0ksRUFBUTQyQyxFQUFRL1UsU0FDaEJtWSxFQUFZaDZDLEVBQU1wRyxLQUFJLFNBQVUvRixHQUNoQyxPQUFPeWpELEdBQXVCempELEVBQUcsMkJBRWpDb21ELEVBQWEsRUFDYkMsRUFBZSxFQUNuQixJQUFLLElBQUk3ZixFQUFNLEVBQUdBLEVBQU1yNkIsRUFBTXpPLE9BQVE4b0MsSUFDOUIyZixFQUFVM2YsR0FBSzFaLE1BQVF1NUIsSUFDdkJBLEVBQWVGLEVBQVUzZixHQUFLMVosTUFDOUJzNUIsRUFBYTVmLEdBR3JCLElBQ0k4ZixFQUFpQkQsRUFEUGw2QyxFQUFNaTZDLEdBQ3dCMW9ELE9BQ3hDNm9ELEVBQWFKLEVBQVVDLEdBQVl2VixPQUNuQzJWLEVBQVdyNkMsRUFBTXpPLE9BRWpCK29ELEVBQVcsRUFBSUgsRUFDZkksRUFBV0gsRUFDWEksRUFBYyxFQUFJTCxFQUdsQk0sRUFBYyxFQUNkQyxFQUFlLEVBQ2UsYUFBOUI5RCxFQUFRdFcsbUJBQ1JtYSxFQUF5QixFQUFYSCxFQUFlRSxFQUFjTixFQUMzQ1EsR0FBZ0JMLEVBQVcsR0FBS0UsR0FDSyxlQUE5QjNELEVBQVF0VyxvQkFDZm1hLEdBQ0ssRUFBSUgsRUFBV0UsR0FBZUgsRUFDL0JDLEVBQ0E1SCxFQUFPc0gsR0FBVyxTQUFVaG1ELEVBQUduQyxHQUMzQixPQUFPbUMsRUFBRTJzQixTQUVqQis1QixFQUFlSCxFQUFXSCxHQVM5QixJQUFJTyxFQUFVLEVBQ1ZDLEVBQVUsRUFDZCxHQUErQixRQUEzQmhFLEVBQVF2VyxlQUVSc2EsRUFBVWhlLEVBQVcwQixhQUFhMWQsTUFBUSxFQUFNODVCLEVBQWMsRUFDOURHLEVBQVViLEVBRVZILEdBQWtCOStDLEVBQUssRUFBRzQvQyxFQUFlSCxHQUV6Q1YsR0FBZ0JoQyxFQUFVLEVBQUc2QyxFQUFlSCxRQUN6QyxHQUErQixXQUEzQjNELEVBQVF2VyxlQUVmc2EsRUFBVWhlLEVBQVcwQixhQUFhMWQsTUFBUSxFQUFNODVCLEVBQWMsRUFDOURHLEVBQVViLEVBQWNwZCxFQUFXMEIsYUFBYXFHLE9BQVM2VixFQUV6RFgsR0FBa0I5K0MsRUFBSyxFQUFHNC9DLEVBQWVILFFBQ3RDLEdBQStCLFNBQTNCM0QsRUFBUXZXLGVBQ2ZzYSxFQUFVLEVBQ1ZDLEVBQ0liLEVBQ0FwZCxFQUFXMEIsYUFBYXFHLE9BQVMsRUFDakNnVyxFQUFlLEVBRW5CZCxHQUFrQjkrQyxFQUFLMi9DLEVBQWNILEVBQVUsR0FFL0NULEdBQWdCaEMsRUFBVTRDLEVBQWNILEVBQVUsT0FDL0MsQ0FBQSxHQUErQixVQUEzQjFELEVBQVF2VyxlQVNmLE9BUkFzYSxFQUFVaGUsRUFBVzBCLGFBQWExZCxNQUFRMjVCLEVBQzFDTSxFQUNJYixFQUNBcGQsRUFBVzBCLGFBQWFxRyxPQUFTLEVBQ2pDZ1csRUFBZSxFQUVuQmQsR0FBa0I5K0MsRUFBSzIvQyxFQUFjSCxFQUFVLEdBTW5ELElBQUlPLEVBQVNsRSxFQUFjNEMsVUFDdEJ4aEQsT0FBTyxLQUNQQyxLQUFLLEtBQU0sVUFDWEEsS0FBSyxZQUFhLGFBQWUyaUQsRUFBVSxJQUFNQyxFQUFVLEtBRzVERSxFQUFXRCxFQUNWOWlELE9BQU8sUUFDUEMsS0FBSyxRQUFTLGtCQUNkQSxLQUFLLFFBQVN5aUQsR0FDZHppRCxLQUFLLFNBQVUwaUQsR0FDaEI5RCxFQUFRclcsZUFDUnVhLEVBQVNqOEMsTUFBTSxPQUFRKzNDLEVBQVFyVyxlQUUvQnFXLEVBQVFwVyxtQkFDUnNhLEVBQVNqOEMsTUFBTSxTQUFVKzNDLEVBQVFwVyxtQkFHckMsSUFDSXVhLEVBQWVULEVBQ2ZVLEVBQWVaLEVBQ2ZhLEVBQWNGLEVBQWVULEVBQVdFLEVBQ3hDVSxFQUFjRixFQUVsQixHQUFrQyxhQUE5QnBFLEVBQVF0VyxrQkFFUnVhLEVBQ0t0akQsVUFBVSxXQUNWQyxLQUFLd0ksR0FDTGxJLFFBQ0FDLE9BQU8sVUFDUEMsS0FBSyxLQUFNK2lELEVBQWVQLEVBQWMsR0FDeEN4aUQsS0FBSyxNQUFNLFNBQVU2QixFQUFjaEksR0FDaEMsT0FBT21wRCxFQUFlbnBELEVBQUkwb0QsS0FFN0J2aUQsS0FBSyxLQUFLLFNBQVU2QixFQUFjaEksR0FDL0IsT0FsQk8sS0FvQlZnTixNQUFNLFFBQVEsU0FBVWhGLEVBQWNoSSxHQUNuQyxPQUFPK2tELEVBQVFoVixVQUFVL3ZDLE1BSWhCZ3BELEVBQ1p0akQsVUFBVSxVQUNWQyxLQUFLd0ksR0FDTGxJLFFBQ0FDLE9BQU8sUUFDUEMsS0FBSyxJQUFLaWpELEdBQ1ZqakQsS0FBSyxLQUFLLFNBQVU2QixFQUFjaEksR0FDL0IsT0FBT3FwRCxFQUFjcnBELEVBQUkwb0QsS0FFNUJwaUQsTUFBSyxTQUFVMEIsRUFBY2hJLEdBQzFCLE9BQU9nSSxLQUVWZ0YsTUFBTSxxQkFBc0IsVUFDNUI3RyxLQUFLLFFBQVMsd0JBRVI2RyxNQUFNLFFBQVEsU0FBVWhGLEVBQWNoSSxHQUM3QyxPQUFPK2tELEVBQVFoVixVQUFVL3ZDLFdBRTFCLEdBQWtDLGVBQTlCK2tELEVBQVF0VyxrQkFBb0MsQ0FDbkQsSUFBSTZhLEVBQWlCLEVBSXJCQSxFQUFpQixFQUNqQk4sRUFDS3RqRCxVQUFVLFdBQ1ZDLEtBQUt3SSxHQUNMbEksUUFDQUMsT0FBTyxVQUNQQyxLQUFLLE1BQU0sU0FBVTZCLEVBQWNoSSxHQU9oQyxPQU5VLElBQU5BLEVBQ0FzcEQsRUFBaUJKLEVBQWVQLEVBQWMsRUFFOUNXLEdBQ0luQixFQUFVbm9ELEdBQUc4dUIsTUFBUTI1QixFQUFXRSxFQUFjRixFQUUvQ2EsS0FFVm5qRCxLQUFLLEtBQU1nakQsR0FDWGhqRCxLQUFLLEtBQUssU0FBVTZCLEVBQWNoSSxHQUMvQixPQWpFTyxLQW1FVmdOLE1BQU0sUUFBUSxTQUFVaEYsRUFBY2hJLEdBQ25DLE9BQU8ra0QsRUFBUWhWLFVBQVUvdkMsTUFJakNzcEQsRUFBaUIsRUFDQU4sRUFDWnRqRCxVQUFVLFVBQ1ZDLEtBQUt3SSxHQUNMbEksUUFDQUMsT0FBTyxRQUNQQyxLQUFLLEtBQUssU0FBVTZCLEVBQWNoSSxHQU8vQixPQU5VLElBQU5BLEVBQ0FzcEQsRUFBaUJGLEVBRWpCRSxHQUNJbkIsRUFBVW5vRCxHQUFHOHVCLE1BQVEyNUIsRUFBV0UsRUFBY0YsRUFFL0NhLEtBRVZuakQsS0FBSyxJQUFLa2pELEdBQ1YvaUQsTUFBSyxTQUFVMEIsRUFBY2hJLEdBQzFCLE9BQU9nSSxLQUVWZ0YsTUFBTSxxQkFBc0IsVUFDNUI3RyxLQUFLLFFBQVMsd0JBRVI2RyxNQUFNLFFBQVEsU0FBVWhGLEVBQWNoSSxHQUM3QyxPQUFPK2tELEVBQVFoVixVQUFVL3ZDLE9Ba1M3QnVwRCxDQUFhMUUsRUFBUUMsRUFBZWhhLEVBQVlpYSxHQWpvQnhELFNBQ0l5RSxFQUNBMUUsRUFDQWhhLEdBRUEsSUFBSStaLEVBQVNqTixHQUFVNFIsR0FDbkJ2Z0QsRUFBTTY3QyxFQUFjNzdDLElBQ3BCd2dELEVBQVczaUIsV0FBVzc5QixFQUFJOUMsS0FBSyxVQUMvQnVqRCxFQUFZNWlCLFdBQVc3OUIsRUFBSTlDLEtBQUssV0FDcEM4QyxFQUFJOUMsS0FBSyxRQUFTLE1BQ2JBLEtBQUssU0FBVSxNQUNmQSxLQUFLLFVBQVcsT0FBT3NqRCxLQUFZQyxLQUNuQ3ZqRCxLQUFLLHNCQUF1QixpQkFFN0Iya0MsRUFBVytCLGNBQ1hnWSxFQUFPNzNDLE1BQU0sUUFBUyxTQUV0QjYzQyxFQUFPNzNDLE1BQ0gsU0FDQ3k4QyxFQUFXM2UsRUFBVzhCLFlBQVluc0IsV0FBYSxNQUVwRG9rQyxFQUFPNzNDLE1BQ0gsVUFDQzA4QyxFQUFZNWUsRUFBVzhCLFlBQVluc0IsV0FBYSxPQTZtQnpEa3BDLENBQWM5RSxFQUFRQyxFQUFlaGEsWUUvb0J6QjhlLEdBQ1ovRSxFQUNBL1osRUFDQStlLEdBSUEsSUFBSy9lLElBQWUrZSxFQUFhLE9BR2pDLElBQUlDLEVBQWdCLEdBQ1VELEVBQVlyWixTQUN0Q3NaLEVBQWdCRCxFQUFZclosU0FLaEMsSUFBSXVaLEVBQXNCeEUsR0FBcUJ1RSxFQUFlaGYsR0FFOUQsR0FBSWlmLEVBQW9CclYsV0FBVyxVQUMvQixPQUFPcVYsRUFJWCxHQUZBRCxFQUFnQkMsRUFFTSxLQUFsQkQsRUFBc0IsQ0FDdEIsSUFBSWpTLEVBQVlELEdBQVVpTixHQUFRMytDLE9BQU8sT0FDekMsR0FBSTRqRCxFQUFjemUsU0FBUyxPQUFTeWUsRUFBY3plLFNBQVMsT0FBUSxDQUMvRCxJQUFJMmUsRUFBY0YsRUFBY2hpRCxNQUFNLFlBRXRDLElBQUssSUFBSW1pRCxLQUFjRCxFQUNBLE9BQWZDLEdBQXNDLFFBQWZBLEdBQzNCcFMsRUFBVTN4QyxPQUFPLE9BQU9JLEtBQUsyakQsUUFHakNwUyxFQUFVdnhDLEtBQUt3akQsR0FHTyxLQUF0QkQsRUFBWTc4QyxPQUNaNnFDLEVBQVUxeEMsS0FBSyxRQUFTMGpELEVBQVk3OEMsUUM5QmhELElBQUlrOUMsSUFBZSxFQStDbkIsU0FBU0MsR0FBY3JmLEVBQXdCc2YsR0FDM0MsSUFBSUMsRUFBYUQsRUFBVXJmLFFBQzNCLEdBQTBCLElBQXRCc2YsRUFBVzNxRCxPQUFjLE9BQU8sRUFFcEMsSUFBSXFyQyxFQUFVLEtBQ2QsR0FBa0MsT0FBOUJxZixFQUFVcFksZ0JBQTBCLENBQ3BDLElBQUssSUFBSStSLEtBQWFzRyxFQUVsQixHQURBdGYsRUFBVUQsRUFBV04sU0FBU1UsZUFBZTZZLEdBQ3pDaFosSUFBWUEsRUFBUWpCLFdBQVdwRCxlQUFnQixNQUV2RCxHQUFJcUUsRUFFQSxPQURBcWYsRUFBVXBZLGdCQUFrQmpILEVBQVF6RCxTQUM3QixNQUVSLENBQ0gsSUFBSWdqQixFQUFlRixFQUFVcFksZ0JBQ3pCdVksRUFBV0YsRUFBV3ZULFdBQVdseUIsR0FDMUJBLElBQU8wbEMsSUFFbEIsR0FBSUMsR0FBWSxFQUFHLENBQ2YsR0FBSUEsSUFBYUgsRUFBVXJmLFFBQVFyckMsT0FBUyxFQUFHLENBRTNDLElBQUssSUFBSXFrRCxLQUFhc0csRUFFbEIsR0FEQXRmLEVBQVVELEVBQVdOLFNBQVNVLGVBQWU2WSxHQUN6Q2haLElBQVlBLEVBQVFqQixXQUFXcEQsZUFBZ0IsTUFFdkQsUUFBSXFFLElBQ0FxZixFQUFVcFksZ0JBQWtCakgsRUFBUXpELFNBQzdCLEdBSVIsQ0FDSGlqQixJQUNBLElBQUl4RyxFQUFZc0csRUFBV0UsR0FHM0IsR0FGQXhmLEVBQVVELEVBQVdOLFNBQVNVLGVBQWU2WSxHQUM3Q3FHLEVBQVVwWSxnQkFBa0IrUixFQUN4QmhaLElBQVlBLEVBQVFqQixXQUFXcEQsZUFDL0IsT0FBTyxFQUVQeWpCLEdBQWNyZixFQUFZc2YsS0FNMUMsT0FBTyxFQUdYLFNBQVN6QyxHQUNMN0MsRUFDQUQsRUFDQS9aLEVBQ0FzZixHQUdBeFMsR0FBVWlOLEdBQVF4K0MsT0FBTyxRQUFRUSxTQUVqQyxJQURBLElBQUkwZ0QsRUFBUXYxQyxPQUFPdzFDLG9CQUFvQjFDLEdBQzlCOWtELEVBQUksRUFBR0EsRUFBSXVuRCxFQUFNN25ELE9BQVFNLFdBRXZCOGtELEVBQWN5QyxFQUFNdm5ELElBSy9CLElBQUlpSixFQUFNdytDLEdBQ0U1QyxHQUNQMytDLE9BQU8sT0FDUEMsS0FBSyxLQUFNLE9BQ1hBLEtBQ0csUUFDQTJrQyxFQUFXMEIsYUFBYTFkLE1BQ3BCZ2MsRUFBVzRCLE9BQU9wdEMsS0FDbEJ3ckMsRUFBVzRCLE9BQU96c0MsT0FFekJrRyxLQUNHLFNBQ0Eya0MsRUFBVzBCLGFBQWFxRyxPQUNwQi9ILEVBQVc0QixPQUFPb0csSUFDbEJoSSxFQUFXNEIsT0FBT3FHLFFBRTlCK1IsRUFBbUIsSUFBSTc3QyxFQUd2QixJQUFJeStDLEVBQVl6K0MsRUFDWC9DLE9BQU8sS0FDUEMsS0FBSyxLQUFNLGFBQ1hBLEtBQ0csWUFDQSxhQUNJMmtDLEVBQVc0QixPQUFPcHRDLEtBQ2xCLElBQ0F3ckMsRUFBVzRCLE9BQU9vRyxJQUNsQixLQUVQM3NDLEtBQUssUUFBUzJrQyxFQUFXMEIsYUFBYTFkLE1BQVFnYyxFQUFXNEIsT0FBT3pzQyxPQUNoRWtHLEtBQ0csU0FDQTJrQyxFQUFXMEIsYUFBYXFHLE9BQVMvSCxFQUFXNEIsT0FBT3FHLFFBRTNEK1IsRUFBeUIsVUFBSTRDLEVBRzdCLElBQUkxQixFQUFXMEIsRUFDVnhoRCxPQUFPLEtBQ1BDLEtBQUssS0FBTSxZQUNYQSxLQUFLLFFBQVMya0MsRUFBVzBCLGFBQWExZCxPQUN0QzNvQixLQUFLLFNBQVUya0MsRUFBVzBCLGFBQWFxRyxRQUc1QyxPQUZBaVMsRUFBd0IsU0FBSWtCLEVBRXJCbEIsRUFHWCxTQUFTMEYsR0FBZTFGLEVBQThCc0YsR0FDbEQsSUFBSUssRUFBVTNGLEVBQWM3N0MsSUFBSXZELFVBQVUsVUFFMUMsSUFBSyxJQUFJZ2xELEtBQVVELEVBQVMsQ0FFeEIsSUFBSTdsQyxFQUFLZ3pCLEdBQVU4UyxHQUFRdmtELEtBQUssTUFDNUJ5ZSxHQUFNQSxFQUFHOHZCLFdBQVcsNkJBQ3BCa0QsR0FBVThTLEdBQVExOUMsTUFBTSxTQUFVLFFBSTFDbzlDLEVBQVVyWSxhQUFlLEdBRXpCK1MsRUFBYzZGLFFBQVFya0QsS0FBSyxJQUcvQixTQUFTc2tELEdBQ0wvRixFQUNBQyxFQUNBaGEsRUFDQXNmLEVBQ0FTLEdBSUEsSUFBSy9mLElBQWVzZixFQUFXLE9BRS9CLElBQUlFLEVBQWVGLEVBQVVwWSxnQkFDN0IsR0FBcUIsT0FBakJzWSxFQUF1QixPQUMzQixJQUFJdmYsRUFBVUQsRUFBV04sU0FBU1UsZUFBZW9mLEdBQ2pELElBQUt2ZixFQUFTLE9BQ2QsSUFBSUMsRUFBY0QsRUFBUW5DLFVBRVhpaUIsRUFBYTEwQixRQUNQMDBCLEVBQWFDLGNBQ3BCRCxFQUFhdDBCLE9BRTNCLElBQUl3MEIsRUFBaUJ0RixHQUF1QixLQUFNLHVCQUM5Q3VGLEVBck1jLElBc01kM3FELEtBQUtRLElBQUlrcUQsRUFBZWo4QixNQUFPaThCLEVBQWVsWSxRQUc5Q29ZLEVBQWlCSixFQUFhNWxELE9BQU8sUUFDckNpbUQsRUFBa0JMLEVBQWE1bEQsT0FBTyxPQUN0Q2ttRCxFQUFpQjFGLEdBQ2pCd0YsRUFDQSw2QkFFQUcsRUFBa0IzRixHQUNsQnlGLEVBQ0EsOEJBR0FHLEVBQWUsRUFJZkMsRUFBY3hHLEVBQWM0QyxVQUFVeGhELE9BQU8sS0FHN0NnckMsRUFBbUIsS0FDbkJrWixFQUFVbFosaUJBQ1ZBLEVBQW1Ca1osRUFBVWxaLGlCQUV6QmtaLEVBQVU1cUMsUUFDVjB4QixFQUFtQmtaLEVBQVU1cUMsT0FHckMsSUFBSStyQyxFQUFjRCxFQUNicGxELE9BQU8sUUFDUEksS0FBSzRrRCxHQUNML2tELEtBQUssS0FBTSxjQUNYQSxLQUNHLFlBQ0EsYUFBZTZrRCxFQUFXLEVBQU0sSUFBTUksRUFBZ0J2WSxPQUFTLEtBRWxFMXNDLEtBQUssUUFBUyw4QkFDZDZHLE1BQU0sU0FBVSxXQUNoQnJFLEdBQUcsU0FBUyxTQUFVMkgsR0FDbkJrNkMsR0FBZTFGLEVBQWVzRixNQUdsQ2xaLEdBQ0FxYSxFQUFZditDLE1BQU0sT0FBUWtrQyxHQUU5Qm1hLEdBQWdCRCxFQUFnQnZZLE9BR2hDLElBQUk1QixFQUFrQixLQUNsQm1aLEVBQVVuWixnQkFDVkEsRUFBa0JtWixFQUFVblosZ0JBRXhCbVosRUFBVTVxQyxRQUNWeXhCLEVBQWtCbVosRUFBVTVxQyxPQUdwQyxJQUFJZ3NDLEVBQWFGLEVBQ1pwbEQsT0FBTyxRQUNQSSxLQUFLMmtELEdBQ0w5a0QsS0FBSyxLQUFNLGFBQ1hBLEtBQ0csWUFDQSxhQUNJNmtELEVBQVcsRUFDWCxLQUNDSyxFQUFlRixFQUFldFksUUFDL0IsS0FFUDFzQyxLQUFLLFFBQVMsNkJBQ2Q2RyxNQUFNLFNBQVUsV0FDaEI3RyxLQUFLLGNBQWUsUUFDcEJ3QyxHQUFHLFNBQVMsU0FBVTJILEdBQ25CazZDLEdBQWUxRixFQUFlc0YsTUFHbENuWixHQUNBdWEsRUFBV3grQyxNQUFNLE9BQVFpa0MsR0FHN0JvYSxHQUFnQkYsRUFBZXRZLE9BRy9CLElBQUk0WSxFQUFrQmhHLEdBQ2xCemEsRUFDQSwrQkFFSixHQUN1QixXQUFuQm9mLEVBQVV6WixNQUNVLGVBQW5CeVosRUFBVXpaLE9BQ055WixFQUFVdFksMkJBQ2pCLENBQ0UsSUFBSTRaLEVBQWlCSixFQUNoQnBsRCxPQUFPLFFBQ1BJLEtBQUswa0MsR0FDTDdrQyxLQUNHLFlBQ0EsYUFDSSxJQUFNNmtELEVBQ04sSUFDQVMsRUFBZ0I1WSxPQUNoQixLQUVQMXNDLEtBQUssUUFBUywrQkFDZDZHLE1BQU0sU0FBVSxXQUNoQnJFLEdBQUcsU0FBUyxTQUFVMkgsR0FFZjY1QyxHQUFjcmYsRUFBWXNmLEtBRTFCSSxHQUFlMUYsRUFBZXNGLEdBRTlCdUIsR0FDSTlHLEVBQ0FDLEVBQ0FoYSxFQUNBc2YsRUFDQVMsT0FJaEIvRixFQUF1QixRQUFJNEcsRUFJL0IsSUFBSUUsRUFBa0JuRyxHQUNsQixTQUNBLCtCQUVBa0YsRUFBVVcsRUFDVHBsRCxPQUFPLFFBQ1BJLEtBQUssSUFDTEgsS0FBSyxLQUFNLFdBQ1hBLEtBQUssUUFBUywrQkFDZEEsS0FDRyxZQUNBLGFBQ0ksSUFBTTZrRCxFQUNOLEtBQ0NTLEVBQWdCNVksT0FBUytZLEVBQWdCL1ksUUFDMUMsS0FFUDdsQyxNQUFNLFNBQVUsV0FDaEJBLE1BQU0sT0FBUW85QyxFQUFVelksbUJBQzdCbVQsRUFBdUIsUUFBSTZGLEVBRzNCLElBQUlrQixFQUFZcEcsR0FBdUIsSUFBSyw2QkFDNUI2RixFQUNYcGxELE9BQU8sUUFDUEksS0FBSyxLQUNMSCxLQUFLLEtBQU0sYUFDWEEsS0FDRyxZQUNBLGFBQ0ksSUFBTTZrRCxFQUNOLEtBQ0NLLEVBQWUsRUFBSVEsRUFBVWhaLE9BQVMsR0FDdkMsS0FFUDFzQyxLQUFLLFFBQVMsNkJBQ2R3QyxHQUFHLFNBQVMsU0FBVTJILEdBRW5CazZDLEdBQWUxRixFQUFlc0YsR0FDOUJBLEVBQVVyWSxhQUFlLEdBQ3pCLElBQUkrWixFQUFnQmpCLEVBQWFqN0MsUUFBUXZCLEtBQUssRUFBRyxTQUNqRHM5QyxHQUNJOUcsRUFDQUMsRUFDQWhhLEVBQ0FzZixFQUNBMEIsTUFHUDkrQyxNQUFNLFNBQVUsV0FHSnMrQyxFQUNacGxELE9BQU8sUUFDUEksS0FBSyxLQUNMSCxLQUFLLEtBQU0sYUFDWEEsS0FDRyxZQUNBLGFBQ0ksSUFBTTZrRCxFQUNOLEtBQ0NLLEVBQWUsRUFBSVEsRUFBVWhaLE9BQVMsR0FDdkMsS0FFUDFzQyxLQUFLLFFBQVMsNkJBQ2R3QyxHQUFHLFNBQVMsU0FBVTJILEdBRW5CazZDLEdBQWUxRixFQUFlc0YsR0FFOUIsSUFBSTJCLEVBQWdCbEIsRUFBYWo3QyxRQUFRdkIsSUFBSSxFQUFHLFNBQ2hEczlDLEdBQ0k5RyxFQUNBQyxFQUNBaGEsRUFDQXNmLEVBQ0EyQixNQUdQLytDLE1BQU0sU0FBVSxXQUdKcytDLEVBQ1pwbEQsT0FBTyxRQUNQSSxLQUFLLEtBQ0xILEtBQUssS0FBTSxjQUNYQSxLQUNHLFlBQ0EsYUFDSSxFQUFJNmtELEVBQ0osS0FDQ0ssRUFBZSxFQUFJUSxFQUFVaFosT0FBUyxHQUN2QyxLQUVQMXNDLEtBQUssUUFBUyw2QkFDZHdDLEdBQUcsU0FBUyxTQUFVMkgsR0FFbkJrNkMsR0FBZTFGLEVBQWVzRixHQUU5QixJQUFJNEIsRUFBWUMsR0FBb0JuaEIsRUFBV0wsWUFDL0NraEIsR0FBUTlHLEVBQVFDLEVBQWVoYSxFQUFZc2YsRUFBVzRCLE1BRXpEaC9DLE1BQU0sU0FBVSxXQUVyQnErQyxHQXBOZSxFQXVOZixJQUFJYSxFQUFlLENBQUMsTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sT0FDbEIsUUFBeEM5QixFQUFVeFosWUFBWWx4QixlQUN0QndzQyxFQUFhempELEtBQUt5akQsRUFBYTFpQixTQUVuQyxJQUFJMmlCLEVBQWtCMUcsR0FDbEJ5RyxFQUFhLEdBQ2IseUJBRVdwSCxFQUFjNEMsVUFDeEJoaUQsVUFBVSxZQUNWQyxLQUFLdW1ELEdBQ0xqbUQsUUFDQUMsT0FBTyxRQUNQSSxNQUFLLFNBQVV0RSxHQUNaLE9BQU9BLEtBRVZtRSxLQUFLLGFBQWEsU0FBVW5FLEVBQVdoQyxHQU9wQyxNQUxJLGNBQ0NBLEVBQUksSUFBT2dyRCxFQUNaLEtBQ0NLLEVBQWVjLEVBQWdCdFosUUFDaEMsT0FHUDFzQyxLQUFLLFFBQVMseUJBQ2RBLEtBQUssY0FBZSxVQUNwQjZHLE1BQU0sU0FBVSxXQUNoQnJFLEdBQUcsU0FBUyxTQUFVMkgsR0FDbkJrNkMsR0FBZTFGLEVBQWVzRixNQUV0Q2lCLEdBQWdCYyxFQUFnQnRaLE9BdFBqQixFQXlQZixJQUNJMUIsRUFBb0IsS0FDcEJpWixFQUFValosa0JBQ1ZBLEVBQW9CaVosRUFBVWpaLGtCQUUxQmlaLEVBQVU1cUMsUUFDVjJ4QixFQUFvQmlaLEVBQVU1cUMsT0FHdEMsSUFBSTRzQyxFQUFldEgsRUFBYzRDLFVBQzVCeGhELE9BQU8sUUFDUEMsS0FBSyxJQUFLLEdBQ1ZBLEtBQUssSUFBS2tsRCxHQUNWbGxELEtBQUssUUFBUyxJQUFNNmtELEVBQVdtQixFQUFnQnI5QixPQUMvQzNvQixLQUFLLFNBZGUsR0FlcEJBLEtBQUssUUFBUywrQkFFZmdyQyxHQUNBaWIsRUFBYXAvQyxNQUFNLE9BQVFta0MsR0FFL0JrYSxHQXBCeUIsRUFzQnpCQyxFQUFZbmxELEtBQUssU0FBVWtsRCxHQUMzQnZHLEVBQXNCLE9BQUl3RyxFQUcxQnRELEdBQWdCbEQsRUFBY2tCLFNBQVUsRUFBR3FGLEdBRy9DLFNBQVNnQixHQUNMeEgsRUFDQUMsRUFDQWhhLEVBQ0FzZixFQUNBUyxHQUtBLElBQUsvZixJQUFlc2YsRUFBVyxPQUUvQixJQUFJelosRUFBT3laLEVBQVV6WixLQUNyQixHQUFhLFdBQVRBLEdBQThCLGVBQVRBLEVBQ3JCLE1BQU8sMEJBR1gsSUFBSTJaLEVBQWVGLEVBQVVwWSxnQkFDN0IsR0FBcUIsT0FBakJzWSxFQUF1QixPQUMzQixJQUFJdmYsRUFBVUQsRUFBV04sU0FBU1UsZUFBZW9mLEdBQ2pELElBQUt2ZixFQUFTLE9BR2QsSUFBSXVoQixFQUFrQmxDLEVBQVVyZixRQUFRK0wsV0FBV2x5QixHQUN4Q0EsSUFBTzBsQyxJQUVkQSxFQUFlLElBQUdnQyxFQUFrQixHQUN4QyxJQUFJemIsRUFBWXVaLEVBQVV2WixVQUFVeWIsR0FFckJ6QixFQUFhMTBCLFFBQ1AwMEIsRUFBYUMsY0FFbEMsSUFBSUMsRUFBaUJ0RixHQUF1QixLQUFNLHVCQUM5Q3VGLEVBNWdCYyxJQTZnQmQzcUQsS0FBS1EsSUFBSWtxRCxFQUFlajhCLE1BQU9pOEIsRUFBZWxZLFFBQzlDMFosRUFBY3ZCLEVBOWdCQSxJQUNELElBNmdCaUQsRUFDOUR3QixHQUFleEIsRUFBdUIsRUFBWnVCLEdBQW1CLEVBSTdDdGtCLEVBQU93WSxFQUFPMVYsRUFBUWQsYUFDYyxPQUFwQ21nQixFQUFVbmlCLEtBQUtxa0IsS0FDZnJrQixFQUFPbWlCLEVBQVVuaUIsS0FBS3FrQixJQUUxQixJQUFJcGtCLEVBQU8wWSxFQUFPN1YsRUFBUWQsYUFDYyxPQUFwQ21nQixFQUFVbGlCLEtBQUtva0IsS0FDZnBrQixFQUFPa2lCLEVBQVVsaUIsS0FBS29rQixJQUcxQixJQUFJRyxHQUFtQixHQUNWLE9BQVR2a0IsR0FBMEIsT0FBVEQsR0FBaUJDLEdBQVFELEtBRTFDd2tCLEdBQW1CLEdBS3ZCLE1BQU1DLEVBQWlCN0IsRUFBYWo3QyxRQUFRbWxDLFFBQVEsU0FDcEQsSUFBSTVNLEVBQVl1a0IsRUFDWDk4QyxRQUNBKzhDLFNBQVNELEVBQWVuM0IsTUFBTyxRQUNRLFFBQXhDNjBCLEVBQVV4WixZQUFZbHhCLGdCQUN0QnlvQixFQUFZQSxFQUFVOTVCLElBQUksRUFBRyxTQUVqQyxNQUFNdStDLEVBQWUvQixFQUFhajdDLFFBQVFpOUMsTUFBTSxTQUNoRCxJQUFJemtCLEVBQVV3a0IsRUFBYWg5QyxRQUFRdkIsSUFBSSxFQUFJdStDLEVBQWFyM0IsTUFBUSxFQUFHLFFBQ3ZCLFFBQXhDNjBCLEVBQVV4WixZQUFZbHhCLGdCQUN0QjBvQixFQUFVQSxFQUFRLzVCLElBQUksRUFBRyxTQUU3QixNQUFNeStDLEVBQWdCL2hCLEVBQVF6QixlQUN4QnlqQixFQUFjaGlCLEVBQVF4QixhQUs1QixJQUFJcUksRUFBaUJ3WSxFQUFVeFksZUFDM0JvYixFQUFjNUMsRUFBVXZZLFdBQ3hCb2IsRUFBZ0JELEVBQVlWLEdBQzVCeGEsRUFBNkJzWSxFQUFVdFksMkJBR3ZDb2IsRUFBa0MsR0FDbENDLEVBQVMsRUFDVEMsRUFBUyxFQUNUNWtCLEVBQU0sRUFDVixJQUNJLElBQUltQyxFQUFVeEMsRUFBVXY0QixRQUN4Qis2QixHQUFXdkMsRUFDWHVDLEVBQVF0OEIsSUFBSSxFQUFHLFFBQ2pCLENBR0VzOEIsRUFBVTBpQixHQUNOM0ksR0FBaUIvWixFQUFTRyxFQUFXTCxZQUNyQ0ssRUFBV0wsWUFFc0IsZUFBakNFLEVBQVExbEMsT0FBTyxnQkFDZmlsRCxJQUFlLEdBR3lCLFFBQXhDRSxFQUFVeFosWUFBWWx4QixlQUN0Qnl0QyxFQUFTeGlCLEVBQVFwVixNQUFRLEVBQ3JCNDNCLEVBQVMsSUFDVEEsRUFBUyxHQUViQyxFQUFTL3NELEtBQUtVLE1BQU15bkMsRUFBTSxLQUUxQjJrQixFQUFTeGlCLEVBQVFwVixNQUNqQjYzQixFQUFTL3NELEtBQUtVLE1BQU15bkMsRUFBTSxJQUk5QixJQUFJOGtCLEdBQWdCLEdBRWhCM2lCLEVBQVEwTSxLQUFLcVYsR0FBa0IsR0FDL0IvaEIsRUFBUTBNLEtBQUt1VixHQUFnQixLQUU3QlUsR0FBZ0IsR0FHcEIsSUFBSUMsR0FBbUIsRUFFbkJULEdBQ0FDLEdBQ0FwaUIsRUFBUTBNLEtBQUt5VixJQUFrQixHQUMvQm5pQixFQUFRME0sS0FBSzBWLElBQWdCLElBRTdCUSxHQUFtQixHQUd2QixNQUFNQyxFQUFXemlCLEVBQVFoQyxTQUFTNEIsR0FDOUJ1ZixLQUNBdUQsUUFBUXpzRCxJQUFJK3BDLEdBQ1owaUIsUUFBUXpzRCxJQUFJMGpELEdBQWlCL1osRUFBU0csRUFBV0wsYUFDakRnakIsUUFBUXpzRCxJQUFJd3NELElBSWhCLElBQUlwYyxHQUFhLEVBQ1pnWixFQUFVM1ksb0JBUU5nYixHQUNnQixPQUFiZSxHQUNJQSxFQUFXM2MsS0FLbkJPLEdBQWEsR0FiQSxPQUFib2MsR0FDSUEsRUFBVzNjLElBQ1hPLEdBQWEsR0FnQnpCLElBQUlzYyxFQUFjLEtBQ2R0RCxFQUFVM1ksb0JBQ05nYixHQUFpQyxPQUFiZSxJQUNwQkUsR0FBZUYsRUFBV3ZsQixJQUFTQyxFQUFPRCxJQUc5Q2lpQixLQUNBdUQsUUFBUXpzRCxJQUFJaW5DLEdBQ1p3bEIsUUFBUXpzRCxJQUFJa25DLEdBQ1p1bEIsUUFBUXpzRCxJQUFJMHNELElBSWhCLElBQUlDLEVBQVk1aUIsRUFBUWhDLFNBQVM0QixFQUFTLEdBQ3RDaWpCLEVBQVk3aUIsRUFBUWhDLFNBQVM0QixHQUFVLEdBQ3ZDa2pCLEdBQVcsRUFDRSxPQUFiTCxHQUFxQkEsRUFBVzNjLEdBQ2QsT0FBZCtjLEdBQXNCQSxFQUFZL2MsSUFDbENnZCxHQUFXLEdBR25CLElBQUlDLEdBQVksRUFDQyxPQUFiTixHQUFxQkEsRUFBVzNjLEdBQ2QsT0FBZDhjLEdBQXNCQSxFQUFZOWMsSUFDbENpZCxHQUFZLEdBR2hCNUQsS0FDQXVELFFBQVF6c0QsSUFDSixhQUFhNHNELGdCQUF3QkosaUJBQXdCRyxLQUVqRUYsUUFBUXpzRCxJQUFJb3BELEVBQVV2WixXQUN0QjRjLFFBQVF6c0QsSUFBSSxhQUFhNnNELGlCQUF3QkMsTUFHckQsSUFBSUMsRUFBaUIsR0FDckIsR0FBSW5jLEVBQ0EsR0FBS0UsRUFLRCxJQUFLLElBQUlpUyxLQUFhcUcsRUFBVXJmLFFBQVMsQ0FDckMsSUFBSWlqQixFQUFlNUQsRUFBVXJmLFFBQVErTCxXQUFXbHlCLEdBQ3JDQSxJQUFPbS9CLElBRWxCLEdBQUlpSyxHQUFnQixFQUFHLENBQ25CLElBQUlwaEQsRUFBSWsrQixFQUFXTixTQUNkVSxlQUFlNlksR0FDZmhiLFNBQVM0QixHQUNWcm9DLEVBQUk4bkQsRUFBVXZaLFVBQVVtZCxHQUNsQixPQUFOcGhELEdBQWNBLEVBQUl0SyxJQUNsQnlyRCxHQUFrQmYsRUFBWWdCLFVBZHRDUixFQUFXM2MsSUFDWGtkLEVBQWlCZCxHQW9CN0JDLEVBQWdCemtELEtBQUssQ0FDakJ3cEIsS0FBTXl5QixHQUFpQi9aLEVBQVNHLEVBQVdMLFlBQzNDbHNDLE1BQU9pdkQsRUFDUEUsWUFBYUEsRUFDYk8sV0FBWXRqQixFQUFRMVksT0FDcEJxN0IsY0FBZUEsRUFDZkMsaUJBQWtCQSxFQUNsQlcsSUFBS2QsRUFDTGUsSUFBS2hCLEVBQ0wvYixXQUFZQSxFQUNaeWMsU0FBVUEsRUFDVkMsVUFBV0EsRUFDWGpjLFdBQVlrYyxJQUdoQnZsQixJQUdJMGhCLEtBQ0FBLElBQWUsR0FZdkIsSUFBSWtFLEdBQXNCakIsRUFBUyxHQUFLbkMsRUFFcENwbkQsRUFBUXlxRCxLQUVQcnBELE9BQU8sRUFBRSxHQUFLLE1BQ2Q3QixNQUFNLENBQUMsRUFBR2lyRCxJQUdmLEdBQWEsV0FBVHpkLEdBQXFCeVosRUFBVWhaLFlBQWNnWixFQUFVL1ksV0FBWSxDQUNuRSxJQUFJaWQsRUFBYyxVQUNkbEUsRUFBVTVZLFlBQ1Y4YyxFQUFjbEUsRUFBVTVZLFlBQ2pCNFksRUFBVTVxQyxRQUNqQjh1QyxFQUFjbEUsRUFBVTVxQyxPQUk1QnNsQyxFQUFja0IsU0FDVHRnRCxVQUFVLFlBQ1ZDLEtBQ0d1bkQsRUFBZ0JwbUQsUUFBTyxTQUFVbEgsR0FDN0IsT0FBT0EsRUFBRWl1RCxhQUdoQjVuRCxRQUNBQyxPQUFPLFFBSVBDLEtBQUssS0FBSyxTQUFVdkcsR0FFakIsT0FEUWdFLEVBQU1oRSxFQUFFdXVELEtBQU81QixFQUFZQyxLQUd0Q3JtRCxLQUFLLEtBQUssU0FBVXZHLEdBQ2pCLE9BQU9nRSxFQUFNaEUsRUFBRXN1RCxLQUFPSyxPQUV6QnBvRCxLQUFLLFFBQVNxbUQsR0FDZHJtRCxLQUFLLFNBelBLLEdBMFBWNkcsTUFBTSxRQUFRLFNBQVVwTixHQUNyQixPQUFJQSxFQUFFd3hDLFdBQ0dnWixFQUFVM1ksbUJBR08sT0FBbEI3eEMsRUFBRTh0RCxZQUNLYyxHQUNILFFBQ0FGLEVBRkdFLENBR1csR0FBaEI1dUQsRUFBRTh0RCxZQUFvQixJQUVqQixPQVJBWSxFQVdSLFVBRVZ0aEQsTUFBTSxXQUFXLFNBQVVwTixHQUN4QixPQUNJQSxFQUFFMnRELGtCQUNEbkQsRUFBVXRaLGdCQUFrQmx4QyxFQUFFMHRELGNBRXhCLEdBRUosS0FHZnhJLEVBQWNrQixTQUNUdGdELFVBQVUsYUFDVkMsS0FDR3VuRCxFQUFnQnBtRCxRQUFPLFNBQVVsSCxHQUM3QixPQUFPQSxFQUFFa3VELGNBR2hCN25ELFFBQ0FDLE9BQU8sUUFJUEMsS0FBSyxLQUFLLFNBQVV2RyxHQUVqQixPQURRZ0UsRUFBTWhFLEVBQUV1dUQsS0FBTzVCLEtBRzFCcG1ELEtBQUssS0FBSyxTQUFVdkcsR0FDakIsT0FBT2dFLEVBQU1oRSxFQUFFc3VELEtBQU9LLE9BRXpCcG9ELEtBQUssUUFBU3FtRCxHQUNkcm1ELEtBQUssU0F4U0ssR0F5U1Y2RyxNQUFNLFFBQVEsU0FBVXBOLEdBQ3JCLE9BQUlBLEVBQUV3eEMsV0FDR2daLEVBQVUzWSxtQkFHTyxPQUFsQjd4QyxFQUFFOHRELFlBQ0tjLEdBQ0gsUUFDQUYsRUFGR0UsQ0FHVyxHQUFoQjV1RCxFQUFFOHRELFlBQW9CLElBRWpCLE9BUkFZLEVBV1IsVUFFVnRoRCxNQUFNLFdBQVcsU0FBVXBOLEdBQ3hCLE9BQ0lBLEVBQUUydEQsa0JBQ0RuRCxFQUFVdFosZ0JBQWtCbHhDLEVBQUUwdEQsY0FFeEIsR0FFSixLQUtuQixJQUFJOWIsRUFBYyxVQUNkNFksRUFBVTVZLFlBQ1ZBLEVBQWM0WSxFQUFVNVksWUFDakI0WSxFQUFVNXFDLFFBQ2pCZ3lCLEVBQWM0WSxFQUFVNXFDLE9BRWYsV0FBVG14QixHQUFxQnlaLEVBQVVoWixZQUNwQjBULEVBQWNrQixTQUNwQnRnRCxVQUFVLE9BQ1ZDLEtBQUt1bkQsR0FDTGpuRCxRQUNBQyxPQUFPLFVBQ1BDLEtBQUssSUFBS29tRCxHQUNWcG1ELEtBQUssTUFBTSxTQUFVdkcsR0FDbEIsT0FBT2dFLEVBQU1oRSxFQUFFdXVELFFBRWxCaG9ELEtBQUssTUFBTSxTQUFVdkcsR0FDbEIsT0FBT2dFLEVBQU1oRSxFQUFFc3VELFFBRWxCbGhELE1BQU0sUUFBUSxTQUFVcE4sR0FDckIsR0FBSUEsRUFBRXd4QyxXQUFZLENBQ2QsSUFBS2daLEVBQVUzWSxtQkFDWCxPQUFPRCxFQUVYLEdBQXNCLE9BQWxCNXhDLEVBQUU4dEQsWUFBc0IsQ0FPeEIsT0FOa0JjLEdBQ2QsUUFDQWhkLEVBRmNnZCxDQUdBLEdBQWhCNXVELEVBQUU4dEQsWUFBb0IsSUFLeEIsTUFBTyxPQUdmLE1BQU8sVUFFVjFnRCxNQUFNLFdBQVcsU0FBVXBOLEdBQ3hCLE9BQ0lBLEVBQUUydEQsa0JBQ0RuRCxFQUFVdFosZ0JBQWtCbHhDLEVBQUUwdEQsY0FFeEIsR0FFSixLQUVWdGdELE1BQU0sU0FBVSxXQUl6QixJQUFJeWhELEVBQVEvSixHQUFpQi8vQyxPQUFPaW1DLFNBQVVFLEVBQVdMLFlBQ3pELEdBQWEsV0FBVGtHLEdBQXFCeVosRUFBVTlZLGNBQWUsQ0FDOUMsSUFBSW9kLEVBQWE1SixFQUFja0IsU0FDMUJ0Z0QsVUFBVSxhQUNWQyxLQUNHdW5ELEVBQWdCcG1ELFFBQU8sU0FBVWxILEdBQzdCLE9BQU9BLEVBQUVxeUIsT0FBU3c4QixNQUd6QnhvRCxRQUNBQyxPQUFPLFVBQ1BDLEtBQUssSUFBaUIsR0FBWm9tRCxHQUNWcG1ELEtBQUssTUFBTSxTQUFVdkcsR0FDbEIsT0FBT2dFLEVBQU1oRSxFQUFFdXVELFFBRWxCaG9ELEtBQUssTUFBTSxTQUFVdkcsR0FDbEIsT0FBT2dFLEVBQU1oRSxFQUFFc3VELFFBRWxCL25ELEtBQUssUUFBUyw4QkFDZDZHLE1BQU0sU0FBVSxXQUVZLEtBQTdCbzlDLEVBQVUxWSxlQUNWZ2QsRUFBVzFoRCxNQUFNLFNBQVVvOUMsRUFBVTFZLGdCQUVyQ2dkLEVBQVcxaEQsTUFBTSxTQUFVLFNBS3RCLFdBQVQyakMsR0FBcUJ5WixFQUFVN1ksa0JBQ1h1VCxFQUFja0IsU0FDN0J0Z0QsVUFBVSxnQkFDVkMsS0FBS3VuRCxHQUNMam5ELFFBQ0FDLE9BQU8sVUFDUEMsS0FBSyxJQUFLb21ELEdBQ1ZwbUQsS0FBSyxNQUFNLFNBQVV2RyxHQUNsQixPQUFPZ0UsRUFBTWhFLEVBQUV1dUQsUUFFbEJob0QsS0FBSyxNQUFNLFNBQVV2RyxHQUNsQixPQUFPZ0UsRUFBTWhFLEVBQUVzdUQsUUFFbEIvbkQsS0FBSyxNQUFNLFNBQVV2RyxHQUNsQixNQUFPLDJCQUE2QkEsRUFBRXF5QixRQUV6QzlyQixLQUFLLFFBQVMsaUNBQ2Q2RyxNQUFNLFNBQVUsV0FDaEJBLE1BQU0sU0FBVSxRQUlUODNDLEVBQWNrQixTQUN6QnRnRCxVQUFVLFlBQ1ZDLEtBQUt1bkQsR0FDTGpuRCxRQUNBQyxPQUFPLFFBQ1BJLE1BQUssU0FBVTFHLEdBQ1osT0FBT0EsRUFBRXF1RCxXQUFXeHRDLGNBRXZCdGEsS0FBSyxhQUFhLFNBQVV2RyxHQUt6QixNQUZtQixhQUZOZ0UsRUFBTWhFLEVBQUV1dUQsS0FFc0IsS0FEOUJ2cUQsRUFBTWhFLEVBQUVzdUQsS0FBT25ELEVBQWVsWSxPQUFTLEdBQ00sT0FJN0Q3bEMsTUFBTSxnQkFBZ0IsU0FBVXBOLEdBQzdCLE9BQ0lBLEVBQUUydEQsa0JBQ0RuRCxFQUFVdFosZ0JBQWtCbHhDLEVBQUUwdEQsY0FFeEIsR0FFSixLQUVWbm5ELEtBQUssUUFBUSxTQUFVdkcsR0FDcEIsT0FBT0EsRUFBRXF5QixRQUVaOXJCLEtBQUssU0FBUyxTQUFVdkcsR0FDckIsT0FBT0EsRUFBRXJCLFNBRVo0SCxLQUFLLGFBQWEsU0FBVXZHLEdBQ3pCLE9BQU82aEMsR0FBVXNKLEVBQVF0RSxjQUU1QnRnQyxLQUFLLFFBQVMsdUJBQ2R3QyxHQUFHLFNBQVMsU0FBVTJILEdBRW5CazZDLEdBQWUxRixFQUFlc0YsR0FFOUIsSUFBSW40QixFQUFPMmxCLEdBQVUzekMsTUFBTWtDLEtBQUssUUFRaEMsR0FQQWlrRCxFQUFVclksYUFBZTlmLEVBQ3JCbTRCLEVBQVU3WSxrQkFDVnVULEVBQWNrQixTQUNUMy9DLE9BQU8sNEJBQThCNHJCLEdBQ3JDamxCLE1BQU0sU0FBVW85QyxFQUFVelksbUJBRy9CeVksRUFBVXBaLGtCQUFtQixDQUM3QixJQUFJeVQsRUFBVzdNLEdBQVUzekMsTUFBTWtDLEtBQUssU0FFaEN3b0QsRUFBWSxHQUNoQixHQUFrQixTQUZGL1csR0FBVTN6QyxNQUFNa0MsS0FBSyxhQUVYLENBTXRCd29ELEVBTGVocUQsT0FBT2ltQyxPQUFPLFFBQVMsU0FBUyxHQUN2QnY4QixJQUNwQnk0QixXQUFXMmQsR0FDWCxXQUVpQngvQyxPQUFPLGNBRTVCMHBELEVBQVlsSyxFQUVoQkssRUFBYzZGLFFBQVFya0QsS0FBS3FvRCxPQUdsQzNoRCxNQUFNLFNBQVUsV0FHUixlQUFUMmpDLEdBQXlCaUIsR0FDTGtULEVBQWNrQixTQUM3QnRnRCxVQUFVLGlCQUNWQyxLQUFLdW5ELEdBQ0xqbkQsUUFDQUMsT0FBTyxRQUNQSSxNQUFLLFNBQVUxRyxHQUNaLE9BQU9BLEVBQUVpeUMsY0FFWjFyQyxLQUFLLGFBQWEsU0FBVXZHLEdBQ3pCLElBQUlndkQsRUFBU2hyRCxFQUFNaEUsRUFBRXV1RCxLQUNqQlUsRUFBU2pyRCxFQUFNaEUsRUFBRXN1RCxLQUFPbkQsRUFBZWxZLE9BQVMsRUFNcEQsT0FMSWp6QyxFQUFFaXlDLGFBQ0ZnZCxHQUFVdEMsR0FFSyxhQUFlcUMsRUFBUyxJQUFNQyxFQUFTLE9BSTdEMW9ELEtBQUssUUFBUyw0QkFJdkIsSUFBSXNqRCxFQUFXM2lCLFdBQVdnZSxFQUFjNzdDLElBQUk5QyxLQUFLLFVBQzdDdWpELEVBQVk1aUIsV0FBV2dlLEVBQWM3N0MsSUFBSTlDLEtBQUssV0FDOUMyb0QsRUFBaUJob0IsV0FBV2dlLEVBQWM0QyxVQUFVdmhELEtBQUssVUFDekQ0b0QsRUFBa0Jqb0IsV0FBV2dlLEVBQWM0QyxVQUFVdmhELEtBQUssV0FDMUQ2b0QsRUFDQSxFQUFJaEUsRUFBV2xrQixXQUFXZ2UsRUFBY21LLE9BQU85b0QsS0FBSyxXQUNwRCtvRCxFQUFhLEVBQUlsRSxFQUNqQmdFLEVBQWN0RixHQUNkM0IsR0FBa0JqRCxFQUFjNzdDLElBQUssRUFBRytsRCxFQUFjdEYsR0FFdER3RixFQUFhekYsR0FDYjFCLEdBQWtCakQsRUFBYzc3QyxJQUFLaW1ELEVBQWF6RixFQUFVLEdBRTVEdUYsRUFBY0QsR0FDZGhILEdBQ0lqRCxFQUFjNEMsVUFDZCxFQUNBc0gsRUFBY0QsR0FHbEJHLEVBQWFKLEdBQ2IvRyxHQUFrQmpELEVBQWM3N0MsSUFBS2ltRCxFQUFhSixFQUFnQixHQUkxRSxTQUFTbkQsR0FDTDlHLEVBQ0FDLEVBQ0FoYSxFQUNBc2YsRUFDQVMsR0FJSy9mLEdBQWVxa0IsS0FLcEJ2RSxHQUNJL0YsRUFKSkMsRUFBZ0I2QyxHQUFZN0MsRUFBZUQsRUFBUS9aLEdBTS9DQSxFQUNBc2YsRUFDQVMsR0FHSndCLEdBQWdCeEgsRUFBUUMsRUFBZWhhLEVBQVlzZixFQUFXUyxhQUdsRHNFLEdBQ1p0SyxFQUNBL1osRUFDQXNmLEdBS0EsSUFBS3RmLElBQWVxa0IsR0FBYSxPQUdoQi9FLEVBQVVyZixRQUMzQixJQUFJcWtCLEVBQXNCLEVBQzFCLElBQUssSUFBSXJrQixLQUFXRCxFQUFXTixTQUN0Qk8sRUFBUWpCLFdBQVdwRCxnQkFDcEIwb0IsSUFHUixHQUE0QixJQUF4QkEsRUFDQSxNQUFPLDZCQUdYLEdBREFqRixHQUFjcmYsRUFBWXNmLEdBQ1EsT0FBOUJBLEVBQVVwWSxnQkFDVixNQUFPLDZCQUdYLElBQUk4UyxFQUErQixHQUNuQ0EsRUFBZ0I2QyxHQUFZN0MsRUFBZUQsRUFBUS9aLEdBRW5ELElBQUl1a0IsRUFBb0IsS0FDeEIsR0FBSWpGLEVBQVVyWixXQUtWLEdBSkFzZSxFQUFZQyxHQUNSbEYsRUFBVXJaLFVBQ1ZqRyxFQUFXTCxhQUVWNGtCLEVBQVcsQ0FDWixJQUFJdGUsRUFBWXBzQyxPQUFPaW1DLE9BQU93ZixFQUFVclosVUFBVyxXQUFXLEdBRTlELElBQUlBLEVBQVVvRixVQUdWLE1BQU8sb0JBRlBrWixFQUFZdGUsUUFNcEJzZSxFQUFZdmtCLEVBQVdOLFNBQVMvQixXQUFXc08sT0FFMUNzWSxJQUVMekUsR0FBa0IvRixFQUFRQyxFQUFlaGEsRUFBWXNmLEVBQVdpRixHQUVoRWhELEdBQWdCeEgsRUFBUUMsRUFBZWhhLEVBQVlzZixFQUFXaUYsR0F2bUNsRSxTQUNJN0YsRUFDQTFFLEVBQ0FoYSxHQUVBLElBQUkrWixFQUFTak4sR0FBVTRSLEdBQ25CdmdELEVBQU02N0MsRUFBYzc3QyxJQUNwQndnRCxFQUFXM2lCLFdBQVc3OUIsRUFBSTlDLEtBQUssVUFDL0J1akQsRUFBWTVpQixXQUFXNzlCLEVBQUk5QyxLQUFLLFdBQ3BDOEMsRUFBSTlDLEtBQUssUUFBUyxNQUNiQSxLQUFLLFNBQVUsTUFDZkEsS0FBSyxVQUFXLE9BQU9zakQsS0FBWUMsS0FDbkN2akQsS0FBSyxzQkFBdUIsaUJBRTdCMmtDLEVBQVcrQixjQUNYZ1ksRUFBTzczQyxNQUFNLFFBQVMsU0FFdEI2M0MsRUFBTzczQyxNQUNILFNBQ0N5OEMsRUFBVzNlLEVBQVc4QixZQUFZbnNCLFdBQWEsTUFFcERva0MsRUFBTzczQyxNQUNILFVBQ0MwOEMsRUFBWTVlLEVBQVc4QixZQUFZbnNCLFdBQWEsT0FrbEN6RGtwQyxDQUFjOUUsRUFBUUMsRUFBZWhhLGFDejVCekJ5a0IsR0FDWjFLLEVBQ0EvWixFQUNBMGtCLEdBSUEsR0FBSzFrQixHQUFleWtCLEdBRXBCLE1BQU8sOEJDd1JLRSxHQUNaNUssRUFDQS9aLEVBQ0E0a0IsR0FJQSxJQUFLNWtCLElBQWU0a0IsRUFBWSxPQUVoQyxJQUFJM0wsRUFBWWpkLFdBQVc0b0IsRUFBVzNrQixTQUN4QkQsRUFBV04sU0FBU1UsZUFBZTZZLEdBR2xCLGVBQTNCMkwsRUFBV3ZkLFlBQ1hySCxFQUFXMEIsYUFBZSxDQUFFMWQsTUFBTyxJQUFLK2pCLE9BQVEsSUFDZCxhQUEzQjZjLEVBQVd2ZCxjQUNsQnJILEVBQVcwQixhQUFlLENBQUUxZCxNQUFPLEdBQUkrakIsT0FBUSxNQUduRCxJQUFJaVMsRUF2aEJSLFNBQ0lELEVBQ0EvWixFQUNBNGtCLEdBRUEsSUFBSTVLLEVBQStCLEdBR25DLElBQUtoYSxJQUFlNGtCLEVBQVksT0FFaEMsSUFBSXptRCxFQUFNdytDLEdBQ0U1QyxHQUNQMytDLE9BQU8sT0FDUEMsS0FBSyxLQUFNLE9BQ1hBLEtBQ0csUUFDQTJrQyxFQUFXMEIsYUFBYTFkLE1BQ3BCZ2MsRUFBVzRCLE9BQU9wdEMsS0FDbEJ3ckMsRUFBVzRCLE9BQU96c0MsT0FFekJrRyxLQUNHLFNBQ0Eya0MsRUFBVzBCLGFBQWFxRyxPQUNwQi9ILEVBQVc0QixPQUFPb0csSUFDbEJoSSxFQUFXNEIsT0FBT3FHLFFBRTlCK1IsRUFBbUIsSUFBSTc3QyxFQUd2QixJQUFJeStDLEVBQVl6K0MsRUFDWC9DLE9BQU8sS0FDUEMsS0FBSyxLQUFNLGFBQ1hBLEtBQ0csWUFDQSxhQUNJMmtDLEVBQVc0QixPQUFPcHRDLEtBQ2xCLElBQ0F3ckMsRUFBVzRCLE9BQU9vRyxJQUNsQixLQUVQM3NDLEtBQUssUUFBUzJrQyxFQUFXMEIsYUFBYTFkLE1BQVFnYyxFQUFXNEIsT0FBT3pzQyxPQUNoRWtHLEtBQ0csU0FDQTJrQyxFQUFXMEIsYUFBYXFHLE9BQVMvSCxFQUFXNEIsT0FBT3FHLFFBRTNEK1IsRUFBeUIsVUFBSTRDLEVBRzdCLElBQUkxQixFQUFXMEIsRUFDVnhoRCxPQUFPLEtBQ1BDLEtBQUssS0FBTSxZQUNYQSxLQUFLLFFBQVMya0MsRUFBVzBCLGFBQWExZCxPQUN0QzNvQixLQUFLLFNBQVUya0MsRUFBVzBCLGFBQWFxRyxRQUc1QyxPQUZBaVMsRUFBd0IsU0FBSWtCLEVBRXJCbEIsRUFnZWE2QyxDQUFZOUMsRUFBUS9aLEVBQVk0a0IsR0FFaERDLEVBbFRSLFNBQ0k3SyxFQUNBaGEsRUFDQTRrQixFQUNBM2tCLEdBTUEsSUFBS0QsSUFBZTRrQixFQUFZLE9BRWhDLElBQUl2c0QsRUFBUXVzRCxFQUFXdnNELE1BQ25CeXNELEVBQVl6c0QsRUFBTUEsRUFBTXpELE9BQVMsR0FDakNzRixFQUFTLENBQUMsRUFBRzRxRCxHQUdidGQsRUFBWW9kLEVBQVdwZCxVQUN2QnVkLEVBQW9CLFNBQVV0eEQsR0FDOUIsT0FBSSt6QyxHQUFhQSxFQUFVdUMsU0FBUyxLQUN6QmliLEdBQWMsRUFBR0YsRUFBVyxFQUE1QkUsQ0FBK0J2eEQsR0FBUyxLQUU1Q3V4RCxHQUFjLEVBQUdGLEVBQVcsRUFBNUJFLENBQStCdnhELElBR3RDd3hELEVBQW1CdEssR0FESm9LLEVBQWFELEdBRzVCLHNCQUdKLEdBQStCLGVBQTNCRixFQUFXdmQsWUFBOEIsQ0FDekMsSUFBSXZ1QyxFQUFRb3NELEtBQ1pwc0QsRUFBTW9CLE9BQU9BLEdBQVE3QixNQUFNLENBQUMsRUFBRzJuQyxFQUFXMEIsYUFBYTFkLFFBQ3ZEZzJCLEVBQXFCLE1BQUlsaEQsRUFFekIsSUFBSXFzRCxFQUFVQyxFQUFjdHNELEdBQzVCcXNELEVBQVExckQsV0FBV3NyRCxHQUNuQixJQUFJMXJELEVBQU8yZ0QsRUFBY2tCLFNBQ3BCOS9DLE9BQU8sS0FDUEMsS0FBSyxLQUFNLFFBQ1hBLEtBQ0csWUFDQSxlQUFpQjJrQyxFQUFXMEIsYUFBYXFHLE9BQVMsS0FFckQ1ckMsS0FBS2dwRCxHQUNMOXBELEtBQUssUUFBUyxnQkFDbkIyK0MsRUFBb0IsS0FBSTNnRCxFQUVUQSxFQUFLdUIsVUFBVSxRQUFRc0gsTUFBTSxTQUFVLFFBRXRDN0ksRUFBS3VCLFVBQVUsUUFFVnZCLEVBQ2hCdUIsVUFBVSxRQUNWUyxLQUFLLFFBQVMsc0JBRW5CaEMsRUFBS2dDLEtBQ0QsUUFDQTJrQyxFQUFXMEIsYUFBYTFkLE1BQVFpaEMsRUFBaUJqaEMsT0FFckQzcUIsRUFBS2dDLEtBQUssU0E1Q0csRUE0Q29CNHBELEVBQWlCbGQsUUFHbERrVixHQUNJakQsRUFBYzc3QyxLQUNiOG1ELEVBQWlCamhDLE1BakRULEVBa0RJaWhDLEVBQWlCbGQsUUFFbENrVixHQUNJakQsRUFBYzRDLFdBQ2JxSSxFQUFpQmpoQyxNQXREVCxFQXVESWloQyxFQUFpQmxkLGFBRS9CLEdBQStCLGFBQTNCNmMsRUFBV3ZkLFlBQTRCLENBQzlDLElBQUl2dUMsRUFBUW9zRCxLQUNacHNELEVBQU1vQixPQUFPQSxHQUFRN0IsTUFBTSxDQUFDMm5DLEVBQVcwQixhQUFhcUcsT0FBUSxJQUM1RGlTLEVBQXFCLE1BQUlsaEQsRUFFekIsSUFBSXFzRCxFQUFVRSxFQUFZdnNELEdBQzFCcXNELEVBQVExckQsV0FBV3NyRCxHQUNuQixJQUFJMXJELEVBQU8yZ0QsRUFBY2tCLFNBQ3BCOS9DLE9BQU8sS0FDUEMsS0FBSyxLQUFNLFFBQ1hBLEtBQUssSUFBSyxHQUNWQSxLQUFLLElBQUssR0FDVmMsS0FBS2dwRCxHQUNMOXBELEtBQUssUUFBUyxnQkFDbkIyK0MsRUFBb0IsS0FBSTNnRCxFQUVUQSxFQUFLdUIsVUFBVSxRQUFRc0gsTUFBTSxTQUFVLFFBRXRDN0ksRUFBS3VCLFVBQVUsUUFFVnZCLEVBQ2hCdUIsVUFBVSxRQUNWUyxLQUFLLFFBQVMsc0JBRW5CaEMsRUFBS2dDLEtBQUssUUFqRkcsRUFpRm1CNHBELEVBQWlCamhDLE9BQ2pEM3FCLEVBQUtnQyxLQUFLLFNBQVUya0MsRUFBVzBCLGFBQWExZCxPQUc1Q2k1QixHQUNJakQsRUFBYzc3QyxJQXRGTCxFQXVGSThtRCxFQUFpQmpoQyxNQUM5QixHQUVKaTVCLEdBQ0lqRCxFQUFjNEMsVUEzRkwsRUE0RklxSSxFQUFpQmpoQyxNQUM5QixHQUdKazVCLEdBQ0lsRCxFQUFja0IsU0FqR0wsRUFrR0krSixFQUFpQmpoQyxNQUM5QixJQStMWXNoQyxDQUNoQnRMLEVBQ0FoYSxFQUNBNGtCLEdBR0osR0FBNkIsaUJBQWxCQyxFQUNQLE9BQU9BLEdBMWNmLFNBQ0k3SyxFQUNBaGEsRUFDQTRrQixHQUtBLElBQUs1a0IsSUFBZTRrQixFQUFZLE9BSWhDLEdBQUlBLEVBQVdqaUIsTUFBTyxDQUNsQixJQUFJcWEsRUFBWXJDLEdBQ1ppSyxFQUFXamlCLE1BQ1gsdUJBR0osR0FBK0IsZUFBM0JpaUIsRUFBV3ZkLFlBQThCLENBQ3pDLElBQUkxRSxFQUFRcVgsRUFBYzRDLFVBQ3JCeGhELE9BQU8sUUFDUEksS0FBS29wRCxFQUFXamlCLE9BQ2hCdG5DLEtBQUssS0FBTSxTQUNYQSxLQUFLLElBQUsyaEQsRUFBVWg1QixNQUFRLEdBQzVCM29CLEtBQUssSUFBSzJrQyxFQUFXMEIsYUFBYXFHLE9BQVMsR0FDM0Mxc0MsS0FBSyxTQUFVMmhELEVBQVVqVixRQUN6QjFzQyxLQUFLLFFBQVMsdUJBQ25CMitDLEVBQXFCLE1BQUlyWCxFQUd6QnNhLEdBQWtCakQsRUFBYzc3QyxJQUFLNitDLEVBQVVoNUIsTUFwQnZDLEVBb0J3RCxHQUNoRWk1QixHQUNJakQsRUFBYzRDLFVBQ2RJLEVBQVVoNUIsTUF2Qk4sRUF3QkosR0FJSms1QixHQUNJbEQsRUFBY2tCLFNBQ2Q4QixFQUFVaDVCLE1BOUJOLEVBK0JKLFFBRUQsR0FBK0IsYUFBM0I0Z0MsRUFBV3ZkLFlBQTRCLENBRTlDLElBQUlrZSxFQUFVdmxCLEVBQVcwQixhQUFhMWQsTUFBUSxFQUMxQ2c1QixFQUFVaDVCLE1BQVFnYyxFQUFXMEIsYUFBYTFkLFFBRTFDaTVCLEdBQ0lqRCxFQUFjNzdDLElBQ2Q2K0MsRUFBVWg1QixNQUFRZ2MsRUFBVzBCLGFBQWExZCxNQUMxQyxHQUVKaTVCLEdBQ0lqRCxFQUFjNEMsVUFDZEksRUFBVWg1QixNQUFRZ2MsRUFBVzBCLGFBQWExZCxNQUMxQyxHQUdKazVCLEdBQ0lsRCxFQUFja0IsU0FDZDhCLEVBQVVoNUIsTUFBUSxFQUFNZ2MsRUFBVzBCLGFBQWExZCxNQUFRLEVBQ3hELEdBRUp1aEMsRUFBVXZJLEVBQVVoNUIsTUFBUSxHQUdoQyxJQUFJd2hDLEVBQVl4cEIsV0FBV2dlLEVBQWMzZ0QsS0FBS2dDLEtBQUssVUFFL0NzbkMsRUFBUXFYLEVBQWM0QyxVQUNyQnhoRCxPQUFPLFFBQ1BJLEtBQUtvcEQsRUFBV2ppQixPQUNoQnRuQyxLQUFLLEtBQU0sU0FDWEEsS0FBSyxJQUFLa3FELEVBQVVDLEdBQ3BCbnFELEtBQUssSUFBSzJoRCxFQUFValYsT0FBUyxHQUM3QjFzQyxLQUFLLFNBQVUyaEQsRUFBVWpWLFFBQ3pCMXNDLEtBQUssUUFBUyx1QkFDbkIyK0MsRUFBcUIsTUFBSXJYLEVBR3pCc2EsR0FBa0JqRCxFQUFjNzdDLElBQUssRUFBRzYrQyxFQUFValYsT0F0RTFDLEdBdUVSa1YsR0FDSWpELEVBQWM0QyxVQUNkLEVBQ0FJLEVBQVVqVixPQTFFTixHQThFUm1WLEdBQ0lsRCxFQUFja0IsU0FDZCxFQUNBOEIsRUFBVWpWLE9BakZOLElBc0ZoQixHQUFJNmMsRUFBV3BkLFVBQVcsQ0FDdEIsSUFBSWllLEVBQVc5SyxHQUNYaUssRUFBV3BkLFVBQ1gsc0JBR0osR0FBK0IsZUFBM0JvZCxFQUFXdmQsWUFBOEIsQ0FDekMsSUFBSXpmLEVBQU9veUIsRUFBY2tCLFNBQ3BCOS9DLE9BQU8sUUFDUEksS0FBS29wRCxFQUFXcGQsV0FDaEJuc0MsS0FBSyxLQUFNLFFBQ1hBLEtBQUssS0FBTSxHQUFLb3FELEVBQVN6aEMsTUFqR3RCLElBa0dIM29CLEtBQUssSUFBSzJrQyxFQUFXMEIsYUFBYXFHLE9BbEcvQixHQW1HSDFzQyxLQUFLLFNBQVVvcUQsRUFBUzFkLFFBQ3hCMXNDLEtBQUssUUFBUyxzQkFDbkIyK0MsRUFBb0IsS0FBSXB5QixPQUNyQixHQUErQixhQUEzQmc5QixFQUFXdmQsWUFBNEIsQ0FDOUMsSUFBSXpmLEVBQU9veUIsRUFBY2tCLFNBQ3BCOS9DLE9BQU8sUUFDUEksS0FBS29wRCxFQUFXcGQsV0FDaEJuc0MsS0FBSyxLQUFNLFFBQ1hBLEtBQ0csSUFDQTJrQyxFQUFXMEIsYUFBYTFkLE1BQVEsRUFBSXloQyxFQUFTemhDLE1BQVEsR0FFeEQzb0IsS0FBSyxNQUFPb3FELEVBQVMxZCxPQUFTLEVBL0czQixJQWdISDFzQyxLQUFLLFNBQVVvcUQsRUFBUzFkLFFBQ3hCMXNDLEtBQUssUUFBUyxzQkFDbkIyK0MsRUFBb0IsS0FBSXB5QixFQUd4QnExQixHQUFrQmpELEVBQWM3N0MsSUFBSyxFQUFHc25ELEVBQVMxZCxPQXJIekMsR0FzSFJrVixHQUNJakQsRUFBYzRDLFVBQ2QsRUFDQTZJLEVBQVMxZCxPQXpITCxHQTZIUm1WLEdBQ0lsRCxFQUFja0IsU0FDZCxFQUNBdUssRUFBUzFkLE9BaElMLEtBbWNoQm9WLENBQVluRCxFQUFlaGEsRUFBWTRrQixHQW5NM0MsU0FDSTVLLEVBQ0FoYSxFQUNBNGtCLEVBQ0Eza0IsR0FLQSxJQUFLRCxJQUFlNGtCLEVBQVksT0FFaEMsSUFBSTlyRCxFQUFRa2hELEVBQWNsaEQsTUFHdEJULEVBQVF1c0QsRUFBV3ZzRCxNQUNuQnF2QyxFQUFha2QsRUFBV2xkLFdBQ3hCN3NDLEVBQU8sR0FDUDZxRCxFQUFZLEVBQ2hCLElBQUssSUFBSWhvQixFQUFNLEVBQUdBLEVBQU1ybEMsRUFBTXpELE9BQVE4b0MsSUFDbEM3aUMsRUFBSzhDLEtBQUssQ0FDTi9ILE1BQU84dkQsRUFDUDVxQyxJQUFLemlCLEVBQU1xbEMsR0FDWGhwQixNQUFPZ3pCLEVBQVdoSyxLQUV0QmdvQixFQUFZcnRELEVBQU1xbEMsR0FHUyxlQUEzQmtuQixFQUFXdmQsWUFDQzJTLEVBQWNrQixTQUNyQnRnRCxVQUFVLGFBQ1ZDLEtBQUtBLEdBQ0xNLFFBQ0FDLE9BQU8sUUFDUEMsS0FBSyxLQUFLLFNBQVV2RyxFQUFRSSxHQUN6QixPQUFPSyxLQUFLVSxNQUFNNkMsRUFBTWhFLEVBQUVjLFdBRTdCeUYsS0FBSyxLQUFLLFNBQVV2RyxHQUNqQixPQUFPLEtBRVZ1RyxLQUFLLFNBQVMsU0FBVXZHLEVBQVFJLEdBQzdCLE9BQU9LLEtBQUs2QyxLQUFLVSxFQUFNaEUsRUFBRWdtQixJQUFNaG1CLEVBQUVjLFdBRXBDeUYsS0FBSyxTQUFVMmtDLEVBQVcwQixhQUFhcUcsUUFDdkM3bEMsTUFBTSxRQUFRLFNBQVVwTixHQUNyQixPQUFPQSxFQUFFNGYsU0FFaUIsYUFBM0Jrd0MsRUFBV3ZkLGFBQ04yUyxFQUFja0IsU0FDckJ0Z0QsVUFBVSxhQUNWQyxLQUFLQSxHQUNMTSxRQUNBQyxPQUFPLFFBQ1BDLEtBQUssS0FBSyxTQUFVdkcsRUFBUUksR0FDekIsT0FBTyxLQUVWbUcsS0FBSyxLQUFLLFNBQVV2RyxHQUNqQixPQUFPUyxLQUFLVSxNQUFNNkMsRUFBTWhFLEVBQUVnbUIsU0FFN0J6ZixLQUFLLFFBQVMya0MsRUFBVzBCLGFBQWExZCxPQUN0QzNvQixLQUFLLFVBQVUsU0FBVXZHLEdBQ3RCLE9BQ0lrckMsRUFBVzBCLGFBQWFxRyxPQUN4Qnh5QyxLQUFLVSxNQUFNNkMsRUFBTWhFLEVBQUVnbUIsSUFBTWhtQixFQUFFYyxXQUdsQ3NNLE1BQU0sUUFBUSxTQUFVcE4sR0FDckIsT0FBT0EsRUFBRTRmLFNBbUlyQml4QyxDQUFnQjNMLEVBQWVoYSxFQUFZNGtCLEdBRTNDLElBQUlnQixFQS9IUixTQUNJNUwsRUFDQWhhLEVBQ0E0a0IsRUFDQTNrQixHQUlBLElBQUkySSxFQUFlLEdBRW5CLElBQUs1SSxJQUFlNGtCLEVBQVksT0FFaEMsSUFBSWlCLEVBQWlCdkwsR0FBa0JzSyxFQUFXbnhELE1BQU91c0MsR0FFekQsR0FBOEIsaUJBQW5CNmxCLEVBQ1AsT0FBT0EsRUFFWCxJQUFJQyxFQUFjRCxFQUNsQixHQUFJN2dDLE9BQU90UCxNQUFNb3dDLEdBRWIsT0FEQWxkLEVBQWUsd0JBQTBCaWQsRUFDbENqZCxFQUVYLElBQUluQixFQUFhbWQsRUFBV25kLFdBRXhCM3VDLEVBQVFraEQsRUFBY2xoRCxNQUUxQixHQUErQixlQUEzQjhyRCxFQUFXdmQsWUFBOEIsQ0FDekMsSUFBSTBlLEVBQVcvbEIsRUFBVzBCLGFBQWFxRyxPQUFTLEVBQ3RDaVMsRUFBY2tCLFNBQ25COS9DLE9BQU8sUUFDUEMsS0FBSyxJQUFLdkMsRUFBTSxJQUNoQnVDLEtBQUssSUFBSzBxRCxHQUNWMXFELEtBQUssUUFBUzlGLEtBQUtVLE1BQU02QyxFQUFNZ3RELEtBQy9CenFELEtBQUssU0FBVTBxRCxHQUNmN2pELE1BQU0sT0FBUXVsQyxRQUNoQixHQUErQixhQUEzQm1kLEVBQVd2ZCxZQUE0QixDQUM5QyxJQUFJMGUsRUFBVy9sQixFQUFXMEIsYUFBYTFkLE1BQVEsRUFDckNnMkIsRUFBY2tCLFNBQ25COS9DLE9BQU8sUUFDUEMsS0FBSyxJQUFLMHFELEdBQ1YxcUQsS0FBSyxJQUFLOUYsS0FBS1UsTUFBTTZDLEVBQU1ndEQsS0FDM0J6cUQsS0FBSyxRQUFTMHFELEdBQ2QxcUQsS0FDRyxTQUNBMmtDLEVBQVcwQixhQUFhcUcsT0FBU3h5QyxLQUFLVSxNQUFNNkMsRUFBTWd0RCxLQUVyRDVqRCxNQUFNLE9BQVF1bEMsSUFpRkp1ZSxDQUNmaE0sRUFDQWhhLEVBQ0E0a0IsR0FHSixHQUE0QixpQkFBakJnQixFQUNQLE9BQU9BLEdBbkZmLFNBQ0k1TCxFQUNBaGEsRUFDQTRrQixFQUNBM2tCLEdBS0EsSUFBS0QsSUFBZTRrQixFQUFZLE9BR2hDLElBRGlCQSxFQUFXamQsV0FDWCxPQUVqQixJQUFJQyxFQUFjZ2QsRUFBV2hkLFlBQ3pCQyxFQUFjK2MsRUFBVy9jLFlBRXpCL3VDLEVBQVFraEQsRUFBY2xoRCxNQUUxQixHQUErQixlQUEzQjhyRCxFQUFXdmQsWUFBOEIsQ0FDekMsSUFBSTRlLEVBQWlELEVBQWpDam1CLEVBQVcwQixhQUFhcUcsT0FBYyxFQUM3Q2lTLEVBQWNrQixTQUN0QjkvQyxPQUFPLFFBQ1BDLEtBQUssSUFBS3ZDLEVBQU04dUMsR0FBZSxLQUMvQnZzQyxLQUFLLElBQUs0cUQsRUFBZSxHQUN6QjVxRCxLQUFLLFFBQVMsR0FDZEEsS0FBSyxTQUFVNHFELEdBQ2YvakQsTUFBTSxPQUFRMmxDLFFBQ2hCLEdBQStCLGFBQTNCK2MsRUFBV3ZkLFlBQTRCLENBQzlDLElBQUk0ZSxFQUFnRCxFQUFoQ2ptQixFQUFXMEIsYUFBYTFkLE1BQWEsRUFDNUNnMkIsRUFBY2tCLFNBQ3RCOS9DLE9BQU8sUUFDUEMsS0FBSyxJQUFLNHFELEVBQWUsR0FDekI1cUQsS0FBSyxJQUFLdkMsRUFBTTh1QyxHQUFlLEtBQy9CdnNDLEtBQUssUUFBUzRxRCxHQUNkNXFELEtBQUssU0FBVSxHQUNmNkcsTUFBTSxPQUFRMmxDLElBa0R2QnFlLENBQVdsTSxFQUFlaGEsRUFBWTRrQixHQXZmMUMsU0FDSWxHLEVBQ0ExRSxFQUNBaGEsR0FFQSxJQUFJK1osRUFBU2pOLEdBQVU0UixHQUNuQnZnRCxFQUFNNjdDLEVBQWM3N0MsSUFDcEJ3Z0QsRUFBVzNpQixXQUFXNzlCLEVBQUk5QyxLQUFLLFVBQy9CdWpELEVBQVk1aUIsV0FBVzc5QixFQUFJOUMsS0FBSyxXQUNwQzhDLEVBQUk5QyxLQUFLLFFBQVMsTUFDYkEsS0FBSyxTQUFVLE1BQ2ZBLEtBQUssVUFBVyxPQUFPc2pELEtBQVlDLEtBQ25DdmpELEtBQUssc0JBQXVCLGlCQUU3QjJrQyxFQUFXK0IsY0FDWGdZLEVBQU83M0MsTUFBTSxRQUFTLFNBRXRCNjNDLEVBQU83M0MsTUFDSCxTQUNDeThDLEVBQVczZSxFQUFXOEIsWUFBWW5zQixXQUFhLE1BRXBEb2tDLEVBQU83M0MsTUFDSCxVQUNDMDhDLEVBQVk1ZSxFQUFXOEIsWUFBWW5zQixXQUFhLE9Ba2V6RGtwQyxDQUFjOUUsRUFBUUMsRUFBZWhhLEdDclN6QyxTQUFTbW1CLEdBQ0xuTSxFQUNBaGEsRUFDQW9tQixHQUlBLElBQUtwbUIsSUFBZW9tQixFQUFXLE9BRS9CLElBQUkxbUIsRUFBV00sRUFBV04sU0FDdEIybUIsRUN4U08sU0FBUzN2RCxFQUFRQyxHQUM5QixJQUFJRyxFQUNBZixFQUNKLFFBQWdCYSxJQUFaRCxFQUNGLElBQUssTUFBTWxELEtBQVNpRCxFQUNMLE1BQVRqRCxTQUNVbUQsSUFBUkUsRUFDRXJELEdBQVNBLElBQU9xRCxFQUFNZixFQUFNdEMsSUFFNUJxRCxFQUFNckQsSUFBT3FELEVBQU1yRCxHQUNuQnNDLEVBQU10QyxJQUFPc0MsRUFBTXRDLFNBSXhCLENBQ0wsSUFBSW9ELEdBQVMsRUFDYixJQUFLLElBQUlwRCxLQUFTaUQsRUFDaUMsT0FBNUNqRCxFQUFRa0QsRUFBUWxELElBQVNvRCxFQUFPSCxXQUN2QkUsSUFBUkUsRUFDRXJELEdBQVNBLElBQU9xRCxFQUFNZixFQUFNdEMsSUFFNUJxRCxFQUFNckQsSUFBT3FELEVBQU1yRCxHQUNuQnNDLEVBQU10QyxJQUFPc0MsRUFBTXRDLEtBSy9CLE1BQU8sQ0FBQ3FELEVBQUtmLEdENlFHdXdELENBQVU1bUIsRUFBUy9CLFlBQzdCNG9CLEU1QnJPTyxXQUNiLE9BQU81L0IsR0FBVTF5QixNQUFNOCtCLEdBQVNsRyxHQUFXQyxHQUFrQm9ELEdBQVVzMkIsR0FBV0MsR0FBVXgyQixHQUFTeTJCLEdBQVVDLEdBQVlDLEdBQVlqNUIsSUFBWXp6QixPQUFPLENBQUMsSUFBSW1lLEtBQUssSUFBTSxFQUFHLEdBQUksSUFBSUEsS0FBSyxJQUFNLEVBQUcsS0FBTWxnQixXNEJvTzFMMHVELEdBRVIzc0QsT0FBT21zRCxHQUNQaHVELE1BQU0sQ0FBQyxFQUFHMm5DLEVBQVcwQixhQUFhMWQsUUFDdkNnMkIsRUFBc0IsT0FBSXVNLEVBRTFCLElBQUlPLEVBQXlCQyxHQUN6QlgsRUFBVWpqQixvQkFHVDNwQyxFQUFZeXpCLEdBdFJyQixTQUNJd1MsRUFDQTNuQixHQU9BLElBQUl0ZSxFQUEwQixHQUMxQnl6QixFQUFlLEtBR25CLEdBQUluVixFQUFVLENBQ1YsSUFBSWt2QyxFQUFZdm5CLEVBQU0sR0FDbEJ3bkIsRUFBV3huQixFQUFNQSxFQUFNN3FDLE9BQVMsR0FDcEM0RSxFQUFhMHRELEdBQVc3dUQsTUFDcEIydUQsRUFBVUcsU0FDVkYsRUFBU0UsU0FDVHJ2QyxFQUFTc3ZDLGNBRVYsQ0FDSCxJQUFJdHpCLEVBQU8yTCxFQUFNN3FDLE9BR2JxNEIsRUFGQTZHLEdBQVEsR0FFT296QixHQUNScHpCLEdBQVEsR0FFQW96QixHQUFXL25DLE1BQU0sR0FDekIyVSxHQUFRLElBRUF1ekIsR0FDUnZ6QixHQUFRLElBRUF3ekIsR0FDUnh6QixHQUFRLElBRUF3ekIsR0FBYW5vQyxNQUFNLEdBRW5Cb29DLEdBSXZCLE1BQU8sQ0FBQy90RCxFQUFZeXpCLEdBMk9hdTZCLENBQzdCOW5CLEVBQVMvQixXQUNUbXBCLEdBRUFydEQsRUE1T1IsU0FBNkJnbUMsRUFBaUJnb0IsR0FDMUMsR0FBSUEsRUFBbUIsQ0FDbkIsU0FBU0MsRUFBa0J2Z0MsR0FDdkIsT0FBT3l5QixHQUFpQi8vQyxPQUFPaW1DLE9BQU8zWSxHQUFPc2dDLEdBRWpELE9BQU9DLEVBQ0osQ0FDSCxJQUFJQyxFQUFrQixLQUNsQjd6QixFQUFPMkwsRUFBTTdxQyxPQXFCakIsT0FqQkkreUQsRUFBa0JDLEdBRmxCOXpCLEdBQVEsSUFHREEsR0FBUSxJQUdSQSxHQUFRLElBSmlCLFdBT3pCQSxHQUFRLEtBR1JBLEdBQVEsSUFEaUIsUUFLQSxNQUc3QjZ6QixHQStNTUUsQ0FDYm5vQixFQUFTL0IsV0FDVHlvQixFQUFVL2lCLHNCQUdWeWtCLEVBQVcxQyxFQUFjbUIsR0FFekIvc0QsR0FBb0MsSUFBdEJBLEVBQVc1RSxPQUN6Qmt6RCxFQUFTdHVELFdBQVdBLEdBQ2J5ekIsR0FDUDY2QixFQUFTN3RELE1BQU1nekIsR0FFZnh6QixHQUNBcXVELEVBQVNydUQsV0FBV0EsR0FHeEIsSUFBSXN1RCxFQUFRL04sRUFBY2tCLFNBQ3JCOS9DLE9BQU8sS0FDUEMsS0FBSyxLQUFNLFNBQ1hBLEtBQ0csWUFDQSxlQUFpQjJrQyxFQUFXMEIsYUFBYXFHLE9BQVMsS0FFckQ1ckMsS0FBSzJyRCxHQUNMenNELEtBQUssUUFBUyxnQkFDZitxRCxFQUFVdmpCLFlBQ1ZrbEIsRUFBTTdsRCxNQUFNLFNBQVVra0QsRUFBVXZqQixZQUVwQ21YLEVBQXFCLE1BQUkrTixFQUV6QixJQUFJQyxFQUFXck4sR0FBdUIsWUFFbENzTixFQUFrQkYsRUFDakJudEQsVUFBVSxRQUNWUyxLQUFLLEtBQU0sRUFBSTJzRCxFQUFTamdCLE9BQVN4eUMsS0FBS2lpQixJQUFLLEdBQUssSUFBT2ppQixLQUFLaWhCLEtBQzVEbmIsS0FBSyxJQUFLLEdBQ1ZBLEtBQUssWUFBYSxlQUNsQjZHLE1BQU0sY0FBZSxPQUNyQjdHLEtBQUssUUFBUyxzQkFDZitxRCxFQUFVdmpCLFlBQ1ZvbEIsRUFBZ0IvbEQsTUFBTSxPQUFRa2tELEVBQVV2akIsWUFHNUMsSUFDSXFsQixFQUFrQkYsRUFBU2hrQyxNQUFRenVCLEtBQUtraUIsSUFBSyxHQUFLLElBQU9saUIsS0FBS2loQixJQUM5RG9zQixFQUFhbWxCLEVBQ1ozc0QsT0FBTyxRQUNQSSxLQUFLNHFELEVBQVV4akIsWUFDZnZuQyxLQUNHLFlBQ0EsYUFDSTJrQyxFQUFXMEIsYUFBYTFkLE1BQVEsRUFDaEMsS0FUSyxFQVVTa2tDLEdBQ2QsS0FFUDdzRCxLQUFLLFFBQVMsc0JBQ2YrcUQsRUFBVXRqQixpQkFDVkYsRUFBVzFnQyxNQUFNLE9BQVFra0QsRUFBVXRqQixpQkFJdkNpbEIsRUFBTTFzRCxLQUFLLFNBbkJNLEVBbUJpQjZzRCxHQUdsQ2pMLEdBQWtCakQsRUFBYzc3QyxJQUFLLEVBdEJwQixFQXNCb0MrcEQsR0FDckRqTCxHQUFrQmpELEVBQWM0QyxVQUFXLEVBdkIxQixFQXVCMENzTCxHQUcvRCxTQUFTQyxHQUNMbk8sRUFDQWhhLEVBQ0FvbUIsRUFDQXpoQixFQUNBNGEsR0FPQSxJQUFLdmYsSUFBZW9tQixFQUFXLE9BRS9CLElBQUkxbUIsRUFBV00sRUFBV04sU0FDMUIsR0FBMEIsSUFBdEI2ZixFQUFXM3FELE9BQ1gsT0FHSixHQUFzQixTQUFsQit2QyxHQUE4QyxVQUFsQkEsRUFBMkIsT0FFM0QsSUFBSXlqQixFQUFpQixLQUNqQkMsRUFBaUIsS0FDakJDLEVBQWlCLEtBQ2pCQyxHQUFjLEVBQ2xCLElBQUssSUFBSXRQLEtBQWFzRyxFQUFZLENBQzlCLElBQUl0ZixFQUFVUCxFQUFTVSxlQUFlNlksR0FDdEMsSUFBSWhaLEVBQVFqQixXQUFXcEQsZUFXdkIsSUFUdUIsT0FBbkJ3c0IsR0FBMkJub0IsRUFBUTNCLFVBQVk4cEIsS0FDL0NBLEVBQWlCbm9CLEVBQVEzQixZQUVOLE9BQW5CK3BCLEdBQTJCcG9CLEVBQVExQixVQUFZOHBCLEtBQy9DQSxFQUFpQnBvQixFQUFRMUIsV0FJN0JncUIsRUFBY3RvQixFQUFRdEUsWUFBY2hGLEdBQVU2VixLQUN2QixPQUFuQjhiLEVBQ0FBLEVBQWlCQyxPQUVqQixHQUFJQSxJQUFnQkQsRUFDaEIsTUFBTyxnQ0FPbkIsSUFBSW5yQixFQUFPLEtBQ1csU0FBbEJ3SCxFQUNBeEgsRUFBT2lwQixFQUFVanBCLEtBQUssR0FDRyxVQUFsQndILElBQ1B4SCxFQUFPaXBCLEVBQVVqcEIsS0FBSyxJQUUxQixJQUFJcXJCLEdBQWUsRUFDQyxpQkFBVHJyQixFQUNQQSxFQUFPaXJCLEVBRVBJLEdBQWUsRUFHbkIsSUFBSXByQixFQUFPLEtBQ1csU0FBbEJ1SCxFQUNBdkgsRUFBT2dwQixFQUFVaHBCLEtBQUssR0FDRyxVQUFsQnVILElBQ1B2SCxFQUFPZ3BCLEVBQVVocEIsS0FBSyxJQUUxQixJQUFJcXJCLEdBQWUsRUFNbkIsR0FMb0IsaUJBQVRyckIsRUFDUEEsRUFBT2lyQixFQUVQSSxHQUFlLEVBRWZyckIsRUFBT0QsRUFBTSxDQUNiLElBQUl1ckIsRUFBT3ZyQixFQUNYQSxFQUFPQyxFQUNQQSxFQUFPc3JCLEVBQ1AsSUFBSUMsRUFBZUgsRUFDbkJBLEVBQWVDLEVBQ2ZBLEVBQWVFLEVBR25CLElBR0lDLEVBQVFDLEVBSFJDLEVBQVUxckIsRUFBT0QsRUFFakI0ckIsRUFBUzdELEtBR1QwRCxFQURBSixFQUNTcnJCLEVBRUFBLEVBQWlCLEdBQVYyckIsRUFHaEJELEVBREFKLEVBQ1NyckIsRUFFQUEsRUFBaUIsR0FBVjByQixFQUdoQjFDLEVBQVV0aUIsaUJBQW1CcE4sR0FBVXFPLE1BQ25DOGpCLEVBQVMsSUFDVEEsRUFBUyxHQUVURCxFQUFTLElBQ1RBLEVBQVMsSUFHakIsSUFBSTF1RCxFQUFTLENBQUMwdUQsRUFBUUMsSUFFQyxTQUFsQmxrQixHQUE0QnloQixFQUFVN2lCLGFBQWEsSUFDakMsVUFBbEJvQixHQUE2QnloQixFQUFVN2lCLGFBQWEsTUFFckRycEMsRUFBUyxDQUFDMnVELEVBQVFELElBRXRCRyxFQUFPN3VELE9BQU9BLEdBQVE3QixNQUFNLENBQUMybkMsRUFBVzBCLGFBQWFxRyxPQUFRLElBRXZDLFNBQWxCcEQsRUFDQXFWLEVBQTBCLFdBQUkrTyxFQUNMLFVBQWxCcGtCLElBQ1BxVixFQUEyQixZQUFJK08sR0FHbkMsSUFBSS9sQixFQUFhLEdBQ0ssU0FBbEIyQixFQUNBM0IsRUFBYW9qQixFQUFVcGpCLFdBQVcsR0FDVCxVQUFsQjJCLElBQ1AzQixFQUFhb2pCLEVBQVVwakIsV0FBVyxJQUd0QyxJQUFJQyxFQUFrQixHQUNBLFNBQWxCMEIsRUFDQTFCLEVBQWtCbWpCLEVBQVVuakIsZ0JBQWdCLEdBQ25CLFVBQWxCMEIsSUFDUDFCLEVBQWtCbWpCLEVBQVVuakIsZ0JBQWdCLElBR2hELElBQUkrbEIsRUFBaUIsR0FDQyxTQUFsQnJrQixFQUNBcWtCLEVBQWlCNUMsRUFBVXJqQixXQUFXLEdBQ2IsVUFBbEI0QixJQUNQcWtCLEVBQWlCNUMsRUFBVXJqQixXQUFXLElBRzFDLElBQUlrbUIsRUFBZ0IsR0FDaEI3bEIsRUFBb0IsS0FDcEJFLEVBQXVCLEtBQ0wsU0FBbEJxQixHQUNBc2tCLEVBQWdCN0MsRUFBVWxqQixVQUFVLEdBQ3BDRSxFQUFvQmdqQixFQUFVaGpCLGtCQUFrQixHQUNoREUsRUFBdUI4aUIsRUFBVTlpQixxQkFBcUIsSUFDN0IsVUFBbEJxQixJQUNQc2tCLEVBQWdCN0MsRUFBVWxqQixVQUFVLEdBQ3BDRSxFQUFvQmdqQixFQUFVaGpCLGtCQUFrQixHQUNoREUsRUFBdUI4aUIsRUFBVTlpQixxQkFBcUIsSUFHMUQsSUFVSTRsQixFQVZBajhCLEVBQWUsS0FnQm5CLEdBZklzN0IsRUFDQXQ3QixFQUFlODVCLEdBQTJCM2pCLElBRTFDblcsRUFBZStPLFdBQVdvSCxHQUNyQnBlLE9BQU9pWCxTQUFTaFAsS0FBaUJqSSxPQUFPdFAsTUFBTXVYLEtBQy9DQSxFQUFlLE9BS0QsU0FBbEIwWCxFQUNBdWtCLEVBQVc3RCxFQUFZMEQsR0FDRSxVQUFsQnBrQixJQUNQdWtCLEU5S2hZQzd2RCxFQWpLRyxFOEtpaUJvQjB2RCxJQUV4QkcsRUFBVSxDQUNWLElBQUl2QixFQTNZWixTQUNJaUIsRUFDQUMsRUFDQXBCLEVBQ0EwQixHQUFjLEdBSWQsR0FBS0EsRUFVRSxDQUVILEdBQUkxQixFQUFtQixDQUNuQixTQUFTQyxFQUFrQmowRCxHQVF2QixPQVBlb0csT0FBT2ltQyxPQUFPLFFBQVMsU0FBUyxHQUN2QnY4QixJQUFJOVAsRUFBTyxXQUNiMEcsT0FBT3N0RCxHQU9qQyxPQUFPQyxFQUNKLENBQ0gsU0FBU0EsRUFBa0JqMEQsR0FDdkIsTUFBTTIxRCxFQUFZN3pELEtBQUtpQixJQUFJcXlELEVBQVNELEdBQ3BDLElBRUl6dUQsRUFGV04sT0FBT2ltQyxPQUFPLFFBQVMsU0FBUyxHQUN2QnY4QixJQUFJOVAsRUFBTyxXQUNiMEcsT0FBTyxTQUs3QixHQUFJaXZELEVBQVksTUFBYyxDQUMxQixJQUNJQyxHQURXNTFELEVBQVFtMUQsR0FBVSxLQUNOLEdBQ3ZCbjFELEVBQVFtMUQsR0FBVW4xRCxFQUFRbzFELEdBQVVRLEVBQWEsS0FDakRsdkQsRUFBUyxJQUlqQixPQUFPQSxFQUdYLE9BQU91dEQsR0E1Q1gsR0FBSUQsRUFBbUIsQ0FDbkIsU0FBU2h1RCxFQUFXaEcsR0FFaEIsT0FEZXFnRCxXQUFRLElBQU0yVCxFQUFtQmgwRCxHQUlwRCxPQUFPZ0csRUFFWCxPQUFPdXJELEdBQWM0RCxFQUFRQyxFQUFRLElBMFhmUyxDQUNsQlYsRUFDQUMsRUFDQXZsQixFQUNBaWxCLEdBRUFaLEdBQ0F1QixFQUFTenZELFdBQVdrdUQsR0FFeEIsSUFBSW51RCxFQXJjWixTQUNJb3ZELEVBQ0FDLEVBQ0Evd0MsRUFDQXF4QyxHQUFjLEdBUWQsTUFBTUMsRUFBWTd6RCxLQUFLaUIsSUFBSXF5RCxFQUFTRCxHQUNwQyxJQUFJcHZELEVBQTRCLEdBRTNCMnZELEVBVUczdkQsRUFGQXNlLEdBQVlqZSxPQUFPaW1DLE9BQU9xTCxXQUFXcnpCLEdBRXhCeXhDLEVBQVNYLEVBQVFDLEVBRE50ekQsS0FBS2lCLElBQUlzaEIsRUFBUzB4QyxjQUl0Q0osRUFBWSxLQU1DRyxFQUhiWCxFQUFxQyxLQUE1QnJ6RCxLQUFLVSxNQUFNMnlELEVBQVMsTUFDN0JDLEVBQW9DLEtBQTNCdHpELEtBQUs2QyxLQUFLeXdELEVBQVMsTUFFVSxNQU16QlUsRUFIYlgsRUFBcUMsS0FBNUJyekQsS0FBS1UsTUFBTTJ5RCxFQUFTLE1BQzdCQyxFQUFvQyxLQUEzQnR6RCxLQUFLNkMsS0FBS3l3RCxFQUFTLE1BRVUsTUF2QjFDL3dDLEdBQWdDLGlCQUFiQSxJQUVuQnRlLEVBQWErdkQsRUFBU1gsRUFBUUMsRUFBUS93QyxJQTBCOUMsT0FBMEIsSUFBdEJ0ZSxFQUFXNUUsT0FBcUIsS0FDN0I0RSxFQXVaY2l3RCxDQUNiYixFQUNBQyxFQUNBNTdCLEVBQ0FzN0IsR0FFQS91RCxHQUNBMHZELEVBQVMxdkQsV0FBV0EsR0FJNUIsSUFBSWt3RCxFQUFRMVAsRUFBY2tCLFNBQ3JCOS9DLE9BQU8sS0FDUEMsS0FBSyxLQUFNLFNBQ1hjLEtBQUsrc0QsR0FDTDd0RCxLQUFLLFFBQVMsZ0JBQ0UsU0FBakJzcEMsR0FDQStrQixFQUFNcnVELEtBQ0YsWUFDQSxhQUFlMmtDLEVBQVcwQixhQUFhMWQsTUFBUSxRQUdqQyxTQUFsQjJnQixFQUNBcVYsRUFBeUIsVUFBSTBQLEVBQ0osVUFBbEIva0IsSUFDUHFWLEVBQTBCLFdBQUkwUCxHQUdsQyxJQUFJQyxFQUFZRCxFQUFNOXVELFVBQVUsUUFDNUJvb0MsR0FDQTJtQixFQUFVem5ELE1BQU0sU0FBVThnQyxHQUc5QixJQUFJNG1CLEVBQWFGLEVBQU05dUQsVUFBVSxRQUM3Qm9vQyxHQUNBNG1CLEVBQVcxbkQsTUFBTSxTQUFVOGdDLEdBRy9CLElBQUk2bUIsRUFBa0JILEVBQ2pCOXVELFVBQVUsUUFDVlMsS0FBSyxRQUFTLHNCQUNmMm5DLEdBQ0E2bUIsRUFBZ0IzbkQsTUFBTSxPQUFROGdDLEdBSWxDLElBQUk4bUIsRUFBb0IsRUFDeEIsSUFBSyxJQUFJM2tCLEtBQVMwa0IsRUFFZCxHQUFJMWtCLEVBQU10aEMsWUFBYSxDQUNuQixJQUFJa21ELEVBQVlwUCxHQUNaeFYsRUFBTXRoQyxZQUNOLHNCQUVBa21ELEVBQVUvbEMsTUFBUThsQyxJQUNsQkEsRUFBb0JDLEVBQVUvbEMsT0FNcEIsS0FBbEJpbEMsSUFDQUQsR0FBa0IsS0FBT0MsRUFBZ0IsS0FFN0MsSUFDSWUsRUFBaUJyUCxHQUF1QnFPLEdBQ3hDam1CLEVBQWEybUIsRUFDWnR1RCxPQUFPLFFBQ1BJLEtBQUt3dEQsR0FDTDN0RCxLQUFLLFlBQWEsZUFDbEJBLEtBQUssS0FBTyxFQUFJMmtDLEVBQVcwQixhQUFhcUcsT0FBVSxHQUNsRDFzQyxLQUFLLFFBQVMsc0JBQ0csU0FBbEJzcEMsRUFDQTVCLEVBQVcxbkMsS0FDUCxLQVZVLEVBV0t5dUQsRUFBb0JFLEVBQWVqaUIsT0FBUyxHQUcvRGhGLEVBQVcxbkMsS0FDUCxJQUNBLEVBQWV5dUQsRUFBb0JFLEVBQWVqaUIsUUFHdEQ5RSxHQUNBRixFQUFXN2dDLE1BQU0sT0FBUStnQyxHQUc3QixJQUFJZ25CLEVBQWFELEVBQWVqaUIsT0FBUytoQixFQXZCdkIsRUF3QmxCSixFQUFNcnVELEtBQUssUUFBUzR1RCxHQUdwQmhOLEdBQWtCakQsRUFBYzc3QyxJQUFLOHJELEVBQVksR0FDakRoTixHQUFrQmpELEVBQWM0QyxVQUFXcU4sRUFBWSxHQUdqQyxTQUFsQnRsQixJQUVBdVksR0FBZ0JsRCxFQUFja0IsU0FBVStPLEVBQVksR0FHaERqUSxFQUFjclgsT0FDZHVhLEdBQWdCbEQsRUFBY3JYLE1BQU9zbkIsRUFBWSxJQUs3RCxTQUFTQyxHQUNMbFEsRUFDQWhhLEVBQ0F6QyxFQUNBMEMsRUFDQTBFLEdBS0EsSUFBSzNFLElBQWV6QyxFQUFVLE9BRTlCLElBQUl3ckIsRUFBYyxLQU9sQixHQU5zQixTQUFsQnBrQixFQUNBb2tCLEVBQVMvTyxFQUFjbVEsV0FDRSxVQUFsQnhsQixJQUNQb2tCLEVBQVMvTyxFQUFjb1EsYUFHdkI3c0IsRUFBUzZHLFNBQVNuRSxFQUFRekQsU0FBVSxDQUNwQyxJQUFJNnRCLEVFenFCRyxTQUFTNTFELEVBQUdtRSxHQUN6QixJQUFJMHhELEVBQVVyaUQsSUFBUyxHQUNuQmpPLEVBQVUsS0FDVnV3RCxFQUFRQyxHQUNSOWhDLEVBQVMsS0FLYixTQUFTcHRCLEVBQUtULEdBQ1osSUFBSTNGLEVBRUFKLEVBRUF1a0MsRUFIQW5pQyxHQUFLMkQsRUFBTzdELEdBQU02RCxJQUFPakcsT0FFekI2MUQsR0FBVyxFQUtmLElBRmUsTUFBWHp3RCxJQUFpQjB1QixFQUFTNmhDLEVBQU1seEIsRUFBUzErQixPQUV4Q3pGLEVBQUksRUFBR0EsR0FBS2dDLElBQUtoQyxJQUNkQSxFQUFJZ0MsR0FBS296RCxFQUFReDFELEVBQUkrRixFQUFLM0YsR0FBSUEsRUFBRzJGLE1BQVc0dkQsS0FDNUNBLEdBQVlBLEdBQVUvaEMsRUFBT3FTLFlBQzVCclMsRUFBT3VTLFdBRVZ3dkIsR0FBVS9oQyxFQUFPd1MsT0FBT3ptQyxFQUFFSyxFQUFHSSxFQUFHMkYsSUFBUWpDLEVBQUU5RCxFQUFHSSxFQUFHMkYsSUFHdEQsR0FBSXcrQixFQUFRLE9BQU8zUSxFQUFTLEtBQU0yUSxFQUFTLElBQU0sS0F1Qm5ELE9BM0NBNWtDLEVBQWlCLG1CQUFOQSxFQUFtQkEsT0FBV21DLElBQU5uQyxFQUFtQmkyRCxHQUFTemlELEdBQVN4VCxHQUN4RW1FLEVBQWlCLG1CQUFOQSxFQUFtQkEsT0FBV2hDLElBQU5nQyxFQUFtQit4RCxHQUFTMWlELEdBQVNyUCxHQXNCeEUwQyxFQUFLN0csRUFBSSxTQUFTeUgsR0FDaEIsT0FBTy9ELFVBQVV2RCxRQUFVSCxFQUFpQixtQkFBTnlILEVBQW1CQSxFQUFJK0wsSUFBVS9MLEdBQUlaLEdBQVE3RyxHQUdyRjZHLEVBQUsxQyxFQUFJLFNBQVNzRCxHQUNoQixPQUFPL0QsVUFBVXZELFFBQVVnRSxFQUFpQixtQkFBTnNELEVBQW1CQSxFQUFJK0wsSUFBVS9MLEdBQUlaLEdBQVExQyxHQUdyRjBDLEVBQUtndkQsUUFBVSxTQUFTcHVELEdBQ3RCLE9BQU8vRCxVQUFVdkQsUUFBVTAxRCxFQUF1QixtQkFBTnB1RCxFQUFtQkEsRUFBSStMLEtBQVcvTCxHQUFJWixHQUFRZ3ZELEdBRzVGaHZELEVBQUtpdkQsTUFBUSxTQUFTcnVELEdBQ3BCLE9BQU8vRCxVQUFVdkQsUUFBVTIxRCxFQUFRcnVELEVBQWMsTUFBWGxDLElBQW9CMHVCLEVBQVM2aEMsRUFBTXZ3RCxJQUFXc0IsR0FBUWl2RCxHQUc5Rmp2RCxFQUFLdEIsUUFBVSxTQUFTa0MsR0FDdEIsT0FBTy9ELFVBQVV2RCxRQUFlLE1BQUxzSCxFQUFZbEMsRUFBVTB1QixFQUFTLEtBQU9BLEVBQVM2aEMsRUFBTXZ3RCxFQUFVa0MsR0FBSVosR0FBUXRCLEdBR2pHc0IsRUZ3bkJhc3ZELEdBRVROLFNBQVEsU0FBVTF5RCxHQUNmLE9BQW1CLE9BQVpBLEVBQUVuRSxTQUVaZ0IsR0FBRSxTQUFVbUQsR0FDVCxPQUFPb2lELEVBQWN1TSxPQUFPM3VELEVBQUV1dkIsU0FFakN2dUIsR0FBRSxTQUFVaEIsR0FDVCxPQUFPbXhELEVBQU9ueEQsRUFBRW5FLFVBR3BCNkgsRUFBTzArQyxFQUFja0IsU0FDcEI5L0MsT0FBTyxRQUNQQyxLQUFLLFFBQVMsZ0JBQ2Q2RyxNQUFNLGVBQWdCcTdCLEVBQVM0RyxVQUFVbEUsRUFBUXpELFVBRWxEZSxFQUFTbUgsUUFBUXpFLEVBQVF6RCxTQUN6QmxoQyxFQUFLK0UsTUFDRC9ILE1BQU1SLEtBQUttb0MsR0FBU2prQyxRQUFPLFNBQVVwRSxHQUNqQyxPQUFtQixPQUFaQSxFQUFFbkUsVUFFZjRILEtBQUssSUFBS2d2RCxHQUVaL3VELEVBQUsrRSxNQUFNNC9CLEdBQVM1a0MsS0FBSyxJQUFLZ3ZELEdBRzlCOXNCLEVBQVMyRyxVQUFVakUsRUFBUXpELFVBQzNCbGhDLEVBQUs0RyxNQUFNLFNBQVVxN0IsRUFBUzJHLFVBQVVqRSxFQUFRekQsV0FLNUQsU0FBU3F1QixHQUNMN1EsRUFDQWhhLEVBQ0F6QyxFQUNBMEMsRUFDQTBFLEdBS0EsSUFBSzNFLElBQWV6QyxFQUFVLE9BRTlCLElBQUl3ckIsRUFBYyxLQU9sQixHQU5zQixTQUFsQnBrQixFQUNBb2tCLEVBQVMvTyxFQUFjbVEsV0FDRSxVQUFsQnhsQixJQUNQb2tCLEVBQVMvTyxFQUFjb1EsYUFHdkI3c0IsRUFBUzhHLFVBQVVwRSxFQUFRekQsU0FBVSxDQUNyQyxJQUFJc3VCLEVBQU85USxFQUFja0IsU0FDcEJ0Z0QsVUFBVSxPQUNWQyxLQUNHdkMsTUFBTVIsS0FBS21vQyxHQUFTamtDLFFBQU8sU0FBVXBFLEdBQ2pDLE9BQW1CLE9BQVpBLEVBQUVuRSxVQUdoQjBILFFBQ0FDLE9BQU8sVUFDUEMsS0FBSyxJQUFLa2lDLEVBQVNrSCxVQUFVeEUsRUFBUXpELFVBQ3JDbmhDLEtBQUssTUFBTSxTQUFVekQsR0FDbEIsT0FBT29pRCxFQUFjdU0sT0FBTzN1RCxFQUFFdXZCLFNBRWpDOXJCLEtBQUssTUFBTSxTQUFVekQsR0FDbEIsT0FBT214RCxFQUFPbnhELEVBQUVuRSxVQUVuQjRILEtBQUssUUFBUSxTQUFVekQsR0FDcEIsT0FBT2d3RCxHQUFjLFdBQWRBLENBQTBCaHdELEVBQUV1dkIsU0FFdEM5ckIsS0FBSyxTQUFTLFNBQVV6RCxHQUNyQixHQUFnQixPQUFaQSxFQUFFbkUsTUFDRixPQUFJdXhCLE9BQU8rbEMsVUFBVW56RCxFQUFFbkUsT0FDWm1FLEVBQUVuRSxNQUFNMndCLFFBQVEsR0FFcEJ4c0IsRUFBRW5FLE1BQU0yd0IsUUFBUSxNQUc5Qi9vQixLQUFLLFlBQWFzN0IsR0FBVXNKLEVBQVF0RSxZQUNwQ3RnQyxLQUFLLFFBQVMsZUFDZmtpQyxFQUFTK0csV0FBV3JFLEVBQVF6RCxXQUM1QnN1QixFQUFLNW9ELE1BQU0sT0FBUXE3QixFQUFTK0csV0FBV3JFLEVBQVF6RCxVQUczQ2UsRUFBU2dILGlCQUFpQnRFLEVBQVF6RCxVQUNsQ2UsRUFBU2lILGlCQUFpQnZFLEVBQVF6RCxTQUFXLElBRTdDc3VCLEVBQUs1b0QsTUFDRCxTQUNBcTdCLEVBQVNnSCxpQkFBaUJ0RSxFQUFRekQsVUFFdENzdUIsRUFBSzVvRCxNQUNELGVBQ0FxN0IsRUFBU2lILGlCQUFpQnZFLEVBQVF6RCxZQUsxQ2UsRUFBU2lHLGtCQU1yQixTQUNJd25CLEVBQ0FoUixFQUNBaGEsR0FFQSxJQUFJaXJCLEVBQVVqUixFQUFja0IsU0FBUzkvQyxPQUFPLE9BQU84RyxNQUFNLFVBQVcsR0FDaEVncEQsRUFBWUQsRUFBUTd2RCxPQUFPLFFBQVFDLEtBQUssSUFBSyxHQUFHQSxLQUFLLElBQUssR0FDMUQ4dkQsRUFBZUYsRUFBUTd2RCxPQUFPLFFBQzlCZ3dELEVBQW1CRCxFQUNsQi92RCxPQUFPLFNBQ1BDLEtBQUssUUFBUyx5QkFDZmd3RCxFQUFvQkYsRUFDbkIvdkQsT0FBTyxTQUNQQyxLQUFLLFFBQVMseUJBRWZzaUQsRUFBVyxFQUNYQyxFQUFXLEVBRWZvTixFQUNLbnRELEdBQUcsY0FBYyxTQUFVMkgsR0FDeEIsTUFBTy9RLEVBQUdtRSxHRzN5QlAsU0FBUzRNLEVBQU8zRixHQUc3QixHQUZBMkYsRUNIYSxTQUFTQSxHQUN0QixJQUFJOGxELEVBQ0osS0FBT0EsRUFBYzlsRCxFQUFNOGxELGFBQWE5bEQsRUFBUThsRCxFQUNoRCxPQUFPOWxELEVEQUM4bEQsQ0FBWTlsRCxRQUNQNU8sSUFBVGlKLElBQW9CQSxFQUFPMkYsRUFBTStsRCxlQUNqQzFyRCxFQUFNLENBQ1IsSUFBSTFCLEVBQU0wQixFQUFLMnJELGlCQUFtQjNyRCxFQUNsQyxHQUFJMUIsRUFBSXN0RCxlQUFnQixDQUN0QixJQUFJdndCLEVBQVEvOEIsRUFBSXN0RCxpQkFHaEIsT0FGQXZ3QixFQUFNem1DLEVBQUkrUSxFQUFNa21ELFFBQVN4d0IsRUFBTXRpQyxFQUFJNE0sRUFBTW1tRCxRQUVsQyxFQURQendCLEVBQVFBLEVBQU0wd0IsZ0JBQWdCL3JELEVBQUtnc0QsZUFBZUMsWUFDcENyM0QsRUFBR3ltQyxFQUFNdGlDLEdBRXpCLEdBQUlpSCxFQUFLa3NELHNCQUF1QixDQUM5QixJQUFJMW9DLEVBQU94akIsRUFBS2tzRCx3QkFDaEIsTUFBTyxDQUFDdm1ELEVBQU1rbUQsUUFBVXJvQyxFQUFLN3VCLEtBQU9xTCxFQUFLbXNELFdBQVl4bUQsRUFBTW1tRCxRQUFVdG9DLEVBQUsya0IsSUFBTW5vQyxFQUFLb3NELFlBR3pGLE1BQU8sQ0FBQ3ptRCxFQUFNMG1ELE1BQU8xbUQsRUFBTTJtRCxPSDJ4QkZDLENBQVc1bUQsR0FDMUIsSUFBSTZtRCxFQUFpQixFQUNqQkMsRUFBa0IsRUFFbEJDLEVBQWdCLFNBQVd6ZixHQUFVM3pDLE1BQU1rQyxLQUFLLFFBRWhEbXhELEVBQWdCN1IsR0FDaEI0UixFQUNBLHlCQUVKbkIsRUFBaUI1dkQsS0FBSyt3RCxHQUNsQkMsRUFBY3hvQyxNQUFRcW9DLElBQ3RCQSxFQUFpQkcsRUFBY3hvQyxPQUVuQ3NvQyxHQUFtQkUsRUFBY3prQixPQUNqQ3FqQixFQUFpQi92RCxLQUFLLElBQUtzaUQsR0FBVXRpRCxLQUFLLElBQUtpeEQsR0FHL0MsSUFBSUcsRUFBaUIsVUFDakI5d0IsRUFBWW1SLEdBQVUzekMsTUFBTWtDLEtBQUssYUFDakNzK0MsRUFBVzdNLEdBQVUzekMsTUFBTWtDLEtBQUssU0FFcEMsR0FBa0IsU0FBZHNnQyxFQUFzQixDQUl0Qjh3QixHQUhlNXlELE9BQU9pbUMsT0FBTyxRQUFTLFNBQVMsR0FDdkJ2OEIsSUFBSXk0QixXQUFXMmQsR0FBVyxXQUN6QngvQyxPQUFPLFNBRWhDa3hELEVBQWtCN3ZELEtBQUtpeEQsUUFFdkJBLEdBQWtCOVMsRUFDbEIwUixFQUFrQjd2RCxLQUFLaXhELEdBRTNCLElBQUlDLEVBQWlCL1IsR0FDakI4UixFQUNBLHlCQUVBQyxFQUFlMW9DLE1BQVFxb0MsSUFDdkJBLEVBQWlCSyxFQUFlMW9DLE9BRXBDc29DLEdBQW1CMU8sRUFBVzhPLEVBQWUza0IsT0FDN0NzakIsRUFBa0Jod0QsS0FBSyxJQUFLc2lELEdBQVV0aUQsS0FBSyxJQUFLaXhELEdBRWhERCxHQUFrQixFQUFJMU8sRUFDdEIyTyxHQUFtQixFQUFJMU8sRUFDdkJ1TixFQUNLOXZELEtBQUssUUFBU2d4RCxHQUNkaHhELEtBQUssU0FBVWl4RCxHQUVwQnBCLEVBQ0s3dkQsS0FBSyxRQUFTZ3hELEdBQ2RoeEQsS0FBSyxTQUFVaXhELEdBQ2ZqeEQsS0FBSyxRQUFTLG1CQUVuQixJQUFJc3hELEVBQWNsNEQsRUFDZG00RCxFQUFjaDBELEVBQ2RpMEQsRUFBaUIsR0FDakJDLEVBQWlCLEdBTWpCSCxFQUpBbDRELEVBQUlvNEQsRUFBaUJSLEVBQ3JCcnNCLEVBQVcwQixhQUFhMWQsTUFHVnZ2QixFQUFJNDNELEVBQWlCUSxFQUdyQnA0RCxFQUFJbzRELEVBSWxCRCxFQUZBaDBELEVBQUlrMEQsRUFBaUJSLEVBQWtCLEVBRXpCMXpELEVBQUlrMEQsRUFHSmwwRCxFQUFJazBELEVBQWlCUixFQUV2Q3JCLEVBQVE1dkQsS0FBSyxJQUFLc3hELEdBQWF0eEQsS0FBSyxJQUFLdXhELEdBQ3pDM0IsRUFBUXR2RCxhQUFhMmUsU0FBUyxLQUFLcFksTUFBTSxVQUFXLE1BRXZEckUsR0FBRyxjQUFjLFdBQ2RvdEQsRUFBUXR2RCxhQUFhMmUsU0FBUyxLQUFLcFksTUFBTSxVQUFXLE1BdkdwRDZxRCxDQUFjakMsRUFBTTlRLEVBQWVoYSxJQTJHL0MsU0FBU2dtQixHQUNMaE0sRUFDQWhhLEVBQ0F4QyxFQUNBeUMsRUFDQTBFLEVBQ0Fxb0IsRUFDQUMsR0FNQSxJQUFLanRCLElBQWV4QyxFQUFTLE9BRTdCLElBQ0kwdkIsRUFBY2x0QixFQUFXMEIsYUFBYTFkLE1BQVFpYyxFQUFRYixZQUN0RDJtQixFQUFXbUgsRUFDWEEsRUFIUyxFQUdjLElBQ3ZCbkgsRUFBV21ILEVBSkYsR0FNYm5ILEdBQXNCa0gsRUFJdEIsSUFBSWxFLEVBQWMsS0FDSSxTQUFsQnBrQixFQUNBb2tCLEVBQVMvTyxFQUFjbVEsV0FDRSxVQUFsQnhsQixJQUNQb2tCLEVBQVMvTyxFQUFjb1EsYUFHM0IsSUFBSStDLEVBQU9uVCxFQUFja0IsU0FDcEJ0Z0QsVUFBVSxPQUNWQyxLQUNHdkMsTUFBTVIsS0FBS21vQyxHQUFTamtDLFFBQU8sU0FBVXBFLEdBQ2pDLE9BQW1CLE9BQVpBLEVBQUVuRSxVQUdoQjBILFFBQ0FDLE9BQU8sUUFDUEMsS0FBSyxLQUFLLFNBQVV6RCxFQUFjMUMsR0FDL0IsR0FBVSxJQUFOQSxFQUFTLENBQ1QsSUFBSWs0RCxFQUFpQkosRUFBYSxFQUFJQyxFQUFvQixFQUMxRCxHQUFJRyxFQUFpQixFQUNqQixPQUNJcFQsRUFBY3VNLE9BQU8zdUQsRUFBRXV2QixNQUN2QitsQyxFQUFjLEVBQ2RGLEVBQWFqSCxFQUNicUgsRUFBaUJySCxFQUk3QixPQUNJL0wsRUFBY3VNLE9BQU8zdUQsRUFBRXV2QixNQUN2QitsQyxFQUFjLEVBQ2RGLEVBQWFqSCxLQUdwQjFxRCxLQUFLLEtBQUssU0FBVXpELEdBQ2pCLE9BQU9teEQsRUFBT3h6RCxLQUFLUSxJQUFJNkIsRUFBRW5FLE1BQU8sT0FFbkM0SCxLQUFLLFNBQVMsU0FBVXpELEVBQWMxQyxHQUNuQyxHQUFVLElBQU5BLEVBQVMsQ0FDVCxJQUFJazRELEVBQWlCSixFQUFhLEVBQUlDLEVBQW9CLEVBQzFELE9BQUlHLEVBQWlCLEVBQ1YsRUFDQUEsRUFBaUIsRUFDakJySCxFQUFXcUgsRUFFZnJILEVBQ0osR0FBSTd3RCxJQUFNK3FDLEVBQVFiLFlBQWMsRUFBRyxDQUN0QyxJQUFJZ3VCLEVBQ0EsR0FBT0osRUFBYSxFQUFJQyxFQUFvQixHQUNoRCxPQUFJRyxFQUFpQixFQUNWLEVBQ0FBLEVBQWlCLEVBQ2pCckgsRUFBV3FILEVBRWZySCxFQUVYLE9BQU9BLEtBRVYxcUQsS0FBSyxVQUFVLFNBQVV6RCxHQUN0QixHQUFnQixPQUFaQSxFQUFFbkUsTUFDRixPQUFPOEIsS0FBS2lCLElBQUl1eUQsRUFBT254RCxFQUFFbkUsT0FBU3MxRCxFQUFPLE9BR2hEMXRELEtBQUssUUFBUyxlQUVmbWlDLEVBQVFzSCxTQUFTN0UsRUFBUXpELFVBQ3pCMndCLEVBQUtqckQsTUFBTSxPQUFRczdCLEVBQVFzSCxTQUFTN0UsRUFBUXpELFVBSXBELFNBQVNpaUIsR0FDTHpFLEVBQ0FoYSxFQUNBb21CLEdBTUEsSUFBSWpvRCxFQUFNNjdDLEVBQWM3N0MsSUFDUjY3QyxFQUFjNEMsVUFDOUIsSUFBSTFCLEVBQVdsQixFQUFja0IsU0FDekJ2WSxFQUFRcVgsRUFBY3JYLE1BQ3RCb2xCLEVBQVEvTixFQUFjK04sTUFDdEJzRixFQUFZclQsRUFBY3FULFVBQzFCQyxFQUFhdFQsRUFBY3NULFdBRzNCbFEsRUFBYyxFQUNkemEsSUFDQXlhLEVBQWNwaEIsV0FBVzJHLEVBQU10bkMsS0FBSyxZQUV4QyxJQUFJa3lELEVBQWN2eEIsV0FBVytyQixFQUFNMXNELEtBQUssV0FDcENteUQsRUFBaUIsRUFDakJILElBQ0FHLEVBQWlCeHhCLFdBQVdxeEIsRUFBVWh5RCxLQUFLLFdBRS9DLElBQUlveUQsRUFBa0IsRUFDbEJILElBQ0FHLEVBQWtCenhCLFdBQVdzeEIsRUFBV2p5RCxLQUFLLFdBR2pELElBQUlxa0MsRUFBV00sRUFBV04sU0FDdEJndUIsRUFBY2h1QixFQUFTVyxpQkFJdkJoOUIsRUFBUXE4QixFQUFTYyxXQUNqQjZjLEVBQVloNkMsRUFBTXBHLEtBQUksU0FBVS9GLEdBQ2hDLE9BQU95akQsR0FBdUJ6akQsRUFBRywyQkFFakNvbUQsRUFBYSxFQUNiQyxFQUFlLEVBQ25CLElBQUssSUFBSTdmLEVBQU0sRUFBR0EsRUFBTXI2QixFQUFNek8sT0FBUThvQyxJQUM5Qmd3QixFQUFZbnRCLFNBQVM3QyxJQUNyQjJmLEVBQVUzZixHQUFLMVosTUFBUXU1QixJQUN2QkEsRUFBZUYsRUFBVTNmLEdBQUsxWixNQUM5QnM1QixFQUFhNWYsR0FHckIsSUFDSThmLEVBQWlCRCxFQURQbDZDLEVBQU1pNkMsR0FDd0Ixb0QsT0FDeEM2b0QsRUFBYUosRUFBVUMsR0FBWXZWLE9BQ25DMlYsRUFBV3I2QyxFQUFNek8sT0FBUzg0RCxFQUFZOTRELE9BRXRDK29ELEVBQVcsRUFBSUgsRUFDZkksRUFBV0gsRUFDWEksRUFBYyxFQUFJTCxFQUdsQk0sRUFBYyxFQUNkQyxFQUFlLEVBQ2lCLGFBQWhDcUksRUFBVXppQixtQkFDVm1hLEVBQXlCLEVBQVhILEVBQWVFLEVBQWNOLEVBQzNDUSxHQUFnQkwsRUFBVyxHQUFLRSxHQUNPLGVBQWhDd0ksRUFBVXppQixvQkFDakJtYSxHQUNLLEVBQUlILEVBQVdFLEdBQWVILEVBQy9CQyxFQUNBNUgsRUFBT3NILEdBQVcsU0FBVWhtRCxFQUFHbkMsR0FDM0IsT0FBSXc0RCxFQUFZbnRCLFNBQVNyckMsR0FBVyxFQUM3Qm1DLEVBQUUyc0IsU0FFakIrNUIsRUFBZUgsRUFBV0gsR0FTOUIsSUFBSU8sRUFBVSxFQUNWQyxFQUFVLEVBQ2QsR0FBaUMsUUFBN0JtSSxFQUFVMWlCLGVBRVZzYSxFQUNJd1AsRUFDQXh0QixFQUFXMEIsYUFBYTFkLE1BQVEsRUFDaEM4NUIsRUFBYyxFQUNsQkcsRUFBVWIsRUFFVkgsR0FBa0I5K0MsRUFBSyxFQUFHNC9DLEVBQWVILEdBRXpDVixHQUFnQmhDLEVBQVUsRUFBRzZDLEVBQWVILFFBQ3pDLEdBQWlDLFdBQTdCd0ksRUFBVTFpQixlQUVqQnNhLEVBQ0l3UCxFQUNBeHRCLEVBQVcwQixhQUFhMWQsTUFBUSxFQUNoQzg1QixFQUFjLEVBQ2xCRyxFQUNJYixFQUNBcGQsRUFBVzBCLGFBQWFxRyxPQUN4QndsQixFQUNBM1AsRUFFSlgsR0FBa0I5K0MsRUFBSyxFQUFHNC9DLEVBQWVILFFBQ3RDLEdBQWlDLFNBQTdCd0ksRUFBVTFpQixlQUNqQnNhLEVBQVUsRUFDVkMsRUFDSWIsRUFDQXBkLEVBQVcwQixhQUFhcUcsT0FBUyxFQUNqQ2dXLEVBQWUsRUFFbkJkLEdBQWtCOStDLEVBQUsyL0MsRUFBY0gsRUFBVSxHQUUvQ1QsR0FBZ0JoQyxFQUFVNEMsRUFBY0gsRUFBVSxPQUMvQyxDQUFBLEdBQWlDLFVBQTdCeUksRUFBVTFpQixlQWFqQixPQVpBc2EsRUFDSWhlLEVBQVcwQixhQUFhMWQsTUFDeEJ3cEMsRUFDQUMsRUFDQTlQLEVBQ0pNLEVBQ0liLEVBQ0FwZCxFQUFXMEIsYUFBYXFHLE9BQVMsRUFDakNnVyxFQUFlLEVBRW5CZCxHQUFrQjkrQyxFQUFLMi9DLEVBQWNILEVBQVUsR0FNbkQsSUFBSU8sRUFBU2xFLEVBQWM0QyxVQUN0QnhoRCxPQUFPLEtBQ1BDLEtBQUssS0FBTSxVQUNYQSxLQUFLLFlBQWEsYUFBZTJpRCxFQUFVLElBQU1DLEVBQVUsS0FHNURFLEVBQVdELEVBQ1Y5aUQsT0FBTyxRQUNQQyxLQUFLLFFBQVMsa0JBQ2RBLEtBQUssUUFBU3lpRCxHQUNkemlELEtBQUssU0FBVTBpRCxHQUNoQnFJLEVBQVV4aUIsZUFDVnVhLEVBQVNqOEMsTUFBTSxPQUFRa2tELEVBQVV4aUIsZUFFakN3aUIsRUFBVXZpQixtQkFDVnNhLEVBQVNqOEMsTUFBTSxTQUFVa2tELEVBQVV2aUIsbUJBR3ZDLElBQUl1YSxFQUFlVCxFQUNmVSxFQUFlWixFQUNmYSxFQUFjRixFQUFlVCxFQUFXRSxFQUN4Q1UsRUFBY0YsRUFFbEIsR0FBb0MsYUFBaEMrSCxFQUFVemlCLGtCQUFrQyxDQUN4Q3lpQixFQUFVdGlCLGlCQUFtQnBOLEdBQVVrTyxNQUV2Q3NaLEVBQ0t0akQsVUFBVSxXQUNWQyxLQUFLd0ksR0FDTGxJLFFBQ0FDLE9BQU8sUUFDUEMsS0FBSyxLQUFNK2lELEdBQ1gvaUQsS0FBSyxLQUFNK2lELEVBQWVQLEdBQzFCeGlELEtBQUssTUFBTSxTQUFVNkIsRUFBY2hJLEdBQ2hDLElBQUl5NEQsRUFBbUJELEVBQVkxeEQsUUFBUThkLEdBQ2hDQSxFQUFLNWtCLElBQ2JOLE9BRUgsT0FBT3lwRCxHQURQbnBELEdBQVF5NEQsR0FDa0IvUCxLQUU3QnZpRCxLQUFLLE1BQU0sU0FBVTZCLEVBQWNoSSxHQUNoQyxJQUFJeTRELEVBQW1CRCxFQUFZMXhELFFBQVE4ZCxHQUNoQ0EsRUFBSzVrQixJQUNiTixPQUVILE9BQU95cEQsR0FEUG5wRCxHQUFReTRELEdBQ2tCL1AsS0FFN0IxN0MsTUFBTSxVQUFVLFNBQVVoRixFQUFjaEksR0FDckMsSUFBSXc0RCxFQUFZbnRCLFNBQVNyckMsR0FDekIsT0FBUWt4RCxFQUF1QmxpQixVQUFVaHZDLE1BSWpEZ3BELEVBQ0t0akQsVUFBVSxXQUNWQyxLQUFLd0ksR0FDTGxJLFFBQ0FDLE9BQU8sVUFDUEMsS0FBSyxLQUFNK2lELEVBQWVQLEVBQWMsR0FDeEN4aUQsS0FBSyxNQUFNLFNBQVU2QixFQUFjaEksR0FDaEMsSUFBSXk0RCxFQUFtQkQsRUFBWTF4RCxRQUFROGQsR0FDaENBLEVBQUs1a0IsSUFDYk4sT0FFSCxPQUFPeXBELEdBRFBucEQsR0FBUXk0RCxHQUNrQi9QLEtBRTdCdmlELEtBQUssS0FBSyxTQUFVNkIsRUFBY2hJLEdBQy9CLElBQUl3NEQsRUFBWW50QixTQUFTcnJDLEdBQ3pCLE9BQUtreEQsRUFBdUIvaEIsVUFBVW52QyxHQUMxQmt4RCxFQUF1QjNoQixVQUFVdnZDLEdBRXRDLEtBRVZnTixNQUFNLFFBQVEsU0FBVWhGLEVBQWNoSSxHQUNuQyxJQUFJdzRELEVBQVludEIsU0FBU3JyQyxHQUN6QixPQUFRa3hELEVBQXVCOWhCLFdBQVdwdkMsT0FFM0NreEQsRUFBVXRpQixpQkFBbUJwTixHQUFVcU8sS0FFOUNtWixFQUNLdGpELFVBQVUsV0FDVkMsS0FBS3dJLEdBQ0xsSSxRQUNBQyxPQUFPLFFBQ1BDLEtBQUssSUFBSytpRCxHQUNWL2lELEtBQUssS0FBSyxTQUFVNkIsRUFBY2hJLEdBQy9CLElBQUl5NEQsRUFBbUJELEVBQVkxeEQsUUFBUThkLEdBQ2hDQSxFQUFLNWtCLElBQ2JOLE9BRUgsT0FBT3lwRCxHQURQbnBELEdBQVF5NEQsR0FDa0IvUCxFQUFXSCxFQUFhLEtBRXJEcGlELEtBQUssUUFBU3dpRCxHQUNkeGlELEtBQUssU0FBVW9pRCxHQUNmdjdDLE1BQU0sUUFBUSxTQUFVaEYsRUFBY2hJLEdBQ25DLElBQUl3NEQsRUFBWW50QixTQUFTcnJDLEdBQ3pCLE9BQVFreEQsRUFBc0J0aEIsU0FBUzV2QyxNQUtuRCxJQUFJMDRELEVBQWExUCxFQUNadGpELFVBQVUsVUFDVkMsS0FBS3dJLEdBQ0xsSSxRQUNBQyxPQUFPLFFBQ1BDLEtBQUssSUFBS2lqRCxHQUNWampELEtBQUssS0FBSyxTQUFVNkIsRUFBY2hJLEdBQy9CLElBQUl5NEQsRUFBbUJELEVBQVkxeEQsUUFBUThkLEdBQ2hDQSxFQUFLNWtCLElBQ2JOLE9BRUgsT0FBTzJwRCxHQURQcnBELEdBQVF5NEQsR0FDaUIvUCxLQUU1QnBpRCxNQUFLLFNBQVUwQixFQUFjaEksR0FDMUIsT0FBSXc0RCxFQUFZbnRCLFNBQVNyckMsR0FBVyxHQUM3QmdJLEtBRVZnRixNQUFNLHFCQUFzQixVQUM1QjdHLEtBQUssUUFBUyx3QkFFZitxRCxFQUFVdGlCLGlCQUFtQnBOLEdBQVVrTyxLQUN2Q2dwQixFQUFXMXJELE1BQU0sUUFBUSxTQUFVaEYsRUFBY2hJLEdBQzdDLElBQUl3NEQsRUFBWW50QixTQUFTcnJDLEdBQ3pCLE9BQVFreEQsRUFBdUJsaUIsVUFBVWh2QyxNQUV0Q2t4RCxFQUFVdGlCLGlCQUFtQnBOLEdBQVVxTyxLQUM5QzZvQixFQUFXMXJELE1BQU0sUUFBUSxTQUFVaEYsRUFBY2hJLEdBQzdDLElBQUl3NEQsRUFBWW50QixTQUFTcnJDLEdBQ3pCLE9BQVFreEQsRUFBc0J0aEIsU0FBUzV2QyxXQUc1QyxHQUFvQyxlQUFoQ2t4RCxFQUFVemlCLGtCQUFvQyxDQUNqRHlpQixFQUFVdGlCLGlCQUFtQnBOLEdBQVVrTyxNQUV2Q3NaLEVBQ0t0akQsVUFBVSxXQUNWQyxLQUFLd0ksR0FDTGxJLFFBQ0FDLE9BQU8sUUFDUEMsS0FBSyxNQUFNLFNBQVU2QixFQUFjaEksR0FDaEMsSUFBSTI0RCxFQUFPbFEsRUFDWCxJQUFLLElBQUtqZ0IsRUFBS2gwQixLQUFTMnpDLEVBQVV5USxVQUM5QixJQUFJSixFQUFZbnRCLFNBQVM3QyxHQUF6QixDQUNBLEtBQUlBLEVBQU14b0MsR0FJTixNQUhBMjRELEdBQ0loUSxFQUFjRixFQUFXajBDLEVBQUtzYSxNQUFRMjVCLEVBS2xELE9BQU9rUSxLQUVWeHlELEtBQUssTUFBTSxTQUFVNkIsRUFBY2hJLEdBQ2hDLElBQUkyNEQsRUFBT2xRLEVBQVdFLEVBQ3RCLElBQUssSUFBS25nQixFQUFLaDBCLEtBQVMyekMsRUFBVXlRLFVBQzlCLElBQUlKLEVBQVludEIsU0FBUzdDLEdBQXpCLENBQ0EsS0FBSUEsRUFBTXhvQyxHQUlOLE1BSEEyNEQsR0FDSWxRLEVBQVdqMEMsRUFBS3NhLE1BQVEyNUIsRUFBV0UsRUFLL0MsT0FBT2dRLEtBRVZ4eUQsS0FBSyxLQUFNZ2pELEdBQ1hoakQsS0FBSyxLQUFNZ2pELEdBQ1huOEMsTUFBTSxVQUFVLFNBQVVoRixFQUFjaEksR0FDckMsSUFBSXc0RCxFQUFZbnRCLFNBQVNyckMsR0FDekIsT0FBUWt4RCxFQUF1QmxpQixVQUFVaHZDLE1BSWpEZ3BELEVBQ0t0akQsVUFBVSxXQUNWQyxLQUFLd0ksR0FDTGxJLFFBQ0FDLE9BQU8sVUFDUEMsS0FBSyxNQUFNLFNBQVU2QixFQUFjaEksR0FDaEMsSUFBSTI0RCxFQUFPbFEsRUFBV0UsRUFBYyxFQUNwQyxJQUFLLElBQUtuZ0IsRUFBS2gwQixLQUFTMnpDLEVBQVV5USxVQUM5QixJQUFJSixFQUFZbnRCLFNBQVM3QyxHQUF6QixDQUNBLEtBQUlBLEVBQU14b0MsR0FRTixNQVBBMjRELEdBQ0loUSxFQUFjLEVBQ2RGLEVBQ0FqMEMsRUFBS3NhLE1BQ0wyNUIsRUFDQUUsRUFBYyxFQUsxQixPQUFPZ1EsS0FFVnh5RCxLQUFLLEtBQU1nakQsR0FDWGhqRCxLQUFLLEtBQUssU0FBVTZCLEVBQWNoSSxHQUMvQixJQUFJdzRELEVBQVludEIsU0FBU3JyQyxHQUN6QixPQUFLa3hELEVBQXVCL2hCLFVBQVVudkMsR0FDMUJreEQsRUFBdUIzaEIsVUFBVXZ2QyxHQUV0QyxLQUVWZ04sTUFBTSxRQUFRLFNBQVVoRixFQUFjaEksR0FDbkMsSUFBSXc0RCxFQUFZbnRCLFNBQVNyckMsR0FDekIsT0FBUWt4RCxFQUF1QjloQixXQUFXcHZDLE9BRTNDa3hELEVBQVV0aUIsaUJBQW1CcE4sR0FBVXFPLEtBRTlDbVosRUFDS3RqRCxVQUFVLFdBQ1ZDLEtBQ0d3SSxFQUFNckgsUUFBTyxDQUFDOUUsRUFBR2hDLEtBQ0x3NEQsRUFBWW50QixTQUFTcnJDLE1BR3BDaUcsUUFDQUMsT0FBTyxRQUNQQyxLQUFLLEtBQUssU0FBVTZCLEVBQWNoSSxHQUMvQixJQUFJMjRELEVBQU9sUSxFQUNYLElBQUssSUFBS2pnQixFQUFLaDBCLEtBQVMyekMsRUFBVXlRLFVBQzlCLElBQUlKLEVBQVludEIsU0FBUzdDLEdBQXpCLENBQ0EsS0FBSUEsRUFBTXhvQyxHQUlOLE1BSEEyNEQsR0FDSWhRLEVBQWNGLEVBQVdqMEMsRUFBS3NhLE1BQVEyNUIsRUFLbEQsT0FBT2tRLEtBRVZ4eUQsS0FBSyxJQUFLZ2pELEVBQWVaLEVBQWEsR0FDdENwaUQsS0FBSyxRQUFTd2lELEdBQ2R4aUQsS0FBSyxTQUFVb2lELEdBQ2Z2N0MsTUFBTSxRQUFRLFNBQVVoRixFQUFjaEksR0FDbkMsSUFBSXc0RCxFQUFZbnRCLFNBQVNyckMsR0FDekIsT0FBUWt4RCxFQUFzQnRoQixTQUFTNXZDLE1BS25ELElBQUkwNEQsRUFBYTFQLEVBQ1p0akQsVUFBVSxVQUNWQyxLQUFLd0ksR0FDTGxJLFFBQ0FDLE9BQU8sUUFDUEMsS0FBSyxLQUFLLFNBQVU2QixFQUFjaEksR0FDL0IsSUFBSTI0RCxFQUFPbFEsRUFBV0UsRUFBY0YsRUFDcEMsSUFBSyxJQUFLamdCLEVBQUtoMEIsS0FBUzJ6QyxFQUFVeVEsVUFDOUIsSUFBSUosRUFBWW50QixTQUFTN0MsR0FBekIsQ0FDQSxLQUFJQSxFQUFNeG9DLEdBR04sTUFGQTI0RCxHQUFRbmtELEVBQUtzYSxNQUFRMjVCLEVBQVdFLEVBQWNGLEVBS3RELE9BQU9rUSxLQUVWeHlELEtBQUssSUFBS2tqRCxHQUNWL2lELE1BQUssU0FBVTBCLEVBQWNoSSxHQUMxQixPQUFJdzRELEVBQVludEIsU0FBU3JyQyxHQUFXLEdBQzdCZ0ksS0FFVmdGLE1BQU0scUJBQXNCLFVBQzVCN0csS0FBSyxRQUFTLHdCQUVmK3FELEVBQVV0aUIsaUJBQW1CcE4sR0FBVWtPLEtBQ3ZDZ3BCLEVBQVcxckQsTUFBTSxRQUFRLFNBQVVoRixFQUFjaEksR0FDN0MsSUFBSXc0RCxFQUFZbnRCLFNBQVNyckMsR0FDekIsT0FBUWt4RCxFQUF1QmxpQixVQUFVaHZDLE1BRXRDa3hELEVBQVV0aUIsaUJBQW1CcE4sR0FBVXFPLEtBQzlDNm9CLEVBQVcxckQsTUFBTSxRQUFRLFNBQVVoRixFQUFjaEksR0FDN0MsSUFBSXc0RCxFQUFZbnRCLFNBQVNyckMsR0FDekIsT0FBUWt4RCxFQUFzQnRoQixTQUFTNXZDLE9BTXZELFNBQVNpb0QsR0FDTG5ELEVBQ0FoYSxFQUNBb21CLEdBS0EsSUFBS3BtQixJQUFlb21CLEVBQVcsT0FFL0IsSUFBS0EsRUFBVXpqQixNQUFPLE9BQ3RCLElBQUlxYSxFQUFZckMsR0FBdUJ5TCxFQUFVempCLE1BQU8saUJBR3BEQSxFQUFRcVgsRUFBYzRDLFVBQ3JCeGhELE9BQU8sUUFDUEksS0FBSzRxRCxFQUFVempCLE9BQ2Z0bkMsS0FBSyxLQUFNLFNBQ1hBLEtBQ0csWUFDQSxhQUNJMmtDLEVBQVcwQixhQUFhMWQsTUFBUSxFQUNoQyxJQUNBZzVCLEVBQVVqVixPQUFTLEVBQ25CLEtBRVAxc0MsS0FBSyxTQUFVMmhELEVBQVVqVixRQUN6QjFzQyxLQUFLLFFBQVMsaUJBQ25CMitDLEVBQXFCLE1BQUlyWCxFQUd6QnNhLEdBQWtCakQsRUFBYzc3QyxJQUFLLEVBQUc2K0MsRUFBVWpWLFFBQ2xEa1YsR0FBa0JqRCxFQUFjNEMsVUFBVyxFQUFHSSxFQUFValYsUUFHeERtVixHQUFnQmxELEVBQWNrQixTQUFVLEVBQUc4QixFQUFValYsUUFLekQsU0FBUzhXLEdBQ0xILEVBQ0ExRSxFQUNBaGEsR0FFQSxJQUFJK1osRUFBU2pOLEdBQVU0UixHQUNuQnZnRCxFQUFNNjdDLEVBQWM3N0MsSUFDcEJ3Z0QsRUFBVzNpQixXQUFXNzlCLEVBQUk5QyxLQUFLLFVBQy9CdWpELEVBQVk1aUIsV0FBVzc5QixFQUFJOUMsS0FBSyxXQUNwQzhDLEVBQUk5QyxLQUFLLFFBQVMsTUFDYkEsS0FBSyxTQUFVLE1BQ2ZBLEtBQUssVUFBVyxPQUFPc2pELEtBQVlDLEtBQ25DdmpELEtBQUssc0JBQXVCLGlCQUU3QjJrQyxFQUFXK0IsY0FDWGdZLEVBQU83M0MsTUFBTSxRQUFTLFNBRXRCNjNDLEVBQU83M0MsTUFDSCxTQUNDeThDLEVBQVczZSxFQUFXOEIsWUFBWW5zQixXQUFhLE1BRXBEb2tDLEVBQU83M0MsTUFDSCxVQUNDMDhDLEVBQVk1ZSxFQUFXOEIsWUFBWW5zQixXQUFhLE9BSzdELFNBQVNrbkMsR0FDTDlDLEVBQ0EvWixHQUVBLElBQUlnYSxFQUErQixHQUUvQjc3QyxFQUFNdytDLEdBQ0U1QyxHQUNQMytDLE9BQU8sT0FDUEMsS0FBSyxLQUFNLE9BQ1hBLEtBQ0csUUFDQTJrQyxFQUFXMEIsYUFBYTFkLE1BQ3BCZ2MsRUFBVzRCLE9BQU9wdEMsS0FDbEJ3ckMsRUFBVzRCLE9BQU96c0MsT0FFekJrRyxLQUNHLFNBQ0Eya0MsRUFBVzBCLGFBQWFxRyxPQUNwQi9ILEVBQVc0QixPQUFPb0csSUFDbEJoSSxFQUFXNEIsT0FBT3FHLFFBRTlCK1IsRUFBbUIsSUFBSTc3QyxFQUd2QixJQUFJeStDLEVBQVl6K0MsRUFDWC9DLE9BQU8sS0FDUEMsS0FBSyxLQUFNLGFBQ1hBLEtBQ0csWUFDQSxhQUNJMmtDLEVBQVc0QixPQUFPcHRDLEtBQ2xCLElBQ0F3ckMsRUFBVzRCLE9BQU9vRyxJQUNsQixLQUVQM3NDLEtBQUssUUFBUzJrQyxFQUFXMEIsYUFBYTFkLE1BQVFnYyxFQUFXNEIsT0FBT3pzQyxPQUNoRWtHLEtBQ0csU0FDQTJrQyxFQUFXMEIsYUFBYXFHLE9BQVMvSCxFQUFXNEIsT0FBT3FHLFFBRTNEK1IsRUFBeUIsVUFBSTRDLEVBRzdCLElBQUkxQixFQUFXMEIsRUFDVnhoRCxPQUFPLEtBQ1BDLEtBQUssS0FBTSxZQUNYQSxLQUFLLFFBQVMya0MsRUFBVzBCLGFBQWExZCxPQUN0QzNvQixLQUFLLFNBQVUya0MsRUFBVzBCLGFBQWFxRyxRQUc1QyxPQUZBaVMsRUFBd0IsU0FBSWtCLEVBRXJCbEIsRUFHWCxTQUFTK1QsR0FDTGhVLEVBQ0EvWixFQUNBekMsR0FLQSxJQUFLeUMsSUFBZXpDLEVBQVUsT0FFOUIsSUFBSXljLEVBQWdCNkMsR0FBWTlDLEVBQVEvWixHQUV4Q21kLEdBQVluRCxFQUFlaGEsRUFBWXpDLEdBRXZDNG9CLEdBQVluTSxFQUFlaGEsRUFBWXpDLEdBSXZDLElBQUl5d0IsRUFBcUIsR0FDckJDLEVBQXNCLEdBQ3RCUCxFQUFjMXRCLEVBQVdOLFNBQVNXLGlCQUN0QyxJQUFLLElBQUkzQyxFQUFNLEVBQUdBLEVBQU1ILEVBQVNvSCxjQUFjL3ZDLE9BQVE4b0MsSUFBTyxDQUMxRCxHQUFJZ3dCLEVBQVludEIsU0FBUzdDLEdBQU0sU0FDL0IsSUFBSWlILEVBQWdCcEgsRUFBU29ILGNBQWNqSCxHQUNQLFNBQWhDaUgsRUFBYy92QixjQUNkbzVDLEVBQW1CcndELEtBQUsrL0IsR0FDcUIsVUFBdENpSCxFQUFjdXBCLHFCQUNyQkQsRUFBb0J0d0QsS0FBSysvQixHQUlqQyxJQUFJeXdCLEVBQXFCaEcsR0FDckJuTyxFQUNBaGEsRUFDQXpDLEVBQ0EsT0FDQXl3QixHQUVKLEdBQWtDLGlCQUF2QkcsRUFDUCxPQUFPQSxFQUdYLEdBQUluVSxFQUFjcVQsV0FBYXJULEVBQWNtUSxXQUN6QyxJQUFLLElBQUlsUixLQUFhK1UsRUFBb0IsQ0FDdEMsSUFBSS90QixFQUFVRCxFQUFXTixTQUFTVSxlQUFlNlksR0FDN0NoWixFQUFRakIsV0FBV3BELGlCQUV2QnN1QixHQUFXbFEsRUFBZWhhLEVBQVl6QyxFQUFVMEMsRUFBUyxRQUV6RDRxQixHQUFhN1EsRUFBZWhhLEVBQVl6QyxFQUFVMEMsRUFBUyxTQUluRSxJQUFJbXVCLEVBQXNCakcsR0FDdEJuTyxFQUNBaGEsRUFDQXpDLEVBQ0EsUUFDQTB3QixHQUVKLEdBQW1DLGlCQUF4QkcsRUFDUCxPQUFPQSxFQUdYLEdBQUlwVSxFQUFjc1QsWUFBY3RULEVBQWNvUSxZQUMxQyxJQUFLLElBQUluUixLQUFhZ1YsRUFBcUIsQ0FDdkMsSUFBSWh1QixFQUFVRCxFQUFXTixTQUFTVSxlQUFlNlksR0FDN0NoWixFQUFRakIsV0FBV3BELGlCQUV2QnN1QixHQUFXbFEsRUFBZWhhLEVBQVl6QyxFQUFVMEMsRUFBUyxTQUV6RDRxQixHQUFhN1EsRUFBZWhhLEVBQVl6QyxFQUFVMEMsRUFBUyxVQUkvRDFDLEVBQVNrRyxZQUNUZ2IsR0FBYXpFLEVBQWVoYSxFQUFZekMsR0FHNUNzaEIsR0FBYzlFLEVBQVFDLEVBQWVoYSxHQUd6QyxTQUFTcXVCLEdBQ0x0VSxFQUNBL1osRUFDQXhDLEdBSUEsSUFBS3dDLElBQWV4QyxFQUFTLE9BRTdCLElBQUl3YyxFQUFnQjZDLEdBQVk5QyxFQUFRL1osR0FFeENtZCxHQUFZbkQsRUFBZWhhLEVBQVl4QyxHQUV2QzJvQixHQUFZbk0sRUFBZWhhLEVBQVl4QyxHQUV2QyxJQUFJd3dCLEVBQXFCLEdBQ3JCQyxFQUFzQixHQUN0QlAsRUFBYzF0QixFQUFXTixTQUFTVyxpQkFDdEMsSUFBSyxJQUFJM0MsRUFBTSxFQUFHQSxFQUFNRixFQUFRbUgsY0FBYy92QyxPQUFROG9DLElBQU8sQ0FDekQsR0FBSWd3QixFQUFZbnRCLFNBQVM3QyxHQUFNLFNBQy9CLElBQUlpSCxFQUFnQm5ILEVBQVFtSCxjQUFjakgsR0FDTixTQUFoQ2lILEVBQWMvdkIsY0FDZG81QyxFQUFtQnJ3RCxLQUFLKy9CLEdBQ3FCLFVBQXRDaUgsRUFBY3VwQixxQkFFckJELEVBQW9CdHdELEtBQUsrL0IsR0FJakMsSUFBSXl3QixFQUFxQmhHLEdBQ3JCbk8sRUFDQWhhLEVBQ0F4QyxFQUNBLE9BQ0F3d0IsR0FFSixHQUFrQyxpQkFBdkJHLEVBQ1AsT0FBT0EsRUFHWCxJQUFJbEIsRUFDQWUsRUFBbUJwNUQsT0FBU3E1RCxFQUFvQnI1RCxPQUNoRG80RCxFQUFhLEVBRWpCLEdBQUloVCxFQUFjcVQsV0FBYXJULEVBQWNtUSxXQUN6QyxJQUFLLElBQUlsUixLQUFhK1UsRUFBb0IsQ0FDdEMsSUFBSS90QixFQUFVRCxFQUFXTixTQUFTVSxlQUFlNlksR0FDN0NoWixFQUFRakIsV0FBV3BELGlCQUV2Qm9xQixHQUNJaE0sRUFDQWhhLEVBQ0F4QyxFQUNBeUMsRUFDQSxPQUNBK3NCLEVBQ0FDLEdBR0pELEtBSVIsSUFBSW9CLEVBQXNCakcsR0FDdEJuTyxFQUNBaGEsRUFDQXhDLEVBQ0EsUUFDQXl3QixHQUVKLEdBQW1DLGlCQUF4QkcsRUFDUCxPQUFPQSxFQUdYLEdBQUlwVSxFQUFjc1QsWUFBY3RULEVBQWNvUSxZQUMxQyxJQUFLLElBQUluUixLQUFhZ1YsRUFBcUIsQ0FDdkMsSUFBSWh1QixFQUFVRCxFQUFXTixTQUFTVSxlQUFlNlksR0FDN0NoWixFQUFRakIsV0FBV3BELGlCQUV2Qm9xQixHQUNJaE0sRUFDQWhhLEVBQ0F4QyxFQUNBeUMsRUFDQSxRQUNBK3NCLEVBQ0FDLEdBR0pELEtBSUp4dkIsRUFBUWlHLFlBQ1JnYixHQUFhekUsRUFBZWhhLEVBQVl4QyxHQUc1Q3FoQixHQUFjOUUsRUFBUUMsRUFBZWhhLEdLcnBEekMsU0FBU3N1QixHQUFVM2lCLEdBRWYsT0FEQUEsRUFBTUEsRUFBSTV1QyxPQUFPNlgsZUFFYixJQUFLLE9BQ0wsSUFBSyxJQUNMLElBQUssS0FDTCxJQUFLLE1BQ0QsT0FBTyxFQUNYLElBQUssUUFDTCxJQUFLLElBQ0wsSUFBSyxNQUNMLElBQUssS0FDRCxPQUFPLEVBRWYsT0FBTyxLQUdYLFNBQVMyNUMsR0FBbUJsekIsR0FDeEIsTUFDaUMsUUFBN0JBLEVBQVd6bUIsZUFDa0IsU0FBN0J5bUIsRUFBV3ptQixlQUNrQixnQkFBN0J5bUIsRUFBV3ptQixlQUNrQixTQUE3QnltQixFQUFXem1CLGVBQ2tCLGNBQTdCeW1CLEVBQVd6bUIsZUFDa0IsaUJBQTdCeW1CLEVBQVd6bUIsZUFDa0IsWUFBN0J5bUIsRUFBV3ptQixlQUNrQixVQUE3QnltQixFQUFXem1CLGVBQ2tCLGFBQTdCeW1CLEVBQVd6bUIsZUFDa0IsU0FBN0J5bUIsRUFBV3ptQixlQUNrQixhQUE3QnltQixFQUFXem1CLGVBQ2tCLGNBQTdCeW1CLEVBQVd6bUIsZUFDa0IsaUJBQTdCeW1CLEVBQVd6bUIsY0FPbkIsU0FBUzQ1QyxHQUFzQkMsR0FDM0IsTUFBaUIsU0FBYkEsR0FBb0MsVUFBYkEsR0FBcUMsU0FBYkEsRUFNdkQsU0FBU0MsR0FBY2g2QyxHQUNuQixPQUFPLEVBR1gsU0FBU2k2QyxHQUFrQmhtQyxHQUd2QixNQUFNaW1DLEVBQVEsc0JBQ2QsSUFDSUMsRUFET2xtQyxFQUFNM3JCLE1BQU0sT0FBT3NKLEtBQUtzb0QsR0FDZjV4RCxNQUFNLEtBQzFCLElBQUssSUFBSTBnQyxFQUFNLEVBQUdBLEVBQU1teEIsRUFBU2o2RCxPQUFROG9DLElBQ3JDbXhCLEVBQVNueEIsR0FBT214QixFQUFTbnhCLEdBQUsxZ0MsTUFBTTR4RCxHQUFPdG9ELEtBQUssS0FFcEQsT0FBT3VvRCxFQUdYLFNBQVNDLEdBQ0w1eEQsRUFDQXlyQixFQUNBb21DLEVBQ0FDLEVBQ0FDLEdBRUEsSUFBSWo0RCxFQUF3QixHQUN4QjR4QyxFQUFlLEdBQ2ZzbUIsRUFBZ0IsRUFFcEIsS0FBT0gsRUFBYS8zRCxFQUFNcEMsUUFDdEJvQyxFQUFNMkcsS0FBS3F4RCxHQUdmLEdBQUksTUFBT3JtQyxRQUVKLEdBQXFCLGlCQUFWQSxHQUFnQyxPQUFWQSxHQUNwQyxHQUFJcndCLE1BQU1tdkIsUUFBUWtCLEdBQVEsQ0FDdEIsR0FBSUEsRUFBTS96QixPQUFTbTZELEVBRWYsT0FEQW5tQixFQUFlLGtDQUFvQzFyQyxFQUFPLElBQ25EMHJDLEVBRVgsR0FBcUIsSUFBakJqZ0IsRUFBTS96QixPQUVOLE9BREFnMEMsRUFBZSw4QkFBZ0MxckMsRUFDeEMwckMsRUFFWCxJQUFLLElBQUlsTCxFQUFNLEVBQUdBLEVBQU0xbUMsRUFBTXBDLE9BQVE4b0MsSUFDbEMsR0FBSUEsRUFBTS9VLEVBQU0vekIsT0FBUSxDQUNwQixJQUFJdTZELEVBQU94bUMsRUFBTStVLEdBQ2IweEIsRUFBTyxLQUlYLEdBSEkxeEIsRUFBTSxJQUNOMHhCLEVBQU96bUMsRUFBTStVLEVBQU0sR0FBRzNnQyxRQUVOLGlCQUFUb3lELEVBQW1CLENBRTFCLEdBREFBLEVBQU9BLEVBQUtweUQsT0FDQyxLQUFUb3lELEVBTUcsQ0FDSHZtQixFQUFlLHNCQUF3QjFyQyxFQUN2QyxNQU5JbEcsRUFBTTBtQyxHQURHLE9BQVQweEIsRUFDYUEsRUFFQUosTUFNbEIsQ0FBQSxHQUFvQixrQkFBVEcsRUFHWCxDQUNIdm1CLEVBQWUsc0JBQXdCMXJDLEVBQ3ZDLE1BSkFsRyxFQUFNMG1DLEdBQU95eEIsRUFDYkQsU0FLRCxDQUVILElBQUlqakIsRUFBT3RqQixFQUFNQSxFQUFNL3pCLE9BQVMsR0FFNUJvQyxFQUFNMG1DLEdBRE53eEIsRUFBZ0IsRUFDSGpqQixFQUVBK2lCLFNBSzFCLEdBQXFCLGlCQUFWcm1DLEVBQW9CLENBQ2xDLElBQUlrbUMsRUFBV0YsR0FBa0JobUMsR0FDakMsR0FBSWttQyxFQUFTajZELE9BQVMsRUFBRyxDQUNyQixHQUFJaTZELEVBQVNqNkQsT0FBU202RCxFQUVsQixPQURBbm1CLEVBQWUsa0NBQW9DMXJDLEVBQU8sSUFDbkQwckMsRUFFWCxJQUFLLElBQUlsTCxFQUFNLEVBQUdBLEVBQU0xbUMsRUFBTXBDLE9BQVE4b0MsSUFDbEMsR0FBSUEsRUFBTW14QixFQUFTajZELE9BQVEsQ0FDdkIsSUFBSXU2RCxFQUFPTixFQUFTbnhCLEdBQUszZ0MsT0FDckJxeUQsRUFBTyxLQUlYLEdBSEkxeEIsRUFBTSxJQUNOMHhCLEVBQU9kLEdBQVVPLEVBQVNueEIsRUFBTSxHQUFHM2dDLFNBRTFCLEtBQVRveUQsRUFFSW40RCxFQUFNMG1DLEdBREcsT0FBVDB4QixFQUNhQSxFQUVBSixNQUVkLENBQ0gsSUFBSUssRUFBV2YsR0FBVWEsR0FDekIsR0FBaUIsT0FBYkUsRUFHRyxDQUNIem1CLEVBQWUsc0JBQXdCMXJDLEVBQ3ZDLE1BSkFsRyxFQUFNMG1DLEdBQU8yeEIsRUFDYkgsU0FNTCxDQUVILElBQUlqakIsRUFBT3FpQixHQUFVTyxFQUFTQSxFQUFTajZELE9BQVMsR0FBR21JLFFBRS9DL0YsRUFBTTBtQyxHQUROd3hCLEVBQWdCLEdBQWMsT0FBVGpqQixFQUNSQSxFQUVBK2lCLFFBS3pCLEdBQWMsS0FBVnJtQyxPQUVHLENBQ0gsSUFBSTJtQyxFQUFZaEIsR0FBVTNsQyxHQUMxQixHQUFrQixPQUFkMm1DLEVBQW9CLENBQ3BCdDRELEVBQU0sR0FBS3M0RCxFQUNYSixJQUNBLElBQUssSUFBSXh4QixFQUFNLEVBQUdBLEVBQU0xbUMsRUFBTXBDLE9BQVE4b0MsSUFDbEMxbUMsRUFBTTBtQyxHQUFPNHhCLE9BR2pCMW1CLEVBQWUsc0JBQXdCMXJDLFFBSWhELEdBQXFCLGtCQUFWeXJCLEVBQXFCLENBQ25DM3hCLEVBQU0sR0FBSzJ4QixFQUNYdW1DLElBQ0EsSUFBSyxJQUFJeHhCLEVBQU0sRUFBR0EsRUFBTTFtQyxFQUFNcEMsT0FBUThvQyxJQUNsQzFtQyxFQUFNMG1DLEdBQU8vVSxPQUdqQmlnQixFQUFlLHNCQUF3QjFyQyxFQU8zQyxPQUpLK3hELEdBQXVDLElBQWxCQyxJQUN0QnRtQixFQUFlLHNCQUF3QjFyQyxHQUd0QixLQUFqQjByQyxFQUNPQSxFQUdKNXhDLEVBR1gsU0FBU3U0RCxHQUNMcnlELEVBQ0F5ckIsRUFDQW9tQyxFQUNBQyxFQUNBQyxHQUlBLElBQUlqNEQsRUFBdUIsR0FDdkI0eEMsRUFBZSxHQUNmc21CLEVBQWdCLEVBRXBCLEtBQU9ILEVBQWEvM0QsRUFBTXBDLFFBQ3RCb0MsRUFBTTJHLEtBQUtxeEQsR0FHZixHQUFJLE1BQU9ybUMsUUFFSixHQUFxQixpQkFBVkEsR0FBZ0MsT0FBVkEsR0FDcEMsR0FBSXJ3QixNQUFNbXZCLFFBQVFrQixHQUFRLENBQ3RCLEdBQUlBLEVBQU0vekIsT0FBU202RCxFQUVmLE9BREFubUIsRUFBZSxrQ0FBb0MxckMsRUFBTyxJQUNuRDByQyxFQUVYLEdBQXFCLElBQWpCamdCLEVBQU0vekIsT0FFTixPQURBZzBDLEVBQWUsOEJBQWdDMXJDLEVBQ3hDMHJDLEVBRVgsSUFBSyxJQUFJbEwsRUFBTSxFQUFHQSxFQUFNMW1DLEVBQU1wQyxPQUFROG9DLElBQ2xDLEdBQUlBLEVBQU0vVSxFQUFNL3pCLE9BQVEsQ0FDcEIsSUFBSXU2RCxFQUFPeG1DLEVBQU0rVSxHQUNiMHhCLEVBQU8sS0FJWCxHQUhJMXhCLEVBQU0sSUFDTjB4QixFQUFPem1DLEVBQU0rVSxFQUFNLEdBQUczZ0MsUUFFTixpQkFBVG95RCxFQUFtQixDQUUxQixHQURBQSxFQUFPQSxFQUFLcHlELE9BQ0MsS0FBVG95RCxFQU1HLENBQ0h2bUIsRUFBZSxzQkFBd0IxckMsRUFDdkMsTUFOSWxHLEVBQU0wbUMsR0FERyxPQUFUMHhCLEVBQ2FBLEVBRUFKLE1BTWxCLENBQUEsR0FBb0IsaUJBQVRHLEVBR1gsQ0FDSHZtQixFQUFlLHNCQUF3QjFyQyxFQUN2QyxNQUpBbEcsRUFBTTBtQyxHQUFPeXhCLEVBQ2JELFNBS0QsQ0FFSCxJQUFJampCLEVBQU90akIsRUFBTUEsRUFBTS96QixPQUFTLEdBRTVCb0MsRUFBTTBtQyxHQUROd3hCLEVBQWdCLEVBQ0hqakIsRUFFQStpQixTQUsxQixHQUFxQixpQkFBVnJtQyxFQUFvQixDQUNsQyxJQUFJa21DLEVBQVdGLEdBQWtCaG1DLEdBQ2pDLEdBQUlrbUMsRUFBU2o2RCxPQUFTLEVBQUcsQ0FDckIsR0FBSWk2RCxFQUFTajZELE9BQVNtNkQsRUFFbEIsT0FEQW5tQixFQUFlLGtDQUFvQzFyQyxFQUFPLElBQ25EMHJDLEVBRVgsSUFBSyxJQUFJbEwsRUFBTSxFQUFHQSxFQUFNMW1DLEVBQU1wQyxPQUFROG9DLElBQ2xDLEdBQUlBLEVBQU1teEIsRUFBU2o2RCxPQUFRLENBQ3ZCLElBQUl1NkQsRUFBT04sRUFBU254QixHQUFLM2dDLE9BQ3JCcXlELEVBQU8sS0FNWCxHQUxJMXhCLEVBQU0sSUFDTjB4QixFQUFPSSxHQUNIWCxFQUFTbnhCLEVBQU0sR0FBRzNnQyxRQUNwQnRKLE9BRU8sS0FBVDA3RCxFQUNhLE9BQVRDLEdBQWlCcHFDLE9BQU9pWCxTQUFTbXpCLEdBQ2pDcDRELEVBQU0wbUMsR0FBTzB4QixFQUVicDRELEVBQU0wbUMsR0FBT3N4QixNQUVkLENBQ0gsSUFBSVMsRUFBVUQsR0FBeUJMLEdBQU0xN0QsTUFDN0MsR0FBZ0IsT0FBWmc4RCxFQUdHLENBQ0g3bUIsRUFBZSxzQkFBd0IxckMsRUFDdkMsTUFKQWxHLEVBQU0wbUMsR0FBTyt4QixFQUNiUCxTQU1MLENBRUgsSUFBSWpqQixFQUFPdWpCLEdBQ1BYLEVBQVNsbUMsRUFBTS96QixPQUFTLEdBQUdtSSxRQUM3QnRKLE1BRUV1RCxFQUFNMG1DLEdBRE53eEIsRUFBZ0IsR0FBYyxPQUFUampCLEVBQ1JBLEVBRUEraUIsUUFLekIsR0FBYyxLQUFWcm1DLE9BRUcsQ0FDSCxJQUFJK21DLEVBQVdGLEdBQXlCN21DLEdBQU9sMUIsTUFDL0MsR0FBaUIsT0FBYmk4RCxFQUFtQixDQUNuQjE0RCxFQUFNLEdBQUswNEQsRUFDWFIsSUFDQSxJQUFLLElBQUl4eEIsRUFBTSxFQUFHQSxFQUFNMW1DLEVBQU1wQyxPQUFROG9DLElBQ2xDMW1DLEVBQU0wbUMsR0FBT2d5QixPQUdqQjltQixFQUFlLHNCQUF3QjFyQyxRQUloRCxHQUFxQixpQkFBVnlyQixFQUNkLEdBQUkzRCxPQUFPaVgsU0FBU3RULEdBQVEsQ0FDeEIzeEIsRUFBTSxHQUFLMnhCLEVBQ1h1bUMsSUFDQSxJQUFLLElBQUl4eEIsRUFBTSxFQUFHQSxFQUFNMW1DLEVBQU1wQyxPQUFROG9DLElBQ2xDMW1DLEVBQU0wbUMsR0FBTy9VLE9BR2pCaWdCLEVBQWUsc0JBQXdCMXJDLE9BRzNDMHJDLEVBQWUsc0JBQXdCMXJDLEVBTzNDLE9BSksreEQsR0FBdUMsSUFBbEJDLElBQ3RCdG1CLEVBQWUsc0JBQXdCMXJDLEdBR3RCLEtBQWpCMHJDLEVBQ09BLEVBR0o1eEMsRUFHWCxTQUFTMjRELEdBQW1CaG5DLEVBQVlxbUMsR0FDcEMsTUFBcUIsaUJBQVZybUMsRUFDQWluQyxHQUEwQmpuQyxHQUNULGlCQUFWQSxFQUNQQSxFQUFNaFQsV0FFVnE1QyxFQUdYLFNBQVNhLEdBQ0wzeUQsRUFDQXlyQixFQUNBb21DLEVBQ0FDLEVBQ0FjLEVBQ0FiLEdBRUEsSUFBSWo0RCxFQUF1QixHQUN2QjR4QyxFQUFlLEdBQ2ZzbUIsRUFBZ0IsRUFFcEIsS0FBT0gsRUFBYS8zRCxFQUFNcEMsUUFDdEJvQyxFQUFNMkcsS0FBS3F4RCxHQUdmLEdBQUksTUFBT3JtQyxRQUVKLEdBQXFCLGlCQUFWQSxHQUFnQyxPQUFWQSxHQUNwQyxHQUFJcndCLE1BQU1tdkIsUUFBUWtCLEdBQVEsQ0FDdEIsR0FBSUEsRUFBTS96QixPQUFTbTZELEVBRWYsT0FEQW5tQixFQUFlLGtDQUFvQzFyQyxFQUFPLElBQ25EMHJDLEVBRVgsR0FBcUIsSUFBakJqZ0IsRUFBTS96QixPQUVOLE9BREFnMEMsRUFBZSw4QkFBZ0MxckMsRUFDeEMwckMsRUFFWCxJQUFLLElBQUlsTCxFQUFNLEVBQUdBLEVBQU0xbUMsRUFBTXBDLE9BQVE4b0MsSUFDbEMsR0FBSUEsRUFBTS9VLEVBQU0vekIsT0FBUSxDQUNwQixJQUFJdTZELEVBQU94bUMsRUFBTStVLEdBQ2IweEIsRUFBTyxLQUlYLEdBSEkxeEIsRUFBTSxJQUNOMHhCLEVBQU96bUMsRUFBTStVLEVBQU0sR0FBRzNnQyxRQUVOLGlCQUFUb3lELEVBc0JKLENBQ0h2bUIsRUFBZSxzQkFBd0IxckMsRUFDdkMsTUF0QkEsR0FEQWl5RCxFQUFPQSxFQUFLcHlELE9BQ0MsS0FBVG95RCxFQUVJbjRELEVBQU0wbUMsR0FERyxPQUFUMHhCLEVBQ2FBLEVBRUFKLE9BR2pCLEdBQUljLEVBQVcsQ0FDWCxJQUFJQSxFQUFVWCxHQUdQLENBQ0h2bUIsRUFBZSxzQkFBd0IxckMsRUFDdkMsTUFKQWxHLEVBQU0wbUMsR0FBT3l4QixFQUNiRCxTQU1KbDRELEVBQU0wbUMsR0FBT3l4QixFQUNiRCxRQU9ULENBRUgsSUFBSWpqQixFQUFPdGpCLEVBQU1BLEVBQU0vekIsT0FBUyxHQUFHbUksT0FFL0IvRixFQUFNMG1DLEdBRE53eEIsRUFBZ0IsRUFDSGpqQixFQUVBK2lCLFNBSzFCLEdBQXFCLGlCQUFWcm1DLEVBQW9CLENBQ2xDLElBQUlrbUMsRUFBV0YsR0FBa0JobUMsR0FDakMsR0FBSWttQyxFQUFTajZELE9BQVMsRUFBRyxDQUNyQixHQUFJaTZELEVBQVNqNkQsT0FBU202RCxFQUVsQixPQURBbm1CLEVBQWUsa0NBQW9DMXJDLEVBQU8sSUFDbkQwckMsRUFFWCxJQUFLLElBQUlsTCxFQUFNLEVBQUdBLEVBQU0xbUMsRUFBTXBDLE9BQVE4b0MsSUFDbEMsR0FBSUEsRUFBTW14QixFQUFTajZELE9BQVEsQ0FDdkIsSUFBSXU2RCxFQUFPTixFQUFTbnhCLEdBQUszZ0MsT0FDckJxeUQsRUFBTyxLQUlYLEdBSEkxeEIsRUFBTSxJQUNOMHhCLEVBQU9QLEVBQVNueEIsRUFBTSxHQUFHM2dDLFFBRWhCLEtBQVRveUQsRUFFSW40RCxFQUFNMG1DLEdBREcsT0FBVDB4QixFQUNhQSxFQUVBSixPQUdqQixHQUFJYyxFQUFXLENBQ1gsSUFBSUEsRUFBVVgsR0FHUCxDQUNIdm1CLEVBQWUsc0JBQXdCMXJDLEVBQ3ZDLE1BSkFsRyxFQUFNMG1DLEdBQU95eEIsRUFDYkQsU0FNSmw0RCxFQUFNMG1DLEdBQU95eEIsRUFDYkQsUUFHTCxDQUVILElBQUlqakIsRUFBTzRpQixFQUFTQSxFQUFTajZELE9BQVMsR0FBR21JLE9BRXJDL0YsRUFBTTBtQyxHQUROd3hCLEVBQWdCLEVBQ0hqakIsRUFFQStpQixRQUt6QixHQUFjLEtBQVZybUMsUUFHQSxHQUFJbW5DLEVBQ0EsR0FBSUEsRUFBVW5uQyxHQUFRLENBQ2xCM3hCLEVBQU0sR0FBSzJ4QixFQUNYdW1DLElBQ0EsSUFBSyxJQUFJeHhCLEVBQU0sRUFBR0EsRUFBTTFtQyxFQUFNcEMsT0FBUThvQyxJQUNsQzFtQyxFQUFNMG1DLEdBQU8vVSxPQUdqQmlnQixFQUFlLHNCQUF3QjFyQyxNQUV4QyxDQUNIbEcsRUFBTSxHQUFLMnhCLEVBQ1h1bUMsSUFDQSxJQUFLLElBQUl4eEIsRUFBTSxFQUFHQSxFQUFNMW1DLEVBQU1wQyxPQUFROG9DLElBQ2xDMW1DLEVBQU0wbUMsR0FBTy9VLFFBSzFCLEdBQXFCLGlCQUFWQSxFQUFvQixDQUNsQyxJQUFJb25DLEVBQVlwbkMsRUFBTWhULFdBQ3RCLEdBQUltNkMsRUFDQSxHQUFJQSxFQUFVQyxHQUFZLENBQ3RCLzRELEVBQU0sR0FBSys0RCxFQUNYYixJQUNBLElBQUssSUFBSXh4QixFQUFNLEVBQUdBLEVBQU0xbUMsRUFBTXBDLE9BQVE4b0MsSUFDbEMxbUMsRUFBTTBtQyxHQUFPcXlCLE9BR2pCbm5CLEVBQWUsc0JBQXdCMXJDLE1BRXhDLENBQ0hsRyxFQUFNLEdBQUsrNEQsRUFDWGIsSUFDQSxJQUFLLElBQUl4eEIsRUFBTSxFQUFHQSxFQUFNMW1DLEVBQU1wQyxPQUFROG9DLElBQ2xDMW1DLEVBQU0wbUMsR0FBT3F5QixRQUlyQm5uQixFQUFlLHNCQUF3QjFyQyxFQU8zQyxHQUpLK3hELEdBQXVDLElBQWxCQyxJQUN0QnRtQixFQUFlLHNCQUF3QjFyQyxHQUd0QixLQUFqQjByQyxFQUNBLE9BQU9BLEVBR1gsSUFBSyxJQUFJbEwsRUFBTSxFQUFHQSxFQUFNMW1DLEVBQU1wQyxPQUFROG9DLElBQ2xDMW1DLEVBQU0wbUMsR0FBT2t5QixHQUEwQjU0RCxFQUFNMG1DLElBR2pELE9BQU8xbUMsRUFHWCxTQUFTZzVELEdBQWU5eUQsRUFBY3lyQixHQUNsQyxJQUFJc25DLEVBQTBCLEdBRTlCLEdBQUksTUFBT3RuQyxFQUF5QyxPQUFPc25DLEVBRTNELEdBQXFCLGlCQUFWdG5DLEdBQ1AsR0FBSXJ3QixNQUFNbXZCLFFBQVFrQixHQUNkLElBQUssSUFBSXVuQyxLQUFRdm5DLEVBQ2IsR0FBb0IsaUJBQVR1bkMsRUFBbUIsQ0FDMUIsSUFBSXB1RCxFQUFJazZCLFdBQVdrMEIsR0FDbkIsSUFBSWxyQyxPQUFPaVgsU0FBU242QixHQUViLENBRUgsTUFEbUIsY0FBYzVFLDBCQUZqQyt5RCxFQUFTdHlELEtBQUttRSxTQVEzQixHQUFxQixpQkFBVjZtQixFQUFvQixDQUNsQyxJQUFJa21DLEVBQVdGLEdBQWtCaG1DLEdBQ2pDLEdBQUlrbUMsRUFBU2o2RCxPQUFTLEVBQ2xCLElBQUssSUFBSXU3RCxLQUFTdEIsRUFBVSxDQUN4QixJQUFJL3NELEVBQUlrNkIsV0FBV20wQixFQUFNcHpELFFBQ3pCLEdBQUtpb0IsT0FBT3RQLE1BQU01VCxHQUdYLENBRUgsTUFEbUIsY0FBYzVFLDBCQUZqQyt5RCxFQUFTdHlELEtBQUttRSxPQU1uQixDQUFBLEdBQWMsS0FBVjZtQixFQUFjLENBRXJCLE1BRG1CLFNBQVN6ckIsb0JBRXpCLENBQ0gsSUFBSTRFLEVBQUlrNkIsV0FBV3JULEdBQ25CLElBQUkzRCxPQUFPaVgsU0FBU242QixHQUViLENBRUgsTUFEbUIsY0FBYzVFLDBCQUZqQyt5RCxFQUFTdHlELEtBQUttRSxTQU1uQixDQUFBLEdBQXFCLGlCQUFWNm1CLEVBRVgsQ0FFSCxNQURtQixXQUFXenJCLElBRjlCK3lELEVBQVN0eUQsS0FBS2dyQixHQU1sQixPQUFPc25DLEVBR1gsU0FBU0csR0FBZWx6RCxFQUFjeXJCLEdBQ2xDLElBQUkwbkMsRUFBMEIsR0FFOUIsR0FBSSxNQUFPMW5DLEVBQXlDLE9BQU8wbkMsRUFFM0QsR0FBcUIsaUJBQVYxbkMsR0FDUCxHQUFJcndCLE1BQU1tdkIsUUFBUWtCLEdBQ2QsSUFBSyxJQUFJdW5DLEtBQVF2bkMsRUFDTyxpQkFBVHVuQyxHQUNQRyxFQUFTMXlELEtBQUt1eUQsRUFBS256RCxZQUk1QixDQUFBLEdBQXFCLGlCQUFWNHJCLEVBYVgsQ0FFSCxNQURtQixXQUFXenJCLElBZEksQ0FDbEMsSUFBSTJ4RCxFQUFXRixHQUFrQmhtQyxHQUVqQyxHQUFJa21DLEVBQVNqNkQsT0FBUyxFQUNsQixJQUFLLElBQUl1N0QsS0FBU3RCLEVBQ2R3QixFQUFTMXlELEtBQUt3eUQsRUFBTXB6RCxZQUVyQixDQUFBLEdBQWMsS0FBVjRyQixFQUFjLENBRXJCLE1BRG1CLFNBQVN6ckIsb0JBRzVCbXpELEVBQVMxeUQsS0FBS2dyQixLQU90QixJQUFLLElBQUkrVSxFQUFNLEVBQUdBLEVBQU0yeUIsRUFBU3o3RCxPQUFROG9DLElBQ3JDMnlCLEVBQVMzeUIsR0FBT2t5QixHQUEwQlMsRUFBUzN5QixJQUd2RCxPQUFPMnlCLEVBR1gsU0FBU0MsR0FBcUJDLEVBQVd2d0IsR0FJakN1d0IsSUFFQXZ3QixFQUFXMkMsTUFBUWd0QixHQUFtQlksTUFBQUEsU0FBQUEsRUFBTTV0QixNQUFPM0MsRUFBVzJDLE9BRzlEM0MsRUFBVzRDLFdBQWErc0IsR0FDcEJZLE1BQUFBLFNBQUFBLEVBQU0zdEIsV0FDTjVDLEVBQVc0QyxZQUlmNUMsRUFBVzZDLFdBQWE4c0IsR0FDcEJZLE1BQUFBLFNBQUFBLEVBQU0xdEIsV0FDTjdDLEVBQVc2QyxZQUlmN0MsRUFBVzhDLGdCQUFrQjZzQixHQUN6QlksTUFBQUEsU0FBQUEsRUFBTXp0QixnQkFDTjlDLEVBQVc4QyxpQkFJc0Isa0JBQTFCeXRCLEVBQUsvc0IsbUJBQ1p4RCxFQUFXd0QsaUJBQW1CK3NCLEVBQUsvc0Isa0JBSVIsa0JBQXBCK3NCLEVBQUs5c0IsYUFDWnpELEVBQVd5RCxXQUFhOHNCLEVBQUs5c0IsWUFJRSxpQkFBeEI4c0IsRUFBSzdzQixlQUNaMUQsRUFBVzBELGVBQWlCNnNCLEVBQUs3c0IsZUFFakMxRCxFQUFXMEQsZUFBaUIsU0FJTSxpQkFBM0I2c0IsRUFBSzVzQixrQkFDWjNELEVBQVcyRCxrQkFBb0I0c0IsRUFBSzVzQixrQkFHRixRQUE5QjNELEVBQVcwRCxnQkFDbUIsV0FBOUIxRCxFQUFXMEQsZUFFWDFELEVBQVcyRCxrQkFBb0IsYUFFRCxTQUE5QjNELEVBQVcwRCxnQkFDbUIsVUFBOUIxRCxFQUFXMEQsZUFFWDFELEVBQVcyRCxrQkFBb0IsV0FFL0IzRCxFQUFXMkQsa0JBQW9CLGFBT3ZDM0QsRUFBVzRELGNBQWdCK3JCLEdBQ3ZCWSxNQUFBQSxTQUFBQSxFQUFNM3NCLGNBQ041RCxFQUFXNEQsZUFJZjVELEVBQVc2RCxrQkFBb0I4ckIsR0FDM0JZLE1BQUFBLFNBQUFBLEVBQU0xc0Isa0JBQ043RCxFQUFXNkQsb0JBS25CLElBQUkyc0IsRUFBZ0JYLEdBQ2hCLGFBQ0FVLE1BQUFBLFNBQUFBLEVBQU14dEIsV0FDTixFQUNBLFFBQ0EsTUFDQSxHQUVKLEdBQTZCLGlCQUFsQnl0QixFQUNQLE9BQU9BLEVBRVgsR0FBSUEsRUFBYzU3RCxPQUFTLEVBQ3ZCLE1BQU8sd0VBRVhvckMsRUFBVytDLFdBQWF5dEIsRUFJeEIsSUFBSUMsRUFBZ0JaLEdBQ2hCLGFBQ0FVLE1BQUFBLFNBQUFBLEVBQU12dEIsV0FDTixFQUNBLEdBQ0EwckIsSUFDQSxHQUVKLEdBQTZCLGlCQUFsQitCLEVBQ1AsT0FBT0EsRUFFWCxHQUFJQSxFQUFjNzdELE9BQVMsRUFDdkIsTUFBTyx3RUFFWG9yQyxFQUFXZ0QsV0FBYXl0QixFQUl4QixJQUFJQyxFQUFxQmIsR0FDckIsa0JBQ0FVLE1BQUFBLFNBQUFBLEVBQU10dEIsZ0JBQ04sRUFDQSxHQUNBeXJCLElBQ0EsR0FFSixHQUFrQyxpQkFBdkJnQyxFQUNQLE9BQU9BLEVBRVgsR0FBSUEsRUFBbUI5N0QsT0FBUyxFQUM1QixNQUFPLDZFQUVYb3JDLEVBQVdpRCxnQkFBa0J5dEIsRUFJN0IsSUFBSUMsRUFBZWQsR0FDZixZQUNBVSxNQUFBQSxTQUFBQSxFQUFNcnRCLFVBQ04sRUFDQSxHQUNBLE1BQ0EsR0FFSixHQUE0QixpQkFBakJ5dEIsRUFDUCxPQUFPQSxFQUVYLEdBQUlBLEVBQWEvN0QsT0FBUyxFQUN0QixNQUFPLHVFQUVYb3JDLEVBQVdrRCxVQUFZeXRCLEVBSXZCM3dCLEVBQVdtRCxrQkFBb0J3c0IsR0FDM0JZLE1BQUFBLFNBQUFBLEVBQU1wdEIsa0JBQ05uRCxFQUFXbUQsbUJBS2YsSUFBSXl0QixFQUF1QmYsR0FDdkIsb0JBQ0FVLE1BQUFBLFNBQUFBLEVBQU1udEIsa0JBQ04sRUFDQSxLQUNBLE1BQ0EsR0FFSixHQUFvQyxpQkFBekJ3dEIsRUFDUCxPQUFPQSxFQUVYLEdBQUlBLEVBQXFCaDhELE9BQVMsRUFDOUIsTUFBTywrRUFFWG9yQyxFQUFXb0Qsa0JBQW9Cd3RCLEVBSS9CNXdCLEVBQVdxRCxxQkFBdUJzc0IsR0FDOUJZLE1BQUFBLFNBQUFBLEVBQU1sdEIscUJBQ05yRCxFQUFXcUQsc0JBS2YsSUFBSXd0QixFQUEwQmhCLEdBQzFCLHVCQUNBVSxNQUFBQSxTQUFBQSxFQUFNanRCLHFCQUNOLEVBQ0EsS0FDQSxNQUNBLEdBRUosR0FBdUMsaUJBQTVCdXRCLEVBQ1AsT0FBT0EsRUFFWCxHQUFJQSxFQUF3Qmo4RCxPQUFTLEVBQ2pDLE1BQU8sa0ZBRVhvckMsRUFBV3NELHFCQUF1QnV0QixFQUlsQyxJQUFJQyxFQUFVdkIsR0FBd0IsT0FBUWdCLE1BQUFBLFNBQUFBLEVBQU1wekIsS0FBTSxFQUFHLE1BQU0sR0FDbkUsR0FBdUIsaUJBQVoyekIsRUFDUCxPQUFPQSxFQUVYLEdBQUlBLEVBQVFsOEQsT0FBUyxFQUNqQixNQUFPLGtFQUVYb3JDLEVBQVc3QyxLQUFPMnpCLEVBSWxCLElBQUlDLEVBQVV4QixHQUF3QixPQUFRZ0IsTUFBQUEsU0FBQUEsRUFBTW56QixLQUFNLEVBQUcsTUFBTSxHQUNuRSxHQUF1QixpQkFBWjJ6QixFQUNQLE9BQU9BLEVBRVgsR0FBSUEsRUFBUW44RCxPQUFTLEVBQ2pCLE1BQU8sa0VBRVhvckMsRUFBVzVDLEtBQU8yekIsRUFJbEIsSUFBSUMsRUFBa0JsQyxHQUNsQixlQUNBeUIsTUFBQUEsU0FBQUEsRUFBTWh0QixhQUNOLEdBQ0EsR0FDQSxHQUVKLE1BQStCLGlCQUFwQnl0QixFQUNBQSxFQUVQQSxFQUFnQnA4RCxPQUFTLEVBQ2xCLCtFQUVYb3JDLEVBQVd1RCxhQUFleXRCLEdBSTlCLFNBQVNDLEdBQXdCdmxCLEdBQzdCLElBQUllLEVBQWlCLEdBQ3JCLEdBQVksT0FBUmYsRUFBYyxDQUNkLE1BQU13bEIsRUFBYWhxRCxPQUFPdWxDLEtBQUtmLEdBQy9CLElBQUssSUFBSTVxQyxLQUFPb3dELEVBQ1p6a0IsRUFBSzl1QyxLQUFLbUQsRUFBSTZVLFlBR3RCLE9BQU84MkIsV0M5MkJLMGtCLEdBQ1p0d0IsRUFDQWIsR0FpQkEsT0FIZXVpQixHQVBFNk8sR0FGRXZ3QixFQUFLd3dCLFNBSXBCcnhCLEVBQVdpQixpQkFDWGpCLEVBQVdrQixrQkFJNkJsQixFQUFXTCxxQkFRM0MyeEIsR0FDWkMsRUFDQXIwQixFQUNBOEMsR0FLQSxJQUFJN1ksRUFBT3R0QixPQUFPaW1DLE9BQU8sSUFFckIweEIsRUFBY0QsRUFBVUUsWUFDNUIsR0FBSUQsR0FDSUUsR0FBaUJGLEVBQWF0MEIsRUFBTVosYUFBYyxDQUNsRCxJQUFJd04sRUFBVTRuQixHQUFpQkYsRUFBYXQwQixFQUFNWixhQUczQixpQkFBWndOLElBQ1BBLEVBQVVzbkIsR0FDTnRuQixFQUNBOUosRUFBV2lCLGlCQUNYakIsRUFBV2tCLGtCQUdmL1osRUFBT283QixHQUFpQnpZLEVBQVM5SixFQUFXTCxhQU14RCxPQUFPeFksRUFNWCxTQUFTd3FDLEdBQ0xuMkQsRUFDQTh1QyxFQUNBdEssR0FFQSxJQUdJcjRCLEVBSEF3ZixFQUFPdHRCLE9BQU9pbUMsT0FBTyxJQUVyQi9ELEVBQVEsSUFBSXJ4QixPQUFPNC9CLEVBQVUsTUFFakMsS0FBUTNpQyxFQUFRbzBCLEVBQU1sbkIsS0FBS3JaLElBRXZCLFFBQzRCLElBQWpCbU0sRUFBTWhCLGFBQ2lCLElBQXZCZ0IsRUFBTWhCLE9BQU9sVCxNQUN0QixDQUVFLElBQUlxMkMsRUFBVW5pQyxFQUFNaEIsT0FBT2xULE1BQU1zSixPQVVqQyxHQVBBK3NDLEVBQVVzbkIsR0FDTnRuQixFQUNBOUosRUFBV2lCLGlCQUNYakIsRUFBV2tCLGtCQUdmL1osRUFBT283QixHQUFpQnpZLEVBQVM5SixFQUFXTCxZQUN4Q3hZLEVBQUtra0IsVUFDTCxPQUFPbGtCLEVBS25CLE9BQU9BLFdBS0t5cUMsR0FDWkMsRUFDQTMwQixFQUNBOEMsR0FNV25tQyxPQUFPaW1DLE9BQU8sSUFFekIsSUFBSWd5QixFQUFVNTBCLEVBQU1aLFlBWXBCLE9BWElZLEVBQU1YLG9CQUNOdTFCLEVBQVU1MEIsRUFBTVgsbUJBVWJvMUIsR0FBK0JFLEVBTGxDLFdBQ0FDLEVBQ0EsNEVBR3FEOXhCLFlBSzdDK3hCLEdBQ1pGLEVBQ0EzMEIsRUFDQThDLEdBVUEsT0FMV25tQyxPQUFPaW1DLE9BQU8sSUFLbEI2eEIsR0FBK0JFLEVBSHZCMzBCLEVBQU1aLFlBR29DMEQsWUFLN0NneUIsR0FDWkgsRUFDQTMwQixFQUNBOEMsR0FLV25tQyxPQUFPaW1DLE9BQU8sSUFFekIsSUFBSW15QixFQUFXLzBCLEVBQU1aLFlBaUJyQixPQWhCSVksRUFBTVgsb0JBQ04wMUIsRUFBVy8wQixFQUFNWCxtQkFJckIwMUIsRUFBV0EsRUFBUzN0QyxRQUFRLElBQUssWUFXMUJxdEMsR0FBK0JFLEVBTGxDLG9CQUNBSSxFQUNBLDRFQUdxRGp5QixZQXdEN0NreUIsR0FDWnJ4QixFQUNBM0QsRUFDQThDLEdBS0EsSUFBSTdZLEVBQU90dEIsT0FBT2ltQyxPQUFPLElBRXpCLEdBQUllLEdBQVFBLGFBQWdCc3hCLFFBQU8sQ0FHL0IsSUFBSTlwQyxFQUFTNlUsRUFBTVosWUFDbkIsR0FBZSxVQUFYalUsRUFBb0IsQ0FFcEJsQixFQUFPaXJDLEdBREt2eEIsRUFBS3d4QixLQUFLQyxNQUNtQnR5QixFQUFXTCxpQkFDakQsR0FBZSxVQUFYdFgsRUFBb0IsQ0FFM0JsQixFQUFPaXJDLEdBREt2eEIsRUFBS3d4QixLQUFLRSxNQUNtQnZ5QixFQUFXTCxnQkFDbEMsU0FBWHRYLElBQ1BsQixFQUFPZ3FDLEdBQW9CdHdCLEVBQU1iLElBS3pDLE9BQU83WSxXQUtLcXJDLEdBQ1pYLEVBQ0EzMEIsRUFDQThDLEdBS1dubUMsT0FBT2ltQyxPQUFPLElBQ3pCLElBQUl6RSxFQUFhNkIsRUFBTWIsVUFHbkJpTyxFQUFXcE4sRUFBTVosWUFZckIsT0FWSWdPLEVBREFqUCxJQUFlNUUsR0FBV2c4QixLQUNmLGtCQUFvQm5vQixFQUN4QmpQLElBQWU1RSxHQUFXaThCLFNBQ3RCLGFBQWVwb0IsRUFDbkJqUCxJQUFlNUUsR0FBV2s4QixZQUN0QixlQUFpQnJvQixFQUVqQixrQkFBb0JBLEVBSTVCcW5CLEdBQStCRSxFQUFTdm5CLEVBQVV0SyxZQUc3QzR5QixHQUNaQyxFQUNBMXJDLEVBQ0ErVixFQUNBenBDLEdBRUEsR0FBS28vRCxFQUFRMXhELElBQUlnbUIsR0FJVixDQUNvQjByQyxFQUFRdjFELElBQUk2cEIsR0FDbEJ4cEIsS0FBSyxDQUFFdS9CLE1BQU9BLEVBQU96cEMsTUFBT0EsUUFOekIsQ0FDcEIsSUFBSXEvRCxFQUFrQixJQUFJeDZELE1BQzFCdzZELEVBQWdCbjFELEtBQUssQ0FBRXUvQixNQUFPQSxFQUFPenBDLE1BQU9BLElBQzVDby9ELEVBQVFyMUQsSUFBSTJwQixFQUFNMnJDLElBVzFCLFNBQVNDLEdBQ0x2M0QsRUFDQTh1QyxFQUNBcE4sRUFDQTIxQixFQUNBRyxFQUNBaHpCLEdBSUEsSUFDSXI0QixFQURBbzBCLEVBQVEsSUFBSXJ4QixPQUFPNC9CLEVBQVUsTUFFN0Iyb0IsRUFBVSxFQUNWQyxHQUFZLEVBQ2hCLEtBQVF2ckQsRUFBUW8wQixFQUFNbG5CLEtBQUtyWixJQUV2QixHQUFLd2tDLEVBQVdvQixvQkFBb0JsRSxFQUFNVixTQXNFdEN5MkIsR0FBV2p6QixFQUFXbUIsV0FBV2pFLEVBQU1WLFNBQ3ZDMDJCLEdBQVksRUFDWmgyQixFQUFNSixxQkF2RU4sUUFDNEIsSUFBakJuMUIsRUFBTWhCLGFBQ2lCLElBQXZCZ0IsRUFBTWhCLE9BQU9sVCxNQUN0QixDQUNFLElBR0lvN0QsRUFIU2xuRCxFQUFNaEIsT0FBT2xULE1BQU1zSixPQUdWQyxNQUFNa2dDLEVBQU1OLGdCQUVsQyxJQUFLaXlCLEVBQVUsU0FDZixHQUF3QixJQUFwQkEsRUFBU2o2RCxPQUFjLENBRXZCLElBRUl1K0QsRUFBVzNELEdBRkRYLEVBQVMsR0FBRzl4RCxPQUl0QmlqQyxFQUFXeUIsY0FFUSxPQUFuQjB4QixFQUFTMS9ELFFBQ0wwL0QsRUFBUzkxRCxPQUFTczVCLEdBQVU2VixNQUM1QnltQixFQUFVRSxFQUFTMS9ELE1BQ25CeS9ELEdBQVksRUFDWmgyQixFQUFNdkIsVUFBWWhGLEdBQVU2VixLQUM1QnRQLEVBQU1KLGlCQUdEa0QsRUFBV3FCLGdCQUFnQm5FLEVBQU1WLFVBQ2YsSUFBbkIyMkIsRUFBUzEvRCxRQUVUdy9ELEdBQVdFLEVBQVMxL0QsTUFDcEJ5L0QsR0FBWSxFQUNaaDJCLEVBQU1KLHVCQUlmLEdBQ0greEIsRUFBU2o2RCxPQUFTc29DLEVBQU1ULGVBQ3hCUyxFQUFNVCxlQUFpQixFQUN6QixDQUVFLElBQ0kwMkIsRUFBVzNELEdBRERYLEVBQVMzeEIsRUFBTVQsZUFBZTEvQixPQUd4Q2lqQyxFQUFXeUIsY0FHUSxPQUFuQjB4QixFQUFTMS9ELFFBQ0wwL0QsRUFBUzkxRCxPQUFTczVCLEdBQVU2VixNQUM1QnltQixFQUFVRSxFQUFTMS9ELE1BQ25CeS9ELEdBQVksRUFDWmgyQixFQUFNdkIsVUFBWWhGLEdBQVU2VixLQUM1QnRQLEVBQU1KLGtCQUVObTJCLEdBQVdFLEVBQVMxL0QsTUFDcEJ5L0QsR0FBWSxFQUNaaDJCLEVBQU1KLHdCQU9sQm0yQixHQUFXanpCLEVBQVdtQixXQUFXakUsRUFBTVYsU0FDdkMwMkIsR0FBWSxFQUNaaDJCLEVBQU1KLGdCQVdsQixHQUFJbzJCLEVBQVcsQ0FHWCxPQURBTixHQUFhQyxFQURBRyxFQUFVMTFELElBQUkwaUMsRUFBV1csU0FBU3pELEVBQU1WLFVBQ3ZCVSxFQUFPKzFCLElBQzlCLEVBR1gsT0FBTyxXQTBRS0csR0FDWnZ5QixFQUNBZ3hCLEVBQ0EzMEIsRUFDQThDLEVBQ0E2eUIsRUFDQUcsR0FJQSxHQUFJbnlCLEdBQVFBLGFBQWdCc3hCLFFBQU8sQ0FHL0IsSUFBSTlwQyxFQUFTNlUsRUFBTVosWUFDZisyQixFQUFTTCxFQUFVMTFELElBQUkwaUMsRUFBV1csU0FBU3pELEVBQU1WLFVBRXJELEdBQWUsVUFBWG5VLEVBQW9CLENBQ3BCLElBQUlpcUMsRUFBUXp4QixFQUFLd3hCLEtBQUtDLE1BSXRCLE9BSEFwMUIsRUFBTXZCLFVBQVloRixHQUFVdGUsS0FDNUI2a0IsRUFBTUosZ0JBQ044MUIsR0FBYUMsRUFBU1EsRUFBUW4yQixFQUFPbzFCLElBQzlCLEVBQ0osR0FBZSxVQUFYanFDLEVBQW9CLENBQzNCLElBQUlrcUMsRUFBUTF4QixFQUFLd3hCLEtBQUtFLE1BSXRCLE9BSEFyMUIsRUFBTXZCLFVBQVloRixHQUFVdGUsS0FDNUI2a0IsRUFBTUosZ0JBQ044MUIsR0FBYUMsRUFBU1EsRUFBUW4yQixFQUFPcTFCLElBQzlCLEVBQ0osR0FBZSxTQUFYbHFDLEVBQW1CLENBQzFCLElBQUkzZSxFQUFPbTNCLEVBQUt3eEIsS0FBSzNvRCxLQUdyQixPQUZBd3pCLEVBQU1KLGdCQUNOODFCLEdBQWFDLEVBQVNRLEVBQVFuMkIsRUFBT3h6QixJQUM5QixFQUNKLEdBQWUsYUFBWDJlLEVBQXVCLENBRzlCLE9BREF1cUMsR0FBYUMsRUFBU1EsRUFBUW4yQixXbEJ0UGIxaEMsR0FDekJBLEVBQU9teUMsR0FBVW55QyxHQUdqQixJQU1JODNELEVBQVUsSUFBSTVvRCxPQUNkLENBQ0kscUNBUEosaW1JQUNLd1EsT0FNNEQsTUFKakUseUVBQ0tBLFFBS0g1VSxLQUFLLEtBQ1AsS0FFSixPQUFROUssRUFBS21NLE1BQU0yckQsSUFBWSxJQUFJMStELE9rQm9PWjIrRCxDQUFvQjFCLEtBRTVCLEVBQ0osR0FBZSxhQUFYeHBDLEVBQXVCLENBQzlCLElBQUltckMsRUFBb0MzQixFbEJwT3BDajlELE9rQnVPSixPQUZBc29DLEVBQU1KLGdCQUNOODFCLEdBQWFDLEVBQVNRLEVBQVFuMkIsRUFBT3MyQixJQUM5QixFQUNKLEdBQWUsaUJBQVhuckMsRUFBMkIsQ0FDbEMsSUFBSW9yQyxXbEJ0T2lCajRELEdBVTdCLFNBVEFBLEVBQU9teUMsR0FBVW55QyxLQUtKLElBQUltTSxNQUNULGdHQUNDLElBQ3VCL1MsT2tCNk5MOCtELENBQXdCN0IsR0FHM0MsT0FGQTMwQixFQUFNSixnQkFDTjgxQixHQUFhQyxFQUFTUSxFQUFRbjJCLEVBQU91MkIsSUFDOUIsRUFDSixHQUFlLFNBQVhwckMsRUFBbUIsQ0FDMUIsSUFBSXNyQyxFQUFnQixFQUNoQkMsR0FBYyxFQUNkVCxFQUFXM0QsR0FDWDN1QixFQUFLd3dCLFNBQ0xyeEIsRUFBV3lCLGNBRVEsT0FBbkIweEIsRUFBUzEvRCxRQUNMMC9ELEVBQVM5MUQsT0FBU3M1QixHQUFVNlYsTUFDNUJtbkIsRUFBZ0JSLEVBQVMxL0QsTUFDekJtZ0UsR0FBYyxFQUNkMTJCLEVBQU12QixVQUFZaEYsR0FBVTZWLEtBQzVCdFAsRUFBTUosaUJBR0RrRCxFQUFXcUIsZ0JBQWdCbkUsRUFBTVYsVUFDZixJQUFuQjIyQixFQUFTMS9ELFFBRVRrZ0UsR0FBaUJSLEVBQVMxL0QsTUFDMUJtZ0UsR0FBYyxFQUNkMTJCLEVBQU1KLGtCQUtsQixJQUFJcnBDLEVBQVEsS0FJWixHQUhJbWdFLElBQ0FuZ0UsRUFBUWtnRSxHQUVFLE9BQVZsZ0UsRUFFQSxPQURBbS9ELEdBQWFDLEVBQVNRLEVBQVFuMkIsRUFBT3pwQyxJQUM5QixHQUtuQixPQUFPLEVDNXZCSixNQUFNb2dFLEdBQW9DLENBQzdDanpCLE9BQVEsSUFDUmpCLFdBQVksb0JBR0htMEIsV0FBMEJDLG1CQUduQ24yRCxZQUFZbzJELEVBQVVDLEdBQ2xCaHdCLE1BQU0rdkIsRUFBS0MsR0FDWDk2RCxLQUFLODZELE9BQVNBLEVBR2xCQyxVQUNJLElBQUlDLFlBQUVBLEdBQWdCaDdELEtBRXRCZzdELEVBQVkxMEQsUUFFWixJQUFJMjBELFVBQVFELEdBQ1BwMkIsUUFBUSwyQkFDUnMyQixRQUNHLGlLQUVIQyxTQUFTOTRELEdBQ05BLEVBQ0srNEQsZUFBZSxlQUNmbjJCLFNBQVNqbEMsS0FBSzg2RCxPQUFPTyxTQUFTNXpCLFFBQzlCNnpCLFVBQWdCaGhFLHFDQUNiMEYsS0FBSzg2RCxPQUFPTyxTQUFTNXpCLE9BQVNudEMsUUFDeEIwRixLQUFLODZELE9BQU9TLHNCQUlsQyxJQUFJTixVQUFRRCxHQUNQcDJCLFFBQVEsdUJBQ1JzMkIsUUFDRyw4SUFFSEMsU0FBUzk0RCxHQUNOQSxFQUNLKzRELGVBQWUsY0FDZm4yQixTQUFTamxDLEtBQUs4NkQsT0FBT08sU0FBUzcwQixZQUM5QjgwQixVQUFnQmhoRSxxQ0FDYjBGLEtBQUs4NkQsT0FBT08sU0FBUzcwQixXQUFhbHNDLFFBQzVCMEYsS0FBSzg2RCxPQUFPUyw2QkNWckJDLFdBQWdCQyxTQUczQkMsa0RBQ0ZsUyxRQUFRenNELElBQUkseUNBRU5pRCxLQUFLMjdELGVBRVgzN0QsS0FBSzQ3RCxjQUFjLElBQUlqQixHQUFrQjM2RCxLQUFLNjZELElBQUs3NkQsT0FFbkRBLEtBQUs2N0QsbUNBQ0QsVUFDQTc3RCxLQUFLODdELGNBQWNqdEQsS0FBSzdPLE9BRzVCQSxLQUFLKzdELFdBQVcsQ0FDWnA3QyxHQUFJLHlCQUNKNWMsS0FBTSx5QkFDTk8sU0FBVSxJQUFNdEUsS0FBS2c4RCxhQUFheitCLEdBQVVrTyxRQUdoRHpyQyxLQUFLKzdELFdBQVcsQ0FDWnA3QyxHQUFJLHdCQUNKNWMsS0FBTSx3QkFDTk8sU0FBVSxJQUFNdEUsS0FBS2c4RCxhQUFheitCLEdBQVVxTyxPQUdoRDVyQyxLQUFLKzdELFdBQVcsQ0FDWnA3QyxHQUFJLHNCQUNKNWMsS0FBTSxzQkFDTk8sU0FBVSxJQUFNdEUsS0FBS2c4RCxhQUFheitCLEdBQVVpUCxjQUk5Q212Qix3REFDRjM3RCxLQUFLcTdELFNBQVd0dEQsT0FBT2lQLE9BQ25CLEdBQ0EwOUMsU0FDTTE2RCxLQUFLaThELGVBSWJWLDhEQUNJdjdELEtBQUtrOEQsU0FBU2w4RCxLQUFLcTdELGFBRzdCYyxtQkFBbUJ0bkIsRUFBaUIrTCxFQUFxQndiLGFSc2xEMUJ4YixFQUFxQm5SLEdBRXhDa0UsR0FBVWlOLEdBQVF4K0MsT0FBTyxRQUFRUSxTQUVuQzRnRCxHQUNFNUMsR0FDUDMrQyxPQUFPLE9BQ1BJLEtBQUtvdEMsR0FDTDFtQyxNQUFNLG1CQUFvQixTQUMxQkEsTUFBTSxnQkFBaUIsUUFDdkJBLE1BQU0sVUFBVyxRQUNqQkEsTUFBTSxRQUFTLE9RaG1EaEJzekQsQ0FBNkJ6YixFQUFRL0wsR0FDckN1bkIsRUFBR2p4RCxZQUFZeTFDLEdBSW5CMGIsV0FDSTlTLFFBQVF6c0QsSUFBSSxxQ0FHaEJ3L0QsaUJBQ0k5MEIsRUFDQSswQixHQUE2QixHQUU3QixJQUFJQyxFQUFpQixHQUVyQixJQUFLLElBQUlDLEtBQVFqMUIsRUFBTzNnQyxTQUNoQjQxRCxhQUFnQjFELFFBQ08sT0FBbkIwRCxFQUFLQyxXQUNMRixFQUFNajRELEtBQUtrNEQsR0FHWEEsYUFBZ0JFLFdBQVdKLElBQzNCQyxFQUFRQSxFQUFNbDRELE9BQU92RSxLQUFLdThELGlCQUFpQkcsS0FLdkQsT0FBT0QsRUFHTEksU0FDRkosRUFDQTUxQixFQUNBMjFCLEdBQTZCLDRDQUU3QixJQUFLQyxFQUFPLE9BRVosSUFBSUssRUFBaUJqMkIsRUFBV1ksT0FDNUJzMUIsRUFBd0JsMkIsRUFBV2MsbUJBQ25DcTFCLEVBQWlCbjJCLEVBQVdhLEtBQzVCdTFCLEVBQTJCcDJCLEVBQVdlLHdCQUN0Q0MsRUFBMEJoQixFQUFXZ0Isd0JBSXpDLElBQUtrMUIsRUFBdUIsQ0FDeEIsSUFBSXQxQixFQUFTem5DLEtBQUs2NkQsSUFBSXFDLE1BQU1DLHNCQUN4QkMsZ0JBQWNOLElBRWxCLEdBQUlyMUIsR0FBVUEsYUFBa0JtMUIsVUFBUyxDQUNyQyxJQUFJUyxFQUFjcjlELEtBQUt1OEQsaUJBQWlCOTBCLEdBQ3hDLElBQUssSUFBSUMsS0FBUTIxQixFQUNiWixFQUFNajRELEtBQUtrakMsSUFPdkIsSUFBSyxJQUFJdUgsS0FBWSt0QixFQUFnQixDQUNqQyxJQUFJeDdELEVBQU95dEMsRUFDTnp0QyxFQUFLb3ZDLFNBQVMsU0FDZnB2QyxHQUFRLE9BRVpBLEVBQU80N0QsZ0JBQWM1N0QsR0FHckIsSUFBSWttQyxFQUFPMW5DLEtBQUs2NkQsSUFBSXFDLE1BQU1DLHNCQUFzQjM3RCxHQUU1Q2ttQyxHQUFRQSxhQUFnQnN4QixTQUN4QnlELEVBQU1qNEQsS0FBS2tqQyxHQVFuQixJQUFJNDFCLEVBQXVCLEVBQ3ZCQyxHQUFnQyxFQUNKLEtBQTVCMTFCLEVBQ0EwMUIsR0FBZ0MsRUFDekIsV0FBV2o2RCxLQUFLdWtDLElBRXZCeTFCLEVBQXVCejZCLFdBQVdnRixHQUNsQzAxQixHQUFnQyxHQUN4QixZQUFZajZELEtBQUt1a0MsS0FFekIwMUIsR0FBZ0MsR0FFcEMsSUFBSyxJQUFJdHVCLEtBQVlndUIsRUFBMEIsQ0FDdENodUIsRUFBUzJCLFNBQVMsU0FDbkIzQixHQUFZLE9BRWhCLElBQUl2SCxFQUFPMW5DLEtBQUs2NkQsSUFBSXFDLE1BQU1DLHNCQUN0QkMsZ0JBQWNudUIsSUFFbEIsR0FBSXZILEdBQVFBLGFBQWdCc3hCLFFBQU8sQ0FFL0IsSUFBSVosRUFBWXA0RCxLQUFLNjZELElBQUkyQyxjQUFjQyxhQUFhLzFCLEdBRWhEZzJCLFNBRG9CMTlELEtBQUs2NkQsSUFBSXFDLE1BQU1TLFFBQVFDLEtBQUtsMkIsRUFBS2xtQyxPQUNqQ3FDLE1BQ3BCLG1DQUlKLEtBQUt1MEQsTUFBQUEsU0FBQUEsRUFBV3lGLE9BQU8sU0FFdkIsSUFBSyxJQUFJQyxLQUFRMUYsRUFBVXlGLE1BQU8sQ0FDOUIsSUFBS0MsRUFBTSxTQUNYLElBQUlDLEVBQ0EvOUQsS0FBSzY2RCxJQUFJMkMsY0FBY1EscUJBQ25CRixFQUFLQSxLQUNMN3VCLEdBRVIsR0FBSTh1QixHQUFjQSxhQUFzQi9FLFFBQU8sQ0FDM0MsR0FBSXVFLEVBQStCLENBRS9CLElBQUlVLEVBQWFILEVBQUt6OEQsU0FBU3NnQixJQUFJeGYsS0FFbkMsR0FBSTg3RCxHQUFjLEdBQUtBLEVBQWFQLEVBQU1qaUUsT0FBUSxDQUM5QyxJQUtJaTZELEVBTE9nSSxFQUFNTyxHQUtHcDZELE1BQU1pNkQsRUFBS0ksVUFFL0IsR0FBd0IsSUFBcEJ4SSxFQUFTajZELE9BQWMsQ0FDdkIsSUFHSStTLEVBSEEwa0MsRUFBVXdpQixFQUFTLEdBQUc5eEQsT0FFdEJnL0IsRUFBUSxJQUFJcnhCLE9BRERzMkIsRUFDa0IsTUFFakMsS0FBUXI1QixFQUFRbzBCLEVBQU1sbkIsS0FBS3czQixJQUV2QixRQUVRLElBREcxa0MsRUFBTWhCLGFBR1QsSUFER2dCLEVBQU1oQixPQUFPbFQsTUFFdEIsQ0FFRSxJQUFJMC9ELEVBQ0EzRCxHQUNJN25ELEVBQU1oQixPQUFPbFQsTUFBTXNKLE9BQ25CaWpDLEVBQVd5QixjQUVuQixHQUF1QixPQUFuQjB4QixFQUFTMS9ELE1BQWdCLENBQ3pCZ2pFLEVBQ0l0RCxFQUFTMS9ELE1BQ2IsVUFReEIsSUFBSyxJQUFJeUIsRUFBSSxFQUFHQSxFQUFJdWhFLEVBQXNCdmhFLElBQ3RDMGdFLEVBQU1qNEQsS0FBS3U1RCxVQVU3QmpDLGNBQ0YvNUMsRUFDQXE2QyxFQUNBK0IsNENBR0EsTUFBTXZkLEVBQVNuN0MsU0FBU0ssY0FBYyxPQUV0QyxJQUFJczRELEVBQVdyOEMsRUFBT25lLE9BR2xCeTZELEVBQVVyK0QsS0FBSzY2RCxJQUFJcUMsTUFBTW9CLFVBQVUsV0FDbkNDLEVBQVNwL0QsTUFBTWsvRCxHQUFTNXpDLEtBQUssS0FBS3RkLEtBQUssSUFDM0NpeEQsRUFBV0EsRUFBU2p6QyxRQUFRLE9BQVFvekMsR0FHcEMsSUFBSUMsV0hzbkJSSixFQUNBdEQsR0FFQSxJQUFJMUQsRUFDSixJQUVJQSxFQUFPcUgsWUFBVUwsR0FDbkIsTUFBT2hlLEdBQ0wsSUFBSTNRLEVBQWUscUJBRW5CLE9BREErWixRQUFRenNELElBQUlxakQsR0FDTDNRLEVBRVgsSUFBSzJuQixFQUVELE1BRG1CLHFCQUl2QixJQUFJc0gsRUFBa0I1RyxHQUF3QlYsR0FHMUMzbkIsRUFBZSxHQUduQixJQUFLaXZCLEVBQWdCdDNCLFNBQVMsZ0JBRTFCLE1BRG1CLDZDQUd2QixJQUFJakYsRUFBOEIsR0FDbEMsR0FBaUMsaUJBQXRCaTFCLEVBQUtqMUIsY0FBbUQsT0FBdEJpMUIsRUFBS2oxQixjQUM5QyxHQUFJaGpDLE1BQU1tdkIsUUFBUThvQyxFQUFLajFCLGNBQ25CLElBQUssSUFBSWpULEtBQVVrb0MsRUFBS2oxQixhQUNwQixHQUFzQixpQkFBWGpULEVBQXFCLENBQzVCLEdBQWUsS0FBWEEsRUFFRyxDQUNIdWdCLEVBQWUsc0NBQ2YsTUFIQXROLEVBQWEzOUIsS0FBSzBxQixTQVEvQixHQUFpQyxpQkFBdEJrb0MsRUFBS2oxQixhQUEyQixDQUM5QyxJQUFJdXpCLEVBQVdGLEdBQWtCNEIsRUFBS2oxQixjQUV0QyxHQUFJdXpCLEVBQVNqNkQsT0FBUyxFQUNsQixJQUFLLElBQUl1N0QsS0FBU3RCLEVBQVUsQ0FFeEIsR0FEQXNCLEVBQVFBLEVBQU1wekQsT0FDQSxLQUFWb3pELEVBRUcsQ0FDSHZuQixFQUFlLHNDQUNmLE1BSEF0TixFQUFhMzlCLEtBQUt3eUQsT0FNRyxLQUF0QkksRUFBS2oxQixhQUNac04sRUFBZSxzQ0FFZnROLEVBQWEzOUIsS0FBSzR5RCxFQUFLajFCLG1CQUczQnNOLEVBQWUsdUNBRW5CLElBQUssSUFBSWxMLEVBQU0sRUFBR0EsRUFBTXBDLEVBQWExbUMsT0FBUThvQyxJQUN6Q3BDLEVBQWFvQyxHQUFPa3lCLEdBQTBCdDBCLEVBQWFvQyxJQUkvRCxHQUFxQixLQUFqQmtMLEVBQ0EsT0FBT0EsRUFHWCxJQUFJa3ZCLEVBQWN4OEIsRUFBYTFtQyxPQUcvQixJQUFLaWpFLEVBQWdCdDNCLFNBQVMsY0FFMUIsTUFEbUIsMkNBR3ZCLElBQUlsRixFQUFnQyxHQUNoQzA4QixFQUFnQmxJLEdBQ2hCLGFBQ0FVLEVBQUtsMUIsV0FDTHk4QixFQUNBLEdBQ0F2SixJQUNBLEdBRUosR0FBNkIsaUJBQWxCd0osRUFDUCxPQUFPQSxFQUVYLElBQUssSUFBSUMsS0FBV0QsRUFDaEIsT0FBUUMsRUFBUXBqRCxlQUNaLElBQUssTUFDRHltQixFQUFXMTlCLEtBQUs4NEIsR0FBV3doQyxLQUMzQixNQUNKLElBQUssY0FDRDU4QixFQUFXMTlCLEtBQUs4NEIsR0FBV3loQyxhQUMzQixNQUNKLElBQUssT0FDRDc4QixFQUFXMTlCLEtBQUs4NEIsR0FBVzBoQyxNQUMzQixNQUNKLElBQUssWUFDRDk4QixFQUFXMTlCLEtBQUs4NEIsR0FBVzJoQyxVQUMzQixNQUNKLElBQUssZUFDRC84QixFQUFXMTlCLEtBQUs4NEIsR0FBVzRoQyxhQUMzQixNQUNKLElBQUssT0FDRGg5QixFQUFXMTlCLEtBQUs4NEIsR0FBVzZoQyxNQUMzQixNQUNKLElBQUssVUFDRGo5QixFQUFXMTlCLEtBQUs4NEIsR0FBVzhoQyxTQUMzQixNQUNKLElBQUssUUFDRGw5QixFQUFXMTlCLEtBQUs4NEIsR0FBV3FGLE9BQzNCLE1BQ0osSUFBSyxXQUNEVCxFQUFXMTlCLEtBQUs4NEIsR0FBVytoQyxVQUMzQixNQUNKLElBQUssT0FHTCxJQUFLLFdBQ0RuOUIsRUFBVzE5QixLQUFLODRCLEdBQVdnOEIsTUFDM0IsTUFDSixJQUFLLFlBQ0RwM0IsRUFBVzE5QixLQUFLODRCLEdBQVdpOEIsVUFDM0IsTUFDSixJQUFLLGVBQ0RyM0IsRUFBVzE5QixLQUFLODRCLEdBQVdrOEIsYUFLdkMsR0FDSXQzQixFQUFXa0YsU0FBUzlKLEdBQVdxRixRQUMvQlQsRUFBV3IvQixRQUFReEUsR0FBTUEsSUFBTWkvQixHQUFXcUYsUUFBT2xuQyxPQUFTLEVBSTFELE1BREksNERBTVIsSUFBSTZqRSxFQUF1QyxHQUN2Q0MsRUFBMkI3SSxHQUMzQixZQUNBVSxFQUFLaDFCLFVBQ0x1OEIsRUFDQSxHQUNBLE1BQ0EsR0FFSixHQUF3QyxpQkFBN0JZLEVBQ1AsT0FBT0EsRUFFWEQsRUFBd0JDLEVBQXlCejdELEtBQUswL0IsR0FDdEMsVUFBUkEsR0FBMkIsUUFBUkEsRUFDWixJQUVKQSxJQUtYLElBQUlnOEIsRUFBY3BKLEdBQ2QsV0FDQWdCLEVBQUs1dkIsU0FDTG0zQixHQUNDLEdBQ0QsR0FFSixHQUEyQixpQkFBaEJhLEVBQ1AsT0FBT0EsRUFFWCxJQUFJaDRCLEVBQVdnNEIsRUFBWTE3RCxLQUFLbkksR0FDeEJBLEVBQUksR0FBS0EsR0FBS2dqRSxHQUNOLEVBRUxoakUsSUFLUDRyQyxFQUF3QixHQUM1QixJQUFLLElBQUloRCxFQUFNLEVBQUdBLEVBQU1wQyxFQUFhMW1DLE9BQVE4b0MsSUFBTyxDQUNoRCxJQUFJUixFQUFRLElBQUk5QixHQUNac0YsRUFBUTlyQyxPQUNSeW1DLEVBQVdxQyxHQUNYcEMsRUFBYW9DLElBRWpCUixFQUFNUixhQUFhKzdCLEVBQXNCLzZCLElBQ3JDaUQsRUFBU0osU0FBUzdDLEtBQU1SLEVBQU10QixnQkFBaUIsR0FDbkQ4RSxFQUFRL2lDLEtBQUt1L0IsR0FLakIsSUFBSThDLEVBQWEsSUFBSVMsR0FBV0MsR0FDNUJrNEIsRUFBbUIzSCxHQUF3Qmp4QixHQUMzQzY0QixFQUF3QixDQUFDLGFBQWMsZUFBZ0IsYUFFdkRDLEVBQWUsR0FDZkMsRUFBYyxHQUNkQyxFQUFjLEdBQ2RDLEVBQWtCLEdBQ2xCQyxFQUFnQixHQUNoQkMsRUFBa0IsR0FDbEJDLEVBQWlCLEdBQ3JCLElBQUssSUFBSXQ0RCxLQUFPKzJELEVBQ1IsZUFBZXA3RCxLQUFLcUUsS0FDcEJnNEQsRUFBYW43RCxLQUFLbUQsR0FDbEIrM0QsRUFBc0JsN0QsS0FBS21ELElBRTNCLGNBQWNyRSxLQUFLcUUsS0FDbkJpNEQsRUFBWXA3RCxLQUFLbUQsR0FDakIrM0QsRUFBc0JsN0QsS0FBS21ELElBRTNCLGNBQWNyRSxLQUFLcUUsS0FDbkJrNEQsRUFBWXI3RCxLQUFLbUQsR0FDakIrM0QsRUFBc0JsN0QsS0FBS21ELElBRTNCLGtCQUFrQnJFLEtBQUtxRSxLQUN2Qm00RCxFQUFnQnQ3RCxLQUFLbUQsR0FDckIrM0QsRUFBc0JsN0QsS0FBS21ELElBRTNCLGlCQUFpQnJFLEtBQUtxRSxLQUN0QnM0RCxFQUFlejdELEtBQUttRCxHQUNwQiszRCxFQUFzQmw3RCxLQUFLbUQsSUFFM0IsZ0JBQWdCckUsS0FBS3FFLEtBQ3JCbzRELEVBQWN2N0QsS0FBS21ELEdBQ25CKzNELEVBQXNCbDdELEtBQUttRCxJQUUzQixrQkFBa0JyRSxLQUFLcUUsS0FDdkJxNEQsRUFBZ0J4N0QsS0FBS21ELEdBQ3JCKzNELEVBQXNCbDdELEtBQUttRCxJQUluQyxJQUFJdTRELEVBQXdCLEdBQzVCLElBQUssSUFBSXY0RCxLQUFPKzJELEVBQ1osR0FBSSxrQkFBa0JwN0QsS0FBS3FFLEdBQU0sQ0FFN0IsSUFBSXc0RCxHQUFtQixFQUNuQkMsRUFBcUJ6NEQsRUFBSXdqQixRQUFRLFVBQVcsSUFPaEQsR0FMSWcxQyxFQUR1QixLQUF2QkMsRUFDa0IsRUFFQXY5QixXQUFXdTlCLEdBSTdCNzRCLEVBQVErVSxNQUFNajZCLEdBQ0hBLEVBQUVnaEIsVUFBWTg4QixJQUl6QixPQURBMXdCLEVBQWUsa0NBQW9DOW5DLEVBQU0sSUFDbEQ4bkMsRUFHWHl3QixFQUFzQjE3RCxLQUFLbUQsR0FDM0IrM0QsRUFBc0JsN0QsS0FBS21ELEdBSW5DLElBQUssSUFBSUEsS0FBTysyRCxFQUNaLElBQ0tlLEVBQWlCcjRCLFNBQVN6L0IsS0FDMUIrM0QsRUFBc0J0NEIsU0FBU3ovQixHQUdoQyxPQURBOG5DLEVBQWUsSUFBTTluQyxFQUFNLDRCQUNwQjhuQyxFQVlmLEdBQXdCLElBUHBCa3dCLEVBQWFsa0UsT0FDYm1rRSxFQUFZbmtFLE9BQ1pva0UsRUFBWXBrRSxPQUNacWtFLEVBQWdCcmtFLE9BQ2hCd2tFLEVBQWV4a0UsT0FDZnNrRSxFQUFjdGtFLE9BQ2R1a0UsRUFBZ0J2a0UsT0FFaEIsTUFBTyx3RkFJWG9yQyxFQUFXWSxPQUFTK3VCLEdBQ2hCWSxNQUFBQSxTQUFBQSxFQUFNM3ZCLE9BQ05xekIsRUFBT08sU0FBUzV6QixRQUVhLEtBQTdCWixFQUFXWSxPQUFPN2pDLFNBQ2xCaWpDLEVBQVdZLE9BQVNxekIsRUFBT08sU0FBUzV6QixRQUl4QyxJQUFJNDRCLEVBQWlCdkYsRUFBT0QsSUFBSXFDLE1BQU1DLHNCQUNsQ0MsZ0JBQWN2MkIsRUFBV1ksU0FFN0IsS0FBSzQ0QixHQUFvQkEsYUFBMEJ6RCxXQUUvQyxNQURtQixXQUFhLzFCLEVBQVdZLE9BQVMsa0JBS3hELEdBQXlCLGlCQUFkMnZCLEVBQUsxdkIsS0FBbUIsQ0FDL0IsSUFBSTQ0QixFQUFXckosR0FBZSxPQUFRRyxFQUFLMXZCLE1BQzNDLEdBQXdCLGlCQUFiNDRCLEVBQ1AsT0FBT0EsRUFFWHo1QixFQUFXYSxLQUFPNDRCLEVBV3RCLEdBTnVDLGtCQUE1QmxKLEVBQUt6dkIscUJBQ1pkLEVBQVdjLG1CQUFxQnl2QixFQUFLenZCLG9CQUtHLGlCQUFqQ3l2QixFQUFLeHZCLHdCQUFzQyxDQUNsRCxJQUFJMDRCLEVBQVdySixHQUNYLDBCQUNBRyxFQUFLeHZCLHlCQUVULEdBQXdCLGlCQUFiMDRCLEVBQ1AsT0FBT0EsRUFFWHo1QixFQUFXZSx3QkFBMEIwNEIsRUFLekN6NUIsRUFBV2dCLHdCQUEwQjJ1QixHQUNqQ1ksTUFBQUEsU0FBQUEsRUFBTXZ2Qix3QkFDTmhCLEVBQVdnQix5QkFLZixNQUFNckIsRUFBYTR3QixFQUFLNXdCLFdBNEJ4QixHQXpCK0IsaUJBQXBCNHdCLEVBQUs1d0IsV0FDWSxLQUFwQjR3QixFQUFLNXdCLFdBQ0xLLEVBQVdMLFdBQWFzMEIsRUFBT08sU0FBUzcwQixXQUV4Q0ssRUFBV0wsV0FBYUEsRUFHNUJLLEVBQVdMLFdBQWFzMEIsRUFBT08sU0FBUzcwQixXQUs1Q0ssRUFBV2lCLGlCQUFtQjB1QixHQUMxQlksTUFBQUEsU0FBQUEsRUFBTXR2QixpQkFDTmpCLEVBQVdpQixrQkFJZmpCLEVBQVdrQixpQkFBbUJ5dUIsR0FDMUJZLE1BQUFBLFNBQUFBLEVBQU1ydkIsaUJBQ05sQixFQUFXa0Isa0JBS2UsaUJBQW5CcXZCLEVBQUtsekIsVUFBd0IsQ0FDcEMsR0FBSSx5Q0FBeUM1Z0MsS0FBSzh6RCxFQUFLbHpCLFdBR25ELE1BREksbUdBR1IsSUFBSXE4QixFQUFldEksR0FDZmIsRUFBS2x6QixVQUNMMkMsRUFBV2lCLGlCQUNYakIsRUFBV2tCLGtCQUtYN0QsRUFBWSxLQUNaczhCLEdBQW1CLEVBaUJ2QixHQWhCQXQ4QixFQUFZbW5CLEdBQ1JrVixFQUNBMTVCLEVBQVdMLFlBSVh0QyxFQUNBczhCLEdBQW1CLEdBRW5CdDhCLEVBQVlrbEIsR0FBaUJtWCxFQUFjMTVCLEVBQVdMLFlBQ2xEdEMsRUFBVWdPLFlBQ1ZzdUIsR0FBbUIsS0FLdEJBLEdBQWtDLE9BQWR0OEIsRUFJckIsTUFGSSw0RUFDQTJDLEVBQVdMLFdBR25CSyxFQUFXM0MsVUFBWUEsRUFJM0IsR0FBNEIsaUJBQWpCa3pCLEVBQUtqekIsUUFBc0IsQ0FDbEMsR0FBSSx5Q0FBeUM3Z0MsS0FBSzh6RCxFQUFLanpCLFNBR25ELE1BREksaUdBR1IsSUFBSXM4QixFQUFheEksR0FDYmIsRUFBS2p6QixRQUNMMEMsRUFBV2lCLGlCQUNYakIsRUFBV2tCLGtCQUdYNUQsRUFBVSxLQUNWdThCLEdBQWlCLEVBZXJCLEdBZEF2OEIsRUFBVWtuQixHQUNOb1YsRUFDQTU1QixFQUFXTCxZQUVYckMsRUFDQXU4QixHQUFpQixHQUVqQnY4QixFQUFVaWxCLEdBQWlCcVgsRUFBWTU1QixFQUFXTCxZQUM5Q3JDLEVBQVErTixZQUNSd3VCLEdBQWlCLEtBS3BCQSxHQUE4QixPQUFadjhCLEVBSW5CLE1BRkksd0VBQ0EwQyxFQUFXTCxXQUduQkssRUFBVzFDLFFBQVVBLEVBRXpCLEdBQzZCLE9BQXpCMEMsRUFBVzNDLFdBQ1gyQyxFQUFXM0MsVUFBVWdPLFdBQ0UsT0FBdkJyTCxFQUFXMUMsU0FDWDBDLEVBQVcxQyxRQUFRK04sV0FHZnJMLEVBQVcxQyxRQUFVMEMsRUFBVzNDLFVBR2hDLE1BREkscURBUVoyQyxFQUFXVyxTQUFXQSxFQUl0QixJQUFJbTVCLEVBQWlCakssR0FDakIsY0FDQVUsRUFBS3J3QixZQUNMNDNCLEVBQ0EsV0FDQSxNQUNBLEdBRUosR0FBOEIsaUJBQW5CZ0MsRUFDUCxPQUFPQSxFQUdYLElBQUlDLEVBQWMsRUFDbEIsSUFBSyxJQUFJcjhCLEVBQU0sRUFBR0EsRUFBTW84QixFQUFlbGxFLE9BQVE4b0MsSUFDdkNzQyxFQUFXVyxTQUFTSixTQUFTN0MsSUFDTCxhQUF4Qm84QixFQUFlcDhCLEtBQ2ZvOEIsRUFBZXA4QixHQUFPLFdBQWFxOEIsRUFBWXBrRCxXQUMvQ29rRCxLQUlSLEdBQUksSUFBSUMsSUFBSUYsR0FBZ0Jwd0QsT0FBU293RCxFQUFlbGxFLE9BSWhELE1BRG1CLCtDQUZuQm9yQyxFQUFXRSxZQUFjNDVCLEVBUTdCLElBQUlHLEVBQWdCMUssR0FDaEIsYUFDQWdCLEVBQUtwdkIsV0FDTDIyQixFQUNBLEdBQ0EsR0FFSixHQUE2QixpQkFBbEJtQyxFQUNQLE9BQU9BLEVBRVhqNkIsRUFBV21CLFdBQWE4NEIsRUFJeEIsSUFBSUMsRUFBeUJwTCxHQUN6QixzQkFDQXlCLEVBQUtudkIsb0JBQ0wwMkIsR0FDQSxHQUNBLEdBRUosR0FBc0MsaUJBQTNCb0MsRUFDUCxPQUFPQSxFQUVYbDZCLEVBQVdvQixvQkFBc0I4NEIsRUFJakMsSUFBSUMsRUFBcUJyTCxHQUNyQixrQkFDQXlCLEVBQUtsdkIsZ0JBQ0x5MkIsR0FDQSxHQUNBLEdBRUosR0FBa0MsaUJBQXZCcUMsRUFDUCxPQUFPQSxFQUVYbjZCLEVBQVdxQixnQkFBa0I4NEIsRUFJN0IsSUFBSUMsRUFBV3RMLEdBQ1gsUUFDQXlCLEVBQUtqdkIsTUFDTHcyQixHQUNBLEdBQ0EsR0FFSixHQUF3QixpQkFBYnNDLEVBQ1AsT0FBT0EsRUFFWHA2QixFQUFXc0IsTUFBUTg0QixFQUluQixJQUFJQyxFQUFhOUssR0FDYixVQUNBZ0IsRUFBS3h4QixRQUNMKzRCLEVBQ0EsTUFDQSxHQUVKLEdBQTBCLGlCQUFmdUMsRUFDUCxPQUFPQSxFQUVYcjZCLEVBQVdqQixRQUFVczdCLEVBSXJCLElBQUlDLEVBQWdCL0ssR0FDaEIsYUFDQWdCLEVBQUtodkIsV0FDTHUyQixFQUNBLEdBQ0EsR0FFSixHQUE2QixpQkFBbEJ3QyxFQUNQLE9BQU9BLEVBRVh0NkIsRUFBV3VCLFdBQWErNEIsRUFJeEIsSUFBSUMsRUFBOEJoTCxHQUM5QiwyQkFDQWdCLEVBQUsvdUIseUJBQ0xzMkIsRUFDQSxNQUNBLEdBRUosR0FBMkMsaUJBQWhDeUMsRUFDUCxPQUFPQSxFQU1YLEdBSkF2NkIsRUFBV3dCLHlCQUEyQis0QixPQUlMLElBQXRCaEssRUFBSzl1QixhQUE4QixDQUMxQyxJQUFJZ0wsRUFBT3drQixHQUF3QlYsRUFBSzl1QixjQUV4QyxJQUFLLElBQUkzZ0MsS0FBTzJyQyxFQUFNLENBQ2xCLElBQUlqeEMsRUFBT3NGLEVBQUkvRCxPQUNmaWpDLEVBQVd5QixhQUFham1DLEdBQVErMEQsRUFBSzl1QixhQUFham1DLElBTTNCLGlCQUFwQiswRCxFQUFLenVCLGFBQ1o5QixFQUFXOEIsV0FBYXl1QixFQUFLenVCLFlBSUMsa0JBQXZCeXVCLEVBQUt4dUIsZ0JBQ1ovQixFQUFXK0IsY0FBZ0J3dUIsRUFBS3h1QixlQUlwQyxJQUFJeTRCLEVBQVlqTCxHQUF3QixTQUFVZ0IsRUFBSzN1QixPQUFRLEVBQUcsSUFBSSxHQUN0RSxHQUF5QixpQkFBZDQ0QixFQUNQLE9BQU9BLEVBRVgsR0FBSUEsRUFBVTVsRSxPQUFTLEVBQ25CLE1BQU8scUZBRVhvckMsRUFBVzRCLE9BQVMsSUFBSUMsR0FDcEIyNEIsRUFBVSxHQUNWQSxFQUFVLEdBQ1ZBLEVBQVUsR0FDVkEsRUFBVSxJQUtkLElBQUssSUFBSUMsS0FBY3BCLEVBQXVCLENBQzFDLElBQUloM0IsRUFBZ0IsSUFBSUUsR0FDcEJtNEIsRUFBb0JuSyxFQUFLa0ssR0FFekJFLEVBQTBCMUosR0FBd0I1dUIsR0FDbER3MUIsRUFBa0I1RyxHQUF3QnlKLEdBRzlDLElBQUssSUFBSTU1RCxLQUFPKzJELEVBQ1osSUFBSzhDLEVBQXdCcDZCLFNBQVN6L0IsR0FFbEMsT0FEQThuQyxFQUFlLElBQU05bkMsRUFBTSw0QkFDcEI4bkMsRUFLZixJQUFJMHdCLEdBQW1CLEVBQ25CQyxFQUFxQmtCLEVBQVduMkMsUUFBUSxVQUFXLElBRW5EZzFDLEVBRHVCLEtBQXZCQyxFQUNrQixFQUVBdjlCLFdBQVd1OUIsR0FFakNsM0IsRUFBY3ZvQixHQUFLdy9DLEVBR25CajNCLEVBQWNubEMsS0FBT3l5RCxHQUNqQitLLE1BQUFBLFNBQUFBLEVBQW1CeDlELEtBQ25CbWxDLEVBQWNubEMsTUFJbEIsSUFBSTA5RCxFQUFXeEssR0FBZSxRQUFTc0ssTUFBQUEsU0FBQUEsRUFBbUJsNEIsT0FDMUQsR0FBd0IsaUJBQWJvNEIsRUFDUCxPQUFPQSxFQUVYdjRCLEVBQWNHLE1BQVFvNEIsRUFFdEIsSUFBSUMsRUFBV3g0QixFQUFjRyxNQUFNNXRDLE9BRy9Ca21FLEVBQVcxSyxHQUFlLFFBQVNzSyxNQUFBQSxTQUFBQSxFQUFtQmo0QixPQUMxRCxHQUF3QixpQkFBYnE0QixFQUNQLE9BQU9BLEVBSVgsR0FGQXo0QixFQUFjSSxNQUFRcTRCLEVBRWxCejRCLEVBQWNJLE1BQU03dEMsU0FBV2ltRSxFQUcvQixNQURJLG9EQUlSNzZCLEVBQVdxQyxjQUFjMWtDLEtBQUswa0MsR0FLbEMsSUFBSyxJQUFJMDRCLEtBQVdqQyxFQUFjLENBQzlCLElBQUl4OUQsRUFBTyxJQUFJMG9DLEdBQ1hnM0IsRUFBV3pLLEVBQUt3SyxHQUVoQkUsRUFBaUJoSyxHQUF3QjMxRCxHQUN6Q3U4RCxFQUFrQjVHLEdBQXdCK0osR0FHOUMsSUFBSyxJQUFJbDZELEtBQU8rMkQsRUFDWixJQUFLb0QsRUFBZTE2QixTQUFTei9CLEdBRXpCLE9BREE4bkMsRUFBZSxJQUFNOW5DLEVBQU0sNEJBQ3BCOG5DLEVBSWYsSUFBSXN5QixFQUEwQjVLLEdBQXFCMEssRUFBVTEvRCxHQUM3RCxHQUF1QyxpQkFBNUI0L0QsRUFDUCxPQUFPQSxFQUlYLElBQUlDLEVBQWV0TCxHQUNmLFlBQ0FtTCxNQUFBQSxTQUFBQSxFQUFVOTJCLFVBQ1Y0ekIsRUFDQSxHQUNBcEosSUFDQSxHQUVKLEdBQTRCLGlCQUFqQnlNLEVBQ1AsT0FBT0EsRUFFWDcvRCxFQUFLNG9DLFVBQVlpM0IsRUFJakIsSUFBSUMsRUFBZTdMLEdBQ2YsWUFDQXlMLE1BQUFBLFNBQUFBLEVBQVU3MkIsVUFDVjJ6QixFQUNBLEtBQ0EsR0FFSixHQUE0QixpQkFBakJzRCxFQUNQLE9BQU9BLEVBRVg5L0QsRUFBSzZvQyxVQUFZaTNCLEVBSWpCLElBQUlDLEVBQWN2TSxHQUNkLFdBQ0FrTSxNQUFBQSxTQUFBQSxFQUFVNTJCLFNBQ1YwekIsR0FDQSxHQUNBLEdBRUosR0FBMkIsaUJBQWhCdUQsRUFDUCxPQUFPQSxFQUVYLy9ELEVBQUs4b0MsU0FBV2kzQixFQUloQixJQUFJQyxFQUFleE0sR0FDZixZQUNBa00sTUFBQUEsU0FBQUEsRUFBVTMyQixVQUNWeXpCLEdBQ0EsR0FDQSxHQUVKLEdBQTRCLGlCQUFqQndELEVBQ1AsT0FBT0EsRUFFWGhnRSxFQUFLK29DLFVBQVlpM0IsRUFJakIsSUFBSUMsRUFBZ0IxTCxHQUNoQixhQUNBbUwsTUFBQUEsU0FBQUEsRUFBVTEyQixXQUNWd3pCLEVBQ0EsVUFDQXBKLElBQ0EsR0FFSixHQUE2QixpQkFBbEI2TSxFQUNQLE9BQU9BLEVBRVhqZ0UsRUFBS2dwQyxXQUFhaTNCLEVBSWxCLElBQUlDLEVBQXNCM0wsR0FDdEIsbUJBQ0FtTCxNQUFBQSxTQUFBQSxFQUFVejJCLGlCQUNWdXpCLEVBQ0EsVUFDQXBKLElBQ0EsR0FFSixHQUFtQyxpQkFBeEI4TSxFQUNQLE9BQU9BLEVBRVhsZ0UsRUFBS2lwQyxpQkFBbUJpM0IsRUFJeEIsSUFBSUMsRUFBc0JsTSxHQUN0QixtQkFDQXlMLE1BQUFBLFNBQUFBLEVBQVV4MkIsaUJBQ1ZzekIsRUFDQSxHQUNBLEdBRUosR0FBbUMsaUJBQXhCMkQsRUFDUCxPQUFPQSxFQUVYbmdFLEVBQUtrcEMsaUJBQW1CaTNCLEVBSXhCLElBQUlDLEVBQWVuTSxHQUNmLFlBQ0F5TCxNQUFBQSxTQUFBQSxFQUFVdjJCLFVBQ1ZxekIsRUFDQSxHQUNBLEdBRUosR0FBNEIsaUJBQWpCNEQsRUFDUCxPQUFPQSxFQUVYcGdFLEVBQUttcEMsVUFBWWkzQixFQUlqQixJQUFJQyxFQUFhN00sR0FDYixVQUNBa00sTUFBQUEsU0FBQUEsRUFBVXQyQixRQUNWb3pCLEdBQ0EsR0FDQSxHQUVKLEdBQTBCLGlCQUFmNkQsRUFDUCxPQUFPQSxFQUVYcmdFLEVBQUtvcEMsUUFBVWkzQixFQUlmLElBQUlDLEVBQW1CL0wsR0FDbkIsZ0JBQ0FtTCxNQUFBQSxTQUFBQSxFQUFVcjJCLGNBQ1ZtekIsRUFDQSxPQUNBdEosSUFDQSxHQUVKLEdBQWdDLGlCQUFyQm9OLEVBQ1AsT0FBT0EsRUFFWHRnRSxFQUFLcXBDLGNBQWdCaTNCLEVBR3JCNTdCLEVBQVcxa0MsS0FBS3FDLEtBQUtyQyxHQUt6QixJQUFLLElBQUl1Z0UsS0FBVTlDLEVBQWEsQ0FDNUIsSUFBSS8yQixFQUFNLElBQUk2QyxHQUNWaTNCLEVBQVV2TCxFQUFLc0wsR0FFZkUsRUFBZ0I5SyxHQUF3Qmp2QixHQUN4QzYxQixFQUFrQjVHLEdBQXdCNkssR0FHOUMsSUFBSyxJQUFJaDdELEtBQU8rMkQsRUFDWixJQUFLa0UsRUFBY3g3QixTQUFTei9CLEdBRXhCLE9BREE4bkMsRUFBZSxJQUFNOW5DLEVBQU0sNEJBQ3BCOG5DLEVBSWYsSUFBSXN5QixFQUEwQjVLLEdBQXFCd0wsRUFBUzk1QixHQUM1RCxHQUF1QyxpQkFBNUJrNUIsRUFDUCxPQUFPQSxFQUlYLElBQUljLEVBQWNuTSxHQUNkLFdBQ0FpTSxNQUFBQSxTQUFBQSxFQUFTaDNCLFNBQ1RnekIsRUFDQSxHQUNBcEosSUFDQSxHQUVKLEdBQTJCLGlCQUFoQnNOLEVBQ1AsT0FBT0EsRUFFWGg2QixFQUFJOEMsU0FBV2szQixFQUlmLElBQUlKLEVBQW1CL0wsR0FDbkIsZ0JBQ0FpTSxNQUFBQSxTQUFBQSxFQUFTbjNCLGNBQ1RtekIsRUFDQSxPQUNBdEosSUFDQSxHQUVKLEdBQWdDLGlCQUFyQm9OLEVBQ1AsT0FBT0EsRUFFWDU1QixFQUFJMkMsY0FBZ0JpM0IsRUFHcEI1N0IsRUFBV2dDLElBQUlya0MsS0FBS3FrQyxHQUt4QixJQUFLLElBQUlpNkIsS0FBVWpELEVBQWEsQ0FDNUIsSUFBSS8yQixFQUFNLElBQUkrQyxHQUNWazNCLEVBQVUzTCxFQUFLMEwsR0FFZkUsRUFBZ0JsTCxHQUF3Qmh2QixHQUN4QzQxQixFQUFrQjVHLEdBQXdCaUwsR0FHOUMsSUFBSyxJQUFJcDdELEtBQU8rMkQsRUFDWixJQUFLc0UsRUFBYzU3QixTQUFTei9CLEdBRXhCLE9BREE4bkMsRUFBZSxJQUFNOW5DLEVBQU0sNEJBQ3BCOG5DLEVBS2YzRyxFQUFJVSxNQUFRZ3RCLEdBQW1CdU0sTUFBQUEsU0FBQUEsRUFBU3Y1QixNQUFPVixFQUFJVSxPQUluRCxJQUFJeTVCLEVBQVVoTSxHQUFlLE9BQVE4TCxNQUFBQSxTQUFBQSxFQUFTcmhFLE1BQzlDLEdBQXVCLGlCQUFadWhFLEVBQ1AsT0FBT0EsRUFFWG42QixFQUFJcG5DLEtBQU91aEUsRUFFWCxJQUFJQyxFQUFVcDZCLEVBQUlwbkMsS0FBS2pHLE9BR25CMG5FLEVBQWV6TSxHQUNmLFlBQ0FxTSxNQUFBQSxTQUFBQSxFQUFTajNCLFVBQ1RvM0IsRUFDQSxLQUNBM04sSUFDQSxHQUVKLEdBQTRCLGlCQUFqQjROLEVBQ1AsT0FBT0EsRUFFWHI2QixFQUFJZ0QsVUFBWXEzQixFQUloQixJQUFJQyxFQUFjMU0sR0FDZCxXQUNBcU0sTUFBQUEsU0FBQUEsRUFBU2gzQixTQUNUbTNCLEVBQ0EsR0FDQSxNQUNBLEdBRUosR0FBMkIsaUJBQWhCRSxFQUNQLE9BQU9BLEVBRVh0NkIsRUFBSWlELFNBQVdxM0IsRUFJZixJQUFJL2hCLEVBQVdxVixHQUNYLFFBQ0FxTSxNQUFBQSxTQUFBQSxFQUFTLzJCLE1BQ1RrM0IsRUFDQSxHQUNBLE1BQ0EsR0FFSixHQUF3QixpQkFBYjdoQixFQUNQLE9BQU9BLEVBRVh2WSxFQUFJa0QsTUFBUXFWLEVBSThCLGlCQUEvQjBoQixNQUFBQSxTQUFBQSxFQUFTOTJCLHFCQUNoQm5ELEVBQUltRCxrQkFBb0I4MkIsRUFBUTkyQixtQkFLcEMsSUFBSXlWLEVBQWNnVixHQUNkLFdBQ0FxTSxNQUFBQSxTQUFBQSxFQUFTNzJCLFNBQ1RnM0IsRUFDQSxHQUNBLE1BQ0EsR0FFSixHQUEyQixpQkFBaEJ4aEIsRUFDUCxPQUFPQSxFQUVYNVksRUFBSW9ELFNBQVd3VixFQUltQyxrQkFBdkNxaEIsTUFBQUEsU0FBQUEsRUFBUzUyQiw2QkFDaEJyRCxFQUFJcUQsMEJBQTRCNDJCLEVBQVE1MkIsMkJBS0gsaUJBQTlCNDJCLE1BQUFBLFNBQUFBLEVBQVMzMkIsb0JBQ2hCdEQsRUFBSXNELGlCQUFtQjIyQixFQUFRMzJCLGtCQUtBLGtCQUF4QjIyQixNQUFBQSxTQUFBQSxFQUFTejRCLGNBQ2hCeEIsRUFBSXdCLFdBQWF5NEIsRUFBUXo0QixZQUk3QnhCLEVBQUl5QixlQUFpQmlzQixHQUNqQnVNLE1BQUFBLFNBQUFBLEVBQVN4NEIsZUFDVCxTQUlKLElBQUk4NEIsRUFBMkIsYUFFM0JBLEVBRHVCLFFBQXZCdjZCLEVBQUl5QixnQkFBbUQsV0FBdkJ6QixFQUFJeUIsZUFDVCxhQUVKLFNBQXZCekIsRUFBSXlCLGdCQUNtQixVQUF2QnpCLEVBQUl5QixlQUV1QixXQUVBLGFBRS9CekIsRUFBSTBCLGtCQUFvQmdzQixHQUNwQnVNLE1BQUFBLFNBQUFBLEVBQVN2NEIsa0JBQ1Q2NEIsR0FNSnY2QixFQUFJMkIsY0FBZ0IrckIsR0FDaEJ1TSxNQUFBQSxTQUFBQSxFQUFTdDRCLGNBQ1QzQixFQUFJMkIsZUFJUjNCLEVBQUk0QixrQkFBb0I4ckIsR0FDcEJ1TSxNQUFBQSxTQUFBQSxFQUFTcjRCLGtCQUNUNUIsRUFBSTRCLG1CQUdSN0QsRUFBV2lDLElBQUl0a0MsS0FBS3NrQyxHQUt4QixJQUFLLElBQUl3NkIsS0FBY3hELEVBQWlCLENBQ3BDLElBQUkvMkIsRUFBVSxJQUFJdUQsR0FDZGkzQixFQUFjbk0sRUFBS2tNLEdBRW5CRSxFQUFvQjFMLEdBQXdCL3VCLEdBQzVDMjFCLEVBQWtCNUcsR0FBd0J5TCxHQUc5QyxJQUFLLElBQUk1N0QsS0FBTysyRCxFQUNaLElBQUs4RSxFQUFrQnA4QixTQUFTei9CLEdBRTVCLE9BREE4bkMsRUFBZSxJQUFNOW5DLEVBQU0sNEJBQ3BCOG5DLEVBS2YxRyxFQUFRd0QsU0FBV2lxQixHQUNmK00sTUFBQUEsU0FBQUEsRUFBYWgzQixTQUNieEQsRUFBUXdELFVBSVp4RCxFQUFRaGdDLE1BQVF5dEQsR0FBbUIrTSxNQUFBQSxTQUFBQSxFQUFheDZELE1BQU9nZ0MsRUFBUWhnQyxPQUUvRDg5QixFQUFXa0MsUUFBUXZrQyxLQUFLdWtDLEdBSTVCLElBQUssSUFBSTA2QixLQUFZMUQsRUFBZSxDQUNoQyxJQUFJN3RDLEVBQVEsSUFBSXVhLEdBQ1ppM0IsRUFBWXRNLEVBQUtxTSxHQUVqQkUsRUFBa0I3TCxHQUF3QjVsQyxHQUMxQ3dzQyxFQUFrQjVHLEdBQXdCNEwsR0FHOUMsSUFBSyxJQUFJLzdELEtBQU8rMkQsRUFDWixJQUFLaUYsRUFBZ0J2OEIsU0FBU3ovQixHQUUxQixPQURBOG5DLEVBQWUsSUFBTTluQyxFQUFNLDRCQUNwQjhuQyxFQUtmdmQsRUFBTXdhLEtBQU84cEIsR0FBbUJrTixNQUFBQSxTQUFBQSxFQUFXaDNCLEtBQU14YSxFQUFNd2EsTUFJdkQsSUFBSWszQixFQUFhL00sR0FBZSxVQUFXNk0sTUFBQUEsU0FBQUEsRUFBVzU4QixTQUN0RCxHQUEwQixpQkFBZjg4QixFQUNQLE9BQU9BLEVBRVgsR0FBMEIsSUFBdEJBLEVBQVdub0UsT0FFWCxJQUFLLElBQUk0bUIsS0FBS2tsQixFQUNWcThCLEVBQVdwL0QsS0FBSzZkLEVBQUVnaEIsU0FHMUJuUixFQUFNNFUsUUFBVTg4QixFQUVoQixJQUFJaE8sRUFBYTFqQyxFQUFNNFUsUUFBUXJyQyxPQUcvQnkyQixFQUFNeWEsWUFBYzZwQixHQUNoQmtOLE1BQUFBLFNBQUFBLEVBQVcvMkIsWUFDWHphLEVBQU15YSxhQUsyQixrQkFBMUIrMkIsTUFBQUEsU0FBQUEsRUFBV3YyQixjQUNsQmpiLEVBQU1pYixXQUFhdTJCLEVBQVV2MkIsWUFLakMsSUFBSTAyQixFQUFlaE4sR0FBZSxZQUFhNk0sTUFBQUEsU0FBQUEsRUFBVzkyQixXQUMxRCxHQUE0QixpQkFBakJpM0IsRUFDUCxPQUFPQSxFQUdYLEdBREEzeEMsRUFBTTBhLFVBQVlpM0IsRUFDYSxJQUEzQjN4QyxFQUFNMGEsVUFBVW54QyxPQUNoQixJQUFLLElBQUlxb0UsRUFBYSxFQUFHQSxFQUFhbE8sRUFBWWtPLElBQzlDNXhDLEVBQU0wYSxVQUFVcG9DLEtBQUssR0FHN0IsR0FBSTB0QixFQUFNMGEsVUFBVW54QyxTQUFXeTJCLEVBQU00VSxRQUFRcnJDLE9BS3pDLE1BREksNERBTVIsSUFBSWs4RCxFQUFVZCxHQUFlLE9BQVE2TSxNQUFBQSxTQUFBQSxFQUFXMS9CLE1BQ2hELEdBQXVCLGlCQUFaMnpCLEVBQ1AsT0FBT0EsRUFHWCxHQURBemxDLEVBQU04UixLQUFPMnpCLEVBQ2EsSUFBdEJ6bEMsRUFBTThSLEtBQUt2b0MsT0FDWCxJQUFLLElBQUlxb0UsRUFBYSxFQUFHQSxFQUFhbE8sRUFBWWtPLElBQzlDNXhDLEVBQU04UixLQUFLeC9CLEtBQUssTUFHeEIsR0FBSTB0QixFQUFNOFIsS0FBS3ZvQyxTQUFXeTJCLEVBQU00VSxRQUFRcnJDLE9BR3BDLE1BREksdURBTVIsSUFBSW04RCxFQUFVZixHQUFlLE9BQVE2TSxNQUFBQSxTQUFBQSxFQUFXei9CLE1BQ2hELEdBQXVCLGlCQUFaMnpCLEVBQ1AsT0FBT0EsRUFHWCxHQURBMWxDLEVBQU0rUixLQUFPMnpCLEVBQ2EsSUFBdEIxbEMsRUFBTStSLEtBQUt4b0MsT0FDWCxJQUFLLElBQUlxb0UsRUFBYSxFQUFHQSxFQUFhbE8sRUFBWWtPLElBQzlDNXhDLEVBQU0rUixLQUFLei9CLEtBQUssTUFHeEIsR0FBSTB0QixFQUFNK1IsS0FBS3hvQyxTQUFXeTJCLEVBQU00VSxRQUFRcnJDLE9BR3BDLE1BREksdURBTVJ5MkIsRUFBTTNXLE1BQVFpN0MsR0FBbUJrTixNQUFBQSxTQUFBQSxFQUFXbm9ELE1BQU8yVyxFQUFNM1csT0FJakIsa0JBQTdCbW9ELE1BQUFBLFNBQUFBLEVBQVc3MkIsaUJBQ2xCM2EsRUFBTTJhLGNBQWdCNjJCLEVBQVU3MkIsZUFLQyxrQkFBMUI2MkIsTUFBQUEsU0FBQUEsRUFBV3QyQixjQUNsQmxiLEVBQU1rYixXQUFhczJCLEVBQVV0MkIsWUFLTyxrQkFBN0JzMkIsTUFBQUEsU0FBQUEsRUFBV3IyQixpQkFDbEJuYixFQUFNbWIsY0FBZ0JxMkIsRUFBVXIyQixlQUtRLGtCQUFqQ3EyQixNQUFBQSxTQUFBQSxFQUFXMzJCLHFCQUNsQjdhLEVBQU02YSxrQkFBb0IyMkIsRUFBVTMyQixtQkFLRyxrQkFBaEMyMkIsTUFBQUEsU0FBQUEsRUFBV3AyQixvQkFDbEJwYixFQUFNb2IsaUJBQW1CbzJCLEVBQVVwMkIsa0JBS3ZDcGIsRUFBTXFiLFlBQWNpcEIsR0FDaEJrTixNQUFBQSxTQUFBQSxFQUFXbjJCLFlBQ1hyYixFQUFNcWIsYUFLbUMsa0JBQWxDbTJCLE1BQUFBLFNBQUFBLEVBQVdsMkIsc0JBQ2xCdGIsRUFBTXNiLG1CQUFxQmsyQixFQUFVbDJCLG9CQUt6Q3RiLEVBQU04YSxnQkFBa0J3cEIsR0FDcEJrTixNQUFBQSxTQUFBQSxFQUFXMTJCLGdCQUNYOWEsRUFBTThhLGlCQUtWOWEsRUFBTSthLGlCQUFtQnVwQixHQUNyQmtOLE1BQUFBLFNBQUFBLEVBQVd6MkIsaUJBQ1gvYSxFQUFNK2Esa0JBS1YvYSxFQUFNZ2Isa0JBQW9Cc3BCLEdBQ3RCa04sTUFBQUEsU0FBQUEsRUFBV3gyQixrQkFDWGhiLEVBQU1nYixtQkFLVmhiLEVBQU11YixlQUFpQitvQixHQUNuQmtOLE1BQUFBLFNBQUFBLEVBQVdqMkIsZUFDWHZiLEVBQU11YixnQkFLVnZiLEVBQU13YixrQkFBb0I4b0IsR0FDdEJrTixNQUFBQSxTQUFBQSxFQUFXaDJCLGtCQUNYeGIsRUFBTXdiLG1CQUtWeGIsRUFBTTRhLFVBQVkwcEIsR0FDZGtOLE1BQUFBLFNBQUFBLEVBQVc1MkIsVUFDWDVhLEVBQU00YSxXQUsrQixrQkFBOUI0MkIsTUFBQUEsU0FBQUEsRUFBVy8xQixrQkFDbEJ6YixFQUFNeWIsZUFBaUIrMUIsRUFBVS8xQixnQkFLckMsSUFBSW8yQixFQUFnQjlNLEdBQWUsYUFBY3lNLE1BQUFBLFNBQUFBLEVBQVc5MUIsWUFDNUQsR0FBNkIsaUJBQWxCbTJCLEVBQ1AsT0FBT0EsRUFHWCxHQURBN3hDLEVBQU0wYixXQUFhbTJCLEVBQ2EsSUFBNUI3eEMsRUFBTTBiLFdBQVdueUMsT0FDakIsSUFBSyxJQUFJcW9FLEVBQWEsRUFBR0EsRUFBYWxPLEVBQVlrTyxJQUM5QzV4QyxFQUFNMGIsV0FBV3BwQyxLQUFLLE1BRzlCLEdBQUkwdEIsRUFBTTBiLFdBQVdueUMsU0FBV3kyQixFQUFNNFUsUUFBUXJyQyxPQUcxQyxNQURJLDZEQU02QyxrQkFBMUNpb0UsTUFBQUEsU0FBQUEsRUFBVzcxQiw4QkFDbEIzYixFQUFNMmIsMkJBQ0Y2MUIsRUFBVTcxQiw0QkFJbEJoSCxFQUFXM1UsTUFBTTF0QixLQUFLMHRCLEdBSzFCLElBQUssSUFBSTh4QyxLQUFjaEUsRUFBaUIsQ0FDcEMsSUFBSWgzQixFQUFVLElBQUlpRixHQUNkZzJCLEVBQWM3TSxFQUFLNE0sR0FFbkJFLEVBQW9CcE0sR0FBd0I5dUIsR0FDNUMwMUIsRUFBa0I1RyxHQUF3Qm1NLEdBRzlDLElBQUssSUFBSXQ4RCxLQUFPKzJELEVBQ1osSUFBS3dGLEVBQWtCOThCLFNBQVN6L0IsR0FFNUIsT0FEQThuQyxFQUFlLElBQU05bkMsRUFBTSw0QkFDcEI4bkMsRUFJZjVJLEVBQVdtQyxRQUFReGtDLEtBQUt3a0MsR0FLNUIsSUFBSyxJQUFJbTdCLEtBQWFsRSxFQUFnQixDQUNsQyxJQUFJaDNCLEVBQVMsSUFBSW1GLEdBQ2JnMkIsRUFBYWhOLEVBQUsrTSxHQUVsQkUsRUFBbUJ2TSxHQUF3Qjd1QixHQUMzQ3kxQixFQUFrQjVHLEdBQXdCc00sR0FHOUMsSUFBSyxJQUFJejhELEtBQU8rMkQsRUFDWixJQUFLMkYsRUFBaUJqOUIsU0FBU3ovQixHQUUzQixPQURBOG5DLEVBQWUsSUFBTTluQyxFQUFNLDRCQUNwQjhuQyxFQUtmeEcsRUFBT08sTUFBUWd0QixHQUFtQjROLE1BQUFBLFNBQUFBLEVBQVk1NkIsTUFBT1AsRUFBT08sT0FJNURQLEVBQU9uQyxRQUFVMHZCLEdBQ2I0TixNQUFBQSxTQUFBQSxFQUFZdDlCLFFBQ1ptQyxFQUFPbkMsU0FLWG1DLEVBQU9pRixZQUFjc29CLEdBQ2pCNE4sTUFBQUEsU0FBQUEsRUFBWWwyQixZQUNaakYsRUFBT2lGLGFBS1gsSUFBSW8yQixFQUFXek4sR0FBZSxRQUFTdU4sTUFBQUEsU0FBQUEsRUFBWWxsRSxPQUNuRCxHQUF3QixpQkFBYm9sRSxFQUNQLE9BQU9BLEVBRVgsSUFBSXBsRSxFQUFRb2xFLEVBR1osR0FBcUIsSUFBakJwbEUsRUFBTXpELFFBQ04sR0FBSXlELEVBQU0sR0FBSyxFQUVYLE9BREF1d0MsRUFBZSxzQ0FDUkEsTUFFUixDQUFBLEtBQUl2d0MsRUFBTXpELE9BQVMsR0FnQnRCLE9BREFnMEMsRUFBZSw2QkFDUkEsRUFoQmtCLENBQ3pCLElBQUk4YyxFQUFZcnRELEVBQU0sR0FDdEIsR0FBSXF0RCxFQUFZLEVBRVosT0FEQTljLEVBQWUsc0NBQ1JBLEVBRVAsSUFBSyxJQUFJbEwsRUFBTSxFQUFHQSxFQUFNcmxDLEVBQU16RCxPQUFROG9DLElBQ2xDLEdBQUlybEMsRUFBTXFsQyxJQUFRZ29CLEVBR2QsT0FGQTljLEVBQ0ksaUVBQ0dBLEdBUXZCeEcsRUFBTy9wQyxNQUFRQSxFQUNmLElBQUlxbEUsRUFBV3JsRSxFQUFNekQsT0FJakIrb0UsRUFBZ0I5TixHQUNoQixhQUNBME4sTUFBQUEsU0FBQUEsRUFBWTcxQixXQUNaZzJCLEVBQ0EsR0FDQWhQLElBQ0EsR0FFSixHQUE2QixpQkFBbEJpUCxFQUNQLE9BQU9BLEVBRVh2N0IsRUFBT3NGLFdBQWFpMkIsRUFJcEJ2N0IsRUFBTzN1QyxNQUFRazhELEdBQW1CNE4sTUFBQUEsU0FBQUEsRUFBWTlwRSxNQUFPMnVDLEVBQU8zdUMsT0FJNUQydUMsRUFBT29GLFVBQVltb0IsR0FDZjROLE1BQUFBLFNBQUFBLEVBQVkvMUIsVUFDWnBGLEVBQU9vRixXQUtYcEYsRUFBT3FGLFdBQWFrb0IsR0FDaEI0TixNQUFBQSxTQUFBQSxFQUFZOTFCLFdBQ1pyRixFQUFPcUYsWUFLMkIsa0JBQTNCODFCLE1BQUFBLFNBQUFBLEVBQVk1MUIsY0FDbkJ2RixFQUFPdUYsV0FBYTQxQixFQUFXNTFCLFlBS0ksaUJBQTVCNDFCLE1BQUFBLFNBQUFBLEVBQVkzMUIsZUFDbkJ4RixFQUFPd0YsWUFBYzIxQixFQUFXMzFCLGFBS3BDeEYsRUFBT3lGLFlBQWM4bkIsR0FDakI0TixNQUFBQSxTQUFBQSxFQUFZMTFCLFlBQ1p6RixFQUFPeUYsYUFJWDdILEVBQVdvQyxPQUFPemtDLEtBQUt5a0MsR0FJM0IsT0FBT3BDLEVHcmpFaUI0OUIsQ0FBc0JyRyxFQUFVcCtELE1BQ3BELEdBQTZCLGlCQUFsQncrRCxFQUNQLE9BQU94K0QsS0FBS204RCxtQkFBbUJxQyxFQUFlNWQsRUFBUXdiLEdBRTFELElBQUl2MUIsRUFBYTIzQixFQUliL0IsRUFBaUIsR0FDckIsVUFDVXo4RCxLQUFLNjhELFNBQVNKLEVBQU81MUIsR0FDN0IsTUFBT3BzQyxHQUNMLE9BQU91RixLQUFLbThELG1CQUFtQjFoRSxFQUFFbzZDLFFBQVMrTCxFQUFRd2IsR0FFdEQsR0FBcUIsSUFBakJLLEVBQU1oaEUsT0FDTixPQUFPdUUsS0FBS204RCxtQkFDUixvQ0FDQXZiLEVBQ0F3YixHQVdSLElBQUkxQyxFQUFtQixJQUFJNXhELElBQ3ZCNDhELEVBQWMsSUFBSXQxQixHQUN0QnMxQixFQUFZcjFCLFVBQVlvdEIsRUFBTWhoRSxPQUc5QixNQUFNa3BFLEVBQW1CbEksRUFBTTM0RCxLQUFXNGpDLHFDQUd0QyxJQUFJMHdCLEVBQTRCLEtBQ1p2eEIsRUFBV1UsUUFBUStVLE1BQU1qNkIsSUFDekMsSUFBSW5lLEVBQU9tZSxFQUFFNmdCLFVBRWIsT0FEYTdnQixFQUFFOGdCLFlBRVhqL0IsSUFBU281QixHQUFXeWhDLGFBQ3BCNzZELElBQVNvNUIsR0FBV3doQyxLQUNwQjU2RCxJQUFTbzVCLEdBQVcwaEMsTUFDcEI5NkQsSUFBU281QixHQUFXMmhDLFVBQ3BCLzZELElBQVNvNUIsR0FBVzRoQyxpQkFPeEI5RyxFQUFZcDRELEtBQUs2NkQsSUFBSTJDLGNBQWNDLGFBQWEvMUIsSUFHcEQsSUFBSWd4QixFQUFrQixLQUNKN3hCLEVBQVdVLFFBQVErVSxNQUFNajZCLElBQ3ZDLElBQUluZSxFQUFPbWUsRUFBRTZnQixVQUNUaFUsRUFBUzdNLEVBQUU4Z0IsWUFDZixPQUNJai9CLElBQVNvNUIsR0FBV3doQyxLQUNwQjU2RCxJQUFTbzVCLEdBQVc2aEMsTUFDcEJqN0QsSUFBU281QixHQUFXOGhDLFNBQ3BCbDdELElBQVNvNUIsR0FBV2c4QixNQUNwQnAxRCxJQUFTbzVCLEdBQVdpOEIsVUFDcEJyMUQsSUFBU281QixHQUFXazhCLGFBR2J0MUQsSUFBU281QixHQUFXK2hDLFdBRVosYUFBWG53QyxHQUNXLGFBQVhBLEdBQ1csaUJBQVhBLFFBUVJ3cEMsUUFBZ0IxNEQsS0FBSzY2RCxJQUFJcUMsTUFBTVMsUUFBUUMsS0FBS2wyQixFQUFLbG1DLE9BSXJELElBQUlxNEQsRUFBdUIsSUFBSS94RCxJQUMzQjg4RCxHQUFlLEVBRW5CLElBQUssSUFBSUMsS0FBY2grQixFQUFXVyxTQUU5QixJQUFLcXlCLEVBQVU3eEQsSUFBSTY4RCxHQUFhLENBQzVCLElBQUlDLEVBQVFwa0UsT0FBT2ltQyxPQUFPLElBQzFCLElBQW9CLElBQWhCaytCLEVBRUFDLEVBQVFDLEdBQ0pyOUIsRUFDQWIsT0FHRCxDQUNILElBQUltK0IsRUFBZ0JuK0IsRUFBV1UsUUFBUXM5QixHQUV2QyxPQUFRRyxFQUFjOWhDLFdBQ2xCLEtBQUs1RixHQUFXeWhDLFlBQ1orRixFQUFRRyxHQUNKN00sRUFDQTRNLEVBQ0FuK0IsR0FFSixNQUNKLEtBQUt2SixHQUFXd2hDLElBQ1pnRyxFQUFRSSxHQUNKeE0sRUFDQXNNLEVBQ0FuK0IsR0FFSixNQUNKLEtBQUt2SixHQUFXNmhDLEtBQ1oyRixFQUFRSyxHQUNKek0sRUFDQXNNLEVBQ0FuK0IsR0FFSixNQUNKLEtBQUt2SixHQUFXOGhDLFFBQ1owRixFQUFRTSxHQUNKMU0sRUFDQXNNLEVBQ0FuK0IsR0FFSixNQUNKLEtBQUt2SixHQUFXK2hDLFNBQ1p5RixFQUFRTyxHQUNKMzlCLEVBQ0FzOUIsRUFDQW4rQixHQUVKLE1BQ0osS0FBS3ZKLEdBQVdnOEIsS0FDaEIsS0FBS2g4QixHQUFXaThCLFNBQ2hCLEtBQUtqOEIsR0FBV2s4QixZQUNac0wsRUFBUVEsR0FDSjVNLEVBQ0FzTSxFQUNBbitCLElBTVhpK0IsRUFBTTV5QixXQU1zQixPQUF6QnJMLEVBQVczQyxXQUNQNGdDLEVBQVFqK0IsRUFBVzNDLFlBQ25CMGdDLEdBQWUsRUFDZkYsRUFBWW4xQixzQkFHTyxPQUF2QjFJLEVBQVcxQyxTQUNQMmdDLEVBQVFqK0IsRUFBVzFDLFVBQ25CeWdDLEdBQWUsRUFDZkYsRUFBWW4xQix3QkFicEJxMUIsR0FBZSxFQUNmRixFQUFZbDFCLG1CQWlCWG8xQixJQUNERixFQUFZOTBCLG9CQUFaODBCLEVBQVk5MEIsbUJBQXNCLEdBQ2xDaXFCLEVBQVV4MUQsSUFDTndnRSxFQUNBcGtCLEdBQWlCcWtCLEVBQU9qK0IsRUFBV0wsYUFFdkNrK0IsRUFBWXAxQixnQkFHcUIsR0FBN0JvMUIsRUFBWXAxQixlQUNabzFCLEVBQVloMUIsUUFBVW8xQixFQUFNbjVELFFBQzVCKzRELEVBQVkvMEIsUUFBVW0xQixFQUFNbjVELFVBRXhCbTVELEVBQVFKLEVBQVloMUIsVUFDcEJnMUIsRUFBWWgxQixRQUFVbzFCLEVBQU1uNUQsU0FFNUJtNUQsRUFBUUosRUFBWS8wQixVQUNwQiswQixFQUFZLzBCLFFBQVVtMUIsRUFBTW41RCxXQU1oRCxHQUFJaTVELEVBQWMsT0FXbEIsTUFBTVcsRUFMZ0IxK0IsRUFBV1UsUUFBUTFrQyxRQUFRd2YsR0FDdENBLEVBQUU2Z0IsWUFBYzVGLEdBQVdxRixRQUFVdGdCLEVBQUVvZ0IsaUJBSVIzK0IsS0FBV2lnQyxxQ0FPakQsR0FBSXEwQixHQUFhcjBCLEVBQU1iLFlBQWM1RixHQUFXd2hDLElBQUssQ0FFakQsSUFBSTBHLFdGM0RwQnBOLEVBQ0FyMEIsRUFDQThDLEVBQ0E2eUIsRUFDQUcsR0FPQSxJQUFJeEIsRUFBY0QsRUFBVUUsWUFDeEJtTixFQUE0QixHQUNoQyxHQUFJcE4sR0FBZUEsRUFBWXFOLEtBQU0sQ0FFakMsSUFBSUMsRUFBYSxFQUNiQyxHQUFXLEVBQ2YsR0FBSXptRSxNQUFNbXZCLFFBQVErcEMsRUFBWXFOLE1BQzFCRCxFQUFrQkEsRUFBZ0JsaEUsT0FBTzh6RCxFQUFZcU4sV0FDbEQsR0FBZ0MsaUJBQXJCck4sRUFBWXFOLEtBQW1CLENBQzdDLElBQUloUSxFQUFXMkMsRUFBWXFOLEtBQUs3aEUsTUFBTWtnQyxFQUFNTixjQUFhLElBQ3pELElBQUssSUFBSW9pQyxLQUFnQm5RLEVBQVUsQ0FDL0IsSUFBSW9RLEVBQU9ELEVBQWFqaUUsT0FDWCxLQUFUa2lFLEdBQ0FMLEVBQWdCamhFLEtBQUtzaEUsSUFPakMsSUFBSyxJQUFJQyxLQUFPTixFQUFpQixDQUM3QixHQUFJTSxJQUFRaGlDLEVBQU1aLFlBRWR3aUMsR0FBMEI5K0IsRUFBV21CLFdBQVdqRSxFQUFNVixTQUN0RHVpQyxHQUFXLEVBQ1g3aEMsRUFBTUosb0JBQ0gsQ0FBQSxJQUFJb2lDLEVBQUl0MUIsV0FBVzFNLEVBQU1aLFlBQWMsS0FNMUMsU0FKQXdpQyxHQUEwQjkrQixFQUFXbUIsV0FBV2pFLEVBQU1WLFNBQ3REdWlDLEdBQVcsRUFDWDdoQyxFQUFNSixnQkFRVixJQUFJcnBDLEVBQVEsS0FNWixPQUxJc3JFLElBQ0F0ckUsRUFBUXFyRSxHQUdabE0sR0FBYUMsRUFEQUcsRUFBVTExRCxJQUFJMGlDLEVBQVdXLFNBQVN6RCxFQUFNVixVQUN2QlUsRUFBT3pwQyxJQUM5QixHQUlmLE9BQU8sRUVBMkIwckUsQ0FDZDVOLEVBQ0FyMEIsRUFDQThDLEVBQ0E2eUIsRUFDQUcsR0FFSjZLLEVBQVk3MEIsb0JBQVo2MEIsRUFBWTcwQixrQkFBc0IyMUIsR0FJdEMsR0FDSXBOLEdBQ0FyMEIsRUFBTWIsWUFBYzVGLEdBQVd5aEMsYUFDVCxTQUF0Qmg3QixFQUFNWixZQUNSLENBQ0UsSUFBSXFpQyxXRlhwQnBOLEVBQ0FyMEIsRUFDQThDLEVBQ0E2eUIsRUFDQUcsR0FJQSxJQUFJeEIsRUFBY0QsRUFBVUUsWUFDNUIsR0FBSUQsRUFBYSxDQUdiLElBQUkvbEIsRUFBWWltQixHQUFpQkYsRUFBYXQwQixFQUFNWixhQUVwRCxHQUFJbVAsRUFBVyxDQUNYLElBQUkwbkIsRUFBVzNELEdBQ1gvakIsRUFDQXpMLEVBQVd5QixjQUdmLEdBQXVCLE9BQW5CMHhCLEVBQVMxL0QsTUFPVCxPQU5JMC9ELEVBQVM5MUQsT0FBU3M1QixHQUFVNlYsT0FDNUJ0UCxFQUFNdkIsVUFBWWhGLEdBQVU2VixNQUVoQ3RQLEVBQU1KLGdCQUVOODFCLEdBQWFDLEVBREFHLEVBQVUxMUQsSUFBSTBpQyxFQUFXVyxTQUFTekQsRUFBTVYsVUFDdkJVLEVBQU9pMkIsRUFBUzEvRCxRQUN2QyxPQUVSLEdBQ0h5cEMsRUFBTVgsbUJBQ05tMUIsR0FBaUJGLEVBQWF0MEIsRUFBTVgsbUJBQ3RDLENBUUUsSUFBSThQLEVBQVVxbEIsR0FDVkYsRUFDQXQwQixFQUFNWCxtQkFFTnN5QixFQUFXLEtBU2YsR0FSSXYyRCxNQUFNbXZCLFFBQVE0a0IsR0FDZHdpQixFQUFXeGlCLEVBQVFwdkMsS0FBS3JGLEdBQ2JBLEVBQUUrZCxhQUVhLGlCQUFaMDJCLElBQ2R3aUIsRUFBV3hpQixFQUFRcnZDLE1BQU1rZ0MsRUFBTU4saUJBSS9CaXlCLEdBQ0FBLEVBQVNqNkQsT0FBU3NvQyxFQUFNVCxlQUN4QlMsRUFBTVQsZUFBaUIsRUFDekIsQ0FFRSxJQUNJMDJCLEVBQVczRCxHQURJWCxFQUFTM3hCLEVBQU1ULGVBQWUxL0IsT0FHN0NpakMsRUFBV3lCLGNBRWYsR0FBdUIsT0FBbkIweEIsRUFBUzEvRCxNQVNULE9BUkkwL0QsRUFBUzkxRCxPQUFTczVCLEdBQVU2VixPQUM1QnRQLEVBQU12QixVQUFZaEYsR0FBVTZWLE1BRWhDdFAsRUFBTUosZ0JBSU44MUIsR0FBYUMsRUFIQUcsRUFBVTExRCxJQUNuQjBpQyxFQUFXVyxTQUFTekQsRUFBTVYsVUFFQVUsRUFBT2kyQixFQUFTMS9ELFFBQ3ZDLElBTXZCLE9BQU8sRUVwRTJCMnJFLENBQ2Q3TixFQUNBcjBCLEVBQ0E4QyxFQUNBNnlCLEVBQ0FHLEdBRUo2SyxFQUFZNzBCLG9CQUFaNjBCLEVBQVk3MEIsa0JBQXNCMjFCLEdBSXRDLEdBQ0lwTixJQUNDcjBCLEVBQU1iLFlBQWM1RixHQUFXMGhDLE1BQzVCajdCLEVBQU1iLFlBQWM1RixHQUFXMmhDLFVBQy9CbDdCLEVBQU1iLFlBQWM1RixHQUFXNGhDLGFBQ3JDLENBQ0UsSUFBSXNHLFdGd0RwQnBOLEVBQ0FyMEIsRUFDQThDLEVBQ0E2eUIsRUFDQUcsR0FFQSxJQUFJZ0UsRUFBUXpGLEVBQVV5RixNQUN0QixJQUFLQSxFQUFPLE9BQU8sRUFFbkIsSUFBSTE3QixFQUFlNEIsRUFBTVosWUFDckJqQixFQUFhNkIsRUFBTWIsVUFFbkJnakMsRUFBZSxHQUNmLzBCLEVBQVdoUCxFQUdmLElBQUssSUFBSTI3QixLQUFRRCxFQUFPLENBQ3BCLElBQUtDLEVBQU0sU0FFWCxJQUFJcUksRUFBVyxHQUNYamtDLElBQWU1RSxHQUFXMGhDLEtBRXRCbUgsRUFEQXJJLEVBQUtzSSxZQUNNdEksRUFBS3NJLFlBRUx0SSxFQUFLQSxLQUViNTdCLElBQWU1RSxHQUFXMmhDLFNBR2pDa0gsRUFBV3JJLEVBQUtBLEtBQ1Q1N0IsSUFBZTVFLEdBQVc0aEMsWUFDN0JwQixFQUFLc0ksY0FDTEQsRUFBV3JJLEVBQUtzSSxhQUloQkQsRUFEQXJJLEVBQUtzSSxZQUNNdEksRUFBS3NJLFlBRUx0SSxFQUFLQSxLQUd4QnFJLEVBQVdBLEVBQVN2aUUsT0FFcEJzaUUsR0FBZ0JDLEVBQVcsS0FHL0IsT0FBT3ZNLEdBQ0hzTSxFQUNBLzBCLEVBQ0FwTixFQUNBMjFCLEVBQ0FHLEVBQ0FoekIsR0U1RzhCdy9CLENBQ2RqTyxFQUNBcjBCLEVBQ0E4QyxFQUNBNnlCLEVBQ0FHLEdBRUo2SyxFQUFZNzBCLG9CQUFaNjBCLEVBQVk3MEIsa0JBQXNCMjFCLEdBSXRDLEdBQUk5TSxHQUFXMzBCLEVBQU1iLFlBQWM1RixHQUFXd2hDLElBQUssQ0FDL0MsSUFBSTBHLFdGc0dwQjlNLEVBQ0EzMEIsRUFDQThDLEVBQ0E2eUIsRUFDQUcsR0FLQSxJQUFJbEIsRUFBVTUwQixFQUFNWixZQWFwQixPQVpJWSxFQUFNWCxvQkFDTnUxQixFQUFVNTBCLEVBQU1YLG1CQUVoQnUxQixFQUFRbDlELE9BQVMsR0FBS2s5RCxFQUFRbG9CLFdBQVcsT0FDekNrb0IsRUFBVUEsRUFBUTdzQyxVQUFVLElBUXpCOHRDLEdBQ0hsQixFQU5BLFdBQ0FDLEVBQ0EsNEVBTUE1MEIsRUFDQTIxQixFQUNBRyxFQUNBaHpCLEdFbEk4QnkvQixDQUNkNU4sRUFDQTMwQixFQUNBOEMsRUFDQTZ5QixFQUNBRyxHQUVKNkssRUFBWTcwQixvQkFBWjYwQixFQUFZNzBCLGtCQUFzQjIxQixHQUl0QyxHQUFJOU0sR0FBVzMwQixFQUFNYixZQUFjNUYsR0FBVzZoQyxLQUFNLENBQ2hELElBQUlxRyxXRjRIcEI5TSxFQUNBMzBCLEVBQ0E4QyxFQUNBNnlCLEVBQ0FHLEdBT0EsT0FBT0QsR0FDSGxCLEVBSlczMEIsRUFBTVosWUFNakJZLEVBQ0EyMUIsRUFDQUcsRUFDQWh6QixHRTdJOEIwL0IsQ0FDZDdOLEVBQ0EzMEIsRUFDQThDLEVBQ0E2eUIsRUFDQUcsR0FFSjZLLEVBQVk3MEIsb0JBQVo2MEIsRUFBWTcwQixrQkFBc0IyMUIsR0FJdEMsR0FBSXpoQyxFQUFNYixZQUFjNUYsR0FBVytoQyxTQUFVLENBQ3pDLElBQUltRyxFQUFjZ0IsR0FDZDkrQixFQUNBZ3hCLEVBQ0EzMEIsRUFDQThDLEVBQ0E2eUIsRUFDQUcsR0FFSjZLLEVBQVk3MEIsb0JBQVo2MEIsRUFBWTcwQixrQkFBc0IyMUIsR0FJdEMsR0FBSTlNLEdBQVczMEIsRUFBTWIsWUFBYzVGLEdBQVc4aEMsUUFBUyxDQUNuRCxJQUFJb0csV0ZnTnBCOU0sRUFDQTMwQixFQUNBOEMsRUFDQTZ5QixFQUNBRyxHQUVBLElBQUlmLEVBQVcvMEIsRUFBTVosWUFtQnJCLE9BbEJJWSxFQUFNWCxvQkFDTjAxQixFQUFXLzBCLEVBQU1YLG1CQUlyQjAxQixFQUFXQSxFQUFTM3RDLFFBQVEsSUFBSyxZQWExQnl1QyxHQUNIbEIsRUFSQSxvQkFDQUksRUFEQSw2R0FVQS8wQixFQUNBMjFCLEVBQ0FHLEVBQ0FoekIsR0UvTzhCNC9CLENBQ2QvTixFQUNBMzBCLEVBQ0E4QyxFQUNBNnlCLEVBQ0FHLEdBRUo2SyxFQUFZNzBCLG9CQUFaNjBCLEVBQVk3MEIsa0JBQXNCMjFCLEdBSXRDLEdBQ0k5TSxJQUNDMzBCLEVBQU1iLFlBQWM1RixHQUFXZzhCLE1BQzVCdjFCLEVBQU1iLFlBQWM1RixHQUFXaThCLFVBQy9CeDFCLEVBQU1iLFlBQWM1RixHQUFXazhCLGFBQ3JDLENBQ0UsSUFBSWdNLFdGb09wQjlNLEVBQ0EzMEIsRUFDQThDLEVBQ0E2eUIsRUFDQUcsR0FHQSxJQUFJMzNCLEVBQWE2QixFQUFNYixVQUduQmlPLEVBQVdwTixFQUFNWixZQWFyQixPQVhJZ08sRUFEQWpQLElBQWU1RSxHQUFXZzhCLEtBQ2Ysa0JBQW9Cbm9CLEVBQ3hCalAsSUFBZTVFLEdBQVdpOEIsU0FDdEIsYUFBZXBvQixFQUNuQmpQLElBQWU1RSxHQUFXazhCLFlBQ3RCLGVBQWlCcm9CLEVBR2pCLGtCQUFvQkEsRUFJNUJ5b0IsR0FDSGxCLEVBQ0F2bkIsRUFDQXBOLEVBQ0EyMUIsRUFDQUcsRUFDQWh6QixHRWpROEI2L0IsQ0FDZGhPLEVBQ0EzMEIsRUFDQThDLEVBQ0E2eUIsRUFDQUcsR0FFSjZLLEVBQVk3MEIsb0JBQVo2MEIsRUFBWTcwQixrQkFBc0IyMUIsZUFHcEN0ckUsUUFBUXlzRSxJQUFJcEIsUUFPdEIsU0FMTXJyRSxRQUFReXNFLElBQUloQyxTQUlaM2tFLEtBQUs0bUUscUJBQXFCbE4sRUFBUzd5QixFQUFZNjlCLEdBQ2pEQSxFQUFZajFCLGFBQ1osT0FBT3p2QyxLQUFLbThELG1CQUNSdUksRUFBWWoxQixhQUNabVIsRUFDQXdiLEdBYVIsSUFBSXlLLEVBQW1CLEdBZ0R2QixHQTlDS25DLEVBQVloMUIsUUFBUXdDLFdBQ3BCd3lCLEVBQVkvMEIsUUFBUXVDLFdBQ1MsSUFBOUJ3eUIsRUFBWXAxQixlQUNYbzFCLEVBQVk5MEIsb0JBRWJpM0IsRUFBbUIsMENBQ2ZuQyxFQUFZbjFCLG1CQUFxQixJQUNqQ3MzQixHQUFvQixLQUFLbkMsRUFBWW4xQix1REFFckNtMUIsRUFBWWwxQixrQkFDWnEzQixHQUFvQixLQUFLbkMsRUFBWWwxQix1REFHaEIsT0FBekIzSSxFQUFXM0MsV0FBNkMsT0FBdkIyQyxFQUFXMUMsU0FFNUMwQyxFQUFXM0MsVUFBWXdnQyxFQUFZaDFCLFFBQVEvakMsUUFDM0NrN0IsRUFBVzFDLFFBQVV1Z0MsRUFBWS8wQixRQUFRaGtDLFNBRWhCLE9BQXpCazdCLEVBQVczQyxXQUNZLE9BQXZCMkMsRUFBVzFDLFFBRVAwQyxFQUFXM0MsVUFBWXdnQyxFQUFZLzBCLFFBQ25DOUksRUFBVzFDLFFBQVV1Z0MsRUFBWS8wQixRQUFRaGtDLFFBRXpDazdELEVBQW1CLHFCQUdBLE9BQXZCaGdDLEVBQVcxQyxTQUNjLE9BQXpCMEMsRUFBVzNDLFVBRVAyQyxFQUFXMUMsUUFBVXVnQyxFQUFZaDFCLFFBQ2pDN0ksRUFBVzNDLFVBQVl3Z0MsRUFBWWgxQixRQUFRL2pDLFFBRTNDazdELEVBQW1CLHNCQUtsQmhnQyxFQUFXM0MsVUFBWXdnQyxFQUFZaDFCLFNBQ2hDN0ksRUFBVzFDLFFBQVV1Z0MsRUFBWWgxQixTQUNwQzdJLEVBQVczQyxVQUFZd2dDLEVBQVkvMEIsU0FDaEM5SSxFQUFXMUMsUUFBVXVnQyxFQUFZLzBCLFdBRXJDazNCLEVBQW1CLHNCQUd2QkEsRUFDQSxPQUFPN21FLEtBQUttOEQsbUJBQW1CMEssRUFBa0JqbUIsRUFBUXdiLEdBSzdELElBQUtzSSxFQUFZNzBCLGtCQUNiLE9BQU83dkMsS0FBS204RCxtQkFDUixrQ0FDQXZiLEVBQ0F3YixHQUtSLElBQUk3MUIsRUFBVyxJQUFJRixHQUFTUSxFQUFXM0MsVUFBVzJDLEVBQVcxQyxTQUM3RCxJQUFLLElBQUlKLEtBQVM4QyxFQUFXVSxRQUFTLENBR2xDLElBQUlULEVBQVVQLEVBQVNLLGNBQWM3QyxFQUFPOEMsR0FHNUNDLEVBQVFuRCxjQUFjSSxFQUFNRixpQkFDNUIsSUFDSSxJQUFJNkMsRUFBVUcsRUFBVzNDLFVBQVV2NEIsUUFDbkMrNkIsR0FBV0csRUFBVzFDLFFBQ3RCdUMsRUFBUXQ4QixJQUFJLEVBQUcsUUFLZixHQUNJc3ZELEVBQVExeEQsSUFDSnk0QyxHQUFpQi9aLEVBQVNHLEVBQVdMLGFBRTNDLENBQ0UsSUFBSW16QixFQUFrQkQsRUFDakJ2MUQsSUFBSXM4QyxHQUFpQi9aLEVBQVNHLEVBQVdMLGFBQ3pDM2pDLFFBQU8sU0FBVWlrRSxHQUNkLE9BQU9BLEVBQUsvaUMsTUFBTWYsUUFBUWUsTUFFbEMsR0FBSTQxQixFQUFnQmwrRCxPQUFTLEVBQUcsQ0FFNUIsSUFBSW5CLEVBQVEsS0FDWixJQUNJLElBQUl5c0UsRUFBVSxFQUNkQSxFQUFVcE4sRUFBZ0JsK0QsT0FDMUJzckUsSUFDRixDQUNFLElBQUlDLEVBQVlyTixFQUFnQm9OLEdBQVN6c0UsTUFFckN1eEIsT0FBT2lYLFNBQVNra0MsS0FDZm43QyxPQUFPdFAsTUFBTXlxRCxLQUVBLE9BQVYxc0UsRUFDQUEsRUFBUTBzRSxFQUVSMXNFLEdBQVMwc0UsR0FNUCxPQUFWMXNFLEdBQ0F3c0MsRUFBUTdCLFNBQVN5QixFQUFTcHNDLEtBTTlDdXNDLEVBQVdOLFNBQVdBLEVBR3RCLElBQUkwZ0MsV1I1Z0JXcm1CLEVBQXFCL1osR0FLeEMsSUFBSyxJQUFJQyxLQUFXRCxFQUFXTixTQUFVLENBQ3JDLEdBQUlPLEVBQVFqQixXQUFXcEQsZUFBZ0IsU0FFdkMsSUFBSStDLEVBQWNxQixFQUFXdUIsV0FBV3RCLEVBQVF6RCxTQUM1QixPQUFoQm1DLEdBQXdDLElBQWhCQSxHQUN4QnNCLEVBQVF2QixNQUNKQyxFQUNBcUIsRUFBV3dCLHlCQUF5QnZCLEVBQVF6RCxVQUlSLE9BQXhDd0QsRUFBV2pCLFFBQVFrQixFQUFRekQsVUFDM0J5RCxFQUFRbkIsV0FBV2tCLEVBQVdqQixRQUFRa0IsRUFBUXpELFVBRzlDd0QsRUFBV3NCLE1BQU1yQixFQUFRekQsVUFDekJ5RCxFQUFRaEIsbUJBSWhCLElBQUssSUFBSTFCLEtBQVl5QyxFQUFXMWtDLEtBQU0sQ0FDbEMsSUFBSStrRSxFQUFNdFMsR0FBZ0JoVSxFQUFRL1osRUFBWXpDLEdBQzlDLEdBQW1CLGlCQUFSOGlDLEVBQ1AsT0FBT0EsRUFHZixJQUFLLElBQUk3aUMsS0FBV3dDLEVBQVdnQyxJQUFLLENBQ2hDLElBQUlxK0IsRUFBTWhTLEdBQWV0VSxFQUFRL1osRUFBWXhDLEdBQzdDLEdBQW1CLGlCQUFSNmlDLEVBQ1AsT0FBT0EsRUFHZixJQUFLLElBQUlwbUIsS0FBV2phLEVBQVdpQyxJQUFLLENBQ2hDLElBQUlvK0IsRUFBTUMsR0FBbUJ2bUIsRUFBUS9aLEVBQVlpYSxHQUNqRCxHQUFtQixpQkFBUm9tQixFQUNQLE9BQU9BLEVBR2YsSUFBSyxJQUFJdGhCLEtBQWUvZSxFQUFXa0MsUUFBUyxDQUN4QyxJQUFJbStCLEVBQU1FLEdBQXNCeG1CLEVBQVEvWixFQUFZK2UsR0FDcEQsR0FBbUIsaUJBQVJzaEIsRUFDUCxPQUFPQSxFQUdmLElBQUssSUFBSXpiLEtBQWM1a0IsRUFBV29DLE9BQVEsQ0FDdEMsSUFBSWkrQixFQUFNRyxHQUFvQnptQixFQUFRL1osRUFBWTRrQixHQUNsRCxHQUFtQixpQkFBUnliLEVBQ1AsT0FBT0EsRUFHZixJQUFLLElBQUkvZ0IsS0FBYXRmLEVBQVczVSxNQUFPLENBQ3BDLElBQUlnMUMsRUFBTUksR0FBa0IxbUIsRUFBUS9aLEVBQVlzZixHQUNoRCxHQUFtQixpQkFBUitnQixFQUNQLE9BQU9BLEVBR2YsSUFBSyxJQUFJM2IsS0FBZTFrQixFQUFXbUMsUUFBUyxDQUN4QyxJQUFJaytCLEVBQU1LLEdBQXNCM21CLEVBQVEvWixHQUN4QyxHQUFtQixpQkFBUnFnQyxFQUNQLE9BQU9BLEdRNGNLTSxDQUFpQjVtQixFQUFRL1osR0FDekMsR0FBeUIsaUJBQWRvZ0MsRUFDUCxPQUFPam5FLEtBQUttOEQsbUJBQW1COEssRUFBV3JtQixFQUFRd2IsR0FHdERBLEVBQUdqeEQsWUFBWXkxQyxNQUliZ21CLHFCQUNGbE4sRUFDQTd5QixFQUNBNjlCLDRDQUlBLElBQUkrQyxFQUFlNWdDLEVBQVdVLFFBQVExa0MsUUFDakN3ZixHQUFNQSxFQUFFNmdCLFlBQWM1RixHQUFXcUYsUUFJbEMra0MsRUFBMkIsR0FDM0JDLEdBQW9CLEVBQ3hCLElBQUssSUFBSTVqQyxLQUFTMGpDLEVBQWMsQ0FDNUIsSUFBSXg0QixFQUFXbEwsRUFBTVgsa0JBQ2pCc0UsRUFBTzFuQyxLQUFLNjZELElBQUlxQyxNQUFNQyxzQkFDdEJDLGdCQUFjbnVCLEVBQVcsUUFFN0IsS0FBS3ZILEdBQVVBLGFBQWdCc3hCLFNBQVEsQ0FDbkMyTyxHQUFvQixFQUNwQixNQUdKLElBQUl6NEIsRUFBYW5MLEVBQU1ULGNBQ25Cc2tDLEVBQU03akMsRUFBTXRCLGVBRVpvbEMsRUFBUUgsRUFBTy9nRSxNQUNkdEksR0FBTUEsRUFBRTR3QyxXQUFhQSxHQUFZNXdDLEVBQUU2d0MsYUFBZUEsSUFFdkQsR0FBSTI0QixFQUNJRCxFQUNBQyxFQUFNcmdDLFNBQVd6RCxFQUVqQjhqQyxFQUFNMTRCLFVBQVUzcUMsS0FBS3UvQixPQUV0QixDQUNILElBQUkrakMsRUFBWSxJQUFJOTRCLEdBQVVDLEVBQVVDLEdBQ3BDMDRCLEVBQ0FFLEVBQVV0Z0MsU0FBV3pELEVBRXJCK2pDLEVBQVUzNEIsVUFBVTNxQyxLQUFLdS9CLEdBRTdCMmpDLEVBQU9sakUsS0FBS3NqRSxJQUtwQixHQUFJSCxFQUNBakQsRUFBWWoxQixhQUFlLHdDQUkvQixJQUFLLElBQUlxNEIsS0FBYUosRUFBUSxDQUUxQixJQUFJMUMsRUFBZ0I4QyxFQUFVdGdDLFNBQzlCLElBQUt3OUIsRUFFRCxTQUVKLElBQUkrQyxFQUFrQkQsRUFBVTM0QixVQUM1QkYsRUFBVysxQixFQUFjNWhDLGtCQUN6QjhMLEVBQWE4MUIsRUFBYzFoQyxjQUczQjBrQyxFQUFZLEdBQ2hCLzRCLEdBQXNCLE1BQ3RCLElBQUl2SCxFQUFPMW5DLEtBQUs2NkQsSUFBSXFDLE1BQU1DLHNCQUN0QkMsZ0JBQWNudUIsSUFFbEIsS0FBSXZILEdBQVFBLGFBQWdCc3hCLFNBeUJ4QixTQXpCK0IsQ0FDL0IwTCxFQUFZcDFCLGdCQUNaLElBVUk5Z0MsRUFWQWtxRCxRQUFnQjE0RCxLQUFLNjZELElBQUlxQyxNQUFNUyxRQUFRQyxLQUFLbDJCLEVBQUtsbUMsTUFTakR5bUUsRUFBZSxJQUFJMTJELE9BRm5CLHlFQUUyQyxNQUUzQzIyRCxFQUFXLEVBRWYsS0FBUTE1RCxFQUFReTVELEVBQWF2c0QsS0FBS2c5QyxJQUFXLENBRXpDLEdBQUl3UCxJQUFhaDVCLEVBQVksQ0FDekI4NEIsRUFBWXg1RCxFQUFNLEdBQ2xCLE1BRUowNUQsS0FRUixJQUFJQyxFQUFhSCxFQUFVbmtFLE1BQU0sU0FDakNza0UsRUFBYUEsRUFBV3RsRSxRQUFRVixHQUNaLEtBQVRBLElBRVgsSUFBSWltRSxFQUFhLEVBQ2JDLEVBQWMsRUFJbEIsR0FBSUYsRUFBVzFzRSxRQUFVLEVBQUcsQ0FFeEIsSUFBSTZzRSxFQUFhSCxFQUFXNWlDLFFBQVEzaEMsT0FDcEMwa0UsRUFBYUMsR0FBa0JELEVBQVksS0FFM0NGLEVBRHFCRSxFQUFXemtFLE1BQU0sS0FDVnBJLE9BRTVCLElBQUkrc0UsRUFBVUwsRUFBVzVpQyxRQUFRM2hDLE9BQ2pDNGtFLEVBQVVELEdBQWtCQyxFQUFTLEtBQ3JDLElBQUlDLEVBQW1CRCxFQUFRM2tFLE1BQU0sS0FDckMsSUFBSyxJQUFJcW1ELEtBQU91ZSxFQUNaLElBQUt2ZSxFQUFJOWlCLFNBQVMsS0FDZCxNQUlSaWhDLEVBQWNGLEVBQVcxc0UsT0FHN0IsR0FBbUIsR0FBZjRzRSxFQUFrQixTQUd0QixJQUFJSyxFQUFpQjFELEVBQWMxaEMsWUFBWSxHQUMvQyxHQUFJb2xDLEdBQWtCTixFQUFZLFNBQ2xDLElBQUlPLEVBQVUsR0FHZCxJQUFLLElBQUlDLEtBQWFULEVBQVksQ0FDOUIsSUFDSVUsRUFEVU4sR0FBa0JLLEVBQVVobEUsT0FBUSxLQUNwQkMsTUFBTSxLQUNwQyxHQUFJNmtFLEVBQWlCRyxFQUFnQnB0RSxPQUFRLENBQ3pDLElBQ0l1eUIsRUFBT283QixHQURBeWYsRUFBZ0JILEdBQWdCOWtFLE9BQ1RpakMsRUFBV0wsWUFFekN4WSxFQUFLa2tCLFdBQ0x5MkIsRUFBUW5rRSxLQUFLd3BCLEdBR1IwMkMsRUFBWWgxQixRQUFRd0MsV0FDcEJ3eUIsRUFBWS8wQixRQUFRdUMsV0FLakJsa0IsRUFBTzAyQyxFQUFZaDFCLFVBQ25CZzFCLEVBQVloMUIsUUFBVTFoQixFQUFLcmlCLFNBRTNCcWlCLEVBQU8wMkMsRUFBWS8wQixVQUNuQiswQixFQUFZLzBCLFFBQVUzaEIsRUFBS3JpQixXQVAvQis0RCxFQUFZaDFCLFFBQVUxaEIsRUFBS3JpQixRQUMzQis0RCxFQUFZLzBCLFFBQVUzaEIsRUFBS3JpQixVQVUvQmc5RCxFQUFRbmtFLEtBQUssV0FHakJta0UsRUFBUW5rRSxLQUFLLE1BTXJCLEdBQ0lta0UsRUFBUTNpRCxPQUFPcmQsR0FDRSxPQUFOQSxJQUtYLFlBRkErN0QsRUFBWWoxQixhQUNSLDJDQUdKaTFCLEVBQVk5MEIsb0JBQVo4MEIsRUFBWTkwQixtQkFBc0IsR0FJdEMsSUFBSyxJQUFJazVCLEtBQWlCZixFQUFpQixDQUN2QyxJQUFJZ0IsRUFBbUJELEVBQWN4bEMsWUFBWSxHQUVqRCxHQUFJeWxDLEdBQW9CWCxFQUFZLFNBRXBDLElBQUlZLEVBQVUsRUFDZCxJQUFLLElBQUlKLEtBQWFULEVBQVksQ0FDOUIsSUFDSVUsRUFEVU4sR0FBa0JLLEVBQVVobEUsT0FBUSxLQUNwQkMsTUFBTSxLQUNwQyxHQUFJa2xFLEVBQW1CRixFQUFnQnB0RSxPQUFRLENBQzNDLElBQ0lpNkQsRUFET21ULEVBQWdCRSxHQUFrQm5sRSxPQUN6QkMsTUFBTWlsRSxFQUFjcmxDLGdCQUV4QyxJQUFLaXlCLEVBQVUsU0FDZixHQUF3QixJQUFwQkEsRUFBU2o2RCxPQUFjLENBQ3ZCLElBQUl1K0QsRUFBVzNELEdBQ1hYLEVBQVMsR0FDVDd1QixFQUFXeUIsY0FHZixHQUF1QixPQUFuQjB4QixFQUFTMS9ELE1BQWdCLENBQ3JCMC9ELEVBQVM5MUQsT0FBU3M1QixHQUFVNlYsT0FDNUJ5MUIsRUFBY3RtQyxVQUFZaEYsR0FBVTZWLE1BRXhDLElBQUkvNEMsRUFBUTAvRCxFQUFTMS9ELE1BRWpCMHVFLEVBQVVMLEVBQVFsdEUsUUFDbEJrdEUsRUFBUUssS0FFUnRFLEVBQVk3MEIsb0JBQVo2MEIsRUFBWTcwQixtQkFBc0IsR0FDbENvNUIsR0FDSXZQLEVBQ0FqWixHQUNJa29CLEVBQVFLLEdBQ1JuaUMsRUFBV0wsWUFFZnNpQyxFQUNBeHVFLFVBSVQsR0FDSG83RCxFQUFTajZELE9BQVNxdEUsRUFBY3hsQyxZQUFZLElBQzVDd2xDLEVBQWN4bEMsWUFBWSxJQUFNLEVBQ2xDLENBQ0UsSUFBSWhwQyxFQUFRLEtBSVIwL0QsRUFBVzNELEdBRlhYLEVBQVNvVCxFQUFjeGxDLFlBQVksSUFBSTEvQixPQUl2Q2lqQyxFQUFXeUIsY0FHUSxPQUFuQjB4QixFQUFTMS9ELFFBQ0wwL0QsRUFBUzkxRCxPQUFTczVCLEdBQVU2VixPQUM1QnkxQixFQUFjdG1DLFVBQVloRixHQUFVNlYsTUFFeEMvNEMsRUFBUTAvRCxFQUFTMS9ELE1BRWIwdUUsRUFBVUwsRUFBUWx0RSxRQUNsQmt0RSxFQUFRSyxLQUVSdEUsRUFBWTcwQixvQkFBWjYwQixFQUFZNzBCLG1CQUFzQixHQUNsQ281QixHQUNJdlAsRUFDQWpaLEdBQ0lrb0IsRUFBUUssR0FDUm5pQyxFQUFXTCxZQUVmc2lDLEVBQ0F4dUUsTUFPcEIwdUUsVUFNaEJFLFlBQ0ksT0FBT2xwRSxLQUFLNjZELElBQUlzTyxVQUFVQyxvQkFBb0JDLGdCQUFjQyxPQUdoRXROLGFBQWF1TixHQUdULEtBRm9CdnBFLEtBQUs2NkQsSUFBSXNPLFVBQVVLLFdBQVdDLGdCQUVyQkosZ0JBQ3pCLE9BR0osSUFBSUssRUFBb0IsR0FDeEIsT0FBUUgsR0FDSixLQUFLaHNDLEdBQVVrTyxLQUNYaStCLEVBQW9CLHlLQVdwQixNQUNKLEtBQUtuc0MsR0FBVXFPLElBQ1g4OUIsRUFBb0IsdUtBV3BCLE1BQ0osS0FBS25zQyxHQUFVaVAsUUFDWGs5QixFQUFvQiwwTEFlRixLQUF0QkEsR0FDbUIxcEUsS0FBSzJwRSxpQkFBaUJELEdBTWpEQyxpQkFBaUJ0bkUsR0FDYixJQUFJaW5FLEVBQVN0cEUsS0FBS2twRSxZQUVsQixHQUFJSSxFQUFRLENBQ1IsSUFBSWp1QixFQUFTaXVCLEVBQU9NLFlBQ2hCM0wsRUFBYTVpQixFQUFPbDVDLEtBQ3BCQSxFQUFPbW5FLEVBQU9PLFFBQVE1TCxHQU0xQixPQUpBNWlCLEVBQU9wRixHQUFLOXpDLEVBQUsxRyxPQUNqQjZ0RSxFQUFPUSxhQUFhenVCLEdBQ3BCaXVCLEVBQU9TLGlCQUFpQixLQUFPMW5FLElBRXhCLEVBR1gsT0FBTyJ9