@turnai/turn-shared 1.0.5 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,11 @@
1
- !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("turn-shared",[],e):"object"==typeof exports?exports["turn-shared"]=e():t["turn-shared"]=e()}("undefined"!=typeof self?self:this,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=303)}([function(t,e,n){var r=n(1),o=n(16);t.exports=function(t){return function e(n,i){switch(arguments.length){case 0:return e;case 1:return o(n)?e:r((function(e){return t(n,e)}));default:return o(n)&&o(i)?e:o(n)?r((function(e){return t(e,i)})):o(i)?r((function(e){return t(n,e)})):t(n,i)}}}},function(t,e,n){var r=n(16);t.exports=function(t){return function e(n){return 0===arguments.length||r(n)?e:t.apply(this,arguments)}}},function(t,e){var n=Array.isArray;t.exports=n},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,n){var r=n(70),o="object"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function("return this")();t.exports=i},function(t,e,n){"use strict";var r=n(64),o=n(166),i=Object.prototype.toString;function u(t){return"[object Array]"===i.call(t)}function c(t){return null!==t&&"object"==typeof t}function a(t){return"[object Function]"===i.call(t)}function s(t,e){if(null!=t)if("object"==typeof t||u(t)||(t=[t]),u(t))for(var n=0,r=t.length;n<r;n++)e.call(null,t[n],n,t);else for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e.call(null,t[o],o,t)}t.exports={isArray:u,isArrayBuffer:function(t){return"[object ArrayBuffer]"===i.call(t)},isBuffer:o,isFormData:function(t){return"undefined"!=typeof FormData&&t instanceof FormData},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isObject:c,isUndefined:function(t){return void 0===t},isDate:function(t){return"[object Date]"===i.call(t)},isFile:function(t){return"[object File]"===i.call(t)},isBlob:function(t){return"[object Blob]"===i.call(t)},isFunction:a,isStream:function(t){return c(t)&&a(t.pipe)},isURLSearchParams:function(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:s,merge:function t(){var e={};function n(n,r){"object"==typeof e[r]&&"object"==typeof n?e[r]=t(e[r],n):e[r]=n}for(var r=0,o=arguments.length;r<o;r++)s(arguments[r],n);return e},extend:function(t,e,n){return s(e,(function(e,o){t[o]=n&&"function"==typeof e?r(e,n):e})),t},trim:function(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}}},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,n){var r=n(214),o=n(217);t.exports=function(t,e){var n=o(t,e);return r(n)?n:void 0}},function(t,e,n){t.exports=function(){"use strict";var t=6e4,e=36e5,n="millisecond",r="second",o="minute",i="hour",u="day",c="week",a="month",s="quarter",f="year",l="date",p="Invalid Date",d=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,h=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,v={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},y=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},g={s:y,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),o=n%60;return(e<=0?"+":"-")+y(r,2,"0")+":"+y(o,2,"0")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),o=e.clone().add(r,a),i=n-o<0,u=e.clone().add(r+(i?-1:1),a);return+(-(r+(n-o)/(i?o-u:u-o))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:a,y:f,w:c,d:u,D:l,h:i,m:o,s:r,ms:n,Q:s}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},m="en",b={};b[m]=v;var x="$isDayjsObject",_=function(t){return t instanceof A||!(!t||!t[x])},w=function t(e,n,r){var o;if(!e)return m;if("string"==typeof e){var i=e.toLowerCase();b[i]&&(o=i),n&&(b[i]=n,o=i);var u=e.split("-");if(!o&&u.length>1)return t(u[0])}else{var c=e.name;b[c]=e,o=c}return!r&&o&&(m=o),o||!r&&m},N=function(t,e){if(_(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new A(n)},O=g;O.l=w,O.i=_,O.w=function(t,e){return N(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var A=function(){function v(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[x]=!0}var y=v.prototype;return y.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(d);if(r){var o=r[2]-1||0,i=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,i)):new Date(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,i)}}return new Date(e)}(t),this.init()},y.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},y.$utils=function(){return O},y.isValid=function(){return!(this.$d.toString()===p)},y.isSame=function(t,e){var n=N(t);return this.startOf(e)<=n&&n<=this.endOf(e)},y.isAfter=function(t,e){return N(t)<this.startOf(e)},y.isBefore=function(t,e){return this.endOf(e)<N(t)},y.$g=function(t,e,n){return O.u(t)?this[e]:this.set(n,t)},y.unix=function(){return Math.floor(this.valueOf()/1e3)},y.valueOf=function(){return this.$d.getTime()},y.startOf=function(t,e){var n=this,s=!!O.u(e)||e,p=O.p(t),d=function(t,e){var r=O.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return s?r:r.endOf(u)},h=function(t,e){return O.w(n.toDate()[t].apply(n.toDate("s"),(s?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},v=this.$W,y=this.$M,g=this.$D,m="set"+(this.$u?"UTC":"");switch(p){case f:return s?d(1,0):d(31,11);case a:return s?d(1,y):d(0,y+1);case c:var b=this.$locale().weekStart||0,x=(v<b?v+7:v)-b;return d(s?g-x:g+(6-x),y);case u:case l:return h(m+"Hours",0);case i:return h(m+"Minutes",1);case o:return h(m+"Seconds",2);case r:return h(m+"Milliseconds",3);default:return this.clone()}},y.endOf=function(t){return this.startOf(t,!1)},y.$set=function(t,e){var c,s=O.p(t),p="set"+(this.$u?"UTC":""),d=(c={},c[u]=p+"Date",c[l]=p+"Date",c[a]=p+"Month",c[f]=p+"FullYear",c[i]=p+"Hours",c[o]=p+"Minutes",c[r]=p+"Seconds",c[n]=p+"Milliseconds",c)[s],h=s===u?this.$D+(e-this.$W):e;if(s===a||s===f){var v=this.clone().set(l,1);v.$d[d](h),v.init(),this.$d=v.set(l,Math.min(this.$D,v.daysInMonth())).$d}else d&&this.$d[d](h);return this.init(),this},y.set=function(t,e){return this.clone().$set(t,e)},y.get=function(t){return this[O.p(t)]()},y.add=function(n,s){var l,p=this;n=Number(n);var d=O.p(s),h=function(t){var e=N(p);return O.w(e.date(e.date()+Math.round(t*n)),p)};if(d===a)return this.set(a,this.$M+n);if(d===f)return this.set(f,this.$y+n);if(d===u)return h(1);if(d===c)return h(7);var v=(l={},l[o]=t,l[i]=e,l[r]=1e3,l)[d]||1,y=this.$d.getTime()+n*v;return O.w(y,this)},y.subtract=function(t,e){return this.add(-1*t,e)},y.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||p;var r=t||"YYYY-MM-DDTHH:mm:ssZ",o=O.z(this),i=this.$H,u=this.$m,c=this.$M,a=n.weekdays,s=n.months,f=n.meridiem,l=function(t,n,o,i){return t&&(t[n]||t(e,r))||o[n].slice(0,i)},d=function(t){return O.s(i%12||12,t,"0")},v=f||function(t,e,n){var r=t<12?"AM":"PM";return n?r.toLowerCase():r};return r.replace(h,(function(t,r){return r||function(t){switch(t){case"YY":return String(e.$y).slice(-2);case"YYYY":return O.s(e.$y,4,"0");case"M":return c+1;case"MM":return O.s(c+1,2,"0");case"MMM":return l(n.monthsShort,c,s,3);case"MMMM":return l(s,c);case"D":return e.$D;case"DD":return O.s(e.$D,2,"0");case"d":return String(e.$W);case"dd":return l(n.weekdaysMin,e.$W,a,2);case"ddd":return l(n.weekdaysShort,e.$W,a,3);case"dddd":return a[e.$W];case"H":return String(i);case"HH":return O.s(i,2,"0");case"h":return d(1);case"hh":return d(2);case"a":return v(i,u,!0);case"A":return v(i,u,!1);case"m":return String(u);case"mm":return O.s(u,2,"0");case"s":return String(e.$s);case"ss":return O.s(e.$s,2,"0");case"SSS":return O.s(e.$ms,3,"0");case"Z":return o}return null}(t)||o.replace(":","")}))},y.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},y.diff=function(n,l,p){var d,h=this,v=O.p(l),y=N(n),g=(y.utcOffset()-this.utcOffset())*t,m=this-y,b=function(){return O.m(h,y)};switch(v){case f:d=b()/12;break;case a:d=b();break;case s:d=b()/3;break;case c:d=(m-g)/6048e5;break;case u:d=(m-g)/864e5;break;case i:d=m/e;break;case o:d=m/t;break;case r:d=m/1e3;break;default:d=m}return p?d:O.a(d)},y.daysInMonth=function(){return this.endOf(a).$D},y.$locale=function(){return b[this.$L]},y.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},y.clone=function(){return O.w(this.$d,this)},y.toDate=function(){return new Date(this.valueOf())},y.toJSON=function(){return this.isValid()?this.toISOString():null},y.toISOString=function(){return this.$d.toISOString()},y.toString=function(){return this.$d.toUTCString()},v}(),$=A.prototype;return N.prototype=$,[["$ms",n],["$s",r],["$m",o],["$H",i],["$W",u],["$M",a],["$y",f],["$D",l]].forEach((function(t){$[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),N.extend=function(t,e){return t.$i||(t(e,A,N),t.$i=!0),N},N.locale=w,N.isDayjs=_,N.unix=function(t){return N(1e3*t)},N.en=b[m],N.Ls=b,N.p={},N}()},function(t,e){t.exports=function(t,e){switch(t){case 0:return function(){return e.apply(this,arguments)};case 1:return function(t){return e.apply(this,arguments)};case 2:return function(t,n){return e.apply(this,arguments)};case 3:return function(t,n,r){return e.apply(this,arguments)};case 4:return function(t,n,r,o){return e.apply(this,arguments)};case 5:return function(t,n,r,o,i){return e.apply(this,arguments)};case 6:return function(t,n,r,o,i,u){return e.apply(this,arguments)};case 7:return function(t,n,r,o,i,u,c){return e.apply(this,arguments)};case 8:return function(t,n,r,o,i,u,c,a){return e.apply(this,arguments)};case 9:return function(t,n,r,o,i,u,c,a,s){return e.apply(this,arguments)};case 10:return function(t,n,r,o,i,u,c,a,s,f){return e.apply(this,arguments)};default:throw new Error("First argument to _arity must be a non-negative integer no greater than ten")}}},function(t,e,n){var r=n(20),o=n(192),i=n(193),u=r?r.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":u&&u in Object(t)?o(t):i(t)}},function(t,e,n){var r=n(89);function o(t,e,n){var i=r(t,8,void 0,void 0,void 0,void 0,void 0,e=n?void 0:e);return i.placeholder=o.placeholder,i}o.placeholder={},t.exports=o},function(t,e,n){var r=n(10),o=n(2),i=n(6);t.exports=function(t){return"string"==typeof t||!o(t)&&i(t)&&"[object String]"==r(t)}},function(t,e){t.exports=function(t,e){return Object.prototype.hasOwnProperty.call(e,t)}},function(t,e,n){var r=n(1),o=n(0),i=n(16);t.exports=function(t){return function e(n,u,c){switch(arguments.length){case 0:return e;case 1:return i(n)?e:o((function(e,r){return t(n,e,r)}));case 2:return i(n)&&i(u)?e:i(n)?o((function(e,n){return t(e,u,n)})):i(u)?o((function(e,r){return t(n,e,r)})):r((function(e){return t(n,u,e)}));default:return i(n)&&i(u)&&i(c)?e:i(n)&&i(u)?o((function(e,n){return t(e,n,c)})):i(n)&&i(c)?o((function(e,n){return t(e,u,n)})):i(u)&&i(c)?o((function(e,r){return t(n,e,r)})):i(n)?r((function(e){return t(e,u,c)})):i(u)?r((function(e){return t(n,e,c)})):i(c)?r((function(e){return t(n,u,e)})):t(n,u,c)}}}},function(t,e,n){var r=n(9),o=n(1),i=n(0),u=n(138);t.exports=i((function(t,e){return 1===t?o(e):r(t,u(t,[],e))}))},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t&&!0===t["@@functional/placeholder"]}},function(t,e,n){var r=n(127),o=n(128),i=n(129);t.exports=function(){function t(t,e,n){for(var r=n.next();!r.done;){if((e=t["@@transducer/step"](e,r.value))&&e["@@transducer/reduced"]){e=e["@@transducer/value"];break}r=n.next()}return t["@@transducer/result"](e)}var e="undefined"!=typeof Symbol?Symbol.iterator:"@@iterator";return function(n,u,c){if("function"==typeof n&&(n=r(n)),i(c))return function(t,e,n){for(var r=0,o=n.length;r<o;){if((e=t["@@transducer/step"](e,n[r]))&&e["@@transducer/reduced"]){e=e["@@transducer/value"];break}r+=1}return t["@@transducer/result"](e)}(n,u,c);if("function"==typeof c.reduce)return function(t,e,n){return t["@@transducer/result"](n.reduce(o(t["@@transducer/step"],t),e))}(n,u,c);if(null!=c[e])return t(n,u,c[e]());if("function"==typeof c.next)return t(n,u,c);throw new TypeError("reduce: list must be array or iterable")}}()},function(t,e){t.exports=Array.isArray||function(t){return null!=t&&t.length>=0&&"[object Array]"===Object.prototype.toString.call(t)}},function(t,e,n){var r=n(0),o=n(146),i=n(148),u=n(17),c=n(149),a=n(15),s=n(35);t.exports=r(o(["map"],c,(function(t,e){switch(Object.prototype.toString.call(e)){case"[object Function]":return a(e.length,(function(){return t.call(this,e.apply(this,arguments))}));case"[object Object]":return u((function(n,r){return n[r]=t(e[r]),n}),{},s(e));default:return i(t,e)}})))},function(t,e,n){var r=n(4).Symbol;t.exports=r},function(t,e){var n=/^(?:0|[1-9]\d*)$/;t.exports=function(t,e){var r=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==r||"symbol"!=r&&n.test(t))&&t>-1&&t%1==0&&t<e}},function(t,e,n){var r=n(74),o=n(43);t.exports=function(t){return null!=t&&o(t.length)&&!r(t)}},function(t,e,n){var r=n(204),o=n(205),i=n(206),u=n(207),c=n(208);function a(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}a.prototype.clear=r,a.prototype.delete=o,a.prototype.get=i,a.prototype.has=u,a.prototype.set=c,t.exports=a},function(t,e,n){var r=n(44);t.exports=function(t,e){for(var n=t.length;n--;)if(r(t[n][0],e))return n;return-1}},function(t,e,n){var r=n(7)(Object,"create");t.exports=r},function(t,e,n){var r=n(226);t.exports=function(t,e){var n=t.__data__;return r(e)?n["string"==typeof e?"string":"hash"]:n.map}},function(t,e,n){var r=n(10),o=n(6);t.exports=function(t){return"symbol"==typeof t||o(t)&&"[object Symbol]"==r(t)}},function(t,e,n){var r=n(27);t.exports=function(t){if("string"==typeof t||r(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}},function(t,e){t.exports=function(t){return t}},function(t,e,n){var r=n(48),o=n(3);t.exports=function(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=r(t.prototype),i=t.apply(n,e);return o(i)?i:n}}},function(t,e){t.exports=function(t,e){for(var n=-1,r=t.length,o=0,i=[];++n<r;){var u=t[n];u!==e&&"__lodash_placeholder__"!==u||(t[n]="__lodash_placeholder__",i[o++]=n)}return i}},function(t,e){t.exports={AL:[{regex:/^\d{7,8}$/,description:"NNNNNNNNN MinLength = 7 MaxLength = 8"},{regex:/^[A-Z]\d{6,7}$/i,description:"ANNNNNNNN MinLength = 7 MaxLength = 8"}],AK:[{regex:/^\d{7}$/,description:"NNNNNNNN MinLength = 7 MaxLength = 7"}],AZ:[{regex:/^[A-Z]\d{8}$/i,description:"ANNNNNNNN MinLength = 9 MaxLength = 9"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],AR:[{regex:/^[0-9]{9}$/,description:"NNNNNNNNN MinLength = 9 MaxLength = 9"},{regex:/^[A-Z]\d{8}$/i,description:"ANNNNNNNN MinLength = 9 MaxLength = 9"}],CA:[{regex:/^[A-Z]{1}[0-9]{7}$/i,description:"License must be 1 letter followed by 7 numbers"}],CO:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[A-Z]{1}[0-9]{3,6}$/i,description:"ANNNNNN min length 4 max 7"},{regex:/^[A-Z]{2}[0-9]{1,5}$/i,description:"AANNNNN min length 3 max 7"}],CT:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],DE:[{regex:/^\d{1,7}$/,description:"License must be 1-7 numbers"}],DC:[{regex:/^[0-9]{7}$/i,description:"License must be 7 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],FL:[{regex:/^[A-Z]{1}[0-9]{12}$/i,description:"License must be 1 letter followed by 12 numbers"},{regex:/^[A-Z]\d{11}$/i,description:"ANNNNNNNNNNN MinLength = 12 MaxLength = 12"}],GA:[{regex:/^[0-9]{7,9}$/i,description:"License must be 7-9 numbers"}],GU:[{regex:/^\d{10}$/,description:"NNNNNNNNNN MinLength = 10 MaxLength = 10"}],HI:[{regex:/^[A-Z]{1}[0-9]{8}$/i,description:"License must be 1 letter followed by 8 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],ID:[{regex:/^[A-Z]{2}[0-9]{6}[A-Z]{1}$/i,description:"License must be 2 letters followed by 6 numbers followed by 1 letter"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],IL:[{regex:/^[A-Z]{1}[0-9]{11}$/i,description:"License must be 1 letter followed by 11 numbers"}],IN:[{regex:/^[0-9]{9,10}$/i,description:"License must be 9-10 numbers"}],IA:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[0-9]{3}[A-Z]{2}[0-9]{4}$/i,description:"License must be 3 numbers followed by 2 letters followed by 4 numbers"}],KS:[{regex:/^[A-Z]{1}[0-9]{8}$/i,description:"License must be 1 letter followed by 8 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],KY:[{regex:/^[A-Z]{1}[0-9]{8,9}$/i,description:"License must be 1 letter followed by 8-9 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],LA:[{regex:/^[0-9]{1,9}$/i,description:"License must be 1-9 numbers"}],ME:[{regex:/^[0-9]{7}$/i,description:"License must be 7 numbers"},{regex:/^[0-9]{7}[A-Z]{1}$/i,description:"License must be 7 numbers followed by 1 letter"},{regex:/^[0-9]{8}$/i,description:"License must be 8 numbers"}],MD:[{regex:/^[A-Z]{1,2}[0-9]{11,12}$/i,description:"License must be 1 or 2 letters followed by 11 or 12 numbers"}],MA:[{regex:/(^[A-Z]{1}[0-9]{8}$|^[A-Z]{2}[0-9]{7}$)/i,description:"License must be 1 letter followed by 8 numbers or 2 letters followed by 7 numbers"}],MI:[{regex:/^[A-Z]{1}[0-9]{12}$/i,description:"License must be 1 letter followed by 12 numbers"}],MN:[{regex:/^[A-Z]{1}[0-9]{12}$/i,description:"License must be 1 letter followed by 12 numbers"}],MS:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],MO:[{regex:/^[A-Z]{1}[0-9]{5,9}$/i,description:"License must be 1 letter followed by 5-9 numbers"},{regex:/^[A-Z]{1}[0-9]{6}[R]{1}$/i,description:'License must be 1 letter followed by 6 numbers followed by "R"'},{regex:/^[0-9]{9}[A-Z]{1}$/i,description:"License must be 9 numbers followed by 1 letter"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[0-9]{3}[A-Z]{1}[0-9]{6}$/i,description:"License must be 3 numbers + 1 alfanumeric + 6 numbers"},{regex:/^[A-Z]\d{5,6}[A-Z]$/i,description:"ANNNNNA MinLength = 7 MaxLength = 7 OR ANNNNNA MinLength = 8 MaxLength = 8"}],MT:[{regex:/^[0-9]{13}$/i,description:"License must be 13 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[A-Z]\d(\d|[A-Z])\d{2}[A-Z]{3}\d$/i,description:"ANXNNAAAN MinLength = 9 MaxLength = 9"},{regex:/^[a-z]{3}\d{10}$/i,description:"Three letters and 10 digits"}],NE:[{regex:/^[A-Z]\d{3,8}$/i,description:"ANNNNNNNN MinLength = 4 MaxLength = 9"}],NV:[{regex:/^[0-9]{9,10}$/i,description:"License must be 9-10 numbers"},{regex:/^[0-9]{12}$/i,description:"License must be 12 numbers"},{regex:/^[A-Z]\d{8}$/i,description:"ANNNNNNNN MinLength = 9 MaxLength = 9"}],NH:[{regex:/(^[0-9]{2}[A-Z]{3}[0-9]{5}$|^[A-Z]{3}[0-9]{8}$)/i,description:"License must be 2 numbers followed by 3 letters followed by 5 numbers OR 3 letters followed by 8 numbers"}],NJ:[{regex:/^[A-Z]{1}[0-9]{14}$/i,description:"License must be 1 letter followed by 14 numbers"}],NM:[{regex:/^[0-9]{8,9}$/i,description:"License must be 8-9 numbers"}],NY:[{regex:/^[A-Z]{1}[0-9]{7}$/i,description:"License must be 1 letter followed by 7 numbers"},{regex:/^[A-Z]{1}[0-9]{17,18}$/i,description:"License must be 1 letter followed by 17-18 numbers"},{regex:/^[0-9]{8,9}$/i,description:"License must be 8-9 numbers"}],NC:[{regex:/^[0-9]{1,12}$/i,description:"License must be 1-12 numbers"}],ND:[{regex:/^[A-Z]{3}[0-9]{6}$/i,description:"License must be 3 letters followed by 6 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],OH:[{regex:/^[A-Z]{2}[0-9]{6}$/i,description:"License must be 2 letters followed by 6 numbers"}],OK:[{regex:/^[A-Z]{1}[0-9]{9}$/i,description:"License must be 1 letter followed by 9 numbers"},{regex:/^\d{7,9}$/,description:"NNNNNNNNN MinLength = 7 MaxLength = 9"}],OR:[{regex:/^[0-9]{5,9}$/i,description:"License must be 5-9 numbers"},{regex:/^[A-Z]\d{7}$/i,description:"ANNNNNNN MinLength = 8 MaxLength = 8"},{regex:/^[A-Z0-9]{6,9}$/i,description:"XXXXXXXXX MinLength = 6 MaxLength = 9"}],PA:[{regex:/^[0-9]{8}$/i,description:"License must be 8 numbers"}],RI:[{regex:/^[0-9]{7,8}$/i,description:"License must be 7 or 8 numbers without letters"},{regex:/^[A-Z]{1}[0-9]{6}$/i,description:"License must be 1 letter followed by 6 numbers"}],SC:[{regex:/^[0-9]{6,11}$/i,description:"License must be 6-11 numbers (new: 9, old format: 6-11)"}],SD:[{regex:/^[0-9]{6,9}$/i,description:"License must be 6-9 numbers"}],TN:[{regex:/^[0-9]{7,9}$/i,description:"License must be 7-9 numbers"}],TX:[{regex:/^\d{5,8}$/,description:"NNNNNNNN MinLength = 5 MaxLength = 8"}],UT:[{regex:/^[0-9]{4,10}$/i,description:"License must be 4-10 numbers"}],VT:[{regex:/^[0-9]{7,}$/i,description:"License must be 7-8 numbers"},{regex:/^[0-9]{7}[A]$/i,description:'License must be 7 numbers followed by "A"'},{regex:/^\d{7}[A-Z]?$/i,description:"NNNNNNNA MinLength = 8 MaxLength = 8 OR NNNNNNN MinLength = 7 MaxLength = 7"}],VA:[{regex:/^[A-Z]{1}[0-9]{8}$/i,description:"License must be 1 letter followed by 8 numbers"},{regex:/^[0-9]{9}$/,description:"License must be 9 numbers"}],VI:[{regex:/^\d{10}$/,description:"NNNNNNNNNN MinLength = 10 MaxLength = 10"}],WA:[{regex:/^(?=.{12}$)[A-Z]{1,7}[A-Z0-9\\*]{4,11}$/i,description:'License must be 1-7 letters followed by any combination of letters, numbers, or "*" for a total of 12 characters'},{regex:/^[A-Z0-9]{12}$/i,description:"XXXXXXXXXXXX MinLength = 12 MaxLength = 12"}],WV:[{regex:/^[0-9]{7}$/i,description:"License must be 7 numbers"},{regex:/^[A-Z]{2}[0-9]{5}$/i,description:"License must be 2 letters followed by 5 numbers"},{regex:/^[A-Z]{1,2}[0-9]{6}$/i,description:"License must be 1-2 letters followed by 6 numbers"},{regex:/^[A-Z]\d{6}$/i,description:"ANNNNNN MinLength = 7 MaxLength = 7"},{regex:/^[A-Z]{2}\d{5,6}$/i,description:"AANNNNN MinLength = 7 MaxLength = 7 OR AANNNNNN MinLength = 8 MaxLength = 8"},{regex:/^\d[A-Z]\d{5}$/i,description:"NANNNNN MinLength = 7 MaxLength = 7"}],WI:[{regex:/^[A-Z]{1}[0-9]{13}$/i,description:"License must be 1 letter followed by 13 numbers"}],WY:[{regex:/^[0-9]{9}$/,description:"License must be 9 numbers"}],PR:[{regex:/^\d{7,9}$/,description:"NNNNNNNNN MinLength = 7 MaxLength = 9"}]}},function(t,e){var n,r,o=t.exports={};function i(){throw new Error("setTimeout has not been defined")}function u(){throw new Error("clearTimeout has not been defined")}function c(t){if(n===setTimeout)return setTimeout(t,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(t){n=i}try{r="function"==typeof clearTimeout?clearTimeout:u}catch(t){r=u}}();var a,s=[],f=!1,l=-1;function p(){f&&a&&(f=!1,a.length?s=a.concat(s):l=-1,s.length&&d())}function d(){if(!f){var t=c(p);f=!0;for(var e=s.length;e;){for(a=s,s=[];++l<e;)a&&a[l].run();l=-1,e=s.length}a=null,f=!1,function(t){if(r===clearTimeout)return clearTimeout(t);if((r===u||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(t);try{r(t)}catch(e){try{return r.call(null,t)}catch(e){return r.call(this,t)}}}(t)}}function h(t,e){this.fun=t,this.array=e}function v(){}o.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];s.push(new h(t,e)),1!==s.length||f||c(d)},h.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=v,o.addListener=v,o.once=v,o.off=v,o.removeListener=v,o.removeAllListeners=v,o.emit=v,o.prependListener=v,o.prependOnceListener=v,o.listeners=function(t){return[]},o.binding=function(t){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(t){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){var r,o,i,u,c=n(1),a=n(13),s=n(57);t.exports=(r=!{toString:null}.propertyIsEnumerable("toString"),o=["constructor","valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],i=function(){"use strict";return arguments.propertyIsEnumerable("length")}(),u=function(t,e){for(var n=0;n<t.length;){if(t[n]===e)return!0;n+=1}return!1},"function"!=typeof Object.keys||i?c((function(t){if(Object(t)!==t)return[];var e,n,c=[],f=i&&s(t);for(e in t)!a(e,t)||f&&"length"===e||(c[c.length]=e);if(r)for(n=o.length-1;n>=0;)a(e=o[n],t)&&!u(c,e)&&(c[c.length]=e),n-=1;return c})):c((function(t){return Object(t)!==t?[]:Object.keys(t)})))},function(t,e,n){var r=n(14),o=n(17);t.exports=r(o)},function(t,e,n){var r=n(18);t.exports=function(t,e){return function(){var n=arguments.length;if(0===n)return e();var o=arguments[n-1];return r(o)||"function"!=typeof o[t]?e.apply(this,arguments):o[t].apply(o,Array.prototype.slice.call(arguments,0,n-1))}}},function(t,e,n){"use strict";(function(e){var r=n(5),o=n(168),i={"Content-Type":"application/x-www-form-urlencoded"};function u(t,e){!r.isUndefined(t)&&r.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}var c,a={adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==e)&&(c=n(65)),c),transformRequest:[function(t,e){return o(e,"Content-Type"),r.isFormData(t)||r.isArrayBuffer(t)||r.isBuffer(t)||r.isStream(t)||r.isFile(t)||r.isBlob(t)?t:r.isArrayBufferView(t)?t.buffer:r.isURLSearchParams(t)?(u(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):r.isObject(t)?(u(e,"application/json;charset=utf-8"),JSON.stringify(t)):t}],transformResponse:[function(t){if("string"==typeof t)try{t=JSON.parse(t)}catch(t){}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(t){return t>=200&&t<300}};a.headers={common:{Accept:"application/json, text/plain, */*"}},r.forEach(["delete","get","head"],(function(t){a.headers[t]={}})),r.forEach(["post","put","patch"],(function(t){a.headers[t]=r.merge(i)})),t.exports=a}).call(this,n(33))},function(t,e,n){var r=n(189),o=n(72),i=n(22);t.exports=function(t){return i(t)?r(t):o(t)}},function(t,e,n){var r=n(191),o=n(6),i=Object.prototype,u=i.hasOwnProperty,c=i.propertyIsEnumerable,a=r(function(){return arguments}())?r:function(t){return o(t)&&u.call(t,"callee")&&!c.call(t,"callee")};t.exports=a},function(t,e,n){(function(t){var r=n(4),o=n(194),i=e&&!e.nodeType&&e,u=i&&"object"==typeof t&&t&&!t.nodeType&&t,c=u&&u.exports===i?r.Buffer:void 0,a=(c?c.isBuffer:void 0)||o;t.exports=a}).call(this,n(71)(t))},function(t,e,n){var r=n(195),o=n(196),i=n(197),u=i&&i.isTypedArray,c=u?o(u):r;t.exports=c},function(t,e){t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e,n){var r=n(7)(n(4),"Map");t.exports=r},function(t,e,n){var r=n(218),o=n(225),i=n(227),u=n(228),c=n(229);function a(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}a.prototype.clear=r,a.prototype.delete=o,a.prototype.get=i,a.prototype.has=u,a.prototype.set=c,t.exports=a},function(t,e,n){var r=n(2),o=n(27),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,u=/^\w*$/;t.exports=function(t,e){if(r(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!o(t))||(u.test(t)||!i.test(t)||null!=e&&t in Object(e))}},function(t,e,n){var r=n(3),o=Object.create,i=function(){function t(){}return function(e){if(!r(e))return{};if(o)return o(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();t.exports=i},function(t,e){t.exports=function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}},function(t,e,n){var r=n(48),o=n(51);function i(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}i.prototype=r(o.prototype),i.prototype.constructor=i,t.exports=i},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t){return t.placeholder}},function(t,e,n){var r,o,i;!function(u){"use strict";if(null!=e&&"number"!=typeof e.nodeType)t.exports=u();else if(null!=n(183))o=[],void 0===(i="function"==typeof(r=u)?r.apply(e,o):r)||(t.exports=i);else{var c=u(),a="undefined"!=typeof self?self:$.global;"function"!=typeof a.btoa&&(a.btoa=c.btoa),"function"!=typeof a.atob&&(a.atob=c.atob)}}((function(){"use strict";var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function e(t){this.message=t}return e.prototype=new Error,e.prototype.name="InvalidCharacterError",{btoa:function(n){for(var r,o,i=String(n),u=0,c=t,a="";i.charAt(0|u)||(c="=",u%1);a+=c.charAt(63&r>>8-u%1*8)){if((o=i.charCodeAt(u+=3/4))>255)throw new e("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");r=r<<8|o}return a},atob:function(n){var r=String(n).replace(/[=]+$/,"");if(r.length%4==1)throw new e("'atob' failed: The string to be decoded is not correctly encoded.");for(var o,i,u=0,c=0,a="";i=r.charAt(c++);~i&&(o=u%4?64*o+i:i,u++%4)?a+=String.fromCharCode(255&o>>(-2*u&6)):0)i=t.indexOf(i);return a}}}))},function(t,e,n){var r=n(289),o=n(89),i=n(52),u=n(31),c=r((function(t,e){var n=u(e,i(c));return o(t,32,void 0,e,n)}));c.placeholder={},t.exports=c},function(t,e,n){var r=n(32),o=n(297),i=n(298),u=n(299);t.exports={driversLicenseRegex:r,isValidUSLicense:o,validateUSDriversLicense:i,supportedStates:u}},function(t,e,n){var r=n(0),o=n(118);t.exports=r((function(t,e){return o(t,e,[],[])}))},function(t,e,n){var r=n(13);t.exports=function(){var t=Object.prototype.toString;return"[object Arguments]"===t.call(arguments)?function(e){return"[object Arguments]"===t.call(e)}:function(t){return r("callee",t)}}()},function(t,e){t.exports=function(t,e){var n;e=e||[];var r=(t=t||[]).length,o=e.length,i=[];for(n=0;n<r;)i[i.length]=t[n],n+=1;for(n=0;n<o;)i[i.length]=e[n],n+=1;return i}},function(t,e){t.exports=function(t){return"[object String]"===Object.prototype.toString.call(t)}},function(t,e,n){var r=n(0);t.exports=r((function(t,e){return e[t]}))},function(t,e,n){var r=n(1);t.exports=r((function(t){return function(){return t}}))},function(t,e,n){var r=n(0);t.exports=r((function(t,e){return null!=e&&e.constructor===t||e instanceof t}))},function(t,e,n){var r=n(0);t.exports=r((function(t,e){return e>t?e:t}))},function(t,e,n){"use strict";t.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return t.apply(e,n)}}},function(t,e,n){"use strict";var r=n(5),o=n(169),i=n(171),u=n(172),c=n(173),a=n(66),s="undefined"!=typeof window&&window.btoa&&window.btoa.bind(window)||n(174);t.exports=function(t){return new Promise((function(e,f){var l=t.data,p=t.headers;r.isFormData(l)&&delete p["Content-Type"];var d=new XMLHttpRequest,h="onreadystatechange",v=!1;if("undefined"==typeof window||!window.XDomainRequest||"withCredentials"in d||c(t.url)||(d=new window.XDomainRequest,h="onload",v=!0,d.onprogress=function(){},d.ontimeout=function(){}),t.auth){var y=t.auth.username||"",g=t.auth.password||"";p.Authorization="Basic "+s(y+":"+g)}if(d.open(t.method.toUpperCase(),i(t.url,t.params,t.paramsSerializer),!0),d.timeout=t.timeout,d[h]=function(){if(d&&(4===d.readyState||v)&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf("file:"))){var n="getAllResponseHeaders"in d?u(d.getAllResponseHeaders()):null,r={data:t.responseType&&"text"!==t.responseType?d.response:d.responseText,status:1223===d.status?204:d.status,statusText:1223===d.status?"No Content":d.statusText,headers:n,config:t,request:d};o(e,f,r),d=null}},d.onerror=function(){f(a("Network Error",t,null,d)),d=null},d.ontimeout=function(){f(a("timeout of "+t.timeout+"ms exceeded",t,"ECONNABORTED",d)),d=null},r.isStandardBrowserEnv()){var m=n(175),b=(t.withCredentials||c(t.url))&&t.xsrfCookieName?m.read(t.xsrfCookieName):void 0;b&&(p[t.xsrfHeaderName]=b)}if("setRequestHeader"in d&&r.forEach(p,(function(t,e){void 0===l&&"content-type"===e.toLowerCase()?delete p[e]:d.setRequestHeader(e,t)})),t.withCredentials&&(d.withCredentials=!0),t.responseType)try{d.responseType=t.responseType}catch(e){if("json"!==t.responseType)throw e}"function"==typeof t.onDownloadProgress&&d.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&d.upload&&d.upload.addEventListener("progress",t.onUploadProgress),t.cancelToken&&t.cancelToken.promise.then((function(t){d&&(d.abort(),f(t),d=null)})),void 0===l&&(l=null),d.send(l)}))}},function(t,e,n){"use strict";var r=n(170);t.exports=function(t,e,n,o,i){var u=new Error(t);return r(u,e,n,o,i)}},function(t,e,n){"use strict";t.exports=function(t){return!(!t||!t.__CANCEL__)}},function(t,e,n){"use strict";function r(t){this.message=t}r.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},r.prototype.__CANCEL__=!0,t.exports=r},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,o=0,i=[];++n<r;){var u=t[n];e(u,n,t)&&(i[o++]=u)}return i}},function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(this,n(34))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){var r=n(73),o=n(198),i=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return o(t);var e=[];for(var n in Object(t))i.call(t,n)&&"constructor"!=n&&e.push(n);return e}},function(t,e){var n=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||n)}},function(t,e,n){var r=n(10),o=n(3);t.exports=function(t){if(!o(t))return!1;var e=r(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},function(t,e,n){var r=n(23),o=n(209),i=n(210),u=n(211),c=n(212),a=n(213);function s(t){var e=this.__data__=new r(t);this.size=e.size}s.prototype.clear=o,s.prototype.delete=i,s.prototype.get=u,s.prototype.has=c,s.prototype.set=a,t.exports=s},function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},function(t,e,n){var r=n(230),o=n(6);t.exports=function t(e,n,i,u,c){return e===n||(null==e||null==n||!o(e)&&!o(n)?e!=e&&n!=n:r(e,n,i,u,t,c))}},function(t,e,n){var r=n(231),o=n(234),i=n(235);t.exports=function(t,e,n,u,c,a){var s=1&n,f=t.length,l=e.length;if(f!=l&&!(s&&l>f))return!1;var p=a.get(t),d=a.get(e);if(p&&d)return p==e&&d==t;var h=-1,v=!0,y=2&n?new r:void 0;for(a.set(t,e),a.set(e,t);++h<f;){var g=t[h],m=e[h];if(u)var b=s?u(m,g,h,e,t,a):u(g,m,h,t,e,a);if(void 0!==b){if(b)continue;v=!1;break}if(y){if(!o(e,(function(t,e){if(!i(y,e)&&(g===t||c(g,t,n,u,a)))return y.push(e)}))){v=!1;break}}else if(g!==m&&!c(g,m,n,u,a)){v=!1;break}}return a.delete(t),a.delete(e),v}},function(t,e,n){var r=n(246),o=n(45),i=n(247),u=n(248),c=n(80),a=n(10),s=n(76),f=s(r),l=s(o),p=s(i),d=s(u),h=s(c),v=a;(r&&"[object DataView]"!=v(new r(new ArrayBuffer(1)))||o&&"[object Map]"!=v(new o)||i&&"[object Promise]"!=v(i.resolve())||u&&"[object Set]"!=v(new u)||c&&"[object WeakMap]"!=v(new c))&&(v=function(t){var e=a(t),n="[object Object]"==e?t.constructor:void 0,r=n?s(n):"";if(r)switch(r){case f:return"[object DataView]";case l:return"[object Map]";case p:return"[object Promise]";case d:return"[object Set]";case h:return"[object WeakMap]"}return e}),t.exports=v},function(t,e,n){var r=n(7)(n(4),"WeakMap");t.exports=r},function(t,e,n){var r=n(3);t.exports=function(t){return t==t&&!r(t)}},function(t,e){t.exports=function(t,e){return function(n){return null!=n&&(n[t]===e&&(void 0!==e||t in Object(n)))}}},function(t,e,n){var r=n(84),o=n(28);t.exports=function(t,e){for(var n=0,i=(e=r(e,t)).length;null!=t&&n<i;)t=t[o(e[n++])];return n&&n==i?t:void 0}},function(t,e,n){var r=n(2),o=n(47),i=n(252),u=n(85);t.exports=function(t,e){return r(t)?t:o(t,e)?[t]:i(u(t))}},function(t,e,n){var r=n(255);t.exports=function(t){return null==t?"":r(t)}},function(t,e,n){var r=n(263),o=n(264),i=n(265);t.exports=function(t,e,n){return e==e?i(t,e,n):r(t,o,n)}},function(t,e,n){var r=n(88);t.exports=function(t){var e=r(t),n=e%1;return e==e?n?e-n:e:0}},function(t,e,n){var r=n(266);t.exports=function(t){return t?(t=r(t))===1/0||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}},function(t,e,n){var r=n(90),o=n(269),i=n(270),u=n(92),c=n(287),a=n(96),s=n(288),f=n(99),l=n(101),p=n(87),d=Math.max;t.exports=function(t,e,n,h,v,y,g,m){var b=2&e;if(!b&&"function"!=typeof t)throw new TypeError("Expected a function");var x=h?h.length:0;if(x||(e&=-97,h=v=void 0),g=void 0===g?g:d(p(g),0),m=void 0===m?m:p(m),x-=v?v.length:0,64&e){var _=h,w=v;h=v=void 0}var N=b?void 0:a(t),O=[t,e,n,h,v,_,w,y,g,m];if(N&&s(O,N),t=O[0],e=O[1],n=O[2],h=O[3],v=O[4],!(m=O[9]=void 0===O[9]?b?0:t.length:d(O[9]-x,0))&&24&e&&(e&=-25),e&&1!=e)A=8==e||16==e?i(t,e,m):32!=e&&33!=e||v.length?u.apply(void 0,O):c(t,e,n,h);else var A=o(t,e,n);return l((N?r:f)(A,O),t,e)}},function(t,e,n){var r=n(29),o=n(91),i=o?function(t,e){return o.set(t,e),t}:r;t.exports=i},function(t,e,n){var r=n(80),o=r&&new r;t.exports=o},function(t,e,n){var r=n(93),o=n(94),i=n(271),u=n(30),c=n(95),a=n(52),s=n(286),f=n(31),l=n(4);t.exports=function t(e,n,p,d,h,v,y,g,m,b){var x=128&n,_=1&n,w=2&n,N=24&n,O=512&n,A=w?void 0:u(e);return function $(){for(var j=arguments.length,R=Array(j),E=j;E--;)R[E]=arguments[E];if(N)var S=a($),L=i(R,S);if(d&&(R=r(R,d,h,N)),v&&(R=o(R,v,y,N)),j-=L,N&&j<b){var T=f(R,S);return c(e,n,t,$.placeholder,p,R,T,g,m,b-j)}var M=_?p:this,C=w?M[e]:e;return j=R.length,g?R=s(R,g):O&&j>1&&R.reverse(),x&&m<j&&(R.length=m),this&&this!==l&&this instanceof $&&(C=A||u(C)),C.apply(M,R)}}},function(t,e){var n=Math.max;t.exports=function(t,e,r,o){for(var i=-1,u=t.length,c=r.length,a=-1,s=e.length,f=n(u-c,0),l=Array(s+f),p=!o;++a<s;)l[a]=e[a];for(;++i<c;)(p||i<u)&&(l[r[i]]=t[i]);for(;f--;)l[a++]=t[i++];return l}},function(t,e){var n=Math.max;t.exports=function(t,e,r,o){for(var i=-1,u=t.length,c=-1,a=r.length,s=-1,f=e.length,l=n(u-a,0),p=Array(l+f),d=!o;++i<l;)p[i]=t[i];for(var h=i;++s<f;)p[h+s]=e[s];for(;++c<a;)(d||i<u)&&(p[h+r[c]]=t[i++]);return p}},function(t,e,n){var r=n(272),o=n(99),i=n(101);t.exports=function(t,e,n,u,c,a,s,f,l,p){var d=8&e;e|=d?32:64,4&(e&=~(d?64:32))||(e&=-4);var h=[t,e,c,d?a:void 0,d?s:void 0,d?void 0:a,d?void 0:s,f,l,p],v=n.apply(void 0,h);return r(t)&&o(v,h),v.placeholder=u,i(v,t,e)}},function(t,e,n){var r=n(91),o=n(273),i=r?function(t){return r.get(t)}:o;t.exports=i},function(t,e,n){var r=n(48),o=n(51);function i(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=void 0}i.prototype=r(o.prototype),i.prototype.constructor=i,t.exports=i},function(t,e){t.exports=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}},function(t,e,n){var r=n(90),o=n(100)(r);t.exports=o},function(t,e){var n=Date.now;t.exports=function(t){var e=0,r=0;return function(){var o=n(),i=16-(o-r);if(r=o,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},function(t,e,n){var r=n(278),o=n(279),i=n(102),u=n(283);t.exports=function(t,e,n){var c=e+"";return i(t,o(c,u(r(c),n)))}},function(t,e,n){var r=n(280),o=n(100)(r);t.exports=o},function(t,e){var n=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");t.exports=function(t){return n.test(t)}},function(t,e,n){"use strict";(function(t,r){function o(t){return t&&"object"==typeof t&&"default"in t?t.default:t}Object.defineProperty(e,"__esModule",{value:!0});var i=o(n(114)),u=o(n(115)),c=o(n(123)),a=o(n(125)),s=o(n(35)),f=o(n(132)),l=o(n(133)),p=o(n(134)),d=o(n(60)),h=o(n(61)),v=o(n(137)),y=o(n(139)),g=o(n(140)),m=o(n(141)),b=o(n(142)),x=o(n(152)),_=o(n(155)),w=o(n(157)),N=o(n(158)),O=o(n(159)),A=o(n(62)),$=o(n(160)),j=o(n(162)),R=o(n(163)),E=o(n(164)),S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},L=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t};Function.prototype.$asyncbind=function e(n,o){function i(){return u.apply(n,arguments)}Function.prototype.$asyncbind||Object.defineProperty(Function.prototype,"$asyncbind",{value:e,enumerable:!1,configurable:!0,writable:!0}),e.trampoline||(e.trampoline=function(t,e,n,r,o){return function i(u){for(;u;){if(u.then)return u=u.then(i,r),o?void 0:u;try{if(u.pop){if(u.length)return u.pop()?e.call(t):u;u=n}else u=u.call(t)}catch(t){return r(t)}}}}),e.LazyThenable||(e.LazyThenable=function(){function t(t){return t&&t instanceof Object&&"function"==typeof t.then}function e(n,r,o){try{var i=o?o(r):r;if(n===i)return n.reject(new TypeError("Promise resolution loop"));t(i)?i.then((function(t){e(n,t)}),(function(t){n.reject(t)})):n.resolve(i)}catch(t){n.reject(t)}}function n(){}function r(t){}function o(r,o){var i=new n;try{this._resolver((function(n){return t(n)?n.then(r,o):e(i,n,r)}),(function(t){e(i,t,o)}))}catch(t){e(i,t,o)}return i}function i(t){this._resolver=t,this.then=o}return n.prototype={resolve:r,reject:r,then:function(t,e){this.resolve=t,this.reject=e}},i.resolve=function(t){return i.isThenable(t)?t:{then:function(e){return e(t)}}},i.isThenable=t,i}(),e.EagerThenable=e.Thenable=(e.EagerThenableFactory=function(e){function n(t){if(t){var e=this;t((function(t){e.resolve(t)}),(function(t){e.reject(t)}))}}function o(t,e){if("function"==typeof t.y)try{var n=t.y.call(void 0,e);t.p.resolve(n)}catch(e){t.p.reject(e)}else t.p.resolve(e)}function i(t,e){if("function"==typeof t.n)try{var n=t.n.call(void 0,e);t.p.resolve(n)}catch(e){t.p.reject(e)}else t.p.reject(e)}e=e||"object"===(void 0===t?"undefined":S(t))&&t.nextTick||"function"==typeof r&&r||function(t){setTimeout(t,0)};var u=function(){function t(){for(;n.length-r;){try{n[r]()}catch(t){}n[r++]=void 0,r===o&&(n.splice(0,o),r=0)}}var n=[],r=0,o=1024;return function(o){n.push(o),n.length-r==1&&e(t)}}();return n.prototype={resolve:function(t){if(void 0===this.state){if(t===this)return this.reject(new TypeError("Attempt to resolve promise with self"));var e=this;if(t&&("function"==typeof t||"object"===(void 0===t?"undefined":S(t))))try{var n=0,r=t.then;if("function"==typeof r)return void r.call(t,(function(t){n++||e.resolve(t)}),(function(t){n++||e.reject(t)}))}catch(t){return void(n||this.reject(t))}this.state=o,this.v=t,e.c&&u((function(){for(var n=0,r=e.c.length;n<r;n++)o(e.c[n],t)}))}},reject:function(t){if(void 0===this.state){this.state=i,this.v=t;var e=this.c;e&&u((function(){for(var n=0,r=e.length;n<r;n++)i(e[n],t)}))}},then:function(t,e){var r=new n,o={y:t,n:e,p:r};if(void 0===this.state)this.c?this.c.push(o):this.c=[o];else{var i=this.state,c=this.v;u((function(){i(o,c)}))}return r}},n.resolve=function(t){if(t&&t instanceof n)return t;var e=new n;return e.resolve(t),e},n.reject=function(t){if(t&&t instanceof n)return t;var e=new n;return e.reject(t),e},n.version="2.3.3-nodent",n})());var u=this;switch(o){case!0:return new e.Thenable(i);case 0:return new e.LazyThenable(i);case void 0:return i.then=i,i;default:return function(){try{return u.apply(n,arguments)}catch(t){return o(t)}}}};var T=R([[j,$],[A(Number),$],[O,function(t){return Number(t)}]]),M=N((function(t,e,n){var r=A(Number);return r(t)&&r(e)&&r(n)&&w(n,t)&&w(e,n)})),C=_([j,x,b(m("baseURL")),b(g(String,"baseURL")),y(x,"baseURL")]),D={Accept:"application/json","Content-Type":"application/json"},I={timeout:0},k=["ECONNABORTED"],P=["ENOTFOUND","ECONNREFUSED","ECONNRESET"],U=M(200,299),Z=M(400,499),F=M(500,599),z=v(j,h(void 0),d("status")),B=function(t){if(C(t))throw new Error("config must have a baseURL");var e=p(D,t.headers||{}),n=p(I,l("headers",t)),r=E.create(n),o=[],d=[],v=[],y=[],g=function(t,n){return e[t]=n,r},m=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return x(p({url:e,params:n,method:t},r))},b=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return x(p({url:e,method:t,data:n},r))},x=function(t){return new Promise(function(n,o){function i(){function e(){return u}return l<v.length?function(t){return!!t&&("object"===(void 0===t?"undefined":S(t))||"function"==typeof t)&&"function"==typeof t.then}(p=v[l](t))?p.then(function(t){return e.call(this)}.$asyncbind(this,o),o):p(t).then(function(t){return e.call(this)}.$asyncbind(this,o),o):[1]}function u(){return l++,i}function s(){return h=a(c(w,[T(new Date)]),_),n(r.request(t).then(h).catch(h))}var l,p,h;return t.headers=L({},e,t.headers),d.length>0&&f((function(e){return e(t)}),d),v.length>0?(l=0,Function.$asyncbind.trampoline(this,(function(){return s.call(this)}),u,o,!0)(i)):s.call(this)}.$asyncbind(this))},_=function(t){return o.forEach((function(e){try{e(t)}catch(t){}})),t},w=function(t,e){var n=T(new Date)-t,r=e instanceof Error||E.isCancel(e),o=r?e.response:e,i=o&&o.status||null,u=r?N(e):A(i),c=U(i),a=e.config||null,s={duration:n,problem:u,ok:c,status:i,headers:o&&o.headers||null,config:a,data:o&&o.data||null};return y.length>0&&f((function(t){return t(s)}),y),s},N=function(t){return"Network Error"===t.message?"NETWORK_ERROR":E.isCancel(t)?"CANCEL_ERROR":R([[j,function(){return A(z(t.response))}],[u(i,k),h("TIMEOUT_ERROR")],[u(i,P),h("CONNECTION_ERROR")],[O,h("UNKNOWN_ERROR")]])(t.code)},A=function(t){return R([[j,h("UNKNOWN_ERROR")],[U,h(null)],[Z,h("CLIENT_ERROR")],[F,h("SERVER_ERROR")],[O,h("UNKNOWN_ERROR")]])(t)};return{axiosInstance:r,monitors:o,addMonitor:function(t){o.push(t)},requestTransforms:d,asyncRequestTransforms:v,responseTransforms:y,addRequestTransform:function(t){return d.push(t)},addAsyncRequestTransform:function(t){return v.push(t)},addResponseTransform:function(t){return y.push(t)},setHeader:g,setHeaders:function(t){return f((function(e){return g(e,t[e])}),s(t)),r},deleteHeader:function(t){return delete e[t],r},headers:e,setBaseURL:function(t){return r.defaults.baseURL=t,r},getBaseURL:function(){return r.defaults.baseURL},get:c(m,["get"]),delete:c(m,["delete"]),head:c(m,["head"]),post:c(b,["post"]),put:c(b,["put"]),patch:c(b,["patch"]),link:c(m,["link"]),unlink:c(m,["unlink"])}},W={DEFAULT_HEADERS:D,NONE:null,CLIENT_ERROR:"CLIENT_ERROR",SERVER_ERROR:"SERVER_ERROR",TIMEOUT_ERROR:"TIMEOUT_ERROR",CONNECTION_ERROR:"CONNECTION_ERROR",NETWORK_ERROR:"NETWORK_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR",create:B};e.DEFAULT_HEADERS=D,e.NONE=null,e.CLIENT_ERROR="CLIENT_ERROR",e.SERVER_ERROR="SERVER_ERROR",e.TIMEOUT_ERROR="TIMEOUT_ERROR",e.CONNECTION_ERROR="CONNECTION_ERROR",e.NETWORK_ERROR="NETWORK_ERROR",e.UNKNOWN_ERROR="UNKNOWN_ERROR",e.CANCEL_ERROR="CANCEL_ERROR",e.create=B,e.default=W}).call(this,n(33),n(112).setImmediate)},function(t,e,n){var r=n(69),o=n(184),i=n(201),u=n(2);t.exports=function(t,e){return(u(t)?r:o)(t,i(e,3))}},function(t,e,n){var r=n(86),o=n(87),i=Math.max;t.exports=function(t,e,n){var u=null==t?0:t.length;if(!u)return-1;var c=null==n?0:o(n);return c<0&&(c=i(u+c,0)),r(t,e,c)}},function(t,e,n){var r=n(72),o=n(79),i=n(40),u=n(2),c=n(22),a=n(41),s=n(73),f=n(42),l=Object.prototype.hasOwnProperty;t.exports=function(t){if(null==t)return!0;if(c(t)&&(u(t)||"string"==typeof t||"function"==typeof t.splice||a(t)||f(t)||i(t)))return!t.length;var e=o(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if(s(t))return!r(t).length;for(var n in t)if(l.call(t,n))return!1;return!0}},function(t,e,n){t.exports=function(){"use strict";return function(t,e,n){t=t||{};var r=e.prototype,o={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function i(t,e,n,o){return r.fromToBase(t,e,n,o)}n.en.relativeTime=o,r.fromToBase=function(e,r,i,u,c){for(var a,s,f,l=i.$locale().relativeTime||o,p=t.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],d=p.length,h=0;h<d;h+=1){var v=p[h];v.d&&(a=u?n(e).diff(i,v.d,!0):i.diff(e,v.d,!0));var y=(t.rounding||Math.round)(Math.abs(a));if(f=a>0,y<=v.r||!v.r){y<=1&&h>0&&(v=p[h-1]);var g=l[v.l];c&&(y=c(""+y)),s="string"==typeof g?g.replace("%d",y):g(y,r,v.l,f);break}}if(r)return s;var m=f?l.future:l.past;return"function"==typeof m?m(s):m.replace("%s",s)},r.to=function(t,e){return i(t,e,this,!0)},r.from=function(t,e){return i(t,e,this)};var u=function(t){return t.$u?n.utc():n()};r.toNow=function(t){return this.to(u(this),t)},r.fromNow=function(t){return this.from(u(this),t)}}}()},function(t,e,n){t.exports=function(){"use strict";var t="minute",e=/[+-]\d\d(?::?\d\d)?/g,n=/([+-]|\d\d)/g;return function(r,o,i){var u=o.prototype;i.utc=function(t){var e={date:t,utc:!0,args:arguments};return new o(e)},u.utc=function(e){var n=i(this.toDate(),{locale:this.$L,utc:!0});return e?n.add(this.utcOffset(),t):n},u.local=function(){return i(this.toDate(),{locale:this.$L,utc:!1})};var c=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),c.call(this,t)};var a=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else a.call(this)};var s=u.utcOffset;u.utcOffset=function(r,o){var i=this.$utils().u;if(i(r))return this.$u?0:i(this.$offset)?s.call(this):this.$offset;if("string"==typeof r&&null===(r=function(t){void 0===t&&(t="");var r=t.match(e);if(!r)return null;var o=(""+r[0]).match(n)||["-",0,0],i=o[0],u=60*+o[1]+ +o[2];return 0===u?0:"+"===i?u:-u}(r)))return this;var u=Math.abs(r)<=16?60*r:r;if(0===u)return this.utc(o);var c=this.clone();if(o)return c.$offset=u,c.$u=!1,c;var a=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(c=this.local().add(u+a,t)).$offset=u,c.$x.$localOffset=a,c};var f=u.format;u.format=function(t){var e=t||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return f.call(this,e)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return"s"===t&&this.$offset?i(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():l.call(this)};var p=u.diff;u.diff=function(t,e,n){if(t&&this.$u===t.$u)return p.call(this,t,e,n);var r=this.local(),o=i(t).local();return p.call(r,o,e,n)}}}()},function(t,e,n){var r=n(291)("toUpperCase");t.exports=r},function(t,e,n){var r=n(300)();t.exports=r},function(t,e,n){(function(t){var r=void 0!==t&&t||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function i(t,e){this._id=t,this._clearFn=e}e.setTimeout=function(){return new i(o.call(setTimeout,r,arguments),clearTimeout)},e.setInterval=function(){return new i(o.call(setInterval,r,arguments),clearInterval)},e.clearTimeout=e.clearInterval=function(t){t&&t.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(r,this._id)},e.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},e.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},e._unrefActive=e.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;e>=0&&(t._idleTimeoutId=setTimeout((function(){t._onTimeout&&t._onTimeout()}),e))},n(113),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(this,n(34))},function(t,e,n){(function(t,e){!function(t,n){"use strict";if(!t.setImmediate){var r,o,i,u,c,a=1,s={},f=!1,l=t.document,p=Object.getPrototypeOf&&Object.getPrototypeOf(t);p=p&&p.setTimeout?p:t,"[object process]"==={}.toString.call(t.process)?r=function(t){e.nextTick((function(){h(t)}))}:!function(){if(t.postMessage&&!t.importScripts){var e=!0,n=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=n,e}}()?t.MessageChannel?((i=new MessageChannel).port1.onmessage=function(t){h(t.data)},r=function(t){i.port2.postMessage(t)}):l&&"onreadystatechange"in l.createElement("script")?(o=l.documentElement,r=function(t){var e=l.createElement("script");e.onreadystatechange=function(){h(t),e.onreadystatechange=null,o.removeChild(e),e=null},o.appendChild(e)}):r=function(t){setTimeout(h,0,t)}:(u="setImmediate$"+Math.random()+"$",c=function(e){e.source===t&&"string"==typeof e.data&&0===e.data.indexOf(u)&&h(+e.data.slice(u.length))},t.addEventListener?t.addEventListener("message",c,!1):t.attachEvent("onmessage",c),r=function(e){t.postMessage(u+e,"*")}),p.setImmediate=function(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),n=0;n<e.length;n++)e[n]=arguments[n+1];var o={callback:t,args:e};return s[a]=o,r(a),a++},p.clearImmediate=d}function d(t){delete s[t]}function h(t){if(f)setTimeout(h,0,t);else{var e=s[t];if(e){f=!0;try{!function(t){var e=t.callback,n=t.args;switch(n.length){case 0:e();break;case 1:e(n[0]);break;case 2:e(n[0],n[1]);break;case 3:e(n[0],n[1],n[2]);break;default:e.apply(void 0,n)}}(e)}finally{d(t),f=!1}}}}}("undefined"==typeof self?void 0===t?this:t:self)}).call(this,n(34),n(33))},function(t,e){t.exports={"@@functional/placeholder":!0}},function(t,e,n){var r=n(116),o=n(0);t.exports=o(r)},function(t,e,n){var r=n(117);t.exports=function(t,e){return r(e,t,0)>=0}},function(t,e,n){var r=n(56);t.exports=function(t,e,n){var o,i;if("function"==typeof t.indexOf)switch(typeof e){case"number":if(0===e){for(o=1/e;n<t.length;){if(0===(i=t[n])&&1/i===o)return n;n+=1}return-1}if(e!=e){for(;n<t.length;){if("number"==typeof(i=t[n])&&i!=i)return n;n+=1}return-1}return t.indexOf(e,n);case"string":case"boolean":case"function":case"undefined":return t.indexOf(e,n);case"object":if(null===e)return t.indexOf(e,n)}for(;n<t.length;){if(r(t[n],e))return n;n+=1}return-1}},function(t,e,n){var r=n(119),o=n(120),i=n(13),u=n(121),c=n(35),a=n(122);t.exports=function t(e,n,s,f){if(u(e,n))return!0;if(a(e)!==a(n))return!1;if(null==e||null==n)return!1;if("function"==typeof e.equals||"function"==typeof n.equals)return"function"==typeof e.equals&&e.equals(n)&&"function"==typeof n.equals&&n.equals(e);switch(a(e)){case"Arguments":case"Array":case"Object":if("function"==typeof e.constructor&&"Promise"===o(e.constructor))return e===n;break;case"Boolean":case"Number":case"String":if(typeof e!=typeof n||!u(e.valueOf(),n.valueOf()))return!1;break;case"Date":if(!u(e.valueOf(),n.valueOf()))return!1;break;case"Error":return e.name===n.name&&e.message===n.message;case"RegExp":if(e.source!==n.source||e.global!==n.global||e.ignoreCase!==n.ignoreCase||e.multiline!==n.multiline||e.sticky!==n.sticky||e.unicode!==n.unicode)return!1;break;case"Map":case"Set":if(!t(r(e.entries()),r(n.entries()),s,f))return!1;break;case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"ArrayBuffer":break;default:return!1}var l=c(e);if(l.length!==c(n).length)return!1;for(var p=s.length-1;p>=0;){if(s[p]===e)return f[p]===n;p-=1}for(s.push(e),f.push(n),p=l.length-1;p>=0;){var d=l[p];if(!i(d,n)||!t(n[d],e[d],s,f))return!1;p-=1}return s.pop(),f.pop(),!0}},function(t,e){t.exports=function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}},function(t,e){t.exports=function(t){var e=String(t).match(/^function (\w*)/);return null==e?"":e[1]}},function(t,e,n){var r=n(0);t.exports=r((function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}))},function(t,e,n){var r=n(1);t.exports=r((function(t){return null===t?"Null":void 0===t?"Undefined":Object.prototype.toString.call(t).slice(8,-1)}))},function(t,e,n){var r=n(58),o=n(124);t.exports=o(r)},function(t,e,n){var r=n(9),o=n(0);t.exports=function(t){return o((function(e,n){return r(Math.max(0,e.length-n.length),(function(){return e.apply(this,t(n,arguments))}))}))}},function(t,e,n){var r=n(9),o=n(126),i=n(36),u=n(130);t.exports=function(){if(0===arguments.length)throw new Error("pipe requires at least one argument");return r(arguments[0].length,i(o,arguments[0],u(arguments)))}},function(t,e){t.exports=function(t,e){return function(){return e.call(this,t.apply(this,arguments))}}},function(t,e){t.exports=function(){function t(t){this.f=t}return t.prototype["@@transducer/init"]=function(){throw new Error("init not implemented on XWrap")},t.prototype["@@transducer/result"]=function(t){return t},t.prototype["@@transducer/step"]=function(t,e){return this.f(t,e)},function(e){return new t(e)}}()},function(t,e,n){var r=n(9),o=n(0);t.exports=o((function(t,e){return r(t.length,(function(){return t.apply(e,arguments)}))}))},function(t,e,n){var r=n(1),o=n(18),i=n(59);t.exports=r((function(t){return!!o(t)||!!t&&("object"==typeof t&&(!i(t)&&(1===t.nodeType?!!t.length:0===t.length||t.length>0&&(t.hasOwnProperty(0)&&t.hasOwnProperty(t.length-1)))))}))},function(t,e,n){var r=n(37),o=n(1),i=n(131);t.exports=o(r("tail",i(1,1/0)))},function(t,e,n){var r=n(37),o=n(14);t.exports=o(r("slice",(function(t,e,n){return Array.prototype.slice.call(n,t,e)})))},function(t,e,n){var r=n(37),o=n(0);t.exports=o(r("forEach",(function(t,e){for(var n=e.length,r=0;r<n;)t(e[r]),r+=1;return e})))},function(t,e,n){var r=n(0);t.exports=r((function(t,e){var n={};for(var r in e)n[r]=e[r];return delete n[t],n}))},function(t,e,n){var r=n(135),o=n(0);t.exports=o((function(t,e){return r({},t,e)}))},function(t,e,n){var r=n(136);t.exports="function"==typeof Object.assign?Object.assign:r},function(t,e,n){var r=n(13);t.exports=function(t){if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),n=1,o=arguments.length;n<o;){var i=arguments[n];if(null!=i)for(var u in i)r(u,i)&&(e[u]=i[u]);n+=1}return e}},function(t,e,n){var r=n(14),o=n(15);t.exports=r((function(t,e,n){return o(Math.max(t.length,e.length,n.length),(function(){return t.apply(this,arguments)?e.apply(this,arguments):n.apply(this,arguments)}))}))},function(t,e,n){var r=n(9),o=n(16);t.exports=function t(e,n,i){return function(){for(var u=[],c=0,a=e,s=0;s<n.length||c<arguments.length;){var f;s<n.length&&(!o(n[s])||c>=arguments.length)?f=n[s]:(f=arguments[c],c+=1),u[s]=f,o(f)||(a-=1),s+=1}return a<=0?i.apply(this,u):r(a,t(e,u,i))}}},function(t,e,n){var r=n(14);t.exports=r((function(t,e,n){return t(n[e])}))},function(t,e,n){var r=n(14),o=n(62);t.exports=r((function(t,e,n){return o(t,n[e])}))},function(t,e,n){var r=n(0),o=n(13);t.exports=r(o)},function(t,e,n){var r=n(143),o=n(151);t.exports=r(o)},function(t,e,n){var r=n(1),o=n(144);t.exports=r((function(t){return o(t.length,t)}))},function(t,e,n){var r=n(0),o=n(17),i=n(145),u=n(15),c=n(19);t.exports=r((function(t,e){var n=u(t,e);return u(t,(function(){return o(i,c(n,arguments[0]),Array.prototype.slice.call(arguments,1))}))}))},function(t,e,n){var r=n(58),o=n(0),i=n(17),u=n(19);t.exports=o((function(t,e){return"function"==typeof t.ap?t.ap(e):"function"==typeof t?function(n){return t(n)(e(n))}:i((function(t,n){return r(t,u(n,e))}),[],t)}))},function(t,e,n){var r=n(18),o=n(147);t.exports=function(t,e,n){return function(){if(0===arguments.length)return n();var i=Array.prototype.slice.call(arguments,0),u=i.pop();if(!r(u)){for(var c=0;c<t.length;){if("function"==typeof u[t[c]])return u[t[c]].apply(u,i);c+=1}if(o(u)){var a=e.apply(null,i);return a(u)}}return n.apply(this,arguments)}}},function(t,e){t.exports=function(t){return"function"==typeof t["@@transducer/step"]}},function(t,e){t.exports=function(t,e){for(var n=0,r=e.length,o=Array(r);n<r;)o[n]=t(e[n]),n+=1;return o}},function(t,e,n){var r=n(0),o=n(150);t.exports=function(){function t(t,e){this.xf=e,this.f=t}return t.prototype["@@transducer/init"]=o.init,t.prototype["@@transducer/result"]=o.result,t.prototype["@@transducer/step"]=function(t,e){return this.xf["@@transducer/step"](t,this.f(e))},r((function(e,n){return new t(e,n)}))}()},function(t,e){t.exports={init:function(){return this.xf["@@transducer/init"]()},result:function(t){return this.xf["@@transducer/result"](t)}}},function(t,e,n){var r=n(1);t.exports=r((function(t){return!t}))},function(t,e,n){var r=n(1),o=n(153),i=n(56);t.exports=r((function(t){return null!=t&&i(t,o(t))}))},function(t,e,n){var r=n(1),o=n(57),i=n(18),u=n(154),c=n(59);t.exports=r((function(t){return null!=t&&"function"==typeof t.empty?t.empty():null!=t&&null!=t.constructor&&"function"==typeof t.constructor.empty?t.constructor.empty():i(t)?[]:c(t)?"":u(t)?{}:o(t)?function(){return arguments}():void 0}))},function(t,e){t.exports=function(t){return"[object Object]"===Object.prototype.toString.call(t)}},function(t,e,n){var r=n(1),o=n(15),i=n(63),u=n(156),c=n(36);t.exports=r((function(t){return o(c(i,0,u("length",t)),(function(){for(var e=0,n=t.length;e<n;){if(t[e].apply(this,arguments))return!0;e+=1}return!1}))}))},function(t,e,n){var r=n(0),o=n(19),i=n(60);t.exports=r((function(t,e){return o(i(t),e)}))},function(t,e,n){var r=n(0);t.exports=r((function(t,e){return t>=e}))},function(t,e,n){var r=n(1),o=n(15);t.exports=r((function(t){return o(t.length,t)}))},function(t,e,n){var r=n(61);t.exports=r(!0)},function(t,e,n){var r=n(1),o=n(161);t.exports=r(o)},function(t,e){t.exports=function(t){return t}},function(t,e,n){var r=n(1);t.exports=r((function(t){return null==t}))},function(t,e,n){var r=n(9),o=n(1),i=n(19),u=n(63),c=n(36);t.exports=o((function(t){var e=c(u,0,i((function(t){return t[0].length}),t));return r(e,(function(){for(var e=0;e<t.length;){if(t[e][0].apply(this,arguments))return t[e][1].apply(this,arguments);e+=1}}))}))},function(t,e,n){t.exports=n(165)},function(t,e,n){"use strict";var r=n(5),o=n(64),i=n(167),u=n(38);function c(t){var e=new i(t),n=o(i.prototype.request,e);return r.extend(n,i.prototype,e),r.extend(n,e),n}var a=c(u);a.Axios=i,a.create=function(t){return c(r.merge(u,t))},a.Cancel=n(68),a.CancelToken=n(181),a.isCancel=n(67),a.all=function(t){return Promise.all(t)},a.spread=n(182),t.exports=a,t.exports.default=a},function(t,e){function n(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}
1
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("turn-shared",[],e):"object"==typeof exports?exports["turn-shared"]=e():t["turn-shared"]=e()}("undefined"!=typeof self?self:this,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=239)}([function(t,e,n){"use strict";var r,i=n(43),o=Object.prototype.toString,u=(r=Object.create(null),function(t){var e=o.call(t);return r[e]||(r[e]=e.slice(8,-1).toLowerCase())});function s(t){return t=t.toLowerCase(),function(e){return u(e)===t}}function a(t){return Array.isArray(t)}function c(t){return void 0===t}var f=s("ArrayBuffer");function l(t){return null!==t&&"object"==typeof t}function p(t){if("object"!==u(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}var h=s("Date"),d=s("File"),v=s("Blob"),g=s("FileList");function y(t){return"[object Function]"===o.call(t)}var b=s("URLSearchParams");function m(t,e){if(null!=t)if("object"!=typeof t&&(t=[t]),a(t))for(var n=0,r=t.length;n<r;n++)e.call(null,t[n],n,t);else for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.call(null,t[i],i,t)}var w,x=(w="undefined"!=typeof Uint8Array&&Object.getPrototypeOf(Uint8Array),function(t){return w&&t instanceof w});t.exports={isArray:a,isArrayBuffer:f,isBuffer:function(t){return null!==t&&!c(t)&&null!==t.constructor&&!c(t.constructor)&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)},isFormData:function(t){return t&&("function"==typeof FormData&&t instanceof FormData||"[object FormData]"===o.call(t)||y(t.toString)&&"[object FormData]"===t.toString())},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&f(t.buffer)},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isObject:l,isPlainObject:p,isUndefined:c,isDate:h,isFile:d,isBlob:v,isFunction:y,isStream:function(t){return l(t)&&y(t.pipe)},isURLSearchParams:b,isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:m,merge:function t(){var e={};function n(n,r){p(e[r])&&p(n)?e[r]=t(e[r],n):p(n)?e[r]=t({},n):a(n)?e[r]=n.slice():e[r]=n}for(var r=0,i=arguments.length;r<i;r++)m(arguments[r],n);return e},extend:function(t,e,n){return m(e,(function(e,r){t[r]=n&&"function"==typeof e?i(e,n):e})),t},trim:function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")},stripBOM:function(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t},inherits:function(t,e,n,r){t.prototype=Object.create(e.prototype,r),t.prototype.constructor=t,n&&Object.assign(t.prototype,n)},toFlatObject:function(t,e,n){var r,i,o,u={};e=e||{};do{for(i=(r=Object.getOwnPropertyNames(t)).length;i-- >0;)u[o=r[i]]||(e[o]=t[o],u[o]=!0);t=Object.getPrototypeOf(t)}while(t&&(!n||n(t,e))&&t!==Object.prototype);return e},kindOf:u,kindOfTest:s,endsWith:function(t,e,n){t=String(t),(void 0===n||n>t.length)&&(n=t.length),n-=e.length;var r=t.indexOf(e,n);return-1!==r&&r===n},toArray:function(t){if(!t)return null;var e=t.length;if(c(e))return null;for(var n=new Array(e);e-- >0;)n[e]=t[e];return n},isTypedArray:x,isFileList:g}},function(t,e){var n=Array.isArray;t.exports=n},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,n){var r=n(54),i="object"==typeof self&&self&&self.Object===Object&&self,o=r||i||Function("return this")();t.exports=o},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,n){var r=n(150),i=n(153);t.exports=function(t,e){var n=i(t,e);return r(n)?n:void 0}},function(t,e,n){t.exports=function(){"use strict";var t=6e4,e=36e5,n="millisecond",r="second",i="minute",o="hour",u="day",s="week",a="month",c="quarter",f="year",l="date",p="Invalid Date",h=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,d=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,v={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},g=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},y={s:g,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+g(r,2,"0")+":"+g(i,2,"0")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,a),o=n-i<0,u=e.clone().add(r+(o?-1:1),a);return+(-(r+(n-i)/(o?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:a,y:f,w:s,d:u,D:l,h:o,m:i,s:r,ms:n,Q:c}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},b="en",m={};m[b]=v;var w="$isDayjsObject",x=function(t){return t instanceof O||!(!t||!t[w])},_=function t(e,n,r){var i;if(!e)return b;if("string"==typeof e){var o=e.toLowerCase();m[o]&&(i=o),n&&(m[o]=n,i=o);var u=e.split("-");if(!i&&u.length>1)return t(u[0])}else{var s=e.name;m[s]=e,i=s}return!r&&i&&(b=i),i||!r&&b},A=function(t,e){if(x(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new O(n)},N=y;N.l=_,N.i=x,N.w=function(t,e){return A(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var O=function(){function v(t){this.$L=_(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[w]=!0}var g=v.prototype;return g.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(N.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(h);if(r){var i=r[2]-1||0,o=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)}}return new Date(e)}(t),this.init()},g.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},g.$utils=function(){return N},g.isValid=function(){return!(this.$d.toString()===p)},g.isSame=function(t,e){var n=A(t);return this.startOf(e)<=n&&n<=this.endOf(e)},g.isAfter=function(t,e){return A(t)<this.startOf(e)},g.isBefore=function(t,e){return this.endOf(e)<A(t)},g.$g=function(t,e,n){return N.u(t)?this[e]:this.set(n,t)},g.unix=function(){return Math.floor(this.valueOf()/1e3)},g.valueOf=function(){return this.$d.getTime()},g.startOf=function(t,e){var n=this,c=!!N.u(e)||e,p=N.p(t),h=function(t,e){var r=N.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return c?r:r.endOf(u)},d=function(t,e){return N.w(n.toDate()[t].apply(n.toDate("s"),(c?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},v=this.$W,g=this.$M,y=this.$D,b="set"+(this.$u?"UTC":"");switch(p){case f:return c?h(1,0):h(31,11);case a:return c?h(1,g):h(0,g+1);case s:var m=this.$locale().weekStart||0,w=(v<m?v+7:v)-m;return h(c?y-w:y+(6-w),g);case u:case l:return d(b+"Hours",0);case o:return d(b+"Minutes",1);case i:return d(b+"Seconds",2);case r:return d(b+"Milliseconds",3);default:return this.clone()}},g.endOf=function(t){return this.startOf(t,!1)},g.$set=function(t,e){var s,c=N.p(t),p="set"+(this.$u?"UTC":""),h=(s={},s[u]=p+"Date",s[l]=p+"Date",s[a]=p+"Month",s[f]=p+"FullYear",s[o]=p+"Hours",s[i]=p+"Minutes",s[r]=p+"Seconds",s[n]=p+"Milliseconds",s)[c],d=c===u?this.$D+(e-this.$W):e;if(c===a||c===f){var v=this.clone().set(l,1);v.$d[h](d),v.init(),this.$d=v.set(l,Math.min(this.$D,v.daysInMonth())).$d}else h&&this.$d[h](d);return this.init(),this},g.set=function(t,e){return this.clone().$set(t,e)},g.get=function(t){return this[N.p(t)]()},g.add=function(n,c){var l,p=this;n=Number(n);var h=N.p(c),d=function(t){var e=A(p);return N.w(e.date(e.date()+Math.round(t*n)),p)};if(h===a)return this.set(a,this.$M+n);if(h===f)return this.set(f,this.$y+n);if(h===u)return d(1);if(h===s)return d(7);var v=(l={},l[i]=t,l[o]=e,l[r]=1e3,l)[h]||1,g=this.$d.getTime()+n*v;return N.w(g,this)},g.subtract=function(t,e){return this.add(-1*t,e)},g.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||p;var r=t||"YYYY-MM-DDTHH:mm:ssZ",i=N.z(this),o=this.$H,u=this.$m,s=this.$M,a=n.weekdays,c=n.months,f=n.meridiem,l=function(t,n,i,o){return t&&(t[n]||t(e,r))||i[n].slice(0,o)},h=function(t){return N.s(o%12||12,t,"0")},v=f||function(t,e,n){var r=t<12?"AM":"PM";return n?r.toLowerCase():r};return r.replace(d,(function(t,r){return r||function(t){switch(t){case"YY":return String(e.$y).slice(-2);case"YYYY":return N.s(e.$y,4,"0");case"M":return s+1;case"MM":return N.s(s+1,2,"0");case"MMM":return l(n.monthsShort,s,c,3);case"MMMM":return l(c,s);case"D":return e.$D;case"DD":return N.s(e.$D,2,"0");case"d":return String(e.$W);case"dd":return l(n.weekdaysMin,e.$W,a,2);case"ddd":return l(n.weekdaysShort,e.$W,a,3);case"dddd":return a[e.$W];case"H":return String(o);case"HH":return N.s(o,2,"0");case"h":return h(1);case"hh":return h(2);case"a":return v(o,u,!0);case"A":return v(o,u,!1);case"m":return String(u);case"mm":return N.s(u,2,"0");case"s":return String(e.$s);case"ss":return N.s(e.$s,2,"0");case"SSS":return N.s(e.$ms,3,"0");case"Z":return i}return null}(t)||i.replace(":","")}))},g.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},g.diff=function(n,l,p){var h,d=this,v=N.p(l),g=A(n),y=(g.utcOffset()-this.utcOffset())*t,b=this-g,m=function(){return N.m(d,g)};switch(v){case f:h=m()/12;break;case a:h=m();break;case c:h=m()/3;break;case s:h=(b-y)/6048e5;break;case u:h=(b-y)/864e5;break;case o:h=b/e;break;case i:h=b/t;break;case r:h=b/1e3;break;default:h=b}return p?h:N.a(h)},g.daysInMonth=function(){return this.endOf(a).$D},g.$locale=function(){return m[this.$L]},g.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=_(t,e,!0);return r&&(n.$L=r),n},g.clone=function(){return N.w(this.$d,this)},g.toDate=function(){return new Date(this.valueOf())},g.toJSON=function(){return this.isValid()?this.toISOString():null},g.toISOString=function(){return this.$d.toISOString()},g.toString=function(){return this.$d.toUTCString()},v}(),E=O.prototype;return A.prototype=E,[["$ms",n],["$s",r],["$m",i],["$H",o],["$W",u],["$M",a],["$y",f],["$D",l]].forEach((function(t){E[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),A.extend=function(t,e){return t.$i||(t(e,O,A),t.$i=!0),A},A.locale=_,A.isDayjs=x,A.unix=function(t){return A(1e3*t)},A.en=m[b],A.Ls=m,A.p={},A}()},function(t,e,n){"use strict";var r=n(0);function i(t,e,n,r,i){Error.call(this),this.message=t,this.name="AxiosError",e&&(this.code=e),n&&(this.config=n),r&&(this.request=r),i&&(this.response=i)}r.inherits(i,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var o=i.prototype,u={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED"].forEach((function(t){u[t]={value:t}})),Object.defineProperties(i,u),Object.defineProperty(o,"isAxiosError",{value:!0}),i.from=function(t,e,n,u,s,a){var c=Object.create(o);return r.toFlatObject(t,c,(function(t){return t!==Error.prototype})),i.call(c,t.message,e,n,u,s),c.name=t.name,a&&Object.assign(c,a),c},t.exports=i},function(t,e,n){var r=n(12),i=n(128),o=n(129),u=r?r.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":u&&u in Object(t)?i(t):o(t)}},function(t,e,n){var r=n(73);function i(t,e,n){var o=r(t,8,void 0,void 0,void 0,void 0,void 0,e=n?void 0:e);return o.placeholder=i.placeholder,o}i.placeholder={},t.exports=i},function(t,e,n){var r=n(8),i=n(1),o=n(4);t.exports=function(t){return"string"==typeof t||!i(t)&&o(t)&&"[object String]"==r(t)}},function(t,e,n){"use strict";var r=n(7);function i(t){r.call(this,null==t?"canceled":t,r.ERR_CANCELED),this.name="CanceledError"}n(0).inherits(i,r,{__CANCEL__:!0}),t.exports=i},function(t,e,n){var r=n(3).Symbol;t.exports=r},function(t,e){var n=/^(?:0|[1-9]\d*)$/;t.exports=function(t,e){var r=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==r||"symbol"!=r&&n.test(t))&&t>-1&&t%1==0&&t<e}},function(t,e,n){var r=n(58),i=n(30);t.exports=function(t){return null!=t&&i(t.length)&&!r(t)}},function(t,e,n){var r=n(140),i=n(141),o=n(142),u=n(143),s=n(144);function a(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}a.prototype.clear=r,a.prototype.delete=i,a.prototype.get=o,a.prototype.has=u,a.prototype.set=s,t.exports=a},function(t,e,n){var r=n(31);t.exports=function(t,e){for(var n=t.length;n--;)if(r(t[n][0],e))return n;return-1}},function(t,e,n){var r=n(5)(Object,"create");t.exports=r},function(t,e,n){var r=n(162);t.exports=function(t,e){var n=t.__data__;return r(e)?n["string"==typeof e?"string":"hash"]:n.map}},function(t,e,n){var r=n(8),i=n(4);t.exports=function(t){return"symbol"==typeof t||i(t)&&"[object Symbol]"==r(t)}},function(t,e,n){var r=n(19);t.exports=function(t){if("string"==typeof t||r(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}},function(t,e){t.exports=function(t){return t}},function(t,e,n){var r=n(35),i=n(2);t.exports=function(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=r(t.prototype),o=t.apply(n,e);return i(o)?o:n}}},function(t,e){t.exports=function(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var u=t[n];u!==e&&"__lodash_placeholder__"!==u||(t[n]="__lodash_placeholder__",o[i++]=n)}return o}},function(t,e){t.exports={AL:[{regex:/^\d{7,8}$/,description:"NNNNNNNNN MinLength = 7 MaxLength = 8"},{regex:/^[A-Z]\d{6,7}$/i,description:"ANNNNNNNN MinLength = 7 MaxLength = 8"}],AK:[{regex:/^\d{7}$/,description:"NNNNNNNN MinLength = 7 MaxLength = 7"}],AZ:[{regex:/^[A-Z]\d{8}$/i,description:"ANNNNNNNN MinLength = 9 MaxLength = 9"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],AR:[{regex:/^[0-9]{9}$/,description:"NNNNNNNNN MinLength = 9 MaxLength = 9"},{regex:/^[A-Z]\d{8}$/i,description:"ANNNNNNNN MinLength = 9 MaxLength = 9"}],CA:[{regex:/^[A-Z]{1}[0-9]{7}$/i,description:"License must be 1 letter followed by 7 numbers"}],CO:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[A-Z]{1}[0-9]{3,6}$/i,description:"ANNNNNN min length 4 max 7"},{regex:/^[A-Z]{2}[0-9]{1,5}$/i,description:"AANNNNN min length 3 max 7"}],CT:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],DE:[{regex:/^\d{1,7}$/,description:"License must be 1-7 numbers"}],DC:[{regex:/^[0-9]{7}$/i,description:"License must be 7 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],FL:[{regex:/^[A-Z]{1}[0-9]{12}$/i,description:"License must be 1 letter followed by 12 numbers"},{regex:/^[A-Z]\d{11}$/i,description:"ANNNNNNNNNNN MinLength = 12 MaxLength = 12"}],GA:[{regex:/^[0-9]{7,9}$/i,description:"License must be 7-9 numbers"}],GU:[{regex:/^\d{10}$/,description:"NNNNNNNNNN MinLength = 10 MaxLength = 10"}],HI:[{regex:/^[A-Z]{1}[0-9]{8}$/i,description:"License must be 1 letter followed by 8 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],ID:[{regex:/^[A-Z]{2}[0-9]{6}[A-Z]{1}$/i,description:"License must be 2 letters followed by 6 numbers followed by 1 letter"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],IL:[{regex:/^[A-Z]{1}[0-9]{11}$/i,description:"License must be 1 letter followed by 11 numbers"}],IN:[{regex:/^[0-9]{9,10}$/i,description:"License must be 9-10 numbers"}],IA:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[0-9]{3}[A-Z]{2}[0-9]{4}$/i,description:"License must be 3 numbers followed by 2 letters followed by 4 numbers"}],KS:[{regex:/^[A-Z]{1}[0-9]{8}$/i,description:"License must be 1 letter followed by 8 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],KY:[{regex:/^[A-Z]{1}[0-9]{8,9}$/i,description:"License must be 1 letter followed by 8-9 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],LA:[{regex:/^[0-9]{1,9}$/i,description:"License must be 1-9 numbers"}],ME:[{regex:/^[0-9]{7}$/i,description:"License must be 7 numbers"},{regex:/^[0-9]{7}[A-Z]{1}$/i,description:"License must be 7 numbers followed by 1 letter"},{regex:/^[0-9]{8}$/i,description:"License must be 8 numbers"}],MD:[{regex:/^[A-Z]{1,2}[0-9]{11,12}$/i,description:"License must be 1 or 2 letters followed by 11 or 12 numbers"}],MA:[{regex:/(^[A-Z]{1}[0-9]{8}$|^[A-Z]{2}[0-9]{7}$)/i,description:"License must be 1 letter followed by 8 numbers or 2 letters followed by 7 numbers"}],MI:[{regex:/^[A-Z]{1}[0-9]{12}$/i,description:"License must be 1 letter followed by 12 numbers"}],MN:[{regex:/^[A-Z]{1}[0-9]{12}$/i,description:"License must be 1 letter followed by 12 numbers"}],MS:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],MO:[{regex:/^[A-Z]{1}[0-9]{5,9}$/i,description:"License must be 1 letter followed by 5-9 numbers"},{regex:/^[A-Z]{1}[0-9]{6}[R]{1}$/i,description:'License must be 1 letter followed by 6 numbers followed by "R"'},{regex:/^[0-9]{9}[A-Z]{1}$/i,description:"License must be 9 numbers followed by 1 letter"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[0-9]{3}[A-Z]{1}[0-9]{6}$/i,description:"License must be 3 numbers + 1 alfanumeric + 6 numbers"},{regex:/^[A-Z]\d{5,6}[A-Z]$/i,description:"ANNNNNA MinLength = 7 MaxLength = 7 OR ANNNNNA MinLength = 8 MaxLength = 8"}],MT:[{regex:/^[0-9]{13}$/i,description:"License must be 13 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[A-Z]\d(\d|[A-Z])\d{2}[A-Z]{3}\d$/i,description:"ANXNNAAAN MinLength = 9 MaxLength = 9"},{regex:/^[a-z]{3}\d{10}$/i,description:"Three letters and 10 digits"}],NE:[{regex:/^[A-Z]\d{3,8}$/i,description:"ANNNNNNNN MinLength = 4 MaxLength = 9"}],NV:[{regex:/^[0-9]{9,10}$/i,description:"License must be 9-10 numbers"},{regex:/^[0-9]{12}$/i,description:"License must be 12 numbers"},{regex:/^[A-Z]\d{8}$/i,description:"ANNNNNNNN MinLength = 9 MaxLength = 9"}],NH:[{regex:/(^[0-9]{2}[A-Z]{3}[0-9]{5}$|^[A-Z]{3}[0-9]{8}$)/i,description:"License must be 2 numbers followed by 3 letters followed by 5 numbers OR 3 letters followed by 8 numbers"}],NJ:[{regex:/^[A-Z]{1}[0-9]{14}$/i,description:"License must be 1 letter followed by 14 numbers"}],NM:[{regex:/^[0-9]{8,9}$/i,description:"License must be 8-9 numbers"}],NY:[{regex:/^[A-Z]{1}[0-9]{7}$/i,description:"License must be 1 letter followed by 7 numbers"},{regex:/^[A-Z]{1}[0-9]{17,18}$/i,description:"License must be 1 letter followed by 17-18 numbers"},{regex:/^[0-9]{8,9}$/i,description:"License must be 8-9 numbers"}],NC:[{regex:/^[0-9]{1,12}$/i,description:"License must be 1-12 numbers"}],ND:[{regex:/^[A-Z]{3}[0-9]{6}$/i,description:"License must be 3 letters followed by 6 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],OH:[{regex:/^[A-Z]{2}[0-9]{6}$/i,description:"License must be 2 letters followed by 6 numbers"}],OK:[{regex:/^[A-Z]{1}[0-9]{9}$/i,description:"License must be 1 letter followed by 9 numbers"},{regex:/^\d{7,9}$/,description:"NNNNNNNNN MinLength = 7 MaxLength = 9"}],OR:[{regex:/^[0-9]{5,9}$/i,description:"License must be 5-9 numbers"},{regex:/^[A-Z]\d{7}$/i,description:"ANNNNNNN MinLength = 8 MaxLength = 8"},{regex:/^[A-Z0-9]{6,9}$/i,description:"XXXXXXXXX MinLength = 6 MaxLength = 9"}],PA:[{regex:/^[0-9]{8}$/i,description:"License must be 8 numbers"}],RI:[{regex:/^[0-9]{7,8}$/i,description:"License must be 7 or 8 numbers without letters"},{regex:/^[A-Z]{1}[0-9]{6}$/i,description:"License must be 1 letter followed by 6 numbers"}],SC:[{regex:/^[0-9]{6,11}$/i,description:"License must be 6-11 numbers (new: 9, old format: 6-11)"}],SD:[{regex:/^[0-9]{6,9}$/i,description:"License must be 6-9 numbers"}],TN:[{regex:/^[0-9]{7,9}$/i,description:"License must be 7-9 numbers"}],TX:[{regex:/^\d{5,8}$/,description:"NNNNNNNN MinLength = 5 MaxLength = 8"}],UT:[{regex:/^[0-9]{4,10}$/i,description:"License must be 4-10 numbers"}],VT:[{regex:/^[0-9]{7,}$/i,description:"License must be 7-8 numbers"},{regex:/^[0-9]{7}[A]$/i,description:'License must be 7 numbers followed by "A"'},{regex:/^\d{7}[A-Z]?$/i,description:"NNNNNNNA MinLength = 8 MaxLength = 8 OR NNNNNNN MinLength = 7 MaxLength = 7"}],VA:[{regex:/^[A-Z]{1}[0-9]{8}$/i,description:"License must be 1 letter followed by 8 numbers"},{regex:/^[0-9]{9}$/,description:"License must be 9 numbers"}],VI:[{regex:/^\d{10}$/,description:"NNNNNNNNNN MinLength = 10 MaxLength = 10"}],WA:[{regex:/^(?=.{12}$)[A-Z]{1,7}[A-Z0-9\\*]{4,11}$/i,description:'License must be 1-7 letters followed by any combination of letters, numbers, or "*" for a total of 12 characters'},{regex:/^[A-Z0-9]{12}$/i,description:"XXXXXXXXXXXX MinLength = 12 MaxLength = 12"}],WV:[{regex:/^[0-9]{7}$/i,description:"License must be 7 numbers"},{regex:/^[A-Z]{2}[0-9]{5}$/i,description:"License must be 2 letters followed by 5 numbers"},{regex:/^[A-Z]{1,2}[0-9]{6}$/i,description:"License must be 1-2 letters followed by 6 numbers"},{regex:/^[A-Z]\d{6}$/i,description:"ANNNNNN MinLength = 7 MaxLength = 7"},{regex:/^[A-Z]{2}\d{5,6}$/i,description:"AANNNNN MinLength = 7 MaxLength = 7 OR AANNNNNN MinLength = 8 MaxLength = 8"},{regex:/^\d[A-Z]\d{5}$/i,description:"NANNNNN MinLength = 7 MaxLength = 7"}],WI:[{regex:/^[A-Z]{1}[0-9]{13}$/i,description:"License must be 1 letter followed by 13 numbers"}],WY:[{regex:/^[0-9]{9}$/,description:"License must be 9 numbers"}],PR:[{regex:/^\d{7,9}$/,description:"NNNNNNNNN MinLength = 7 MaxLength = 9"}]}},function(t,e,n){"use strict";(function(e){var r=n(0),i=n(102),o=n(7),u=n(45),s=n(46),a={"Content-Type":"application/x-www-form-urlencoded"};function c(t,e){!r.isUndefined(t)&&r.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}var f,l={transitional:u,adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==e&&"[object process]"===Object.prototype.toString.call(e))&&(f=n(48)),f),transformRequest:[function(t,e){if(i(e,"Accept"),i(e,"Content-Type"),r.isFormData(t)||r.isArrayBuffer(t)||r.isBuffer(t)||r.isStream(t)||r.isFile(t)||r.isBlob(t))return t;if(r.isArrayBufferView(t))return t.buffer;if(r.isURLSearchParams(t))return c(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString();var n,o=r.isObject(t),u=e&&e["Content-Type"];if((n=r.isFileList(t))||o&&"multipart/form-data"===u){var a=this.env&&this.env.FormData;return s(n?{"files[]":t}:t,a&&new a)}return o||"application/json"===u?(c(e,"application/json"),function(t,e,n){if(r.isString(t))try{return(e||JSON.parse)(t),r.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(n||JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){var e=this.transitional||l.transitional,n=e&&e.silentJSONParsing,i=e&&e.forcedJSONParsing,u=!n&&"json"===this.responseType;if(u||i&&r.isString(t)&&t.length)try{return JSON.parse(t)}catch(t){if(u){if("SyntaxError"===t.name)throw o.from(t,o.ERR_BAD_RESPONSE,this,null,this.response);throw t}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:n(114)},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],(function(t){l.headers[t]={}})),r.forEach(["post","put","patch"],(function(t){l.headers[t]=r.merge(a)})),t.exports=l}).call(this,n(101))},function(t,e,n){var r=n(125),i=n(56),o=n(14);t.exports=function(t){return o(t)?r(t):i(t)}},function(t,e,n){var r=n(127),i=n(4),o=Object.prototype,u=o.hasOwnProperty,s=o.propertyIsEnumerable,a=r(function(){return arguments}())?r:function(t){return i(t)&&u.call(t,"callee")&&!s.call(t,"callee")};t.exports=a},function(t,e,n){(function(t){var r=n(3),i=n(130),o=e&&!e.nodeType&&e,u=o&&"object"==typeof t&&t&&!t.nodeType&&t,s=u&&u.exports===o?r.Buffer:void 0,a=(s?s.isBuffer:void 0)||i;t.exports=a}).call(this,n(55)(t))},function(t,e,n){var r=n(131),i=n(132),o=n(133),u=o&&o.isTypedArray,s=u?i(u):r;t.exports=s},function(t,e){t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e,n){var r=n(5)(n(3),"Map");t.exports=r},function(t,e,n){var r=n(154),i=n(161),o=n(163),u=n(164),s=n(165);function a(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}a.prototype.clear=r,a.prototype.delete=i,a.prototype.get=o,a.prototype.has=u,a.prototype.set=s,t.exports=a},function(t,e,n){var r=n(1),i=n(19),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,u=/^\w*$/;t.exports=function(t,e){if(r(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!i(t))||(u.test(t)||!o.test(t)||null!=e&&t in Object(e))}},function(t,e,n){var r=n(2),i=Object.create,o=function(){function t(){}return function(e){if(!r(e))return{};if(i)return i(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();t.exports=o},function(t,e){t.exports=function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}},function(t,e,n){var r=n(35),i=n(38);function o(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}o.prototype=r(i.prototype),o.prototype.constructor=o,t.exports=o},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t){return t.placeholder}},function(t,e,n){var r,i,o;!function(u){"use strict";if(null!=e&&"number"!=typeof e.nodeType)t.exports=u();else if(null!=n(119))i=[],void 0===(o="function"==typeof(r=u)?r.apply(e,i):r)||(t.exports=o);else{var s=u(),a="undefined"!=typeof self?self:$.global;"function"!=typeof a.btoa&&(a.btoa=s.btoa),"function"!=typeof a.atob&&(a.atob=s.atob)}}((function(){"use strict";var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function e(t){this.message=t}return e.prototype=new Error,e.prototype.name="InvalidCharacterError",{btoa:function(n){for(var r,i,o=String(n),u=0,s=t,a="";o.charAt(0|u)||(s="=",u%1);a+=s.charAt(63&r>>8-u%1*8)){if((i=o.charCodeAt(u+=3/4))>255)throw new e("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");r=r<<8|i}return a},atob:function(n){var r=String(n).replace(/[=]+$/,"");if(r.length%4==1)throw new e("'atob' failed: The string to be decoded is not correctly encoded.");for(var i,o,u=0,s=0,a="";o=r.charAt(s++);~o&&(i=u%4?64*i+o:o,u++%4)?a+=String.fromCharCode(255&i>>(-2*u&6)):0)o=t.indexOf(o);return a}}}))},function(t,e,n){var r=n(225),i=n(73),o=n(39),u=n(23),s=r((function(t,e){var n=u(e,o(s));return i(t,32,void 0,e,n)}));s.placeholder={},t.exports=s},function(t,e,n){var r=n(24),i=n(233),o=n(234),u=n(235);t.exports={driversLicenseRegex:r,isValidUSLicense:i,validateUSDriversLicense:o,supportedStates:u}},function(t,e,n){"use strict";t.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return t.apply(e,n)}}},function(t,e,n){"use strict";var r=n(0);function i(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}t.exports=function(t,e,n){if(!e)return t;var o;if(n)o=n(e);else if(r.isURLSearchParams(e))o=e.toString();else{var u=[];r.forEach(e,(function(t,e){null!=t&&(r.isArray(t)?e+="[]":t=[t],r.forEach(t,(function(t){r.isDate(t)?t=t.toISOString():r.isObject(t)&&(t=JSON.stringify(t)),u.push(i(e)+"="+i(t))})))})),o=u.join("&")}if(o){var s=t.indexOf("#");-1!==s&&(t=t.slice(0,s)),t+=(-1===t.indexOf("?")?"?":"&")+o}return t}},function(t,e,n){"use strict";t.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},function(t,e,n){"use strict";(function(e){var r=n(0);t.exports=function(t,n){n=n||new FormData;var i=[];function o(t){return null===t?"":r.isDate(t)?t.toISOString():r.isArrayBuffer(t)||r.isTypedArray(t)?"function"==typeof Blob?new Blob([t]):e.from(t):t}return function t(e,u){if(r.isPlainObject(e)||r.isArray(e)){if(-1!==i.indexOf(e))throw Error("Circular reference detected in "+u);i.push(e),r.forEach(e,(function(e,i){if(!r.isUndefined(e)){var s,a=u?u+"."+i:i;if(e&&!u&&"object"==typeof e)if(r.endsWith(i,"{}"))e=JSON.stringify(e);else if(r.endsWith(i,"[]")&&(s=r.toArray(e)))return void s.forEach((function(t){!r.isUndefined(t)&&n.append(a,o(t))}));t(e,a)}})),i.pop()}else n.append(u,o(e))}(t),n}}).call(this,n(103).Buffer)},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){"use strict";var r=n(0),i=n(107),o=n(108),u=n(44),s=n(49),a=n(111),c=n(112),f=n(45),l=n(7),p=n(11),h=n(113);t.exports=function(t){return new Promise((function(e,n){var d,v=t.data,g=t.headers,y=t.responseType;function b(){t.cancelToken&&t.cancelToken.unsubscribe(d),t.signal&&t.signal.removeEventListener("abort",d)}r.isFormData(v)&&r.isStandardBrowserEnv()&&delete g["Content-Type"];var m=new XMLHttpRequest;if(t.auth){var w=t.auth.username||"",x=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";g.Authorization="Basic "+btoa(w+":"+x)}var _=s(t.baseURL,t.url);function A(){if(m){var r="getAllResponseHeaders"in m?a(m.getAllResponseHeaders()):null,o={data:y&&"text"!==y&&"json"!==y?m.response:m.responseText,status:m.status,statusText:m.statusText,headers:r,config:t,request:m};i((function(t){e(t),b()}),(function(t){n(t),b()}),o),m=null}}if(m.open(t.method.toUpperCase(),u(_,t.params,t.paramsSerializer),!0),m.timeout=t.timeout,"onloadend"in m?m.onloadend=A:m.onreadystatechange=function(){m&&4===m.readyState&&(0!==m.status||m.responseURL&&0===m.responseURL.indexOf("file:"))&&setTimeout(A)},m.onabort=function(){m&&(n(new l("Request aborted",l.ECONNABORTED,t,m)),m=null)},m.onerror=function(){n(new l("Network Error",l.ERR_NETWORK,t,m,m)),m=null},m.ontimeout=function(){var e=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded",r=t.transitional||f;t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(new l(e,r.clarifyTimeoutError?l.ETIMEDOUT:l.ECONNABORTED,t,m)),m=null},r.isStandardBrowserEnv()){var N=(t.withCredentials||c(_))&&t.xsrfCookieName?o.read(t.xsrfCookieName):void 0;N&&(g[t.xsrfHeaderName]=N)}"setRequestHeader"in m&&r.forEach(g,(function(t,e){void 0===v&&"content-type"===e.toLowerCase()?delete g[e]:m.setRequestHeader(e,t)})),r.isUndefined(t.withCredentials)||(m.withCredentials=!!t.withCredentials),y&&"json"!==y&&(m.responseType=t.responseType),"function"==typeof t.onDownloadProgress&&m.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&m.upload&&m.upload.addEventListener("progress",t.onUploadProgress),(t.cancelToken||t.signal)&&(d=function(t){m&&(n(!t||t&&t.type?new p:t),m.abort(),m=null)},t.cancelToken&&t.cancelToken.subscribe(d),t.signal&&(t.signal.aborted?d():t.signal.addEventListener("abort",d))),v||(v=null);var O=h(_);O&&-1===["http","https","file"].indexOf(O)?n(new l("Unsupported protocol "+O+":",l.ERR_BAD_REQUEST,t)):m.send(v)}))}},function(t,e,n){"use strict";var r=n(109),i=n(110);t.exports=function(t,e){return t&&!r(e)?i(t,e):e}},function(t,e,n){"use strict";t.exports=function(t){return!(!t||!t.__CANCEL__)}},function(t,e,n){"use strict";var r=n(0);t.exports=function(t,e){e=e||{};var n={};function i(t,e){return r.isPlainObject(t)&&r.isPlainObject(e)?r.merge(t,e):r.isPlainObject(e)?r.merge({},e):r.isArray(e)?e.slice():e}function o(n){return r.isUndefined(e[n])?r.isUndefined(t[n])?void 0:i(void 0,t[n]):i(t[n],e[n])}function u(t){if(!r.isUndefined(e[t]))return i(void 0,e[t])}function s(n){return r.isUndefined(e[n])?r.isUndefined(t[n])?void 0:i(void 0,t[n]):i(void 0,e[n])}function a(n){return n in e?i(t[n],e[n]):n in t?i(void 0,t[n]):void 0}var c={url:u,method:u,data:u,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:a};return r.forEach(Object.keys(t).concat(Object.keys(e)),(function(t){var e=c[t]||o,i=e(t);r.isUndefined(i)&&e!==a||(n[t]=i)})),n}},function(t,e){t.exports={version:"0.27.2"}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,i=0,o=[];++n<r;){var u=t[n];e(u,n,t)&&(o[i++]=u)}return o}},function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(this,n(47))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){var r=n(57),i=n(134),o=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return i(t);var e=[];for(var n in Object(t))o.call(t,n)&&"constructor"!=n&&e.push(n);return e}},function(t,e){var n=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||n)}},function(t,e,n){var r=n(8),i=n(2);t.exports=function(t){if(!i(t))return!1;var e=r(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},function(t,e,n){var r=n(15),i=n(145),o=n(146),u=n(147),s=n(148),a=n(149);function c(t){var e=this.__data__=new r(t);this.size=e.size}c.prototype.clear=i,c.prototype.delete=o,c.prototype.get=u,c.prototype.has=s,c.prototype.set=a,t.exports=c},function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},function(t,e,n){var r=n(166),i=n(4);t.exports=function t(e,n,o,u,s){return e===n||(null==e||null==n||!i(e)&&!i(n)?e!=e&&n!=n:r(e,n,o,u,t,s))}},function(t,e,n){var r=n(167),i=n(170),o=n(171);t.exports=function(t,e,n,u,s,a){var c=1&n,f=t.length,l=e.length;if(f!=l&&!(c&&l>f))return!1;var p=a.get(t),h=a.get(e);if(p&&h)return p==e&&h==t;var d=-1,v=!0,g=2&n?new r:void 0;for(a.set(t,e),a.set(e,t);++d<f;){var y=t[d],b=e[d];if(u)var m=c?u(b,y,d,e,t,a):u(y,b,d,t,e,a);if(void 0!==m){if(m)continue;v=!1;break}if(g){if(!i(e,(function(t,e){if(!o(g,e)&&(y===t||s(y,t,n,u,a)))return g.push(e)}))){v=!1;break}}else if(y!==b&&!s(y,b,n,u,a)){v=!1;break}}return a.delete(t),a.delete(e),v}},function(t,e,n){var r=n(182),i=n(32),o=n(183),u=n(184),s=n(64),a=n(8),c=n(60),f=c(r),l=c(i),p=c(o),h=c(u),d=c(s),v=a;(r&&"[object DataView]"!=v(new r(new ArrayBuffer(1)))||i&&"[object Map]"!=v(new i)||o&&"[object Promise]"!=v(o.resolve())||u&&"[object Set]"!=v(new u)||s&&"[object WeakMap]"!=v(new s))&&(v=function(t){var e=a(t),n="[object Object]"==e?t.constructor:void 0,r=n?c(n):"";if(r)switch(r){case f:return"[object DataView]";case l:return"[object Map]";case p:return"[object Promise]";case h:return"[object Set]";case d:return"[object WeakMap]"}return e}),t.exports=v},function(t,e,n){var r=n(5)(n(3),"WeakMap");t.exports=r},function(t,e,n){var r=n(2);t.exports=function(t){return t==t&&!r(t)}},function(t,e){t.exports=function(t,e){return function(n){return null!=n&&(n[t]===e&&(void 0!==e||t in Object(n)))}}},function(t,e,n){var r=n(68),i=n(20);t.exports=function(t,e){for(var n=0,o=(e=r(e,t)).length;null!=t&&n<o;)t=t[i(e[n++])];return n&&n==o?t:void 0}},function(t,e,n){var r=n(1),i=n(34),o=n(188),u=n(69);t.exports=function(t,e){return r(t)?t:i(t,e)?[t]:o(u(t))}},function(t,e,n){var r=n(191);t.exports=function(t){return null==t?"":r(t)}},function(t,e,n){var r=n(199),i=n(200),o=n(201);t.exports=function(t,e,n){return e==e?o(t,e,n):r(t,i,n)}},function(t,e,n){var r=n(72);t.exports=function(t){var e=r(t),n=e%1;return e==e?n?e-n:e:0}},function(t,e,n){var r=n(202);t.exports=function(t){return t?(t=r(t))===1/0||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}},function(t,e,n){var r=n(74),i=n(205),o=n(206),u=n(76),s=n(223),a=n(80),c=n(224),f=n(83),l=n(85),p=n(71),h=Math.max;t.exports=function(t,e,n,d,v,g,y,b){var m=2&e;if(!m&&"function"!=typeof t)throw new TypeError("Expected a function");var w=d?d.length:0;if(w||(e&=-97,d=v=void 0),y=void 0===y?y:h(p(y),0),b=void 0===b?b:p(b),w-=v?v.length:0,64&e){var x=d,_=v;d=v=void 0}var A=m?void 0:a(t),N=[t,e,n,d,v,x,_,g,y,b];if(A&&c(N,A),t=N[0],e=N[1],n=N[2],d=N[3],v=N[4],!(b=N[9]=void 0===N[9]?m?0:t.length:h(N[9]-w,0))&&24&e&&(e&=-25),e&&1!=e)O=8==e||16==e?o(t,e,b):32!=e&&33!=e||v.length?u.apply(void 0,N):s(t,e,n,d);else var O=i(t,e,n);return l((A?r:f)(O,N),t,e)}},function(t,e,n){var r=n(21),i=n(75),o=i?function(t,e){return i.set(t,e),t}:r;t.exports=o},function(t,e,n){var r=n(64),i=r&&new r;t.exports=i},function(t,e,n){var r=n(77),i=n(78),o=n(207),u=n(22),s=n(79),a=n(39),c=n(222),f=n(23),l=n(3);t.exports=function t(e,n,p,h,d,v,g,y,b,m){var w=128&n,x=1&n,_=2&n,A=24&n,N=512&n,O=_?void 0:u(e);return function E(){for(var S=arguments.length,R=Array(S),$=S;$--;)R[$]=arguments[$];if(A)var j=a(E),L=o(R,j);if(h&&(R=r(R,h,d,A)),v&&(R=i(R,v,g,A)),S-=L,A&&S<m){var T=f(R,j);return s(e,n,t,E.placeholder,p,R,T,y,b,m-S)}var M=x?p:this,C=_?M[e]:e;return S=R.length,y?R=c(R,y):N&&S>1&&R.reverse(),w&&b<S&&(R.length=b),this&&this!==l&&this instanceof E&&(C=O||u(C)),C.apply(M,R)}}},function(t,e){var n=Math.max;t.exports=function(t,e,r,i){for(var o=-1,u=t.length,s=r.length,a=-1,c=e.length,f=n(u-s,0),l=Array(c+f),p=!i;++a<c;)l[a]=e[a];for(;++o<s;)(p||o<u)&&(l[r[o]]=t[o]);for(;f--;)l[a++]=t[o++];return l}},function(t,e){var n=Math.max;t.exports=function(t,e,r,i){for(var o=-1,u=t.length,s=-1,a=r.length,c=-1,f=e.length,l=n(u-a,0),p=Array(l+f),h=!i;++o<l;)p[o]=t[o];for(var d=o;++c<f;)p[d+c]=e[c];for(;++s<a;)(h||o<u)&&(p[d+r[s]]=t[o++]);return p}},function(t,e,n){var r=n(208),i=n(83),o=n(85);t.exports=function(t,e,n,u,s,a,c,f,l,p){var h=8&e;e|=h?32:64,4&(e&=~(h?64:32))||(e&=-4);var d=[t,e,s,h?a:void 0,h?c:void 0,h?void 0:a,h?void 0:c,f,l,p],v=n.apply(void 0,d);return r(t)&&i(v,d),v.placeholder=u,o(v,t,e)}},function(t,e,n){var r=n(75),i=n(209),o=r?function(t){return r.get(t)}:i;t.exports=o},function(t,e,n){var r=n(35),i=n(38);function o(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=void 0}o.prototype=r(i.prototype),o.prototype.constructor=o,t.exports=o},function(t,e){t.exports=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}},function(t,e,n){var r=n(74),i=n(84)(r);t.exports=i},function(t,e){var n=Date.now;t.exports=function(t){var e=0,r=0;return function(){var i=n(),o=16-(i-r);if(r=i,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},function(t,e,n){var r=n(214),i=n(215),o=n(86),u=n(219);t.exports=function(t,e,n){var s=e+"";return o(t,i(s,u(r(s),n)))}},function(t,e,n){var r=n(216),i=n(84)(r);t.exports=i},function(t,e){var n=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");t.exports=function(t){return n.test(t)}},function(t,e,n){t.exports=n(96)},function(t,e,n){var r=n(53),i=n(120),o=n(137),u=n(1);t.exports=function(t,e){return(u(t)?r:i)(t,o(e,3))}},function(t,e,n){var r=n(70),i=n(71),o=Math.max;t.exports=function(t,e,n){var u=null==t?0:t.length;if(!u)return-1;var s=null==n?0:i(n);return s<0&&(s=o(u+s,0)),r(t,e,s)}},function(t,e,n){var r=n(56),i=n(63),o=n(27),u=n(1),s=n(14),a=n(28),c=n(57),f=n(29),l=Object.prototype.hasOwnProperty;t.exports=function(t){if(null==t)return!0;if(s(t)&&(u(t)||"string"==typeof t||"function"==typeof t.splice||a(t)||f(t)||o(t)))return!t.length;var e=i(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if(c(t))return!r(t).length;for(var n in t)if(l.call(t,n))return!1;return!0}},function(t,e,n){t.exports=function(){"use strict";return function(t,e,n){t=t||{};var r=e.prototype,i={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function o(t,e,n,i){return r.fromToBase(t,e,n,i)}n.en.relativeTime=i,r.fromToBase=function(e,r,o,u,s){for(var a,c,f,l=o.$locale().relativeTime||i,p=t.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],h=p.length,d=0;d<h;d+=1){var v=p[d];v.d&&(a=u?n(e).diff(o,v.d,!0):o.diff(e,v.d,!0));var g=(t.rounding||Math.round)(Math.abs(a));if(f=a>0,g<=v.r||!v.r){g<=1&&d>0&&(v=p[d-1]);var y=l[v.l];s&&(g=s(""+g)),c="string"==typeof y?y.replace("%d",g):y(g,r,v.l,f);break}}if(r)return c;var b=f?l.future:l.past;return"function"==typeof b?b(c):b.replace("%s",c)},r.to=function(t,e){return o(t,e,this,!0)},r.from=function(t,e){return o(t,e,this)};var u=function(t){return t.$u?n.utc():n()};r.toNow=function(t){return this.to(u(this),t)},r.fromNow=function(t){return this.from(u(this),t)}}}()},function(t,e,n){t.exports=function(){"use strict";var t="minute",e=/[+-]\d\d(?::?\d\d)?/g,n=/([+-]|\d\d)/g;return function(r,i,o){var u=i.prototype;o.utc=function(t){var e={date:t,utc:!0,args:arguments};return new i(e)},u.utc=function(e){var n=o(this.toDate(),{locale:this.$L,utc:!0});return e?n.add(this.utcOffset(),t):n},u.local=function(){return o(this.toDate(),{locale:this.$L,utc:!1})};var s=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),s.call(this,t)};var a=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else a.call(this)};var c=u.utcOffset;u.utcOffset=function(r,i){var o=this.$utils().u;if(o(r))return this.$u?0:o(this.$offset)?c.call(this):this.$offset;if("string"==typeof r&&null===(r=function(t){void 0===t&&(t="");var r=t.match(e);if(!r)return null;var i=(""+r[0]).match(n)||["-",0,0],o=i[0],u=60*+i[1]+ +i[2];return 0===u?0:"+"===o?u:-u}(r)))return this;var u=Math.abs(r)<=16?60*r:r;if(0===u)return this.utc(i);var s=this.clone();if(i)return s.$offset=u,s.$u=!1,s;var a=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(s=this.local().add(u+a,t)).$offset=u,s.$x.$localOffset=a,s};var f=u.format;u.format=function(t){var e=t||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return f.call(this,e)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return"s"===t&&this.$offset?o(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():l.call(this)};var p=u.diff;u.diff=function(t,e,n){if(t&&this.$u===t.$u)return p.call(this,t,e,n);var r=this.local(),i=o(t).local();return p.call(r,i,e,n)}}}()},function(t,e,n){var r=n(227)("toUpperCase");t.exports=r},function(t,e,n){var r=n(236)();t.exports=r},function(t,e,n){"use strict";var r=n(0),i=n(43),o=n(97),u=n(51);var s=function t(e){var n=new o(e),s=i(o.prototype.request,n);return r.extend(s,o.prototype,n),r.extend(s,n),s.create=function(n){return t(u(e,n))},s}(n(25));s.Axios=o,s.CanceledError=n(11),s.CancelToken=n(116),s.isCancel=n(50),s.VERSION=n(52).version,s.toFormData=n(46),s.AxiosError=n(7),s.Cancel=s.CanceledError,s.all=function(t){return Promise.all(t)},s.spread=n(117),s.isAxiosError=n(118),t.exports=s,t.exports.default=s},function(t,e,n){"use strict";var r=n(0),i=n(44),o=n(98),u=n(99),s=n(51),a=n(49),c=n(115),f=c.validators;function l(t){this.defaults=t,this.interceptors={request:new o,response:new o}}l.prototype.request=function(t,e){"string"==typeof t?(e=e||{}).url=t:e=t||{},(e=s(this.defaults,e)).method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var n=e.transitional;void 0!==n&&c.assertOptions(n,{silentJSONParsing:f.transitional(f.boolean),forcedJSONParsing:f.transitional(f.boolean),clarifyTimeoutError:f.transitional(f.boolean)},!1);var r=[],i=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(i=i&&t.synchronous,r.unshift(t.fulfilled,t.rejected))}));var o,a=[];if(this.interceptors.response.forEach((function(t){a.push(t.fulfilled,t.rejected)})),!i){var l=[u,void 0];for(Array.prototype.unshift.apply(l,r),l=l.concat(a),o=Promise.resolve(e);l.length;)o=o.then(l.shift(),l.shift());return o}for(var p=e;r.length;){var h=r.shift(),d=r.shift();try{p=h(p)}catch(t){d(t);break}}try{o=u(p)}catch(t){return Promise.reject(t)}for(;a.length;)o=o.then(a.shift(),a.shift());return o},l.prototype.getUri=function(t){t=s(this.defaults,t);var e=a(t.baseURL,t.url);return i(e,t.params,t.paramsSerializer)},r.forEach(["delete","get","head","options"],(function(t){l.prototype[t]=function(e,n){return this.request(s(n||{},{method:t,url:e,data:(n||{}).data}))}})),r.forEach(["post","put","patch"],(function(t){function e(e){return function(n,r,i){return this.request(s(i||{},{method:t,headers:e?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}l.prototype[t]=e(),l.prototype[t+"Form"]=e(!0)})),t.exports=l},function(t,e,n){"use strict";var r=n(0);function i(){this.handlers=[]}i.prototype.use=function(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},i.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},i.prototype.forEach=function(t){r.forEach(this.handlers,(function(e){null!==e&&t(e)}))},t.exports=i},function(t,e,n){"use strict";var r=n(0),i=n(100),o=n(50),u=n(25),s=n(11);function a(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new s}t.exports=function(t){return a(t),t.headers=t.headers||{},t.data=i.call(t,t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),r.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||u.adapter)(t).then((function(e){return a(t),e.data=i.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return o(e)||(a(t),e&&e.response&&(e.response.data=i.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))}},function(t,e,n){"use strict";var r=n(0),i=n(25);t.exports=function(t,e,n){var o=this||i;return r.forEach(n,(function(n){t=n.call(o,t,e)})),t}},function(t,e){var n,r,i=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function u(){throw new Error("clearTimeout has not been defined")}function s(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(t){n=o}try{r="function"==typeof clearTimeout?clearTimeout:u}catch(t){r=u}}();var a,c=[],f=!1,l=-1;function p(){f&&a&&(f=!1,a.length?c=a.concat(c):l=-1,c.length&&h())}function h(){if(!f){var t=s(p);f=!0;for(var e=c.length;e;){for(a=c,c=[];++l<e;)a&&a[l].run();l=-1,e=c.length}a=null,f=!1,function(t){if(r===clearTimeout)return clearTimeout(t);if((r===u||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(t);try{r(t)}catch(e){try{return r.call(null,t)}catch(e){return r.call(this,t)}}}(t)}}function d(t,e){this.fun=t,this.array=e}function v(){}i.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];c.push(new d(t,e)),1!==c.length||f||s(h)},d.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=v,i.addListener=v,i.once=v,i.off=v,i.removeListener=v,i.removeAllListeners=v,i.emit=v,i.prependListener=v,i.prependOnceListener=v,i.listeners=function(t){return[]},i.binding=function(t){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(t){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},function(t,e,n){"use strict";var r=n(0);t.exports=function(t,e){r.forEach(t,(function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])}))}},function(t,e,n){"use strict";(function(t){
2
2
  /*!
3
- * Determine if an object is a Buffer
3
+ * The buffer module from node.js, for the browser.
4
4
  *
5
- * @author Feross Aboukhadijeh <https://feross.org>
5
+ * @author Feross Aboukhadijeh <http://feross.org>
6
6
  * @license MIT
7
7
  */
8
- t.exports=function(t){return null!=t&&(n(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&n(t.slice(0,0))}(t)||!!t._isBuffer)}},function(t,e,n){"use strict";var r=n(38),o=n(5),i=n(176),u=n(177),c=n(179),a=n(180);function s(t){this.defaults=t,this.interceptors={request:new i,response:new i}}s.prototype.request=function(t){"string"==typeof t&&(t=o.merge({url:arguments[0]},arguments[1])),(t=o.merge(r,this.defaults,{method:"get"},t)).method=t.method.toLowerCase(),t.baseURL&&!c(t.url)&&(t.url=a(t.baseURL,t.url));var e=[u,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach((function(t){e.unshift(t.fulfilled,t.rejected)})),this.interceptors.response.forEach((function(t){e.push(t.fulfilled,t.rejected)}));e.length;)n=n.then(e.shift(),e.shift());return n},o.forEach(["delete","get","head","options"],(function(t){s.prototype[t]=function(e,n){return this.request(o.merge(n||{},{method:t,url:e}))}})),o.forEach(["post","put","patch"],(function(t){s.prototype[t]=function(e,n,r){return this.request(o.merge(r||{},{method:t,url:e,data:n}))}})),t.exports=s},function(t,e,n){"use strict";var r=n(5);t.exports=function(t,e){r.forEach(t,(function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])}))}},function(t,e,n){"use strict";var r=n(66);t.exports=function(t,e,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?e(r("Request failed with status code "+n.status,n.config,null,n.request,n)):t(n)}},function(t,e,n){"use strict";t.exports=function(t,e,n,r,o){return t.config=e,n&&(t.code=n),t.request=r,t.response=o,t}},function(t,e,n){"use strict";var r=n(5);function o(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}t.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else if(r.isURLSearchParams(e))i=e.toString();else{var u=[];r.forEach(e,(function(t,e){null!=t&&(r.isArray(t)&&(e+="[]"),r.isArray(t)||(t=[t]),r.forEach(t,(function(t){r.isDate(t)?t=t.toISOString():r.isObject(t)&&(t=JSON.stringify(t)),u.push(o(e)+"="+o(t))})))})),i=u.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},function(t,e,n){"use strict";var r=n(5);t.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),(function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)})),i):i}},function(t,e,n){"use strict";var r=n(5);t.exports=r.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function o(t){var r=t;return e&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=o(window.location.href),function(e){var n=r.isString(e)?o(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0}},function(t,e,n){"use strict";function r(){this.message="String contains an invalid character"}r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",t.exports=function(t){for(var e,n,o=String(t),i="",u=0,c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";o.charAt(0|u)||(c="=",u%1);i+=c.charAt(63&e>>8-u%1*8)){if((n=o.charCodeAt(u+=3/4))>255)throw new r;e=e<<8|n}return i}},function(t,e,n){"use strict";var r=n(5);t.exports=r.isStandardBrowserEnv()?{write:function(t,e,n,o,i,u){var c=[];c.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&c.push("expires="+new Date(n).toGMTString()),r.isString(o)&&c.push("path="+o),r.isString(i)&&c.push("domain="+i),!0===u&&c.push("secure"),document.cookie=c.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(t,e,n){"use strict";var r=n(5);function o(){this.handlers=[]}o.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},o.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},o.prototype.forEach=function(t){r.forEach(this.handlers,(function(e){null!==e&&t(e)}))},t.exports=o},function(t,e,n){"use strict";var r=n(5),o=n(178),i=n(67),u=n(38);function c(t){t.cancelToken&&t.cancelToken.throwIfRequested()}t.exports=function(t){return c(t),t.headers=t.headers||{},t.data=o(t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),r.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||u.adapter)(t).then((function(e){return c(t),e.data=o(e.data,e.headers,t.transformResponse),e}),(function(e){return i(e)||(c(t),e&&e.response&&(e.response.data=o(e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))}},function(t,e,n){"use strict";var r=n(5);t.exports=function(t,e,n){return r.forEach(n,(function(n){t=n(t,e)})),t}},function(t,e,n){"use strict";t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},function(t,e,n){"use strict";t.exports=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}},function(t,e,n){"use strict";var r=n(68);function o(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;t((function(t){n.reason||(n.reason=new r(t),e(n.reason))}))}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.source=function(){var t;return{token:new o((function(e){t=e})),cancel:t}},t.exports=o},function(t,e,n){"use strict";t.exports=function(t){return function(e){return t.apply(null,e)}}},function(t,e){(function(e){t.exports=e}).call(this,{})},function(t,e,n){var r=n(185);t.exports=function(t,e){var n=[];return r(t,(function(t,r,o){e(t,r,o)&&n.push(t)})),n}},function(t,e,n){var r=n(186),o=n(200)(r);t.exports=o},function(t,e,n){var r=n(187),o=n(39);t.exports=function(t,e){return t&&r(t,e,o)}},function(t,e,n){var r=n(188)();t.exports=r},function(t,e){t.exports=function(t){return function(e,n,r){for(var o=-1,i=Object(e),u=r(e),c=u.length;c--;){var a=u[t?c:++o];if(!1===n(i[a],a,i))break}return e}}},function(t,e,n){var r=n(190),o=n(40),i=n(2),u=n(41),c=n(21),a=n(42),s=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=i(t),f=!n&&o(t),l=!n&&!f&&u(t),p=!n&&!f&&!l&&a(t),d=n||f||l||p,h=d?r(t.length,String):[],v=h.length;for(var y in t)!e&&!s.call(t,y)||d&&("length"==y||l&&("offset"==y||"parent"==y)||p&&("buffer"==y||"byteLength"==y||"byteOffset"==y)||c(y,v))||h.push(y);return h}},function(t,e){t.exports=function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}},function(t,e,n){var r=n(10),o=n(6);t.exports=function(t){return o(t)&&"[object Arguments]"==r(t)}},function(t,e,n){var r=n(20),o=Object.prototype,i=o.hasOwnProperty,u=o.toString,c=r?r.toStringTag:void 0;t.exports=function(t){var e=i.call(t,c),n=t[c];try{t[c]=void 0;var r=!0}catch(t){}var o=u.call(t);return r&&(e?t[c]=n:delete t[c]),o}},function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},function(t,e){t.exports=function(){return!1}},function(t,e,n){var r=n(10),o=n(43),i=n(6),u={};u["[object Float32Array]"]=u["[object Float64Array]"]=u["[object Int8Array]"]=u["[object Int16Array]"]=u["[object Int32Array]"]=u["[object Uint8Array]"]=u["[object Uint8ClampedArray]"]=u["[object Uint16Array]"]=u["[object Uint32Array]"]=!0,u["[object Arguments]"]=u["[object Array]"]=u["[object ArrayBuffer]"]=u["[object Boolean]"]=u["[object DataView]"]=u["[object Date]"]=u["[object Error]"]=u["[object Function]"]=u["[object Map]"]=u["[object Number]"]=u["[object Object]"]=u["[object RegExp]"]=u["[object Set]"]=u["[object String]"]=u["[object WeakMap]"]=!1,t.exports=function(t){return i(t)&&o(t.length)&&!!u[r(t)]}},function(t,e){t.exports=function(t){return function(e){return t(e)}}},function(t,e,n){(function(t){var r=n(70),o=e&&!e.nodeType&&e,i=o&&"object"==typeof t&&t&&!t.nodeType&&t,u=i&&i.exports===o&&r.process,c=function(){try{var t=i&&i.require&&i.require("util").types;return t||u&&u.binding&&u.binding("util")}catch(t){}}();t.exports=c}).call(this,n(71)(t))},function(t,e,n){var r=n(199)(Object.keys,Object);t.exports=r},function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},function(t,e,n){var r=n(22);t.exports=function(t,e){return function(n,o){if(null==n)return n;if(!r(n))return t(n,o);for(var i=n.length,u=e?i:-1,c=Object(n);(e?u--:++u<i)&&!1!==o(c[u],u,c););return n}}},function(t,e,n){var r=n(202),o=n(250),i=n(29),u=n(2),c=n(260);t.exports=function(t){return"function"==typeof t?t:null==t?i:"object"==typeof t?u(t)?o(t[0],t[1]):r(t):c(t)}},function(t,e,n){var r=n(203),o=n(249),i=n(82);t.exports=function(t){var e=o(t);return 1==e.length&&e[0][2]?i(e[0][0],e[0][1]):function(n){return n===t||r(n,t,e)}}},function(t,e,n){var r=n(75),o=n(77);t.exports=function(t,e,n,i){var u=n.length,c=u,a=!i;if(null==t)return!c;for(t=Object(t);u--;){var s=n[u];if(a&&s[2]?s[1]!==t[s[0]]:!(s[0]in t))return!1}for(;++u<c;){var f=(s=n[u])[0],l=t[f],p=s[1];if(a&&s[2]){if(void 0===l&&!(f in t))return!1}else{var d=new r;if(i)var h=i(l,p,f,t,e,d);if(!(void 0===h?o(p,l,3,i,d):h))return!1}}return!0}},function(t,e){t.exports=function(){this.__data__=[],this.size=0}},function(t,e,n){var r=n(24),o=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=r(e,t);return!(n<0)&&(n==e.length-1?e.pop():o.call(e,n,1),--this.size,!0)}},function(t,e,n){var r=n(24);t.exports=function(t){var e=this.__data__,n=r(e,t);return n<0?void 0:e[n][1]}},function(t,e,n){var r=n(24);t.exports=function(t){return r(this.__data__,t)>-1}},function(t,e,n){var r=n(24);t.exports=function(t,e){var n=this.__data__,o=r(n,t);return o<0?(++this.size,n.push([t,e])):n[o][1]=e,this}},function(t,e,n){var r=n(23);t.exports=function(){this.__data__=new r,this.size=0}},function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},function(t,e){t.exports=function(t){return this.__data__.get(t)}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e,n){var r=n(23),o=n(45),i=n(46);t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var u=n.__data__;if(!o||u.length<199)return u.push([t,e]),this.size=++n.size,this;n=this.__data__=new i(u)}return n.set(t,e),this.size=n.size,this}},function(t,e,n){var r=n(74),o=n(215),i=n(3),u=n(76),c=/^\[object .+?Constructor\]$/,a=Function.prototype,s=Object.prototype,f=a.toString,l=s.hasOwnProperty,p=RegExp("^"+f.call(l).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!i(t)||o(t))&&(r(t)?p:c).test(u(t))}},function(t,e,n){var r,o=n(216),i=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!i&&i in t}},function(t,e,n){var r=n(4)["__core-js_shared__"];t.exports=r},function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},function(t,e,n){var r=n(219),o=n(23),i=n(45);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(i||o),string:new r}}},function(t,e,n){var r=n(220),o=n(221),i=n(222),u=n(223),c=n(224);function a(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}a.prototype.clear=r,a.prototype.delete=o,a.prototype.get=i,a.prototype.has=u,a.prototype.set=c,t.exports=a},function(t,e,n){var r=n(25);t.exports=function(){this.__data__=r?r(null):{},this.size=0}},function(t,e){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},function(t,e,n){var r=n(25),o=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(r){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return o.call(e,t)?e[t]:void 0}},function(t,e,n){var r=n(25),o=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return r?void 0!==e[t]:o.call(e,t)}},function(t,e,n){var r=n(25);t.exports=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=r&&void 0===e?"__lodash_hash_undefined__":e,this}},function(t,e,n){var r=n(26);t.exports=function(t){var e=r(this,t).delete(t);return this.size-=e?1:0,e}},function(t,e){t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},function(t,e,n){var r=n(26);t.exports=function(t){return r(this,t).get(t)}},function(t,e,n){var r=n(26);t.exports=function(t){return r(this,t).has(t)}},function(t,e,n){var r=n(26);t.exports=function(t,e){var n=r(this,t),o=n.size;return n.set(t,e),this.size+=n.size==o?0:1,this}},function(t,e,n){var r=n(75),o=n(78),i=n(236),u=n(240),c=n(79),a=n(2),s=n(41),f=n(42),l="[object Object]",p=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,d,h,v){var y=a(t),g=a(e),m=y?"[object Array]":c(t),b=g?"[object Array]":c(e),x=(m="[object Arguments]"==m?l:m)==l,_=(b="[object Arguments]"==b?l:b)==l,w=m==b;if(w&&s(t)){if(!s(e))return!1;y=!0,x=!1}if(w&&!x)return v||(v=new r),y||f(t)?o(t,e,n,d,h,v):i(t,e,m,n,d,h,v);if(!(1&n)){var N=x&&p.call(t,"__wrapped__"),O=_&&p.call(e,"__wrapped__");if(N||O){var A=N?t.value():t,$=O?e.value():e;return v||(v=new r),h(A,$,n,d,v)}}return!!w&&(v||(v=new r),u(t,e,n,d,h,v))}},function(t,e,n){var r=n(46),o=n(232),i=n(233);function u(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new r;++e<n;)this.add(t[e])}u.prototype.add=u.prototype.push=o,u.prototype.has=i,t.exports=u},function(t,e){t.exports=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}},function(t,e){t.exports=function(t,e){return t.has(e)}},function(t,e,n){var r=n(20),o=n(237),i=n(44),u=n(78),c=n(238),a=n(239),s=r?r.prototype:void 0,f=s?s.valueOf:void 0;t.exports=function(t,e,n,r,s,l,p){switch(n){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!l(new o(t),new o(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return i(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var d=c;case"[object Set]":var h=1&r;if(d||(d=a),t.size!=e.size&&!h)return!1;var v=p.get(t);if(v)return v==e;r|=2,p.set(t,e);var y=u(d(t),d(e),r,s,l,p);return p.delete(t),y;case"[object Symbol]":if(f)return f.call(t)==f.call(e)}return!1}},function(t,e,n){var r=n(4).Uint8Array;t.exports=r},function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}},function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}},function(t,e,n){var r=n(241),o=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,i,u,c){var a=1&n,s=r(t),f=s.length;if(f!=r(e).length&&!a)return!1;for(var l=f;l--;){var p=s[l];if(!(a?p in e:o.call(e,p)))return!1}var d=c.get(t),h=c.get(e);if(d&&h)return d==e&&h==t;var v=!0;c.set(t,e),c.set(e,t);for(var y=a;++l<f;){var g=t[p=s[l]],m=e[p];if(i)var b=a?i(m,g,p,e,t,c):i(g,m,p,t,e,c);if(!(void 0===b?g===m||u(g,m,n,i,c):b)){v=!1;break}y||(y="constructor"==p)}if(v&&!y){var x=t.constructor,_=e.constructor;x==_||!("constructor"in t)||!("constructor"in e)||"function"==typeof x&&x instanceof x&&"function"==typeof _&&_ instanceof _||(v=!1)}return c.delete(t),c.delete(e),v}},function(t,e,n){var r=n(242),o=n(244),i=n(39);t.exports=function(t){return r(t,i,o)}},function(t,e,n){var r=n(243),o=n(2);t.exports=function(t,e,n){var i=e(t);return o(t)?i:r(i,n(t))}},function(t,e){t.exports=function(t,e){for(var n=-1,r=e.length,o=t.length;++n<r;)t[o+n]=e[n];return t}},function(t,e,n){var r=n(69),o=n(245),i=Object.prototype.propertyIsEnumerable,u=Object.getOwnPropertySymbols,c=u?function(t){return null==t?[]:(t=Object(t),r(u(t),(function(e){return i.call(t,e)})))}:o;t.exports=c},function(t,e){t.exports=function(){return[]}},function(t,e,n){var r=n(7)(n(4),"DataView");t.exports=r},function(t,e,n){var r=n(7)(n(4),"Promise");t.exports=r},function(t,e,n){var r=n(7)(n(4),"Set");t.exports=r},function(t,e,n){var r=n(81),o=n(39);t.exports=function(t){for(var e=o(t),n=e.length;n--;){var i=e[n],u=t[i];e[n]=[i,u,r(u)]}return e}},function(t,e,n){var r=n(77),o=n(251),i=n(257),u=n(47),c=n(81),a=n(82),s=n(28);t.exports=function(t,e){return u(t)&&c(e)?a(s(t),e):function(n){var u=o(n,t);return void 0===u&&u===e?i(n,t):r(e,u,3)}}},function(t,e,n){var r=n(83);t.exports=function(t,e,n){var o=null==t?void 0:r(t,e);return void 0===o?n:o}},function(t,e,n){var r=n(253),o=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,i=/\\(\\)?/g,u=r((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(o,(function(t,n,r,o){e.push(r?o.replace(i,"$1"):n||t)})),e}));t.exports=u},function(t,e,n){var r=n(254);t.exports=function(t){var e=r(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}},function(t,e,n){var r=n(46);function o(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function(){var r=arguments,o=e?e.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var u=t.apply(this,r);return n.cache=i.set(o,u)||i,u};return n.cache=new(o.Cache||r),n}o.Cache=r,t.exports=o},function(t,e,n){var r=n(20),o=n(256),i=n(2),u=n(27),c=r?r.prototype:void 0,a=c?c.toString:void 0;t.exports=function t(e){if("string"==typeof e)return e;if(i(e))return o(e,t)+"";if(u(e))return a?a.call(e):"";var n=e+"";return"0"==n&&1/e==-1/0?"-0":n}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,o=Array(r);++n<r;)o[n]=e(t[n],n,t);return o}},function(t,e,n){var r=n(258),o=n(259);t.exports=function(t,e){return null!=t&&o(t,e,r)}},function(t,e){t.exports=function(t,e){return null!=t&&e in Object(t)}},function(t,e,n){var r=n(84),o=n(40),i=n(2),u=n(21),c=n(43),a=n(28);t.exports=function(t,e,n){for(var s=-1,f=(e=r(e,t)).length,l=!1;++s<f;){var p=a(e[s]);if(!(l=null!=t&&n(t,p)))break;t=t[p]}return l||++s!=f?l:!!(f=null==t?0:t.length)&&c(f)&&u(p,f)&&(i(t)||o(t))}},function(t,e,n){var r=n(261),o=n(262),i=n(47),u=n(28);t.exports=function(t){return i(t)?r(u(t)):o(t)}},function(t,e){t.exports=function(t){return function(e){return null==e?void 0:e[t]}}},function(t,e,n){var r=n(83);t.exports=function(t){return function(e){return r(e,t)}}},function(t,e){t.exports=function(t,e,n,r){for(var o=t.length,i=n+(r?1:-1);r?i--:++i<o;)if(e(t[i],i,t))return i;return-1}},function(t,e){t.exports=function(t){return t!=t}},function(t,e){t.exports=function(t,e,n){for(var r=n-1,o=t.length;++r<o;)if(t[r]===e)return r;return-1}},function(t,e,n){var r=n(267),o=n(3),i=n(27),u=/^[-+]0x[0-9a-f]+$/i,c=/^0b[01]+$/i,a=/^0o[0-7]+$/i,s=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(i(t))return NaN;if(o(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=o(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=r(t);var n=c.test(t);return n||a.test(t)?s(t.slice(2),n?2:8):u.test(t)?NaN:+t}},function(t,e,n){var r=n(268),o=/^\s+/;t.exports=function(t){return t?t.slice(0,r(t)+1).replace(o,""):t}},function(t,e){var n=/\s/;t.exports=function(t){for(var e=t.length;e--&&n.test(t.charAt(e)););return e}},function(t,e,n){var r=n(30),o=n(4);t.exports=function(t,e,n){var i=1&e,u=r(t);return function e(){var r=this&&this!==o&&this instanceof e?u:t;return r.apply(i?n:this,arguments)}}},function(t,e,n){var r=n(49),o=n(30),i=n(92),u=n(95),c=n(52),a=n(31),s=n(4);t.exports=function(t,e,n){var f=o(t);return function o(){for(var l=arguments.length,p=Array(l),d=l,h=c(o);d--;)p[d]=arguments[d];var v=l<3&&p[0]!==h&&p[l-1]!==h?[]:a(p,h);if((l-=v.length)<n)return u(t,e,i,o.placeholder,void 0,p,v,void 0,void 0,n-l);var y=this&&this!==s&&this instanceof o?f:t;return r(y,this,p)}}},function(t,e){t.exports=function(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}},function(t,e,n){var r=n(50),o=n(96),i=n(274),u=n(276);t.exports=function(t){var e=i(t),n=u[e];if("function"!=typeof n||!(e in r.prototype))return!1;if(t===n)return!0;var c=o(n);return!!c&&t===c[0]}},function(t,e){t.exports=function(){}},function(t,e,n){var r=n(275),o=Object.prototype.hasOwnProperty;t.exports=function(t){for(var e=t.name+"",n=r[e],i=o.call(r,e)?n.length:0;i--;){var u=n[i],c=u.func;if(null==c||c==t)return u.name}return e}},function(t,e){t.exports={}},function(t,e,n){var r=n(50),o=n(97),i=n(51),u=n(2),c=n(6),a=n(277),s=Object.prototype.hasOwnProperty;function f(t){if(c(t)&&!u(t)&&!(t instanceof r)){if(t instanceof o)return t;if(s.call(t,"__wrapped__"))return a(t)}return new o(t)}f.prototype=i.prototype,f.prototype.constructor=f,t.exports=f},function(t,e,n){var r=n(50),o=n(97),i=n(98);t.exports=function(t){if(t instanceof r)return t.clone();var e=new o(t.__wrapped__,t.__chain__);return e.__actions__=i(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}},function(t,e){var n=/\{\n\/\* \[wrapped with (.+)\] \*/,r=/,? & /;t.exports=function(t){var e=t.match(n);return e?e[1].split(r):[]}},function(t,e){var n=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;t.exports=function(t,e){var r=e.length;if(!r)return t;var o=r-1;return e[o]=(r>1?"& ":"")+e[o],e=e.join(r>2?", ":" "),t.replace(n,"{\n/* [wrapped with "+e+"] */\n")}},function(t,e,n){var r=n(281),o=n(282),i=n(29),u=o?function(t,e){return o(t,"toString",{configurable:!0,enumerable:!1,value:r(e),writable:!0})}:i;t.exports=u},function(t,e){t.exports=function(t){return function(){return t}}},function(t,e,n){var r=n(7),o=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=o},function(t,e,n){var r=n(284),o=n(285),i=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]];t.exports=function(t,e){return r(i,(function(n){var r="_."+n[0];e&n[1]&&!o(t,r)&&t.push(r)})),t.sort()}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}},function(t,e,n){var r=n(86);t.exports=function(t,e){return!!(null==t?0:t.length)&&r(t,e,0)>-1}},function(t,e,n){var r=n(98),o=n(21),i=Math.min;t.exports=function(t,e){for(var n=t.length,u=i(e.length,n),c=r(t);u--;){var a=e[u];t[u]=o(a,n)?c[a]:void 0}return t}},function(t,e,n){var r=n(49),o=n(30),i=n(4);t.exports=function(t,e,n,u){var c=1&e,a=o(t);return function e(){for(var o=-1,s=arguments.length,f=-1,l=u.length,p=Array(l+s),d=this&&this!==i&&this instanceof e?a:t;++f<l;)p[f]=u[f];for(;s--;)p[f++]=arguments[++o];return r(d,c?n:this,p)}}},function(t,e,n){var r=n(93),o=n(94),i=n(31),u=Math.min;t.exports=function(t,e){var n=t[1],c=e[1],a=n|c,s=a<131,f=128==c&&8==n||128==c&&256==n&&t[7].length<=e[8]||384==c&&e[7].length<=e[8]&&8==n;if(!s&&!f)return t;1&c&&(t[2]=e[2],a|=1&n?0:4);var l=e[3];if(l){var p=t[3];t[3]=p?r(p,l,e[4]):l,t[4]=p?i(t[3],"__lodash_placeholder__"):e[4]}return(l=e[5])&&(p=t[5],t[5]=p?o(p,l,e[6]):l,t[6]=p?i(t[5],"__lodash_placeholder__"):e[6]),(l=e[7])&&(t[7]=l),128&c&&(t[8]=null==t[8]?e[8]:u(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=a,t}},function(t,e,n){var r=n(29),o=n(290),i=n(102);t.exports=function(t,e){return i(o(t,e,r),t+"")}},function(t,e,n){var r=n(49),o=Math.max;t.exports=function(t,e,n){return e=o(void 0===e?t.length-1:e,0),function(){for(var i=arguments,u=-1,c=o(i.length-e,0),a=Array(c);++u<c;)a[u]=i[e+u];u=-1;for(var s=Array(e+1);++u<e;)s[u]=i[u];return s[e]=n(a),r(t,this,s)}}},function(t,e,n){var r=n(292),o=n(103),i=n(294),u=n(85);t.exports=function(t){return function(e){e=u(e);var n=o(e)?i(e):void 0,c=n?n[0]:e.charAt(0),a=n?r(n,1).join(""):e.slice(1);return c[t]()+a}}},function(t,e,n){var r=n(293);t.exports=function(t,e,n){var o=t.length;return n=void 0===n?o:n,!e&&n>=o?t:r(t,e,n)}},function(t,e){t.exports=function(t,e,n){var r=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(n=n>o?o:n)<0&&(n+=o),o=e>n?0:n-e>>>0,e>>>=0;for(var i=Array(o);++r<o;)i[r]=t[r+e];return i}},function(t,e,n){var r=n(295),o=n(103),i=n(296);t.exports=function(t){return o(t)?i(t):r(t)}},function(t,e){t.exports=function(t){return t.split("")}},function(t,e){var n="[\\ud800-\\udfff]",r="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",o="\\ud83c[\\udffb-\\udfff]",i="[^\\ud800-\\udfff]",u="(?:\\ud83c[\\udde6-\\uddff]){2}",c="[\\ud800-\\udbff][\\udc00-\\udfff]",a="(?:"+r+"|"+o+")"+"?",s="[\\ufe0e\\ufe0f]?"+a+("(?:\\u200d(?:"+[i,u,c].join("|")+")[\\ufe0e\\ufe0f]?"+a+")*"),f="(?:"+[i+r+"?",r,u,c,n].join("|")+")",l=RegExp(o+"(?="+o+")|"+f+s,"g");t.exports=function(t){return t.match(l)||[]}},function(t,e,n){var r=n(32);t.exports=function(t,e){if("string"!=typeof t||"string"!=typeof e)return!1;var n=r[e];if(!n)return!1;const o=t.replace(/[\s-]/g,"");return n.filter((function(t){return!t.regex.test(o)})).map((function(t){return t.description})).length<n.length}},function(t,e,n){var r=n(32);t.exports=function(t,e){if("string"!=typeof t||"string"!=typeof e)return{valid:!1,reasons:["License and State must be Strings"]};var n=r[e];if(!n)return{valid:!1,reasons:["Not a valid US State"]};const o=t.replace(/[\s-]/g,"");var i=n.filter((function(t){return!t.regex.test(o)})).map((function(t){return t.description}));return{valid:i.length<n.length,reasons:i}}},function(t,e,n){var r=n(32);t.exports=Object.keys(r)},function(t,e,n){var r=n(301),o=n(302),i=n(88);t.exports=function(t){return function(e,n,u){return u&&"number"!=typeof u&&o(e,n,u)&&(n=u=void 0),e=i(e),void 0===n?(n=e,e=0):n=i(n),u=void 0===u?e<n?1:-1:i(u),r(e,n,u,t)}}},function(t,e){var n=Math.ceil,r=Math.max;t.exports=function(t,e,o,i){for(var u=-1,c=r(n((e-t)/(o||1)),0),a=Array(c);c--;)a[i?c:++u]=t,t+=o;return a}},function(t,e,n){var r=n(44),o=n(22),i=n(21),u=n(3);t.exports=function(t,e,n){if(!u(n))return!1;var c=typeof e;return!!("number"==c?o(n)&&i(e,n.length):"string"==c&&e in n)&&r(n[e],t)}},function(t,e,n){"use strict";n.r(e),n.d(e,"BaseAPI",(function(){return f})),n.d(e,"colors",(function(){return r})),n.d(e,"formatDate",(function(){return W})),n.d(e,"formatEmail",(function(){return q})),n.d(e,"formatName",(function(){return H})),n.d(e,"formatPhone",(function(){return V})),n.d(e,"formatSSN",(function(){return X})),n.d(e,"formatZipcode",(function(){return K})),n.d(e,"getRejectMessage",(function(){return G})),n.d(e,"getStatus",(function(){return J})),n.d(e,"isDate",(function(){return Q})),n.d(e,"isObject",(function(){return tt})),n.d(e,"isUrl",(function(){return et})),n.d(e,"maskName",(function(){return ot})),n.d(e,"objectToQuery",(function(){return it})),n.d(e,"prettifyDate",(function(){return st})),n.d(e,"toRelativeDate",(function(){return ee})),n.d(e,"toRelativeFromISO",(function(){return te})),n.d(e,"toBoolean",(function(){return Yt})),n.d(e,"Setter",(function(){return Wt})),n.d(e,"renderDetailValue",(function(){return Ot})),n.d(e,"validators",(function(){return i})),n.d(e,"legalReplace",(function(){return rt})),n.d(e,"parsePythonDate",(function(){return B})),n.d(e,"parseQuery",(function(){return ut})),n.d(e,"pickColor",(function(){return ct})),n.d(e,"pickScoreColor",(function(){return at})),n.d(e,"selectMasterKey",(function(){return At})),n.d(e,"storageMock",(function(){return qt})),n.d(e,"toSentenceCase",(function(){return oe})),n.d(e,"toTitleCase",(function(){return ie})),n.d(e,"translateStatus",(function(){return Ee})),n.d(e,"availableStatuses",(function(){return o})),n.d(e,"validateDriversLicense",(function(){return Te})),n.d(e,"currentStates",(function(){return Le})),n.d(e,"validate_ssn",(function(){return ke})),n.d(e,"invalidFirstThree",(function(){return Ie})),n.d(e,"valueExists",(function(){return _t}));var r={};n.r(r),n.d(r,"primary",(function(){return l})),n.d(r,"secondary",(function(){return p})),n.d(r,"emerald",(function(){return d})),n.d(r,"tartOrange",(function(){return h})),n.d(r,"yellowOrange",(function(){return v})),n.d(r,"slateGray",(function(){return y})),n.d(r,"cadetBlue",(function(){return g})),n.d(r,"periwinkle",(function(){return m})),n.d(r,"aliceBlue",(function(){return b})),n.d(r,"smokeWhite",(function(){return x})),n.d(r,"alert0",(function(){return _})),n.d(r,"alert1",(function(){return w})),n.d(r,"alert2",(function(){return N})),n.d(r,"alert3",(function(){return O})),n.d(r,"ceruleanBlue",(function(){return A})),n.d(r,"peach",(function(){return $})),n.d(r,"babyPink",(function(){return j})),n.d(r,"spanishPink",(function(){return R})),n.d(r,"beauBlue",(function(){return E})),n.d(r,"cultured",(function(){return S})),n.d(r,"blueBell",(function(){return L})),n.d(r,"babyBlueEyes",(function(){return T})),n.d(r,"powderBlue",(function(){return M})),n.d(r,"honeyDew",(function(){return C})),n.d(r,"buff",(function(){return D})),n.d(r,"black",(function(){return I})),n.d(r,"white",(function(){return k})),n.d(r,"noticeMuted",(function(){return P})),n.d(r,"noticeError",(function(){return U})),n.d(r,"noticeWarning",(function(){return Z})),n.d(r,"noticeSuccess",(function(){return F})),n.d(r,"noticeInfo",(function(){return z}));var o={};n.r(o),n.d(o,"INITIATED",(function(){return ue})),n.d(o,"PENDING",(function(){return ce})),n.d(o,"WITHDRAWN",(function(){return ae})),n.d(o,"APPROVED",(function(){return se})),n.d(o,"REJECTED",(function(){return fe})),n.d(o,"CONSENT",(function(){return le})),n.d(o,"EMAILED",(function(){return pe})),n.d(o,"REVIEW",(function(){return de})),n.d(o,"REVIEWING",(function(){return he})),n.d(o,"CONSIDER",(function(){return ve})),n.d(o,"PROCESSING",(function(){return ye})),n.d(o,"PENDING_DISPUTE",(function(){return ge})),n.d(o,"PENDING_FIRST_NOTICE",(function(){return me})),n.d(o,"PENDING_SECOND_NOTICE",(function(){return be})),n.d(o,"FIRST_NOTICE",(function(){return xe})),n.d(o,"SECOND_NOTICE",(function(){return _e})),n.d(o,"SSN_TRACE_FAILED",(function(){return we})),n.d(o,"MVR_FAILED",(function(){return Ne})),n.d(o,"COMPLIANCE",(function(){return Oe})),n.d(o,"COMPLIANCE_SO",(function(){return Ae})),n.d(o,"VERIFYING",(function(){return $e})),n.d(o,"COMPLIANCEREVIEW",(function(){return je})),n.d(o,"STORED",(function(){return Re})),n.d(o,"default",(function(){return Ee}));var i={};n.r(i),n.d(i,"validateEmail",(function(){return We})),n.d(i,"validatePhone",(function(){return qe})),n.d(i,"isAlphaNumeric",(function(){return He})),n.d(i,"isValidCanadianZipcode",(function(){return Ye})),n.d(i,"validateSSN",(function(){return Ve})),n.d(i,"validateCheck",(function(){return Xe})),n.d(i,"containsAtSymbol",(function(){return Ke})),n.d(i,"containsNumber",(function(){return Ge})),n.d(i,"validateName",(function(){return Je})),n.d(i,"validateAddress",(function(){return Qe})),n.d(i,"validateCustomInput",(function(){return tn})),n.d(i,"validateZipcode",(function(){return en})),n.d(i,"validateCanadianZipcode",(function(){return nn})),n.d(i,"isArray",(function(){return rn})),n.d(i,"validateMVRCheck",(function(){return on})),n.d(i,"validatePhoneVerification",(function(){return un})),n.d(i,"disable_check",(function(){return cn})),n.d(i,"validateEmailId",(function(){return an})),n.d(i,"validateTurnId",(function(){return sn}));var u=n(104),c=n(53);function a(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function s(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var f=function(){function t(e,n){var r=this;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),s(this,"approveWorker",(function(t,e){return r.api.put("/partners/me/workers/".concat(t,"/approve"),e)})),s(this,"withdrawWorker",(function(t,e){return r.api.post("/partners/me/workers/".concat(t,"/withdraw"),e)})),s(this,"rejectWorker",(function(t,e){return r.api.put("/partners/me/workers/".concat(t,"/reject"),e)})),s(this,"getMember",(function(){return r.api.get("/partners/me")})),s(this,"getSettings",(function(){return r.api.get("/partners/settings")})),s(this,"getWorkers",(function(t){return r.api.get("/partners/me/workers?query=".concat(JSON.stringify(t)))})),s(this,"getPendingWorkers",(function(t){return r.api.get("/cohort/candidates?query=".concat(JSON.stringify(t)))})),s(this,"getWorker",(function(t){return r.api.get("/partners/me/workers/".concat(t,"?full=false"))})),s(this,"checkWorker",(function(t){return r.api.post("/partners/workers",t)})),s(this,"validatePhone",(function(t){return r.api.get("PhoneNumbers/".concat(t,"?Type=carrier&CountryCode=US"),null,{headers:{Authorization:"Basic ".concat(Object(c.btoa)(TWILIO_KEY))}})})),s(this,"validateEmail",(function(t){return r.api.get("/verify_email?email=".concat(encodeURIComponent(t)))})),s(this,"validateSSN",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t,"/validate"),{ssn:e})})),s(this,"validateCandidateEmail",(function(t,e){return r.api.get("/candidate_verify_email/".concat(t,"?email=").concat(encodeURIComponent(e)))})),s(this,"getCandidateData",(function(t){return r.api.get("/candidate_consent_email/candidate/".concat(t))})),s(this,"getInterests",(function(){return r.api.get("/interests")})),s(this,"getTransports",(function(){return r.api.get("/transports")})),s(this,"getPaymetMethod",(function(){return r.api.get("/payment_settings/partner_methods")})),s(this,"getBackgroundReport",(function(t,e){return r.api.get("/candidate_consent_email/candidate/".concat(t,"/report?token=").concat(e))})),s(this,"provideCandidateConsent",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t),e)})),s(this,"provideCandidateConsentAsync",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t,"/async"),e)})),s(this,"getTrialStatus",(function(){return r.api.get("/organizations/trial_status")})),s(this,"newCandidate",(function(){return r.api.get("/organizations/new_candidate")})),s(this,"getTerms",(function(){return r.api.get("/partners/terms")})),s(this,"consent",(function(t){return r.api.post("/partners/me/consent",t)})),s(this,"apply",(function(t){var e=t.partner_name,n=t.partner_id;return r.api.post("/candidate_consent_email/".concat(e,"/").concat(n),{})})),s(this,"assent",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t,"/assent"),e)})),s(this,"getCohortCount",(function(t){return r.api.get("/cohort/count?query=".concat(JSON.stringify(t)))})),s(this,"createCohort",(function(t){return r.api.post("/cohort",t)})),s(this,"requestCohortWorkers",(function(t,e){return r.api.post("/cohort/".concat(t,"/request"),e)})),s(this,"getNotes",(function(t){return r.api.get("partners/me/workers/".concat(t,"/notes"))})),s(this,"saveNote",(function(t,e){return r.api.put("partners/me/workers/".concat(t,"/notes"),e)})),s(this,"resendEmail",(function(t){return r.api.post("partners/me/workers/".concat(t,"/email/consent/resend"))})),s(this,"postSettings",(function(t,e){return r.api.post(t,e)})),s(this,"btoaTest",(function(t){return Object(c.btoa)(t)})),e&&(this.api=Object(u.create)({baseURL:e,headers:{Accept:"application/json"}})),n&&(this.twilioKey=n)}var e,n,r;return e=t,(n=[{key:"setToken",value:function(t){return t?(this.api.setHeaders({Authorization:"Bearer ".concat(t)}),this):this}},{key:"setStatusPreference",value:function(t){return t?(this.api.setHeaders({Prefer:"status=".concat(t)}),this):this}}])&&a(e.prototype,n),r&&a(e,r),Object.defineProperty(e,"prototype",{writable:!1}),t}(),l="#2D3047",p="#00D9CD",d="#0ed067",h="#fb4d49",v="#faa73c",y="#5f7d95",g="#9bb1c8",m="#bfcddd",b="#e1e8f3",x="#f7f9fc",_=y,w=d,N=h,O=v,A="#4357ad",$="#f9cb9c",j="#f4cccc",R="#e6b8af",E="#cfe2f3",S="#e3e9ed",L="#b4a7d6",T="#9fc5e8",M="#b7ecec",C="#d9ead3",D="#ffe599",I="#000",k="#fff",P=y,U="#ff6c69",Z="#faa03c",F="#13c063",z=y,B=function(t){if(!isNaN(parseInt(t,10))){var e=new Date(1e3*t),n=e.getTime();if(n){var r=new Date(n+60*e.getTimezoneOffset()*1e3),o=e.getTimezoneOffset()/60,i=e.getHours();return r.setHours(i-o),r}}return null},W=function(t){var e=B(t);return e?"".concat(e.getMonth()+1,"/").concat(e.getDate(),"/").concat(e.getFullYear()):"N/A"},q=function(t){return"string"!=typeof t?"":t.replace(/\s+/g,"")},H=function(t){return"string"!=typeof t?"":t.replace(/\s\s+/g," ")},Y=function(t){var e=t.phone,n=t.encrypted,r=t.areaCode,o=n?"(".concat(e[0],") ").concat(e[1]," ").concat(e[2]).concat(e[3]):"(".concat(e[0],") ").concat(e[1],"-").concat(e[2]).concat(e[3]);return o=r?"".concat(r," ").concat(o):o},V=function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if("string"!=typeof t)return"N/A";var n,r=e?t:t.replace(/\D/g,"").substring(0,11);return r.length<10?r:(r.length>10&&(n=r[0],r=r.substring(1,11)),r=r.match(/.{1,3}/g),Y({phone:r,encrypted:e,areaCode:n}))},X=function(t){if("string"!=typeof t)return"N/A";var e=t.replace(/\D/g,"").substring(0,9);return e.length<9?e:"".concat(e.substring(0,3),"-").concat(e.substring(3,5),"-").concat(e.substring(5,9))},K=function(t){return"string"!=typeof t?"":t.replace(/\D/g,"").substring(0,5)},G=function(t){if(!["RISK_MANAGEMENT","FCRA_E","FCRA_N","FCRA"].includes(t))return"Reject";return{RISK_MANAGEMENT:"Reject",FCRA:"Pre-Adverse Action",FCRA_E:"Pre-Adverse Action",FCRA_N:"Adverse Action"}[t]},J=function(t){return{review:"reviewing",pending:"consider",review__identity:"verifying",review__mvr:"Compliance Review",review__so:"Compliance Review",review__qa:"Compliance Review",initiated:"Stored"}[t]||t},Q=function(t){if(isNaN(parseInt(t,10)))return!1;var e=new Date(1e3*t);return!(e>new Date)&&e.getYear()>100},tt=function(t){return!!t&&t.constructor===Object},et=function(t){return/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(t)},nt=["Turn Technologies Inc.","[COMPANY]"],rt=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if("string"!=typeof t)return"";for(var n=t,r=0;r<nt.length;r++)n=n.replace(nt[r],e);return n},ot=function(t){return"string"==typeof t&&t.length>0?"".concat(t.slice(0,1),"."):t},it=function(t){if(!tt(t))return null;var e=Object.keys(t);if(0===e.length)return null;var n=e.map((function(e){return"".concat(e,"=").concat(t[e])}));return"?".concat(n.join("&"))},ut=function(t){if("string"!=typeof t)return t;var e=new URLSearchParams(t.startsWith("?")?t.slice(1):t),n={};return e.forEach((function(t,e){n[e]=t})),n},ct=function(t){switch("string"==typeof t?t.toLowerCase():t){case"first_notice":case"second_notice":case"pending":case"consider":return Z;case"unverified":case"not_verified":case"fraud":case"not_matched":case"rejected":case"deceased":case"withdrawn":return U;case"verified":case"matched":case"valid":case"ready":case"complete":case"clear":case"fulfilled":case"randomized":case"approved":return F;case"processing":case"reviewing":case"review":case"consent":case"emailed":case"initiated":case"attention":case"verifying":case"review__mvr":case"review__qa":return z;case"none":default:return"gray"}},at=function(t){var e=parseInt(t,10);return e>89?F:e>69?Z:U},st=function(t){var e=new Date(t),n=e.toUTCString().slice(8,11),r=e.toUTCString().slice(5,7),o=e.toUTCString().slice(12,16);return"".concat(n," ").concat(r,", ").concat(o)},ft=n(105),lt=n.n(ft),pt=n(3),dt=n.n(pt),ht=n(2),vt=n.n(ht),yt=n(106),gt=n.n(yt),mt=n(107),bt=n.n(mt),xt=["None","none","N/A"],_t=function(t){return!!t&&(vt()(t)||dt()(t)?!bt()(t):!(gt()(xt,t)>-1))},wt=function t(e){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return vt()(e)?n?e.map((function(e){return dt()(e)?Nt(e,n):t(e,n)})):e.join(" / "):dt()(e)?Nt(e,n):e},Nt=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=lt()(t,(function(t){return _t(t)}));return n.map((function(t){return wt(t,e)})).join(" / ")},Ot=wt,At=function(t,e){if(!Array.isArray(t)||0===t.length)return"";var n,r=t[0];_t(r[e])?n=e:n=Object.keys(r).find((function(t){return _t(r[t])}));return n},$t=n(11),jt=n.n($t),Rt=n(54),Et=n.n(Rt);function St(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function Lt(t,e,n){return e&&St(t.prototype,e),n&&St(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}function Tt(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Mt(t){return(Mt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Ct=function(t,e,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:r;Mt(o)===t&&(e[n]=o)},Dt=function(t,e,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:r,i=Array.isArray(n)?n:t[n];i.includes(o)&&(t[e]=o)},It=jt()((function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;return Et()(Ct,t,e,n,r)})),kt=jt()((function(t,e){return function(){"boolean"==typeof t[e]&&(t[e]=!t[e])}})),Pt=It("string"),Ut=It("number"),Zt=It("boolean"),Ft=jt()((function(t,e,n){n&&(t[e]=n)})),zt=jt()((function(t,e,n){n&&(t[e]=!n)})),Bt=jt()((function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;return Et()(Dt,t,e,n,r)})),Wt=Lt((function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),Tt(this,"setStringFactory",Pt(this)),Tt(this,"setNumberFactory",Ut(this)),Tt(this,"setBoolFactory",Zt(this)),Tt(this,"setTruthyFactory",Ft(this)),Tt(this,"setFalsyFactory",zt(this)),Tt(this,"setOptionFactory",Bt(this)),Tt(this,"toggleBoolFactory",kt(this))}));var qt=function(){var t={};return{setItem:function(e,n){t[e]=n||""},getItem:function(e){return e in t?t[e]:null},removeItem:function(e){delete t[e]},get length(){return Object.keys(t).length},key:function(e){return Object.keys(t)[e]||null}}};function Ht(t){return(Ht="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Yt=function(t){switch(Ht(t)){case"boolean":return t;case"string":return"true"===t.toLowerCase();case"number":return t>0;case"undefined":return!1;case"object":return!!t&&(Array.isArray(t)?t.length>0:!(0===Object.getOwnPropertyNames(t).length));default:return!1}},Vt=n(8),Xt=n.n(Vt),Kt=n(108),Gt=n.n(Kt),Jt=n(109),Qt=n.n(Jt);Xt.a.extend(Gt.a),Xt.a.extend(Qt.a);var te=function(t){if("string"!=typeof t)return"N/A";var e=Xt()(t);if(!e.isValid())return"N/A";var n=Xt()().utcOffset(e.utcOffset());return n.diff(e,"day")<8?e.from(n):e.format("M/DD/YYYY")},ee=function(t){if("number"!=typeof t)return"N/A";var e=B(t);if(!e)return"N/A";var n=Xt()(e),r=Xt()().utcOffset(e.getTimezoneOffset()).subtract(e.getTimezoneOffset()/60,"hour");return r.diff(n,"day")<8?n.from(r):n.format("M/DD/YYYY")},ne=n(110),re=n.n(ne),oe=function(t){var e=t.toLowerCase();return[". ","! ","? "].forEach((function(t){e=e.split(t).map(re.a).join(t)})),e},ie=function(t){return("string"==typeof t?t:String(t)).toLowerCase().split(" ").map((function(t){var e=t.charAt(0).toUpperCase(),n=t.slice(1);return"".concat(e).concat(n)})).join(" ")},ue="initiated",ce="pending",ae="withdrawn",se="approved",fe="rejected",le="consent",pe="emailed",de="review",he="reviewing",ve="consider",ye="processing",ge="pending__dispute",me="pending__first_notice",be="pending__second_notice",xe="first_notice",_e="second_notice",we="review__identity",Ne="review__mvr",Oe="review__qa",Ae="review__so",$e="verifying",je="Compliance Review",Re="Stored",Ee=function(t,e){switch(t){case se:return se;case ce:case ge:return ce;case fe:return fe;case me:return e?xe:fe;case be:return e?_e:fe;case le:return le;case ye:return ye;case pe:return pe;case de:return de;case he:return he;case ae:return ae;case ue:return Re;case we:return $e;case Ne:case Oe:case Ae:return je;default:return ce}},Se=n(55),Le=Object.keys(Se.driversLicenseRegex),Te=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"string"!=typeof t||"string"!=typeof e?{valid:!1,reasons:"License and State must be Strings"}:Le.includes(e)?Object(Se.validateUSDriversLicense)(t,e):{valid:!0,reasons:""}},Me=n(111),Ce=/^(986|(?!000|666|123456789|(\d)\2{8})[0-8][0-9]{2})(?!00)[0-9]{2}(?!0000)[0-9]{4}$/,De=/^078051120|219099999$/,Ie=n.n(Me)()(900,1e3).map((function(t){return"".concat(t)})).concat(["000","666"]),ke=function(t){if("string"!=typeof t)return!1;var e=t.replace(/\D/g,"");return!De.test(e)&&Ce.test(e)},Pe=n(12),Ue=n.n(Pe);function Ze(t){return function(t){if(Array.isArray(t))return Fe(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"==typeof t)return Fe(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Fe(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Fe(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function ze(t){return(ze="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Be=function(t){return Array.isArray(t)||!(!t||"object"!==ze(t)||"number"!=typeof t.length||"function"!=typeof t.slice)},We=function(t){if(!t)return!1;return/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/.test(t)},qe=function(t){if(!t)return!1;return/^1?\s?\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/.test(t)},He=function(t){return null!==t.match(/^([a-z0-9])+/i)},Ye=function(t){return null!==t.match(/^[A-Za-z]\d[A-Za-z]$/)||null!==t.match(/^[A-Za-z]\d[A-Za-z][ -]?\d[A-Za-z]\d/)},Ve=function(t){return"string"==typeof t&&9===t.replace(/\D/g,"").length},Xe=function(t){var e="clear"===t?[]:t;return Be(e)?Ze(e):null},Ke=function(t){return/@/.test(t)},Ge=function(t){return/\d/.test(t)},Je=function(t){return 0!==t.trim().length&&!Ke(t)&&!Ge(t)},Qe=function(t){return 0!==t.trim().length&&!Ke(t)},tn=function(t){return!!Ue()(t)&&0!==t.trim().length},en=function(t){return Ue()(t)&&t.length>=5},nn=function(t){return Ue()(t)&&He(t)&&Ye(t)},rn=function(t){return Be(t)},on=function(t){return dt()(t)||"string"==typeof t?t:{}},un=function(t){switch(t){case"verified":case"True":return"verified";case"unverified":case"False":return"unverified";default:return""}},cn=function(t){return"string"==typeof t&&"true"===t.toLowerCase()},an=function(t){return Ue()(t)&&32===t.length},sn=function(t){return Ue()(t)&&/^C{1}[0-9]{10}$/.test(t)}}])}));
9
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90dXJuLXNoYXJlZC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19jdXJyeTIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19jdXJyeTEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9kYXlqcy9kYXlqcy5taW4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19hcml0eS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2N1cnJ5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N0cmluZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2hhcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2N1cnJ5My5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvY3VycnlOLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9faXNQbGFjZWhvbGRlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX3JlZHVjZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL21hcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N5bWJvbC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSW5kZXguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTGlzdENhY2hlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTeW1ib2wuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVDdG9yLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcmVwbGFjZUhvbGRlcnMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvQHR1cm5haS92YWxpZGF0ZS11cy1kcml2ZXJzLWxpY2Vuc2Uvc3JjL2xpY2Vuc2UtcmVnZXguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMva2V5cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvcmVkdWNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9fY2hlY2tGb3JNZXRob2QuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xhenlXcmFwcGVyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUxvZGFzaC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEhvbGRlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9CYXNlNjQvYmFzZTY0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9wYXJ0aWFsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL0B0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvZXF1YWxzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9faXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19jb25jYXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19pc1N0cmluZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvcHJvcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvYWx3YXlzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvbWF4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9jcmVhdGVFcnJvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlGaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLyh3ZWJwYWNrKS9idWlsZGluL21vZHVsZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TdGFjay5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzRXF1YWwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEFycmF5cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFRhZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1dlYWtNYXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1N0cmljdENvbXBhcmFibGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0UGF0aC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSW5kZXhPZi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9JbnRlZ2VyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b0Zpbml0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZVdyYXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlU2V0RGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21ldGFNYXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVIeWJyaWQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb21wb3NlQXJncy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvbXBvc2VBcmdzUmlnaHQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVSZWN1cnJ5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0RGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xvZGFzaFdyYXBwZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXREYXRhLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2hvcnRPdXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRXcmFwVG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc1VuaWNvZGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXBpc2F1Y2UvZGlzdC9hcGlzYXVjZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmlsdGVyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pbmRleE9mLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0VtcHR5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2RheWpzL3BsdWdpbi9yZWxhdGl2ZVRpbWUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL3V0Yy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdXBwZXJGaXJzdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvcmFuZ2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9zZXRpbW1lZGlhdGUvc2V0SW1tZWRpYXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9fXy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvY29udGFpbnMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19jb250YWlucy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2luZGV4T2YuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19lcXVhbHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19hcnJheUZyb21JdGVyYXRvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2Z1bmN0aW9uTmFtZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaWRlbnRpY2FsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy90eXBlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9wYXJ0aWFsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9fY3JlYXRlUGFydGlhbEFwcGxpY2F0b3IuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL3BpcGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19waXBlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9feHdyYXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2JpbmQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2lzQXJyYXlMaWtlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy90YWlsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9zbGljZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvZm9yRWFjaC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvZGlzc29jLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9tZXJnZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2Fzc2lnbi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX29iamVjdEFzc2lnbi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaWZFbHNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9fY3VycnlOLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9wcm9wU2F0aXNmaWVzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9wcm9wSXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2hhcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvY29tcGxlbWVudC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvbGlmdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvbGlmdE4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2FwLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9fZGlzcGF0Y2hhYmxlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9faXNUcmFuc2Zvcm1lci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX21hcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX3htYXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL194ZkJhc2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL25vdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaXNFbXB0eS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvZW1wdHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19pc09iamVjdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvYW55UGFzcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvcGx1Y2suanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2d0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvY3VycnkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL1QuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2lkZW50aXR5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9faWRlbnRpdHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2lzTmlsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9jb25kLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9heGlvcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9pcy1idWZmZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZW5oYW5jZUVycm9yLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnRvYS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLyh3ZWJwYWNrKS9idWlsZGluL2FtZC1vcHRpb25zLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbHRlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VFYWNoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZvck93bi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3IuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCYXNlRm9yLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlMaWtlS2V5cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbm9kZVV0aWwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUJhc2VFYWNoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUl0ZXJhdGVlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1hdGNoZXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNNYXRjaC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlRGVsZXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlU2V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrRGVsZXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrU2V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3JlSnNEYXRhLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUNsZWFyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hEZWxldGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoR2V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hTZXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZURlbGV0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5YWJsZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlR2V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVIYXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldENhY2hlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVBZGQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5U29tZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NhY2hlSGFzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxCeVRhZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1VpbnQ4QXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBUb0FycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9BcnJheS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsT2JqZWN0cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0QWxsS2V5cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5UHVzaC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL3N0dWJBcnJheS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hdGNoRGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNYXRjaGVzUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2dldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21lbW9pemVDYXBwZWQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL21lbW9pemUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheU1hcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaGFzSW4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSGFzSW4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNQYXRoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQcm9wZXJ0eURlZXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmluZEluZGV4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmFOLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaWN0SW5kZXhPZi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9OdW1iZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVHJpbS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RyaW1tZWRFbmRJbmRleC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUJpbmQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVDdXJyeS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvdW50SG9sZGVycy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzTGF6aWFibGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL25vb3AuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRGdW5jTmFtZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3JlYWxOYW1lcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvd3JhcHBlckxvZGFzaC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3dyYXBwZXJDbG9uZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFdyYXBEZXRhaWxzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5zZXJ0V3JhcERldGFpbHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlU2V0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL191cGRhdGVXcmFwRGV0YWlscy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RWFjaC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5SW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yZW9yZGVyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlUGFydGlhbC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21lcmdlRGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlclJlc3QuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVDYXNlRmlyc3QuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0U2xpY2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlU2xpY2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb0FycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNjaWlUb0FycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdW5pY29kZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvQHR1cm5haS92YWxpZGF0ZS11cy1kcml2ZXJzLWxpY2Vuc2Uvc3JjL2lzLXZhbGlkLXVzLWxpY2Vuc2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvQHR1cm5haS92YWxpZGF0ZS11cy1kcml2ZXJzLWxpY2Vuc2Uvc3JjL3ZhbGlkYXRlLWRyaXZlcnMtbGljZW5zZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9AdHVybmFpL3ZhbGlkYXRlLXVzLWRyaXZlcnMtbGljZW5zZS9zcmMvc3VwcG9ydGVkLXN0YXRlcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZVJhbmdlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVJhbmdlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJdGVyYXRlZUNhbGwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvc2VydmljZXMvYXBpL2luZGV4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3N0eWxlcy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvcGFyc2UtcHl0aG9uLWRhdGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvZm9ybWF0LWRhdGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvZm9ybWF0LWVtYWlsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2Zvcm1hdC1uYW1lLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2Zvcm1hdC1waG9uZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9mb3JtYXQtc3NuLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2Zvcm1hdC16aXBjb2RlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2dldC1yZWplY3QtbWVzc2FnZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9nZXQtc3RhdHVzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2lzLWRhdGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvaXMtb2JqZWN0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2lzLXVybC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9sZWdhbC1yZXBsYWNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL21hc2stbmFtZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9vYmplY3QtdG8tcXVlcnkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvcGFyc2VRdWVyeS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9waWNrLWNvbG9yLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3BpY2stc2NvcmUtY29sb3IuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvcHJldHRpZnktZGF0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy92YWx1ZS1leGlzdHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvcmVuZGVyLWRldGFpbC12YWx1ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9zZWxlY3QtbWFzdGVyLWtleS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9zZXR0ZXJzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3N0b3JhZ2UtbW9jay5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy90by1ib29sZWFuLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3RvLXJlbGF0aXZlLWRhdGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvdG8tc2VudGVuY2UtY2FzZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy90by10aXRsZS1jYXNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3RyYW5zbGF0ZS1zdGF0dXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvdmFsaWRhdGUtZHJpdmVycy1saWNlbnNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3ZhbGlkYXRlLXNzbi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy92YWxpZGF0b3JzLmpzIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsInNlbGYiLCJ0aGlzIiwiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsIl9jdXJyeTEiLCJfaXNQbGFjZWhvbGRlciIsImZuIiwiZjIiLCJhIiwiYiIsImFyZ3VtZW50cyIsImxlbmd0aCIsIl9iIiwiX2EiLCJmMSIsImFwcGx5IiwiaXNBcnJheSIsIkFycmF5IiwidHlwZSIsImZyZWVHbG9iYWwiLCJmcmVlU2VsZiIsIkZ1bmN0aW9uIiwiaXNCdWZmZXIiLCJ0b1N0cmluZyIsInZhbCIsImlzT2JqZWN0IiwiaXNGdW5jdGlvbiIsImZvckVhY2giLCJvYmoiLCJpc0FycmF5QnVmZmVyIiwiaXNGb3JtRGF0YSIsIkZvcm1EYXRhIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImJ1ZmZlciIsImlzU3RyaW5nIiwiaXNOdW1iZXIiLCJpc1VuZGVmaW5lZCIsImlzRGF0ZSIsImlzRmlsZSIsImlzQmxvYiIsImlzU3RyZWFtIiwicGlwZSIsImlzVVJMU2VhcmNoUGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiaXNTdGFuZGFyZEJyb3dzZXJFbnYiLCJuYXZpZ2F0b3IiLCJwcm9kdWN0Iiwid2luZG93IiwiZG9jdW1lbnQiLCJtZXJnZSIsInJlc3VsdCIsImFzc2lnblZhbHVlIiwiZXh0ZW5kIiwidGhpc0FyZyIsInRyaW0iLCJzdHIiLCJyZXBsYWNlIiwiYmFzZUlzTmF0aXZlIiwiZ2V0VmFsdWUiLCJ1bmRlZmluZWQiLCJlIiwidSIsImYiLCJoIiwiJCIsInkiLCJNIiwid2Vla2RheXMiLCJzcGxpdCIsIm1vbnRocyIsIm9yZGluYWwiLCJTdHJpbmciLCJqb2luIiwidiIsInoiLCJ1dGNPZmZzZXQiLCJNYXRoIiwiYWJzIiwiZmxvb3IiLCJkYXRlIiwieWVhciIsIm1vbnRoIiwiY2xvbmUiLCJhZGQiLCJjZWlsIiwidyIsIkQiLCJtcyIsIlEiLCJ0b0xvd2VyQ2FzZSIsImciLCJTIiwiXyIsIk8iLCJhcmdzIiwibG9jYWxlIiwiJEwiLCJ1dGMiLCIkdSIsIngiLCIkeCIsIiRvZmZzZXQiLCJwYXJzZSIsIiRkIiwiRGF0ZSIsIk5hTiIsInRlc3QiLCJtYXRjaCIsInN1YnN0cmluZyIsIlVUQyIsImluaXQiLCIkeSIsImdldEZ1bGxZZWFyIiwiJE0iLCJnZXRNb250aCIsIiREIiwiZ2V0RGF0ZSIsIiRXIiwiZ2V0RGF5IiwiJEgiLCJnZXRIb3VycyIsIiRtIiwiZ2V0TWludXRlcyIsIiRzIiwiZ2V0U2Vjb25kcyIsIiRtcyIsImdldE1pbGxpc2Vjb25kcyIsIiR1dGlscyIsImlzVmFsaWQiLCJpc1NhbWUiLCJzdGFydE9mIiwiZW5kT2YiLCJpc0FmdGVyIiwiaXNCZWZvcmUiLCIkZyIsInNldCIsInVuaXgiLCJ2YWx1ZU9mIiwiZ2V0VGltZSIsInRvRGF0ZSIsInNsaWNlIiwiJGxvY2FsZSIsIndlZWtTdGFydCIsIiRzZXQiLCJtaW4iLCJkYXlzSW5Nb250aCIsIk51bWJlciIsInJvdW5kIiwic3VidHJhY3QiLCJmb3JtYXQiLCJpbnZhbGlkRGF0ZSIsIm1lcmlkaWVtIiwibW9udGhzU2hvcnQiLCJ3ZWVrZGF5c01pbiIsIndlZWtkYXlzU2hvcnQiLCJnZXRUaW1lem9uZU9mZnNldCIsImRpZmYiLCJ0b0pTT04iLCJ0b0lTT1N0cmluZyIsInRvVVRDU3RyaW5nIiwiayIsIiRpIiwiaXNEYXlqcyIsImVuIiwiTHMiLCJhMCIsImExIiwiYTIiLCJhMyIsImE0IiwiYTUiLCJhNiIsImE3IiwiYTgiLCJhOSIsIkVycm9yIiwiZ2V0UmF3VGFnIiwib2JqZWN0VG9TdHJpbmciLCJzeW1Ub1N0cmluZ1RhZyIsImNyZWF0ZVdyYXAiLCJjdXJyeSIsImZ1bmMiLCJhcml0eSIsImd1YXJkIiwicGxhY2Vob2xkZXIiLCJiYXNlR2V0VGFnIiwiaXNPYmplY3RMaWtlIiwicHJvcCIsIl9jdXJyeTIiLCJmMyIsIl9jIiwiX2FyaXR5IiwiX2N1cnJ5TiIsIl94d3JhcCIsImlzQXJyYXlMaWtlIiwiX2l0ZXJhYmxlUmVkdWNlIiwieGYiLCJhY2MiLCJpdGVyIiwic3RlcCIsIm5leHQiLCJkb25lIiwic3ltSXRlcmF0b3IiLCJpdGVyYXRvciIsImxpc3QiLCJpZHgiLCJsZW4iLCJfYXJyYXlSZWR1Y2UiLCJyZWR1Y2UiLCJfbWV0aG9kUmVkdWNlIiwiVHlwZUVycm9yIiwiX2Rpc3BhdGNoYWJsZSIsIl9tYXAiLCJfcmVkdWNlIiwiX3htYXAiLCJjdXJyeU4iLCJrZXlzIiwiZnVuY3RvciIsInJlSXNVaW50IiwiaXNMZW5ndGgiLCJsaXN0Q2FjaGVDbGVhciIsImxpc3RDYWNoZURlbGV0ZSIsImxpc3RDYWNoZUdldCIsImxpc3RDYWNoZUhhcyIsImxpc3RDYWNoZVNldCIsIkxpc3RDYWNoZSIsImVudHJpZXMiLCJpbmRleCIsImNsZWFyIiwiZW50cnkiLCJoYXMiLCJlcSIsImFycmF5IiwibmF0aXZlQ3JlYXRlIiwiZ2V0TmF0aXZlIiwiaXNLZXlhYmxlIiwibWFwIiwiZGF0YSIsIl9fZGF0YV9fIiwiaXNTeW1ib2wiLCJiYXNlQ3JlYXRlIiwiQ3RvciIsInRoaXNCaW5kaW5nIiwicmVzSW5kZXgiLCJBTCIsInJlZ2V4IiwiZGVzY3JpcHRpb24iLCJBSyIsIkFaIiwiQVIiLCJDQSIsIkNPIiwiQ1QiLCJERSIsIkRDIiwiRkwiLCJHQSIsIkdVIiwiSEkiLCJJRCIsIklMIiwiSU4iLCJJQSIsIktTIiwiS1kiLCJMQSIsIk1FIiwiTUQiLCJNQSIsIk1JIiwiTU4iLCJNUyIsIk1PIiwiTVQiLCJORSIsIk5WIiwiTkgiLCJOSiIsIk5NIiwiTlkiLCJOQyIsIk5EIiwiT0giLCJPSyIsIk9SIiwiUEEiLCJSSSIsIlNDIiwiU0QiLCJUTiIsIlRYIiwiVVQiLCJWVCIsIlZBIiwiVkkiLCJXQSIsIldWIiwiV0kiLCJXWSIsIlBSIiwiY2FjaGVkU2V0VGltZW91dCIsImNhY2hlZENsZWFyVGltZW91dCIsInByb2Nlc3MiLCJkZWZhdWx0U2V0VGltb3V0IiwiZGVmYXVsdENsZWFyVGltZW91dCIsInJ1blRpbWVvdXQiLCJmdW4iLCJzZXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiY3VycmVudFF1ZXVlIiwicXVldWUiLCJkcmFpbmluZyIsInF1ZXVlSW5kZXgiLCJjbGVhblVwTmV4dFRpY2siLCJjb25jYXQiLCJkcmFpblF1ZXVlIiwidGltZW91dCIsInJ1biIsIm1hcmtlciIsInJ1bkNsZWFyVGltZW91dCIsIkl0ZW0iLCJub29wIiwibmV4dFRpY2siLCJwdXNoIiwidGl0bGUiLCJicm93c2VyIiwiZW52IiwiYXJndiIsInZlcnNpb24iLCJ2ZXJzaW9ucyIsIm9uIiwiYWRkTGlzdGVuZXIiLCJvbmNlIiwib2ZmIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJlbWl0IiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImxpc3RlbmVycyIsImJpbmRpbmciLCJjd2QiLCJjaGRpciIsImRpciIsInVtYXNrIiwiaGFzRW51bUJ1ZyIsIm5vbkVudW1lcmFibGVQcm9wcyIsImhhc0FyZ3NFbnVtQnVnIiwiY29udGFpbnMiLCJfaGFzIiwiX2lzQXJndW1lbnRzIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJpdGVtIiwibklkeCIsImtzIiwiY2hlY2tBcmdzTGVuZ3RoIiwiX2N1cnJ5MyIsIl9pc0FycmF5IiwibWV0aG9kbmFtZSIsInV0aWxzIiwibm9ybWFsaXplSGVhZGVyTmFtZSIsIkRFRkFVTFRfQ09OVEVOVF9UWVBFIiwic2V0Q29udGVudFR5cGVJZlVuc2V0IiwiaGVhZGVycyIsImFkYXB0ZXIiLCJkZWZhdWx0cyIsIlhNTEh0dHBSZXF1ZXN0IiwidHJhbnNmb3JtUmVxdWVzdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0cmFuc2Zvcm1SZXNwb25zZSIsInhzcmZDb29raWVOYW1lIiwieHNyZkhlYWRlck5hbWUiLCJtYXhDb250ZW50TGVuZ3RoIiwidmFsaWRhdGVTdGF0dXMiLCJzdGF0dXMiLCJjb21tb24iLCJtZXRob2QiLCJhcnJheUxpa2VLZXlzIiwiYmFzZUtleXMiLCJiYXNlSXNBcmd1bWVudHMiLCJvYmplY3RQcm90byIsImlzQXJndW1lbnRzIiwic3R1YkZhbHNlIiwiZnJlZUV4cG9ydHMiLCJub2RlVHlwZSIsImZyZWVNb2R1bGUiLCJCdWZmZXIiLCJiYXNlSXNUeXBlZEFycmF5IiwiYmFzZVVuYXJ5Iiwibm9kZVV0aWwiLCJub2RlSXNUeXBlZEFycmF5IiwiaXNUeXBlZEFycmF5Iiwib3RoZXIiLCJNYXAiLCJtYXBDYWNoZUNsZWFyIiwibWFwQ2FjaGVEZWxldGUiLCJtYXBDYWNoZUdldCIsIm1hcENhY2hlSGFzIiwibWFwQ2FjaGVTZXQiLCJNYXBDYWNoZSIsInJlSXNEZWVwUHJvcCIsInJlSXNQbGFpblByb3AiLCJvYmplY3RDcmVhdGUiLCJwcm90byIsImJhc2VMb2Rhc2giLCJMYXp5V3JhcHBlciIsIl9fd3JhcHBlZF9fIiwiX19hY3Rpb25zX18iLCJfX2Rpcl9fIiwiX19maWx0ZXJlZF9fIiwiX19pdGVyYXRlZXNfXyIsIl9fdGFrZUNvdW50X18iLCJfX3ZpZXdzX18iLCJjb25zdHJ1Y3RvciIsImJhc2U2NCIsImdsb2JhbCIsImJ0b2EiLCJhdG9iIiwiY2hhcnMiLCJJbnZhbGlkQ2hhcmFjdGVyRXJyb3IiLCJtZXNzYWdlIiwiaW5wdXQiLCJibG9jayIsImNoYXJDb2RlIiwib3V0cHV0IiwiY2hhckF0IiwiY2hhckNvZGVBdCIsImJzIiwiYmMiLCJmcm9tQ2hhckNvZGUiLCJpbmRleE9mIiwiYmFzZVJlc3QiLCJnZXRIb2xkZXIiLCJyZXBsYWNlSG9sZGVycyIsInBhcnRpYWwiLCJwYXJ0aWFscyIsImhvbGRlcnMiLCJkcml2ZXJzTGljZW5zZVJlZ2V4IiwiaXNWYWxpZFVTTGljZW5zZSIsInZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSIsInN1cHBvcnRlZFN0YXRlcyIsIl9lcXVhbHMiLCJzZXQxIiwic2V0MiIsImxlbjEiLCJsZW4yIiwic2V0dGxlIiwiYnVpbGRVUkwiLCJwYXJzZUhlYWRlcnMiLCJpc1VSTFNhbWVPcmlnaW4iLCJjcmVhdGVFcnJvciIsImNvbmZpZyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVxdWVzdERhdGEiLCJyZXF1ZXN0SGVhZGVycyIsInJlcXVlc3QiLCJsb2FkRXZlbnQiLCJ4RG9tYWluIiwiWERvbWFpblJlcXVlc3QiLCJ1cmwiLCJvbnByb2dyZXNzIiwib250aW1lb3V0IiwiYXV0aCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJBdXRob3JpemF0aW9uIiwib3BlbiIsInRvVXBwZXJDYXNlIiwicGFyYW1zIiwicGFyYW1zU2VyaWFsaXplciIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsInJlc3BvbnNlSGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlIiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzVGV4dCIsIm9uZXJyb3IiLCJjb29raWVzIiwieHNyZlZhbHVlIiwid2l0aENyZWRlbnRpYWxzIiwicmVhZCIsInNldFJlcXVlc3RIZWFkZXIiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJhZGRFdmVudExpc3RlbmVyIiwib25VcGxvYWRQcm9ncmVzcyIsInVwbG9hZCIsImNhbmNlbFRva2VuIiwicHJvbWlzZSIsInRoZW4iLCJjYW5jZWwiLCJhYm9ydCIsInNlbmQiLCJlbmhhbmNlRXJyb3IiLCJjb2RlIiwiZXJyb3IiLCJfX0NBTkNFTF9fIiwiQ2FuY2VsIiwicHJlZGljYXRlIiwid2VicGFja1BvbHlmaWxsIiwiZGVwcmVjYXRlIiwicGF0aHMiLCJjaGlsZHJlbiIsImlzUHJvdG90eXBlIiwibmF0aXZlS2V5cyIsInRhZyIsInN0YWNrQ2xlYXIiLCJzdGFja0RlbGV0ZSIsInN0YWNrR2V0Iiwic3RhY2tIYXMiLCJzdGFja1NldCIsIlN0YWNrIiwic2l6ZSIsImZ1bmNUb1N0cmluZyIsImJhc2VJc0VxdWFsRGVlcCIsImJhc2VJc0VxdWFsIiwiYml0bWFzayIsImN1c3RvbWl6ZXIiLCJzdGFjayIsIlNldENhY2hlIiwiYXJyYXlTb21lIiwiY2FjaGVIYXMiLCJlcXVhbEZ1bmMiLCJpc1BhcnRpYWwiLCJhcnJMZW5ndGgiLCJvdGhMZW5ndGgiLCJhcnJTdGFja2VkIiwib3RoU3RhY2tlZCIsInNlZW4iLCJhcnJWYWx1ZSIsIm90aFZhbHVlIiwiY29tcGFyZWQiLCJvdGhJbmRleCIsIkRhdGFWaWV3IiwiU2V0IiwiV2Vha01hcCIsInRvU291cmNlIiwiZGF0YVZpZXdDdG9yU3RyaW5nIiwibWFwQ3RvclN0cmluZyIsInByb21pc2VDdG9yU3RyaW5nIiwic2V0Q3RvclN0cmluZyIsIndlYWtNYXBDdG9yU3RyaW5nIiwiZ2V0VGFnIiwiY3RvclN0cmluZyIsInNyY1ZhbHVlIiwiY2FzdFBhdGgiLCJ0b0tleSIsInBhdGgiLCJpc0tleSIsInN0cmluZ1RvUGF0aCIsImJhc2VUb1N0cmluZyIsImJhc2VGaW5kSW5kZXgiLCJiYXNlSXNOYU4iLCJzdHJpY3RJbmRleE9mIiwiZnJvbUluZGV4IiwidG9GaW5pdGUiLCJyZW1haW5kZXIiLCJ0b051bWJlciIsImJhc2VTZXREYXRhIiwiY3JlYXRlQmluZCIsImNyZWF0ZUN1cnJ5IiwiY3JlYXRlSHlicmlkIiwiY3JlYXRlUGFydGlhbCIsImdldERhdGEiLCJtZXJnZURhdGEiLCJzZXREYXRhIiwic2V0V3JhcFRvU3RyaW5nIiwidG9JbnRlZ2VyIiwibmF0aXZlTWF4IiwibWF4IiwiYXJnUG9zIiwiYXJ5IiwiaXNCaW5kS2V5IiwicGFydGlhbHNSaWdodCIsImhvbGRlcnNSaWdodCIsIm5ld0RhdGEiLCJpZGVudGl0eSIsIm1ldGFNYXAiLCJjb21wb3NlQXJncyIsImNvbXBvc2VBcmdzUmlnaHQiLCJjb3VudEhvbGRlcnMiLCJjcmVhdGVDdG9yIiwiY3JlYXRlUmVjdXJyeSIsInJlb3JkZXIiLCJpc0FyeSIsImlzQmluZCIsImlzQ3VycmllZCIsImlzRmxpcCIsIndyYXBwZXIiLCJob2xkZXJzQ291bnQiLCJuZXdIb2xkZXJzIiwicmV2ZXJzZSIsImFyZ3NJbmRleCIsImFyZ3NMZW5ndGgiLCJob2xkZXJzTGVuZ3RoIiwibGVmdEluZGV4IiwibGVmdExlbmd0aCIsInJhbmdlTGVuZ3RoIiwiaXNVbmN1cnJpZWQiLCJob2xkZXJzSW5kZXgiLCJyaWdodEluZGV4IiwicmlnaHRMZW5ndGgiLCJvZmZzZXQiLCJpc0xhemlhYmxlIiwid3JhcEZ1bmMiLCJpc0N1cnJ5IiwiTG9kYXNoV3JhcHBlciIsImNoYWluQWxsIiwiX19jaGFpbl9fIiwiX19pbmRleF9fIiwiX192YWx1ZXNfXyIsInNvdXJjZSIsInNob3J0T3V0IiwibmF0aXZlTm93Iiwibm93IiwiY291bnQiLCJsYXN0Q2FsbGVkIiwic3RhbXAiLCJyZW1haW5pbmciLCJnZXRXcmFwRGV0YWlscyIsImluc2VydFdyYXBEZXRhaWxzIiwic2V0VG9TdHJpbmciLCJ1cGRhdGVXcmFwRGV0YWlscyIsInJlZmVyZW5jZSIsImJhc2VTZXRUb1N0cmluZyIsInJlSGFzVW5pY29kZSIsIlJlZ0V4cCIsInN0cmluZyIsIl9pbnRlcm9wRGVmYXVsdCIsImRlZmF1bHQiLCJfZGVmYXVsdDI0IiwiX2RlZmF1bHQyMyIsIl9kZWZhdWx0MjIiLCJfZGVmYXVsdDIxIiwiX2RlZmF1bHQyMCIsIl9kZWZhdWx0MTkiLCJfZGVmYXVsdDE4IiwiX2RlZmF1bHQxNyIsIl9kZWZhdWx0MTYiLCJfZGVmYXVsdDE1IiwiX2RlZmF1bHQxNCIsIl9kZWZhdWx0MTMiLCJfZGVmYXVsdDEyIiwiX2RlZmF1bHQxMSIsIl9kZWZhdWx0MTAiLCJfZGVmYXVsdDkiLCJfZGVmYXVsdDgiLCJfZGVmYXVsdDciLCJfZGVmYXVsdDYiLCJfZGVmYXVsdDUiLCJfZGVmYXVsdDQiLCJfZGVmYXVsdDMiLCJfZGVmYXVsdDIiLCJfZGVmYXVsdCIsImF4aW9zIiwiX3R5cGVvZiIsIl9leHRlbmRzIiwiYXNzaWduIiwiJGFzeW5jYmluZCIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwidHJhbXBvbGluZSIsInBvcCIsIkxhenlUaGVuYWJsZSIsIl9yZXNvbHZlciIsImlzVGhlbmFibGUiLCJFYWdlclRoZW5hYmxlIiwiVGhlbmFibGUiLCJFYWdlclRoZW5hYmxlRmFjdG9yeSIsInNldEltbWVkaWF0ZSIsInNwbGljZSIsInN0YXRlIiwiaXNXaXRoaW4iLCJpc0ludmFsaWRDb25maWciLCJERUZBVUxUX0hFQURFUlMiLCJBY2NlcHQiLCJERUZBVUxUX0NPTkZJRyIsIlRJTUVPVVRfRVJST1JfQ09ERVMiLCJOT0RFSlNfQ09OTkVDVElPTl9FUlJPUl9DT0RFUyIsImluMjAwcyIsImluNDAwcyIsImluNTAwcyIsInN0YXR1c05pbCIsIlIiLCJOIiwiaXNQcm9taXNlIiwiVCIsImNhdGNoIiwiaXNDYW5jZWwiLCJkdXJhdGlvbiIsInByb2JsZW0iLCJvayIsImF4aW9zSW5zdGFuY2UiLCJtb25pdG9ycyIsImFkZE1vbml0b3IiLCJyZXF1ZXN0VHJhbnNmb3JtcyIsImFzeW5jUmVxdWVzdFRyYW5zZm9ybXMiLCJyZXNwb25zZVRyYW5zZm9ybXMiLCJhZGRSZXF1ZXN0VHJhbnNmb3JtIiwiYWRkQXN5bmNSZXF1ZXN0VHJhbnNmb3JtIiwiYWRkUmVzcG9uc2VUcmFuc2Zvcm0iLCJzZXRIZWFkZXIiLCJzZXRIZWFkZXJzIiwiZGVsZXRlSGVhZGVyIiwic2V0QmFzZVVSTCIsImJhc2VVUkwiLCJnZXRCYXNlVVJMIiwiZGVsZXRlIiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImxpbmsiLCJ1bmxpbmsiLCJhcGlzYXVjZSIsIk5PTkUiLCJDTElFTlRfRVJST1IiLCJTRVJWRVJfRVJST1IiLCJUSU1FT1VUX0VSUk9SIiwiQ09OTkVDVElPTl9FUlJPUiIsIk5FVFdPUktfRVJST1IiLCJVTktOT1dOX0VSUk9SIiwiQ0FOQ0VMX0VSUk9SIiwiYXJyYXlGaWx0ZXIiLCJiYXNlRmlsdGVyIiwiYmFzZUl0ZXJhdGVlIiwiY29sbGVjdGlvbiIsImJhc2VJbmRleE9mIiwiZnV0dXJlIiwicGFzdCIsIm1tIiwiaGgiLCJkZCIsIk1NIiwieXkiLCJmcm9tVG9CYXNlIiwicmVsYXRpdmVUaW1lIiwidGhyZXNob2xkcyIsInJvdW5kaW5nIiwidG8iLCJmcm9tIiwidG9Ob3ciLCJmcm9tTm93IiwibG9jYWwiLCJnZXRVVENGdWxsWWVhciIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImdldFVUQ0RheSIsImdldFVUQ0hvdXJzIiwiZ2V0VVRDTWludXRlcyIsImdldFVUQ1NlY29uZHMiLCJnZXRVVENNaWxsaXNlY29uZHMiLCIkbG9jYWxPZmZzZXQiLCJpc1VUQyIsInVwcGVyRmlyc3QiLCJjcmVhdGVDYXNlRmlyc3QiLCJyYW5nZSIsImNyZWF0ZVJhbmdlIiwiVGltZW91dCIsImlkIiwiY2xlYXJGbiIsIl9pZCIsIl9jbGVhckZuIiwic2NvcGUiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJjbG9zZSIsInVucmVmIiwicmVmIiwiZW5yb2xsIiwibXNlY3MiLCJfaWRsZVRpbWVvdXRJZCIsIl9pZGxlVGltZW91dCIsInVuZW5yb2xsIiwiX3VucmVmQWN0aXZlIiwiYWN0aXZlIiwiX29uVGltZW91dCIsImNsZWFySW1tZWRpYXRlIiwicmVnaXN0ZXJJbW1lZGlhdGUiLCJodG1sIiwiY2hhbm5lbCIsIm1lc3NhZ2VQcmVmaXgiLCJvbkdsb2JhbE1lc3NhZ2UiLCJuZXh0SGFuZGxlIiwidGFza3NCeUhhbmRsZSIsImN1cnJlbnRseVJ1bm5pbmdBVGFzayIsImRvYyIsImF0dGFjaFRvIiwiZ2V0UHJvdG90eXBlT2YiLCJoYW5kbGUiLCJydW5JZlByZXNlbnQiLCJwb3N0TWVzc2FnZSIsImltcG9ydFNjcmlwdHMiLCJwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzIiwib2xkT25NZXNzYWdlIiwib25tZXNzYWdlIiwiY2FuVXNlUG9zdE1lc3NhZ2UiLCJNZXNzYWdlQ2hhbm5lbCIsInBvcnQxIiwiZXZlbnQiLCJwb3J0MiIsImNyZWF0ZUVsZW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJzY3JpcHQiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZW1vdmVDaGlsZCIsImFwcGVuZENoaWxkIiwicmFuZG9tIiwiYXR0YWNoRXZlbnQiLCJjYWxsYmFjayIsInRhc2siLCJfY29udGFpbnMiLCJfaW5kZXhPZiIsImVxdWFscyIsImluZiIsIl9hcnJheUZyb21JdGVyYXRvciIsIl9mdW5jdGlvbk5hbWUiLCJpZGVudGljYWwiLCJzdGFja0EiLCJzdGFja0IiLCJpZ25vcmVDYXNlIiwibXVsdGlsaW5lIiwic3RpY2t5IiwidW5pY29kZSIsImtleXNBIiwiX2NvbmNhdCIsIl9jcmVhdGVQYXJ0aWFsQXBwbGljYXRvciIsIl9waXBlIiwidGFpbCIsIlhXcmFwIiwidGhpc09iaiIsIl9pc1N0cmluZyIsIl9jaGVja0Zvck1ldGhvZCIsIkluZmluaXR5IiwidG9JbmRleCIsIl9hc3NpZ24iLCJfb2JqZWN0QXNzaWduIiwidGFyZ2V0IiwibmV4dEtleSIsImNvbmRpdGlvbiIsIm9uVHJ1ZSIsIm9uRmFsc2UiLCJyZWNlaXZlZCIsImNvbWJpbmVkIiwiYXJnc0lkeCIsImxlZnQiLCJjb21iaW5lZElkeCIsInByZWQiLCJpcyIsImxpZnQiLCJub3QiLCJsaWZ0TiIsImFwIiwibGlmdGVkIiwiYXBwbGljYXRpdmUiLCJfaXNUcmFuc2Zvcm1lciIsIm1ldGhvZE5hbWVzIiwidHJhbnNkdWNlciIsIl94ZkJhc2UiLCJYTWFwIiwiZW1wdHkiLCJfaXNPYmplY3QiLCJwbHVjayIsInByZWRzIiwiYWx3YXlzIiwiX2lkZW50aXR5IiwicGFpcnMiLCJwYWlyIiwiQXhpb3MiLCJjcmVhdGVJbnN0YW5jZSIsImRlZmF1bHRDb25maWciLCJjb250ZXh0IiwiaW5zdGFuY2UiLCJpbnN0YW5jZUNvbmZpZyIsIkNhbmNlbFRva2VuIiwiYWxsIiwicHJvbWlzZXMiLCJzcHJlYWQiLCJyZWFkRmxvYXRMRSIsImlzU2xvd0J1ZmZlciIsIl9pc0J1ZmZlciIsIkludGVyY2VwdG9yTWFuYWdlciIsImRpc3BhdGNoUmVxdWVzdCIsImlzQWJzb2x1dGVVUkwiLCJjb21iaW5lVVJMcyIsImludGVyY2VwdG9ycyIsImNoYWluIiwiaW50ZXJjZXB0b3IiLCJ1bnNoaWZ0IiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJzaGlmdCIsIm5vcm1hbGl6ZWROYW1lIiwiZW5jb2RlIiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwic2VyaWFsaXplZFBhcmFtcyIsInBhcnRzIiwicGFyc2VkIiwibGluZSIsInN1YnN0ciIsIm9yaWdpblVSTCIsIm1zaWUiLCJ1c2VyQWdlbnQiLCJ1cmxQYXJzaW5nTm9kZSIsInJlc29sdmVVUkwiLCJocmVmIiwic2V0QXR0cmlidXRlIiwicHJvdG9jb2wiLCJob3N0Iiwic2VhcmNoIiwiaGFzaCIsImhvc3RuYW1lIiwicG9ydCIsInBhdGhuYW1lIiwibG9jYXRpb24iLCJyZXF1ZXN0VVJMIiwiRSIsIndyaXRlIiwiZXhwaXJlcyIsImRvbWFpbiIsInNlY3VyZSIsImNvb2tpZSIsInRvR01UU3RyaW5nIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVtb3ZlIiwiaGFuZGxlcnMiLCJ1c2UiLCJlamVjdCIsInRyYW5zZm9ybURhdGEiLCJ0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkIiwidGhyb3dJZlJlcXVlc3RlZCIsInJlYXNvbiIsImZucyIsInJlbGF0aXZlVVJMIiwiZXhlY3V0b3IiLCJyZXNvbHZlUHJvbWlzZSIsInRva2VuIiwiYXJyIiwiX193ZWJwYWNrX2FtZF9vcHRpb25zX18iLCJiYXNlRWFjaCIsImJhc2VGb3JPd24iLCJjcmVhdGVCYXNlRWFjaCIsImJhc2VGb3IiLCJpdGVyYXRlZSIsImNyZWF0ZUJhc2VGb3IiLCJmcm9tUmlnaHQiLCJrZXlzRnVuYyIsIml0ZXJhYmxlIiwicHJvcHMiLCJiYXNlVGltZXMiLCJpc0luZGV4IiwiaW5oZXJpdGVkIiwiaXNBcnIiLCJpc0FyZyIsImlzQnVmZiIsImlzVHlwZSIsInNraXBJbmRleGVzIiwibmF0aXZlT2JqZWN0VG9TdHJpbmciLCJpc093biIsInVubWFza2VkIiwidHlwZWRBcnJheVRhZ3MiLCJmcmVlUHJvY2VzcyIsInR5cGVzIiwicmVxdWlyZSIsIm92ZXJBcmciLCJ0cmFuc2Zvcm0iLCJhcmciLCJlYWNoRnVuYyIsImJhc2VNYXRjaGVzIiwiYmFzZU1hdGNoZXNQcm9wZXJ0eSIsImJhc2VJc01hdGNoIiwiZ2V0TWF0Y2hEYXRhIiwibWF0Y2hlc1N0cmljdENvbXBhcmFibGUiLCJtYXRjaERhdGEiLCJub0N1c3RvbWl6ZXIiLCJvYmpWYWx1ZSIsIkNPTVBBUkVfUEFSVElBTF9GTEFHIiwiYXNzb2NJbmRleE9mIiwiTEFSR0VfQVJSQVlfU0laRSIsImlzTWFza2VkIiwicmVJc0hvc3RDdG9yIiwiZnVuY1Byb3RvIiwicmVJc05hdGl2ZSIsInVpZCIsImNvcmVKc0RhdGEiLCJtYXNrU3JjS2V5IiwiZXhlYyIsIklFX1BST1RPIiwiSGFzaCIsImhhc2hDbGVhciIsImhhc2hEZWxldGUiLCJoYXNoR2V0IiwiaGFzaEhhcyIsImhhc2hTZXQiLCJnZXRNYXBEYXRhIiwiZXF1YWxBcnJheXMiLCJlcXVhbEJ5VGFnIiwiZXF1YWxPYmplY3RzIiwib2JqZWN0VGFnIiwib2JqSXNBcnIiLCJvdGhJc0FyciIsIm9ialRhZyIsIm90aFRhZyIsIm9iaklzT2JqIiwib3RoSXNPYmoiLCJpc1NhbWVUYWciLCJvYmpJc1dyYXBwZWQiLCJvdGhJc1dyYXBwZWQiLCJvYmpVbndyYXBwZWQiLCJvdGhVbndyYXBwZWQiLCJzZXRDYWNoZUFkZCIsInNldENhY2hlSGFzIiwidmFsdWVzIiwiY2FjaGUiLCJVaW50OEFycmF5IiwibWFwVG9BcnJheSIsInNldFRvQXJyYXkiLCJzeW1ib2xQcm90byIsInN5bWJvbFZhbHVlT2YiLCJieXRlTGVuZ3RoIiwiYnl0ZU9mZnNldCIsImNvbnZlcnQiLCJzdGFja2VkIiwiZ2V0QWxsS2V5cyIsIm9ialByb3BzIiwib2JqTGVuZ3RoIiwib2JqU3RhY2tlZCIsInNraXBDdG9yIiwib2JqQ3RvciIsIm90aEN0b3IiLCJiYXNlR2V0QWxsS2V5cyIsImdldFN5bWJvbHMiLCJhcnJheVB1c2giLCJzeW1ib2xzRnVuYyIsInN0dWJBcnJheSIsIm5hdGl2ZUdldFN5bWJvbHMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJzeW1ib2wiLCJpc1N0cmljdENvbXBhcmFibGUiLCJoYXNJbiIsImJhc2VHZXQiLCJkZWZhdWx0VmFsdWUiLCJtZW1vaXplQ2FwcGVkIiwicmVQcm9wTmFtZSIsInJlRXNjYXBlQ2hhciIsIm51bWJlciIsInF1b3RlIiwic3ViU3RyaW5nIiwibWVtb2l6ZSIsInJlc29sdmVyIiwibWVtb2l6ZWQiLCJDYWNoZSIsImFycmF5TWFwIiwic3ltYm9sVG9TdHJpbmciLCJiYXNlSGFzSW4iLCJoYXNQYXRoIiwiaGFzRnVuYyIsImJhc2VQcm9wZXJ0eSIsImJhc2VQcm9wZXJ0eURlZXAiLCJiYXNlVHJpbSIsInJlSXNCYWRIZXgiLCJyZUlzQmluYXJ5IiwicmVJc09jdGFsIiwiZnJlZVBhcnNlSW50IiwicGFyc2VJbnQiLCJpc0JpbmFyeSIsInRyaW1tZWRFbmRJbmRleCIsInJlVHJpbVN0YXJ0IiwicmVXaGl0ZXNwYWNlIiwiZ2V0RnVuY05hbWUiLCJsb2Rhc2giLCJmdW5jTmFtZSIsInJlYWxOYW1lcyIsIm90aGVyRnVuYyIsIndyYXBwZXJDbG9uZSIsImNvcHlBcnJheSIsInJlV3JhcERldGFpbHMiLCJyZVNwbGl0RGV0YWlscyIsInJlV3JhcENvbW1lbnQiLCJkZXRhaWxzIiwibGFzdEluZGV4IiwiY29uc3RhbnQiLCJhcnJheUVhY2giLCJhcnJheUluY2x1ZGVzIiwid3JhcEZsYWdzIiwic29ydCIsIm5hdGl2ZU1pbiIsImluZGV4ZXMiLCJvbGRBcnJheSIsInNyY0JpdG1hc2siLCJuZXdCaXRtYXNrIiwiaXNDb21tb24iLCJpc0NvbWJvIiwib3ZlclJlc3QiLCJzdGFydCIsIm90aGVyQXJncyIsImNhc3RTbGljZSIsImhhc1VuaWNvZGUiLCJzdHJpbmdUb0FycmF5IiwibWV0aG9kTmFtZSIsInN0clN5bWJvbHMiLCJjaHIiLCJ0cmFpbGluZyIsImJhc2VTbGljZSIsImVuZCIsImFzY2lpVG9BcnJheSIsInVuaWNvZGVUb0FycmF5IiwicnNBc3RyYWwiLCJyc0NvbWJvIiwicnNGaXR6IiwicnNOb25Bc3RyYWwiLCJyc1JlZ2lvbmFsIiwicnNTdXJyUGFpciIsInJlT3B0TW9kIiwicnNTZXEiLCJyc1N5bWJvbCIsInJlVW5pY29kZSIsImxpY2Vuc2UiLCJ2YWxpZGF0b3JzIiwiY2xlYW5MaWNlbnNlIiwiZmlsdGVyIiwidmFsaWQiLCJyZWFzb25zIiwiYmFzZVJhbmdlIiwiaXNJdGVyYXRlZUNhbGwiLCJuYXRpdmVDZWlsIiwiQmFzZUFQSSIsInR3aWxpb0tleSIsImFwaSIsInBob25lIiwiVFdJTElPX0tFWSIsImVtYWlsIiwiZW1haWxfaWQiLCJzc24iLCJwYXJ0bmVyX25hbWUiLCJwYXJ0bmVyX2lkIiwiY29ob3J0X2lkIiwiUHJlZmVyIiwicHJpbWFyeSIsInNlY29uZGFyeSIsImVtZXJhbGQiLCJ0YXJ0T3JhbmdlIiwieWVsbG93T3JhbmdlIiwic2xhdGVHcmF5IiwiY2FkZXRCbHVlIiwicGVyaXdpbmtsZSIsImFsaWNlQmx1ZSIsInNtb2tlV2hpdGUiLCJhbGVydDAiLCJhbGVydDEiLCJhbGVydDIiLCJhbGVydDMiLCJjZXJ1bGVhbkJsdWUiLCJwZWFjaCIsImJhYnlQaW5rIiwic3BhbmlzaFBpbmsiLCJiZWF1Qmx1ZSIsImN1bHR1cmVkIiwiYmx1ZUJlbGwiLCJiYWJ5Qmx1ZUV5ZXMiLCJwb3dkZXJCbHVlIiwiaG9uZXlEZXciLCJidWZmIiwiYmxhY2siLCJ3aGl0ZSIsIm5vdGljZU11dGVkIiwibm90aWNlRXJyb3IiLCJub3RpY2VXYXJuaW5nIiwibm90aWNlU3VjY2VzcyIsIm5vdGljZUluZm8iLCJwYXJzZVB5dGhvbkRhdGUiLCJpc05hTiIsInRpbWUiLCJuZXdEYXRlIiwiaG91cnMiLCJzZXRIb3VycyIsImZvcm1hdERhdGUiLCJwYXJzZWREYXRlIiwiZm9ybWF0RW1haWwiLCJmb3JtYXROYW1lIiwicmVuZGVyUGhvbmUiLCJlbmNyeXB0ZWQiLCJhcmVhQ29kZSIsInBob25lTnVtYmVyIiwiZm9ybWF0UGhvbmUiLCJmb3JtYXRTU04iLCJzc25OdW1iZXIiLCJmb3JtYXRaaXBjb2RlIiwiemlwY29kZSIsImdldFJlamVjdE1lc3NhZ2UiLCJwYXJ0bmVyX3R5cGUiLCJpbmNsdWRlcyIsIlJJU0tfTUFOQUdFTUVOVCIsIkZDUkEiLCJGQ1JBX0UiLCJGQ1JBX04iLCJnZXRTdGF0dXMiLCJyZXZpZXciLCJwZW5kaW5nIiwiaW5pdGlhdGVkIiwiZ2V0WWVhciIsImlzVXJsIiwidXJsU3RyaW5nIiwidGVybXMiLCJsZWdhbFJlcGxhY2UiLCJvcmlnaW5hbCIsInJlcGxhY2VtZW50IiwicmV0dXJuVmFsIiwibWFza05hbWUiLCJvYmplY3RUb1F1ZXJ5IiwicXVlcnkiLCJxdWVyeUFycmF5IiwicGFyc2VRdWVyeSIsInN0YXJ0c1dpdGgiLCJwaWNrQ29sb3IiLCJjb2xvcnMiLCJwaWNrU2NvcmVDb2xvciIsInNjb3JlIiwicHJldHRpZnlEYXRlIiwiZGF0ZVN0cmluZyIsIkREIiwiWVlZWSIsImZhbHN5U3RyaW5ncyIsInZhbHVlRXhpc3RzIiwicmVuZGVyRGV0YWlsVmFsdWUiLCJkZWVwIiwicmVuZGVyTmVzdGVkT2JqZWN0IiwibmVzdGVkIiwic2VsZWN0TWFzdGVyS2V5IiwibWFzdGVyS2V5IiwiYmx1ZXByaW50IiwiZmluZCIsInNldFZhbHVlIiwiZmFsbGJhY2siLCJzZXRPcHRpb24iLCJvcHRpb25zIiwiYWxsb3dlZCIsInNldHRlckZhY3RvcnlDdXJyaWVkIiwidG9nZ2xlQm9vbEN1cnJpZWQiLCJzZXRTdHJpbmdGYWN0b3J5Iiwic2V0TnVtYmVyRmFjdG9yeSIsInNldEJvb2xGYWN0b3J5Iiwic2V0VHJ1dGh5Q3VycmllZCIsInNldEZhbHN5Q3VycmllZCIsInNldE9wdGlvbkZhY3RvcnlDdXJyaWVkIiwiU2V0dGVyIiwic3RvcmFnZU1vY2siLCJzdG9yYWdlIiwic2V0SXRlbSIsImdldEl0ZW0iLCJyZW1vdmVJdGVtIiwidG9Cb29sZWFuIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImRheWpzIiwidG9SZWxhdGl2ZUZyb21JU08iLCJyZWxhdGl2ZURhdGUiLCJ0b1JlbGF0aXZlRGF0ZSIsImFkanVzdGVkTm93IiwidG9TZW50ZW5jZUNhc2UiLCJzZW50ZW5jZSIsInRlcm1pbmF0aW9uIiwidG9UaXRsZUNhc2UiLCJ3b3JkIiwiZmlyc3RDaGFyIiwicmVtYWluaW5nQ2hhcnMiLCJJTklUSUFURUQiLCJQRU5ESU5HIiwiV0lUSERSQVdOIiwiQVBQUk9WRUQiLCJSRUpFQ1RFRCIsIkNPTlNFTlQiLCJFTUFJTEVEIiwiUkVWSUVXIiwiUkVWSUVXSU5HIiwiQ09OU0lERVIiLCJQUk9DRVNTSU5HIiwiUEVORElOR19ESVNQVVRFIiwiUEVORElOR19GSVJTVF9OT1RJQ0UiLCJQRU5ESU5HX1NFQ09ORF9OT1RJQ0UiLCJGSVJTVF9OT1RJQ0UiLCJTRUNPTkRfTk9USUNFIiwiU1NOX1RSQUNFX0ZBSUxFRCIsIk1WUl9GQUlMRUQiLCJDT01QTElBTkNFIiwiQ09NUExJQU5DRV9TTyIsIlZFUklGWUlORyIsIkNPTVBMSUFOQ0VSRVZJRVciLCJTVE9SRUQiLCJ0cmFuc2xhdGVTdGF0dXMiLCJhZHZlcnNlX2FjdGlvbiIsImN1cnJlbnRTdGF0ZXMiLCJ2YWxpZGF0ZURyaXZlcnNMaWNlbnNlIiwidmFsaWRTc25SZWdleCIsIm1pc3VzZWRSZWdleCIsImludmFsaWRGaXJzdFRocmVlIiwibnVtIiwidmFsaWRhdGVfc3NuIiwibnVtYmVyU1NOIiwiaXNBcnJheU9yT2JzZXJ2YWJsZUFycmF5IiwidmFsaWRhdGVFbWFpbCIsInZhbGlkYXRlUGhvbmUiLCJpc0FscGhhTnVtZXJpYyIsImNoIiwiaXNWYWxpZENhbmFkaWFuWmlwY29kZSIsInZhbGlkYXRlU1NOIiwidmFsaWRhdGVDaGVjayIsIndvcmtlcl9jaGVjayIsImNoZWNrIiwiY29udGFpbnNBdFN5bWJvbCIsImNvbnRhaW5zTnVtYmVyIiwidmFsaWRhdGVOYW1lIiwidmFsaWRhdGVBZGRyZXNzIiwiYWRkcmVzcyIsInZhbGlkYXRlQ3VzdG9tSW5wdXQiLCJ2YWxpZGF0ZVppcGNvZGUiLCJ2YWxpZGF0ZUNhbmFkaWFuWmlwY29kZSIsInZhbGlkYXRlTVZSQ2hlY2siLCJ2YWxpZGF0ZVBob25lVmVyaWZpY2F0aW9uIiwiZGlzYWJsZV9jaGVjayIsImVudl92YXIiLCJ2YWxpZGF0ZUVtYWlsSWQiLCJ2YWxpZGF0ZVR1cm5JZCJdLCJtYXBwaW5ncyI6IkNBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELElBQ1EsbUJBQVhHLFFBQXlCQSxPQUFPQyxJQUM5Q0QsT0FBTyxjQUFlLEdBQUlILEdBQ0EsaUJBQVpDLFFBQ2RBLFFBQVEsZUFBaUJELElBRXpCRCxFQUFLLGVBQWlCQyxJQVJ4QixDQVNtQixvQkFBVEssS0FBdUJBLEtBQU9DLE1BQU0sV0FDOUMsTyxZQ1RFLElBQUlDLEVBQW1CLEdBR3ZCLFNBQVNDLEVBQW9CQyxHQUc1QixHQUFHRixFQUFpQkUsR0FDbkIsT0FBT0YsRUFBaUJFLEdBQVVSLFFBR25DLElBQUlDLEVBQVNLLEVBQWlCRSxHQUFZ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T0FBSSxLQUFXQSxJQUFxQixLQUFkQSxFQUFHbHZCLFFBRTdDb3lDLEdBQWlCLFNBQUFsakIsR0FBRSxPQUM5QixLQUFXQSxJQUFPLGtCQUFrQmpwQixLQUFLaXBCIiwiZmlsZSI6InR1cm4tc2hhcmVkLm1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwidHVybi1zaGFyZWRcIiwgW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1widHVybi1zaGFyZWRcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1widHVybi1zaGFyZWRcIl0gPSBmYWN0b3J5KCk7XG59KSh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDMwMyk7XG4iLCJ2YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vX2N1cnJ5MScpO1xudmFyIF9pc1BsYWNlaG9sZGVyID0gcmVxdWlyZSgnLi9faXNQbGFjZWhvbGRlcicpO1xuXG5cbi8qKlxuICogT3B0aW1pemVkIGludGVybmFsIHR3by1hcml0eSBjdXJyeSBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY3VycnkuXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIGN1cnJpZWQgZnVuY3Rpb24uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2N1cnJ5Mihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gZjIoYSwgYikge1xuICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICByZXR1cm4gZjI7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBfaXNQbGFjZWhvbGRlcihhKSA/IGYyXG4gICAgICAgICAgICAgOiBfY3VycnkxKGZ1bmN0aW9uKF9iKSB7IHJldHVybiBmbihhLCBfYik7IH0pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIF9pc1BsYWNlaG9sZGVyKGEpICYmIF9pc1BsYWNlaG9sZGVyKGIpID8gZjJcbiAgICAgICAgICAgICA6IF9pc1BsYWNlaG9sZGVyKGEpID8gX2N1cnJ5MShmdW5jdGlvbihfYSkgeyByZXR1cm4gZm4oX2EsIGIpOyB9KVxuICAgICAgICAgICAgIDogX2lzUGxhY2Vob2xkZXIoYikgPyBfY3VycnkxKGZ1bmN0aW9uKF9iKSB7IHJldHVybiBmbihhLCBfYik7IH0pXG4gICAgICAgICAgICAgOiBmbihhLCBiKTtcbiAgICB9XG4gIH07XG59O1xuIiwidmFyIF9pc1BsYWNlaG9sZGVyID0gcmVxdWlyZSgnLi9faXNQbGFjZWhvbGRlcicpO1xuXG5cbi8qKlxuICogT3B0aW1pemVkIGludGVybmFsIG9uZS1hcml0eSBjdXJyeSBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY3VycnkuXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIGN1cnJpZWQgZnVuY3Rpb24uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2N1cnJ5MShmbikge1xuICByZXR1cm4gZnVuY3Rpb24gZjEoYSkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwIHx8IF9pc1BsYWNlaG9sZGVyKGEpKSB7XG4gICAgICByZXR1cm4gZjE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfTtcbn07XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBpc0J1ZmZlciA9IHJlcXVpcmUoJ2lzLWJ1ZmZlcicpO1xuXG4vKmdsb2JhbCB0b1N0cmluZzp0cnVlKi9cblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Zvcm1EYXRhKHZhbCkge1xuICByZXR1cm4gKHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcpICYmICh2YWwgaW5zdGFuY2VvZiBGb3JtRGF0YSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKHZhbC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0RhdGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0ZpbGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZpbGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Jsb2IodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEJsb2JdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyZWFtKHZhbCkge1xuICByZXR1cm4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VSTFNlYXJjaFBhcmFtcyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnICYmIHZhbCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcztcbn1cblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiB0cmltKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMqLywgJycpLnJlcGxhY2UoL1xccyokLywgJycpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqL1xuZnVuY3Rpb24gaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ1JlYWN0TmF0aXZlJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuICApO1xufVxuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbikge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgJiYgIWlzQXJyYXkob2JqKSkge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKHR5cGVvZiByZXN1bHRba2V5XSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2UocmVzdWx0W2tleV0sIHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChhLCBiLCB0aGlzQXJnKSB7XG4gIGZvckVhY2goYiwgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodGhpc0FyZyAmJiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQXJyYXk6IGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YTogaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXc6IGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZzogaXNTdHJpbmcsXG4gIGlzTnVtYmVyOiBpc051bWJlcixcbiAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gIGlzRGF0ZTogaXNEYXRlLFxuICBpc0ZpbGU6IGlzRmlsZSxcbiAgaXNCbG9iOiBpc0Jsb2IsXG4gIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtOiBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXM6IGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1N0YW5kYXJkQnJvd3NlckVudjogaXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIGZvckVhY2g6IGZvckVhY2gsXG4gIG1lcmdlOiBtZXJnZSxcbiAgZXh0ZW5kOiBleHRlbmQsXG4gIHRyaW06IHRyaW1cbn07XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJ2YXIgYmFzZUlzTmF0aXZlID0gcmVxdWlyZSgnLi9fYmFzZUlzTmF0aXZlJyksXG4gICAgZ2V0VmFsdWUgPSByZXF1aXJlKCcuL19nZXRWYWx1ZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5hdGl2ZTtcbiIsIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOih0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6dHx8c2VsZikuZGF5anM9ZSgpfSh0aGlzLChmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciB0PTFlMyxlPTZlNCxuPTM2ZTUscj1cIm1pbGxpc2Vjb25kXCIsaT1cInNlY29uZFwiLHM9XCJtaW51dGVcIix1PVwiaG91clwiLGE9XCJkYXlcIixvPVwid2Vla1wiLGM9XCJtb250aFwiLGY9XCJxdWFydGVyXCIsaD1cInllYXJcIixkPVwiZGF0ZVwiLGw9XCJJbnZhbGlkIERhdGVcIiwkPS9eKFxcZHs0fSlbLS9dPyhcXGR7MSwyfSk/Wy0vXT8oXFxkezAsMn0pW1R0XFxzXSooXFxkezEsMn0pPzo/KFxcZHsxLDJ9KT86PyhcXGR7MSwyfSk/Wy46XT8oXFxkKyk/JC8seT0vXFxbKFteXFxdXSspXXxZezEsNH18TXsxLDR9fER7MSwyfXxkezEsNH18SHsxLDJ9fGh7MSwyfXxhfEF8bXsxLDJ9fHN7MSwyfXxaezEsMn18U1NTL2csTT17bmFtZTpcImVuXCIsd2Vla2RheXM6XCJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24odCl7dmFyIGU9W1widGhcIixcInN0XCIsXCJuZFwiLFwicmRcIl0sbj10JTEwMDtyZXR1cm5cIltcIit0KyhlWyhuLTIwKSUxMF18fGVbbl18fGVbMF0pK1wiXVwifX0sbT1mdW5jdGlvbih0LGUsbil7dmFyIHI9U3RyaW5nKHQpO3JldHVybiFyfHxyLmxlbmd0aD49ZT90OlwiXCIrQXJyYXkoZSsxLXIubGVuZ3RoKS5qb2luKG4pK3R9LHY9e3M6bSx6OmZ1bmN0aW9uKHQpe3ZhciBlPS10LnV0Y09mZnNldCgpLG49TWF0aC5hYnMoZSkscj1NYXRoLmZsb29yKG4vNjApLGk9biU2MDtyZXR1cm4oZTw9MD9cIitcIjpcIi1cIikrbShyLDIsXCIwXCIpK1wiOlwiK20oaSwyLFwiMFwiKX0sbTpmdW5jdGlvbiB0KGUsbil7aWYoZS5kYXRlKCk8bi5kYXRlKCkpcmV0dXJuLXQobixlKTt2YXIgcj0xMioobi55ZWFyKCktZS55ZWFyKCkpKyhuLm1vbnRoKCktZS5tb250aCgpKSxpPWUuY2xvbmUoKS5hZGQocixjKSxzPW4taTwwLHU9ZS5jbG9uZSgpLmFkZChyKyhzPy0xOjEpLGMpO3JldHVybisoLShyKyhuLWkpLyhzP2ktdTp1LWkpKXx8MCl9LGE6ZnVuY3Rpb24odCl7cmV0dXJuIHQ8MD9NYXRoLmNlaWwodCl8fDA6TWF0aC5mbG9vcih0KX0scDpmdW5jdGlvbih0KXtyZXR1cm57TTpjLHk6aCx3Om8sZDphLEQ6ZCxoOnUsbTpzLHM6aSxtczpyLFE6Zn1bdF18fFN0cmluZyh0fHxcIlwiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL3MkLyxcIlwiKX0sdTpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dH19LGc9XCJlblwiLEQ9e307RFtnXT1NO3ZhciBwPVwiJGlzRGF5anNPYmplY3RcIixTPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgX3x8ISghdHx8IXRbcF0pfSx3PWZ1bmN0aW9uIHQoZSxuLHIpe3ZhciBpO2lmKCFlKXJldHVybiBnO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXt2YXIgcz1lLnRvTG93ZXJDYXNlKCk7RFtzXSYmKGk9cyksbiYmKERbc109bixpPXMpO3ZhciB1PWUuc3BsaXQoXCItXCIpO2lmKCFpJiZ1Lmxlbmd0aD4xKXJldHVybiB0KHVbMF0pfWVsc2V7dmFyIGE9ZS5uYW1lO0RbYV09ZSxpPWF9cmV0dXJuIXImJmkmJihnPWkpLGl8fCFyJiZnfSxPPWZ1bmN0aW9uKHQsZSl7aWYoUyh0KSlyZXR1cm4gdC5jbG9uZSgpO3ZhciBuPVwib2JqZWN0XCI9PXR5cGVvZiBlP2U6e307cmV0dXJuIG4uZGF0ZT10LG4uYXJncz1hcmd1bWVudHMsbmV3IF8obil9LGI9djtiLmw9dyxiLmk9UyxiLnc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTyh0LHtsb2NhbGU6ZS4kTCx1dGM6ZS4kdSx4OmUuJHgsJG9mZnNldDplLiRvZmZzZXR9KX07dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiBNKHQpe3RoaXMuJEw9dyh0LmxvY2FsZSxudWxsLCEwKSx0aGlzLnBhcnNlKHQpLHRoaXMuJHg9dGhpcy4keHx8dC54fHx7fSx0aGlzW3BdPSEwfXZhciBtPU0ucHJvdG90eXBlO3JldHVybiBtLnBhcnNlPWZ1bmN0aW9uKHQpe3RoaXMuJGQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRlLG49dC51dGM7aWYobnVsbD09PWUpcmV0dXJuIG5ldyBEYXRlKE5hTik7aWYoYi51KGUpKXJldHVybiBuZXcgRGF0ZTtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gbmV3IERhdGUoZSk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJiEvWiQvaS50ZXN0KGUpKXt2YXIgcj1lLm1hdGNoKCQpO2lmKHIpe3ZhciBpPXJbMl0tMXx8MCxzPShyWzddfHxcIjBcIikuc3Vic3RyaW5nKDAsMyk7cmV0dXJuIG4/bmV3IERhdGUoRGF0ZS5VVEMoclsxXSxpLHJbM118fDEscls0XXx8MCxyWzVdfHwwLHJbNl18fDAscykpOm5ldyBEYXRlKHJbMV0saSxyWzNdfHwxLHJbNF18fDAscls1XXx8MCxyWzZdfHwwLHMpfX1yZXR1cm4gbmV3IERhdGUoZSl9KHQpLHRoaXMuaW5pdCgpfSxtLmluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRkO3RoaXMuJHk9dC5nZXRGdWxsWWVhcigpLHRoaXMuJE09dC5nZXRNb250aCgpLHRoaXMuJEQ9dC5nZXREYXRlKCksdGhpcy4kVz10LmdldERheSgpLHRoaXMuJEg9dC5nZXRIb3VycygpLHRoaXMuJG09dC5nZXRNaW51dGVzKCksdGhpcy4kcz10LmdldFNlY29uZHMoKSx0aGlzLiRtcz10LmdldE1pbGxpc2Vjb25kcygpfSxtLiR1dGlscz1mdW5jdGlvbigpe3JldHVybiBifSxtLmlzVmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4hKHRoaXMuJGQudG9TdHJpbmcoKT09PWwpfSxtLmlzU2FtZT1mdW5jdGlvbih0LGUpe3ZhciBuPU8odCk7cmV0dXJuIHRoaXMuc3RhcnRPZihlKTw9biYmbjw9dGhpcy5lbmRPZihlKX0sbS5pc0FmdGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE8odCk8dGhpcy5zdGFydE9mKGUpfSxtLmlzQmVmb3JlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZW5kT2YoZSk8Tyh0KX0sbS4kZz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGIudSh0KT90aGlzW2VdOnRoaXMuc2V0KG4sdCl9LG0udW5peD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpLzFlMyl9LG0udmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLmdldFRpbWUoKX0sbS5zdGFydE9mPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPSEhYi51KGUpfHxlLGY9Yi5wKHQpLGw9ZnVuY3Rpb24odCxlKXt2YXIgaT1iLncobi4kdT9EYXRlLlVUQyhuLiR5LGUsdCk6bmV3IERhdGUobi4keSxlLHQpLG4pO3JldHVybiByP2k6aS5lbmRPZihhKX0sJD1mdW5jdGlvbih0LGUpe3JldHVybiBiLncobi50b0RhdGUoKVt0XS5hcHBseShuLnRvRGF0ZShcInNcIiksKHI/WzAsMCwwLDBdOlsyMyw1OSw1OSw5OTldKS5zbGljZShlKSksbil9LHk9dGhpcy4kVyxNPXRoaXMuJE0sbT10aGlzLiRELHY9XCJzZXRcIisodGhpcy4kdT9cIlVUQ1wiOlwiXCIpO3N3aXRjaChmKXtjYXNlIGg6cmV0dXJuIHI/bCgxLDApOmwoMzEsMTEpO2Nhc2UgYzpyZXR1cm4gcj9sKDEsTSk6bCgwLE0rMSk7Y2FzZSBvOnZhciBnPXRoaXMuJGxvY2FsZSgpLndlZWtTdGFydHx8MCxEPSh5PGc/eSs3OnkpLWc7cmV0dXJuIGwocj9tLUQ6bSsoNi1EKSxNKTtjYXNlIGE6Y2FzZSBkOnJldHVybiAkKHYrXCJIb3Vyc1wiLDApO2Nhc2UgdTpyZXR1cm4gJCh2K1wiTWludXRlc1wiLDEpO2Nhc2UgczpyZXR1cm4gJCh2K1wiU2Vjb25kc1wiLDIpO2Nhc2UgaTpyZXR1cm4gJCh2K1wiTWlsbGlzZWNvbmRzXCIsMyk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5jbG9uZSgpfX0sbS5lbmRPZj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdGFydE9mKHQsITEpfSxtLiRzZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbixvPWIucCh0KSxmPVwic2V0XCIrKHRoaXMuJHU/XCJVVENcIjpcIlwiKSxsPShuPXt9LG5bYV09ZitcIkRhdGVcIixuW2RdPWYrXCJEYXRlXCIsbltjXT1mK1wiTW9udGhcIixuW2hdPWYrXCJGdWxsWWVhclwiLG5bdV09ZitcIkhvdXJzXCIsbltzXT1mK1wiTWludXRlc1wiLG5baV09ZitcIlNlY29uZHNcIixuW3JdPWYrXCJNaWxsaXNlY29uZHNcIixuKVtvXSwkPW89PT1hP3RoaXMuJEQrKGUtdGhpcy4kVyk6ZTtpZihvPT09Y3x8bz09PWgpe3ZhciB5PXRoaXMuY2xvbmUoKS5zZXQoZCwxKTt5LiRkW2xdKCQpLHkuaW5pdCgpLHRoaXMuJGQ9eS5zZXQoZCxNYXRoLm1pbih0aGlzLiRELHkuZGF5c0luTW9udGgoKSkpLiRkfWVsc2UgbCYmdGhpcy4kZFtsXSgkKTtyZXR1cm4gdGhpcy5pbml0KCksdGhpc30sbS5zZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSgpLiRzZXQodCxlKX0sbS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbYi5wKHQpXSgpfSxtLmFkZD1mdW5jdGlvbihyLGYpe3ZhciBkLGw9dGhpcztyPU51bWJlcihyKTt2YXIgJD1iLnAoZikseT1mdW5jdGlvbih0KXt2YXIgZT1PKGwpO3JldHVybiBiLncoZS5kYXRlKGUuZGF0ZSgpK01hdGgucm91bmQodCpyKSksbCl9O2lmKCQ9PT1jKXJldHVybiB0aGlzLnNldChjLHRoaXMuJE0rcik7aWYoJD09PWgpcmV0dXJuIHRoaXMuc2V0KGgsdGhpcy4keStyKTtpZigkPT09YSlyZXR1cm4geSgxKTtpZigkPT09bylyZXR1cm4geSg3KTt2YXIgTT0oZD17fSxkW3NdPWUsZFt1XT1uLGRbaV09dCxkKVskXXx8MSxtPXRoaXMuJGQuZ2V0VGltZSgpK3IqTTtyZXR1cm4gYi53KG0sdGhpcyl9LG0uc3VidHJhY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hZGQoLTEqdCxlKX0sbS5mb3JtYXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuJGxvY2FsZSgpO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbi5pbnZhbGlkRGF0ZXx8bDt2YXIgcj10fHxcIllZWVktTU0tRERUSEg6bW06c3NaXCIsaT1iLnoodGhpcykscz10aGlzLiRILHU9dGhpcy4kbSxhPXRoaXMuJE0sbz1uLndlZWtkYXlzLGM9bi5tb250aHMsZj1uLm1lcmlkaWVtLGg9ZnVuY3Rpb24odCxuLGkscyl7cmV0dXJuIHQmJih0W25dfHx0KGUscikpfHxpW25dLnNsaWNlKDAscyl9LGQ9ZnVuY3Rpb24odCl7cmV0dXJuIGIucyhzJTEyfHwxMix0LFwiMFwiKX0sJD1mfHxmdW5jdGlvbih0LGUsbil7dmFyIHI9dDwxMj9cIkFNXCI6XCJQTVwiO3JldHVybiBuP3IudG9Mb3dlckNhc2UoKTpyfTtyZXR1cm4gci5yZXBsYWNlKHksKGZ1bmN0aW9uKHQscil7cmV0dXJuIHJ8fGZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlXCJZWVwiOnJldHVybiBTdHJpbmcoZS4keSkuc2xpY2UoLTIpO2Nhc2VcIllZWVlcIjpyZXR1cm4gYi5zKGUuJHksNCxcIjBcIik7Y2FzZVwiTVwiOnJldHVybiBhKzE7Y2FzZVwiTU1cIjpyZXR1cm4gYi5zKGErMSwyLFwiMFwiKTtjYXNlXCJNTU1cIjpyZXR1cm4gaChuLm1vbnRoc1Nob3J0LGEsYywzKTtjYXNlXCJNTU1NXCI6cmV0dXJuIGgoYyxhKTtjYXNlXCJEXCI6cmV0dXJuIGUuJEQ7Y2FzZVwiRERcIjpyZXR1cm4gYi5zKGUuJEQsMixcIjBcIik7Y2FzZVwiZFwiOnJldHVybiBTdHJpbmcoZS4kVyk7Y2FzZVwiZGRcIjpyZXR1cm4gaChuLndlZWtkYXlzTWluLGUuJFcsbywyKTtjYXNlXCJkZGRcIjpyZXR1cm4gaChuLndlZWtkYXlzU2hvcnQsZS4kVyxvLDMpO2Nhc2VcImRkZGRcIjpyZXR1cm4gb1tlLiRXXTtjYXNlXCJIXCI6cmV0dXJuIFN0cmluZyhzKTtjYXNlXCJISFwiOnJldHVybiBiLnMocywyLFwiMFwiKTtjYXNlXCJoXCI6cmV0dXJuIGQoMSk7Y2FzZVwiaGhcIjpyZXR1cm4gZCgyKTtjYXNlXCJhXCI6cmV0dXJuICQocyx1LCEwKTtjYXNlXCJBXCI6cmV0dXJuICQocyx1LCExKTtjYXNlXCJtXCI6cmV0dXJuIFN0cmluZyh1KTtjYXNlXCJtbVwiOnJldHVybiBiLnModSwyLFwiMFwiKTtjYXNlXCJzXCI6cmV0dXJuIFN0cmluZyhlLiRzKTtjYXNlXCJzc1wiOnJldHVybiBiLnMoZS4kcywyLFwiMFwiKTtjYXNlXCJTU1NcIjpyZXR1cm4gYi5zKGUuJG1zLDMsXCIwXCIpO2Nhc2VcIlpcIjpyZXR1cm4gaX1yZXR1cm4gbnVsbH0odCl8fGkucmVwbGFjZShcIjpcIixcIlwiKX0pKX0sbS51dGNPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gMTUqLU1hdGgucm91bmQodGhpcy4kZC5nZXRUaW1lem9uZU9mZnNldCgpLzE1KX0sbS5kaWZmPWZ1bmN0aW9uKHIsZCxsKXt2YXIgJCx5PXRoaXMsTT1iLnAoZCksbT1PKHIpLHY9KG0udXRjT2Zmc2V0KCktdGhpcy51dGNPZmZzZXQoKSkqZSxnPXRoaXMtbSxEPWZ1bmN0aW9uKCl7cmV0dXJuIGIubSh5LG0pfTtzd2l0Y2goTSl7Y2FzZSBoOiQ9RCgpLzEyO2JyZWFrO2Nhc2UgYzokPUQoKTticmVhaztjYXNlIGY6JD1EKCkvMzticmVhaztjYXNlIG86JD0oZy12KS82MDQ4ZTU7YnJlYWs7Y2FzZSBhOiQ9KGctdikvODY0ZTU7YnJlYWs7Y2FzZSB1OiQ9Zy9uO2JyZWFrO2Nhc2UgczokPWcvZTticmVhaztjYXNlIGk6JD1nL3Q7YnJlYWs7ZGVmYXVsdDokPWd9cmV0dXJuIGw/JDpiLmEoJCl9LG0uZGF5c0luTW9udGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmRPZihjKS4kRH0sbS4kbG9jYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIERbdGhpcy4kTF19LG0ubG9jYWxlPWZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuIHRoaXMuJEw7dmFyIG49dGhpcy5jbG9uZSgpLHI9dyh0LGUsITApO3JldHVybiByJiYobi4kTD1yKSxufSxtLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGIudyh0aGlzLiRkLHRoaXMpfSxtLnRvRGF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LG0udG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMudG9JU09TdHJpbmcoKTpudWxsfSxtLnRvSVNPU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9JU09TdHJpbmcoKX0sbS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvVVRDU3RyaW5nKCl9LE19KCksaz1fLnByb3RvdHlwZTtyZXR1cm4gTy5wcm90b3R5cGU9ayxbW1wiJG1zXCIscl0sW1wiJHNcIixpXSxbXCIkbVwiLHNdLFtcIiRIXCIsdV0sW1wiJFdcIixhXSxbXCIkTVwiLGNdLFtcIiR5XCIsaF0sW1wiJERcIixkXV0uZm9yRWFjaCgoZnVuY3Rpb24odCl7a1t0WzFdXT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy4kZyhlLHRbMF0sdFsxXSl9fSkpLE8uZXh0ZW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuJGl8fCh0KGUsXyxPKSx0LiRpPSEwKSxPfSxPLmxvY2FsZT13LE8uaXNEYXlqcz1TLE8udW5peD1mdW5jdGlvbih0KXtyZXR1cm4gTygxZTMqdCl9LE8uZW49RFtnXSxPLkxzPUQsTy5wPXt9LE99KSk7IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfYXJpdHkobiwgZm4pIHtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbiAgc3dpdGNoIChuKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuY3Rpb24oKSB7IHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKGEwKSB7IHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uKGEwLCBhMSkgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbihhMCwgYTEsIGEyKSB7IHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9uKGEwLCBhMSwgYTIsIGEzKSB7IHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICAgIGNhc2UgNTogcmV0dXJuIGZ1bmN0aW9uKGEwLCBhMSwgYTIsIGEzLCBhNCkgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBjYXNlIDY6IHJldHVybiBmdW5jdGlvbihhMCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7IHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICAgIGNhc2UgNzogcmV0dXJuIGZ1bmN0aW9uKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KSB7IHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICAgIGNhc2UgODogcmV0dXJuIGZ1bmN0aW9uKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNykgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBjYXNlIDk6IHJldHVybiBmdW5jdGlvbihhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KSB7IHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICAgIGNhc2UgMTA6IHJldHVybiBmdW5jdGlvbihhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSkgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIF9hcml0eSBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgbm8gZ3JlYXRlciB0aGFuIHRlbicpO1xuICB9XG59O1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGdldFJhd1RhZyA9IHJlcXVpcmUoJy4vX2dldFJhd1RhZycpLFxuICAgIG9iamVjdFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fb2JqZWN0VG9TdHJpbmcnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldFRhZztcbiIsInZhciBjcmVhdGVXcmFwID0gcmVxdWlyZSgnLi9fY3JlYXRlV3JhcCcpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0NVUlJZX0ZMQUcgPSA4O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYXJndW1lbnRzIG9mIGBmdW5jYCBhbmQgZWl0aGVyIGludm9rZXNcbiAqIGBmdW5jYCByZXR1cm5pbmcgaXRzIHJlc3VsdCwgaWYgYXQgbGVhc3QgYGFyaXR5YCBudW1iZXIgb2YgYXJndW1lbnRzIGhhdmVcbiAqIGJlZW4gcHJvdmlkZWQsIG9yIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIHJlbWFpbmluZyBgZnVuY2BcbiAqIGFyZ3VtZW50cywgYW5kIHNvIG9uLiBUaGUgYXJpdHkgb2YgYGZ1bmNgIG1heSBiZSBzcGVjaWZpZWQgaWYgYGZ1bmMubGVuZ3RoYFxuICogaXMgbm90IHN1ZmZpY2llbnQuXG4gKlxuICogVGhlIGBfLmN1cnJ5LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWMgYnVpbGRzLFxuICogbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcHJvdmlkZWQgYXJndW1lbnRzLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBjdXJyaWVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuMC4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGN1cnJ5LlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eT1mdW5jLmxlbmd0aF0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjdXJyaWVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYWJjID0gZnVuY3Rpb24oYSwgYiwgYykge1xuICogICByZXR1cm4gW2EsIGIsIGNdO1xuICogfTtcbiAqXG4gKiB2YXIgY3VycmllZCA9IF8uY3VycnkoYWJjKTtcbiAqXG4gKiBjdXJyaWVkKDEpKDIpKDMpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKlxuICogY3VycmllZCgxLCAyKSgzKTtcbiAqIC8vID0+IFsxLCAyLCAzXVxuICpcbiAqIGN1cnJpZWQoMSwgMiwgMyk7XG4gKiAvLyA9PiBbMSwgMiwgM11cbiAqXG4gKiAvLyBDdXJyaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICogY3VycmllZCgxKShfLCAzKSgyKTtcbiAqIC8vID0+IFsxLCAyLCAzXVxuICovXG5mdW5jdGlvbiBjdXJyeShmdW5jLCBhcml0eSwgZ3VhcmQpIHtcbiAgYXJpdHkgPSBndWFyZCA/IHVuZGVmaW5lZCA6IGFyaXR5O1xuICB2YXIgcmVzdWx0ID0gY3JlYXRlV3JhcChmdW5jLCBXUkFQX0NVUlJZX0ZMQUcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhcml0eSk7XG4gIHJlc3VsdC5wbGFjZWhvbGRlciA9IGN1cnJ5LnBsYWNlaG9sZGVyO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5jdXJyeS5wbGFjZWhvbGRlciA9IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGN1cnJ5O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN0cmluZ2AgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN0cmluZywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3RyaW5nKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3RyaW5nKDEpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fFxuICAgICghaXNBcnJheSh2YWx1ZSkgJiYgaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzdHJpbmdUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaW5nO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfaGFzKHByb3AsIG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59O1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL19jdXJyeTEnKTtcbnZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9fY3VycnkyJyk7XG52YXIgX2lzUGxhY2Vob2xkZXIgPSByZXF1aXJlKCcuL19pc1BsYWNlaG9sZGVyJyk7XG5cblxuLyoqXG4gKiBPcHRpbWl6ZWQgaW50ZXJuYWwgdGhyZWUtYXJpdHkgY3VycnkgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGN1cnJ5LlxuICogQHJldHVybiB7RnVuY3Rpb259IFRoZSBjdXJyaWVkIGZ1bmN0aW9uLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9jdXJyeTMoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGYzKGEsIGIsIGMpIHtcbiAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgcmV0dXJuIGYzO1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gX2lzUGxhY2Vob2xkZXIoYSkgPyBmM1xuICAgICAgICAgICAgIDogX2N1cnJ5MihmdW5jdGlvbihfYiwgX2MpIHsgcmV0dXJuIGZuKGEsIF9iLCBfYyk7IH0pO1xuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gX2lzUGxhY2Vob2xkZXIoYSkgJiYgX2lzUGxhY2Vob2xkZXIoYikgPyBmM1xuICAgICAgICAgICAgIDogX2lzUGxhY2Vob2xkZXIoYSkgPyBfY3VycnkyKGZ1bmN0aW9uKF9hLCBfYykgeyByZXR1cm4gZm4oX2EsIGIsIF9jKTsgfSlcbiAgICAgICAgICAgICA6IF9pc1BsYWNlaG9sZGVyKGIpID8gX2N1cnJ5MihmdW5jdGlvbihfYiwgX2MpIHsgcmV0dXJuIGZuKGEsIF9iLCBfYyk7IH0pXG4gICAgICAgICAgICAgOiBfY3VycnkxKGZ1bmN0aW9uKF9jKSB7IHJldHVybiBmbihhLCBiLCBfYyk7IH0pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIF9pc1BsYWNlaG9sZGVyKGEpICYmIF9pc1BsYWNlaG9sZGVyKGIpICYmIF9pc1BsYWNlaG9sZGVyKGMpID8gZjNcbiAgICAgICAgICAgICA6IF9pc1BsYWNlaG9sZGVyKGEpICYmIF9pc1BsYWNlaG9sZGVyKGIpID8gX2N1cnJ5MihmdW5jdGlvbihfYSwgX2IpIHsgcmV0dXJuIGZuKF9hLCBfYiwgYyk7IH0pXG4gICAgICAgICAgICAgOiBfaXNQbGFjZWhvbGRlcihhKSAmJiBfaXNQbGFjZWhvbGRlcihjKSA/IF9jdXJyeTIoZnVuY3Rpb24oX2EsIF9jKSB7IHJldHVybiBmbihfYSwgYiwgX2MpOyB9KVxuICAgICAgICAgICAgIDogX2lzUGxhY2Vob2xkZXIoYikgJiYgX2lzUGxhY2Vob2xkZXIoYykgPyBfY3VycnkyKGZ1bmN0aW9uKF9iLCBfYykgeyByZXR1cm4gZm4oYSwgX2IsIF9jKTsgfSlcbiAgICAgICAgICAgICA6IF9pc1BsYWNlaG9sZGVyKGEpID8gX2N1cnJ5MShmdW5jdGlvbihfYSkgeyByZXR1cm4gZm4oX2EsIGIsIGMpOyB9KVxuICAgICAgICAgICAgIDogX2lzUGxhY2Vob2xkZXIoYikgPyBfY3VycnkxKGZ1bmN0aW9uKF9iKSB7IHJldHVybiBmbihhLCBfYiwgYyk7IH0pXG4gICAgICAgICAgICAgOiBfaXNQbGFjZWhvbGRlcihjKSA/IF9jdXJyeTEoZnVuY3Rpb24oX2MpIHsgcmV0dXJuIGZuKGEsIGIsIF9jKTsgfSlcbiAgICAgICAgICAgICA6IGZuKGEsIGIsIGMpO1xuICAgIH1cbiAgfTtcbn07XG4iLCJ2YXIgX2FyaXR5ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fYXJpdHknKTtcbnZhciBfY3VycnkxID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkxJyk7XG52YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MicpO1xudmFyIF9jdXJyeU4gPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeU4nKTtcblxuXG4vKipcbiAqIFJldHVybnMgYSBjdXJyaWVkIGVxdWl2YWxlbnQgb2YgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uLCB3aXRoIHRoZSBzcGVjaWZpZWRcbiAqIGFyaXR5LiBUaGUgY3VycmllZCBmdW5jdGlvbiBoYXMgdHdvIHVudXN1YWwgY2FwYWJpbGl0aWVzLiBGaXJzdCwgaXRzXG4gKiBhcmd1bWVudHMgbmVlZG4ndCBiZSBwcm92aWRlZCBvbmUgYXQgYSB0aW1lLiBJZiBgZ2AgaXMgYFIuY3VycnlOKDMsIGYpYCwgdGhlXG4gKiBmb2xsb3dpbmcgYXJlIGVxdWl2YWxlbnQ6XG4gKlxuICogICAtIGBnKDEpKDIpKDMpYFxuICogICAtIGBnKDEpKDIsIDMpYFxuICogICAtIGBnKDEsIDIpKDMpYFxuICogICAtIGBnKDEsIDIsIDMpYFxuICpcbiAqIFNlY29uZGx5LCB0aGUgc3BlY2lhbCBwbGFjZWhvbGRlciB2YWx1ZSBgUi5fX2AgbWF5IGJlIHVzZWQgdG8gc3BlY2lmeVxuICogXCJnYXBzXCIsIGFsbG93aW5nIHBhcnRpYWwgYXBwbGljYXRpb24gb2YgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyxcbiAqIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgcG9zaXRpb25zLiBJZiBgZ2AgaXMgYXMgYWJvdmUgYW5kIGBfYCBpcyBgUi5fX2AsIHRoZVxuICogZm9sbG93aW5nIGFyZSBlcXVpdmFsZW50OlxuICpcbiAqICAgLSBgZygxLCAyLCAzKWBcbiAqICAgLSBgZyhfLCAyLCAzKSgxKWBcbiAqICAgLSBgZyhfLCBfLCAzKSgxKSgyKWBcbiAqICAgLSBgZyhfLCBfLCAzKSgxLCAyKWBcbiAqICAgLSBgZyhfLCAyKSgxKSgzKWBcbiAqICAgLSBgZyhfLCAyKSgxLCAzKWBcbiAqICAgLSBgZyhfLCAyKShfLCAzKSgxKWBcbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC41LjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHNpZyBOdW1iZXIgLT4gKCogLT4gYSkgLT4gKCogLT4gYSlcbiAqIEBwYXJhbSB7TnVtYmVyfSBsZW5ndGggVGhlIGFyaXR5IGZvciB0aGUgcmV0dXJuZWQgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY3VycnkuXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQSBuZXcsIGN1cnJpZWQgZnVuY3Rpb24uXG4gKiBAc2VlIFIuY3VycnlcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgc3VtQXJncyA9ICguLi5hcmdzKSA9PiBSLnN1bShhcmdzKTtcbiAqXG4gKiAgICAgIHZhciBjdXJyaWVkQWRkRm91ck51bWJlcnMgPSBSLmN1cnJ5Tig0LCBzdW1BcmdzKTtcbiAqICAgICAgdmFyIGYgPSBjdXJyaWVkQWRkRm91ck51bWJlcnMoMSwgMik7XG4gKiAgICAgIHZhciBnID0gZigzKTtcbiAqICAgICAgZyg0KTsgLy89PiAxMFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoZnVuY3Rpb24gY3VycnlOKGxlbmd0aCwgZm4pIHtcbiAgaWYgKGxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBfY3VycnkxKGZuKTtcbiAgfVxuICByZXR1cm4gX2FyaXR5KGxlbmd0aCwgX2N1cnJ5TihsZW5ndGgsIFtdLCBmbikpO1xufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9pc1BsYWNlaG9sZGVyKGEpIHtcbiAgcmV0dXJuIGEgIT0gbnVsbCAmJlxuICAgICAgICAgdHlwZW9mIGEgPT09ICdvYmplY3QnICYmXG4gICAgICAgICBhWydAQGZ1bmN0aW9uYWwvcGxhY2Vob2xkZXInXSA9PT0gdHJ1ZTtcbn07XG4iLCJ2YXIgX3h3cmFwID0gcmVxdWlyZSgnLi9feHdyYXAnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vYmluZCcpO1xudmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaXNBcnJheUxpa2UnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gX2FycmF5UmVkdWNlKHhmLCBhY2MsIGxpc3QpIHtcbiAgICB2YXIgaWR4ID0gMDtcbiAgICB2YXIgbGVuID0gbGlzdC5sZW5ndGg7XG4gICAgd2hpbGUgKGlkeCA8IGxlbikge1xuICAgICAgYWNjID0geGZbJ0BAdHJhbnNkdWNlci9zdGVwJ10oYWNjLCBsaXN0W2lkeF0pO1xuICAgICAgaWYgKGFjYyAmJiBhY2NbJ0BAdHJhbnNkdWNlci9yZWR1Y2VkJ10pIHtcbiAgICAgICAgYWNjID0gYWNjWydAQHRyYW5zZHVjZXIvdmFsdWUnXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZHggKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIHhmWydAQHRyYW5zZHVjZXIvcmVzdWx0J10oYWNjKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9pdGVyYWJsZVJlZHVjZSh4ZiwgYWNjLCBpdGVyKSB7XG4gICAgdmFyIHN0ZXAgPSBpdGVyLm5leHQoKTtcbiAgICB3aGlsZSAoIXN0ZXAuZG9uZSkge1xuICAgICAgYWNjID0geGZbJ0BAdHJhbnNkdWNlci9zdGVwJ10oYWNjLCBzdGVwLnZhbHVlKTtcbiAgICAgIGlmIChhY2MgJiYgYWNjWydAQHRyYW5zZHVjZXIvcmVkdWNlZCddKSB7XG4gICAgICAgIGFjYyA9IGFjY1snQEB0cmFuc2R1Y2VyL3ZhbHVlJ107XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc3RlcCA9IGl0ZXIubmV4dCgpO1xuICAgIH1cbiAgICByZXR1cm4geGZbJ0BAdHJhbnNkdWNlci9yZXN1bHQnXShhY2MpO1xuICB9XG5cbiAgZnVuY3Rpb24gX21ldGhvZFJlZHVjZSh4ZiwgYWNjLCBvYmopIHtcbiAgICByZXR1cm4geGZbJ0BAdHJhbnNkdWNlci9yZXN1bHQnXShvYmoucmVkdWNlKGJpbmQoeGZbJ0BAdHJhbnNkdWNlci9zdGVwJ10sIHhmKSwgYWNjKSk7XG4gIH1cblxuICB2YXIgc3ltSXRlcmF0b3IgPSAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcpID8gU3ltYm9sLml0ZXJhdG9yIDogJ0BAaXRlcmF0b3InO1xuICByZXR1cm4gZnVuY3Rpb24gX3JlZHVjZShmbiwgYWNjLCBsaXN0KSB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZm4gPSBfeHdyYXAoZm4pO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheUxpa2UobGlzdCkpIHtcbiAgICAgIHJldHVybiBfYXJyYXlSZWR1Y2UoZm4sIGFjYywgbGlzdCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgbGlzdC5yZWR1Y2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBfbWV0aG9kUmVkdWNlKGZuLCBhY2MsIGxpc3QpO1xuICAgIH1cbiAgICBpZiAobGlzdFtzeW1JdGVyYXRvcl0gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIF9pdGVyYWJsZVJlZHVjZShmbiwgYWNjLCBsaXN0W3N5bUl0ZXJhdG9yXSgpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBsaXN0Lm5leHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBfaXRlcmFibGVSZWR1Y2UoZm4sIGFjYywgbGlzdCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlZHVjZTogbGlzdCBtdXN0IGJlIGFycmF5IG9yIGl0ZXJhYmxlJyk7XG4gIH07XG59KCkpO1xuIiwiLyoqXG4gKiBUZXN0cyB3aGV0aGVyIG9yIG5vdCBhbiBvYmplY3QgaXMgYW4gYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSBvYmplY3QgdG8gdGVzdC5cbiAqIEByZXR1cm4ge0Jvb2xlYW59IGB0cnVlYCBpZiBgdmFsYCBpcyBhbiBhcnJheSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgX2lzQXJyYXkoW10pOyAvLz0+IHRydWVcbiAqICAgICAgX2lzQXJyYXkobnVsbCk7IC8vPT4gZmFsc2VcbiAqICAgICAgX2lzQXJyYXkoe30pOyAvLz0+IGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBfaXNBcnJheSh2YWwpIHtcbiAgcmV0dXJuICh2YWwgIT0gbnVsbCAmJlxuICAgICAgICAgIHZhbC5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheV0nKTtcbn07XG4iLCJ2YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MicpO1xudmFyIF9kaXNwYXRjaGFibGUgPSByZXF1aXJlKCcuL2ludGVybmFsL19kaXNwYXRjaGFibGUnKTtcbnZhciBfbWFwID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fbWFwJyk7XG52YXIgX3JlZHVjZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX3JlZHVjZScpO1xudmFyIF94bWFwID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9feG1hcCcpO1xudmFyIGN1cnJ5TiA9IHJlcXVpcmUoJy4vY3VycnlOJyk7XG52YXIga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG5cbi8qKlxuICogVGFrZXMgYSBmdW5jdGlvbiBhbmRcbiAqIGEgW2Z1bmN0b3JdKGh0dHBzOi8vZ2l0aHViLmNvbS9mYW50YXN5bGFuZC9mYW50YXN5LWxhbmQjZnVuY3RvciksXG4gKiBhcHBsaWVzIHRoZSBmdW5jdGlvbiB0byBlYWNoIG9mIHRoZSBmdW5jdG9yJ3MgdmFsdWVzLCBhbmQgcmV0dXJuc1xuICogYSBmdW5jdG9yIG9mIHRoZSBzYW1lIHNoYXBlLlxuICpcbiAqIFJhbWRhIHByb3ZpZGVzIHN1aXRhYmxlIGBtYXBgIGltcGxlbWVudGF0aW9ucyBmb3IgYEFycmF5YCBhbmQgYE9iamVjdGAsXG4gKiBzbyB0aGlzIGZ1bmN0aW9uIG1heSBiZSBhcHBsaWVkIHRvIGBbMSwgMiwgM11gIG9yIGB7eDogMSwgeTogMiwgejogM31gLlxuICpcbiAqIERpc3BhdGNoZXMgdG8gdGhlIGBtYXBgIG1ldGhvZCBvZiB0aGUgc2Vjb25kIGFyZ3VtZW50LCBpZiBwcmVzZW50LlxuICpcbiAqIEFjdHMgYXMgYSB0cmFuc2R1Y2VyIGlmIGEgdHJhbnNmb3JtZXIgaXMgZ2l2ZW4gaW4gbGlzdCBwb3NpdGlvbi5cbiAqXG4gKiBBbHNvIHRyZWF0cyBmdW5jdGlvbnMgYXMgZnVuY3RvcnMgYW5kIHdpbGwgY29tcG9zZSB0aGVtIHRvZ2V0aGVyLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IExpc3RcbiAqIEBzaWcgRnVuY3RvciBmID0+IChhIC0+IGIpIC0+IGYgYSAtPiBmIGJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb24gZXZlcnkgZWxlbWVudCBvZiB0aGUgaW5wdXQgYGxpc3RgLlxuICogQHBhcmFtIHtBcnJheX0gbGlzdCBUaGUgbGlzdCB0byBiZSBpdGVyYXRlZCBvdmVyLlxuICogQHJldHVybiB7QXJyYXl9IFRoZSBuZXcgbGlzdC5cbiAqIEBzZWUgUi50cmFuc2R1Y2UsIFIuYWRkSW5kZXhcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgZG91YmxlID0geCA9PiB4ICogMjtcbiAqXG4gKiAgICAgIFIubWFwKGRvdWJsZSwgWzEsIDIsIDNdKTsgLy89PiBbMiwgNCwgNl1cbiAqXG4gKiAgICAgIFIubWFwKGRvdWJsZSwge3g6IDEsIHk6IDIsIHo6IDN9KTsgLy89PiB7eDogMiwgeTogNCwgejogNn1cbiAqIEBzeW1iIFIubWFwKGYsIFthLCBiXSkgPSBbZihhKSwgZihiKV1cbiAqIEBzeW1iIFIubWFwKGYsIHsgeDogYSwgeTogYiB9KSA9IHsgeDogZihhKSwgeTogZihiKSB9XG4gKiBAc3ltYiBSLm1hcChmLCBmdW5jdG9yX28pID0gZnVuY3Rvcl9vLm1hcChmKVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoX2Rpc3BhdGNoYWJsZShbJ21hcCddLCBfeG1hcCwgZnVuY3Rpb24gbWFwKGZuLCBmdW5jdG9yKSB7XG4gIHN3aXRjaCAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGZ1bmN0b3IpKSB7XG4gICAgY2FzZSAnW29iamVjdCBGdW5jdGlvbl0nOlxuICAgICAgcmV0dXJuIGN1cnJ5TihmdW5jdG9yLmxlbmd0aCwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIGZ1bmN0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgICB9KTtcbiAgICBjYXNlICdbb2JqZWN0IE9iamVjdF0nOlxuICAgICAgcmV0dXJuIF9yZWR1Y2UoZnVuY3Rpb24oYWNjLCBrZXkpIHtcbiAgICAgICAgYWNjW2tleV0gPSBmbihmdW5jdG9yW2tleV0pO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30sIGtleXMoZnVuY3RvcikpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gX21hcChmbiwgZnVuY3Rvcik7XG4gIH1cbn0pKTtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJbmRleDtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N5bWJvbDtcbiIsInZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9LZXk7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgYW4gaW5zdGFuY2Ugb2YgYEN0b3JgIHJlZ2FyZGxlc3Mgb2ZcbiAqIHdoZXRoZXIgaXQgd2FzIGludm9rZWQgYXMgcGFydCBvZiBhIGBuZXdgIGV4cHJlc3Npb24gb3IgYnkgYGNhbGxgIG9yIGBhcHBseWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IEN0b3IgVGhlIGNvbnN0cnVjdG9yIHRvIHdyYXAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDdG9yKEN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIC8vIFVzZSBhIGBzd2l0Y2hgIHN0YXRlbWVudCB0byB3b3JrIHdpdGggY2xhc3MgY29uc3RydWN0b3JzLiBTZWVcbiAgICAvLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWZ1bmN0aW9uLW9iamVjdHMtY2FsbC10aGlzYXJndW1lbnQtYXJndW1lbnRzbGlzdFxuICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEN0b3I7XG4gICAgICBjYXNlIDE6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdKTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICBjYXNlIDQ6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0pO1xuICAgICAgY2FzZSA2OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7XG4gICAgICBjYXNlIDc6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdLCBhcmdzWzZdKTtcbiAgICB9XG4gICAgdmFyIHRoaXNCaW5kaW5nID0gYmFzZUNyZWF0ZShDdG9yLnByb3RvdHlwZSksXG4gICAgICAgIHJlc3VsdCA9IEN0b3IuYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuXG4gICAgLy8gTWltaWMgdGhlIGNvbnN0cnVjdG9yJ3MgYHJldHVybmAgYmVoYXZpb3IuXG4gICAgLy8gU2VlIGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDEzLjIuMiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogdGhpc0JpbmRpbmc7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQ3RvcjtcbiIsIi8qKiBVc2VkIGFzIHRoZSBpbnRlcm5hbCBhcmd1bWVudCBwbGFjZWhvbGRlci4gKi9cbnZhciBQTEFDRUhPTERFUiA9ICdfX2xvZGFzaF9wbGFjZWhvbGRlcl9fJztcblxuLyoqXG4gKiBSZXBsYWNlcyBhbGwgYHBsYWNlaG9sZGVyYCBlbGVtZW50cyBpbiBgYXJyYXlgIHdpdGggYW4gaW50ZXJuYWwgcGxhY2Vob2xkZXJcbiAqIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHRoZWlyIGluZGV4ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB0byByZXBsYWNlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqL1xuZnVuY3Rpb24gcmVwbGFjZUhvbGRlcnMoYXJyYXksIHBsYWNlaG9sZGVyKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKHZhbHVlID09PSBwbGFjZWhvbGRlciB8fCB2YWx1ZSA9PT0gUExBQ0VIT0xERVIpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IFBMQUNFSE9MREVSO1xuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVwbGFjZUhvbGRlcnM7XG4iLCIvKipcbiAqIExpc3Qgb2YgVVMgRHJpdmVyIGxpY2Vuc2VzIHJlZ2V4XG4gKiBBbGwgY3JlZGl0IGZvciBjb21waWxpbmcgdGhpcyBsaXN0IGdvZXMgdG8gZ2l0aHViIHVzZXIgbWlrZW1mbGVtaW5nXG4gKiBZb3UgbWF5IHNlZSBoaXMgb3JpZ2luYWwgQ0xJIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUgaGVyZTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taWtlbWZsZW1pbmcvc3RhdGUtZHJpdmVycy1saWNlbnNlLXJlZ2V4XG4gKiBBbmQgdG8gdGhlIG9yaWdpbmFsIGNvbXBpbGVyIG9mIGFsbCB0aGUgcmVnZXgsIGdpdGh1YiB1c2VyIGFkYW1idWxsbWVyXG4gKiBZb3UgbWF5IHNlZSBoaXMgb3JpZ2luYWwgYXBwcm9hY2ggdG8gdGhpcyBtb2R1bGUgKGluIFBIUCkgaGVyZTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hZGFtYnVsbG1lci9VU0RMUmVnZXhcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQUw6IFtcbiAgICB7XG4gICAgICByZWdleDogL15cXGR7Nyw4fSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTk5OTk5OTk5OIE1pbkxlbmd0aCA9IDcgTWF4TGVuZ3RoID0gOFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl1cXGR7Niw3fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOTk5OTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDhcIixcbiAgICB9LFxuICBdLFxuICBBSzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZHs3fSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTk5OTk5OTk4gTWluTGVuZ3RoID0gNyBNYXhMZW5ndGggPSA3XCIsXG4gICAgfSxcbiAgXSxcbiAgQVo6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZHs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOTk5OTk5OTiBNaW5MZW5ndGggPSA5IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIEFSOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OTiBNaW5MZW5ndGggPSA5IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezh9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQU5OTk5OTk5OIE1pbkxlbmd0aCA9IDkgTWF4TGVuZ3RoID0gOVwiLFxuICAgIH0sXG4gIF0sXG4gIENBOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXs3fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA3IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBDTzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXszLDZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQU5OTk5OTiBtaW4gbGVuZ3RoIDQgbWF4IDdcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezJ9WzAtOV17MSw1fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFBTk5OTk4gbWluIGxlbmd0aCAzIG1heCA3XCIsXG4gICAgfSxcbiAgXSxcbiAgQ1Q6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBERTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZHsxLDd9JC8sXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMS03IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBEQzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDcgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgRkw6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezEyfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSAxMiBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZHsxMX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJBTk5OTk5OTk5OTk4gTWluTGVuZ3RoID0gMTIgTWF4TGVuZ3RoID0gMTJcIixcbiAgICB9LFxuICBdLFxuICBHQTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezcsOX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNy05IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBHVTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZHsxMH0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OTk4gTWluTGVuZ3RoID0gMTAgTWF4TGVuZ3RoID0gMTBcIixcbiAgICB9LFxuICBdLFxuICBISTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17OH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgOCBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBJRDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezJ9WzAtOV17Nn1bQS1aXXsxfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkxpY2Vuc2UgbXVzdCBiZSAyIGxldHRlcnMgZm9sbG93ZWQgYnkgNiBudW1iZXJzIGZvbGxvd2VkIGJ5IDEgbGV0dGVyXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBJTDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17MTF9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDExIG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBJTjogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezksMTB9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDktMTAgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIElBOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXszfVtBLVpdezJ9WzAtOV17NH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJMaWNlbnNlIG11c3QgYmUgMyBudW1iZXJzIGZvbGxvd2VkIGJ5IDIgbGV0dGVycyBmb2xsb3dlZCBieSA0IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBLUzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17OH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgOCBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBLWTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17OCw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA4LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTEE6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXsxLDl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEtOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTUU6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs3fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA3IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezd9W0EtWl17MX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNyBudW1iZXJzIGZvbGxvd2VkIGJ5IDEgbGV0dGVyXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA4IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBNRDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezEsMn1bMC05XXsxMSwxMn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJMaWNlbnNlIG11c3QgYmUgMSBvciAyIGxldHRlcnMgZm9sbG93ZWQgYnkgMTEgb3IgMTIgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE1BOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC8oXltBLVpdezF9WzAtOV17OH0kfF5bQS1aXXsyfVswLTldezd9JCkvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA4IG51bWJlcnMgb3IgMiBsZXR0ZXJzIGZvbGxvd2VkIGJ5IDcgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE1JOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXsxMn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgMTIgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE1OOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXsxMn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgMTIgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE1TOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgLy8gVE9ETzogVGVzdCByZW1haW5pbmcgTGljZW5zZXNcbiAgTU86IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezUsOX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgNS05IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17Nn1bUl17MX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0xpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA2IG51bWJlcnMgZm9sbG93ZWQgYnkgXCJSXCInLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX1bQS1aXXsxfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnMgZm9sbG93ZWQgYnkgMSBsZXR0ZXJcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17M31bQS1aXXsxfVswLTldezZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDMgbnVtYmVycyArIDEgYWxmYW51bWVyaWMgKyA2IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezUsNn1bQS1aXSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkFOTk5OTkEgTWluTGVuZ3RoID0gNyBNYXhMZW5ndGggPSA3IE9SIEFOTk5OTkEgTWluTGVuZ3RoID0gOCBNYXhMZW5ndGggPSA4XCIsXG4gICAgfSxcbiAgXSxcbiAgTVQ6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXsxM30kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMTMgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZChcXGR8W0EtWl0pXFxkezJ9W0EtWl17M31cXGQkL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJBTlhOTkFBQU4gTWluTGVuZ3RoID0gOSBNYXhMZW5ndGggPSA5XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bYS16XXszfVxcZHsxMH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaHJlZSBsZXR0ZXJzIGFuZCAxMCBkaWdpdHNcIixcbiAgICB9LFxuICBdLFxuICBORTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezMsOH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJBTk5OTk5OTk4gTWluTGVuZ3RoID0gNCBNYXhMZW5ndGggPSA5XCIsXG4gICAgfSxcbiAgXSxcbiAgTlY6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5LDEwfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5LTEwIG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezEyfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxMiBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZHs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOTk5OTk5OTiBNaW5MZW5ndGggPSA5IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICBdLFxuICBOSDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvKF5bMC05XXsyfVtBLVpdezN9WzAtOV17NX0kfF5bQS1aXXszfVswLTldezh9JCkvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkxpY2Vuc2UgbXVzdCBiZSAyIG51bWJlcnMgZm9sbG93ZWQgYnkgMyBsZXR0ZXJzIGZvbGxvd2VkIGJ5IDUgbnVtYmVycyBPUiAzIGxldHRlcnMgZm9sbG93ZWQgYnkgOCBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTko6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezE0fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSAxNCBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTk06IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs4LDl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDgtOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTlk6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDcgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXsxNywxOH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgMTctMTggbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OCw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA4LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE5DOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17MSwxMn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMS0xMiBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTkQ6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXszfVswLTldezZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDMgbGV0dGVycyBmb2xsb3dlZCBieSA2IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE9IOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17Mn1bMC05XXs2fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAyIGxldHRlcnMgZm9sbG93ZWQgYnkgNiBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgT0s6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eXFxkezcsOX0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICBdLFxuICBPUjogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezUsOX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNS05IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQU5OTk5OTk4gTWluTGVuZ3RoID0gOCBNYXhMZW5ndGggPSA4XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aMC05XXs2LDl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiWFhYWFhYWFhYIE1pbkxlbmd0aCA9IDYgTWF4TGVuZ3RoID0gOVwiLFxuICAgIH0sXG4gIF0sXG4gIFBBOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOCBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgUkk6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs3LDh9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDcgb3IgOCBudW1iZXJzIHdpdGhvdXQgbGV0dGVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXs2fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA2IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBTQzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezYsMTF9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDYtMTEgbnVtYmVycyAobmV3OiA5LCBvbGQgZm9ybWF0OiA2LTExKVwiLFxuICAgIH0sXG4gIF0sXG4gIFNEOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17Niw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA2LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIFROOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17Nyw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA3LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIFRYOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eXFxkezUsOH0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OIE1pbkxlbmd0aCA9IDUgTWF4TGVuZ3RoID0gOFwiLFxuICAgIH0sXG4gIF0sXG4gIFVUOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17NCwxMH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNC0xMCBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgVlQ6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs3LH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNy04IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezd9W0FdJC9pLFxuICAgICAgZGVzY3JpcHRpb246ICdMaWNlbnNlIG11c3QgYmUgNyBudW1iZXJzIGZvbGxvd2VkIGJ5IFwiQVwiJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZHs3fVtBLVpdPyQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIk5OTk5OTk5BIE1pbkxlbmd0aCA9IDggTWF4TGVuZ3RoID0gOCBPUiBOTk5OTk5OIE1pbkxlbmd0aCA9IDcgTWF4TGVuZ3RoID0gN1wiLFxuICAgIH0sXG4gIF0sXG4gIFZBOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA4IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC8sXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgVkk6IFtcbiAgICB7XG4gICAgICByZWdleDogL15cXGR7MTB9JC8sXG4gICAgICBkZXNjcmlwdGlvbjogXCJOTk5OTk5OTk5OIE1pbkxlbmd0aCA9IDEwIE1heExlbmd0aCA9IDEwXCIsXG4gICAgfSxcbiAgXSxcbiAgV0E6IFtcbiAgICB7XG4gICAgICByZWdleDogL14oPz0uezEyfSQpW0EtWl17MSw3fVtBLVowLTlcXFxcKl17NCwxMX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0xpY2Vuc2UgbXVzdCBiZSAxLTcgbGV0dGVycyBmb2xsb3dlZCBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgbnVtYmVycywgb3IgXCIqXCIgZm9yIGEgdG90YWwgb2YgMTIgY2hhcmFjdGVycycsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aMC05XXsxMn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJYWFhYWFhYWFhYWFggTWluTGVuZ3RoID0gMTIgTWF4TGVuZ3RoID0gMTJcIixcbiAgICB9LFxuICBdLFxuICBXVjogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDcgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17Mn1bMC05XXs1fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAyIGxldHRlcnMgZm9sbG93ZWQgYnkgNSBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxLDJ9WzAtOV17Nn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMS0yIGxldHRlcnMgZm9sbG93ZWQgYnkgNiBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZHs2fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOTk5OTk4gTWluTGVuZ3RoID0gNyBNYXhMZW5ndGggPSA3XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsyfVxcZHs1LDZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiQUFOTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDcgT1IgQUFOTk5OTk4gTWluTGVuZ3RoID0gOCBNYXhMZW5ndGggPSA4XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15cXGRbQS1aXVxcZHs1fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5BTk5OTk4gTWluTGVuZ3RoID0gNyBNYXhMZW5ndGggPSA3XCIsXG4gICAgfSxcbiAgXSxcbiAgV0k6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezEzfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSAxMyBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgV1k6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIFBSOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eXFxkezcsOX0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICBdLFxufTtcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJ2YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MScpO1xudmFyIF9oYXMgPSByZXF1aXJlKCcuL2ludGVybmFsL19oYXMnKTtcbnZhciBfaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2ludGVybmFsL19pc0FyZ3VtZW50cycpO1xuXG5cbi8qKlxuICogUmV0dXJucyBhIGxpc3QgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgYWxsIHRoZSBlbnVtZXJhYmxlIG93biBwcm9wZXJ0aWVzIG9mXG4gKiB0aGUgc3VwcGxpZWQgb2JqZWN0LlxuICogTm90ZSB0aGF0IHRoZSBvcmRlciBvZiB0aGUgb3V0cHV0IGFycmF5IGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIGNvbnNpc3RlbnRcbiAqIGFjcm9zcyBkaWZmZXJlbnQgSlMgcGxhdGZvcm1zLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHNpZyB7azogdn0gLT4gW2tdXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gZXh0cmFjdCBwcm9wZXJ0aWVzIGZyb21cbiAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiB0aGUgb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5rZXlzKHthOiAxLCBiOiAyLCBjOiAzfSk7IC8vPT4gWydhJywgJ2InLCAnYyddXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uKCkge1xuICAvLyBjb3ZlciBJRSA8IDkga2V5cyBpc3N1ZXNcbiAgdmFyIGhhc0VudW1CdWcgPSAhKHt0b1N0cmluZzogbnVsbH0pLnByb3BlcnR5SXNFbnVtZXJhYmxlKCd0b1N0cmluZycpO1xuICB2YXIgbm9uRW51bWVyYWJsZVByb3BzID0gWydjb25zdHJ1Y3RvcicsICd2YWx1ZU9mJywgJ2lzUHJvdG90eXBlT2YnLCAndG9TdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICdoYXNPd25Qcm9wZXJ0eScsICd0b0xvY2FsZVN0cmluZyddO1xuICAvLyBTYWZhcmkgYnVnXG4gIHZhciBoYXNBcmdzRW51bUJ1ZyA9IChmdW5jdGlvbigpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5wcm9wZXJ0eUlzRW51bWVyYWJsZSgnbGVuZ3RoJyk7XG4gIH0oKSk7XG5cbiAgdmFyIGNvbnRhaW5zID0gZnVuY3Rpb24gY29udGFpbnMobGlzdCwgaXRlbSkge1xuICAgIHZhciBpZHggPSAwO1xuICAgIHdoaWxlIChpZHggPCBsaXN0Lmxlbmd0aCkge1xuICAgICAgaWYgKGxpc3RbaWR4XSA9PT0gaXRlbSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlkeCArPSAxO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgcmV0dXJuIHR5cGVvZiBPYmplY3Qua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiAhaGFzQXJnc0VudW1CdWcgP1xuICAgIF9jdXJyeTEoZnVuY3Rpb24ga2V5cyhvYmopIHtcbiAgICAgIHJldHVybiBPYmplY3Qob2JqKSAhPT0gb2JqID8gW10gOiBPYmplY3Qua2V5cyhvYmopO1xuICAgIH0pIDpcbiAgICBfY3VycnkxKGZ1bmN0aW9uIGtleXMob2JqKSB7XG4gICAgICBpZiAoT2JqZWN0KG9iaikgIT09IG9iaikge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB2YXIgcHJvcCwgbklkeDtcbiAgICAgIHZhciBrcyA9IFtdO1xuICAgICAgdmFyIGNoZWNrQXJnc0xlbmd0aCA9IGhhc0FyZ3NFbnVtQnVnICYmIF9pc0FyZ3VtZW50cyhvYmopO1xuICAgICAgZm9yIChwcm9wIGluIG9iaikge1xuICAgICAgICBpZiAoX2hhcyhwcm9wLCBvYmopICYmICghY2hlY2tBcmdzTGVuZ3RoIHx8IHByb3AgIT09ICdsZW5ndGgnKSkge1xuICAgICAgICAgIGtzW2tzLmxlbmd0aF0gPSBwcm9wO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaGFzRW51bUJ1Zykge1xuICAgICAgICBuSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlIChuSWR4ID49IDApIHtcbiAgICAgICAgICBwcm9wID0gbm9uRW51bWVyYWJsZVByb3BzW25JZHhdO1xuICAgICAgICAgIGlmIChfaGFzKHByb3AsIG9iaikgJiYgIWNvbnRhaW5zKGtzLCBwcm9wKSkge1xuICAgICAgICAgICAga3Nba3MubGVuZ3RoXSA9IHByb3A7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5JZHggLT0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGtzO1xuICAgIH0pO1xufSgpKTtcbiIsInZhciBfY3VycnkzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkzJyk7XG52YXIgX3JlZHVjZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX3JlZHVjZScpO1xuXG5cbi8qKlxuICogUmV0dXJucyBhIHNpbmdsZSBpdGVtIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBsaXN0LCBzdWNjZXNzaXZlbHkgY2FsbGluZ1xuICogdGhlIGl0ZXJhdG9yIGZ1bmN0aW9uIGFuZCBwYXNzaW5nIGl0IGFuIGFjY3VtdWxhdG9yIHZhbHVlIGFuZCB0aGUgY3VycmVudFxuICogdmFsdWUgZnJvbSB0aGUgYXJyYXksIGFuZCB0aGVuIHBhc3NpbmcgdGhlIHJlc3VsdCB0byB0aGUgbmV4dCBjYWxsLlxuICpcbiAqIFRoZSBpdGVyYXRvciBmdW5jdGlvbiByZWNlaXZlcyB0d28gdmFsdWVzOiAqKGFjYywgdmFsdWUpKi4gSXQgbWF5IHVzZVxuICogYFIucmVkdWNlZGAgdG8gc2hvcnRjdXQgdGhlIGl0ZXJhdGlvbi5cbiAqXG4gKiBUaGUgYXJndW1lbnRzJyBvcmRlciBvZiBgcmVkdWNlUmlnaHRgJ3MgaXRlcmF0b3IgZnVuY3Rpb24gaXMgKih2YWx1ZSwgYWNjKSouXG4gKlxuICogTm90ZTogYFIucmVkdWNlYCBkb2VzIG5vdCBza2lwIGRlbGV0ZWQgb3IgdW5hc3NpZ25lZCBpbmRpY2VzIChzcGFyc2VcbiAqIGFycmF5cyksIHVubGlrZSB0aGUgbmF0aXZlIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2QuIEZvciBtb3JlIGRldGFpbHNcbiAqIG9uIHRoaXMgYmVoYXZpb3IsIHNlZTpcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L3JlZHVjZSNEZXNjcmlwdGlvblxuICpcbiAqIERpc3BhdGNoZXMgdG8gdGhlIGByZWR1Y2VgIG1ldGhvZCBvZiB0aGUgdGhpcmQgYXJndW1lbnQsIGlmIHByZXNlbnQuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgTGlzdFxuICogQHNpZyAoKGEsIGIpIC0+IGEpIC0+IGEgLT4gW2JdIC0+IGFcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBpdGVyYXRvciBmdW5jdGlvbi4gUmVjZWl2ZXMgdHdvIHZhbHVlcywgdGhlIGFjY3VtdWxhdG9yIGFuZCB0aGVcbiAqICAgICAgICBjdXJyZW50IGVsZW1lbnQgZnJvbSB0aGUgYXJyYXkuXG4gKiBAcGFyYW0geyp9IGFjYyBUaGUgYWNjdW11bGF0b3IgdmFsdWUuXG4gKiBAcGFyYW0ge0FycmF5fSBsaXN0IFRoZSBsaXN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEByZXR1cm4geyp9IFRoZSBmaW5hbCwgYWNjdW11bGF0ZWQgdmFsdWUuXG4gKiBAc2VlIFIucmVkdWNlZCwgUi5hZGRJbmRleCwgUi5yZWR1Y2VSaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIucmVkdWNlKFIuc3VidHJhY3QsIDAsIFsxLCAyLCAzLCA0XSkgLy8gPT4gKCgoKDAgLSAxKSAtIDIpIC0gMykgLSA0KSA9IC0xMFxuICogICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgIC0xMFxuICogICAgICAgICAgICAgICAvIFxcICAgICAgICAgICAgICAvIFxcXG4gKiAgICAgICAgICAgICAgLSAgIDQgICAgICAgICAgIC02ICAgNFxuICogICAgICAgICAgICAgLyBcXCAgICAgICAgICAgICAgLyBcXFxuICogICAgICAgICAgICAtICAgMyAgID09PiAgICAgLTMgICAzXG4gKiAgICAgICAgICAgLyBcXCAgICAgICAgICAgICAgLyBcXFxuICogICAgICAgICAgLSAgIDIgICAgICAgICAgIC0xICAgMlxuICogICAgICAgICAvIFxcICAgICAgICAgICAgICAvIFxcXG4gKiAgICAgICAgMCAgIDEgICAgICAgICAgICAwICAgMVxuICpcbiAqIEBzeW1iIFIucmVkdWNlKGYsIGEsIFtiLCBjLCBkXSkgPSBmKGYoZihhLCBiKSwgYyksIGQpXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MyhfcmVkdWNlKTtcbiIsInZhciBfaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzQXJyYXknKTtcblxuXG4vKipcbiAqIFRoaXMgY2hlY2tzIHdoZXRoZXIgYSBmdW5jdGlvbiBoYXMgYSBbbWV0aG9kbmFtZV0gZnVuY3Rpb24uIElmIGl0IGlzbid0IGFuXG4gKiBhcnJheSBpdCB3aWxsIGV4ZWN1dGUgdGhhdCBmdW5jdGlvbiBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSByYW1kYVxuICogaW1wbGVtZW50YXRpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHJhbWRhIGltcGxlbXRhdGlvblxuICogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZG5hbWUgcHJvcGVydHkgdG8gY2hlY2sgZm9yIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uXG4gKiBAcmV0dXJuIHtPYmplY3R9IFdoYXRldmVyIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIG1ldGhvZCBpcy5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfY2hlY2tGb3JNZXRob2QobWV0aG9kbmFtZSwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmbigpO1xuICAgIH1cbiAgICB2YXIgb2JqID0gYXJndW1lbnRzW2xlbmd0aCAtIDFdO1xuICAgIHJldHVybiAoX2lzQXJyYXkob2JqKSB8fCB0eXBlb2Ygb2JqW21ldGhvZG5hbWVdICE9PSAnZnVuY3Rpb24nKSA/XG4gICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDpcbiAgICAgIG9ialttZXRob2RuYW1lXS5hcHBseShvYmosIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCwgbGVuZ3RoIC0gMSkpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIG5vcm1hbGl6ZUhlYWRlck5hbWUgPSByZXF1aXJlKCcuL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZScpO1xuXG52YXIgREVGQVVMVF9DT05URU5UX1RZUEUgPSB7XG4gICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xufTtcblxuZnVuY3Rpb24gc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsIHZhbHVlKSB7XG4gIGlmICghdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVycykgJiYgdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVyc1snQ29udGVudC1UeXBlJ10pKSB7XG4gICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0QWRhcHRlcigpIHtcbiAgdmFyIGFkYXB0ZXI7XG4gIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gRm9yIGJyb3dzZXJzIHVzZSBYSFIgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuL2FkYXB0ZXJzL3hocicpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEZvciBub2RlIHVzZSBIVFRQIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy9odHRwJyk7XG4gIH1cbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgLyogSWdub3JlICovIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH1cbn07XG5cbmRlZmF1bHRzLmhlYWRlcnMgPSB7XG4gIGNvbW1vbjoge1xuICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJ1xuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHV0aWxzLm1lcmdlKERFRkFVTFRfQ09OVEVOVF9UWVBFKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290JyksXG4gICAgc3R1YkZhbHNlID0gcmVxdWlyZSgnLi9zdHViRmFsc2UnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQnVmZmVyO1xuIiwidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNMZW5ndGg7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXA7XG4iLCJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDcmVhdGU7XG4iLCIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBiYXNlTG9kYXNoID0gcmVxdWlyZSgnLi9fYmFzZUxvZGFzaCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB0aGUgbWF4aW11bSBsZW5ndGggYW5kIGluZGV4IG9mIGFuIGFycmF5LiAqL1xudmFyIE1BWF9BUlJBWV9MRU5HVEggPSA0Mjk0OTY3Mjk1O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBsYXp5IHdyYXBwZXIgb2JqZWN0IHdoaWNoIHdyYXBzIGB2YWx1ZWAgdG8gZW5hYmxlIGxhenkgZXZhbHVhdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICovXG5mdW5jdGlvbiBMYXp5V3JhcHBlcih2YWx1ZSkge1xuICB0aGlzLl9fd3JhcHBlZF9fID0gdmFsdWU7XG4gIHRoaXMuX19hY3Rpb25zX18gPSBbXTtcbiAgdGhpcy5fX2Rpcl9fID0gMTtcbiAgdGhpcy5fX2ZpbHRlcmVkX18gPSBmYWxzZTtcbiAgdGhpcy5fX2l0ZXJhdGVlc19fID0gW107XG4gIHRoaXMuX190YWtlQ291bnRfXyA9IE1BWF9BUlJBWV9MRU5HVEg7XG4gIHRoaXMuX192aWV3c19fID0gW107XG59XG5cbi8vIEVuc3VyZSBgTGF6eVdyYXBwZXJgIGlzIGFuIGluc3RhbmNlIG9mIGBiYXNlTG9kYXNoYC5cbkxhenlXcmFwcGVyLnByb3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpO1xuTGF6eVdyYXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGF6eVdyYXBwZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTGF6eVdyYXBwZXI7XG4iLCIvKipcbiAqIFRoZSBmdW5jdGlvbiB3aG9zZSBwcm90b3R5cGUgY2hhaW4gc2VxdWVuY2Ugd3JhcHBlcnMgaW5oZXJpdCBmcm9tLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJhc2VMb2Rhc2goKSB7XG4gIC8vIE5vIG9wZXJhdGlvbiBwZXJmb3JtZWQuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUxvZGFzaDtcbiIsIi8qKlxuICogR2V0cyB0aGUgYXJndW1lbnQgcGxhY2Vob2xkZXIgdmFsdWUgZm9yIGBmdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0SG9sZGVyKGZ1bmMpIHtcbiAgdmFyIG9iamVjdCA9IGZ1bmM7XG4gIHJldHVybiBvYmplY3QucGxhY2Vob2xkZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0SG9sZGVyO1xuIiwiKGZ1bmN0aW9uKGYpIHtcblxuICAndXNlIHN0cmljdCc7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiBleHBvcnRzICE9IG51bGwgJiZcbiAgICAgIHR5cGVvZiBleHBvcnRzLm5vZGVUeXBlICE9PSAnbnVtYmVyJykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZiAoKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgIT0gbnVsbCkge1xuICAgIGRlZmluZSAoW10sIGYpO1xuICB9IGVsc2Uge1xuICAgIHZhciBiYXNlNjQgPSBmICgpO1xuICAgIHZhciBnbG9iYWwgPSB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogJC5nbG9iYWw7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWwuYnRvYSAhPT0gJ2Z1bmN0aW9uJykgZ2xvYmFsLmJ0b2EgPSBiYXNlNjQuYnRvYTtcbiAgICBpZiAodHlwZW9mIGdsb2JhbC5hdG9iICE9PSAnZnVuY3Rpb24nKSBnbG9iYWwuYXRvYiA9IGJhc2U2NC5hdG9iO1xuICB9XG5cbn0gKGZ1bmN0aW9uKCkge1xuXG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nO1xuXG4gIGZ1bmN0aW9uIEludmFsaWRDaGFyYWN0ZXJFcnJvcihtZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgfVxuICBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yICgpO1xuICBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcblxuICAvLyBlbmNvZGVyXG4gIC8vIFtodHRwczovL2dpc3QuZ2l0aHViLmNvbS85OTkxNjZdIGJ5IFtodHRwczovL2dpdGh1Yi5jb20vbmlnbmFnXVxuICBmdW5jdGlvbiBidG9hKGlucHV0KSB7XG4gICAgdmFyIHN0ciA9IFN0cmluZyAoaW5wdXQpO1xuICAgIGZvciAoXG4gICAgICAvLyBpbml0aWFsaXplIHJlc3VsdCBhbmQgY291bnRlclxuICAgICAgdmFyIGJsb2NrLCBjaGFyQ29kZSwgaWR4ID0gMCwgbWFwID0gY2hhcnMsIG91dHB1dCA9ICcnO1xuICAgICAgLy8gaWYgdGhlIG5leHQgc3RyIGluZGV4IGRvZXMgbm90IGV4aXN0OlxuICAgICAgLy8gICBjaGFuZ2UgdGhlIG1hcHBpbmcgdGFibGUgdG8gXCI9XCJcbiAgICAgIC8vICAgY2hlY2sgaWYgZCBoYXMgbm8gZnJhY3Rpb25hbCBkaWdpdHNcbiAgICAgIHN0ci5jaGFyQXQgKGlkeCB8IDApIHx8IChtYXAgPSAnPScsIGlkeCAlIDEpO1xuICAgICAgLy8gXCI4IC0gaWR4ICUgMSAqIDhcIiBnZW5lcmF0ZXMgdGhlIHNlcXVlbmNlIDIsIDQsIDYsIDhcbiAgICAgIG91dHB1dCArPSBtYXAuY2hhckF0ICg2MyAmIGJsb2NrID4+IDggLSBpZHggJSAxICogOClcbiAgICApIHtcbiAgICAgIGNoYXJDb2RlID0gc3RyLmNoYXJDb2RlQXQgKGlkeCArPSAzIC8gNCk7XG4gICAgICBpZiAoY2hhckNvZGUgPiAweEZGKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgKFwiJ2J0b2EnIGZhaWxlZDogVGhlIHN0cmluZyB0byBiZSBlbmNvZGVkIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3V0c2lkZSBvZiB0aGUgTGF0aW4xIHJhbmdlLlwiKTtcbiAgICAgIH1cbiAgICAgIGJsb2NrID0gYmxvY2sgPDwgOCB8IGNoYXJDb2RlO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgLy8gZGVjb2RlclxuICAvLyBbaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTAyMDM5Nl0gYnkgW2h0dHBzOi8vZ2l0aHViLmNvbS9hdGtdXG4gIGZ1bmN0aW9uIGF0b2IoaW5wdXQpIHtcbiAgICB2YXIgc3RyID0gKFN0cmluZyAoaW5wdXQpKS5yZXBsYWNlICgvWz1dKyQvLCAnJyk7IC8vICMzMTogRXh0ZW5kU2NyaXB0IGJhZCBwYXJzZSBvZiAvPVxuICAgIGlmIChzdHIubGVuZ3RoICUgNCA9PT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRDaGFyYWN0ZXJFcnJvciAoXCInYXRvYicgZmFpbGVkOiBUaGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLlwiKTtcbiAgICB9XG4gICAgZm9yIChcbiAgICAgIC8vIGluaXRpYWxpemUgcmVzdWx0IGFuZCBjb3VudGVyc1xuICAgICAgdmFyIGJjID0gMCwgYnMsIGJ1ZmZlciwgaWR4ID0gMCwgb3V0cHV0ID0gJyc7XG4gICAgICAvLyBnZXQgbmV4dCBjaGFyYWN0ZXJcbiAgICAgIGJ1ZmZlciA9IHN0ci5jaGFyQXQgKGlkeCsrKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25kLWFzc2lnblxuICAgICAgLy8gY2hhcmFjdGVyIGZvdW5kIGluIHRhYmxlPyBpbml0aWFsaXplIGJpdCBzdG9yYWdlIGFuZCBhZGQgaXRzIGFzY2lpIHZhbHVlO1xuICAgICAgfmJ1ZmZlciAmJiAoYnMgPSBiYyAlIDQgPyBicyAqIDY0ICsgYnVmZmVyIDogYnVmZmVyLFxuICAgICAgICAvLyBhbmQgaWYgbm90IGZpcnN0IG9mIGVhY2ggNCBjaGFyYWN0ZXJzLFxuICAgICAgICAvLyBjb252ZXJ0IHRoZSBmaXJzdCA4IGJpdHMgdG8gb25lIGFzY2lpIGNoYXJhY3RlclxuICAgICAgICBiYysrICUgNCkgPyBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSAoMjU1ICYgYnMgPj4gKC0yICogYmMgJiA2KSkgOiAwXG4gICAgKSB7XG4gICAgICAvLyB0cnkgdG8gZmluZCBjaGFyYWN0ZXIgaW4gdGFibGUgKDAtNjMsIG5vdCBmb3VuZCA9PiAtMSlcbiAgICAgIGJ1ZmZlciA9IGNoYXJzLmluZGV4T2YgKGJ1ZmZlcik7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICByZXR1cm4ge2J0b2E6IGJ0b2EsIGF0b2I6IGF0b2J9O1xuXG59KSk7XG4iLCJ2YXIgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGNyZWF0ZVdyYXAgPSByZXF1aXJlKCcuL19jcmVhdGVXcmFwJyksXG4gICAgZ2V0SG9sZGVyID0gcmVxdWlyZSgnLi9fZ2V0SG9sZGVyJyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlXG4gKiBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYmluZGAgZXhjZXB0IGl0IGRvZXMgKipub3QqKlxuICogYWx0ZXIgdGhlIGB0aGlzYCBiaW5kaW5nLlxuICpcbiAqIFRoZSBgXy5wYXJ0aWFsLnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBwYXJ0aWFsbHlcbiAqIGFwcGxpZWQgZnVuY3Rpb25zLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4yLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5IGFyZ3VtZW50cyB0by5cbiAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcGFydGlhbGx5IGFwcGxpZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIGdyZWV0KGdyZWV0aW5nLCBuYW1lKSB7XG4gKiAgIHJldHVybiBncmVldGluZyArICcgJyArIG5hbWU7XG4gKiB9XG4gKlxuICogdmFyIHNheUhlbGxvVG8gPSBfLnBhcnRpYWwoZ3JlZXQsICdoZWxsbycpO1xuICogc2F5SGVsbG9UbygnZnJlZCcpO1xuICogLy8gPT4gJ2hlbGxvIGZyZWQnXG4gKlxuICogLy8gUGFydGlhbGx5IGFwcGxpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gKiB2YXIgZ3JlZXRGcmVkID0gXy5wYXJ0aWFsKGdyZWV0LCBfLCAnZnJlZCcpO1xuICogZ3JlZXRGcmVkKCdoaScpO1xuICogLy8gPT4gJ2hpIGZyZWQnXG4gKi9cbnZhciBwYXJ0aWFsID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgcGFydGlhbHMpIHtcbiAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKHBhcnRpYWwpKTtcbiAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9QQVJUSUFMX0ZMQUcsIHVuZGVmaW5lZCwgcGFydGlhbHMsIGhvbGRlcnMpO1xufSk7XG5cbi8vIEFzc2lnbiBkZWZhdWx0IHBsYWNlaG9sZGVycy5cbnBhcnRpYWwucGxhY2Vob2xkZXIgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJ0aWFsO1xuIiwidmFyIGRyaXZlcnNMaWNlbnNlUmVnZXggPSByZXF1aXJlKFwiLi9saWNlbnNlLXJlZ2V4XCIpO1xudmFyIGlzVmFsaWRVU0xpY2Vuc2UgPSByZXF1aXJlKFwiLi9pcy12YWxpZC11cy1saWNlbnNlXCIpO1xudmFyIHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRlLWRyaXZlcnMtbGljZW5zZVwiKTtcbnZhciBzdXBwb3J0ZWRTdGF0ZXMgPSByZXF1aXJlKFwiLi9zdXBwb3J0ZWQtc3RhdGVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZHJpdmVyc0xpY2Vuc2VSZWdleDogZHJpdmVyc0xpY2Vuc2VSZWdleCxcbiAgaXNWYWxpZFVTTGljZW5zZTogaXNWYWxpZFVTTGljZW5zZSxcbiAgdmFsaWRhdGVVU0RyaXZlcnNMaWNlbnNlOiB2YWxpZGF0ZVVTRHJpdmVyc0xpY2Vuc2UsXG4gIHN1cHBvcnRlZFN0YXRlczogc3VwcG9ydGVkU3RhdGVzXG59O1xuIiwidmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcbnZhciBfZXF1YWxzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fZXF1YWxzJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiBpdHMgYXJndW1lbnRzIGFyZSBlcXVpdmFsZW50LCBgZmFsc2VgIG90aGVyd2lzZS4gSGFuZGxlc1xuICogY3ljbGljYWwgZGF0YSBzdHJ1Y3R1cmVzLlxuICpcbiAqIERpc3BhdGNoZXMgc3ltbWV0cmljYWxseSB0byB0aGUgYGVxdWFsc2AgbWV0aG9kcyBvZiBib3RoIGFyZ3VtZW50cywgaWZcbiAqIHByZXNlbnQuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMTUuMFxuICogQGNhdGVnb3J5IFJlbGF0aW9uXG4gKiBAc2lnIGEgLT4gYiAtPiBCb29sZWFuXG4gKiBAcGFyYW0geyp9IGFcbiAqIEBwYXJhbSB7Kn0gYlxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLmVxdWFscygxLCAxKTsgLy89PiB0cnVlXG4gKiAgICAgIFIuZXF1YWxzKDEsICcxJyk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5lcXVhbHMoWzEsIDIsIDNdLCBbMSwgMiwgM10pOyAvLz0+IHRydWVcbiAqXG4gKiAgICAgIHZhciBhID0ge307IGEudiA9IGE7XG4gKiAgICAgIHZhciBiID0ge307IGIudiA9IGI7XG4gKiAgICAgIFIuZXF1YWxzKGEsIGIpOyAvLz0+IHRydWVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBfZXF1YWxzKGEsIGIsIFtdLCBbXSk7XG59KTtcbiIsInZhciBfaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFyZ3VtZW50cykgPT09ICdbb2JqZWN0IEFyZ3VtZW50c10nID9cbiAgICBmdW5jdGlvbiBfaXNBcmd1bWVudHMoeCkgeyByZXR1cm4gdG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJndW1lbnRzXSc7IH0gOlxuICAgIGZ1bmN0aW9uIF9pc0FyZ3VtZW50cyh4KSB7IHJldHVybiBfaGFzKCdjYWxsZWUnLCB4KTsgfTtcbn0oKSk7XG4iLCIvKipcbiAqIFByaXZhdGUgYGNvbmNhdGAgZnVuY3Rpb24gdG8gbWVyZ2UgdHdvIGFycmF5LWxpa2Ugb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxBcmd1bWVudHN9IFtzZXQxPVtdXSBBbiBhcnJheS1saWtlIG9iamVjdC5cbiAqIEBwYXJhbSB7QXJyYXl8QXJndW1lbnRzfSBbc2V0Mj1bXV0gQW4gYXJyYXktbGlrZSBvYmplY3QuXG4gKiBAcmV0dXJuIHtBcnJheX0gQSBuZXcsIG1lcmdlZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBfY29uY2F0KFs0LCA1LCA2XSwgWzEsIDIsIDNdKTsgLy89PiBbNCwgNSwgNiwgMSwgMiwgM11cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfY29uY2F0KHNldDEsIHNldDIpIHtcbiAgc2V0MSA9IHNldDEgfHwgW107XG4gIHNldDIgPSBzZXQyIHx8IFtdO1xuICB2YXIgaWR4O1xuICB2YXIgbGVuMSA9IHNldDEubGVuZ3RoO1xuICB2YXIgbGVuMiA9IHNldDIubGVuZ3RoO1xuICB2YXIgcmVzdWx0ID0gW107XG5cbiAgaWR4ID0gMDtcbiAgd2hpbGUgKGlkeCA8IGxlbjEpIHtcbiAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSBzZXQxW2lkeF07XG4gICAgaWR4ICs9IDE7XG4gIH1cbiAgaWR4ID0gMDtcbiAgd2hpbGUgKGlkeCA8IGxlbjIpIHtcbiAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSBzZXQyW2lkeF07XG4gICAgaWR4ICs9IDE7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9pc1N0cmluZyh4KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0IFN0cmluZ10nO1xufTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aGVuIHN1cHBsaWVkIGFuIG9iamVjdCByZXR1cm5zIHRoZSBpbmRpY2F0ZWRcbiAqIHByb3BlcnR5IG9mIHRoYXQgb2JqZWN0LCBpZiBpdCBleGlzdHMuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAc2lnIHMgLT4ge3M6IGF9IC0+IGEgfCBVbmRlZmluZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBwIFRoZSBwcm9wZXJ0eSBuYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcXVlcnlcbiAqIEByZXR1cm4geyp9IFRoZSB2YWx1ZSBhdCBgb2JqLnBgLlxuICogQHNlZSBSLnBhdGhcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLnByb3AoJ3gnLCB7eDogMTAwfSk7IC8vPT4gMTAwXG4gKiAgICAgIFIucHJvcCgneCcsIHt9KTsgLy89PiB1bmRlZmluZWRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIHByb3AocCwgb2JqKSB7IHJldHVybiBvYmpbcF07IH0pO1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcblxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGFsd2F5cyByZXR1cm5zIHRoZSBnaXZlbiB2YWx1ZS4gTm90ZSB0aGF0IGZvclxuICogbm9uLXByaW1pdGl2ZXMgdGhlIHZhbHVlIHJldHVybmVkIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGtub3duIGFzIGBjb25zdGAsIGBjb25zdGFudGAsIG9yIGBLYCAoZm9yIEsgY29tYmluYXRvcikgaW5cbiAqIG90aGVyIGxhbmd1YWdlcyBhbmQgbGlicmFyaWVzLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAc2lnIGEgLT4gKCogLT4gYSlcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB3cmFwIGluIGEgZnVuY3Rpb25cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIEZ1bmN0aW9uIDo6ICogLT4gdmFsLlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciB0ID0gUi5hbHdheXMoJ1RlZScpO1xuICogICAgICB0KCk7IC8vPT4gJ1RlZSdcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKGZ1bmN0aW9uIGFsd2F5cyh2YWwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWw7XG4gIH07XG59KTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBTZWUgaWYgYW4gb2JqZWN0IChgdmFsYCkgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN1cHBsaWVkIGNvbnN0cnVjdG9yLiBUaGlzXG4gKiBmdW5jdGlvbiB3aWxsIGNoZWNrIHVwIHRoZSBpbmhlcml0YW5jZSBjaGFpbiwgaWYgYW55LlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjMuMFxuICogQGNhdGVnb3J5IFR5cGVcbiAqIEBzaWcgKCogLT4geyp9KSAtPiBhIC0+IEJvb2xlYW5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjdG9yIEEgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIuaXMoT2JqZWN0LCB7fSk7IC8vPT4gdHJ1ZVxuICogICAgICBSLmlzKE51bWJlciwgMSk7IC8vPT4gdHJ1ZVxuICogICAgICBSLmlzKE9iamVjdCwgMSk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5pcyhTdHJpbmcsICdzJyk7IC8vPT4gdHJ1ZVxuICogICAgICBSLmlzKFN0cmluZywgbmV3IFN0cmluZygnJykpOyAvLz0+IHRydWVcbiAqICAgICAgUi5pcyhPYmplY3QsIG5ldyBTdHJpbmcoJycpKTsgLy89PiB0cnVlXG4gKiAgICAgIFIuaXMoT2JqZWN0LCAncycpOyAvLz0+IGZhbHNlXG4gKiAgICAgIFIuaXMoTnVtYmVyLCB7fSk7IC8vPT4gZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIGlzKEN0b3IsIHZhbCkge1xuICByZXR1cm4gdmFsICE9IG51bGwgJiYgdmFsLmNvbnN0cnVjdG9yID09PSBDdG9yIHx8IHZhbCBpbnN0YW5jZW9mIEN0b3I7XG59KTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsYXJnZXIgb2YgaXRzIHR3byBhcmd1bWVudHMuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgUmVsYXRpb25cbiAqIEBzaWcgT3JkIGEgPT4gYSAtPiBhIC0+IGFcbiAqIEBwYXJhbSB7Kn0gYVxuICogQHBhcmFtIHsqfSBiXG4gKiBAcmV0dXJuIHsqfVxuICogQHNlZSBSLm1heEJ5LCBSLm1pblxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIubWF4KDc4OSwgMTIzKTsgLy89PiA3ODlcbiAqICAgICAgUi5tYXgoJ2EnLCAnYicpOyAvLz0+ICdiJ1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoZnVuY3Rpb24gbWF4KGEsIGIpIHsgcmV0dXJuIGIgPiBhID8gYiA6IGE7IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL3BhcnNlSGVhZGVycycpO1xudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4nKTtcbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvY3JlYXRlRXJyb3InKTtcbnZhciBidG9hID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5idG9hICYmIHdpbmRvdy5idG9hLmJpbmQod2luZG93KSkgfHwgcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J0b2EnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4aHJBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciByZXF1ZXN0SGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEocmVxdWVzdERhdGEpKSB7XG4gICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfVxuXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB2YXIgbG9hZEV2ZW50ID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG4gICAgdmFyIHhEb21haW4gPSBmYWxzZTtcblxuICAgIC8vIEZvciBJRSA4LzkgQ09SUyBzdXBwb3J0XG4gICAgLy8gT25seSBzdXBwb3J0cyBQT1NUIGFuZCBHRVQgY2FsbHMgYW5kIGRvZXNuJ3QgcmV0dXJucyB0aGUgcmVzcG9uc2UgaGVhZGVycy5cbiAgICAvLyBET04nVCBkbyB0aGlzIGZvciB0ZXN0aW5nIGIvYyBYTUxIdHRwUmVxdWVzdCBpcyBtb2NrZWQsIG5vdCBYRG9tYWluUmVxdWVzdC5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICB3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiByZXF1ZXN0KSAmJlxuICAgICAgICAhaXNVUkxTYW1lT3JpZ2luKGNvbmZpZy51cmwpKSB7XG4gICAgICByZXF1ZXN0ID0gbmV3IHdpbmRvdy5YRG9tYWluUmVxdWVzdCgpO1xuICAgICAgbG9hZEV2ZW50ID0gJ29ubG9hZCc7XG4gICAgICB4RG9tYWluID0gdHJ1ZTtcbiAgICAgIHJlcXVlc3Qub25wcm9ncmVzcyA9IGZ1bmN0aW9uIGhhbmRsZVByb2dyZXNzKCkge307XG4gICAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7fTtcbiAgICB9XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChjb25maWcudXJsLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGVcbiAgICByZXF1ZXN0W2xvYWRFdmVudF0gPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0IHx8IChyZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQgJiYgIXhEb21haW4pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICB2YXIgcmVzcG9uc2VIZWFkZXJzID0gJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCA/IHBhcnNlSGVhZGVycyhyZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSA6IG51bGw7XG4gICAgICB2YXIgcmVzcG9uc2VEYXRhID0gIWNvbmZpZy5yZXNwb25zZVR5cGUgfHwgY29uZmlnLnJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnID8gcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIC8vIElFIHNlbmRzIDEyMjMgaW5zdGVhZCBvZiAyMDQgKGh0dHBzOi8vZ2l0aHViLmNvbS9temFicmlza2llL2F4aW9zL2lzc3Vlcy8yMDEpXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMgPT09IDEyMjMgPyAyMDQgOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXMgPT09IDEyMjMgPyAnTm8gQ29udGVudCcgOiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBjb25maWcsIG51bGwsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcsIGNvbmZpZywgJ0VDT05OQUJPUlRFRCcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYgKHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpIHtcbiAgICAgIHZhciBjb29raWVzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2Nvb2tpZXMnKTtcblxuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGNvbmZpZy51cmwpKSAmJiBjb25maWcueHNyZkNvb2tpZU5hbWUgP1xuICAgICAgICAgIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpIDpcbiAgICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gRXhwZWN0ZWQgRE9NRXhjZXB0aW9uIHRocm93biBieSBicm93c2VycyBub3QgY29tcGF0aWJsZSBYTUxIdHRwUmVxdWVzdCBMZXZlbCAyLlxuICAgICAgICAvLyBCdXQsIHRoaXMgY2FuIGJlIHN1cHByZXNzZWQgZm9yICdqc29uJyB0eXBlIGFzIGl0IGNhbiBiZSBwYXJzZWQgYnkgZGVmYXVsdCAndHJhbnNmb3JtUmVzcG9uc2UnIGZ1bmN0aW9uLlxuICAgICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25Eb3dubG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5wcm9taXNlLnRoZW4oZnVuY3Rpb24gb25DYW5jZWxlZChjYW5jZWwpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY2FuY2VsKTtcbiAgICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0RGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVuaGFuY2VFcnJvciA9IHJlcXVpcmUoJy4vZW5oYW5jZUVycm9yJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZUVycm9yKG1lc3NhZ2UsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZW5oYW5jZUVycm9yKGVycm9yLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBBIGBDYW5jZWxgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsKG1lc3NhZ2UpIHtcbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbn1cblxuQ2FuY2VsLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ0NhbmNlbCcgKyAodGhpcy5tZXNzYWdlID8gJzogJyArIHRoaXMubWVzc2FnZSA6ICcnKTtcbn07XG5cbkNhbmNlbC5wcm90b3R5cGUuX19DQU5DRUxfXyA9IHRydWU7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RmlsdGVyO1xuIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcblx0aWYgKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XG5cdFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XG5cdFx0bW9kdWxlLnBhdGhzID0gW107XG5cdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XG5cdFx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwibG9hZGVkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmw7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuXHR9XG5cdHJldHVybiBtb2R1bGU7XG59O1xuIiwidmFyIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXM7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIHN0YWNrQ2xlYXIgPSByZXF1aXJlKCcuL19zdGFja0NsZWFyJyksXG4gICAgc3RhY2tEZWxldGUgPSByZXF1aXJlKCcuL19zdGFja0RlbGV0ZScpLFxuICAgIHN0YWNrR2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tHZXQnKSxcbiAgICBzdGFja0hhcyA9IHJlcXVpcmUoJy4vX3N0YWNrSGFzJyksXG4gICAgc3RhY2tTZXQgPSByZXF1aXJlKCcuL19zdGFja1NldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhY2s7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iLCJ2YXIgYmFzZUlzRXF1YWxEZWVwID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWxEZWVwJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWw7XG4iLCJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5U29tZSA9IHJlcXVpcmUoJy4vX2FycmF5U29tZScpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcnJheXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XG5cbiAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc1BhcnRpYWwgJiYgb3RoTGVuZ3RoID4gYXJyTGVuZ3RoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgYXJyU3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKGFyclN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBhcnJTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gYXJyYXk7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiZcbiAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcbiAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQXJyYXlzO1xuIiwidmFyIERhdGFWaWV3ID0gcmVxdWlyZSgnLi9fRGF0YVZpZXcnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBQcm9taXNlID0gcmVxdWlyZSgnLi9fUHJvbWlzZScpLFxuICAgIFNldCA9IHJlcXVpcmUoJy4vX1NldCcpLFxuICAgIFdlYWtNYXAgPSByZXF1aXJlKCcuL19XZWFrTWFwJyksXG4gICAgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VGFnO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2Vha01hcDtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaWN0Q29tcGFyYWJsZTtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBtYXRjaGVzUHJvcGVydHlgIGZvciBzb3VyY2UgdmFsdWVzIHN1aXRhYmxlXG4gKiBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUoa2V5LCBzcmNWYWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Rba2V5XSA9PT0gc3JjVmFsdWUgJiZcbiAgICAgIChzcmNWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gT2JqZWN0KG9iamVjdCkpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZTtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXQ7XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICBzdHJpbmdUb1BhdGggPSByZXF1aXJlKCcuL19zdHJpbmdUb1BhdGgnKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0UGF0aDtcbiIsInZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuIiwidmFyIGJhc2VGaW5kSW5kZXggPSByZXF1aXJlKCcuL19iYXNlRmluZEluZGV4JyksXG4gICAgYmFzZUlzTmFOID0gcmVxdWlyZSgnLi9fYmFzZUlzTmFOJyksXG4gICAgc3RyaWN0SW5kZXhPZiA9IHJlcXVpcmUoJy4vX3N0cmljdEluZGV4T2YnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pbmRleE9mYCB3aXRob3V0IGBmcm9tSW5kZXhgIGJvdW5kcyBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZVxuICAgID8gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleClcbiAgICA6IGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJc05hTiwgZnJvbUluZGV4KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSW5kZXhPZjtcbiIsInZhciB0b0Zpbml0ZSA9IHJlcXVpcmUoJy4vdG9GaW5pdGUnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGludGVnZXIuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9JbnRlZ2VyYF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvaW50ZWdlcikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0ludGVnZXIoMy4yKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLnRvSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDBcbiAqXG4gKiBfLnRvSW50ZWdlcihJbmZpbml0eSk7XG4gKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICpcbiAqIF8udG9JbnRlZ2VyKCczLjInKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gdG9JbnRlZ2VyKHZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSB0b0Zpbml0ZSh2YWx1ZSksXG4gICAgICByZW1haW5kZXIgPSByZXN1bHQgJSAxO1xuXG4gIHJldHVybiByZXN1bHQgPT09IHJlc3VsdCA/IChyZW1haW5kZXIgPyByZXN1bHQgLSByZW1haW5kZXIgOiByZXN1bHQpIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0ludGVnZXI7XG4iLCJ2YXIgdG9OdW1iZXIgPSByZXF1aXJlKCcuL3RvTnVtYmVyJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDAsXG4gICAgTUFYX0lOVEVHRVIgPSAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwODtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgZmluaXRlIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTIuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvRmluaXRlKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvRmluaXRlKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b0Zpbml0ZShJbmZpbml0eSk7XG4gKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICpcbiAqIF8udG9GaW5pdGUoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvRmluaXRlKHZhbHVlKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6IDA7XG4gIH1cbiAgdmFsdWUgPSB0b051bWJlcih2YWx1ZSk7XG4gIGlmICh2YWx1ZSA9PT0gSU5GSU5JVFkgfHwgdmFsdWUgPT09IC1JTkZJTklUWSkge1xuICAgIHZhciBzaWduID0gKHZhbHVlIDwgMCA/IC0xIDogMSk7XG4gICAgcmV0dXJuIHNpZ24gKiBNQVhfSU5URUdFUjtcbiAgfVxuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gdmFsdWUgOiAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvRmluaXRlO1xuIiwidmFyIGJhc2VTZXREYXRhID0gcmVxdWlyZSgnLi9fYmFzZVNldERhdGEnKSxcbiAgICBjcmVhdGVCaW5kID0gcmVxdWlyZSgnLi9fY3JlYXRlQmluZCcpLFxuICAgIGNyZWF0ZUN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3VycnknKSxcbiAgICBjcmVhdGVIeWJyaWQgPSByZXF1aXJlKCcuL19jcmVhdGVIeWJyaWQnKSxcbiAgICBjcmVhdGVQYXJ0aWFsID0gcmVxdWlyZSgnLi9fY3JlYXRlUGFydGlhbCcpLFxuICAgIGdldERhdGEgPSByZXF1aXJlKCcuL19nZXREYXRhJyksXG4gICAgbWVyZ2VEYXRhID0gcmVxdWlyZSgnLi9fbWVyZ2VEYXRhJyksXG4gICAgc2V0RGF0YSA9IHJlcXVpcmUoJy4vX3NldERhdGEnKSxcbiAgICBzZXRXcmFwVG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRXcmFwVG9TdHJpbmcnKSxcbiAgICB0b0ludGVnZXIgPSByZXF1aXJlKCcuL3RvSW50ZWdlcicpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfQ1VSUllfUklHSFRfRkxBRyA9IDE2LFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzIsXG4gICAgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgPSA2NDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGVpdGhlciBjdXJyaWVzIG9yIGludm9rZXMgYGZ1bmNgIHdpdGggb3B0aW9uYWxcbiAqIGB0aGlzYCBiaW5kaW5nIGFuZCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb258c3RyaW5nfSBmdW5jIFRoZSBmdW5jdGlvbiBvciBtZXRob2QgbmFtZSB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgICAxIC0gYF8uYmluZGBcbiAqICAgIDIgLSBgXy5iaW5kS2V5YFxuICogICAgNCAtIGBfLmN1cnJ5YCBvciBgXy5jdXJyeVJpZ2h0YCBvZiBhIGJvdW5kIGZ1bmN0aW9uXG4gKiAgICA4IC0gYF8uY3VycnlgXG4gKiAgIDE2IC0gYF8uY3VycnlSaWdodGBcbiAqICAgMzIgLSBgXy5wYXJ0aWFsYFxuICogICA2NCAtIGBfLnBhcnRpYWxSaWdodGBcbiAqICAxMjggLSBgXy5yZWFyZ2BcbiAqICAyNTYgLSBgXy5hcnlgXG4gKiAgNTEyIC0gYF8uZmxpcGBcbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgdmFyIGlzQmluZEtleSA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfS0VZX0ZMQUc7XG4gIGlmICghaXNCaW5kS2V5ICYmIHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IHBhcnRpYWxzID8gcGFydGlhbHMubGVuZ3RoIDogMDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBiaXRtYXNrICY9IH4oV1JBUF9QQVJUSUFMX0ZMQUcgfCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyk7XG4gICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkO1xuICB9XG4gIGFyeSA9IGFyeSA9PT0gdW5kZWZpbmVkID8gYXJ5IDogbmF0aXZlTWF4KHRvSW50ZWdlcihhcnkpLCAwKTtcbiAgYXJpdHkgPSBhcml0eSA9PT0gdW5kZWZpbmVkID8gYXJpdHkgOiB0b0ludGVnZXIoYXJpdHkpO1xuICBsZW5ndGggLT0gaG9sZGVycyA/IGhvbGRlcnMubGVuZ3RoIDogMDtcblxuICBpZiAoYml0bWFzayAmIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKSB7XG4gICAgdmFyIHBhcnRpYWxzUmlnaHQgPSBwYXJ0aWFscyxcbiAgICAgICAgaG9sZGVyc1JpZ2h0ID0gaG9sZGVycztcblxuICAgIHBhcnRpYWxzID0gaG9sZGVycyA9IHVuZGVmaW5lZDtcbiAgfVxuICB2YXIgZGF0YSA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGdldERhdGEoZnVuYyk7XG5cbiAgdmFyIG5ld0RhdGEgPSBbXG4gICAgZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCxcbiAgICBhcmdQb3MsIGFyeSwgYXJpdHlcbiAgXTtcblxuICBpZiAoZGF0YSkge1xuICAgIG1lcmdlRGF0YShuZXdEYXRhLCBkYXRhKTtcbiAgfVxuICBmdW5jID0gbmV3RGF0YVswXTtcbiAgYml0bWFzayA9IG5ld0RhdGFbMV07XG4gIHRoaXNBcmcgPSBuZXdEYXRhWzJdO1xuICBwYXJ0aWFscyA9IG5ld0RhdGFbM107XG4gIGhvbGRlcnMgPSBuZXdEYXRhWzRdO1xuICBhcml0eSA9IG5ld0RhdGFbOV0gPSBuZXdEYXRhWzldID09PSB1bmRlZmluZWRcbiAgICA/IChpc0JpbmRLZXkgPyAwIDogZnVuYy5sZW5ndGgpXG4gICAgOiBuYXRpdmVNYXgobmV3RGF0YVs5XSAtIGxlbmd0aCwgMCk7XG5cbiAgaWYgKCFhcml0eSAmJiBiaXRtYXNrICYgKFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfQ1VSUllfUklHSFRfRkxBRykpIHtcbiAgICBiaXRtYXNrICY9IH4oV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKTtcbiAgfVxuICBpZiAoIWJpdG1hc2sgfHwgYml0bWFzayA9PSBXUkFQX0JJTkRfRkxBRykge1xuICAgIHZhciByZXN1bHQgPSBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpO1xuICB9IGVsc2UgaWYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHIHx8IGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSB7XG4gICAgcmVzdWx0ID0gY3JlYXRlQ3VycnkoZnVuYywgYml0bWFzaywgYXJpdHkpO1xuICB9IGVsc2UgaWYgKChiaXRtYXNrID09IFdSQVBfUEFSVElBTF9GTEFHIHx8IGJpdG1hc2sgPT0gKFdSQVBfQklORF9GTEFHIHwgV1JBUF9QQVJUSUFMX0ZMQUcpKSAmJiAhaG9sZGVycy5sZW5ndGgpIHtcbiAgICByZXN1bHQgPSBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSBjcmVhdGVIeWJyaWQuYXBwbHkodW5kZWZpbmVkLCBuZXdEYXRhKTtcbiAgfVxuICB2YXIgc2V0dGVyID0gZGF0YSA/IGJhc2VTZXREYXRhIDogc2V0RGF0YTtcbiAgcmV0dXJuIHNldFdyYXBUb1N0cmluZyhzZXR0ZXIocmVzdWx0LCBuZXdEYXRhKSwgZnVuYywgYml0bWFzayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlV3JhcDtcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBtZXRhTWFwID0gcmVxdWlyZSgnLi9fbWV0YU1hcCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXREYXRhYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldERhdGEgPSAhbWV0YU1hcCA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgZGF0YSkge1xuICBtZXRhTWFwLnNldChmdW5jLCBkYXRhKTtcbiAgcmV0dXJuIGZ1bmM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTZXREYXRhO1xuIiwidmFyIFdlYWtNYXAgPSByZXF1aXJlKCcuL19XZWFrTWFwJyk7XG5cbi8qKiBVc2VkIHRvIHN0b3JlIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIG1ldGFNYXAgPSBXZWFrTWFwICYmIG5ldyBXZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1ldGFNYXA7XG4iLCJ2YXIgY29tcG9zZUFyZ3MgPSByZXF1aXJlKCcuL19jb21wb3NlQXJncycpLFxuICAgIGNvbXBvc2VBcmdzUmlnaHQgPSByZXF1aXJlKCcuL19jb21wb3NlQXJnc1JpZ2h0JyksXG4gICAgY291bnRIb2xkZXJzID0gcmVxdWlyZSgnLi9fY291bnRIb2xkZXJzJyksXG4gICAgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICBjcmVhdGVSZWN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlUmVjdXJyeScpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlb3JkZXIgPSByZXF1aXJlKCcuL19yZW9yZGVyJyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9DVVJSWV9SSUdIVF9GTEFHID0gMTYsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX0ZMSVBfRkxBRyA9IDUxMjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggb3B0aW9uYWwgYHRoaXNgXG4gKiBiaW5kaW5nIG9mIGB0aGlzQXJnYCwgcGFydGlhbCBhcHBsaWNhdGlvbiwgYW5kIGN1cnJ5aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNSaWdodF0gVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWRcbiAqICB0byB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNSaWdodF0gVGhlIGBwYXJ0aWFsc1JpZ2h0YCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUh5YnJpZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgdmFyIGlzQXJ5ID0gYml0bWFzayAmIFdSQVBfQVJZX0ZMQUcsXG4gICAgICBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBpc0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0tFWV9GTEFHLFxuICAgICAgaXNDdXJyaWVkID0gYml0bWFzayAmIChXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpLFxuICAgICAgaXNGbGlwID0gYml0bWFzayAmIFdSQVBfRkxJUF9GTEFHLFxuICAgICAgQ3RvciA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuXG4gICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICB9XG4gICAgaWYgKGlzQ3VycmllZCkge1xuICAgICAgdmFyIHBsYWNlaG9sZGVyID0gZ2V0SG9sZGVyKHdyYXBwZXIpLFxuICAgICAgICAgIGhvbGRlcnNDb3VudCA9IGNvdW50SG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG4gICAgfVxuICAgIGlmIChwYXJ0aWFscykge1xuICAgICAgYXJncyA9IGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpO1xuICAgIH1cbiAgICBpZiAocGFydGlhbHNSaWdodCkge1xuICAgICAgYXJncyA9IGNvbXBvc2VBcmdzUmlnaHQoYXJncywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBpc0N1cnJpZWQpO1xuICAgIH1cbiAgICBsZW5ndGggLT0gaG9sZGVyc0NvdW50O1xuICAgIGlmIChpc0N1cnJpZWQgJiYgbGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgIHZhciBuZXdIb2xkZXJzID0gcmVwbGFjZUhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlY3VycnkoXG4gICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhvbGRlciwgdGhpc0FyZyxcbiAgICAgICAgYXJncywgbmV3SG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5IC0gbGVuZ3RoXG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgdGhpc0JpbmRpbmcgPSBpc0JpbmQgPyB0aGlzQXJnIDogdGhpcyxcbiAgICAgICAgZm4gPSBpc0JpbmRLZXkgPyB0aGlzQmluZGluZ1tmdW5jXSA6IGZ1bmM7XG5cbiAgICBsZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgICBpZiAoYXJnUG9zKSB7XG4gICAgICBhcmdzID0gcmVvcmRlcihhcmdzLCBhcmdQb3MpO1xuICAgIH0gZWxzZSBpZiAoaXNGbGlwICYmIGxlbmd0aCA+IDEpIHtcbiAgICAgIGFyZ3MucmV2ZXJzZSgpO1xuICAgIH1cbiAgICBpZiAoaXNBcnkgJiYgYXJ5IDwgbGVuZ3RoKSB7XG4gICAgICBhcmdzLmxlbmd0aCA9IGFyeTtcbiAgICB9XG4gICAgaWYgKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikge1xuICAgICAgZm4gPSBDdG9yIHx8IGNyZWF0ZUN0b3IoZm4pO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUh5YnJpZDtcbiIsIi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cyxcbiAqIHBsYWNlaG9sZGVycywgYW5kIHByb3ZpZGVkIGFyZ3VtZW50cyBpbnRvIGEgc2luZ2xlIGFycmF5IG9mIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICogQHBhcmFtIHtBcnJheX0gaG9sZGVycyBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtcyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3VycmllZCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbXBvc2VkIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gY29tcG9zZUFyZ3MoYXJncywgcGFydGlhbHMsIGhvbGRlcnMsIGlzQ3VycmllZCkge1xuICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGgsXG4gICAgICBob2xkZXJzTGVuZ3RoID0gaG9sZGVycy5sZW5ndGgsXG4gICAgICBsZWZ0SW5kZXggPSAtMSxcbiAgICAgIGxlZnRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICByYW5nZUxlbmd0aCA9IG5hdGl2ZU1heChhcmdzTGVuZ3RoIC0gaG9sZGVyc0xlbmd0aCwgMCksXG4gICAgICByZXN1bHQgPSBBcnJheShsZWZ0TGVuZ3RoICsgcmFuZ2VMZW5ndGgpLFxuICAgICAgaXNVbmN1cnJpZWQgPSAhaXNDdXJyaWVkO1xuXG4gIHdoaWxlICgrK2xlZnRJbmRleCA8IGxlZnRMZW5ndGgpIHtcbiAgICByZXN1bHRbbGVmdEluZGV4XSA9IHBhcnRpYWxzW2xlZnRJbmRleF07XG4gIH1cbiAgd2hpbGUgKCsrYXJnc0luZGV4IDwgaG9sZGVyc0xlbmd0aCkge1xuICAgIGlmIChpc1VuY3VycmllZCB8fCBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoKSB7XG4gICAgICByZXN1bHRbaG9sZGVyc1thcmdzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4XTtcbiAgICB9XG4gIH1cbiAgd2hpbGUgKHJhbmdlTGVuZ3RoLS0pIHtcbiAgICByZXN1bHRbbGVmdEluZGV4KytdID0gYXJnc1thcmdzSW5kZXgrK107XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb21wb3NlQXJncztcbiIsIi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGNvbXBvc2VBcmdzYCBleGNlcHQgdGhhdCB0aGUgYXJndW1lbnRzIGNvbXBvc2l0aW9uXG4gKiBpcyB0YWlsb3JlZCBmb3IgYF8ucGFydGlhbFJpZ2h0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWQuXG4gKiBAcGFyYW0ge0FycmF5fSBob2xkZXJzIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW1zIHtib29sZWFufSBbaXNDdXJyaWVkXSBTcGVjaWZ5IGNvbXBvc2luZyBmb3IgYSBjdXJyaWVkIGZ1bmN0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tcG9zZWQgYXJndW1lbnRzLlxuICovXG5mdW5jdGlvbiBjb21wb3NlQXJnc1JpZ2h0KGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpIHtcbiAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgaG9sZGVyc0luZGV4ID0gLTEsXG4gICAgICBob2xkZXJzTGVuZ3RoID0gaG9sZGVycy5sZW5ndGgsXG4gICAgICByaWdodEluZGV4ID0gLTEsXG4gICAgICByaWdodExlbmd0aCA9IHBhcnRpYWxzLmxlbmd0aCxcbiAgICAgIHJhbmdlTGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3NMZW5ndGggLSBob2xkZXJzTGVuZ3RoLCAwKSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHJhbmdlTGVuZ3RoICsgcmlnaHRMZW5ndGgpLFxuICAgICAgaXNVbmN1cnJpZWQgPSAhaXNDdXJyaWVkO1xuXG4gIHdoaWxlICgrK2FyZ3NJbmRleCA8IHJhbmdlTGVuZ3RoKSB7XG4gICAgcmVzdWx0W2FyZ3NJbmRleF0gPSBhcmdzW2FyZ3NJbmRleF07XG4gIH1cbiAgdmFyIG9mZnNldCA9IGFyZ3NJbmRleDtcbiAgd2hpbGUgKCsrcmlnaHRJbmRleCA8IHJpZ2h0TGVuZ3RoKSB7XG4gICAgcmVzdWx0W29mZnNldCArIHJpZ2h0SW5kZXhdID0gcGFydGlhbHNbcmlnaHRJbmRleF07XG4gIH1cbiAgd2hpbGUgKCsraG9sZGVyc0luZGV4IDwgaG9sZGVyc0xlbmd0aCkge1xuICAgIGlmIChpc1VuY3VycmllZCB8fCBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoKSB7XG4gICAgICByZXN1bHRbb2Zmc2V0ICsgaG9sZGVyc1tob2xkZXJzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBvc2VBcmdzUmlnaHQ7XG4iLCJ2YXIgaXNMYXppYWJsZSA9IHJlcXVpcmUoJy4vX2lzTGF6aWFibGUnKSxcbiAgICBzZXREYXRhID0gcmVxdWlyZSgnLi9fc2V0RGF0YScpLFxuICAgIHNldFdyYXBUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFdyYXBUb1N0cmluZycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICBXUkFQX0NVUlJZX0JPVU5EX0ZMQUcgPSA0LFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMixcbiAgICBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA9IDY0O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBjb250aW51ZSBjdXJyeWluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB3cmFwRnVuYyBUaGUgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBgZnVuY2Agd3JhcHBlci5cbiAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHZhbHVlLlxuICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkIHRvXG4gKiAgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJlY3VycnkoZnVuYywgYml0bWFzaywgd3JhcEZ1bmMsIHBsYWNlaG9sZGVyLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5KSB7XG4gIHZhciBpc0N1cnJ5ID0gYml0bWFzayAmIFdSQVBfQ1VSUllfRkxBRyxcbiAgICAgIG5ld0hvbGRlcnMgPSBpc0N1cnJ5ID8gaG9sZGVycyA6IHVuZGVmaW5lZCxcbiAgICAgIG5ld0hvbGRlcnNSaWdodCA9IGlzQ3VycnkgPyB1bmRlZmluZWQgOiBob2xkZXJzLFxuICAgICAgbmV3UGFydGlhbHMgPSBpc0N1cnJ5ID8gcGFydGlhbHMgOiB1bmRlZmluZWQsXG4gICAgICBuZXdQYXJ0aWFsc1JpZ2h0ID0gaXNDdXJyeSA/IHVuZGVmaW5lZCA6IHBhcnRpYWxzO1xuXG4gIGJpdG1hc2sgfD0gKGlzQ3VycnkgPyBXUkFQX1BBUlRJQUxfRkxBRyA6IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKTtcbiAgYml0bWFzayAmPSB+KGlzQ3VycnkgPyBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA6IFdSQVBfUEFSVElBTF9GTEFHKTtcblxuICBpZiAoIShiaXRtYXNrICYgV1JBUF9DVVJSWV9CT1VORF9GTEFHKSkge1xuICAgIGJpdG1hc2sgJj0gfihXUkFQX0JJTkRfRkxBRyB8IFdSQVBfQklORF9LRVlfRkxBRyk7XG4gIH1cbiAgdmFyIG5ld0RhdGEgPSBbXG4gICAgZnVuYywgYml0bWFzaywgdGhpc0FyZywgbmV3UGFydGlhbHMsIG5ld0hvbGRlcnMsIG5ld1BhcnRpYWxzUmlnaHQsXG4gICAgbmV3SG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHlcbiAgXTtcblxuICB2YXIgcmVzdWx0ID0gd3JhcEZ1bmMuYXBwbHkodW5kZWZpbmVkLCBuZXdEYXRhKTtcbiAgaWYgKGlzTGF6aWFibGUoZnVuYykpIHtcbiAgICBzZXREYXRhKHJlc3VsdCwgbmV3RGF0YSk7XG4gIH1cbiAgcmVzdWx0LnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7XG4gIHJldHVybiBzZXRXcmFwVG9TdHJpbmcocmVzdWx0LCBmdW5jLCBiaXRtYXNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSZWN1cnJ5O1xuIiwidmFyIG1ldGFNYXAgPSByZXF1aXJlKCcuL19tZXRhTWFwJyksXG4gICAgbm9vcCA9IHJlcXVpcmUoJy4vbm9vcCcpO1xuXG4vKipcbiAqIEdldHMgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAqL1xudmFyIGdldERhdGEgPSAhbWV0YU1hcCA/IG5vb3AgOiBmdW5jdGlvbihmdW5jKSB7XG4gIHJldHVybiBtZXRhTWFwLmdldChmdW5jKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RGF0YTtcbiIsInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGJhc2VMb2Rhc2ggPSByZXF1aXJlKCcuL19iYXNlTG9kYXNoJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgY29uc3RydWN0b3IgZm9yIGNyZWF0aW5nIGBsb2Rhc2hgIHdyYXBwZXIgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoYWluQWxsXSBFbmFibGUgZXhwbGljaXQgbWV0aG9kIGNoYWluIHNlcXVlbmNlcy5cbiAqL1xuZnVuY3Rpb24gTG9kYXNoV3JhcHBlcih2YWx1ZSwgY2hhaW5BbGwpIHtcbiAgdGhpcy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICB0aGlzLl9fYWN0aW9uc19fID0gW107XG4gIHRoaXMuX19jaGFpbl9fID0gISFjaGFpbkFsbDtcbiAgdGhpcy5fX2luZGV4X18gPSAwO1xuICB0aGlzLl9fdmFsdWVzX18gPSB1bmRlZmluZWQ7XG59XG5cbkxvZGFzaFdyYXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7XG5Mb2Rhc2hXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvZGFzaFdyYXBwZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTG9kYXNoV3JhcHBlcjtcbiIsIi8qKlxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlBcnJheTtcbiIsInZhciBiYXNlU2V0RGF0YSA9IHJlcXVpcmUoJy4vX2Jhc2VTZXREYXRhJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAqXG4gKiAqKk5vdGU6KiogSWYgdGhpcyBmdW5jdGlvbiBiZWNvbWVzIGhvdCwgaS5lLiBpcyBpbnZva2VkIGEgbG90IGluIGEgc2hvcnRcbiAqIHBlcmlvZCBvZiB0aW1lLCBpdCB3aWxsIHRyaXAgaXRzIGJyZWFrZXIgYW5kIHRyYW5zaXRpb24gdG8gYW4gaWRlbnRpdHlcbiAqIGZ1bmN0aW9uIHRvIGF2b2lkIGdhcmJhZ2UgY29sbGVjdGlvbiBwYXVzZXMgaW4gVjguIFNlZVxuICogW1Y4IGlzc3VlIDIwNzBdKGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTIwNzApXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0RGF0YSA9IHNob3J0T3V0KGJhc2VTZXREYXRhKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXREYXRhO1xuIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3J0T3V0O1xuIiwidmFyIGdldFdyYXBEZXRhaWxzID0gcmVxdWlyZSgnLi9fZ2V0V3JhcERldGFpbHMnKSxcbiAgICBpbnNlcnRXcmFwRGV0YWlscyA9IHJlcXVpcmUoJy4vX2luc2VydFdyYXBEZXRhaWxzJyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpLFxuICAgIHVwZGF0ZVdyYXBEZXRhaWxzID0gcmVxdWlyZSgnLi9fdXBkYXRlV3JhcERldGFpbHMnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgd3JhcHBlcmAgdG8gbWltaWMgdGhlIHNvdXJjZSBvZiBgcmVmZXJlbmNlYFxuICogd2l0aCB3cmFwcGVyIGRldGFpbHMgaW4gYSBjb21tZW50IGF0IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSBib2R5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB3cmFwcGVyIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWZlcmVuY2UgVGhlIHJlZmVyZW5jZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYHdyYXBwZXJgLlxuICovXG5mdW5jdGlvbiBzZXRXcmFwVG9TdHJpbmcod3JhcHBlciwgcmVmZXJlbmNlLCBiaXRtYXNrKSB7XG4gIHZhciBzb3VyY2UgPSAocmVmZXJlbmNlICsgJycpO1xuICByZXR1cm4gc2V0VG9TdHJpbmcod3JhcHBlciwgaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLCB1cGRhdGVXcmFwRGV0YWlscyhnZXRXcmFwRGV0YWlscyhzb3VyY2UpLCBiaXRtYXNrKSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFdyYXBUb1N0cmluZztcbiIsInZhciBiYXNlU2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlU2V0VG9TdHJpbmcnKSxcbiAgICBzaG9ydE91dCA9IHJlcXVpcmUoJy4vX3Nob3J0T3V0Jyk7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9TdHJpbmc7XG4iLCIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNaV0ogPSAnXFxcXHUyMDBkJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHN0cmluZ3Mgd2l0aCBbemVyby13aWR0aCBqb2luZXJzIG9yIGNvZGUgcG9pbnRzIGZyb20gdGhlIGFzdHJhbCBwbGFuZXNdKGh0dHA6Ly9lZXYuZWUvYmxvZy8yMDE1LzA5LzEyL2RhcmstY29ybmVycy1vZi11bmljb2RlLykuICovXG52YXIgcmVIYXNVbmljb2RlID0gUmVnRXhwKCdbJyArIHJzWldKICsgcnNBc3RyYWxSYW5nZSAgKyByc0NvbWJvUmFuZ2UgKyByc1ZhclJhbmdlICsgJ10nKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHN0cmluZ2AgY29udGFpbnMgVW5pY29kZSBzeW1ib2xzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhIHN5bWJvbCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNVbmljb2RlKHN0cmluZykge1xuICByZXR1cm4gcmVIYXNVbmljb2RlLnRlc3Qoc3RyaW5nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNVbmljb2RlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gX2ludGVyb3BEZWZhdWx0KGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2UuZGVmYXVsdDplfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBfZGVmYXVsdDI0PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL19fXCIpKSxfZGVmYXVsdDIzPV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2NvbnRhaW5zXCIpKSxfZGVmYXVsdDIyPV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL3BhcnRpYWxcIikpLF9kZWZhdWx0MjE9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvcGlwZVwiKSksX2RlZmF1bHQyMD1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9rZXlzXCIpKSxfZGVmYXVsdDE5PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2ZvckVhY2hcIikpLF9kZWZhdWx0MTg9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvZGlzc29jXCIpKSxfZGVmYXVsdDE3PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL21lcmdlXCIpKSxfZGVmYXVsdDE2PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL3Byb3BcIikpLF9kZWZhdWx0MTU9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvYWx3YXlzXCIpKSxfZGVmYXVsdDE0PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2lmRWxzZVwiKSksX2RlZmF1bHQxMz1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9wcm9wU2F0aXNmaWVzXCIpKSxfZGVmYXVsdDEyPV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL3Byb3BJc1wiKSksX2RlZmF1bHQxMT1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9oYXNcIikpLF9kZWZhdWx0MTA9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvY29tcGxlbWVudFwiKSksX2RlZmF1bHQ5PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2lzRW1wdHlcIikpLF9kZWZhdWx0OD1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9hbnlQYXNzXCIpKSxfZGVmYXVsdDc9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvZ3RlXCIpKSxfZGVmYXVsdDY9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvY3VycnlcIikpLF9kZWZhdWx0NT1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9UXCIpKSxfZGVmYXVsdDQ9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvaXNcIikpLF9kZWZhdWx0Mz1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9pZGVudGl0eVwiKSksX2RlZmF1bHQyPV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2lzTmlsXCIpKSxfZGVmYXVsdD1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9jb25kXCIpKSxheGlvcz1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKSxfdHlwZW9mPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LF9leHRlbmRzPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9O0Z1bmN0aW9uLnByb3RvdHlwZS4kYXN5bmNiaW5kPWZ1bmN0aW9uIGUodCxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIGEuYXBwbHkodCxhcmd1bWVudHMpfUZ1bmN0aW9uLnByb3RvdHlwZS4kYXN5bmNiaW5kfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLFwiJGFzeW5jYmluZFwiLHt2YWx1ZTplLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZS50cmFtcG9saW5lfHwoZS50cmFtcG9saW5lPWZ1bmN0aW9uKGUsdCxyLG4sYSl7cmV0dXJuIGZ1bmN0aW9uIHUoaSl7Zm9yKDtpOyl7aWYoaS50aGVuKXJldHVybiBpPWkudGhlbih1LG4pLGE/dm9pZCAwOmk7dHJ5e2lmKGkucG9wKXtpZihpLmxlbmd0aClyZXR1cm4gaS5wb3AoKT90LmNhbGwoZSk6aTtpPXJ9ZWxzZSBpPWkuY2FsbChlKX1jYXRjaChlKXtyZXR1cm4gbihlKX19fX0pLGUuTGF6eVRoZW5hYmxlfHwoZS5MYXp5VGhlbmFibGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiBlJiZlIGluc3RhbmNlb2YgT2JqZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnRoZW59ZnVuY3Rpb24gdChyLG4sYSl7dHJ5e3ZhciB1PWE/YShuKTpuO2lmKHI9PT11KXJldHVybiByLnJlamVjdChuZXcgVHlwZUVycm9yKFwiUHJvbWlzZSByZXNvbHV0aW9uIGxvb3BcIikpO2UodSk/dS50aGVuKGZ1bmN0aW9uKGUpe3QocixlKX0sZnVuY3Rpb24oZSl7ci5yZWplY3QoZSl9KTpyLnJlc29sdmUodSl9Y2F0Y2goZSl7ci5yZWplY3QoZSl9fWZ1bmN0aW9uIHIoKXt9ZnVuY3Rpb24gbihlKXt9ZnVuY3Rpb24gYShlLHQpe3RoaXMucmVzb2x2ZT1lLHRoaXMucmVqZWN0PXR9ZnVuY3Rpb24gdShuLGEpe3ZhciB1PW5ldyByO3RyeXt0aGlzLl9yZXNvbHZlcihmdW5jdGlvbihyKXtyZXR1cm4gZShyKT9yLnRoZW4obixhKTp0KHUscixuKX0sZnVuY3Rpb24oZSl7dCh1LGUsYSl9KX1jYXRjaChlKXt0KHUsZSxhKX1yZXR1cm4gdX1mdW5jdGlvbiBpKGUpe3RoaXMuX3Jlc29sdmVyPWUsdGhpcy50aGVuPXV9cmV0dXJuIHIucHJvdG90eXBlPXtyZXNvbHZlOm4scmVqZWN0Om4sdGhlbjphfSxpLnJlc29sdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGkuaXNUaGVuYWJsZShlKT9lOnt0aGVuOmZ1bmN0aW9uKHQpe3JldHVybiB0KGUpfX19LGkuaXNUaGVuYWJsZT1lLGl9KCksZS5FYWdlclRoZW5hYmxlPWUuVGhlbmFibGU9KGUuRWFnZXJUaGVuYWJsZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtpZihlKXt2YXIgdD10aGlzO2UoZnVuY3Rpb24oZSl7dC5yZXNvbHZlKGUpfSxmdW5jdGlvbihlKXt0LnJlamVjdChlKX0pfX1mdW5jdGlvbiByKGUsdCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS55KXRyeXt2YXIgcj1lLnkuY2FsbCh2b2lkIDAsdCk7ZS5wLnJlc29sdmUocil9Y2F0Y2godCl7ZS5wLnJlamVjdCh0KX1lbHNlIGUucC5yZXNvbHZlKHQpfWZ1bmN0aW9uIG4oZSx0KXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLm4pdHJ5e3ZhciByPWUubi5jYWxsKHZvaWQgMCx0KTtlLnAucmVzb2x2ZShyKX1jYXRjaCh0KXtlLnAucmVqZWN0KHQpfWVsc2UgZS5wLnJlamVjdCh0KX1lPWV8fFwib2JqZWN0XCI9PT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIHByb2Nlc3M/XCJ1bmRlZmluZWRcIjpfdHlwZW9mKHByb2Nlc3MpKSYmcHJvY2Vzcy5uZXh0VGlja3x8XCJmdW5jdGlvblwiPT10eXBlb2Ygc2V0SW1tZWRpYXRlJiZzZXRJbW1lZGlhdGV8fGZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZSwwKX07dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aC1uOyl7dHJ5e3Jbbl0oKX1jYXRjaChlKXt9cltuKytdPXZvaWQgMCxuPT09YSYmKHIuc3BsaWNlKDAsYSksbj0wKX19dmFyIHI9W10sbj0wLGE9MTAyNDtyZXR1cm4gZnVuY3Rpb24oYSl7ci5wdXNoKGEpLHIubGVuZ3RoLW49PT0xJiZlKHQpfX0oKTtyZXR1cm4gdC5wcm90b3R5cGU9e3Jlc29sdmU6ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09dGhpcy5zdGF0ZSl7aWYoZT09PXRoaXMpcmV0dXJuIHRoaXMucmVqZWN0KG5ldyBUeXBlRXJyb3IoXCJBdHRlbXB0IHRvIHJlc29sdmUgcHJvbWlzZSB3aXRoIHNlbGZcIikpO3ZhciB0PXRoaXM7aWYoZSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGV8fFwib2JqZWN0XCI9PT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIGU/XCJ1bmRlZmluZWRcIjpfdHlwZW9mKGUpKSkpdHJ5e3ZhciBuPTAsdT1lLnRoZW47aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdSlyZXR1cm4gdm9pZCB1LmNhbGwoZSxmdW5jdGlvbihlKXtuKyt8fHQucmVzb2x2ZShlKX0sZnVuY3Rpb24oZSl7bisrfHx0LnJlamVjdChlKX0pfWNhdGNoKGUpe3JldHVybiB2b2lkKG58fHRoaXMucmVqZWN0KGUpKX10aGlzLnN0YXRlPXIsdGhpcy52PWUsdC5jJiZhKGZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAsYT10LmMubGVuZ3RoO248YTtuKyspcih0LmNbbl0sZSl9KX19LHJlamVjdDpmdW5jdGlvbihlKXtpZih2b2lkIDA9PT10aGlzLnN0YXRlKXt0aGlzLnN0YXRlPW4sdGhpcy52PWU7dmFyIHQ9dGhpcy5jO3QmJmEoZnVuY3Rpb24oKXtmb3IodmFyIHI9MCxhPXQubGVuZ3RoO3I8YTtyKyspbih0W3JdLGUpfSl9fSx0aGVuOmZ1bmN0aW9uKGUscil7dmFyIG49bmV3IHQsdT17eTplLG46cixwOm59O2lmKHZvaWQgMD09PXRoaXMuc3RhdGUpdGhpcy5jP3RoaXMuYy5wdXNoKHUpOnRoaXMuYz1bdV07ZWxzZXt2YXIgaT10aGlzLnN0YXRlLG89dGhpcy52O2EoZnVuY3Rpb24oKXtpKHUsbyl9KX1yZXR1cm4gbn19LHQucmVzb2x2ZT1mdW5jdGlvbihlKXtpZihlJiZlIGluc3RhbmNlb2YgdClyZXR1cm4gZTt2YXIgcj1uZXcgdDtyZXR1cm4gci5yZXNvbHZlKGUpLHJ9LHQucmVqZWN0PWZ1bmN0aW9uKGUpe2lmKGUmJmUgaW5zdGFuY2VvZiB0KXJldHVybiBlO3ZhciByPW5ldyB0O3JldHVybiByLnJlamVjdChlKSxyfSx0LnZlcnNpb249XCIyLjMuMy1ub2RlbnRcIix0fSkoKSk7dmFyIGE9dGhpcztzd2l0Y2gocil7Y2FzZSEwOnJldHVybiBuZXcgZS5UaGVuYWJsZShuKTtjYXNlIDA6cmV0dXJuIG5ldyBlLkxhenlUaGVuYWJsZShuKTtjYXNlIHZvaWQgMDpyZXR1cm4gbi50aGVuPW4sbjtkZWZhdWx0OnJldHVybiBmdW5jdGlvbigpe3RyeXtyZXR1cm4gYS5hcHBseSh0LGFyZ3VtZW50cyl9Y2F0Y2goZSl7cmV0dXJuIHIoZSl9fX19O3ZhciB0b051bWJlcj1fZGVmYXVsdChbW19kZWZhdWx0MixfZGVmYXVsdDNdLFtfZGVmYXVsdDQoTnVtYmVyKSxfZGVmYXVsdDNdLFtfZGVmYXVsdDUsZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlKX1dXSksaXNXaXRoaW49X2RlZmF1bHQ2KGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1fZGVmYXVsdDQoTnVtYmVyKTtyZXR1cm4gbihlKSYmbih0KSYmbihyKSYmX2RlZmF1bHQ3KHIsZSkmJl9kZWZhdWx0Nyh0LHIpfSksaXNJbnZhbGlkQ29uZmlnPV9kZWZhdWx0OChbX2RlZmF1bHQyLF9kZWZhdWx0OSxfZGVmYXVsdDEwKF9kZWZhdWx0MTEoXCJiYXNlVVJMXCIpKSxfZGVmYXVsdDEwKF9kZWZhdWx0MTIoU3RyaW5nLFwiYmFzZVVSTFwiKSksX2RlZmF1bHQxMyhfZGVmYXVsdDksXCJiYXNlVVJMXCIpXSksaXNQcm9taXNlPWZ1bmN0aW9uKGUpe3JldHVybiEhZSYmKFwib2JqZWN0XCI9PT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIGU/XCJ1bmRlZmluZWRcIjpfdHlwZW9mKGUpKXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZSkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUudGhlbn0sREVGQVVMVF9IRUFERVJTPXtBY2NlcHQ6XCJhcHBsaWNhdGlvbi9qc29uXCIsXCJDb250ZW50LVR5cGVcIjpcImFwcGxpY2F0aW9uL2pzb25cIn0sREVGQVVMVF9DT05GSUc9e3RpbWVvdXQ6MH0sTk9ORT1udWxsLENMSUVOVF9FUlJPUj1cIkNMSUVOVF9FUlJPUlwiLFNFUlZFUl9FUlJPUj1cIlNFUlZFUl9FUlJPUlwiLFRJTUVPVVRfRVJST1I9XCJUSU1FT1VUX0VSUk9SXCIsQ09OTkVDVElPTl9FUlJPUj1cIkNPTk5FQ1RJT05fRVJST1JcIixORVRXT1JLX0VSUk9SPVwiTkVUV09SS19FUlJPUlwiLFVOS05PV05fRVJST1I9XCJVTktOT1dOX0VSUk9SXCIsQ0FOQ0VMX0VSUk9SPVwiQ0FOQ0VMX0VSUk9SXCIsVElNRU9VVF9FUlJPUl9DT0RFUz1bXCJFQ09OTkFCT1JURURcIl0sTk9ERUpTX0NPTk5FQ1RJT05fRVJST1JfQ09ERVM9W1wiRU5PVEZPVU5EXCIsXCJFQ09OTlJFRlVTRURcIixcIkVDT05OUkVTRVRcIl0saW4yMDBzPWlzV2l0aGluKDIwMCwyOTkpLGluNDAwcz1pc1dpdGhpbig0MDAsNDk5KSxpbjUwMHM9aXNXaXRoaW4oNTAwLDU5OSksc3RhdHVzTmlsPV9kZWZhdWx0MTQoX2RlZmF1bHQyLF9kZWZhdWx0MTUodm9pZCAwKSxfZGVmYXVsdDE2KFwic3RhdHVzXCIpKSxjcmVhdGU9ZnVuY3Rpb24oZSl7aWYoaXNJbnZhbGlkQ29uZmlnKGUpKXRocm93IG5ldyBFcnJvcihcImNvbmZpZyBtdXN0IGhhdmUgYSBiYXNlVVJMXCIpO3ZhciB0PV9kZWZhdWx0MTcoREVGQVVMVF9IRUFERVJTLGUuaGVhZGVyc3x8e30pLHI9X2RlZmF1bHQxNyhERUZBVUxUX0NPTkZJRyxfZGVmYXVsdDE4KFwiaGVhZGVyc1wiLGUpKSxuPWF4aW9zLmNyZWF0ZShyKSxhPVtdLHU9ZnVuY3Rpb24oZSl7YS5wdXNoKGUpfSxpPVtdLG89W10sZj1bXSxzPWZ1bmN0aW9uKGUpe3JldHVybiBpLnB1c2goZSl9LGw9ZnVuY3Rpb24oZSl7cmV0dXJuIG8ucHVzaChlKX0sYz1mdW5jdGlvbihlKXtyZXR1cm4gZi5wdXNoKGUpfSxSPWZ1bmN0aW9uKGUscil7cmV0dXJuIHRbZV09cixufSxkPWZ1bmN0aW9uKGUpe3JldHVybiBfZGVmYXVsdDE5KGZ1bmN0aW9uKHQpe3JldHVybiBSKHQsZVt0XSl9LF9kZWZhdWx0MjAoZSkpLG59LF89ZnVuY3Rpb24oZSl7cmV0dXJuIGRlbGV0ZSB0W2VdLG59LEU9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uZGVmYXVsdHMuYmFzZVVSTD1lLG59LHA9ZnVuY3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0cy5iYXNlVVJMfSxPPWZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LG49YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O3JldHVybiBOKF9kZWZhdWx0MTcoe3VybDp0LHBhcmFtczpyLG1ldGhvZDplfSxuKSl9LGg9ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCxuPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7fTtyZXR1cm4gTihfZGVmYXVsdDE3KHt1cmw6dCxtZXRob2Q6ZSxkYXRhOnJ9LG4pKX0sTj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixhKXtmdW5jdGlvbiB1KCl7ZnVuY3Rpb24gdCgpe3JldHVybiBmfXJldHVybiBjPG8ubGVuZ3RoPyhSPW9bY10oZSksaXNQcm9taXNlKFIpP1IudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMpfS4kYXN5bmNiaW5kKHRoaXMsYSksYSk6UihlKS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwodGhpcyl9LiRhc3luY2JpbmQodGhpcyxhKSxhKSk6WzFdfWZ1bmN0aW9uIGYoKXtyZXR1cm4gYysrLHV9ZnVuY3Rpb24gcygpe3JldHVybiBsLmNhbGwodGhpcyl9ZnVuY3Rpb24gbCgpe3JldHVybiBkPV9kZWZhdWx0MjEoX2RlZmF1bHQyMihULFt0b051bWJlcihuZXcgRGF0ZSldKSx5KSxyKG4ucmVxdWVzdChlKS50aGVuKGQpLmNhdGNoKGQpKX12YXIgYyxSLGQ7cmV0dXJuIGUuaGVhZGVycz1fZXh0ZW5kcyh7fSx0LGUuaGVhZGVycyksaS5sZW5ndGg+MCYmX2RlZmF1bHQxOShmdW5jdGlvbih0KXtyZXR1cm4gdChlKX0saSksby5sZW5ndGg+MD8oYz0wLEZ1bmN0aW9uLiRhc3luY2JpbmQudHJhbXBvbGluZSh0aGlzLHMsZixhLCEwKSh1KSk6bC5jYWxsKHRoaXMpfS4kYXN5bmNiaW5kKHRoaXMpKX0seT1mdW5jdGlvbihlKXtyZXR1cm4gYS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RyeXt0KGUpfWNhdGNoKGUpe319KSxlfSxUPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dG9OdW1iZXIobmV3IERhdGUpLG49ci1lLGE9dCBpbnN0YW5jZW9mIEVycm9yfHxheGlvcy5pc0NhbmNlbCh0KSx1PWE/dC5yZXNwb25zZTp0LGk9dSYmdS5zdGF0dXN8fG51bGwsbz1hP20odCk6dihpKSxzPWluMjAwcyhpKSxsPXQuY29uZmlnfHxudWxsLGM9dSYmdS5oZWFkZXJzfHxudWxsLFI9dSYmdS5kYXRhfHxudWxsLGQ9e2R1cmF0aW9uOm4scHJvYmxlbTpvLG9rOnMsc3RhdHVzOmksaGVhZGVyczpjLGNvbmZpZzpsLGRhdGE6Un07cmV0dXJuIGYubGVuZ3RoPjAmJl9kZWZhdWx0MTkoZnVuY3Rpb24oZSl7cmV0dXJuIGUoZCl9LGYpLGR9LG09ZnVuY3Rpb24oZSl7cmV0dXJuXCJOZXR3b3JrIEVycm9yXCI9PT1lLm1lc3NhZ2U/TkVUV09SS19FUlJPUjpheGlvcy5pc0NhbmNlbChlKT9DQU5DRUxfRVJST1I6X2RlZmF1bHQoW1tfZGVmYXVsdDIsZnVuY3Rpb24oKXtyZXR1cm4gdihzdGF0dXNOaWwoZS5yZXNwb25zZSkpfV0sW19kZWZhdWx0MjMoX2RlZmF1bHQyNCxUSU1FT1VUX0VSUk9SX0NPREVTKSxfZGVmYXVsdDE1KFRJTUVPVVRfRVJST1IpXSxbX2RlZmF1bHQyMyhfZGVmYXVsdDI0LE5PREVKU19DT05ORUNUSU9OX0VSUk9SX0NPREVTKSxfZGVmYXVsdDE1KENPTk5FQ1RJT05fRVJST1IpXSxbX2RlZmF1bHQ1LF9kZWZhdWx0MTUoVU5LTk9XTl9FUlJPUildXSkoZS5jb2RlKX0sdj1mdW5jdGlvbihlKXtyZXR1cm4gX2RlZmF1bHQoW1tfZGVmYXVsdDIsX2RlZmF1bHQxNShVTktOT1dOX0VSUk9SKV0sW2luMjAwcyxfZGVmYXVsdDE1KE5PTkUpXSxbaW40MDBzLF9kZWZhdWx0MTUoQ0xJRU5UX0VSUk9SKV0sW2luNTAwcyxfZGVmYXVsdDE1KFNFUlZFUl9FUlJPUildLFtfZGVmYXVsdDUsX2RlZmF1bHQxNShVTktOT1dOX0VSUk9SKV1dKShlKX0sRD17YXhpb3NJbnN0YW5jZTpuLG1vbml0b3JzOmEsYWRkTW9uaXRvcjp1LHJlcXVlc3RUcmFuc2Zvcm1zOmksYXN5bmNSZXF1ZXN0VHJhbnNmb3JtczpvLHJlc3BvbnNlVHJhbnNmb3JtczpmLGFkZFJlcXVlc3RUcmFuc2Zvcm06cyxhZGRBc3luY1JlcXVlc3RUcmFuc2Zvcm06bCxhZGRSZXNwb25zZVRyYW5zZm9ybTpjLHNldEhlYWRlcjpSLHNldEhlYWRlcnM6ZCxkZWxldGVIZWFkZXI6XyxoZWFkZXJzOnQsc2V0QmFzZVVSTDpFLGdldEJhc2VVUkw6cCxnZXQ6X2RlZmF1bHQyMihPLFtcImdldFwiXSksZGVsZXRlOl9kZWZhdWx0MjIoTyxbXCJkZWxldGVcIl0pLGhlYWQ6X2RlZmF1bHQyMihPLFtcImhlYWRcIl0pLHBvc3Q6X2RlZmF1bHQyMihoLFtcInBvc3RcIl0pLHB1dDpfZGVmYXVsdDIyKGgsW1wicHV0XCJdKSxwYXRjaDpfZGVmYXVsdDIyKGgsW1wicGF0Y2hcIl0pLGxpbms6X2RlZmF1bHQyMihPLFtcImxpbmtcIl0pLHVubGluazpfZGVmYXVsdDIyKE8sW1widW5saW5rXCJdKX07cmV0dXJuIER9LGFwaXNhdWNlPXtERUZBVUxUX0hFQURFUlM6REVGQVVMVF9IRUFERVJTLE5PTkU6Tk9ORSxDTElFTlRfRVJST1I6Q0xJRU5UX0VSUk9SLFNFUlZFUl9FUlJPUjpTRVJWRVJfRVJST1IsVElNRU9VVF9FUlJPUjpUSU1FT1VUX0VSUk9SLENPTk5FQ1RJT05fRVJST1I6Q09OTkVDVElPTl9FUlJPUixORVRXT1JLX0VSUk9SOk5FVFdPUktfRVJST1IsVU5LTk9XTl9FUlJPUjpVTktOT1dOX0VSUk9SLGNyZWF0ZTpjcmVhdGV9O2V4cG9ydHMuREVGQVVMVF9IRUFERVJTPURFRkFVTFRfSEVBREVSUyxleHBvcnRzLk5PTkU9Tk9ORSxleHBvcnRzLkNMSUVOVF9FUlJPUj1DTElFTlRfRVJST1IsZXhwb3J0cy5TRVJWRVJfRVJST1I9U0VSVkVSX0VSUk9SLGV4cG9ydHMuVElNRU9VVF9FUlJPUj1USU1FT1VUX0VSUk9SLGV4cG9ydHMuQ09OTkVDVElPTl9FUlJPUj1DT05ORUNUSU9OX0VSUk9SLGV4cG9ydHMuTkVUV09SS19FUlJPUj1ORVRXT1JLX0VSUk9SLGV4cG9ydHMuVU5LTk9XTl9FUlJPUj1VTktOT1dOX0VSUk9SLGV4cG9ydHMuQ0FOQ0VMX0VSUk9SPUNBTkNFTF9FUlJPUixleHBvcnRzLmNyZWF0ZT1jcmVhdGUsZXhwb3J0cy5kZWZhdWx0PWFwaXNhdWNlO1xuIiwidmFyIGFycmF5RmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXlGaWx0ZXInKSxcbiAgICBiYXNlRmlsdGVyID0gcmVxdWlyZSgnLi9fYmFzZUZpbHRlcicpLFxuICAgIGJhc2VJdGVyYXRlZSA9IHJlcXVpcmUoJy4vX2Jhc2VJdGVyYXRlZScpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nIGFuIGFycmF5IG9mIGFsbCBlbGVtZW50c1xuICogYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICogYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gKlxuICogKipOb3RlOioqIFVubGlrZSBgXy5yZW1vdmVgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAqIEBzZWUgXy5yZWplY3RcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9XG4gKiBdO1xuICpcbiAqIF8uZmlsdGVyKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJ11cbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maWx0ZXIodXNlcnMsIHsgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbHRlcih1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJ11cbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmlsdGVyKHVzZXJzLCAnYWN0aXZlJyk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gKlxuICogLy8gQ29tYmluaW5nIHNldmVyYWwgcHJlZGljYXRlcyB1c2luZyBgXy5vdmVyRXZlcnlgIG9yIGBfLm92ZXJTb21lYC5cbiAqIF8uZmlsdGVyKHVzZXJzLCBfLm92ZXJTb21lKFt7ICdhZ2UnOiAzNiB9LCBbJ2FnZScsIDQwXV0pKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCcsICdiYXJuZXknXVxuICovXG5mdW5jdGlvbiBmaWx0ZXIoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RmlsdGVyIDogYmFzZUZpbHRlcjtcbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgYmFzZUl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZpbHRlcjtcbiIsInZhciBiYXNlSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Jhc2VJbmRleE9mJyksXG4gICAgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi90b0ludGVnZXInKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGB2YWx1ZWAgaXMgZm91bmQgaW4gYGFycmF5YFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gSWYgYGZyb21JbmRleGAgaXMgbmVnYXRpdmUsIGl0J3MgdXNlZCBhcyB0aGVcbiAqIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW5kZXhPZihbMSwgMiwgMSwgMl0sIDIpO1xuICogLy8gPT4gMVxuICpcbiAqIC8vIFNlYXJjaCBmcm9tIHRoZSBgZnJvbUluZGV4YC5cbiAqIF8uaW5kZXhPZihbMSwgMiwgMSwgMl0sIDIsIDIpO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICBpbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCk7XG4gIH1cbiAgcmV0dXJuIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgaW5kZXgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluZGV4T2Y7XG4iLCJ2YXIgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFuIGVtcHR5IG9iamVjdCwgY29sbGVjdGlvbiwgbWFwLCBvciBzZXQuXG4gKlxuICogT2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgbm8gb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkXG4gKiBwcm9wZXJ0aWVzLlxuICpcbiAqIEFycmF5LWxpa2UgdmFsdWVzIHN1Y2ggYXMgYGFyZ3VtZW50c2Agb2JqZWN0cywgYXJyYXlzLCBidWZmZXJzLCBzdHJpbmdzLCBvclxuICogalF1ZXJ5LWxpa2UgY29sbGVjdGlvbnMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYGxlbmd0aGAgb2YgYDBgLlxuICogU2ltaWxhcmx5LCBtYXBzIGFuZCBzZXRzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBzaXplYCBvZiBgMGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZW1wdHksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0VtcHR5KG51bGwpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eSh0cnVlKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkoMSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNFbXB0eSh7ICdhJzogMSB9KTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmXG4gICAgICAoaXNBcnJheSh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZS5zcGxpY2UgPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICBpc0J1ZmZlcih2YWx1ZSkgfHwgaXNUeXBlZEFycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgcmV0dXJuICF2YWx1ZS5sZW5ndGg7XG4gIH1cbiAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSk7XG4gIGlmICh0YWcgPT0gbWFwVGFnIHx8IHRhZyA9PSBzZXRUYWcpIHtcbiAgICByZXR1cm4gIXZhbHVlLnNpemU7XG4gIH1cbiAgaWYgKGlzUHJvdG90eXBlKHZhbHVlKSkge1xuICAgIHJldHVybiAhYmFzZUtleXModmFsdWUpLmxlbmd0aDtcbiAgfVxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0VtcHR5O1xuIiwiIWZ1bmN0aW9uKHIsZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZSgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6KHI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpyfHxzZWxmKS5kYXlqc19wbHVnaW5fcmVsYXRpdmVUaW1lPWUoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtyZXR1cm4gZnVuY3Rpb24ocixlLHQpe3I9cnx8e307dmFyIG49ZS5wcm90b3R5cGUsbz17ZnV0dXJlOlwiaW4gJXNcIixwYXN0OlwiJXMgYWdvXCIsczpcImEgZmV3IHNlY29uZHNcIixtOlwiYSBtaW51dGVcIixtbTpcIiVkIG1pbnV0ZXNcIixoOlwiYW4gaG91clwiLGhoOlwiJWQgaG91cnNcIixkOlwiYSBkYXlcIixkZDpcIiVkIGRheXNcIixNOlwiYSBtb250aFwiLE1NOlwiJWQgbW9udGhzXCIseTpcImEgeWVhclwiLHl5OlwiJWQgeWVhcnNcIn07ZnVuY3Rpb24gaShyLGUsdCxvKXtyZXR1cm4gbi5mcm9tVG9CYXNlKHIsZSx0LG8pfXQuZW4ucmVsYXRpdmVUaW1lPW8sbi5mcm9tVG9CYXNlPWZ1bmN0aW9uKGUsbixpLGQsdSl7Zm9yKHZhciBmLGEscyxsPWkuJGxvY2FsZSgpLnJlbGF0aXZlVGltZXx8byxoPXIudGhyZXNob2xkc3x8W3tsOlwic1wiLHI6NDQsZDpcInNlY29uZFwifSx7bDpcIm1cIixyOjg5fSx7bDpcIm1tXCIscjo0NCxkOlwibWludXRlXCJ9LHtsOlwiaFwiLHI6ODl9LHtsOlwiaGhcIixyOjIxLGQ6XCJob3VyXCJ9LHtsOlwiZFwiLHI6MzV9LHtsOlwiZGRcIixyOjI1LGQ6XCJkYXlcIn0se2w6XCJNXCIscjo0NX0se2w6XCJNTVwiLHI6MTAsZDpcIm1vbnRoXCJ9LHtsOlwieVwiLHI6MTd9LHtsOlwieXlcIixkOlwieWVhclwifV0sbT1oLmxlbmd0aCxjPTA7YzxtO2MrPTEpe3ZhciB5PWhbY107eS5kJiYoZj1kP3QoZSkuZGlmZihpLHkuZCwhMCk6aS5kaWZmKGUseS5kLCEwKSk7dmFyIHA9KHIucm91bmRpbmd8fE1hdGgucm91bmQpKE1hdGguYWJzKGYpKTtpZihzPWY+MCxwPD15LnJ8fCF5LnIpe3A8PTEmJmM+MCYmKHk9aFtjLTFdKTt2YXIgdj1sW3kubF07dSYmKHA9dShcIlwiK3ApKSxhPVwic3RyaW5nXCI9PXR5cGVvZiB2P3YucmVwbGFjZShcIiVkXCIscCk6dihwLG4seS5sLHMpO2JyZWFrfX1pZihuKXJldHVybiBhO3ZhciBNPXM/bC5mdXR1cmU6bC5wYXN0O3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIE0/TShhKTpNLnJlcGxhY2UoXCIlc1wiLGEpfSxuLnRvPWZ1bmN0aW9uKHIsZSl7cmV0dXJuIGkocixlLHRoaXMsITApfSxuLmZyb209ZnVuY3Rpb24ocixlKXtyZXR1cm4gaShyLGUsdGhpcyl9O3ZhciBkPWZ1bmN0aW9uKHIpe3JldHVybiByLiR1P3QudXRjKCk6dCgpfTtuLnRvTm93PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLnRvKGQodGhpcykscil9LG4uZnJvbU5vdz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5mcm9tKGQodGhpcykscil9fX0pKTsiLCIhZnVuY3Rpb24odCxpKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1pKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShpKToodD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzX3BsdWdpbl91dGM9aSgpfSh0aGlzLChmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciB0PVwibWludXRlXCIsaT0vWystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vZyxlPS8oWystXXxcXGRcXGQpL2c7cmV0dXJuIGZ1bmN0aW9uKHMsZixuKXt2YXIgdT1mLnByb3RvdHlwZTtuLnV0Yz1mdW5jdGlvbih0KXt2YXIgaT17ZGF0ZTp0LHV0YzohMCxhcmdzOmFyZ3VtZW50c307cmV0dXJuIG5ldyBmKGkpfSx1LnV0Yz1mdW5jdGlvbihpKXt2YXIgZT1uKHRoaXMudG9EYXRlKCkse2xvY2FsZTp0aGlzLiRMLHV0YzohMH0pO3JldHVybiBpP2UuYWRkKHRoaXMudXRjT2Zmc2V0KCksdCk6ZX0sdS5sb2NhbD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMudG9EYXRlKCkse2xvY2FsZTp0aGlzLiRMLHV0YzohMX0pfTt2YXIgcj11LnBhcnNlO3UucGFyc2U9ZnVuY3Rpb24odCl7dC51dGMmJih0aGlzLiR1PSEwKSx0aGlzLiR1dGlscygpLnUodC4kb2Zmc2V0KXx8KHRoaXMuJG9mZnNldD10LiRvZmZzZXQpLHIuY2FsbCh0aGlzLHQpfTt2YXIgbz11LmluaXQ7dS5pbml0PWZ1bmN0aW9uKCl7aWYodGhpcy4kdSl7dmFyIHQ9dGhpcy4kZDt0aGlzLiR5PXQuZ2V0VVRDRnVsbFllYXIoKSx0aGlzLiRNPXQuZ2V0VVRDTW9udGgoKSx0aGlzLiREPXQuZ2V0VVRDRGF0ZSgpLHRoaXMuJFc9dC5nZXRVVENEYXkoKSx0aGlzLiRIPXQuZ2V0VVRDSG91cnMoKSx0aGlzLiRtPXQuZ2V0VVRDTWludXRlcygpLHRoaXMuJHM9dC5nZXRVVENTZWNvbmRzKCksdGhpcy4kbXM9dC5nZXRVVENNaWxsaXNlY29uZHMoKX1lbHNlIG8uY2FsbCh0aGlzKX07dmFyIGE9dS51dGNPZmZzZXQ7dS51dGNPZmZzZXQ9ZnVuY3Rpb24ocyxmKXt2YXIgbj10aGlzLiR1dGlscygpLnU7aWYobihzKSlyZXR1cm4gdGhpcy4kdT8wOm4odGhpcy4kb2Zmc2V0KT9hLmNhbGwodGhpcyk6dGhpcy4kb2Zmc2V0O2lmKFwic3RyaW5nXCI9PXR5cGVvZiBzJiYocz1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD1cIlwiKTt2YXIgcz10Lm1hdGNoKGkpO2lmKCFzKXJldHVybiBudWxsO3ZhciBmPShcIlwiK3NbMF0pLm1hdGNoKGUpfHxbXCItXCIsMCwwXSxuPWZbMF0sdT02MCorZlsxXSsgK2ZbMl07cmV0dXJuIDA9PT11PzA6XCIrXCI9PT1uP3U6LXV9KHMpLG51bGw9PT1zKSlyZXR1cm4gdGhpczt2YXIgdT1NYXRoLmFicyhzKTw9MTY/NjAqczpzO2lmKDA9PT11KXJldHVybiB0aGlzLnV0YyhmKTt2YXIgcj10aGlzLmNsb25lKCk7aWYoZilyZXR1cm4gci4kb2Zmc2V0PXUsci4kdT0hMSxyO3ZhciBvPXRoaXMuJHU/dGhpcy50b0RhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpOi0xKnRoaXMudXRjT2Zmc2V0KCk7cmV0dXJuKHI9dGhpcy5sb2NhbCgpLmFkZCh1K28sdCkpLiRvZmZzZXQ9dSxyLiR4LiRsb2NhbE9mZnNldD1vLHJ9O3ZhciBoPXUuZm9ybWF0O3UuZm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBpPXR8fCh0aGlzLiR1P1wiWVlZWS1NTS1ERFRISDptbTpzc1taXVwiOlwiXCIpO3JldHVybiBoLmNhbGwodGhpcyxpKX0sdS52YWx1ZU9mPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kdXRpbHMoKS51KHRoaXMuJG9mZnNldCk/MDp0aGlzLiRvZmZzZXQrKHRoaXMuJHguJGxvY2FsT2Zmc2V0fHx0aGlzLiRkLmdldFRpbWV6b25lT2Zmc2V0KCkpO3JldHVybiB0aGlzLiRkLnZhbHVlT2YoKS02ZTQqdH0sdS5pc1VUQz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy4kdX0sdS50b0lTT1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCl9LHUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b0RhdGUoKS50b1VUQ1N0cmluZygpfTt2YXIgbD11LnRvRGF0ZTt1LnRvRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm5cInNcIj09PXQmJnRoaXMuJG9mZnNldD9uKHRoaXMuZm9ybWF0KFwiWVlZWS1NTS1ERCBISDptbTpzczpTU1NcIikpLnRvRGF0ZSgpOmwuY2FsbCh0aGlzKX07dmFyIGM9dS5kaWZmO3UuZGlmZj1mdW5jdGlvbih0LGksZSl7aWYodCYmdGhpcy4kdT09PXQuJHUpcmV0dXJuIGMuY2FsbCh0aGlzLHQsaSxlKTt2YXIgcz10aGlzLmxvY2FsKCksZj1uKHQpLmxvY2FsKCk7cmV0dXJuIGMuY2FsbChzLGYsaSxlKX19fSkpOyIsInZhciBjcmVhdGVDYXNlRmlyc3QgPSByZXF1aXJlKCcuL19jcmVhdGVDYXNlRmlyc3QnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGBzdHJpbmdgIHRvIHVwcGVyIGNhc2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udXBwZXJGaXJzdCgnZnJlZCcpO1xuICogLy8gPT4gJ0ZyZWQnXG4gKlxuICogXy51cHBlckZpcnN0KCdGUkVEJyk7XG4gKiAvLyA9PiAnRlJFRCdcbiAqL1xudmFyIHVwcGVyRmlyc3QgPSBjcmVhdGVDYXNlRmlyc3QoJ3RvVXBwZXJDYXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdXBwZXJGaXJzdDtcbiIsInZhciBjcmVhdGVSYW5nZSA9IHJlcXVpcmUoJy4vX2NyZWF0ZVJhbmdlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBudW1iZXJzIChwb3NpdGl2ZSBhbmQvb3IgbmVnYXRpdmUpIHByb2dyZXNzaW5nIGZyb21cbiAqIGBzdGFydGAgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCBgZW5kYC4gQSBzdGVwIG9mIGAtMWAgaXMgdXNlZCBpZiBhIG5lZ2F0aXZlXG4gKiBgc3RhcnRgIGlzIHNwZWNpZmllZCB3aXRob3V0IGFuIGBlbmRgIG9yIGBzdGVwYC4gSWYgYGVuZGAgaXMgbm90IHNwZWNpZmllZCxcbiAqIGl0J3Mgc2V0IHRvIGBzdGFydGAgd2l0aCBgc3RhcnRgIHRoZW4gc2V0IHRvIGAwYC5cbiAqXG4gKiAqKk5vdGU6KiogSmF2YVNjcmlwdCBmb2xsb3dzIHRoZSBJRUVFLTc1NCBzdGFuZGFyZCBmb3IgcmVzb2x2aW5nXG4gKiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgd2hpY2ggY2FuIHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTFdIFRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5nZSBvZiBudW1iZXJzLlxuICogQHNlZSBfLmluUmFuZ2UsIF8ucmFuZ2VSaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnJhbmdlKDQpO1xuICogLy8gPT4gWzAsIDEsIDIsIDNdXG4gKlxuICogXy5yYW5nZSgtNCk7XG4gKiAvLyA9PiBbMCwgLTEsIC0yLCAtM11cbiAqXG4gKiBfLnJhbmdlKDEsIDUpO1xuICogLy8gPT4gWzEsIDIsIDMsIDRdXG4gKlxuICogXy5yYW5nZSgwLCAyMCwgNSk7XG4gKiAvLyA9PiBbMCwgNSwgMTAsIDE1XVxuICpcbiAqIF8ucmFuZ2UoMCwgLTQsIC0xKTtcbiAqIC8vID0+IFswLCAtMSwgLTIsIC0zXVxuICpcbiAqIF8ucmFuZ2UoMSwgNCwgMCk7XG4gKiAvLyA9PiBbMSwgMSwgMV1cbiAqXG4gKiBfLnJhbmdlKDApO1xuICogLy8gPT4gW11cbiAqL1xudmFyIHJhbmdlID0gY3JlYXRlUmFuZ2UoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByYW5nZTtcbiIsInZhciBzY29wZSA9ICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbCkgfHxcbiAgICAgICAgICAgICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmKSB8fFxuICAgICAgICAgICAgd2luZG93O1xudmFyIGFwcGx5ID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O1xuXG4vLyBET00gQVBJcywgZm9yIGNvbXBsZXRlbmVzc1xuXG5leHBvcnRzLnNldFRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0VGltZW91dCwgc2NvcGUsIGFyZ3VtZW50cyksIGNsZWFyVGltZW91dCk7XG59O1xuZXhwb3J0cy5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRJbnRlcnZhbCwgc2NvcGUsIGFyZ3VtZW50cyksIGNsZWFySW50ZXJ2YWwpO1xufTtcbmV4cG9ydHMuY2xlYXJUaW1lb3V0ID1cbmV4cG9ydHMuY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHtcbiAgaWYgKHRpbWVvdXQpIHtcbiAgICB0aW1lb3V0LmNsb3NlKCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIFRpbWVvdXQoaWQsIGNsZWFyRm4pIHtcbiAgdGhpcy5faWQgPSBpZDtcbiAgdGhpcy5fY2xlYXJGbiA9IGNsZWFyRm47XG59XG5UaW1lb3V0LnByb3RvdHlwZS51bnJlZiA9IFRpbWVvdXQucHJvdG90eXBlLnJlZiA9IGZ1bmN0aW9uKCkge307XG5UaW1lb3V0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jbGVhckZuLmNhbGwoc2NvcGUsIHRoaXMuX2lkKTtcbn07XG5cbi8vIERvZXMgbm90IHN0YXJ0IHRoZSB0aW1lLCBqdXN0IHNldHMgdXAgdGhlIG1lbWJlcnMgbmVlZGVkLlxuZXhwb3J0cy5lbnJvbGwgPSBmdW5jdGlvbihpdGVtLCBtc2Vjcykge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gbXNlY3M7XG59O1xuXG5leHBvcnRzLnVuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gLTE7XG59O1xuXG5leHBvcnRzLl91bnJlZkFjdGl2ZSA9IGV4cG9ydHMuYWN0aXZlID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG5cbiAgdmFyIG1zZWNzID0gaXRlbS5faWRsZVRpbWVvdXQ7XG4gIGlmIChtc2VjcyA+PSAwKSB7XG4gICAgaXRlbS5faWRsZVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gb25UaW1lb3V0KCkge1xuICAgICAgaWYgKGl0ZW0uX29uVGltZW91dClcbiAgICAgICAgaXRlbS5fb25UaW1lb3V0KCk7XG4gICAgfSwgbXNlY3MpO1xuICB9XG59O1xuXG4vLyBzZXRpbW1lZGlhdGUgYXR0YWNoZXMgaXRzZWxmIHRvIHRoZSBnbG9iYWwgb2JqZWN0XG5yZXF1aXJlKFwic2V0aW1tZWRpYXRlXCIpO1xuLy8gT24gc29tZSBleG90aWMgZW52aXJvbm1lbnRzLCBpdCdzIG5vdCBjbGVhciB3aGljaCBvYmplY3QgYHNldGltbWVkaWF0ZWAgd2FzXG4vLyBhYmxlIHRvIGluc3RhbGwgb250by4gIFNlYXJjaCBlYWNoIHBvc3NpYmlsaXR5IGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZVxuLy8gYHNldGltbWVkaWF0ZWAgbGlicmFyeS5cbmV4cG9ydHMuc2V0SW1tZWRpYXRlID0gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYuc2V0SW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwuc2V0SW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAodGhpcyAmJiB0aGlzLnNldEltbWVkaWF0ZSk7XG5leHBvcnRzLmNsZWFySW1tZWRpYXRlID0gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYuY2xlYXJJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsLmNsZWFySW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzICYmIHRoaXMuY2xlYXJJbW1lZGlhdGUpO1xuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIHVuZGVmaW5lZCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgaWYgKGdsb2JhbC5zZXRJbW1lZGlhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBuZXh0SGFuZGxlID0gMTsgLy8gU3BlYyBzYXlzIGdyZWF0ZXIgdGhhbiB6ZXJvXG4gICAgdmFyIHRhc2tzQnlIYW5kbGUgPSB7fTtcbiAgICB2YXIgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgdmFyIGRvYyA9IGdsb2JhbC5kb2N1bWVudDtcbiAgICB2YXIgcmVnaXN0ZXJJbW1lZGlhdGU7XG5cbiAgICBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoY2FsbGJhY2spIHtcbiAgICAgIC8vIENhbGxiYWNrIGNhbiBlaXRoZXIgYmUgYSBmdW5jdGlvbiBvciBhIHN0cmluZ1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNhbGxiYWNrID0gbmV3IEZ1bmN0aW9uKFwiXCIgKyBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgICAvLyBDb3B5IGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMV07XG4gICAgICB9XG4gICAgICAvLyBTdG9yZSBhbmQgcmVnaXN0ZXIgdGhlIHRhc2tcbiAgICAgIHZhciB0YXNrID0geyBjYWxsYmFjazogY2FsbGJhY2ssIGFyZ3M6IGFyZ3MgfTtcbiAgICAgIHRhc2tzQnlIYW5kbGVbbmV4dEhhbmRsZV0gPSB0YXNrO1xuICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUobmV4dEhhbmRsZSk7XG4gICAgICByZXR1cm4gbmV4dEhhbmRsZSsrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGhhbmRsZSkge1xuICAgICAgICBkZWxldGUgdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bih0YXNrKSB7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHRhc2suY2FsbGJhY2s7XG4gICAgICAgIHZhciBhcmdzID0gdGFzay5hcmdzO1xuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bklmUHJlc2VudChoYW5kbGUpIHtcbiAgICAgICAgLy8gRnJvbSB0aGUgc3BlYzogXCJXYWl0IHVudGlsIGFueSBpbnZvY2F0aW9ucyBvZiB0aGlzIGFsZ29yaXRobSBzdGFydGVkIGJlZm9yZSB0aGlzIG9uZSBoYXZlIGNvbXBsZXRlZC5cIlxuICAgICAgICAvLyBTbyBpZiB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBhIHRhc2ssIHdlJ2xsIG5lZWQgdG8gZGVsYXkgdGhpcyBpbnZvY2F0aW9uLlxuICAgICAgICBpZiAoY3VycmVudGx5UnVubmluZ0FUYXNrKSB7XG4gICAgICAgICAgICAvLyBEZWxheSBieSBkb2luZyBhIHNldFRpbWVvdXQuIHNldEltbWVkaWF0ZSB3YXMgdHJpZWQgaW5zdGVhZCwgYnV0IGluIEZpcmVmb3ggNyBpdCBnZW5lcmF0ZWQgYVxuICAgICAgICAgICAgLy8gXCJ0b28gbXVjaCByZWN1cnNpb25cIiBlcnJvci5cbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgICAgICAgICBpZiAodGFzaykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IHRydWU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcnVuKHRhc2spO1xuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW1tZWRpYXRlKGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7IHJ1bklmUHJlc2VudChoYW5kbGUpOyB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYW5Vc2VQb3N0TWVzc2FnZSgpIHtcbiAgICAgICAgLy8gVGhlIHRlc3QgYWdhaW5zdCBgaW1wb3J0U2NyaXB0c2AgcHJldmVudHMgdGhpcyBpbXBsZW1lbnRhdGlvbiBmcm9tIGJlaW5nIGluc3RhbGxlZCBpbnNpZGUgYSB3ZWIgd29ya2VyLFxuICAgICAgICAvLyB3aGVyZSBgZ2xvYmFsLnBvc3RNZXNzYWdlYCBtZWFucyBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQgYW5kIGNhbid0IGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS5cbiAgICAgICAgaWYgKGdsb2JhbC5wb3N0TWVzc2FnZSAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICAgICAgICAgIHZhciBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBvbGRPbk1lc3NhZ2UgPSBnbG9iYWwub25tZXNzYWdlO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoXCJcIiwgXCIqXCIpO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IG9sZE9uTWVzc2FnZTtcbiAgICAgICAgICAgIHJldHVybiBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIC8vIEluc3RhbGxzIGFuIGV2ZW50IGhhbmRsZXIgb24gYGdsb2JhbGAgZm9yIHRoZSBgbWVzc2FnZWAgZXZlbnQ6IHNlZVxuICAgICAgICAvLyAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0RPTS93aW5kb3cucG9zdE1lc3NhZ2VcbiAgICAgICAgLy8gKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9jb21tcy5odG1sI2Nyb3NzRG9jdW1lbnRNZXNzYWdlc1xuXG4gICAgICAgIHZhciBtZXNzYWdlUHJlZml4ID0gXCJzZXRJbW1lZGlhdGUkXCIgKyBNYXRoLnJhbmRvbSgpICsgXCIkXCI7XG4gICAgICAgIHZhciBvbkdsb2JhbE1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnNvdXJjZSA9PT0gZ2xvYmFsICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGV2ZW50LmRhdGEgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhLmluZGV4T2YobWVzc2FnZVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoK2V2ZW50LmRhdGEuc2xpY2UobWVzc2FnZVByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbC5hdHRhY2hFdmVudChcIm9ubWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShtZXNzYWdlUHJlZml4ICsgaGFuZGxlLCBcIipcIik7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBldmVudC5kYXRhO1xuICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSA8c2NyaXB0PiBlbGVtZW50OyBpdHMgcmVhZHlzdGF0ZWNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkIGFzeW5jaHJvbm91c2x5IG9uY2UgaXQgaXMgaW5zZXJ0ZWRcbiAgICAgICAgICAgIC8vIGludG8gdGhlIGRvY3VtZW50LiBEbyBzbywgdGh1cyBxdWV1aW5nIHVwIHRoZSB0YXNrLiBSZW1lbWJlciB0byBjbGVhbiB1cCBvbmNlIGl0J3MgYmVlbiBjYWxsZWQuXG4gICAgICAgICAgICB2YXIgc2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgICAgICBzY3JpcHQgPSBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSWYgc3VwcG9ydGVkLCB3ZSBzaG91bGQgYXR0YWNoIHRvIHRoZSBwcm90b3R5cGUgb2YgZ2xvYmFsLCBzaW5jZSB0aGF0IGlzIHdoZXJlIHNldFRpbWVvdXQgZXQgYWwuIGxpdmUuXG4gICAgdmFyIGF0dGFjaFRvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihnbG9iYWwpO1xuICAgIGF0dGFjaFRvID0gYXR0YWNoVG8gJiYgYXR0YWNoVG8uc2V0VGltZW91dCA/IGF0dGFjaFRvIDogZ2xvYmFsO1xuXG4gICAgLy8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBlLmcuIGJyb3dzZXJpZnkgZW52aXJvbm1lbnRzLlxuICAgIGlmICh7fS50b1N0cmluZy5jYWxsKGdsb2JhbC5wcm9jZXNzKSA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIpIHtcbiAgICAgICAgLy8gRm9yIE5vZGUuanMgYmVmb3JlIDAuOVxuICAgICAgICBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChjYW5Vc2VQb3N0TWVzc2FnZSgpKSB7XG4gICAgICAgIC8vIEZvciBub24tSUUxMCBtb2Rlcm4gYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZ2xvYmFsLk1lc3NhZ2VDaGFubmVsKSB7XG4gICAgICAgIC8vIEZvciB3ZWIgd29ya2Vycywgd2hlcmUgc3VwcG9ydGVkXG4gICAgICAgIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGRvYyAmJiBcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiIGluIGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSB7XG4gICAgICAgIC8vIEZvciBJRSA24oCTOFxuICAgICAgICBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igb2xkZXIgYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpO1xuICAgIH1cblxuICAgIGF0dGFjaFRvLnNldEltbWVkaWF0ZSA9IHNldEltbWVkaWF0ZTtcbiAgICBhdHRhY2hUby5jbGVhckltbWVkaWF0ZSA9IGNsZWFySW1tZWRpYXRlO1xufSh0eXBlb2Ygc2VsZiA9PT0gXCJ1bmRlZmluZWRcIiA/IHR5cGVvZiBnbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgPyB0aGlzIDogZ2xvYmFsIDogc2VsZikpO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWwgcGxhY2Vob2xkZXIgdmFsdWUgdXNlZCB0byBzcGVjaWZ5IFwiZ2Fwc1wiIHdpdGhpbiBjdXJyaWVkIGZ1bmN0aW9ucyxcbiAqIGFsbG93aW5nIHBhcnRpYWwgYXBwbGljYXRpb24gb2YgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cywgcmVnYXJkbGVzcyBvZlxuICogdGhlaXIgcG9zaXRpb25zLlxuICpcbiAqIElmIGBnYCBpcyBhIGN1cnJpZWQgdGVybmFyeSBmdW5jdGlvbiBhbmQgYF9gIGlzIGBSLl9fYCwgdGhlIGZvbGxvd2luZyBhcmVcbiAqIGVxdWl2YWxlbnQ6XG4gKlxuICogICAtIGBnKDEsIDIsIDMpYFxuICogICAtIGBnKF8sIDIsIDMpKDEpYFxuICogICAtIGBnKF8sIF8sIDMpKDEpKDIpYFxuICogICAtIGBnKF8sIF8sIDMpKDEsIDIpYFxuICogICAtIGBnKF8sIDIsIF8pKDEsIDMpYFxuICogICAtIGBnKF8sIDIpKDEpKDMpYFxuICogICAtIGBnKF8sIDIpKDEsIDMpYFxuICogICAtIGBnKF8sIDIpKF8sIDMpKDEpYFxuICpcbiAqIEBjb25zdGFudFxuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC42LjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciBncmVldCA9IFIucmVwbGFjZSgne25hbWV9JywgUi5fXywgJ0hlbGxvLCB7bmFtZX0hJyk7XG4gKiAgICAgIGdyZWV0KCdBbGljZScpOyAvLz0+ICdIZWxsbywgQWxpY2UhJ1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHsnQEBmdW5jdGlvbmFsL3BsYWNlaG9sZGVyJzogdHJ1ZX07XG4iLCJ2YXIgX2NvbnRhaW5zID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY29udGFpbnMnKTtcbnZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGVxdWFsLCBpbiBgUi5lcXVhbHNgIHRlcm1zLCB0byBhdFxuICogbGVhc3Qgb25lIGVsZW1lbnQgb2YgdGhlIGdpdmVuIGxpc3Q7IGBmYWxzZWAgb3RoZXJ3aXNlLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IExpc3RcbiAqIEBzaWcgYSAtPiBbYV0gLT4gQm9vbGVhblxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIGl0ZW0gdG8gY29tcGFyZSBhZ2FpbnN0LlxuICogQHBhcmFtIHtBcnJheX0gbGlzdCBUaGUgYXJyYXkgdG8gY29uc2lkZXIuXG4gKiBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgYW4gZXF1aXZhbGVudCBpdGVtIGlzIGluIHRoZSBsaXN0LCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqIEBzZWUgUi5hbnlcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLmNvbnRhaW5zKDMsIFsxLCAyLCAzXSk7IC8vPT4gdHJ1ZVxuICogICAgICBSLmNvbnRhaW5zKDQsIFsxLCAyLCAzXSk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5jb250YWlucyh7IG5hbWU6ICdGcmVkJyB9LCBbeyBuYW1lOiAnRnJlZCcgfV0pOyAvLz0+IHRydWVcbiAqICAgICAgUi5jb250YWlucyhbNDJdLCBbWzQyXV0pOyAvLz0+IHRydWVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKF9jb250YWlucyk7XG4iLCJ2YXIgX2luZGV4T2YgPSByZXF1aXJlKCcuL19pbmRleE9mJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfY29udGFpbnMoYSwgbGlzdCkge1xuICByZXR1cm4gX2luZGV4T2YobGlzdCwgYSwgMCkgPj0gMDtcbn07XG4iLCJ2YXIgZXF1YWxzID0gcmVxdWlyZSgnLi4vZXF1YWxzJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfaW5kZXhPZihsaXN0LCBhLCBpZHgpIHtcbiAgdmFyIGluZiwgaXRlbTtcbiAgLy8gQXJyYXkucHJvdG90eXBlLmluZGV4T2YgZG9lc24ndCBleGlzdCBiZWxvdyBJRTlcbiAgaWYgKHR5cGVvZiBsaXN0LmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBhKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICBpZiAoYSA9PT0gMCkge1xuICAgICAgICAgIC8vIG1hbnVhbGx5IGNyYXdsIHRoZSBsaXN0IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gKzAgYW5kIC0wXG4gICAgICAgICAgaW5mID0gMSAvIGE7XG4gICAgICAgICAgd2hpbGUgKGlkeCA8IGxpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVtID0gbGlzdFtpZHhdO1xuICAgICAgICAgICAgaWYgKGl0ZW0gPT09IDAgJiYgMSAvIGl0ZW0gPT09IGluZikge1xuICAgICAgICAgICAgICByZXR1cm4gaWR4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWR4ICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfSBlbHNlIGlmIChhICE9PSBhKSB7XG4gICAgICAgICAgLy8gTmFOXG4gICAgICAgICAgd2hpbGUgKGlkeCA8IGxpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVtID0gbGlzdFtpZHhdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJyAmJiBpdGVtICE9PSBpdGVtKSB7XG4gICAgICAgICAgICAgIHJldHVybiBpZHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZHggKz0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vbi16ZXJvIG51bWJlcnMgY2FuIHV0aWxpc2UgU2V0XG4gICAgICAgIHJldHVybiBsaXN0LmluZGV4T2YoYSwgaWR4KTtcblxuICAgICAgLy8gYWxsIHRoZXNlIHR5cGVzIGNhbiB1dGlsaXNlIFNldFxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIGxpc3QuaW5kZXhPZihhLCBpZHgpO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoYSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIG51bGwgY2FuIHV0aWxpc2UgU2V0XG4gICAgICAgICAgcmV0dXJuIGxpc3QuaW5kZXhPZihhLCBpZHgpO1xuICAgICAgICB9XG4gICAgfVxuICB9XG4gIC8vIGFueXRoaW5nIGVsc2Ugbm90IGNvdmVyZWQgYWJvdmUsIGRlZmVyIHRvIFIuZXF1YWxzXG4gIHdoaWxlIChpZHggPCBsaXN0Lmxlbmd0aCkge1xuICAgIGlmIChlcXVhbHMobGlzdFtpZHhdLCBhKSkge1xuICAgICAgcmV0dXJuIGlkeDtcbiAgICB9XG4gICAgaWR4ICs9IDE7XG4gIH1cbiAgcmV0dXJuIC0xO1xufTtcbiIsInZhciBfYXJyYXlGcm9tSXRlcmF0b3IgPSByZXF1aXJlKCcuL19hcnJheUZyb21JdGVyYXRvcicpO1xudmFyIF9mdW5jdGlvbk5hbWUgPSByZXF1aXJlKCcuL19mdW5jdGlvbk5hbWUnKTtcbnZhciBfaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgaWRlbnRpY2FsID0gcmVxdWlyZSgnLi4vaWRlbnRpY2FsJyk7XG52YXIga2V5cyA9IHJlcXVpcmUoJy4uL2tleXMnKTtcbnZhciB0eXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2VxdWFscyhhLCBiLCBzdGFja0EsIHN0YWNrQikge1xuICBpZiAoaWRlbnRpY2FsKGEsIGIpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZShhKSAhPT0gdHlwZShiKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhLmVxdWFscyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgYi5lcXVhbHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZW9mIGEuZXF1YWxzID09PSAnZnVuY3Rpb24nICYmIGEuZXF1YWxzKGIpICYmXG4gICAgICAgICAgIHR5cGVvZiBiLmVxdWFscyA9PT0gJ2Z1bmN0aW9uJyAmJiBiLmVxdWFscyhhKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZShhKSkge1xuICAgIGNhc2UgJ0FyZ3VtZW50cyc6XG4gICAgY2FzZSAnQXJyYXknOlxuICAgIGNhc2UgJ09iamVjdCc6XG4gICAgICBpZiAodHlwZW9mIGEuY29uc3RydWN0b3IgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICBfZnVuY3Rpb25OYW1lKGEuY29uc3RydWN0b3IpID09PSAnUHJvbWlzZScpIHtcbiAgICAgICAgcmV0dXJuIGEgPT09IGI7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdCb29sZWFuJzpcbiAgICBjYXNlICdOdW1iZXInOlxuICAgIGNhc2UgJ1N0cmluZyc6XG4gICAgICBpZiAoISh0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgaWRlbnRpY2FsKGEudmFsdWVPZigpLCBiLnZhbHVlT2YoKSkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgaWYgKCFpZGVudGljYWwoYS52YWx1ZU9mKCksIGIudmFsdWVPZigpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdFcnJvcic6XG4gICAgICByZXR1cm4gYS5uYW1lID09PSBiLm5hbWUgJiYgYS5tZXNzYWdlID09PSBiLm1lc3NhZ2U7XG4gICAgY2FzZSAnUmVnRXhwJzpcbiAgICAgIGlmICghKGEuc291cmNlID09PSBiLnNvdXJjZSAmJlxuICAgICAgICAgICAgYS5nbG9iYWwgPT09IGIuZ2xvYmFsICYmXG4gICAgICAgICAgICBhLmlnbm9yZUNhc2UgPT09IGIuaWdub3JlQ2FzZSAmJlxuICAgICAgICAgICAgYS5tdWx0aWxpbmUgPT09IGIubXVsdGlsaW5lICYmXG4gICAgICAgICAgICBhLnN0aWNreSA9PT0gYi5zdGlja3kgJiZcbiAgICAgICAgICAgIGEudW5pY29kZSA9PT0gYi51bmljb2RlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdNYXAnOlxuICAgIGNhc2UgJ1NldCc6XG4gICAgICBpZiAoIV9lcXVhbHMoX2FycmF5RnJvbUl0ZXJhdG9yKGEuZW50cmllcygpKSwgX2FycmF5RnJvbUl0ZXJhdG9yKGIuZW50cmllcygpKSwgc3RhY2tBLCBzdGFja0IpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0ludDhBcnJheSc6XG4gICAgY2FzZSAnVWludDhBcnJheSc6XG4gICAgY2FzZSAnVWludDhDbGFtcGVkQXJyYXknOlxuICAgIGNhc2UgJ0ludDE2QXJyYXknOlxuICAgIGNhc2UgJ1VpbnQxNkFycmF5JzpcbiAgICBjYXNlICdJbnQzMkFycmF5JzpcbiAgICBjYXNlICdVaW50MzJBcnJheSc6XG4gICAgY2FzZSAnRmxvYXQzMkFycmF5JzpcbiAgICBjYXNlICdGbG9hdDY0QXJyYXknOlxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnQXJyYXlCdWZmZXInOlxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFZhbHVlcyBvZiBvdGhlciB0eXBlcyBhcmUgb25seSBlcXVhbCBpZiBpZGVudGljYWwuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIga2V5c0EgPSBrZXlzKGEpO1xuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzKGIpLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBpZHggPSBzdGFja0EubGVuZ3RoIC0gMTtcbiAgd2hpbGUgKGlkeCA+PSAwKSB7XG4gICAgaWYgKHN0YWNrQVtpZHhdID09PSBhKSB7XG4gICAgICByZXR1cm4gc3RhY2tCW2lkeF0gPT09IGI7XG4gICAgfVxuICAgIGlkeCAtPSAxO1xuICB9XG5cbiAgc3RhY2tBLnB1c2goYSk7XG4gIHN0YWNrQi5wdXNoKGIpO1xuICBpZHggPSBrZXlzQS5sZW5ndGggLSAxO1xuICB3aGlsZSAoaWR4ID49IDApIHtcbiAgICB2YXIga2V5ID0ga2V5c0FbaWR4XTtcbiAgICBpZiAoIShfaGFzKGtleSwgYikgJiYgX2VxdWFscyhiW2tleV0sIGFba2V5XSwgc3RhY2tBLCBzdGFja0IpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZHggLT0gMTtcbiAgfVxuICBzdGFja0EucG9wKCk7XG4gIHN0YWNrQi5wb3AoKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfYXJyYXlGcm9tSXRlcmF0b3IoaXRlcikge1xuICB2YXIgbGlzdCA9IFtdO1xuICB2YXIgbmV4dDtcbiAgd2hpbGUgKCEobmV4dCA9IGl0ZXIubmV4dCgpKS5kb25lKSB7XG4gICAgbGlzdC5wdXNoKG5leHQudmFsdWUpO1xuICB9XG4gIHJldHVybiBsaXN0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2Z1bmN0aW9uTmFtZShmKSB7XG4gIC8vIFN0cmluZyh4ID0+IHgpIGV2YWx1YXRlcyB0byBcInggPT4geFwiLCBzbyB0aGUgcGF0dGVybiBtYXkgbm90IG1hdGNoLlxuICB2YXIgbWF0Y2ggPSBTdHJpbmcoZikubWF0Y2goL15mdW5jdGlvbiAoXFx3KikvKTtcbiAgcmV0dXJuIG1hdGNoID09IG51bGwgPyAnJyA6IG1hdGNoWzFdO1xufTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgaXRzIGFyZ3VtZW50cyBhcmUgaWRlbnRpY2FsLCBmYWxzZSBvdGhlcndpc2UuIFZhbHVlcyBhcmVcbiAqIGlkZW50aWNhbCBpZiB0aGV5IHJlZmVyZW5jZSB0aGUgc2FtZSBtZW1vcnkuIGBOYU5gIGlzIGlkZW50aWNhbCB0byBgTmFOYDtcbiAqIGAwYCBhbmQgYC0wYCBhcmUgbm90IGlkZW50aWNhbC5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xNS4wXG4gKiBAY2F0ZWdvcnkgUmVsYXRpb25cbiAqIEBzaWcgYSAtPiBhIC0+IEJvb2xlYW5cbiAqIEBwYXJhbSB7Kn0gYVxuICogQHBhcmFtIHsqfSBiXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciBvID0ge307XG4gKiAgICAgIFIuaWRlbnRpY2FsKG8sIG8pOyAvLz0+IHRydWVcbiAqICAgICAgUi5pZGVudGljYWwoMSwgMSk7IC8vPT4gdHJ1ZVxuICogICAgICBSLmlkZW50aWNhbCgxLCAnMScpOyAvLz0+IGZhbHNlXG4gKiAgICAgIFIuaWRlbnRpY2FsKFtdLCBbXSk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5pZGVudGljYWwoMCwgLTApOyAvLz0+IGZhbHNlXG4gKiAgICAgIFIuaWRlbnRpY2FsKE5hTiwgTmFOKTsgLy89PiB0cnVlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MihmdW5jdGlvbiBpZGVudGljYWwoYSwgYikge1xuICAvLyBTYW1lVmFsdWUgYWxnb3JpdGhtXG4gIGlmIChhID09PSBiKSB7IC8vIFN0ZXBzIDEtNSwgNy0xMFxuICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xuICB9IGVsc2Uge1xuICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgcmV0dXJuIGEgIT09IGEgJiYgYiAhPT0gYjtcbiAgfVxufSk7XG4iLCJ2YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MScpO1xuXG5cbi8qKlxuICogR2l2ZXMgYSBzaW5nbGUtd29yZCBzdHJpbmcgZGVzY3JpcHRpb24gb2YgdGhlIChuYXRpdmUpIHR5cGUgb2YgYSB2YWx1ZSxcbiAqIHJldHVybmluZyBzdWNoIGFuc3dlcnMgYXMgJ09iamVjdCcsICdOdW1iZXInLCAnQXJyYXknLCBvciAnTnVsbCcuIERvZXMgbm90XG4gKiBhdHRlbXB0IHRvIGRpc3Rpbmd1aXNoIHVzZXIgT2JqZWN0IHR5cGVzIGFueSBmdXJ0aGVyLCByZXBvcnRpbmcgdGhlbSBhbGwgYXNcbiAqICdPYmplY3QnLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjguMFxuICogQGNhdGVnb3J5IFR5cGVcbiAqIEBzaWcgKCogLT4geyp9KSAtPiBTdHJpbmdcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi50eXBlKHt9KTsgLy89PiBcIk9iamVjdFwiXG4gKiAgICAgIFIudHlwZSgxKTsgLy89PiBcIk51bWJlclwiXG4gKiAgICAgIFIudHlwZShmYWxzZSk7IC8vPT4gXCJCb29sZWFuXCJcbiAqICAgICAgUi50eXBlKCdzJyk7IC8vPT4gXCJTdHJpbmdcIlxuICogICAgICBSLnR5cGUobnVsbCk7IC8vPT4gXCJOdWxsXCJcbiAqICAgICAgUi50eXBlKFtdKTsgLy89PiBcIkFycmF5XCJcbiAqICAgICAgUi50eXBlKC9bQS16XS8pOyAvLz0+IFwiUmVnRXhwXCJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKGZ1bmN0aW9uIHR5cGUodmFsKSB7XG4gIHJldHVybiB2YWwgPT09IG51bGwgICAgICA/ICdOdWxsJyAgICAgIDpcbiAgICAgICAgIHZhbCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOlxuICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCkuc2xpY2UoOCwgLTEpO1xufSk7XG4iLCJ2YXIgX2NvbmNhdCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2NvbmNhdCcpO1xudmFyIF9jcmVhdGVQYXJ0aWFsQXBwbGljYXRvciA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2NyZWF0ZVBhcnRpYWxBcHBsaWNhdG9yJyk7XG5cblxuLyoqXG4gKiBUYWtlcyBhIGZ1bmN0aW9uIGBmYCBhbmQgYSBsaXN0IG9mIGFyZ3VtZW50cywgYW5kIHJldHVybnMgYSBmdW5jdGlvbiBgZ2AuXG4gKiBXaGVuIGFwcGxpZWQsIGBnYCByZXR1cm5zIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgYGZgIHRvIHRoZSBhcmd1bWVudHNcbiAqIHByb3ZpZGVkIGluaXRpYWxseSBmb2xsb3dlZCBieSB0aGUgYXJndW1lbnRzIHByb3ZpZGVkIHRvIGBnYC5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xMC4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBzaWcgKChhLCBiLCBjLCAuLi4sIG4pIC0+IHgpIC0+IFthLCBiLCBjLCAuLi5dIC0+ICgoZCwgZSwgZiwgLi4uLCBuKSAtPiB4KVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZlxuICogQHBhcmFtIHtBcnJheX0gYXJnc1xuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiBAc2VlIFIucGFydGlhbFJpZ2h0XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIG11bHRpcGx5MiA9IChhLCBiKSA9PiBhICogYjtcbiAqICAgICAgdmFyIGRvdWJsZSA9IFIucGFydGlhbChtdWx0aXBseTIsIFsyXSk7XG4gKiAgICAgIGRvdWJsZSgyKTsgLy89PiA0XG4gKlxuICogICAgICB2YXIgZ3JlZXQgPSAoc2FsdXRhdGlvbiwgdGl0bGUsIGZpcnN0TmFtZSwgbGFzdE5hbWUpID0+XG4gKiAgICAgICAgc2FsdXRhdGlvbiArICcsICcgKyB0aXRsZSArICcgJyArIGZpcnN0TmFtZSArICcgJyArIGxhc3ROYW1lICsgJyEnO1xuICpcbiAqICAgICAgdmFyIHNheUhlbGxvID0gUi5wYXJ0aWFsKGdyZWV0LCBbJ0hlbGxvJ10pO1xuICogICAgICB2YXIgc2F5SGVsbG9Ub01zID0gUi5wYXJ0aWFsKHNheUhlbGxvLCBbJ01zLiddKTtcbiAqICAgICAgc2F5SGVsbG9Ub01zKCdKYW5lJywgJ0pvbmVzJyk7IC8vPT4gJ0hlbGxvLCBNcy4gSmFuZSBKb25lcyEnXG4gKiBAc3ltYiBSLnBhcnRpYWwoZiwgW2EsIGJdKShjLCBkKSA9IGYoYSwgYiwgYywgZClcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlUGFydGlhbEFwcGxpY2F0b3IoX2NvbmNhdCk7XG4iLCJ2YXIgX2FyaXR5ID0gcmVxdWlyZSgnLi9fYXJpdHknKTtcbnZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9fY3VycnkyJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfY3JlYXRlUGFydGlhbEFwcGxpY2F0b3IoY29uY2F0KSB7XG4gIHJldHVybiBfY3VycnkyKGZ1bmN0aW9uKGZuLCBhcmdzKSB7XG4gICAgcmV0dXJuIF9hcml0eShNYXRoLm1heCgwLCBmbi5sZW5ndGggLSBhcmdzLmxlbmd0aCksIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGNvbmNhdChhcmdzLCBhcmd1bWVudHMpKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuIiwidmFyIF9hcml0eSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2FyaXR5Jyk7XG52YXIgX3BpcGUgPSByZXF1aXJlKCcuL2ludGVybmFsL19waXBlJyk7XG52YXIgcmVkdWNlID0gcmVxdWlyZSgnLi9yZWR1Y2UnKTtcbnZhciB0YWlsID0gcmVxdWlyZSgnLi90YWlsJyk7XG5cblxuLyoqXG4gKiBQZXJmb3JtcyBsZWZ0LXRvLXJpZ2h0IGZ1bmN0aW9uIGNvbXBvc2l0aW9uLiBUaGUgbGVmdG1vc3QgZnVuY3Rpb24gbWF5IGhhdmVcbiAqIGFueSBhcml0eTsgdGhlIHJlbWFpbmluZyBmdW5jdGlvbnMgbXVzdCBiZSB1bmFyeS5cbiAqXG4gKiBJbiBzb21lIGxpYnJhcmllcyB0aGlzIGZ1bmN0aW9uIGlzIG5hbWVkIGBzZXF1ZW5jZWAuXG4gKlxuICogKipOb3RlOioqIFRoZSByZXN1bHQgb2YgcGlwZSBpcyBub3QgYXV0b21hdGljYWxseSBjdXJyaWVkLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAc2lnICgoKGEsIGIsIC4uLiwgbikgLT4gbyksIChvIC0+IHApLCAuLi4sICh4IC0+IHkpLCAoeSAtPiB6KSkgLT4gKChhLCBiLCAuLi4sIG4pIC0+IHopXG4gKiBAcGFyYW0gey4uLkZ1bmN0aW9ufSBmdW5jdGlvbnNcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQHNlZSBSLmNvbXBvc2VcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgZiA9IFIucGlwZShNYXRoLnBvdywgUi5uZWdhdGUsIFIuaW5jKTtcbiAqXG4gKiAgICAgIGYoMywgNCk7IC8vIC0oM140KSArIDFcbiAqIEBzeW1iIFIucGlwZShmLCBnLCBoKShhLCBiKSA9IGgoZyhmKGEsIGIpKSlcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwaXBlKCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGlwZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQnKTtcbiAgfVxuICByZXR1cm4gX2FyaXR5KGFyZ3VtZW50c1swXS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgcmVkdWNlKF9waXBlLCBhcmd1bWVudHNbMF0sIHRhaWwoYXJndW1lbnRzKSkpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX3BpcGUoZiwgZykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGcuY2FsbCh0aGlzLCBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBYV3JhcChmbikge1xuICAgIHRoaXMuZiA9IGZuO1xuICB9XG4gIFhXcmFwLnByb3RvdHlwZVsnQEB0cmFuc2R1Y2VyL2luaXQnXSA9IGZ1bmN0aW9uKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW5pdCBub3QgaW1wbGVtZW50ZWQgb24gWFdyYXAnKTtcbiAgfTtcbiAgWFdyYXAucHJvdG90eXBlWydAQHRyYW5zZHVjZXIvcmVzdWx0J10gPSBmdW5jdGlvbihhY2MpIHsgcmV0dXJuIGFjYzsgfTtcbiAgWFdyYXAucHJvdG90eXBlWydAQHRyYW5zZHVjZXIvc3RlcCddID0gZnVuY3Rpb24oYWNjLCB4KSB7XG4gICAgcmV0dXJuIHRoaXMuZihhY2MsIHgpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiBfeHdyYXAoZm4pIHsgcmV0dXJuIG5ldyBYV3JhcChmbik7IH07XG59KCkpO1xuIiwidmFyIF9hcml0eSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2FyaXR5Jyk7XG52YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MicpO1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaXMgYm91bmQgdG8gYSBjb250ZXh0LlxuICogTm90ZTogYFIuYmluZGAgZG9lcyBub3QgcHJvdmlkZSB0aGUgYWRkaXRpb25hbCBhcmd1bWVudC1iaW5kaW5nIGNhcGFiaWxpdGllcyBvZlxuICogW0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9GdW5jdGlvbi9iaW5kKS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC42LjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHNpZyAoKiAtPiAqKSAtPiB7Kn0gLT4gKCogLT4gKilcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBiaW5kIHRvIGNvbnRleHRcbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzT2JqIFRoZSBjb250ZXh0IHRvIGJpbmQgYGZuYCB0b1xuICogQHJldHVybiB7RnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGV4ZWN1dGUgaW4gdGhlIGNvbnRleHQgb2YgYHRoaXNPYmpgLlxuICogQHNlZSBSLnBhcnRpYWxcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgbG9nID0gUi5iaW5kKGNvbnNvbGUubG9nLCBjb25zb2xlKTtcbiAqICAgICAgUi5waXBlKFIuYXNzb2MoJ2EnLCAyKSwgUi50YXAobG9nKSwgUi5hc3NvYygnYScsIDMpKSh7YTogMX0pOyAvLz0+IHthOiAzfVxuICogICAgICAvLyBsb2dzIHthOiAyfVxuICogQHN5bWIgUi5iaW5kKGYsIG8pKGEsIGIpID0gZi5jYWxsKG8sIGEsIGIpXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MihmdW5jdGlvbiBiaW5kKGZuLCB0aGlzT2JqKSB7XG4gIHJldHVybiBfYXJpdHkoZm4ubGVuZ3RoLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc09iaiwgYXJndW1lbnRzKTtcbiAgfSk7XG59KTtcbiIsInZhciBfY3VycnkxID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkxJyk7XG52YXIgX2lzQXJyYXkgPSByZXF1aXJlKCcuL2ludGVybmFsL19pc0FycmF5Jyk7XG52YXIgX2lzU3RyaW5nID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9faXNTdHJpbmcnKTtcblxuXG4vKipcbiAqIFRlc3RzIHdoZXRoZXIgb3Igbm90IGFuIG9iamVjdCBpcyBzaW1pbGFyIHRvIGFuIGFycmF5LlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjUuMFxuICogQGNhdGVnb3J5IFR5cGVcbiAqIEBjYXRlZ29yeSBMaXN0XG4gKiBAc2lnICogLT4gQm9vbGVhblxuICogQHBhcmFtIHsqfSB4IFRoZSBvYmplY3QgdG8gdGVzdC5cbiAqIEByZXR1cm4ge0Jvb2xlYW59IGB0cnVlYCBpZiBgeGAgaGFzIGEgbnVtZXJpYyBsZW5ndGggcHJvcGVydHkgYW5kIGV4dHJlbWUgaW5kaWNlcyBkZWZpbmVkOyBgZmFsc2VgIG90aGVyd2lzZS5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHYwLjIzLjBcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLmlzQXJyYXlMaWtlKFtdKTsgLy89PiB0cnVlXG4gKiAgICAgIFIuaXNBcnJheUxpa2UodHJ1ZSk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5pc0FycmF5TGlrZSh7fSk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5pc0FycmF5TGlrZSh7bGVuZ3RoOiAxMH0pOyAvLz0+IGZhbHNlXG4gKiAgICAgIFIuaXNBcnJheUxpa2UoezA6ICd6ZXJvJywgOTogJ25pbmUnLCBsZW5ndGg6IDEwfSk7IC8vPT4gdHJ1ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTEoZnVuY3Rpb24gaXNBcnJheUxpa2UoeCkge1xuICBpZiAoX2lzQXJyYXkoeCkpIHsgcmV0dXJuIHRydWU7IH1cbiAgaWYgKCF4KSB7IHJldHVybiBmYWxzZTsgfVxuICBpZiAodHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICBpZiAoX2lzU3RyaW5nKHgpKSB7IHJldHVybiBmYWxzZTsgfVxuICBpZiAoeC5ub2RlVHlwZSA9PT0gMSkgeyByZXR1cm4gISF4Lmxlbmd0aDsgfVxuICBpZiAoeC5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRydWU7IH1cbiAgaWYgKHgubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB4Lmhhc093blByb3BlcnR5KDApICYmIHguaGFzT3duUHJvcGVydHkoeC5sZW5ndGggLSAxKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59KTtcbiIsInZhciBfY2hlY2tGb3JNZXRob2QgPSByZXF1aXJlKCcuL2ludGVybmFsL19jaGVja0Zvck1ldGhvZCcpO1xudmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcbnZhciBzbGljZSA9IHJlcXVpcmUoJy4vc2xpY2UnKTtcblxuXG4vKipcbiAqIFJldHVybnMgYWxsIGJ1dCB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gbGlzdCBvciBzdHJpbmcgKG9yIG9iamVjdFxuICogd2l0aCBhIGB0YWlsYCBtZXRob2QpLlxuICpcbiAqIERpc3BhdGNoZXMgdG8gdGhlIGBzbGljZWAgbWV0aG9kIG9mIHRoZSBmaXJzdCBhcmd1bWVudCwgaWYgcHJlc2VudC5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjBcbiAqIEBjYXRlZ29yeSBMaXN0XG4gKiBAc2lnIFthXSAtPiBbYV1cbiAqIEBzaWcgU3RyaW5nIC0+IFN0cmluZ1xuICogQHBhcmFtIHsqfSBsaXN0XG4gKiBAcmV0dXJuIHsqfVxuICogQHNlZSBSLmhlYWQsIFIuaW5pdCwgUi5sYXN0XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi50YWlsKFsxLCAyLCAzXSk7ICAvLz0+IFsyLCAzXVxuICogICAgICBSLnRhaWwoWzEsIDJdKTsgICAgIC8vPT4gWzJdXG4gKiAgICAgIFIudGFpbChbMV0pOyAgICAgICAgLy89PiBbXVxuICogICAgICBSLnRhaWwoW10pOyAgICAgICAgIC8vPT4gW11cbiAqXG4gKiAgICAgIFIudGFpbCgnYWJjJyk7ICAvLz0+ICdiYydcbiAqICAgICAgUi50YWlsKCdhYicpOyAgIC8vPT4gJ2InXG4gKiAgICAgIFIudGFpbCgnYScpOyAgICAvLz0+ICcnXG4gKiAgICAgIFIudGFpbCgnJyk7ICAgICAvLz0+ICcnXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MShfY2hlY2tGb3JNZXRob2QoJ3RhaWwnLCBzbGljZSgxLCBJbmZpbml0eSkpKTtcbiIsInZhciBfY2hlY2tGb3JNZXRob2QgPSByZXF1aXJlKCcuL2ludGVybmFsL19jaGVja0Zvck1ldGhvZCcpO1xudmFyIF9jdXJyeTMgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTMnKTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGVsZW1lbnRzIG9mIHRoZSBnaXZlbiBsaXN0IG9yIHN0cmluZyAob3Igb2JqZWN0IHdpdGggYSBgc2xpY2VgXG4gKiBtZXRob2QpIGZyb20gYGZyb21JbmRleGAgKGluY2x1c2l2ZSkgdG8gYHRvSW5kZXhgIChleGNsdXNpdmUpLlxuICpcbiAqIERpc3BhdGNoZXMgdG8gdGhlIGBzbGljZWAgbWV0aG9kIG9mIHRoZSB0aGlyZCBhcmd1bWVudCwgaWYgcHJlc2VudC5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjRcbiAqIEBjYXRlZ29yeSBMaXN0XG4gKiBAc2lnIE51bWJlciAtPiBOdW1iZXIgLT4gW2FdIC0+IFthXVxuICogQHNpZyBOdW1iZXIgLT4gTnVtYmVyIC0+IFN0cmluZyAtPiBTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBmcm9tSW5kZXggVGhlIHN0YXJ0IGluZGV4IChpbmNsdXNpdmUpLlxuICogQHBhcmFtIHtOdW1iZXJ9IHRvSW5kZXggVGhlIGVuZCBpbmRleCAoZXhjbHVzaXZlKS5cbiAqIEBwYXJhbSB7Kn0gbGlzdFxuICogQHJldHVybiB7Kn1cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLnNsaWNlKDEsIDMsIFsnYScsICdiJywgJ2MnLCAnZCddKTsgICAgICAgIC8vPT4gWydiJywgJ2MnXVxuICogICAgICBSLnNsaWNlKDEsIEluZmluaXR5LCBbJ2EnLCAnYicsICdjJywgJ2QnXSk7IC8vPT4gWydiJywgJ2MnLCAnZCddXG4gKiAgICAgIFIuc2xpY2UoMCwgLTEsIFsnYScsICdiJywgJ2MnLCAnZCddKTsgICAgICAgLy89PiBbJ2EnLCAnYicsICdjJ11cbiAqICAgICAgUi5zbGljZSgtMywgLTEsIFsnYScsICdiJywgJ2MnLCAnZCddKTsgICAgICAvLz0+IFsnYicsICdjJ11cbiAqICAgICAgUi5zbGljZSgwLCAzLCAncmFtZGEnKTsgICAgICAgICAgICAgICAgICAgICAvLz0+ICdyYW0nXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MyhfY2hlY2tGb3JNZXRob2QoJ3NsaWNlJywgZnVuY3Rpb24gc2xpY2UoZnJvbUluZGV4LCB0b0luZGV4LCBsaXN0KSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChsaXN0LCBmcm9tSW5kZXgsIHRvSW5kZXgpO1xufSkpO1xuIiwidmFyIF9jaGVja0Zvck1ldGhvZCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2NoZWNrRm9yTWV0aG9kJyk7XG52YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MicpO1xuXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIGlucHV0IGBsaXN0YCwgY2FsbGluZyBhIHByb3ZpZGVkIGZ1bmN0aW9uIGBmbmAgZm9yIGVhY2hcbiAqIGVsZW1lbnQgaW4gdGhlIGxpc3QuXG4gKlxuICogYGZuYCByZWNlaXZlcyBvbmUgYXJndW1lbnQ6ICoodmFsdWUpKi5cbiAqXG4gKiBOb3RlOiBgUi5mb3JFYWNoYCBkb2VzIG5vdCBza2lwIGRlbGV0ZWQgb3IgdW5hc3NpZ25lZCBpbmRpY2VzIChzcGFyc2VcbiAqIGFycmF5cyksIHVubGlrZSB0aGUgbmF0aXZlIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kLiBGb3IgbW9yZVxuICogZGV0YWlscyBvbiB0aGlzIGJlaGF2aW9yLCBzZWU6XG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9mb3JFYWNoI0Rlc2NyaXB0aW9uXG4gKlxuICogQWxzbyBub3RlIHRoYXQsIHVubGlrZSBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgLCBSYW1kYSdzIGBmb3JFYWNoYCByZXR1cm5zXG4gKiB0aGUgb3JpZ2luYWwgYXJyYXkuIEluIHNvbWUgbGlicmFyaWVzIHRoaXMgZnVuY3Rpb24gaXMgbmFtZWQgYGVhY2hgLlxuICpcbiAqIERpc3BhdGNoZXMgdG8gdGhlIGBmb3JFYWNoYCBtZXRob2Qgb2YgdGhlIHNlY29uZCBhcmd1bWVudCwgaWYgcHJlc2VudC5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjFcbiAqIEBjYXRlZ29yeSBMaXN0XG4gKiBAc2lnIChhIC0+ICopIC0+IFthXSAtPiBbYV1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuIFJlY2VpdmVzIG9uZSBhcmd1bWVudCwgYHZhbHVlYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGxpc3QgVGhlIGxpc3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHJldHVybiB7QXJyYXl9IFRoZSBvcmlnaW5hbCBsaXN0LlxuICogQHNlZSBSLmFkZEluZGV4XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIHByaW50WFBsdXNGaXZlID0geCA9PiBjb25zb2xlLmxvZyh4ICsgNSk7XG4gKiAgICAgIFIuZm9yRWFjaChwcmludFhQbHVzRml2ZSwgWzEsIDIsIDNdKTsgLy89PiBbMSwgMiwgM11cbiAqICAgICAgLy8gbG9ncyA2XG4gKiAgICAgIC8vIGxvZ3MgN1xuICogICAgICAvLyBsb2dzIDhcbiAqIEBzeW1iIFIuZm9yRWFjaChmLCBbYSwgYiwgY10pID0gW2EsIGIsIGNdXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MihfY2hlY2tGb3JNZXRob2QoJ2ZvckVhY2gnLCBmdW5jdGlvbiBmb3JFYWNoKGZuLCBsaXN0KSB7XG4gIHZhciBsZW4gPSBsaXN0Lmxlbmd0aDtcbiAgdmFyIGlkeCA9IDA7XG4gIHdoaWxlIChpZHggPCBsZW4pIHtcbiAgICBmbihsaXN0W2lkeF0pO1xuICAgIGlkeCArPSAxO1xuICB9XG4gIHJldHVybiBsaXN0O1xufSkpO1xuIiwidmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcblxuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgb2JqZWN0IHRoYXQgZG9lcyBub3QgY29udGFpbiBhIGBwcm9wYCBwcm9wZXJ0eS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAc2lnIFN0cmluZyAtPiB7azogdn0gLT4ge2s6IHZ9XG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcCBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZGlzc29jaWF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIGNsb25lXG4gKiBAcmV0dXJuIHtPYmplY3R9IEEgbmV3IG9iamVjdCBlcXVpdmFsZW50IHRvIHRoZSBvcmlnaW5hbCBidXQgd2l0aG91dCB0aGUgc3BlY2lmaWVkIHByb3BlcnR5XG4gKiBAc2VlIFIuYXNzb2NcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLmRpc3NvYygnYicsIHthOiAxLCBiOiAyLCBjOiAzfSk7IC8vPT4ge2E6IDEsIGM6IDN9XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MihmdW5jdGlvbiBkaXNzb2MocHJvcCwgb2JqKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZm9yICh2YXIgcCBpbiBvYmopIHtcbiAgICByZXN1bHRbcF0gPSBvYmpbcF07XG4gIH1cbiAgZGVsZXRlIHJlc3VsdFtwcm9wXTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuIiwidmFyIF9hc3NpZ24gPSByZXF1aXJlKCcuL2ludGVybmFsL19hc3NpZ24nKTtcbnZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgb2JqZWN0IHdpdGggdGhlIG93biBwcm9wZXJ0aWVzIG9mIHRoZSBmaXJzdCBvYmplY3QgbWVyZ2VkIHdpdGhcbiAqIHRoZSBvd24gcHJvcGVydGllcyBvZiB0aGUgc2Vjb25kIG9iamVjdC4gSWYgYSBrZXkgZXhpc3RzIGluIGJvdGggb2JqZWN0cyxcbiAqIHRoZSB2YWx1ZSBmcm9tIHRoZSBzZWNvbmQgb2JqZWN0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBzaWcge2s6IHZ9IC0+IHtrOiB2fSAtPiB7azogdn1cbiAqIEBwYXJhbSB7T2JqZWN0fSBsXG4gKiBAcGFyYW0ge09iamVjdH0gclxuICogQHJldHVybiB7T2JqZWN0fVxuICogQHNlZSBSLm1lcmdlV2l0aCwgUi5tZXJnZVdpdGhLZXlcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLm1lcmdlKHsgJ25hbWUnOiAnZnJlZCcsICdhZ2UnOiAxMCB9LCB7ICdhZ2UnOiA0MCB9KTtcbiAqICAgICAgLy89PiB7ICduYW1lJzogJ2ZyZWQnLCAnYWdlJzogNDAgfVxuICpcbiAqICAgICAgdmFyIHJlc2V0VG9EZWZhdWx0ID0gUi5tZXJnZShSLl9fLCB7eDogMH0pO1xuICogICAgICByZXNldFRvRGVmYXVsdCh7eDogNSwgeTogMn0pOyAvLz0+IHt4OiAwLCB5OiAyfVxuICogQHN5bWIgUi5tZXJnZSh7IHg6IDEsIHk6IDIgfSwgeyB5OiA1LCB6OiAzIH0pID0geyB4OiAxLCB5OiA1LCB6OiAzIH1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIG1lcmdlKGwsIHIpIHtcbiAgcmV0dXJuIF9hc3NpZ24oe30sIGwsIHIpO1xufSk7XG4iLCJ2YXIgX29iamVjdEFzc2lnbiA9IHJlcXVpcmUoJy4vX29iamVjdEFzc2lnbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG4gIHR5cGVvZiBPYmplY3QuYXNzaWduID09PSAnZnVuY3Rpb24nID8gT2JqZWN0LmFzc2lnbiA6IF9vYmplY3RBc3NpZ247XG4iLCJ2YXIgX2hhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xuXG4vLyBCYXNlZCBvbiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9vYmplY3RBc3NpZ24odGFyZ2V0KSB7XG4gIGlmICh0YXJnZXQgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCcpO1xuICB9XG5cbiAgdmFyIG91dHB1dCA9IE9iamVjdCh0YXJnZXQpO1xuICB2YXIgaWR4ID0gMTtcbiAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHdoaWxlIChpZHggPCBsZW5ndGgpIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2lkeF07XG4gICAgaWYgKHNvdXJjZSAhPSBudWxsKSB7XG4gICAgICBmb3IgKHZhciBuZXh0S2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoX2hhcyhuZXh0S2V5LCBzb3VyY2UpKSB7XG4gICAgICAgICAgb3V0cHV0W25leHRLZXldID0gc291cmNlW25leHRLZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlkeCArPSAxO1xuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59O1xuIiwidmFyIF9jdXJyeTMgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTMnKTtcbnZhciBjdXJyeU4gPSByZXF1aXJlKCcuL2N1cnJ5TicpO1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBwcm9jZXNzIGVpdGhlciB0aGUgYG9uVHJ1ZWAgb3IgdGhlIGBvbkZhbHNlYFxuICogZnVuY3Rpb24gZGVwZW5kaW5nIHVwb24gdGhlIHJlc3VsdCBvZiB0aGUgYGNvbmRpdGlvbmAgcHJlZGljYXRlLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjguMFxuICogQGNhdGVnb3J5IExvZ2ljXG4gKiBAc2lnICgqLi4uIC0+IEJvb2xlYW4pIC0+ICgqLi4uIC0+ICopIC0+ICgqLi4uIC0+ICopIC0+ICgqLi4uIC0+ICopXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb25kaXRpb24gQSBwcmVkaWNhdGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9uVHJ1ZSBBIGZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIHRoZSBgY29uZGl0aW9uYCBldmFsdWF0ZXMgdG8gYSB0cnV0aHkgdmFsdWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkZhbHNlIEEgZnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gdGhlIGBjb25kaXRpb25gIGV2YWx1YXRlcyB0byBhIGZhbHN5IHZhbHVlLlxuICogQHJldHVybiB7RnVuY3Rpb259IEEgbmV3IHVuYXJ5IGZ1bmN0aW9uIHRoYXQgd2lsbCBwcm9jZXNzIGVpdGhlciB0aGUgYG9uVHJ1ZWAgb3IgdGhlIGBvbkZhbHNlYFxuICogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlcGVuZGluZyB1cG9uIHRoZSByZXN1bHQgb2YgdGhlIGBjb25kaXRpb25gIHByZWRpY2F0ZS5cbiAqIEBzZWUgUi51bmxlc3MsIFIud2hlblxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciBpbmNDb3VudCA9IFIuaWZFbHNlKFxuICogICAgICAgIFIuaGFzKCdjb3VudCcpLFxuICogICAgICAgIFIub3ZlcihSLmxlbnNQcm9wKCdjb3VudCcpLCBSLmluYyksXG4gKiAgICAgICAgUi5hc3NvYygnY291bnQnLCAxKVxuICogICAgICApO1xuICogICAgICBpbmNDb3VudCh7fSk7ICAgICAgICAgICAvLz0+IHsgY291bnQ6IDEgfVxuICogICAgICBpbmNDb3VudCh7IGNvdW50OiAxIH0pOyAvLz0+IHsgY291bnQ6IDIgfVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTMoZnVuY3Rpb24gaWZFbHNlKGNvbmRpdGlvbiwgb25UcnVlLCBvbkZhbHNlKSB7XG4gIHJldHVybiBjdXJyeU4oTWF0aC5tYXgoY29uZGl0aW9uLmxlbmd0aCwgb25UcnVlLmxlbmd0aCwgb25GYWxzZS5sZW5ndGgpLFxuICAgIGZ1bmN0aW9uIF9pZkVsc2UoKSB7XG4gICAgICByZXR1cm4gY29uZGl0aW9uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgPyBvblRydWUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IG9uRmFsc2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gICk7XG59KTtcbiIsInZhciBfYXJpdHkgPSByZXF1aXJlKCcuL19hcml0eScpO1xudmFyIF9pc1BsYWNlaG9sZGVyID0gcmVxdWlyZSgnLi9faXNQbGFjZWhvbGRlcicpO1xuXG5cbi8qKlxuICogSW50ZXJuYWwgY3VycnlOIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7TnVtYmVyfSBsZW5ndGggVGhlIGFyaXR5IG9mIHRoZSBjdXJyaWVkIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gcmVjZWl2ZWQgQW4gYXJyYXkgb2YgYXJndW1lbnRzIHJlY2VpdmVkIHRodXMgZmFyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGN1cnJ5LlxuICogQHJldHVybiB7RnVuY3Rpb259IFRoZSBjdXJyaWVkIGZ1bmN0aW9uLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9jdXJyeU4obGVuZ3RoLCByZWNlaXZlZCwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBjb21iaW5lZCA9IFtdO1xuICAgIHZhciBhcmdzSWR4ID0gMDtcbiAgICB2YXIgbGVmdCA9IGxlbmd0aDtcbiAgICB2YXIgY29tYmluZWRJZHggPSAwO1xuICAgIHdoaWxlIChjb21iaW5lZElkeCA8IHJlY2VpdmVkLmxlbmd0aCB8fCBhcmdzSWR4IDwgYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIGlmIChjb21iaW5lZElkeCA8IHJlY2VpdmVkLmxlbmd0aCAmJlxuICAgICAgICAgICghX2lzUGxhY2Vob2xkZXIocmVjZWl2ZWRbY29tYmluZWRJZHhdKSB8fFxuICAgICAgICAgICBhcmdzSWR4ID49IGFyZ3VtZW50cy5sZW5ndGgpKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlY2VpdmVkW2NvbWJpbmVkSWR4XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGFyZ3VtZW50c1thcmdzSWR4XTtcbiAgICAgICAgYXJnc0lkeCArPSAxO1xuICAgICAgfVxuICAgICAgY29tYmluZWRbY29tYmluZWRJZHhdID0gcmVzdWx0O1xuICAgICAgaWYgKCFfaXNQbGFjZWhvbGRlcihyZXN1bHQpKSB7XG4gICAgICAgIGxlZnQgLT0gMTtcbiAgICAgIH1cbiAgICAgIGNvbWJpbmVkSWR4ICs9IDE7XG4gICAgfVxuICAgIHJldHVybiBsZWZ0IDw9IDAgPyBmbi5hcHBseSh0aGlzLCBjb21iaW5lZClcbiAgICAgICAgICAgICAgICAgICAgIDogX2FyaXR5KGxlZnQsIF9jdXJyeU4obGVuZ3RoLCBjb21iaW5lZCwgZm4pKTtcbiAgfTtcbn07XG4iLCJ2YXIgX2N1cnJ5MyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MycpO1xuXG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNwZWNpZmllZCBvYmplY3QgcHJvcGVydHkgc2F0aXNmaWVzIHRoZSBnaXZlblxuICogcHJlZGljYXRlOyBgZmFsc2VgIG90aGVyd2lzZS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xNi4wXG4gKiBAY2F0ZWdvcnkgTG9naWNcbiAqIEBzaWcgKGEgLT4gQm9vbGVhbikgLT4gU3RyaW5nIC0+IHtTdHJpbmc6IGF9IC0+IEJvb2xlYW5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0geyp9IG9ialxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBzZWUgUi5wcm9wRXEsIFIucHJvcElzXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5wcm9wU2F0aXNmaWVzKHggPT4geCA+IDAsICd4Jywge3g6IDEsIHk6IDJ9KTsgLy89PiB0cnVlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MyhmdW5jdGlvbiBwcm9wU2F0aXNmaWVzKHByZWQsIG5hbWUsIG9iaikge1xuICByZXR1cm4gcHJlZChvYmpbbmFtZV0pO1xufSk7XG4iLCJ2YXIgX2N1cnJ5MyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MycpO1xudmFyIGlzID0gcmVxdWlyZSgnLi9pcycpO1xuXG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNwZWNpZmllZCBvYmplY3QgcHJvcGVydHkgaXMgb2YgdGhlIGdpdmVuIHR5cGU7XG4gKiBgZmFsc2VgIG90aGVyd2lzZS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xNi4wXG4gKiBAY2F0ZWdvcnkgVHlwZVxuICogQHNpZyBUeXBlIC0+IFN0cmluZyAtPiBPYmplY3QgLT4gQm9vbGVhblxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHlwZVxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7Kn0gb2JqXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQHNlZSBSLmlzLCBSLnByb3BTYXRpc2ZpZXNcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLnByb3BJcyhOdW1iZXIsICd4Jywge3g6IDEsIHk6IDJ9KTsgIC8vPT4gdHJ1ZVxuICogICAgICBSLnByb3BJcyhOdW1iZXIsICd4Jywge3g6ICdmb28nfSk7ICAgIC8vPT4gZmFsc2VcbiAqICAgICAgUi5wcm9wSXMoTnVtYmVyLCAneCcsIHt9KTsgICAgICAgICAgICAvLz0+IGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MyhmdW5jdGlvbiBwcm9wSXModHlwZSwgbmFtZSwgb2JqKSB7XG4gIHJldHVybiBpcyh0eXBlLCBvYmpbbmFtZV0pO1xufSk7XG4iLCJ2YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MicpO1xudmFyIF9oYXMgPSByZXF1aXJlKCcuL2ludGVybmFsL19oYXMnKTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgYW4gb2JqZWN0IGhhcyBhbiBvd24gcHJvcGVydHkgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWVcbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBzaWcgcyAtPiB7czogeH0gLT4gQm9vbGVhblxuICogQHBhcmFtIHtTdHJpbmd9IHByb3AgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGNoZWNrIGZvci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm4ge0Jvb2xlYW59IFdoZXRoZXIgdGhlIHByb3BlcnR5IGV4aXN0cy5cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgaGFzTmFtZSA9IFIuaGFzKCduYW1lJyk7XG4gKiAgICAgIGhhc05hbWUoe25hbWU6ICdhbGljZSd9KTsgICAvLz0+IHRydWVcbiAqICAgICAgaGFzTmFtZSh7bmFtZTogJ2JvYid9KTsgICAgIC8vPT4gdHJ1ZVxuICogICAgICBoYXNOYW1lKHt9KTsgICAgICAgICAgICAgICAgLy89PiBmYWxzZVxuICpcbiAqICAgICAgdmFyIHBvaW50ID0ge3g6IDAsIHk6IDB9O1xuICogICAgICB2YXIgcG9pbnRIYXMgPSBSLmhhcyhSLl9fLCBwb2ludCk7XG4gKiAgICAgIHBvaW50SGFzKCd4Jyk7ICAvLz0+IHRydWVcbiAqICAgICAgcG9pbnRIYXMoJ3knKTsgIC8vPT4gdHJ1ZVxuICogICAgICBwb2ludEhhcygneicpOyAgLy89PiBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoX2hhcyk7XG4iLCJ2YXIgbGlmdCA9IHJlcXVpcmUoJy4vbGlmdCcpO1xudmFyIG5vdCA9IHJlcXVpcmUoJy4vbm90Jyk7XG5cblxuLyoqXG4gKiBUYWtlcyBhIGZ1bmN0aW9uIGBmYCBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIGBnYCBzdWNoIHRoYXQgaWYgY2FsbGVkIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzXG4gKiB3aGVuIGBmYCByZXR1cm5zIGEgXCJ0cnV0aHlcIiB2YWx1ZSwgYGdgIHJldHVybnMgYGZhbHNlYCBhbmQgd2hlbiBgZmAgcmV0dXJucyBhIFwiZmFsc3lcIiB2YWx1ZSBgZ2AgcmV0dXJucyBgdHJ1ZWAuXG4gKlxuICogYFIuY29tcGxlbWVudGAgbWF5IGJlIGFwcGxpZWQgdG8gYW55IGZ1bmN0b3JcbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xMi4wXG4gKiBAY2F0ZWdvcnkgTG9naWNcbiAqIEBzaWcgKCouLi4gLT4gKikgLT4gKCouLi4gLT4gQm9vbGVhbilcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQHNlZSBSLm5vdFxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciBpc05vdE5pbCA9IFIuY29tcGxlbWVudChSLmlzTmlsKTtcbiAqICAgICAgaXNOaWwobnVsbCk7IC8vPT4gdHJ1ZVxuICogICAgICBpc05vdE5pbChudWxsKTsgLy89PiBmYWxzZVxuICogICAgICBpc05pbCg3KTsgLy89PiBmYWxzZVxuICogICAgICBpc05vdE5pbCg3KTsgLy89PiB0cnVlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gbGlmdChub3QpO1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcbnZhciBsaWZ0TiA9IHJlcXVpcmUoJy4vbGlmdE4nKTtcblxuXG4vKipcbiAqIFwibGlmdHNcIiBhIGZ1bmN0aW9uIG9mIGFyaXR5ID4gMSBzbyB0aGF0IGl0IG1heSBcIm1hcCBvdmVyXCIgYSBsaXN0LCBGdW5jdGlvbiBvciBvdGhlclxuICogb2JqZWN0IHRoYXQgc2F0aXNmaWVzIHRoZSBbRmFudGFzeUxhbmQgQXBwbHkgc3BlY10oaHR0cHM6Ly9naXRodWIuY29tL2ZhbnRhc3lsYW5kL2ZhbnRhc3ktbGFuZCNhcHBseSkuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuNy4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBzaWcgKCouLi4gLT4gKikgLT4gKFsqXS4uLiAtPiBbKl0pXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbGlmdCBpbnRvIGhpZ2hlciBjb250ZXh0XG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIGxpZnRlZCBmdW5jdGlvbi5cbiAqIEBzZWUgUi5saWZ0TlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciBtYWRkMyA9IFIubGlmdCgoYSwgYiwgYykgPT4gYSArIGIgKyBjKTtcbiAqXG4gKiAgICAgIG1hZGQzKFsxLDIsM10sIFsxLDIsM10sIFsxXSk7IC8vPT4gWzMsIDQsIDUsIDQsIDUsIDYsIDUsIDYsIDddXG4gKlxuICogICAgICB2YXIgbWFkZDUgPSBSLmxpZnQoKGEsIGIsIGMsIGQsIGUpID0+IGEgKyBiICsgYyArIGQgKyBlKTtcbiAqXG4gKiAgICAgIG1hZGQ1KFsxLDJdLCBbM10sIFs0LCA1XSwgWzZdLCBbNywgOF0pOyAvLz0+IFsyMSwgMjIsIDIyLCAyMywgMjIsIDIzLCAyMywgMjRdXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MShmdW5jdGlvbiBsaWZ0KGZuKSB7XG4gIHJldHVybiBsaWZ0Tihmbi5sZW5ndGgsIGZuKTtcbn0pO1xuIiwidmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcbnZhciBfcmVkdWNlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fcmVkdWNlJyk7XG52YXIgYXAgPSByZXF1aXJlKCcuL2FwJyk7XG52YXIgY3VycnlOID0gcmVxdWlyZSgnLi9jdXJyeU4nKTtcbnZhciBtYXAgPSByZXF1aXJlKCcuL21hcCcpO1xuXG5cbi8qKlxuICogXCJsaWZ0c1wiIGEgZnVuY3Rpb24gdG8gYmUgdGhlIHNwZWNpZmllZCBhcml0eSwgc28gdGhhdCBpdCBtYXkgXCJtYXAgb3ZlclwiIHRoYXRcbiAqIG1hbnkgbGlzdHMsIEZ1bmN0aW9ucyBvciBvdGhlciBvYmplY3RzIHRoYXQgc2F0aXNmeSB0aGUgW0ZhbnRhc3lMYW5kIEFwcGx5IHNwZWNdKGh0dHBzOi8vZ2l0aHViLmNvbS9mYW50YXN5bGFuZC9mYW50YXN5LWxhbmQjYXBwbHkpLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjcuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAc2lnIE51bWJlciAtPiAoKi4uLiAtPiAqKSAtPiAoWypdLi4uIC0+IFsqXSlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBsaWZ0IGludG8gaGlnaGVyIGNvbnRleHRcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgbGlmdGVkIGZ1bmN0aW9uLlxuICogQHNlZSBSLmxpZnQsIFIuYXBcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgbWFkZDMgPSBSLmxpZnROKDMsICguLi5hcmdzKSA9PiBSLnN1bShhcmdzKSk7XG4gKiAgICAgIG1hZGQzKFsxLDIsM10sIFsxLDIsM10sIFsxXSk7IC8vPT4gWzMsIDQsIDUsIDQsIDUsIDYsIDUsIDYsIDddXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MihmdW5jdGlvbiBsaWZ0Tihhcml0eSwgZm4pIHtcbiAgdmFyIGxpZnRlZCA9IGN1cnJ5Tihhcml0eSwgZm4pO1xuICByZXR1cm4gY3VycnlOKGFyaXR5LCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gX3JlZHVjZShhcCwgbWFwKGxpZnRlZCwgYXJndW1lbnRzWzBdKSwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gIH0pO1xufSk7XG4iLCJ2YXIgX2NvbmNhdCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2NvbmNhdCcpO1xudmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcbnZhciBfcmVkdWNlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fcmVkdWNlJyk7XG52YXIgbWFwID0gcmVxdWlyZSgnLi9tYXAnKTtcblxuXG4vKipcbiAqIGFwIGFwcGxpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBhIGxpc3Qgb2YgdmFsdWVzLlxuICpcbiAqIERpc3BhdGNoZXMgdG8gdGhlIGBhcGAgbWV0aG9kIG9mIHRoZSBzZWNvbmQgYXJndW1lbnQsIGlmIHByZXNlbnQuIEFsc29cbiAqIHRyZWF0cyBjdXJyaWVkIGZ1bmN0aW9ucyBhcyBhcHBsaWNhdGl2ZXMuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMy4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBzaWcgW2EgLT4gYl0gLT4gW2FdIC0+IFtiXVxuICogQHNpZyBBcHBseSBmID0+IGYgKGEgLT4gYikgLT4gZiBhIC0+IGYgYlxuICogQHBhcmFtIHtBcnJheX0gZm5zIEFuIGFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHBhcmFtIHtBcnJheX0gdnMgQW4gYXJyYXkgb2YgdmFsdWVzXG4gKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgcmVzdWx0cyBvZiBhcHBseWluZyBlYWNoIG9mIGBmbnNgIHRvIGFsbCBvZiBgdnNgIGluIHR1cm4uXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5hcChbUi5tdWx0aXBseSgyKSwgUi5hZGQoMyldLCBbMSwyLDNdKTsgLy89PiBbMiwgNCwgNiwgNCwgNSwgNl1cbiAqICAgICAgUi5hcChbUi5jb25jYXQoJ3Rhc3R5ICcpLCBSLnRvVXBwZXJdLCBbJ3BpenphJywgJ3NhbGFkJ10pOyAvLz0+IFtcInRhc3R5IHBpenphXCIsIFwidGFzdHkgc2FsYWRcIiwgXCJQSVpaQVwiLCBcIlNBTEFEXCJdXG4gKiBAc3ltYiBSLmFwKFtmLCBnXSwgW2EsIGJdKSA9IFtmKGEpLCBmKGIpLCBnKGEpLCBnKGIpXVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoZnVuY3Rpb24gYXAoYXBwbGljYXRpdmUsIGZuKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGFwcGxpY2F0aXZlLmFwID09PSAnZnVuY3Rpb24nID9cbiAgICAgIGFwcGxpY2F0aXZlLmFwKGZuKSA6XG4gICAgdHlwZW9mIGFwcGxpY2F0aXZlID09PSAnZnVuY3Rpb24nID9cbiAgICAgIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIGFwcGxpY2F0aXZlKHgpKGZuKHgpKTsgfSA6XG4gICAgLy8gZWxzZVxuICAgICAgX3JlZHVjZShmdW5jdGlvbihhY2MsIGYpIHsgcmV0dXJuIF9jb25jYXQoYWNjLCBtYXAoZiwgZm4pKTsgfSwgW10sIGFwcGxpY2F0aXZlKVxuICApO1xufSk7XG4iLCJ2YXIgX2lzQXJyYXkgPSByZXF1aXJlKCcuL19pc0FycmF5Jyk7XG52YXIgX2lzVHJhbnNmb3JtZXIgPSByZXF1aXJlKCcuL19pc1RyYW5zZm9ybWVyJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBkaXNwYXRjaGVzIHdpdGggZGlmZmVyZW50IHN0cmF0ZWdpZXMgYmFzZWQgb24gdGhlXG4gKiBvYmplY3QgaW4gbGlzdCBwb3NpdGlvbiAobGFzdCBhcmd1bWVudCkuIElmIGl0IGlzIGFuIGFycmF5LCBleGVjdXRlcyBbZm5dLlxuICogT3RoZXJ3aXNlLCBpZiBpdCBoYXMgYSBmdW5jdGlvbiB3aXRoIG9uZSBvZiB0aGUgZ2l2ZW4gbWV0aG9kIG5hbWVzLCBpdCB3aWxsXG4gKiBleGVjdXRlIHRoYXQgZnVuY3Rpb24gKGZ1bmN0b3IgY2FzZSkuIE90aGVyd2lzZSwgaWYgaXQgaXMgYSB0cmFuc2Zvcm1lcixcbiAqIHVzZXMgdHJhbnNkdWNlciBbeGZdIHRvIHJldHVybiBhIG5ldyB0cmFuc2Zvcm1lciAodHJhbnNkdWNlciBjYXNlKS5cbiAqIE90aGVyd2lzZSwgaXQgd2lsbCBkZWZhdWx0IHRvIGV4ZWN1dGluZyBbZm5dLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBtZXRob2ROYW1lcyBwcm9wZXJ0aWVzIHRvIGNoZWNrIGZvciBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0geGYgdHJhbnNkdWNlciB0byBpbml0aWFsaXplIGlmIG9iamVjdCBpcyB0cmFuc2Zvcm1lclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gZGVmYXVsdCByYW1kYSBpbXBsZW1lbnRhdGlvblxuICogQHJldHVybiB7RnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCBkaXNwYXRjaGVzIG9uIG9iamVjdCBpbiBsaXN0IHBvc2l0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2Rpc3BhdGNoYWJsZShtZXRob2ROYW1lcywgeGYsIGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZuKCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgICB2YXIgb2JqID0gYXJncy5wb3AoKTtcbiAgICBpZiAoIV9pc0FycmF5KG9iaikpIHtcbiAgICAgIHZhciBpZHggPSAwO1xuICAgICAgd2hpbGUgKGlkeCA8IG1ldGhvZE5hbWVzLmxlbmd0aCkge1xuICAgICAgICBpZiAodHlwZW9mIG9ialttZXRob2ROYW1lc1tpZHhdXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBvYmpbbWV0aG9kTmFtZXNbaWR4XV0uYXBwbHkob2JqLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBpZHggKz0gMTtcbiAgICAgIH1cbiAgICAgIGlmIChfaXNUcmFuc2Zvcm1lcihvYmopKSB7XG4gICAgICAgIHZhciB0cmFuc2R1Y2VyID0geGYuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgIHJldHVybiB0cmFuc2R1Y2VyKG9iaik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2lzVHJhbnNmb3JtZXIob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqWydAQHRyYW5zZHVjZXIvc3RlcCddID09PSAnZnVuY3Rpb24nO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX21hcChmbiwgZnVuY3Rvcikge1xuICB2YXIgaWR4ID0gMDtcbiAgdmFyIGxlbiA9IGZ1bmN0b3IubGVuZ3RoO1xuICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuKTtcbiAgd2hpbGUgKGlkeCA8IGxlbikge1xuICAgIHJlc3VsdFtpZHhdID0gZm4oZnVuY3RvcltpZHhdKTtcbiAgICBpZHggKz0gMTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9fY3VycnkyJyk7XG52YXIgX3hmQmFzZSA9IHJlcXVpcmUoJy4vX3hmQmFzZScpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBYTWFwKGYsIHhmKSB7XG4gICAgdGhpcy54ZiA9IHhmO1xuICAgIHRoaXMuZiA9IGY7XG4gIH1cbiAgWE1hcC5wcm90b3R5cGVbJ0BAdHJhbnNkdWNlci9pbml0J10gPSBfeGZCYXNlLmluaXQ7XG4gIFhNYXAucHJvdG90eXBlWydAQHRyYW5zZHVjZXIvcmVzdWx0J10gPSBfeGZCYXNlLnJlc3VsdDtcbiAgWE1hcC5wcm90b3R5cGVbJ0BAdHJhbnNkdWNlci9zdGVwJ10gPSBmdW5jdGlvbihyZXN1bHQsIGlucHV0KSB7XG4gICAgcmV0dXJuIHRoaXMueGZbJ0BAdHJhbnNkdWNlci9zdGVwJ10ocmVzdWx0LCB0aGlzLmYoaW5wdXQpKTtcbiAgfTtcblxuICByZXR1cm4gX2N1cnJ5MihmdW5jdGlvbiBfeG1hcChmLCB4ZikgeyByZXR1cm4gbmV3IFhNYXAoZiwgeGYpOyB9KTtcbn0oKSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMueGZbJ0BAdHJhbnNkdWNlci9pbml0J10oKTtcbiAgfSxcbiAgcmVzdWx0OiBmdW5jdGlvbihyZXN1bHQpIHtcbiAgICByZXR1cm4gdGhpcy54ZlsnQEB0cmFuc2R1Y2VyL3Jlc3VsdCddKHJlc3VsdCk7XG4gIH1cbn07XG4iLCJ2YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MScpO1xuXG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGAhYCBvZiBpdHMgYXJndW1lbnQuIEl0IHdpbGwgcmV0dXJuIGB0cnVlYCB3aGVuXG4gKiBwYXNzZWQgZmFsc2UteSB2YWx1ZSwgYW5kIGBmYWxzZWAgd2hlbiBwYXNzZWQgYSB0cnV0aC15IG9uZS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjBcbiAqIEBjYXRlZ29yeSBMb2dpY1xuICogQHNpZyAqIC0+IEJvb2xlYW5cbiAqIEBwYXJhbSB7Kn0gYSBhbnkgdmFsdWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHRoZSBsb2dpY2FsIGludmVyc2Ugb2YgcGFzc2VkIGFyZ3VtZW50LlxuICogQHNlZSBSLmNvbXBsZW1lbnRcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLm5vdCh0cnVlKTsgLy89PiBmYWxzZVxuICogICAgICBSLm5vdChmYWxzZSk7IC8vPT4gdHJ1ZVxuICogICAgICBSLm5vdCgwKTsgLy89PiB0cnVlXG4gKiAgICAgIFIubm90KDEpOyAvLz0+IGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MShmdW5jdGlvbiBub3QoYSkge1xuICByZXR1cm4gIWE7XG59KTtcbiIsInZhciBfY3VycnkxID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkxJyk7XG52YXIgZW1wdHkgPSByZXF1aXJlKCcuL2VtcHR5Jyk7XG52YXIgZXF1YWxzID0gcmVxdWlyZSgnLi9lcXVhbHMnKTtcblxuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBpdHMgdHlwZSdzIGVtcHR5IHZhbHVlOyBgZmFsc2VgXG4gKiBvdGhlcndpc2UuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgTG9naWNcbiAqIEBzaWcgYSAtPiBCb29sZWFuXG4gKiBAcGFyYW0geyp9IHhcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAc2VlIFIuZW1wdHlcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLmlzRW1wdHkoWzEsIDIsIDNdKTsgICAvLz0+IGZhbHNlXG4gKiAgICAgIFIuaXNFbXB0eShbXSk7ICAgICAgICAgIC8vPT4gdHJ1ZVxuICogICAgICBSLmlzRW1wdHkoJycpOyAgICAgICAgICAvLz0+IHRydWVcbiAqICAgICAgUi5pc0VtcHR5KG51bGwpOyAgICAgICAgLy89PiBmYWxzZVxuICogICAgICBSLmlzRW1wdHkoe30pOyAgICAgICAgICAvLz0+IHRydWVcbiAqICAgICAgUi5pc0VtcHR5KHtsZW5ndGg6IDB9KTsgLy89PiBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTEoZnVuY3Rpb24gaXNFbXB0eSh4KSB7XG4gIHJldHVybiB4ICE9IG51bGwgJiYgZXF1YWxzKHgsIGVtcHR5KHgpKTtcbn0pO1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcbnZhciBfaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2ludGVybmFsL19pc0FyZ3VtZW50cycpO1xudmFyIF9pc0FycmF5ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9faXNBcnJheScpO1xudmFyIF9pc09iamVjdCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2lzT2JqZWN0Jyk7XG52YXIgX2lzU3RyaW5nID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9faXNTdHJpbmcnKTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGVtcHR5IHZhbHVlIG9mIGl0cyBhcmd1bWVudCdzIHR5cGUuIFJhbWRhIGRlZmluZXMgdGhlIGVtcHR5XG4gKiB2YWx1ZSBvZiBBcnJheSAoYFtdYCksIE9iamVjdCAoYHt9YCksIFN0cmluZyAoYCcnYCksIGFuZCBBcmd1bWVudHMuIE90aGVyXG4gKiB0eXBlcyBhcmUgc3VwcG9ydGVkIGlmIHRoZXkgZGVmaW5lIGA8VHlwZT4uZW1wdHlgIGFuZC9vclxuICogYDxUeXBlPi5wcm90b3R5cGUuZW1wdHlgLlxuICpcbiAqIERpc3BhdGNoZXMgdG8gdGhlIGBlbXB0eWAgbWV0aG9kIG9mIHRoZSBmaXJzdCBhcmd1bWVudCwgaWYgcHJlc2VudC5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4zLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHNpZyBhIC0+IGFcbiAqIEBwYXJhbSB7Kn0geFxuICogQHJldHVybiB7Kn1cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLmVtcHR5KEp1c3QoNDIpKTsgICAgICAvLz0+IE5vdGhpbmcoKVxuICogICAgICBSLmVtcHR5KFsxLCAyLCAzXSk7ICAgICAvLz0+IFtdXG4gKiAgICAgIFIuZW1wdHkoJ3VuaWNvcm5zJyk7ICAgIC8vPT4gJydcbiAqICAgICAgUi5lbXB0eSh7eDogMSwgeTogMn0pOyAgLy89PiB7fVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTEoZnVuY3Rpb24gZW1wdHkoeCkge1xuICByZXR1cm4gKFxuICAgICh4ICE9IG51bGwgJiYgdHlwZW9mIHguZW1wdHkgPT09ICdmdW5jdGlvbicpID9cbiAgICAgIHguZW1wdHkoKSA6XG4gICAgKHggIT0gbnVsbCAmJiB4LmNvbnN0cnVjdG9yICE9IG51bGwgJiYgdHlwZW9mIHguY29uc3RydWN0b3IuZW1wdHkgPT09ICdmdW5jdGlvbicpID9cbiAgICAgIHguY29uc3RydWN0b3IuZW1wdHkoKSA6XG4gICAgX2lzQXJyYXkoeCkgP1xuICAgICAgW10gOlxuICAgIF9pc1N0cmluZyh4KSA/XG4gICAgICAnJyA6XG4gICAgX2lzT2JqZWN0KHgpID9cbiAgICAgIHt9IDpcbiAgICBfaXNBcmd1bWVudHMoeCkgP1xuICAgICAgKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpIDpcbiAgICAvLyBlbHNlXG4gICAgICB2b2lkIDBcbiAgKTtcbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfaXNPYmplY3QoeCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHgpID09PSAnW29iamVjdCBPYmplY3RdJztcbn07XG4iLCJ2YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MScpO1xudmFyIGN1cnJ5TiA9IHJlcXVpcmUoJy4vY3VycnlOJyk7XG52YXIgbWF4ID0gcmVxdWlyZSgnLi9tYXgnKTtcbnZhciBwbHVjayA9IHJlcXVpcmUoJy4vcGx1Y2snKTtcbnZhciByZWR1Y2UgPSByZXF1aXJlKCcuL3JlZHVjZScpO1xuXG5cbi8qKlxuICogVGFrZXMgYSBsaXN0IG9mIHByZWRpY2F0ZXMgYW5kIHJldHVybnMgYSBwcmVkaWNhdGUgdGhhdCByZXR1cm5zIHRydWUgZm9yIGFcbiAqIGdpdmVuIGxpc3Qgb2YgYXJndW1lbnRzIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgcHJvdmlkZWQgcHJlZGljYXRlcyBpc1xuICogc2F0aXNmaWVkIGJ5IHRob3NlIGFyZ3VtZW50cy5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gcmV0dXJuZWQgaXMgYSBjdXJyaWVkIGZ1bmN0aW9uIHdob3NlIGFyaXR5IG1hdGNoZXMgdGhhdCBvZiB0aGVcbiAqIGhpZ2hlc3QtYXJpdHkgcHJlZGljYXRlLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjkuMFxuICogQGNhdGVnb3J5IExvZ2ljXG4gKiBAc2lnIFsoKi4uLiAtPiBCb29sZWFuKV0gLT4gKCouLi4gLT4gQm9vbGVhbilcbiAqIEBwYXJhbSB7QXJyYXl9IHByZWRpY2F0ZXMgQW4gYXJyYXkgb2YgcHJlZGljYXRlcyB0byBjaGVja1xuICogQHJldHVybiB7RnVuY3Rpb259IFRoZSBjb21iaW5lZCBwcmVkaWNhdGVcbiAqIEBzZWUgUi5hbGxQYXNzXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIGlzQ2x1YiA9IFIucHJvcEVxKCdzdWl0JywgJ+KZoycpO1xuICogICAgICB2YXIgaXNTcGFkZSA9IFIucHJvcEVxKCdzdWl0JywgJ+KZoCcpO1xuICogICAgICB2YXIgaXNCbGFja0NhcmQgPSBSLmFueVBhc3MoW2lzQ2x1YiwgaXNTcGFkZV0pO1xuICpcbiAqICAgICAgaXNCbGFja0NhcmQoe3Jhbms6ICcxMCcsIHN1aXQ6ICfimaMnfSk7IC8vPT4gdHJ1ZVxuICogICAgICBpc0JsYWNrQ2FyZCh7cmFuazogJ1EnLCBzdWl0OiAn4pmgJ30pOyAvLz0+IHRydWVcbiAqICAgICAgaXNCbGFja0NhcmQoe3Jhbms6ICdRJywgc3VpdDogJ+KZpid9KTsgLy89PiBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTEoZnVuY3Rpb24gYW55UGFzcyhwcmVkcykge1xuICByZXR1cm4gY3VycnlOKHJlZHVjZShtYXgsIDAsIHBsdWNrKCdsZW5ndGgnLCBwcmVkcykpLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgaWR4ID0gMDtcbiAgICB2YXIgbGVuID0gcHJlZHMubGVuZ3RoO1xuICAgIHdoaWxlIChpZHggPCBsZW4pIHtcbiAgICAgIGlmIChwcmVkc1tpZHhdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZHggKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbn0pO1xuIiwidmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcbnZhciBtYXAgPSByZXF1aXJlKCcuL21hcCcpO1xudmFyIHByb3AgPSByZXF1aXJlKCcuL3Byb3AnKTtcblxuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgbGlzdCBieSBwbHVja2luZyB0aGUgc2FtZSBuYW1lZCBwcm9wZXJ0eSBvZmYgYWxsIG9iamVjdHMgaW5cbiAqIHRoZSBsaXN0IHN1cHBsaWVkLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IExpc3RcbiAqIEBzaWcgayAtPiBbe2s6IHZ9XSAtPiBbdl1cbiAqIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30ga2V5IFRoZSBrZXkgbmFtZSB0byBwbHVjayBvZmYgb2YgZWFjaCBvYmplY3QuXG4gKiBAcGFyYW0ge0FycmF5fSBsaXN0IFRoZSBhcnJheSB0byBjb25zaWRlci5cbiAqIEByZXR1cm4ge0FycmF5fSBUaGUgbGlzdCBvZiB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBrZXkuXG4gKiBAc2VlIFIucHJvcHNcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLnBsdWNrKCdhJykoW3thOiAxfSwge2E6IDJ9XSk7IC8vPT4gWzEsIDJdXG4gKiAgICAgIFIucGx1Y2soMCkoW1sxLCAyXSwgWzMsIDRdXSk7ICAgLy89PiBbMSwgM11cbiAqIEBzeW1iIFIucGx1Y2soJ3gnLCBbe3g6IDEsIHk6IDJ9LCB7eDogMywgeTogNH0sIHt4OiA1LCB5OiA2fV0pID0gWzEsIDMsIDVdXG4gKiBAc3ltYiBSLnBsdWNrKDAsIFtbMSwgMl0sIFszLCA0XSwgWzUsIDZdXSkgPSBbMSwgMywgNV1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIHBsdWNrKHAsIGxpc3QpIHtcbiAgcmV0dXJuIG1hcChwcm9wKHApLCBsaXN0KTtcbn0pO1xuIiwidmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcblxuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNlY29uZDtcbiAqIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IFJlbGF0aW9uXG4gKiBAc2lnIE9yZCBhID0+IGEgLT4gYSAtPiBCb29sZWFuXG4gKiBAcGFyYW0ge051bWJlcn0gYVxuICogQHBhcmFtIHtOdW1iZXJ9IGJcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAc2VlIFIubHRlXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5ndGUoMiwgMSk7IC8vPT4gdHJ1ZVxuICogICAgICBSLmd0ZSgyLCAyKTsgLy89PiB0cnVlXG4gKiAgICAgIFIuZ3RlKDIsIDMpOyAvLz0+IGZhbHNlXG4gKiAgICAgIFIuZ3RlKCdhJywgJ3onKTsgLy89PiBmYWxzZVxuICogICAgICBSLmd0ZSgneicsICdhJyk7IC8vPT4gdHJ1ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoZnVuY3Rpb24gZ3RlKGEsIGIpIHsgcmV0dXJuIGEgPj0gYjsgfSk7XG4iLCJ2YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MScpO1xudmFyIGN1cnJ5TiA9IHJlcXVpcmUoJy4vY3VycnlOJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGEgY3VycmllZCBlcXVpdmFsZW50IG9mIHRoZSBwcm92aWRlZCBmdW5jdGlvbi4gVGhlIGN1cnJpZWQgZnVuY3Rpb25cbiAqIGhhcyB0d28gdW51c3VhbCBjYXBhYmlsaXRpZXMuIEZpcnN0LCBpdHMgYXJndW1lbnRzIG5lZWRuJ3QgYmUgcHJvdmlkZWQgb25lXG4gKiBhdCBhIHRpbWUuIElmIGBmYCBpcyBhIHRlcm5hcnkgZnVuY3Rpb24gYW5kIGBnYCBpcyBgUi5jdXJyeShmKWAsIHRoZVxuICogZm9sbG93aW5nIGFyZSBlcXVpdmFsZW50OlxuICpcbiAqICAgLSBgZygxKSgyKSgzKWBcbiAqICAgLSBgZygxKSgyLCAzKWBcbiAqICAgLSBgZygxLCAyKSgzKWBcbiAqICAgLSBgZygxLCAyLCAzKWBcbiAqXG4gKiBTZWNvbmRseSwgdGhlIHNwZWNpYWwgcGxhY2Vob2xkZXIgdmFsdWUgYFIuX19gIG1heSBiZSB1c2VkIHRvIHNwZWNpZnlcbiAqIFwiZ2Fwc1wiLCBhbGxvd2luZyBwYXJ0aWFsIGFwcGxpY2F0aW9uIG9mIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMsXG4gKiByZWdhcmRsZXNzIG9mIHRoZWlyIHBvc2l0aW9ucy4gSWYgYGdgIGlzIGFzIGFib3ZlIGFuZCBgX2AgaXMgYFIuX19gLCB0aGVcbiAqIGZvbGxvd2luZyBhcmUgZXF1aXZhbGVudDpcbiAqXG4gKiAgIC0gYGcoMSwgMiwgMylgXG4gKiAgIC0gYGcoXywgMiwgMykoMSlgXG4gKiAgIC0gYGcoXywgXywgMykoMSkoMilgXG4gKiAgIC0gYGcoXywgXywgMykoMSwgMilgXG4gKiAgIC0gYGcoXywgMikoMSkoMylgXG4gKiAgIC0gYGcoXywgMikoMSwgMylgXG4gKiAgIC0gYGcoXywgMikoXywgMykoMSlgXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBzaWcgKCogLT4gYSkgLT4gKCogLT4gYSlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjdXJyeS5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIG5ldywgY3VycmllZCBmdW5jdGlvbi5cbiAqIEBzZWUgUi5jdXJyeU5cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgYWRkRm91ck51bWJlcnMgPSAoYSwgYiwgYywgZCkgPT4gYSArIGIgKyBjICsgZDtcbiAqXG4gKiAgICAgIHZhciBjdXJyaWVkQWRkRm91ck51bWJlcnMgPSBSLmN1cnJ5KGFkZEZvdXJOdW1iZXJzKTtcbiAqICAgICAgdmFyIGYgPSBjdXJyaWVkQWRkRm91ck51bWJlcnMoMSwgMik7XG4gKiAgICAgIHZhciBnID0gZigzKTtcbiAqICAgICAgZyg0KTsgLy89PiAxMFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTEoZnVuY3Rpb24gY3VycnkoZm4pIHtcbiAgcmV0dXJuIGN1cnJ5Tihmbi5sZW5ndGgsIGZuKTtcbn0pO1xuIiwidmFyIGFsd2F5cyA9IHJlcXVpcmUoJy4vYWx3YXlzJyk7XG5cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHJldHVybnMgYHRydWVgLiBBbnkgcGFzc2VkIGluIHBhcmFtZXRlcnMgYXJlIGlnbm9yZWQuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuOS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBzaWcgKiAtPiBCb29sZWFuXG4gKiBAcGFyYW0geyp9XG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQHNlZSBSLmFsd2F5cywgUi5GXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5UKCk7IC8vPT4gdHJ1ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGFsd2F5cyh0cnVlKTtcbiIsInZhciBfY3VycnkxID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkxJyk7XG52YXIgX2lkZW50aXR5ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9faWRlbnRpdHknKTtcblxuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBkb2VzIG5vdGhpbmcgYnV0IHJldHVybiB0aGUgcGFyYW1ldGVyIHN1cHBsaWVkIHRvIGl0LiBHb29kXG4gKiBhcyBhIGRlZmF1bHQgb3IgcGxhY2Vob2xkZXIgZnVuY3Rpb24uXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBzaWcgYSAtPiBhXG4gKiBAcGFyYW0geyp9IHggVGhlIHZhbHVlIHRvIHJldHVybi5cbiAqIEByZXR1cm4geyp9IFRoZSBpbnB1dCB2YWx1ZSwgYHhgLlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIuaWRlbnRpdHkoMSk7IC8vPT4gMVxuICpcbiAqICAgICAgdmFyIG9iaiA9IHt9O1xuICogICAgICBSLmlkZW50aXR5KG9iaikgPT09IG9iajsgLy89PiB0cnVlXG4gKiBAc3ltYiBSLmlkZW50aXR5KGEpID0gYVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTEoX2lkZW50aXR5KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2lkZW50aXR5KHgpIHsgcmV0dXJuIHg7IH07XG4iLCJ2YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MScpO1xuXG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBpbnB1dCB2YWx1ZSBpcyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuOS4wXG4gKiBAY2F0ZWdvcnkgVHlwZVxuICogQHNpZyAqIC0+IEJvb2xlYW5cbiAqIEBwYXJhbSB7Kn0geCBUaGUgdmFsdWUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge0Jvb2xlYW59IGB0cnVlYCBpZiBgeGAgaXMgYHVuZGVmaW5lZGAgb3IgYG51bGxgLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLmlzTmlsKG51bGwpOyAvLz0+IHRydWVcbiAqICAgICAgUi5pc05pbCh1bmRlZmluZWQpOyAvLz0+IHRydWVcbiAqICAgICAgUi5pc05pbCgwKTsgLy89PiBmYWxzZVxuICogICAgICBSLmlzTmlsKFtdKTsgLy89PiBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTEoZnVuY3Rpb24gaXNOaWwoeCkgeyByZXR1cm4geCA9PSBudWxsOyB9KTtcbiIsInZhciBfYXJpdHkgPSByZXF1aXJlKCcuL2ludGVybmFsL19hcml0eScpO1xudmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcbnZhciBtYXAgPSByZXF1aXJlKCcuL21hcCcpO1xudmFyIG1heCA9IHJlcXVpcmUoJy4vbWF4Jyk7XG52YXIgcmVkdWNlID0gcmVxdWlyZSgnLi9yZWR1Y2UnKTtcblxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiwgYGZuYCwgd2hpY2ggZW5jYXBzdWxhdGVzIGBpZi9lbHNlLCBpZi9lbHNlLCAuLi5gIGxvZ2ljLlxuICogYFIuY29uZGAgdGFrZXMgYSBsaXN0IG9mIFtwcmVkaWNhdGUsIHRyYW5zZm9ybWVyXSBwYWlycy4gQWxsIG9mIHRoZSBhcmd1bWVudHNcbiAqIHRvIGBmbmAgYXJlIGFwcGxpZWQgdG8gZWFjaCBvZiB0aGUgcHJlZGljYXRlcyBpbiB0dXJuIHVudGlsIG9uZSByZXR1cm5zIGFcbiAqIFwidHJ1dGh5XCIgdmFsdWUsIGF0IHdoaWNoIHBvaW50IGBmbmAgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGl0c1xuICogYXJndW1lbnRzIHRvIHRoZSBjb3JyZXNwb25kaW5nIHRyYW5zZm9ybWVyLiBJZiBub25lIG9mIHRoZSBwcmVkaWNhdGVzXG4gKiBtYXRjaGVzLCBgZm5gIHJldHVybnMgdW5kZWZpbmVkLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjYuMFxuICogQGNhdGVnb3J5IExvZ2ljXG4gKiBAc2lnIFtbKCouLi4gLT4gQm9vbGVhbiksKCouLi4gLT4gKildXSAtPiAoKi4uLiAtPiAqKVxuICogQHBhcmFtIHtBcnJheX0gcGFpcnMgQSBsaXN0IG9mIFtwcmVkaWNhdGUsIHRyYW5zZm9ybWVyXVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIGZuID0gUi5jb25kKFtcbiAqICAgICAgICBbUi5lcXVhbHMoMCksICAgUi5hbHdheXMoJ3dhdGVyIGZyZWV6ZXMgYXQgMMKwQycpXSxcbiAqICAgICAgICBbUi5lcXVhbHMoMTAwKSwgUi5hbHdheXMoJ3dhdGVyIGJvaWxzIGF0IDEwMMKwQycpXSxcbiAqICAgICAgICBbUi5ULCAgICAgICAgICAgdGVtcCA9PiAnbm90aGluZyBzcGVjaWFsIGhhcHBlbnMgYXQgJyArIHRlbXAgKyAnwrBDJ11cbiAqICAgICAgXSk7XG4gKiAgICAgIGZuKDApOyAvLz0+ICd3YXRlciBmcmVlemVzIGF0IDDCsEMnXG4gKiAgICAgIGZuKDUwKTsgLy89PiAnbm90aGluZyBzcGVjaWFsIGhhcHBlbnMgYXQgNTDCsEMnXG4gKiAgICAgIGZuKDEwMCk7IC8vPT4gJ3dhdGVyIGJvaWxzIGF0IDEwMMKwQydcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKGZ1bmN0aW9uIGNvbmQocGFpcnMpIHtcbiAgdmFyIGFyaXR5ID0gcmVkdWNlKG1heCxcbiAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICBtYXAoZnVuY3Rpb24ocGFpcikgeyByZXR1cm4gcGFpclswXS5sZW5ndGg7IH0sIHBhaXJzKSk7XG4gIHJldHVybiBfYXJpdHkoYXJpdHksIGZ1bmN0aW9uKCkge1xuICAgIHZhciBpZHggPSAwO1xuICAgIHdoaWxlIChpZHggPCBwYWlycy5sZW5ndGgpIHtcbiAgICAgIGlmIChwYWlyc1tpZHhdWzBdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHtcbiAgICAgICAgcmV0dXJuIHBhaXJzW2lkeF1bMV0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICAgIGlkeCArPSAxO1xuICAgIH1cbiAgfSk7XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvYXhpb3MnKTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBBeGlvcyA9IHJlcXVpcmUoJy4vY29yZS9BeGlvcycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICB2YXIgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgdmFyIGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQpO1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG52YXIgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuYXhpb3MuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gIHJldHVybiBjcmVhdGVJbnN0YW5jZSh1dGlscy5tZXJnZShkZWZhdWx0cywgaW5zdGFuY2VDb25maWcpKTtcbn07XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsJyk7XG5heGlvcy5DYW5jZWxUb2tlbiA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbFRva2VuJyk7XG5heGlvcy5pc0NhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL2lzQ2FuY2VsJyk7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5heGlvcy5zcHJlYWQgPSByZXF1aXJlKCcuL2hlbHBlcnMvc3ByZWFkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYXhpb3M7XG5cbi8vIEFsbG93IHVzZSBvZiBkZWZhdWx0IGltcG9ydCBzeW50YXggaW4gVHlwZVNjcmlwdFxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGF4aW9zO1xuIiwiLyohXG4gKiBEZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIGEgQnVmZmVyXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuXG4vLyBUaGUgX2lzQnVmZmVyIGNoZWNrIGlzIGZvciBTYWZhcmkgNS03IHN1cHBvcnQsIGJlY2F1c2UgaXQncyBtaXNzaW5nXG4vLyBPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yLiBSZW1vdmUgdGhpcyBldmVudHVhbGx5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIChpc0J1ZmZlcihvYmopIHx8IGlzU2xvd0J1ZmZlcihvYmopIHx8ICEhb2JqLl9pc0J1ZmZlcilcbn1cblxuZnVuY3Rpb24gaXNCdWZmZXIgKG9iaikge1xuICByZXR1cm4gISFvYmouY29uc3RydWN0b3IgJiYgdHlwZW9mIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIob2JqKVxufVxuXG4vLyBGb3IgTm9kZSB2MC4xMCBzdXBwb3J0LiBSZW1vdmUgdGhpcyBldmVudHVhbGx5LlxuZnVuY3Rpb24gaXNTbG93QnVmZmVyIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmoucmVhZEZsb2F0TEUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5zbGljZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0J1ZmZlcihvYmouc2xpY2UoMCwgMCkpXG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vLi4vZGVmYXVsdHMnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBJbnRlcmNlcHRvck1hbmFnZXIgPSByZXF1aXJlKCcuL0ludGVyY2VwdG9yTWFuYWdlcicpO1xudmFyIGRpc3BhdGNoUmVxdWVzdCA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hSZXF1ZXN0Jyk7XG52YXIgaXNBYnNvbHV0ZVVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc0Fic29sdXRlVVJMJyk7XG52YXIgY29tYmluZVVSTHMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvY29tYmluZVVSTHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gQXhpb3MoaW5zdGFuY2VDb25maWcpIHtcbiAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICB9O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICovXG5BeGlvcy5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uIHJlcXVlc3QoY29uZmlnKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZyA9IHV0aWxzLm1lcmdlKHtcbiAgICAgIHVybDogYXJndW1lbnRzWzBdXG4gICAgfSwgYXJndW1lbnRzWzFdKTtcbiAgfVxuXG4gIGNvbmZpZyA9IHV0aWxzLm1lcmdlKGRlZmF1bHRzLCB0aGlzLmRlZmF1bHRzLCB7IG1ldGhvZDogJ2dldCcgfSwgY29uZmlnKTtcbiAgY29uZmlnLm1ldGhvZCA9IGNvbmZpZy5tZXRob2QudG9Mb3dlckNhc2UoKTtcblxuICAvLyBTdXBwb3J0IGJhc2VVUkwgY29uZmlnXG4gIGlmIChjb25maWcuYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChjb25maWcudXJsKSkge1xuICAgIGNvbmZpZy51cmwgPSBjb21iaW5lVVJMcyhjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gIH1cblxuICAvLyBIb29rIHVwIGludGVyY2VwdG9ycyBtaWRkbGV3YXJlXG4gIHZhciBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QsIHVuZGVmaW5lZF07XG4gIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgY2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICBjaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XG4gICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbi5zaGlmdCgpLCBjaGFpbi5zaGlmdCgpKTtcbiAgfVxuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QodXRpbHMubWVyZ2UoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHVybDogdXJsXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHV0aWxzLm1lcmdlKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsIG5vcm1hbGl6ZWROYW1lKSB7XG4gIHV0aWxzLmZvckVhY2goaGVhZGVycywgZnVuY3Rpb24gcHJvY2Vzc0hlYWRlcih2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChuYW1lICE9PSBub3JtYWxpemVkTmFtZSAmJiBuYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWROYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZE5hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaGVhZGVyc1tuYW1lXTtcbiAgICB9XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNyZWF0ZUVycm9yID0gcmVxdWlyZSgnLi9jcmVhdGVFcnJvcicpO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIHZhciB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgLy8gTm90ZTogc3RhdHVzIGlzIG5vdCBleHBvc2VkIGJ5IFhEb21haW5SZXF1ZXN0XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIG51bGwsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBVcGRhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIGNvbmZpZywgZXJyb3IgY29kZSwgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIFRoZSBlcnJvciB0byB1cGRhdGUuXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGVycm9yLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVuaGFuY2VFcnJvcihlcnJvciwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBlcnJvci5jb25maWcgPSBjb25maWc7XG4gIGlmIChjb2RlKSB7XG4gICAgZXJyb3IuY29kZSA9IGNvZGU7XG4gIH1cbiAgZXJyb3IucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIGVycm9yLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIHJldHVybiBlcnJvcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTQwL2dpLCAnQCcpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBwYXJhbXNTZXJpYWxpemVyKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZFBhcmFtcztcbiAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zU2VyaWFsaXplcihwYXJhbXMpO1xuICB9IGVsc2UgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHBhcnRzID0gW107XG5cbiAgICB1dGlscy5mb3JFYWNoKHBhcmFtcywgZnVuY3Rpb24gc2VyaWFsaXplKHZhbCwga2V5KSB7XG4gICAgICBpZiAodmFsID09PSBudWxsIHx8IHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHV0aWxzLmlzQXJyYXkodmFsKSkge1xuICAgICAgICBrZXkgPSBrZXkgKyAnW10nO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXV0aWxzLmlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YWwgPSBbdmFsXTtcbiAgICAgIH1cblxuICAgICAgdXRpbHMuZm9yRWFjaCh2YWwsIGZ1bmN0aW9uIHBhcnNlVmFsdWUodikge1xuICAgICAgICBpZiAodXRpbHMuaXNEYXRlKHYpKSB7XG4gICAgICAgICAgdiA9IHYudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIGlmICh1dGlscy5pc09iamVjdCh2KSkge1xuICAgICAgICAgIHYgPSBKU09OLnN0cmluZ2lmeSh2KTtcbiAgICAgICAgfVxuICAgICAgICBwYXJ0cy5wdXNoKGVuY29kZShrZXkpICsgJz0nICsgZW5jb2RlKHYpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcnRzLmpvaW4oJyYnKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGhlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZUhlYWRlcnMoaGVhZGVycykge1xuICB2YXIgcGFyc2VkID0ge307XG4gIHZhciBrZXk7XG4gIHZhciB2YWw7XG4gIHZhciBpO1xuXG4gIGlmICghaGVhZGVycykgeyByZXR1cm4gcGFyc2VkOyB9XG5cbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLnNwbGl0KCdcXG4nKSwgZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cigwLCBpKSkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKGkgKyAxKSk7XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICB2YXIgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgdmFyIHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0J3MgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgfVxuXG4gICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyBidG9hIHBvbHlmaWxsIGZvciBJRTwxMCBjb3VydGVzeSBodHRwczovL2dpdGh1Yi5jb20vZGF2aWRjaGFtYmVycy9CYXNlNjQuanNcblxudmFyIGNoYXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89JztcblxuZnVuY3Rpb24gRSgpIHtcbiAgdGhpcy5tZXNzYWdlID0gJ1N0cmluZyBjb250YWlucyBhbiBpbnZhbGlkIGNoYXJhY3Rlcic7XG59XG5FLnByb3RvdHlwZSA9IG5ldyBFcnJvcjtcbkUucHJvdG90eXBlLmNvZGUgPSA1O1xuRS5wcm90b3R5cGUubmFtZSA9ICdJbnZhbGlkQ2hhcmFjdGVyRXJyb3InO1xuXG5mdW5jdGlvbiBidG9hKGlucHV0KSB7XG4gIHZhciBzdHIgPSBTdHJpbmcoaW5wdXQpO1xuICB2YXIgb3V0cHV0ID0gJyc7XG4gIGZvciAoXG4gICAgLy8gaW5pdGlhbGl6ZSByZXN1bHQgYW5kIGNvdW50ZXJcbiAgICB2YXIgYmxvY2ssIGNoYXJDb2RlLCBpZHggPSAwLCBtYXAgPSBjaGFycztcbiAgICAvLyBpZiB0aGUgbmV4dCBzdHIgaW5kZXggZG9lcyBub3QgZXhpc3Q6XG4gICAgLy8gICBjaGFuZ2UgdGhlIG1hcHBpbmcgdGFibGUgdG8gXCI9XCJcbiAgICAvLyAgIGNoZWNrIGlmIGQgaGFzIG5vIGZyYWN0aW9uYWwgZGlnaXRzXG4gICAgc3RyLmNoYXJBdChpZHggfCAwKSB8fCAobWFwID0gJz0nLCBpZHggJSAxKTtcbiAgICAvLyBcIjggLSBpZHggJSAxICogOFwiIGdlbmVyYXRlcyB0aGUgc2VxdWVuY2UgMiwgNCwgNiwgOFxuICAgIG91dHB1dCArPSBtYXAuY2hhckF0KDYzICYgYmxvY2sgPj4gOCAtIGlkeCAlIDEgKiA4KVxuICApIHtcbiAgICBjaGFyQ29kZSA9IHN0ci5jaGFyQ29kZUF0KGlkeCArPSAzIC8gNCk7XG4gICAgaWYgKGNoYXJDb2RlID4gMHhGRikge1xuICAgICAgdGhyb3cgbmV3IEUoKTtcbiAgICB9XG4gICAgYmxvY2sgPSBibG9jayA8PCA4IHwgY2hhckNvZGU7XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBidG9hO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgICB2YXIgY29va2llID0gW107XG4gICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcocGF0aCkpIHtcbiAgICAgICAgICBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICAgIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgICB9LFxuXG4gICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICAgIH0sXG5cbiAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKG5hbWUpIHtcbiAgICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICAgIH1cbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZSgpIHt9LFxuICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgfTtcbiAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBJbnRlcmNlcHRvck1hbmFnZXIoKSB7XG4gIHRoaXMuaGFuZGxlcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpIHtcbiAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICBmdWxmaWxsZWQ6IGZ1bGZpbGxlZCxcbiAgICByZWplY3RlZDogcmVqZWN0ZWRcbiAgfSk7XG4gIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5lamVjdCA9IGZ1bmN0aW9uIGVqZWN0KGlkKSB7XG4gIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICBmbihoKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciB0cmFuc2Zvcm1EYXRhID0gcmVxdWlyZSgnLi90cmFuc2Zvcm1EYXRhJyk7XG52YXIgaXNDYW5jZWwgPSByZXF1aXJlKCcuLi9jYW5jZWwvaXNDYW5jZWwnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgLy8gRW5zdXJlIGhlYWRlcnMgZXhpc3RcbiAgY29uZmlnLmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICBjb25maWcuZGF0YSxcbiAgICBjb25maWcuaGVhZGVycyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICBjb25maWcuaGVhZGVycyA9IHV0aWxzLm1lcmdlKFxuICAgIGNvbmZpZy5oZWFkZXJzLmNvbW1vbiB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1tjb25maWcubWV0aG9kXSB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVycyB8fCB7fVxuICApO1xuXG4gIHV0aWxzLmZvckVhY2goXG4gICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgZnVuY3Rpb24gY2xlYW5IZWFkZXJDb25maWcobWV0aG9kKSB7XG4gICAgICBkZWxldGUgY29uZmlnLmhlYWRlcnNbbWV0aG9kXTtcbiAgICB9XG4gICk7XG5cbiAgdmFyIGFkYXB0ZXIgPSBjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhKFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBkYXRhIFRoZSBkYXRhIHRvIGJlIHRyYW5zZm9ybWVkXG4gKiBAcGFyYW0ge0FycmF5fSBoZWFkZXJzIFRoZSBoZWFkZXJzIGZvciB0aGUgcmVxdWVzdCBvciByZXNwb25zZVxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZGF0YSwgaGVhZGVycywgZm5zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuKGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZFxcK1xcLVxcLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4vQ2FuY2VsJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsVG9rZW4oZXhlY3V0b3IpIHtcbiAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHZhciByZXNvbHZlUHJvbWlzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbChtZXNzYWdlKTtcbiAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gKi9cbkNhbmNlbFRva2VuLnNvdXJjZSA9IGZ1bmN0aW9uIHNvdXJjZSgpIHtcbiAgdmFyIGNhbmNlbDtcbiAgdmFyIHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICBjYW5jZWwgPSBjO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbjogdG9rZW4sXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsVG9rZW47XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn07XG4iLCIvKiBnbG9iYWxzIF9fd2VicGFja19hbWRfb3B0aW9uc19fICovXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19hbWRfb3B0aW9uc19fO1xuIiwidmFyIGJhc2VFYWNoID0gcmVxdWlyZSgnLi9fYmFzZUVhY2gnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maWx0ZXJgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZUZpbHRlcihjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGaWx0ZXI7XG4iLCJ2YXIgYmFzZUZvck93biA9IHJlcXVpcmUoJy4vX2Jhc2VGb3JPd24nKSxcbiAgICBjcmVhdGVCYXNlRWFjaCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUJhc2VFYWNoJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yRWFjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyBgY29sbGVjdGlvbmAuXG4gKi9cbnZhciBiYXNlRWFjaCA9IGNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd24pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VFYWNoO1xuIiwidmFyIGJhc2VGb3IgPSByZXF1aXJlKCcuL19iYXNlRm9yJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvck93bmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3Iob2JqZWN0LCBpdGVyYXRlZSwga2V5cyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvck93bjtcbiIsInZhciBjcmVhdGVCYXNlRm9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQmFzZUZvcicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBiYXNlRm9yT3duYCB3aGljaCBpdGVyYXRlcyBvdmVyIGBvYmplY3RgXG4gKiBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGBrZXlzRnVuY2AgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xudmFyIGJhc2VGb3IgPSBjcmVhdGVCYXNlRm9yKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvcjtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIGtleXNGdW5jKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXG4gICAgICAgIHByb3BzID0ga2V5c0Z1bmMob2JqZWN0KSxcbiAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF07XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJhc2VGb3I7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1R5cGVkQXJyYXk7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuYXJ5O1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbm9kZVV0aWw7XG4iLCJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXM7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgYmFzZUVhY2hgIG9yIGBiYXNlRWFjaFJpZ2h0YCBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFYWNoKGVhY2hGdW5jLCBmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgfVxuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgIHJldHVybiBlYWNoRnVuYyhjb2xsZWN0aW9uLCBpdGVyYXRlZSk7XG4gICAgfVxuICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3QoY29sbGVjdGlvbik7XG5cbiAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2luZGV4XSwgaW5kZXgsIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJhc2VFYWNoO1xuIiwidmFyIGJhc2VNYXRjaGVzID0gcmVxdWlyZSgnLi9fYmFzZU1hdGNoZXMnKSxcbiAgICBiYXNlTWF0Y2hlc1Byb3BlcnR5ID0gcmVxdWlyZSgnLi9fYmFzZU1hdGNoZXNQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBwcm9wZXJ0eSA9IHJlcXVpcmUoJy4vcHJvcGVydHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pdGVyYXRlZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gW3ZhbHVlPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGFuIGl0ZXJhdGVlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBpdGVyYXRlZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUl0ZXJhdGVlKHZhbHVlKSB7XG4gIC8vIERvbid0IHN0b3JlIHRoZSBgdHlwZW9mYCByZXN1bHQgaW4gYSB2YXJpYWJsZSB0byBhdm9pZCBhIEpJVCBidWcgaW4gU2FmYXJpIDkuXG4gIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBpZGVudGl0eTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpXG4gICAgICA/IGJhc2VNYXRjaGVzUHJvcGVydHkodmFsdWVbMF0sIHZhbHVlWzFdKVxuICAgICAgOiBiYXNlTWF0Y2hlcyh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXRlcmF0ZWU7XG4iLCJ2YXIgYmFzZUlzTWF0Y2ggPSByZXF1aXJlKCcuL19iYXNlSXNNYXRjaCcpLFxuICAgIGdldE1hdGNoRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hdGNoRGF0YScpLFxuICAgIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzYCB3aGljaCBkb2Vzbid0IGNsb25lIGBzb3VyY2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXMoc291cmNlKSB7XG4gIHZhciBtYXRjaERhdGEgPSBnZXRNYXRjaERhdGEoc291cmNlKTtcbiAgaWYgKG1hdGNoRGF0YS5sZW5ndGggPT0gMSAmJiBtYXRjaERhdGFbMF1bMl0pIHtcbiAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUobWF0Y2hEYXRhWzBdWzBdLCBtYXRjaERhdGFbMF1bMV0pO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09PSBzb3VyY2UgfHwgYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZU1hdGNoZXM7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGJhc2VJc0VxdWFsID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWwnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtBcnJheX0gbWF0Y2hEYXRhIFRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSwgY3VzdG9taXplcikge1xuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxuICAgICAgbGVuZ3RoID0gaW5kZXgsXG4gICAgICBub0N1c3RvbWl6ZXIgPSAhY3VzdG9taXplcjtcblxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gIWxlbmd0aDtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgaWYgKChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSlcbiAgICAgICAgICA/IGRhdGFbMV0gIT09IG9iamVjdFtkYXRhWzBdXVxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcbiAgICAgICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgdmFyIGtleSA9IGRhdGFbMF0sXG4gICAgICAgIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcblxuICAgIGlmIChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSkge1xuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFjayA9IG5ldyBTdGFjaztcbiAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spO1xuICAgICAgfVxuICAgICAgaWYgKCEocmVzdWx0ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgOiByZXN1bHRcbiAgICAgICAgICApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTWF0Y2g7XG4iLCIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVEZWxldGU7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVTZXQ7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0RlbGV0ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0dldDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tIYXM7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja1NldDtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNNYXNrZWQgPSByZXF1aXJlKCcuL19pc01hc2tlZCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYXRpdmU7XG4iLCJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRWYWx1ZTtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hEZWxldGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoR2V0O1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEhhcztcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaFNldDtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlR2V0O1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVIYXM7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlU2V0O1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgZXF1YWxCeVRhZyA9IHJlcXVpcmUoJy4vX2VxdWFsQnlUYWcnKSxcbiAgICBlcXVhbE9iamVjdHMgPSByZXF1aXJlKCcuL19lcXVhbE9iamVjdHMnKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIGNvbXBhcmlzb25zIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgb2JqSXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICBvdGhJc0FyciA9IGlzQXJyYXkob3RoZXIpLFxuICAgICAgb2JqVGFnID0gb2JqSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvYmplY3QpLFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvdGhlcik7XG5cbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XG4gIG90aFRhZyA9IG90aFRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb3RoVGFnO1xuXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBvdGhJc09iaiA9IG90aFRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBpc1NhbWVUYWcgPSBvYmpUYWcgPT0gb3RoVGFnO1xuXG4gIGlmIChpc1NhbWVUYWcgJiYgaXNCdWZmZXIob2JqZWN0KSkge1xuICAgIGlmICghaXNCdWZmZXIob3RoZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG9iaklzQXJyID0gdHJ1ZTtcbiAgICBvYmpJc09iaiA9IGZhbHNlO1xuICB9XG4gIGlmIChpc1NhbWVUYWcgJiYgIW9iaklzT2JqKSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICByZXR1cm4gKG9iaklzQXJyIHx8IGlzVHlwZWRBcnJheShvYmplY3QpKVxuICAgICAgPyBlcXVhbEFycmF5cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxuICAgICAgOiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIG9ialRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gIH1cbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xuICAgIHZhciBvYmpJc1dyYXBwZWQgPSBvYmpJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fd3JhcHBlZF9fJyksXG4gICAgICAgIG90aElzV3JhcHBlZCA9IG90aElzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsICdfX3dyYXBwZWRfXycpO1xuXG4gICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XG5cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICByZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCwgb3RoVW53cmFwcGVkLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTYW1lVGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHJldHVybiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWxEZWVwO1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKSxcbiAgICBzZXRDYWNoZUFkZCA9IHJlcXVpcmUoJy4vX3NldENhY2hlQWRkJyksXG4gICAgc2V0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19zZXRDYWNoZUhhcycpO1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gc2V0Q2FjaGVBZGQ7XG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0Q2FjaGU7XG4iLCIvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgYWRkXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBhbGlhcyBwdXNoXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUFkZDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUhhcztcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlTb21lO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FjaGVIYXM7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgbWFwVG9BcnJheSA9IHJlcXVpcmUoJy4vX21hcFRvQXJyYXknKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAob2JqZWN0LmJ5dGVPZmZzZXQgIT0gb3RoZXIuYnl0ZU9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgIC8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJjZWQgdG8gYE5hTmAuXG4gICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzLCBwcmltaXRpdmVzIGFuZCBvYmplY3RzLFxuICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QgPT0gKG90aGVyICsgJycpO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICAgICAgfVxuICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQnlUYWc7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBUb0FycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb0FycmF5O1xuIiwidmFyIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIG9iamVjdHMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIG9ialByb3BzID0gZ2V0QWxsS2V5cyhvYmplY3QpLFxuICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLFxuICAgICAgb3RoUHJvcHMgPSBnZXRBbGxLZXlzKG90aGVyKSxcbiAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICBpZiAob2JqTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBpbmRleCA9IG9iakxlbmd0aDtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIGlmICghKGlzUGFydGlhbCA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBvYmpTdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKG9ialN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBvYmpTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gb2JqZWN0O1xuICB9XG4gIHZhciByZXN1bHQgPSB0cnVlO1xuICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcblxuICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XG4gICAga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgb2JqVmFsdWUsIGtleSwgb3RoZXIsIG9iamVjdCwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoIShjb21wYXJlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcbiAgICAgICAgICA6IGNvbXBhcmVkXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcbiAgfVxuICBpZiAocmVzdWx0ICYmICFza2lwQ3Rvcikge1xuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgICBvdGhDdG9yID0gb3RoZXIuY29uc3RydWN0b3I7XG5cbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cbiAgICBpZiAob2JqQ3RvciAhPSBvdGhDdG9yICYmXG4gICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcbiAgICAgICAgICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsT2JqZWN0cztcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5cztcbiIsInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXG4gKiBga2V5c0Z1bmNgIGFuZCBgc3ltYm9sc0Z1bmNgIHRvIGdldCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzeW1ib2xzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7XG4gIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0QWxsS2V5cztcbiIsIi8qKlxuICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVB1c2g7XG4iLCJ2YXIgYXJyYXlGaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheUZpbHRlcicpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGFWaWV3O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iLCJ2YXIgaXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9faXNTdHJpY3RDb21wYXJhYmxlJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIEdldHMgdGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGdldE1hdGNoRGF0YShvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXMob2JqZWN0KSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgdmFyIGtleSA9IHJlc3VsdFtsZW5ndGhdLFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgcmVzdWx0W2xlbmd0aF0gPSBba2V5LCB2YWx1ZSwgaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXRjaERhdGE7XG4iLCJ2YXIgYmFzZUlzRXF1YWwgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbCcpLFxuICAgIGdldCA9IHJlcXVpcmUoJy4vZ2V0JyksXG4gICAgaGFzSW4gPSByZXF1aXJlKCcuL2hhc0luJyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIGlzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX2lzU3RyaWN0Q29tcGFyYWJsZScpLFxuICAgIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBzcmNWYWx1ZSkge1xuICBpZiAoaXNLZXkocGF0aCkgJiYgaXNTdHJpY3RDb21wYXJhYmxlKHNyY1ZhbHVlKSkge1xuICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSh0b0tleShwYXRoKSwgc3JjVmFsdWUpO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIgb2JqVmFsdWUgPSBnZXQob2JqZWN0LCBwYXRoKTtcbiAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxuICAgICAgPyBoYXNJbihvYmplY3QsIHBhdGgpXG4gICAgICA6IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWF0Y2hlc1Byb3BlcnR5O1xuIiwidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0Jyk7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKi9cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXQ7XG4iLCJ2YXIgbWVtb2l6ZUNhcHBlZCA9IHJlcXVpcmUoJy4vX21lbW9pemVDYXBwZWQnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1RvUGF0aDtcbiIsInZhciBtZW1vaXplID0gcmVxdWlyZSgnLi9tZW1vaXplJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBtYXhpbXVtIG1lbW9pemUgY2FjaGUgc2l6ZS4gKi9cbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcbiAqIGNhY2hlIHdoZW4gaXQgZXhjZWVkcyBgTUFYX01FTU9JWkVfU0laRWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtZW1vaXplQ2FwcGVkKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IG1lbW9pemUoZnVuYywgZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKGNhY2hlLnNpemUgPT09IE1BWF9NRU1PSVpFX1NJWkUpIHtcbiAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH0pO1xuXG4gIHZhciBjYWNoZSA9IHJlc3VsdC5jYWNoZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplQ2FwcGVkO1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICE9IG51bGwgJiYgdHlwZW9mIHJlc29sdmVyICE9ICdmdW5jdGlvbicpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBtZW1vaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgY2FjaGUgPSBtZW1vaXplZC5jYWNoZTtcblxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCkgfHwgY2FjaGU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgTWFwQ2FjaGUpO1xuICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbi8vIEV4cG9zZSBgTWFwQ2FjaGVgLlxubWVtb2l6ZS5DYWNoZSA9IE1hcENhY2hlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemU7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVG9TdHJpbmc7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TWFwO1xuIiwidmFyIGJhc2VIYXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VIYXNJbicpLFxuICAgIGhhc1BhdGggPSByZXF1aXJlKCcuL19oYXNQYXRoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0gXy5jcmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pO1xuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYS5iJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsIFsnYScsICdiJ10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYicpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaGFzSW4ob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgYmFzZUhhc0luKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNJbjtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYga2V5IGluIE9iamVjdChvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VIYXNJbjtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcGF0aGAgZXhpc3RzIG9uIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrIHByb3BlcnRpZXMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgaGFzRnVuYykge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gdG9LZXkocGF0aFtpbmRleF0pO1xuICAgIGlmICghKHJlc3VsdCA9IG9iamVjdCAhPSBudWxsICYmIGhhc0Z1bmMob2JqZWN0LCBrZXkpKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIG9iamVjdCA9IG9iamVjdFtrZXldO1xuICB9XG4gIGlmIChyZXN1bHQgfHwgKytpbmRleCAhPSBsZW5ndGgpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGxlbmd0aCA9IG9iamVjdCA9PSBudWxsID8gMCA6IG9iamVjdC5sZW5ndGg7XG4gIHJldHVybiAhIWxlbmd0aCAmJiBpc0xlbmd0aChsZW5ndGgpICYmIGlzSW5kZXgoa2V5LCBsZW5ndGgpICYmXG4gICAgKGlzQXJyYXkob2JqZWN0KSB8fCBpc0FyZ3VtZW50cyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNQYXRoO1xuIiwidmFyIGJhc2VQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2Jhc2VQcm9wZXJ0eScpLFxuICAgIGJhc2VQcm9wZXJ0eURlZXAgPSByZXF1aXJlKCcuL19iYXNlUHJvcGVydHlEZWVwJyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbXG4gKiAgIHsgJ2EnOiB7ICdiJzogMiB9IH0sXG4gKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cbiAqIF07XG4gKlxuICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xuICogLy8gPT4gWzIsIDFdXG4gKlxuICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcbiAqIC8vID0+IFsxLCAyXVxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XG4gIHJldHVybiBpc0tleShwYXRoKSA/IGJhc2VQcm9wZXJ0eSh0b0tleShwYXRoKSkgOiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHByb3BlcnR5O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eWAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHkoa2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUHJvcGVydHk7XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VQcm9wZXJ0eWAgd2hpY2ggc3VwcG9ydHMgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVByb3BlcnR5RGVlcDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmluZEluZGV4YCBhbmQgYF8uZmluZExhc3RJbmRleGAgd2l0aG91dFxuICogc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlRmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCwgZnJvbVJpZ2h0KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBpbmRleCA9IGZyb21JbmRleCArIChmcm9tUmlnaHQgPyAxIDogLTEpO1xuXG4gIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGaW5kSW5kZXg7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmFOYCB3aXRob3V0IHN1cHBvcnQgZm9yIG51bWJlciBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hTjtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluZGV4T2ZgIHdoaWNoIHBlcmZvcm1zIHN0cmljdCBlcXVhbGl0eVxuICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4IC0gMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChhcnJheVtpbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpY3RJbmRleE9mO1xuIiwidmFyIGJhc2VUcmltID0gcmVxdWlyZSgnLi9fYmFzZVRyaW0nKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTkFOID0gMCAvIDA7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiYWQgc2lnbmVkIGhleGFkZWNpbWFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JhZEhleCA9IC9eWy0rXTB4WzAtOWEtZl0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmluYXJ5IHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JpbmFyeSA9IC9eMGJbMDFdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG9jdGFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc09jdGFsID0gL14wb1swLTddKyQvaTtcblxuLyoqIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHdpdGhvdXQgYSBkZXBlbmRlbmN5IG9uIGByb290YC4gKi9cbnZhciBmcmVlUGFyc2VJbnQgPSBwYXJzZUludDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgbnVtYmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvTnVtYmVyKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b051bWJlcihJbmZpbml0eSk7XG4gKiAvLyA9PiBJbmZpbml0eVxuICpcbiAqIF8udG9OdW1iZXIoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBOQU47XG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IGlzT2JqZWN0KG90aGVyKSA/IChvdGhlciArICcnKSA6IG90aGVyO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTtcbiAgfVxuICB2YWx1ZSA9IGJhc2VUcmltKHZhbHVlKTtcbiAgdmFyIGlzQmluYXJ5ID0gcmVJc0JpbmFyeS50ZXN0KHZhbHVlKTtcbiAgcmV0dXJuIChpc0JpbmFyeSB8fCByZUlzT2N0YWwudGVzdCh2YWx1ZSkpXG4gICAgPyBmcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIGlzQmluYXJ5ID8gMiA6IDgpXG4gICAgOiAocmVJc0JhZEhleC50ZXN0KHZhbHVlKSA/IE5BTiA6ICt2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9OdW1iZXI7XG4iLCJ2YXIgdHJpbW1lZEVuZEluZGV4ID0gcmVxdWlyZSgnLi9fdHJpbW1lZEVuZEluZGV4Jyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgd2hpdGVzcGFjZS4gKi9cbnZhciByZVRyaW1TdGFydCA9IC9eXFxzKy87XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udHJpbWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byB0cmltLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUcmltKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nXG4gICAgPyBzdHJpbmcuc2xpY2UoMCwgdHJpbW1lZEVuZEluZGV4KHN0cmluZykgKyAxKS5yZXBsYWNlKHJlVHJpbVN0YXJ0LCAnJylcbiAgICA6IHN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVHJpbTtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIGEgc2luZ2xlIHdoaXRlc3BhY2UgY2hhcmFjdGVyLiAqL1xudmFyIHJlV2hpdGVzcGFjZSA9IC9cXHMvO1xuXG4vKipcbiAqIFVzZWQgYnkgYF8udHJpbWAgYW5kIGBfLnRyaW1FbmRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2VcbiAqIGNoYXJhY3RlciBvZiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuXG4gKi9cbmZ1bmN0aW9uIHRyaW1tZWRFbmRJbmRleChzdHJpbmcpIHtcbiAgdmFyIGluZGV4ID0gc3RyaW5nLmxlbmd0aDtcblxuICB3aGlsZSAoaW5kZXgtLSAmJiByZVdoaXRlc3BhY2UudGVzdChzdHJpbmcuY2hhckF0KGluZGV4KSkpIHt9XG4gIHJldHVybiBpbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0cmltbWVkRW5kSW5kZXg7XG4iLCJ2YXIgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGludm9rZSBpdCB3aXRoIHRoZSBvcHRpb25hbCBgdGhpc2BcbiAqIGJpbmRpbmcgb2YgYHRoaXNBcmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpIHtcbiAgdmFyIGlzQmluZCA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyxcbiAgICAgIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICByZXR1cm4gZm4uYXBwbHkoaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmluZDtcbiIsInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5JyksXG4gICAgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICBjcmVhdGVIeWJyaWQgPSByZXF1aXJlKCcuL19jcmVhdGVIeWJyaWQnKSxcbiAgICBjcmVhdGVSZWN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlUmVjdXJyeScpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBlbmFibGUgY3VycnlpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtudW1iZXJ9IGFyaXR5IFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDdXJyeShmdW5jLCBiaXRtYXNrLCBhcml0eSkge1xuICB2YXIgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgIGluZGV4ID0gbGVuZ3RoLFxuICAgICAgICBwbGFjZWhvbGRlciA9IGdldEhvbGRlcih3cmFwcGVyKTtcblxuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgfVxuICAgIHZhciBob2xkZXJzID0gKGxlbmd0aCA8IDMgJiYgYXJnc1swXSAhPT0gcGxhY2Vob2xkZXIgJiYgYXJnc1tsZW5ndGggLSAxXSAhPT0gcGxhY2Vob2xkZXIpXG4gICAgICA/IFtdXG4gICAgICA6IHJlcGxhY2VIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcblxuICAgIGxlbmd0aCAtPSBob2xkZXJzLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVSZWN1cnJ5KFxuICAgICAgICBmdW5jLCBiaXRtYXNrLCBjcmVhdGVIeWJyaWQsIHdyYXBwZXIucGxhY2Vob2xkZXIsIHVuZGVmaW5lZCxcbiAgICAgICAgYXJncywgaG9sZGVycywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5IC0gbGVuZ3RoKTtcbiAgICB9XG4gICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICByZXR1cm4gYXBwbHkoZm4sIHRoaXMsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUN1cnJ5O1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBudW1iZXIgb2YgYHBsYWNlaG9sZGVyYCBvY2N1cnJlbmNlcyBpbiBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciBjb3VudC5cbiAqL1xuZnVuY3Rpb24gY291bnRIb2xkZXJzKGFycmF5LCBwbGFjZWhvbGRlcikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gMDtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoYXJyYXlbbGVuZ3RoXSA9PT0gcGxhY2Vob2xkZXIpIHtcbiAgICAgICsrcmVzdWx0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvdW50SG9sZGVycztcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgZ2V0RGF0YSA9IHJlcXVpcmUoJy4vX2dldERhdGEnKSxcbiAgICBnZXRGdW5jTmFtZSA9IHJlcXVpcmUoJy4vX2dldEZ1bmNOYW1lJyksXG4gICAgbG9kYXNoID0gcmVxdWlyZSgnLi93cmFwcGVyTG9kYXNoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaGFzIGEgbGF6eSBjb3VudGVycGFydCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTGF6aWFibGUoZnVuYykge1xuICB2YXIgZnVuY05hbWUgPSBnZXRGdW5jTmFtZShmdW5jKSxcbiAgICAgIG90aGVyID0gbG9kYXNoW2Z1bmNOYW1lXTtcblxuICBpZiAodHlwZW9mIG90aGVyICE9ICdmdW5jdGlvbicgfHwgIShmdW5jTmFtZSBpbiBMYXp5V3JhcHBlci5wcm90b3R5cGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChmdW5jID09PSBvdGhlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBkYXRhID0gZ2V0RGF0YShvdGhlcik7XG4gIHJldHVybiAhIWRhdGEgJiYgZnVuYyA9PT0gZGF0YVswXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xhemlhYmxlO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4zLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5ub29wKTtcbiAqIC8vID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAqL1xuZnVuY3Rpb24gbm9vcCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBub29wO1xuIiwidmFyIHJlYWxOYW1lcyA9IHJlcXVpcmUoJy4vX3JlYWxOYW1lcycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIG5hbWUgb2YgYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNOYW1lKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IChmdW5jLm5hbWUgKyAnJyksXG4gICAgICBhcnJheSA9IHJlYWxOYW1lc1tyZXN1bHRdLFxuICAgICAgbGVuZ3RoID0gaGFzT3duUHJvcGVydHkuY2FsbChyZWFsTmFtZXMsIHJlc3VsdCkgPyBhcnJheS5sZW5ndGggOiAwO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIHZhciBkYXRhID0gYXJyYXlbbGVuZ3RoXSxcbiAgICAgICAgb3RoZXJGdW5jID0gZGF0YS5mdW5jO1xuICAgIGlmIChvdGhlckZ1bmMgPT0gbnVsbCB8fCBvdGhlckZ1bmMgPT0gZnVuYykge1xuICAgICAgcmV0dXJuIGRhdGEubmFtZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRGdW5jTmFtZTtcbiIsIi8qKiBVc2VkIHRvIGxvb2t1cCB1bm1pbmlmaWVkIGZ1bmN0aW9uIG5hbWVzLiAqL1xudmFyIHJlYWxOYW1lcyA9IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlYWxOYW1lcztcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgTG9kYXNoV3JhcHBlciA9IHJlcXVpcmUoJy4vX0xvZGFzaFdyYXBwZXInKSxcbiAgICBiYXNlTG9kYXNoID0gcmVxdWlyZSgnLi9fYmFzZUxvZGFzaCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpLFxuICAgIHdyYXBwZXJDbG9uZSA9IHJlcXVpcmUoJy4vX3dyYXBwZXJDbG9uZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgbG9kYXNoYCBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgaW1wbGljaXQgbWV0aG9kXG4gKiBjaGFpbiBzZXF1ZW5jZXMuIE1ldGhvZHMgdGhhdCBvcGVyYXRlIG9uIGFuZCByZXR1cm4gYXJyYXlzLCBjb2xsZWN0aW9ucyxcbiAqIGFuZCBmdW5jdGlvbnMgY2FuIGJlIGNoYWluZWQgdG9nZXRoZXIuIE1ldGhvZHMgdGhhdCByZXRyaWV2ZSBhIHNpbmdsZSB2YWx1ZVxuICogb3IgbWF5IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgZW5kIHRoZSBjaGFpbiBzZXF1ZW5jZVxuICogYW5kIHJldHVybiB0aGUgdW53cmFwcGVkIHZhbHVlLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBtdXN0IGJlIHVud3JhcHBlZFxuICogd2l0aCBgXyN2YWx1ZWAuXG4gKlxuICogRXhwbGljaXQgY2hhaW4gc2VxdWVuY2VzLCB3aGljaCBtdXN0IGJlIHVud3JhcHBlZCB3aXRoIGBfI3ZhbHVlYCwgbWF5IGJlXG4gKiBlbmFibGVkIHVzaW5nIGBfLmNoYWluYC5cbiAqXG4gKiBUaGUgZXhlY3V0aW9uIG9mIGNoYWluZWQgbWV0aG9kcyBpcyBsYXp5LCB0aGF0IGlzLCBpdCdzIGRlZmVycmVkIHVudGlsXG4gKiBgXyN2YWx1ZWAgaXMgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGNhbGxlZC5cbiAqXG4gKiBMYXp5IGV2YWx1YXRpb24gYWxsb3dzIHNldmVyYWwgbWV0aG9kcyB0byBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbi5cbiAqIFNob3J0Y3V0IGZ1c2lvbiBpcyBhbiBvcHRpbWl6YXRpb24gdG8gbWVyZ2UgaXRlcmF0ZWUgY2FsbHM7IHRoaXMgYXZvaWRzXG4gKiB0aGUgY3JlYXRpb24gb2YgaW50ZXJtZWRpYXRlIGFycmF5cyBhbmQgY2FuIGdyZWF0bHkgcmVkdWNlIHRoZSBudW1iZXIgb2ZcbiAqIGl0ZXJhdGVlIGV4ZWN1dGlvbnMuIFNlY3Rpb25zIG9mIGEgY2hhaW4gc2VxdWVuY2UgcXVhbGlmeSBmb3Igc2hvcnRjdXRcbiAqIGZ1c2lvbiBpZiB0aGUgc2VjdGlvbiBpcyBhcHBsaWVkIHRvIGFuIGFycmF5IGFuZCBpdGVyYXRlZXMgYWNjZXB0IG9ubHlcbiAqIG9uZSBhcmd1bWVudC4gVGhlIGhldXJpc3RpYyBmb3Igd2hldGhlciBhIHNlY3Rpb24gcXVhbGlmaWVzIGZvciBzaG9ydGN1dFxuICogZnVzaW9uIGlzIHN1YmplY3QgdG8gY2hhbmdlLlxuICpcbiAqIENoYWluaW5nIGlzIHN1cHBvcnRlZCBpbiBjdXN0b20gYnVpbGRzIGFzIGxvbmcgYXMgdGhlIGBfI3ZhbHVlYCBtZXRob2QgaXNcbiAqIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLlxuICpcbiAqIEluIGFkZGl0aW9uIHRvIGxvZGFzaCBtZXRob2RzLCB3cmFwcGVycyBoYXZlIGBBcnJheWAgYW5kIGBTdHJpbmdgIG1ldGhvZHMuXG4gKlxuICogVGhlIHdyYXBwZXIgYEFycmF5YCBtZXRob2RzIGFyZTpcbiAqIGBjb25jYXRgLCBgam9pbmAsIGBwb3BgLCBgcHVzaGAsIGBzaGlmdGAsIGBzb3J0YCwgYHNwbGljZWAsIGFuZCBgdW5zaGlmdGBcbiAqXG4gKiBUaGUgd3JhcHBlciBgU3RyaW5nYCBtZXRob2RzIGFyZTpcbiAqIGByZXBsYWNlYCBhbmQgYHNwbGl0YFxuICpcbiAqIFRoZSB3cmFwcGVyIG1ldGhvZHMgdGhhdCBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbiBhcmU6XG4gKiBgYXRgLCBgY29tcGFjdGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsIGBkcm9wV2hpbGVgLCBgZmlsdGVyYCwgYGZpbmRgLFxuICogYGZpbmRMYXN0YCwgYGhlYWRgLCBgaW5pdGlhbGAsIGBsYXN0YCwgYG1hcGAsIGByZWplY3RgLCBgcmV2ZXJzZWAsIGBzbGljZWAsXG4gKiBgdGFpbGAsIGB0YWtlYCwgYHRha2VSaWdodGAsIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBhbmQgYHRvQXJyYXlgXG4gKlxuICogVGhlIGNoYWluYWJsZSB3cmFwcGVyIG1ldGhvZHMgYXJlOlxuICogYGFmdGVyYCwgYGFyeWAsIGBhc3NpZ25gLCBgYXNzaWduSW5gLCBgYXNzaWduSW5XaXRoYCwgYGFzc2lnbldpdGhgLCBgYXRgLFxuICogYGJlZm9yZWAsIGBiaW5kYCwgYGJpbmRBbGxgLCBgYmluZEtleWAsIGBjYXN0QXJyYXlgLCBgY2hhaW5gLCBgY2h1bmtgLFxuICogYGNvbW1pdGAsIGBjb21wYWN0YCwgYGNvbmNhdGAsIGBjb25mb3Jtc2AsIGBjb25zdGFudGAsIGBjb3VudEJ5YCwgYGNyZWF0ZWAsXG4gKiBgY3VycnlgLCBgZGVib3VuY2VgLCBgZGVmYXVsdHNgLCBgZGVmYXVsdHNEZWVwYCwgYGRlZmVyYCwgYGRlbGF5YCxcbiAqIGBkaWZmZXJlbmNlYCwgYGRpZmZlcmVuY2VCeWAsIGBkaWZmZXJlbmNlV2l0aGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsXG4gKiBgZHJvcFJpZ2h0V2hpbGVgLCBgZHJvcFdoaWxlYCwgYGV4dGVuZGAsIGBleHRlbmRXaXRoYCwgYGZpbGxgLCBgZmlsdGVyYCxcbiAqIGBmbGF0TWFwYCwgYGZsYXRNYXBEZWVwYCwgYGZsYXRNYXBEZXB0aGAsIGBmbGF0dGVuYCwgYGZsYXR0ZW5EZWVwYCxcbiAqIGBmbGF0dGVuRGVwdGhgLCBgZmxpcGAsIGBmbG93YCwgYGZsb3dSaWdodGAsIGBmcm9tUGFpcnNgLCBgZnVuY3Rpb25zYCxcbiAqIGBmdW5jdGlvbnNJbmAsIGBncm91cEJ5YCwgYGluaXRpYWxgLCBgaW50ZXJzZWN0aW9uYCwgYGludGVyc2VjdGlvbkJ5YCxcbiAqIGBpbnRlcnNlY3Rpb25XaXRoYCwgYGludmVydGAsIGBpbnZlcnRCeWAsIGBpbnZva2VNYXBgLCBgaXRlcmF0ZWVgLCBga2V5QnlgLFxuICogYGtleXNgLCBga2V5c0luYCwgYG1hcGAsIGBtYXBLZXlzYCwgYG1hcFZhbHVlc2AsIGBtYXRjaGVzYCwgYG1hdGNoZXNQcm9wZXJ0eWAsXG4gKiBgbWVtb2l6ZWAsIGBtZXJnZWAsIGBtZXJnZVdpdGhgLCBgbWV0aG9kYCwgYG1ldGhvZE9mYCwgYG1peGluYCwgYG5lZ2F0ZWAsXG4gKiBgbnRoQXJnYCwgYG9taXRgLCBgb21pdEJ5YCwgYG9uY2VgLCBgb3JkZXJCeWAsIGBvdmVyYCwgYG92ZXJBcmdzYCxcbiAqIGBvdmVyRXZlcnlgLCBgb3ZlclNvbWVgLCBgcGFydGlhbGAsIGBwYXJ0aWFsUmlnaHRgLCBgcGFydGl0aW9uYCwgYHBpY2tgLFxuICogYHBpY2tCeWAsIGBwbGFudGAsIGBwcm9wZXJ0eWAsIGBwcm9wZXJ0eU9mYCwgYHB1bGxgLCBgcHVsbEFsbGAsIGBwdWxsQWxsQnlgLFxuICogYHB1bGxBbGxXaXRoYCwgYHB1bGxBdGAsIGBwdXNoYCwgYHJhbmdlYCwgYHJhbmdlUmlnaHRgLCBgcmVhcmdgLCBgcmVqZWN0YCxcbiAqIGByZW1vdmVgLCBgcmVzdGAsIGByZXZlcnNlYCwgYHNhbXBsZVNpemVgLCBgc2V0YCwgYHNldFdpdGhgLCBgc2h1ZmZsZWAsXG4gKiBgc2xpY2VgLCBgc29ydGAsIGBzb3J0QnlgLCBgc3BsaWNlYCwgYHNwcmVhZGAsIGB0YWlsYCwgYHRha2VgLCBgdGFrZVJpZ2h0YCxcbiAqIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBgdGFwYCwgYHRocm90dGxlYCwgYHRocnVgLCBgdG9BcnJheWAsXG4gKiBgdG9QYWlyc2AsIGB0b1BhaXJzSW5gLCBgdG9QYXRoYCwgYHRvUGxhaW5PYmplY3RgLCBgdHJhbnNmb3JtYCwgYHVuYXJ5YCxcbiAqIGB1bmlvbmAsIGB1bmlvbkJ5YCwgYHVuaW9uV2l0aGAsIGB1bmlxYCwgYHVuaXFCeWAsIGB1bmlxV2l0aGAsIGB1bnNldGAsXG4gKiBgdW5zaGlmdGAsIGB1bnppcGAsIGB1bnppcFdpdGhgLCBgdXBkYXRlYCwgYHVwZGF0ZVdpdGhgLCBgdmFsdWVzYCxcbiAqIGB2YWx1ZXNJbmAsIGB3aXRob3V0YCwgYHdyYXBgLCBgeG9yYCwgYHhvckJ5YCwgYHhvcldpdGhgLCBgemlwYCxcbiAqIGB6aXBPYmplY3RgLCBgemlwT2JqZWN0RGVlcGAsIGFuZCBgemlwV2l0aGBcbiAqXG4gKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgYXJlICoqbm90KiogY2hhaW5hYmxlIGJ5IGRlZmF1bHQgYXJlOlxuICogYGFkZGAsIGBhdHRlbXB0YCwgYGNhbWVsQ2FzZWAsIGBjYXBpdGFsaXplYCwgYGNlaWxgLCBgY2xhbXBgLCBgY2xvbmVgLFxuICogYGNsb25lRGVlcGAsIGBjbG9uZURlZXBXaXRoYCwgYGNsb25lV2l0aGAsIGBjb25mb3Jtc1RvYCwgYGRlYnVycmAsXG4gKiBgZGVmYXVsdFRvYCwgYGRpdmlkZWAsIGBlYWNoYCwgYGVhY2hSaWdodGAsIGBlbmRzV2l0aGAsIGBlcWAsIGBlc2NhcGVgLFxuICogYGVzY2FwZVJlZ0V4cGAsIGBldmVyeWAsIGBmaW5kYCwgYGZpbmRJbmRleGAsIGBmaW5kS2V5YCwgYGZpbmRMYXN0YCxcbiAqIGBmaW5kTGFzdEluZGV4YCwgYGZpbmRMYXN0S2V5YCwgYGZpcnN0YCwgYGZsb29yYCwgYGZvckVhY2hgLCBgZm9yRWFjaFJpZ2h0YCxcbiAqIGBmb3JJbmAsIGBmb3JJblJpZ2h0YCwgYGZvck93bmAsIGBmb3JPd25SaWdodGAsIGBnZXRgLCBgZ3RgLCBgZ3RlYCwgYGhhc2AsXG4gKiBgaGFzSW5gLCBgaGVhZGAsIGBpZGVudGl0eWAsIGBpbmNsdWRlc2AsIGBpbmRleE9mYCwgYGluUmFuZ2VgLCBgaW52b2tlYCxcbiAqIGBpc0FyZ3VtZW50c2AsIGBpc0FycmF5YCwgYGlzQXJyYXlCdWZmZXJgLCBgaXNBcnJheUxpa2VgLCBgaXNBcnJheUxpa2VPYmplY3RgLFxuICogYGlzQm9vbGVhbmAsIGBpc0J1ZmZlcmAsIGBpc0RhdGVgLCBgaXNFbGVtZW50YCwgYGlzRW1wdHlgLCBgaXNFcXVhbGAsXG4gKiBgaXNFcXVhbFdpdGhgLCBgaXNFcnJvcmAsIGBpc0Zpbml0ZWAsIGBpc0Z1bmN0aW9uYCwgYGlzSW50ZWdlcmAsIGBpc0xlbmd0aGAsXG4gKiBgaXNNYXBgLCBgaXNNYXRjaGAsIGBpc01hdGNoV2l0aGAsIGBpc05hTmAsIGBpc05hdGl2ZWAsIGBpc05pbGAsIGBpc051bGxgLFxuICogYGlzTnVtYmVyYCwgYGlzT2JqZWN0YCwgYGlzT2JqZWN0TGlrZWAsIGBpc1BsYWluT2JqZWN0YCwgYGlzUmVnRXhwYCxcbiAqIGBpc1NhZmVJbnRlZ2VyYCwgYGlzU2V0YCwgYGlzU3RyaW5nYCwgYGlzVW5kZWZpbmVkYCwgYGlzVHlwZWRBcnJheWAsXG4gKiBgaXNXZWFrTWFwYCwgYGlzV2Vha1NldGAsIGBqb2luYCwgYGtlYmFiQ2FzZWAsIGBsYXN0YCwgYGxhc3RJbmRleE9mYCxcbiAqIGBsb3dlckNhc2VgLCBgbG93ZXJGaXJzdGAsIGBsdGAsIGBsdGVgLCBgbWF4YCwgYG1heEJ5YCwgYG1lYW5gLCBgbWVhbkJ5YCxcbiAqIGBtaW5gLCBgbWluQnlgLCBgbXVsdGlwbHlgLCBgbm9Db25mbGljdGAsIGBub29wYCwgYG5vd2AsIGBudGhgLCBgcGFkYCxcbiAqIGBwYWRFbmRgLCBgcGFkU3RhcnRgLCBgcGFyc2VJbnRgLCBgcG9wYCwgYHJhbmRvbWAsIGByZWR1Y2VgLCBgcmVkdWNlUmlnaHRgLFxuICogYHJlcGVhdGAsIGByZXN1bHRgLCBgcm91bmRgLCBgcnVuSW5Db250ZXh0YCwgYHNhbXBsZWAsIGBzaGlmdGAsIGBzaXplYCxcbiAqIGBzbmFrZUNhc2VgLCBgc29tZWAsIGBzb3J0ZWRJbmRleGAsIGBzb3J0ZWRJbmRleEJ5YCwgYHNvcnRlZExhc3RJbmRleGAsXG4gKiBgc29ydGVkTGFzdEluZGV4QnlgLCBgc3RhcnRDYXNlYCwgYHN0YXJ0c1dpdGhgLCBgc3R1YkFycmF5YCwgYHN0dWJGYWxzZWAsXG4gKiBgc3R1Yk9iamVjdGAsIGBzdHViU3RyaW5nYCwgYHN0dWJUcnVlYCwgYHN1YnRyYWN0YCwgYHN1bWAsIGBzdW1CeWAsXG4gKiBgdGVtcGxhdGVgLCBgdGltZXNgLCBgdG9GaW5pdGVgLCBgdG9JbnRlZ2VyYCwgYHRvSlNPTmAsIGB0b0xlbmd0aGAsXG4gKiBgdG9Mb3dlcmAsIGB0b051bWJlcmAsIGB0b1NhZmVJbnRlZ2VyYCwgYHRvU3RyaW5nYCwgYHRvVXBwZXJgLCBgdHJpbWAsXG4gKiBgdHJpbUVuZGAsIGB0cmltU3RhcnRgLCBgdHJ1bmNhdGVgLCBgdW5lc2NhcGVgLCBgdW5pcXVlSWRgLCBgdXBwZXJDYXNlYCxcbiAqIGB1cHBlckZpcnN0YCwgYHZhbHVlYCwgYW5kIGB3b3Jkc2BcbiAqXG4gKiBAbmFtZSBfXG4gKiBAY29uc3RydWN0b3JcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAgaW4gYSBgbG9kYXNoYCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICogICByZXR1cm4gbiAqIG47XG4gKiB9XG4gKlxuICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyLCAzXSk7XG4gKlxuICogLy8gUmV0dXJucyBhbiB1bndyYXBwZWQgdmFsdWUuXG4gKiB3cmFwcGVkLnJlZHVjZShfLmFkZCk7XG4gKiAvLyA9PiA2XG4gKlxuICogLy8gUmV0dXJucyBhIHdyYXBwZWQgdmFsdWUuXG4gKiB2YXIgc3F1YXJlcyA9IHdyYXBwZWQubWFwKHNxdWFyZSk7XG4gKlxuICogXy5pc0FycmF5KHNxdWFyZXMpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoc3F1YXJlcy52YWx1ZSgpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gbG9kYXNoKHZhbHVlKSB7XG4gIGlmIChpc09iamVjdExpa2UodmFsdWUpICYmICFpc0FycmF5KHZhbHVlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTG9kYXNoV3JhcHBlcikge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ19fd3JhcHBlZF9fJykpIHtcbiAgICAgIHJldHVybiB3cmFwcGVyQ2xvbmUodmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodmFsdWUpO1xufVxuXG4vLyBFbnN1cmUgd3JhcHBlcnMgYXJlIGluc3RhbmNlcyBvZiBgYmFzZUxvZGFzaGAuXG5sb2Rhc2gucHJvdG90eXBlID0gYmFzZUxvZGFzaC5wcm90b3R5cGU7XG5sb2Rhc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbG9kYXNoO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxvZGFzaDtcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgTG9kYXNoV3JhcHBlciA9IHJlcXVpcmUoJy4vX0xvZGFzaFdyYXBwZXInKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHdyYXBwZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gd3JhcHBlciBUaGUgd3JhcHBlciB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB3cmFwcGVyLlxuICovXG5mdW5jdGlvbiB3cmFwcGVyQ2xvbmUod3JhcHBlcikge1xuICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB7XG4gICAgcmV0dXJuIHdyYXBwZXIuY2xvbmUoKTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gbmV3IExvZGFzaFdyYXBwZXIod3JhcHBlci5fX3dyYXBwZWRfXywgd3JhcHBlci5fX2NoYWluX18pO1xuICByZXN1bHQuX19hY3Rpb25zX18gPSBjb3B5QXJyYXkod3JhcHBlci5fX2FjdGlvbnNfXyk7XG4gIHJlc3VsdC5fX2luZGV4X18gID0gd3JhcHBlci5fX2luZGV4X187XG4gIHJlc3VsdC5fX3ZhbHVlc19fID0gd3JhcHBlci5fX3ZhbHVlc19fO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXBwZXJDbG9uZTtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIHdyYXAgZGV0YWlsIGNvbW1lbnRzLiAqL1xudmFyIHJlV3JhcERldGFpbHMgPSAvXFx7XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAoLispXFxdIFxcKi8sXG4gICAgcmVTcGxpdERldGFpbHMgPSAvLD8gJiAvO1xuXG4vKipcbiAqIEV4dHJhY3RzIHdyYXBwZXIgZGV0YWlscyBmcm9tIHRoZSBgc291cmNlYCBib2R5IGNvbW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNvdXJjZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3cmFwcGVyIGRldGFpbHMuXG4gKi9cbmZ1bmN0aW9uIGdldFdyYXBEZXRhaWxzKHNvdXJjZSkge1xuICB2YXIgbWF0Y2ggPSBzb3VyY2UubWF0Y2gocmVXcmFwRGV0YWlscyk7XG4gIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdLnNwbGl0KHJlU3BsaXREZXRhaWxzKSA6IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFdyYXBEZXRhaWxzO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggd3JhcCBkZXRhaWwgY29tbWVudHMuICovXG52YXIgcmVXcmFwQ29tbWVudCA9IC9cXHsoPzpcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoIC4rXFxdIFxcKlxcLyk/XFxuPy87XG5cbi8qKlxuICogSW5zZXJ0cyB3cmFwcGVyIGBkZXRhaWxzYCBpbiBhIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgYHNvdXJjZWAgYm9keS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBUaGUgc291cmNlIHRvIG1vZGlmeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gZGV0YWlscyBUaGUgZGV0YWlscyB0byBpbnNlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBtb2RpZmllZCBzb3VyY2UuXG4gKi9cbmZ1bmN0aW9uIGluc2VydFdyYXBEZXRhaWxzKHNvdXJjZSwgZGV0YWlscykge1xuICB2YXIgbGVuZ3RoID0gZGV0YWlscy5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcbiAgZGV0YWlsc1tsYXN0SW5kZXhdID0gKGxlbmd0aCA+IDEgPyAnJiAnIDogJycpICsgZGV0YWlsc1tsYXN0SW5kZXhdO1xuICBkZXRhaWxzID0gZGV0YWlscy5qb2luKGxlbmd0aCA+IDIgPyAnLCAnIDogJyAnKTtcbiAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKHJlV3JhcENvbW1lbnQsICd7XFxuLyogW3dyYXBwZWQgd2l0aCAnICsgZGV0YWlscyArICddICovXFxuJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0V3JhcERldGFpbHM7XG4iLCJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb25zdGFudDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCJ2YXIgYXJyYXlFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXlFYWNoJyksXG4gICAgYXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHID0gNjQsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX1JFQVJHX0ZMQUcgPSAyNTYsXG4gICAgV1JBUF9GTElQX0ZMQUcgPSA1MTI7XG5cbi8qKiBVc2VkIHRvIGFzc29jaWF0ZSB3cmFwIG1ldGhvZHMgd2l0aCB0aGVpciBiaXQgZmxhZ3MuICovXG52YXIgd3JhcEZsYWdzID0gW1xuICBbJ2FyeScsIFdSQVBfQVJZX0ZMQUddLFxuICBbJ2JpbmQnLCBXUkFQX0JJTkRfRkxBR10sXG4gIFsnYmluZEtleScsIFdSQVBfQklORF9LRVlfRkxBR10sXG4gIFsnY3VycnknLCBXUkFQX0NVUlJZX0ZMQUddLFxuICBbJ2N1cnJ5UmlnaHQnLCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUddLFxuICBbJ2ZsaXAnLCBXUkFQX0ZMSVBfRkxBR10sXG4gIFsncGFydGlhbCcsIFdSQVBfUEFSVElBTF9GTEFHXSxcbiAgWydwYXJ0aWFsUmlnaHQnLCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBR10sXG4gIFsncmVhcmcnLCBXUkFQX1JFQVJHX0ZMQUddXG5dO1xuXG4vKipcbiAqIFVwZGF0ZXMgd3JhcHBlciBgZGV0YWlsc2AgYmFzZWQgb24gYGJpdG1hc2tgIGZsYWdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7QXJyYXl9IGRldGFpbHMgVGhlIGRldGFpbHMgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgZGV0YWlsc2AuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVdyYXBEZXRhaWxzKGRldGFpbHMsIGJpdG1hc2spIHtcbiAgYXJyYXlFYWNoKHdyYXBGbGFncywgZnVuY3Rpb24ocGFpcikge1xuICAgIHZhciB2YWx1ZSA9ICdfLicgKyBwYWlyWzBdO1xuICAgIGlmICgoYml0bWFzayAmIHBhaXJbMV0pICYmICFhcnJheUluY2x1ZGVzKGRldGFpbHMsIHZhbHVlKSkge1xuICAgICAgZGV0YWlscy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZGV0YWlscy5zb3J0KCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdXBkYXRlV3JhcERldGFpbHM7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlFYWNoO1xuIiwidmFyIGJhc2VJbmRleE9mID0gcmVxdWlyZSgnLi9fYmFzZUluZGV4T2YnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVkZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogc3BlY2lmeWluZyBhbiBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgMCkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUluY2x1ZGVzO1xuIiwidmFyIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBSZW9yZGVyIGBhcnJheWAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgaW5kZXhlcyB3aGVyZSB0aGUgZWxlbWVudCBhdFxuICogdGhlIGZpcnN0IGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgZWxlbWVudCBhdFxuICogdGhlIHNlY29uZCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHJlb3JkZXIuXG4gKiBAcGFyYW0ge0FycmF5fSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcnJheSBpbmRleGVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIHJlb3JkZXIoYXJyYXksIGluZGV4ZXMpIHtcbiAgdmFyIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihpbmRleGVzLmxlbmd0aCwgYXJyTGVuZ3RoKSxcbiAgICAgIG9sZEFycmF5ID0gY29weUFycmF5KGFycmF5KTtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07XG4gICAgYXJyYXlbbGVuZ3RoXSA9IGlzSW5kZXgoaW5kZXgsIGFyckxlbmd0aCkgPyBvbGRBcnJheVtpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlb3JkZXI7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpLFxuICAgIGNyZWF0ZUN0b3IgPSByZXF1aXJlKCcuL19jcmVhdGVDdG9yJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmdcbiAqIG9mIGB0aGlzQXJnYCBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKSB7XG4gIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgIGxlZnRJbmRleCA9IC0xLFxuICAgICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICBhcmdzID0gQXJyYXkobGVmdExlbmd0aCArIGFyZ3NMZW5ndGgpLFxuICAgICAgICBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG5cbiAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgICBhcmdzW2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdO1xuICAgIH1cbiAgICB3aGlsZSAoYXJnc0xlbmd0aC0tKSB7XG4gICAgICBhcmdzW2xlZnRJbmRleCsrXSA9IGFyZ3VtZW50c1srK2FyZ3NJbmRleF07XG4gICAgfVxuICAgIHJldHVybiBhcHBseShmbiwgaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVBhcnRpYWw7XG4iLCJ2YXIgY29tcG9zZUFyZ3MgPSByZXF1aXJlKCcuL19jb21wb3NlQXJncycpLFxuICAgIGNvbXBvc2VBcmdzUmlnaHQgPSByZXF1aXJlKCcuL19jb21wb3NlQXJnc1JpZ2h0JyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpO1xuXG4vKiogVXNlZCBhcyB0aGUgaW50ZXJuYWwgYXJndW1lbnQgcGxhY2Vob2xkZXIuICovXG52YXIgUExBQ0VIT0xERVIgPSAnX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfQk9VTkRfRkxBRyA9IDQsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0FSWV9GTEFHID0gMTI4LFxuICAgIFdSQVBfUkVBUkdfRkxBRyA9IDI1NjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1pbiA9IE1hdGgubWluO1xuXG4vKipcbiAqIE1lcmdlcyB0aGUgZnVuY3Rpb24gbWV0YWRhdGEgb2YgYHNvdXJjZWAgaW50byBgZGF0YWAuXG4gKlxuICogTWVyZ2luZyBtZXRhZGF0YSByZWR1Y2VzIHRoZSBudW1iZXIgb2Ygd3JhcHBlcnMgdXNlZCB0byBpbnZva2UgYSBmdW5jdGlvbi5cbiAqIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSBtZXRob2RzIGxpa2UgYF8uYmluZGAsIGBfLmN1cnJ5YCwgYW5kIGBfLnBhcnRpYWxgXG4gKiBtYXkgYmUgYXBwbGllZCByZWdhcmRsZXNzIG9mIGV4ZWN1dGlvbiBvcmRlci4gTWV0aG9kcyBsaWtlIGBfLmFyeWAgYW5kXG4gKiBgXy5yZWFyZ2AgbW9kaWZ5IGZ1bmN0aW9uIGFyZ3VtZW50cywgbWFraW5nIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZVxuICogZXhlY3V0ZWQgaW1wb3J0YW50LCBwcmV2ZW50aW5nIHRoZSBtZXJnaW5nIG9mIG1ldGFkYXRhLiBIb3dldmVyLCB3ZSBtYWtlXG4gKiBhbiBleGNlcHRpb24gZm9yIGEgc2FmZSBjb21iaW5lZCBjYXNlIHdoZXJlIGN1cnJpZWQgZnVuY3Rpb25zIGhhdmUgYF8uYXJ5YFxuICogYW5kIG9yIGBfLnJlYXJnYCBhcHBsaWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBkYXRhIFRoZSBkZXN0aW5hdGlvbiBtZXRhZGF0YS5cbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgc291cmNlIG1ldGFkYXRhLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBkYXRhYC5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhKGRhdGEsIHNvdXJjZSkge1xuICB2YXIgYml0bWFzayA9IGRhdGFbMV0sXG4gICAgICBzcmNCaXRtYXNrID0gc291cmNlWzFdLFxuICAgICAgbmV3Qml0bWFzayA9IGJpdG1hc2sgfCBzcmNCaXRtYXNrLFxuICAgICAgaXNDb21tb24gPSBuZXdCaXRtYXNrIDwgKFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHIHwgV1JBUF9BUllfRkxBRyk7XG5cbiAgdmFyIGlzQ29tYm8gPVxuICAgICgoc3JjQml0bWFzayA9PSBXUkFQX0FSWV9GTEFHKSAmJiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcpKSB8fFxuICAgICgoc3JjQml0bWFzayA9PSBXUkFQX0FSWV9GTEFHKSAmJiAoYml0bWFzayA9PSBXUkFQX1JFQVJHX0ZMQUcpICYmIChkYXRhWzddLmxlbmd0aCA8PSBzb3VyY2VbOF0pKSB8fFxuICAgICgoc3JjQml0bWFzayA9PSAoV1JBUF9BUllfRkxBRyB8IFdSQVBfUkVBUkdfRkxBRykpICYmIChzb3VyY2VbN10ubGVuZ3RoIDw9IHNvdXJjZVs4XSkgJiYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHKSk7XG5cbiAgLy8gRXhpdCBlYXJseSBpZiBtZXRhZGF0YSBjYW4ndCBiZSBtZXJnZWQuXG4gIGlmICghKGlzQ29tbW9uIHx8IGlzQ29tYm8pKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgdGhpc0FyZ2AgaWYgYXZhaWxhYmxlLlxuICBpZiAoc3JjQml0bWFzayAmIFdSQVBfQklORF9GTEFHKSB7XG4gICAgZGF0YVsyXSA9IHNvdXJjZVsyXTtcbiAgICAvLyBTZXQgd2hlbiBjdXJyeWluZyBhIGJvdW5kIGZ1bmN0aW9uLlxuICAgIG5ld0JpdG1hc2sgfD0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHID8gMCA6IFdSQVBfQ1VSUllfQk9VTkRfRkxBRztcbiAgfVxuICAvLyBDb21wb3NlIHBhcnRpYWwgYXJndW1lbnRzLlxuICB2YXIgdmFsdWUgPSBzb3VyY2VbM107XG4gIGlmICh2YWx1ZSkge1xuICAgIHZhciBwYXJ0aWFscyA9IGRhdGFbM107XG4gICAgZGF0YVszXSA9IHBhcnRpYWxzID8gY29tcG9zZUFyZ3MocGFydGlhbHMsIHZhbHVlLCBzb3VyY2VbNF0pIDogdmFsdWU7XG4gICAgZGF0YVs0XSA9IHBhcnRpYWxzID8gcmVwbGFjZUhvbGRlcnMoZGF0YVszXSwgUExBQ0VIT0xERVIpIDogc291cmNlWzRdO1xuICB9XG4gIC8vIENvbXBvc2UgcGFydGlhbCByaWdodCBhcmd1bWVudHMuXG4gIHZhbHVlID0gc291cmNlWzVdO1xuICBpZiAodmFsdWUpIHtcbiAgICBwYXJ0aWFscyA9IGRhdGFbNV07XG4gICAgZGF0YVs1XSA9IHBhcnRpYWxzID8gY29tcG9zZUFyZ3NSaWdodChwYXJ0aWFscywgdmFsdWUsIHNvdXJjZVs2XSkgOiB2YWx1ZTtcbiAgICBkYXRhWzZdID0gcGFydGlhbHMgPyByZXBsYWNlSG9sZGVycyhkYXRhWzVdLCBQTEFDRUhPTERFUikgOiBzb3VyY2VbNl07XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgYXJnUG9zYCBpZiBhdmFpbGFibGUuXG4gIHZhbHVlID0gc291cmNlWzddO1xuICBpZiAodmFsdWUpIHtcbiAgICBkYXRhWzddID0gdmFsdWU7XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgYXJ5YCBpZiBpdCdzIHNtYWxsZXIuXG4gIGlmIChzcmNCaXRtYXNrICYgV1JBUF9BUllfRkxBRykge1xuICAgIGRhdGFbOF0gPSBkYXRhWzhdID09IG51bGwgPyBzb3VyY2VbOF0gOiBuYXRpdmVNaW4oZGF0YVs4XSwgc291cmNlWzhdKTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBhcml0eWAgaWYgb25lIGlzIG5vdCBwcm92aWRlZC5cbiAgaWYgKGRhdGFbOV0gPT0gbnVsbCkge1xuICAgIGRhdGFbOV0gPSBzb3VyY2VbOV07XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgZnVuY2AgYW5kIG1lcmdlIGJpdG1hc2tzLlxuICBkYXRhWzBdID0gc291cmNlWzBdO1xuICBkYXRhWzFdID0gbmV3Qml0bWFzaztcblxuICByZXR1cm4gZGF0YTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZXJnZURhdGE7XG4iLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5JyksXG4gICAgb3ZlclJlc3QgPSByZXF1aXJlKCcuL19vdmVyUmVzdCcpLFxuICAgIHNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0VG9TdHJpbmcnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVJlc3Q7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJSZXN0O1xuIiwidmFyIGNhc3RTbGljZSA9IHJlcXVpcmUoJy4vX2Nhc3RTbGljZScpLFxuICAgIGhhc1VuaWNvZGUgPSByZXF1aXJlKCcuL19oYXNVbmljb2RlJyksXG4gICAgc3RyaW5nVG9BcnJheSA9IHJlcXVpcmUoJy4vX3N0cmluZ1RvQXJyYXknKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5sb3dlckZpcnN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGBTdHJpbmdgIGNhc2UgbWV0aG9kIHRvIHVzZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhc2VGaXJzdChtZXRob2ROYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgdmFyIHN0clN5bWJvbHMgPSBoYXNVbmljb2RlKHN0cmluZylcbiAgICAgID8gc3RyaW5nVG9BcnJheShzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHZhciBjaHIgPSBzdHJTeW1ib2xzXG4gICAgICA/IHN0clN5bWJvbHNbMF1cbiAgICAgIDogc3RyaW5nLmNoYXJBdCgwKTtcblxuICAgIHZhciB0cmFpbGluZyA9IHN0clN5bWJvbHNcbiAgICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDEpLmpvaW4oJycpXG4gICAgICA6IHN0cmluZy5zbGljZSgxKTtcblxuICAgIHJldHVybiBjaHJbbWV0aG9kTmFtZV0oKSArIHRyYWlsaW5nO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNhc2VGaXJzdDtcbiIsInZhciBiYXNlU2xpY2UgPSByZXF1aXJlKCcuL19iYXNlU2xpY2UnKTtcblxuLyoqXG4gKiBDYXN0cyBgYXJyYXlgIHRvIGEgc2xpY2UgaWYgaXQncyBuZWVkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBzbGljZS5cbiAqL1xuZnVuY3Rpb24gY2FzdFNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kO1xuICByZXR1cm4gKCFzdGFydCAmJiBlbmQgPj0gbGVuZ3RoKSA/IGFycmF5IDogYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0U2xpY2U7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNsaWNlYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gIH1cbiAgZW5kID0gZW5kID4gbGVuZ3RoID8gbGVuZ3RoIDogZW5kO1xuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5ndGg7XG4gIH1cbiAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKChlbmQgLSBzdGFydCkgPj4+IDApO1xuICBzdGFydCA+Pj49IDA7XG5cbiAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNsaWNlO1xuIiwidmFyIGFzY2lpVG9BcnJheSA9IHJlcXVpcmUoJy4vX2FzY2lpVG9BcnJheScpLFxuICAgIGhhc1VuaWNvZGUgPSByZXF1aXJlKCcuL19oYXNVbmljb2RlJyksXG4gICAgdW5pY29kZVRvQXJyYXkgPSByZXF1aXJlKCcuL191bmljb2RlVG9BcnJheScpO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBzdHJpbmdUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gaGFzVW5pY29kZShzdHJpbmcpXG4gICAgPyB1bmljb2RlVG9BcnJheShzdHJpbmcpXG4gICAgOiBhc2NpaVRvQXJyYXkoc3RyaW5nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpbmdUb0FycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBhbiBBU0NJSSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXNjaWlUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnNwbGl0KCcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc2NpaVRvQXJyYXk7XG4iLCIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBc3RyYWwgPSAnWycgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvUmFuZ2UgKyAnXScsXG4gICAgcnNGaXR6ID0gJ1xcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXScsXG4gICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzUmVnaW9uYWwgPSAnKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfScsXG4gICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSByZWdleGVzLiAqL1xudmFyIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JyxcbiAgICByc09wdFZhciA9ICdbJyArIHJzVmFyUmFuZ2UgKyAnXT8nLFxuICAgIHJzT3B0Sm9pbiA9ICcoPzonICsgcnNaV0ogKyAnKD86JyArIFtyc05vbkFzdHJhbCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNPcHRWYXIgKyByZU9wdE1vZCArICcpKicsXG4gICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgIHJzU3ltYm9sID0gJyg/OicgKyBbcnNOb25Bc3RyYWwgKyByc0NvbWJvICsgJz8nLCByc0NvbWJvLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyLCByc0FzdHJhbF0uam9pbignfCcpICsgJyknO1xuXG4vKiogVXNlZCB0byBtYXRjaCBbc3RyaW5nIHN5bWJvbHNdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUpLiAqL1xudmFyIHJlVW5pY29kZSA9IFJlZ0V4cChyc0ZpdHogKyAnKD89JyArIHJzRml0eiArICcpfCcgKyByc1N5bWJvbCArIHJzU2VxLCAnZycpO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgVW5pY29kZSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gdW5pY29kZVRvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2RlKSB8fCBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1bmljb2RlVG9BcnJheTtcbiIsIi8qKlxuICogVmFsaWRhdGVzIGEgVVMgRHJpdmVycyBMaWNlbnNlIGdpdmVuIGEgdHdvIGxldHRlciBhYmJyZXZpYXRpb24gb2YgdGhlIFVTXG4gKiBTdGF0ZSB0byB2YWxpZGF0ZSBpdCBpbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGljZW5zZSBEcml2ZXJzIExpY2Vuc2UgdG8gdmFsaWRhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RhdGUgVHdvIENoYXJhY3RlciBBYmJyZXZpYXRpb24gZm9yIHRoZSBVUyBTdGF0ZSB0byB2YWxpZGF0ZVxuICogdGhlIGxpY2Vuc2UgaW4uXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGxpY2Vuc2UgaXMgdmFsaWQgb3Igbm90LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IGlzVmFsaWRVU0xpY2Vuc2UgfSA9IHJlcXVpcmUoJ0B0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlJylcbiAqXG4gKiBjb25zdCB2YWxpZCA9IGlzVmFsaWRVU0xpY2Vuc2UoJzEyMzQ1NjcnLCAnQUwnKVxuICogY29uc29sZS5sb2codmFsaWQpIC8vIHRydWVcbiAqXG4gKiBAbmFtZSBpc1ZhbGlkVVNMaWNlbnNlXG4gKi9cblxudmFyIGRyaXZlcnNMaWNlbnNlUmVnZXggPSByZXF1aXJlKFwiLi9saWNlbnNlLXJlZ2V4XCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGxpY2Vuc2UsIHN0YXRlKSB7XG4gIGlmICh0eXBlb2YgbGljZW5zZSAhPT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Ygc3RhdGUgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcbiAgdmFyIHZhbGlkYXRvcnMgPSBkcml2ZXJzTGljZW5zZVJlZ2V4W3N0YXRlXTtcbiAgaWYgKCF2YWxpZGF0b3JzKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGNsZWFuTGljZW5zZSA9IGxpY2Vuc2UucmVwbGFjZSgvW1xccy1dL2csICcnKTtcbiAgdmFyIHJlYXNvbnMgPSB2YWxpZGF0b3JzXG4gICAgLmZpbHRlcihmdW5jdGlvbih2YWwpIHtcbiAgICAgIHJldHVybiAhdmFsLnJlZ2V4LnRlc3QoY2xlYW5MaWNlbnNlKTtcbiAgICB9KVxuICAgIC5tYXAoZnVuY3Rpb24odmFsKSB7XG4gICAgICByZXR1cm4gdmFsLmRlc2NyaXB0aW9uO1xuICAgIH0pO1xuICByZXR1cm4gcmVhc29ucy5sZW5ndGggPCB2YWxpZGF0b3JzLmxlbmd0aDtcbn07XG4iLCIvKipcbiAqIFZhbGlkYXRlcyBhIFVTIERyaXZlcnMgTGljZW5zZSBnaXZlbiBhIHR3byBsZXR0ZXIgYWJicmV2aWF0aW9uIG9mIHRoZSBVU1xuICogU3RhdGUgdG8gdmFsaWRhdGUgaXQgaW4uXG4gKiBTaW1pbGFyIHRvIGlzVmFsaWRVU0xpY2Vuc2UgYnV0IHJldHVybnMgYW4gb2JqZWN0IHdpdGggYSAndmFsaWQnXG4gKiBib29sZWFuIHByb3BlcnR5IGZvciB0aGUgdmFsaWRhdGlvbiBpdHNlbGYsIGFzIHdlbGwgYXMgYSByZWFzb25zIGFycmF5IHRoYXRcbiAqIGF0dGVtcHRzIHRvIGV4cGxhaW4gdGhlIHJlc3VsdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsaWNlbnNlIERyaXZlcnMgTGljZW5zZSB0byB2YWxpZGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSBUd28gQ2hhcmFjdGVyIEFiYnJldmlhdGlvbiBmb3IgdGhlIFVTIFN0YXRlIHRvIHZhbGlkYXRlXG4gKiB0aGUgbGljZW5zZSBpbi5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSB2YWxpZGF0aW9uIGFuZCBhIHJlYXNvbnNcbiAqIGFycmF5LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSB9ID0gcmVxdWlyZSgnQHR1cm5haS92YWxpZGF0ZS11cy1kcml2ZXJzLWxpY2Vuc2UnKVxuICpcbiAqIGNvbnN0IHZhbGlkTGljZW5zZSA9IHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSgnMTIzNDU2NycsICdBTCcpXG4gKiBjb25zb2xlLmxvZyh2YWxpZExpY2Vuc2UudmFsaWQpIC8vIHRydWVcbiAqIGNvbnN0IHZhbGlkTGljZW5zZSA9IHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSgnMTIzNDU2NzgnLCAnQUwnKSAvL1xuICogY29uc29sZS5sb2codmFsaWRMaWNlbnNlLnJlYXNvbnMpIC8vIFsnTGljZW5zZSBtdXN0IGJlIDEtNyBudW1iZXJzJ11cbiAqXG4gKiBAbmFtZSB2YWxpZGF0ZVVTRHJpdmVyc0xpY2Vuc2VcbiAqL1xuXG52YXIgZHJpdmVyc0xpY2Vuc2VSZWdleCA9IHJlcXVpcmUoXCIuL2xpY2Vuc2UtcmVnZXhcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obGljZW5zZSwgc3RhdGUpIHtcbiAgaWYgKHR5cGVvZiBsaWNlbnNlICE9PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBzdGF0ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgcmVhc29uczogWydMaWNlbnNlIGFuZCBTdGF0ZSBtdXN0IGJlIFN0cmluZ3MnXSB9O1xuICB9XG4gIHZhciB2YWxpZGF0b3JzID0gZHJpdmVyc0xpY2Vuc2VSZWdleFtzdGF0ZV07XG4gIGlmICghdmFsaWRhdG9ycykgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCByZWFzb25zOiBbJ05vdCBhIHZhbGlkIFVTIFN0YXRlJ10gfTtcbiAgY29uc3QgY2xlYW5MaWNlbnNlID0gbGljZW5zZS5yZXBsYWNlKC9bXFxzLV0vZywgJycpO1xuICB2YXIgcmVhc29ucyA9IHZhbGlkYXRvcnNcbiAgICAuZmlsdGVyKGZ1bmN0aW9uKHZhbCkge1xuICAgICAgcmV0dXJuICF2YWwucmVnZXgudGVzdChjbGVhbkxpY2Vuc2UpO1xuICAgIH0pXG4gICAgLm1hcChmdW5jdGlvbih2YWwpIHtcbiAgICAgIHJldHVybiB2YWwuZGVzY3JpcHRpb247XG4gICAgfSk7XG4gIHJldHVybiB7IHZhbGlkOiByZWFzb25zLmxlbmd0aCA8IHZhbGlkYXRvcnMubGVuZ3RoLCByZWFzb25zIH1cbn07XG4iLCIvKipcbiAqIExpc3Qgb2Ygc3VwcG9ydGVkIFVTIFN0YXRlcyBhcyBhbiBhcnJheVxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IHN1cHBvcnRlZFN0YXRlcyB9ID0gcmVxdWlyZSgnQHR1cm5haS92YWxpZGF0ZS11cy1kcml2ZXJzLWxpY2Vuc2UnKVxuICpcbiAqIGNvbnN0IGlzU3VwcG9ydGVkID0gY3VycmVudFN0YXRlcy5pbmNsdWRlcygnSUwnKVxuICogY29uc29sZS5sb2coaXNTdXBwb3J0ZWQpIC8vIHRydWVcbiAqXG4gKiBAbmFtZSBzdXBwb3J0ZWRTdGF0ZXNcbiAqL1xuXG52YXIgZHJpdmVyc0xpY2Vuc2VSZWdleCA9IHJlcXVpcmUoXCIuL2xpY2Vuc2UtcmVnZXhcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMoZHJpdmVyc0xpY2Vuc2VSZWdleCk7XG4iLCJ2YXIgYmFzZVJhbmdlID0gcmVxdWlyZSgnLi9fYmFzZVJhbmdlJyksXG4gICAgaXNJdGVyYXRlZUNhbGwgPSByZXF1aXJlKCcuL19pc0l0ZXJhdGVlQ2FsbCcpLFxuICAgIHRvRmluaXRlID0gcmVxdWlyZSgnLi90b0Zpbml0ZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgXy5yYW5nZWAgb3IgYF8ucmFuZ2VSaWdodGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmFuZ2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJhbmdlKGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIGlmIChzdGVwICYmIHR5cGVvZiBzdGVwICE9ICdudW1iZXInICYmIGlzSXRlcmF0ZWVDYWxsKHN0YXJ0LCBlbmQsIHN0ZXApKSB7XG4gICAgICBlbmQgPSBzdGVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBFbnN1cmUgdGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gICAgc3RhcnQgPSB0b0Zpbml0ZShzdGFydCk7XG4gICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmQgPSBzdGFydDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kID0gdG9GaW5pdGUoZW5kKTtcbiAgICB9XG4gICAgc3RlcCA9IHN0ZXAgPT09IHVuZGVmaW5lZCA/IChzdGFydCA8IGVuZCA/IDEgOiAtMSkgOiB0b0Zpbml0ZShzdGVwKTtcbiAgICByZXR1cm4gYmFzZVJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXAsIGZyb21SaWdodCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUmFuZ2U7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlQ2VpbCA9IE1hdGguY2VpbCxcbiAgICBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yYW5nZWAgYW5kIGBfLnJhbmdlUmlnaHRgIHdoaWNoIGRvZXNuJ3RcbiAqIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwIFRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmdlIG9mIG51bWJlcnMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VSYW5nZShzdGFydCwgZW5kLCBzdGVwLCBmcm9tUmlnaHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBuYXRpdmVNYXgobmF0aXZlQ2VpbCgoZW5kIC0gc3RhcnQpIC8gKHN0ZXAgfHwgMSkpLCAwKSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgcmVzdWx0W2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdID0gc3RhcnQ7XG4gICAgc3RhcnQgKz0gc3RlcDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VSYW5nZTtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLCJpbXBvcnQgeyBjcmVhdGUgfSBmcm9tIFwiYXBpc2F1Y2VcIjtcbmltcG9ydCB7IGJ0b2EgfSBmcm9tIFwiQmFzZTY0XCI7XG5cbmNsYXNzIEJhc2VBUEkge1xuICBjb25zdHJ1Y3RvcihiYXNlVVJMLCB0d2lsaW9LZXkpIHtcbiAgICBpZiAoYmFzZVVSTCkge1xuICAgICAgdGhpcy5hcGkgPSBjcmVhdGUoe1xuICAgICAgICBiYXNlVVJMLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHR3aWxpb0tleSkgeyB0aGlzLnR3aWxpb0tleSA9IHR3aWxpb0tleTsgfVxuICB9XG4gIHNldFRva2VuKHRva2VuKSB7XG4gICAgaWYgKCF0b2tlbikgcmV0dXJuIHRoaXM7XG4gICAgdGhpcy5hcGkuc2V0SGVhZGVycyh7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHNldFN0YXR1c1ByZWZlcmVuY2Uoc3RhdHVzKSB7XG4gICAgaWYgKCFzdGF0dXMpIHJldHVybiB0aGlzO1xuICAgIHRoaXMuYXBpLnNldEhlYWRlcnMoeyBQcmVmZXI6IGBzdGF0dXM9JHtzdGF0dXN9YCB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBhcHByb3ZlV29ya2VyID0gKGlkLCBwYXJhbXMpID0+XG4gICAgdGhpcy5hcGkucHV0KGAvcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS9hcHByb3ZlYCwgcGFyYW1zKTtcbiAgd2l0aGRyYXdXb3JrZXIgPSAoaWQsIHBhcmFtcykgPT5cbiAgICB0aGlzLmFwaS5wb3N0KGAvcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS93aXRoZHJhd2AsIHBhcmFtcyk7XG4gIHJlamVjdFdvcmtlciA9IChpZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnB1dChgL3BhcnRuZXJzL21lL3dvcmtlcnMvJHtpZH0vcmVqZWN0YCwgcGFyYW1zKTtcbiAgZ2V0TWVtYmVyID0gKCkgPT4gdGhpcy5hcGkuZ2V0KFwiL3BhcnRuZXJzL21lXCIpO1xuICBnZXRTZXR0aW5ncyA9ICgpID0+IHRoaXMuYXBpLmdldChcIi9wYXJ0bmVycy9zZXR0aW5nc1wiKTtcbiAgZ2V0V29ya2VycyA9IHBhcmFtcyA9PlxuICAgIHRoaXMuYXBpLmdldChgL3BhcnRuZXJzL21lL3dvcmtlcnM/cXVlcnk9JHtKU09OLnN0cmluZ2lmeShwYXJhbXMpfWApO1xuICBnZXRQZW5kaW5nV29ya2VycyA9IHBhcmFtcyA9PlxuICAgIHRoaXMuYXBpLmdldChgL2NvaG9ydC9jYW5kaWRhdGVzP3F1ZXJ5PSR7SlNPTi5zdHJpbmdpZnkocGFyYW1zKX1gKTtcbiAgZ2V0V29ya2VyID0gaWQgPT4gdGhpcy5hcGkuZ2V0KGAvcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfT9mdWxsPWZhbHNlYCk7XG4gIGNoZWNrV29ya2VyID0gcGFyYW1zID0+IHRoaXMuYXBpLnBvc3QoXCIvcGFydG5lcnMvd29ya2Vyc1wiLCBwYXJhbXMpO1xuICB2YWxpZGF0ZVBob25lID0gcGhvbmUgPT5cbiAgICB0aGlzLmFwaS5nZXQoYFBob25lTnVtYmVycy8ke3Bob25lfT9UeXBlPWNhcnJpZXImQ291bnRyeUNvZGU9VVNgLCBudWxsLCB7XG4gICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGBCYXNpYyAke2J0b2EoVFdJTElPX0tFWSl9YCB9XG4gICAgfSk7XG4gIHZhbGlkYXRlRW1haWwgPSBlbWFpbCA9PlxuICAgIHRoaXMuYXBpLmdldChgL3ZlcmlmeV9lbWFpbD9lbWFpbD0ke2VuY29kZVVSSUNvbXBvbmVudChlbWFpbCl9YCk7XG4gIHZhbGlkYXRlU1NOID0gKGVtYWlsX2lkLCBzc24pID0+XG4gICAgdGhpcy5hcGkucG9zdChgL2NhbmRpZGF0ZV9jb25zZW50X2VtYWlsL2NhbmRpZGF0ZS8ke2VtYWlsX2lkfS92YWxpZGF0ZWAsIHtcbiAgICAgIHNzblxuICAgIH0pO1xuICB2YWxpZGF0ZUNhbmRpZGF0ZUVtYWlsID0gKGVtYWlsX2lkLCBlbWFpbCkgPT5cbiAgICB0aGlzLmFwaS5nZXQoXG4gICAgICBgL2NhbmRpZGF0ZV92ZXJpZnlfZW1haWwvJHtlbWFpbF9pZH0/ZW1haWw9JHtlbmNvZGVVUklDb21wb25lbnQoZW1haWwpfWBcbiAgICApO1xuICBnZXRDYW5kaWRhdGVEYXRhID0gZW1haWxfaWQgPT5cbiAgICB0aGlzLmFwaS5nZXQoYC9jYW5kaWRhdGVfY29uc2VudF9lbWFpbC9jYW5kaWRhdGUvJHtlbWFpbF9pZH1gKTtcbiAgZ2V0SW50ZXJlc3RzID0gKCkgPT4gdGhpcy5hcGkuZ2V0KFwiL2ludGVyZXN0c1wiKTtcbiAgZ2V0VHJhbnNwb3J0cyA9ICgpID0+IHRoaXMuYXBpLmdldChcIi90cmFuc3BvcnRzXCIpO1xuICBnZXRQYXltZXRNZXRob2QgPSAoKSA9PiB0aGlzLmFwaS5nZXQoXCIvcGF5bWVudF9zZXR0aW5ncy9wYXJ0bmVyX21ldGhvZHNcIik7XG4gIGdldEJhY2tncm91bmRSZXBvcnQgPSAoZW1haWxfaWQsIHRva2VuKSA9PlxuICAgIHRoaXMuYXBpLmdldChcbiAgICAgIGAvY2FuZGlkYXRlX2NvbnNlbnRfZW1haWwvY2FuZGlkYXRlLyR7ZW1haWxfaWR9L3JlcG9ydD90b2tlbj0ke3Rva2VufWBcbiAgICApO1xuICBwcm92aWRlQ2FuZGlkYXRlQ29uc2VudCA9IChlbWFpbF9pZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoYC9jYW5kaWRhdGVfY29uc2VudF9lbWFpbC9jYW5kaWRhdGUvJHtlbWFpbF9pZH1gLCBwYXJhbXMpO1xuICBwcm92aWRlQ2FuZGlkYXRlQ29uc2VudEFzeW5jID0gKGVtYWlsX2lkLCBwYXJhbXMpID0+XG4gICAgdGhpcy5hcGkucG9zdChcbiAgICAgIGAvY2FuZGlkYXRlX2NvbnNlbnRfZW1haWwvY2FuZGlkYXRlLyR7ZW1haWxfaWR9L2FzeW5jYCxcbiAgICAgIHBhcmFtc1xuICAgICk7XG4gIGdldFRyaWFsU3RhdHVzID0gKCkgPT4gdGhpcy5hcGkuZ2V0KFwiL29yZ2FuaXphdGlvbnMvdHJpYWxfc3RhdHVzXCIpO1xuICBuZXdDYW5kaWRhdGUgPSAoKSA9PiB0aGlzLmFwaS5nZXQoXCIvb3JnYW5pemF0aW9ucy9uZXdfY2FuZGlkYXRlXCIpO1xuICBnZXRUZXJtcyA9ICgpID0+IHRoaXMuYXBpLmdldChcIi9wYXJ0bmVycy90ZXJtc1wiKTtcbiAgY29uc2VudCA9IHBhcmFtcyA9PiB0aGlzLmFwaS5wb3N0KFwiL3BhcnRuZXJzL21lL2NvbnNlbnRcIiwgcGFyYW1zKTtcbiAgYXBwbHkgPSAoeyBwYXJ0bmVyX25hbWUsIHBhcnRuZXJfaWR9KSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoYC9jYW5kaWRhdGVfY29uc2VudF9lbWFpbC8ke3BhcnRuZXJfbmFtZX0vJHtwYXJ0bmVyX2lkfWAsIHt9KTtcbiAgYXNzZW50ID0gKGVtYWlsX2lkLCBkYXRhKSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoXG4gICAgICBgL2NhbmRpZGF0ZV9jb25zZW50X2VtYWlsL2NhbmRpZGF0ZS8ke2VtYWlsX2lkfS9hc3NlbnRgLFxuICAgICAgZGF0YVxuICAgICk7XG4gIGdldENvaG9ydENvdW50ID0gcGFyYW1zID0+XG4gICAgdGhpcy5hcGkuZ2V0KGAvY29ob3J0L2NvdW50P3F1ZXJ5PSR7SlNPTi5zdHJpbmdpZnkocGFyYW1zKX1gKTtcbiAgY3JlYXRlQ29ob3J0ID0gcGFyYW1zID0+IHRoaXMuYXBpLnBvc3QoXCIvY29ob3J0XCIsIHBhcmFtcyk7XG4gIHJlcXVlc3RDb2hvcnRXb3JrZXJzID0gKGNvaG9ydF9pZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoYC9jb2hvcnQvJHtjb2hvcnRfaWR9L3JlcXVlc3RgLCBwYXJhbXMpO1xuICBnZXROb3RlcyA9IGlkID0+IHRoaXMuYXBpLmdldChgcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS9ub3Rlc2ApO1xuICBzYXZlTm90ZSA9IChpZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnB1dChgcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS9ub3Rlc2AsIHBhcmFtcyk7XG4gIHJlc2VuZEVtYWlsID0gaWQgPT5cbiAgICB0aGlzLmFwaS5wb3N0KGBwYXJ0bmVycy9tZS93b3JrZXJzLyR7aWR9L2VtYWlsL2NvbnNlbnQvcmVzZW5kYCk7XG4gIHBvc3RTZXR0aW5ncyA9ICh1cmwsIHBhcmFtcykgPT4gdGhpcy5hcGkucG9zdCh1cmwsIHBhcmFtcyk7XG4gIGJ0b2FUZXN0ID0gc3RyaW5nID0+IGJ0b2Eoc3RyaW5nKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEJhc2VBUEk7IiwiLy9UdXJuIFByaW1hcnkgUGFsZXR0ZVxuZXhwb3J0IGNvbnN0IHByaW1hcnkgPSBcIiMyRDMwNDdcIjsgLy9Db29sR3JheSBvciBTcGFjZUNhZGV0XG5leHBvcnQgY29uc3Qgc2Vjb25kYXJ5ID0gXCIjMDBEOUNEXCI7IC8vVHVycXVvaXNlXG5leHBvcnQgY29uc3QgZW1lcmFsZCA9IFwiIzBlZDA2N1wiO1xuZXhwb3J0IGNvbnN0IHRhcnRPcmFuZ2UgPSBcIiNmYjRkNDlcIjtcbmV4cG9ydCBjb25zdCB5ZWxsb3dPcmFuZ2UgPSBcIiNmYWE3M2NcIjtcblxuLy9UdXJuIEdyZXkgUGFsZXR0ZVxuZXhwb3J0IGNvbnN0IHNsYXRlR3JheSA9IFwiIzVmN2Q5NVwiO1xuZXhwb3J0IGNvbnN0IGNhZGV0Qmx1ZSA9IFwiIzliYjFjOFwiO1xuZXhwb3J0IGNvbnN0IHBlcml3aW5rbGUgPSBcIiNiZmNkZGRcIjtcbmV4cG9ydCBjb25zdCBhbGljZUJsdWUgPSBcIiNlMWU4ZjNcIjtcbmV4cG9ydCBjb25zdCBzbW9rZVdoaXRlID0gXCIjZjdmOWZjXCI7XG5cbi8vVHVybiBBbGVydHMgUGFsZXR0ZVxuZXhwb3J0IGNvbnN0IGFsZXJ0MCA9IHNsYXRlR3JheTtcbmV4cG9ydCBjb25zdCBhbGVydDEgPSBlbWVyYWxkO1xuZXhwb3J0IGNvbnN0IGFsZXJ0MiA9IHRhcnRPcmFuZ2U7XG5leHBvcnQgY29uc3QgYWxlcnQzID0geWVsbG93T3JhbmdlO1xuZXhwb3J0IGNvbnN0IGNlcnVsZWFuQmx1ZSA9IFwiIzQzNTdhZFwiO1xuXG4vL1R1cm4gU2Vjb25kYXJ5IFBhbGV0dGUgMVxuZXhwb3J0IGNvbnN0IHBlYWNoID0gXCIjZjljYjljXCI7XG5leHBvcnQgY29uc3QgYmFieVBpbmsgPSBcIiNmNGNjY2NcIjtcbmV4cG9ydCBjb25zdCBzcGFuaXNoUGluayA9IFwiI2U2YjhhZlwiO1xuZXhwb3J0IGNvbnN0IGJlYXVCbHVlID0gXCIjY2ZlMmYzXCI7XG5leHBvcnQgY29uc3QgY3VsdHVyZWQgPSBcIiNlM2U5ZWRcIjtcblxuLy9UdXJuIFNlY29uZGFyeSBQYWxldHRlIDJcbmV4cG9ydCBjb25zdCBibHVlQmVsbCA9IFwiI2I0YTdkNlwiO1xuZXhwb3J0IGNvbnN0IGJhYnlCbHVlRXllcyA9IFwiIzlmYzVlOFwiO1xuZXhwb3J0IGNvbnN0IHBvd2RlckJsdWUgPSBcIiNiN2VjZWNcIjtcbmV4cG9ydCBjb25zdCBob25leURldyA9IFwiI2Q5ZWFkM1wiO1xuZXhwb3J0IGNvbnN0IGJ1ZmYgPSBcIiNmZmU1OTlcIjtcblxuLy9PdGhlcnNcbmV4cG9ydCBjb25zdCBibGFjayA9IFwiIzAwMFwiO1xuZXhwb3J0IGNvbnN0IHdoaXRlID0gXCIjZmZmXCI7XG5cbi8vTm90aWNlIGNvbG9yc1xuZXhwb3J0IGNvbnN0IG5vdGljZU11dGVkID0gc2xhdGVHcmF5O1xuZXhwb3J0IGNvbnN0IG5vdGljZUVycm9yID0gXCIjZmY2YzY5XCI7XG5leHBvcnQgY29uc3Qgbm90aWNlV2FybmluZyA9IFwiI2ZhYTAzY1wiO1xuZXhwb3J0IGNvbnN0IG5vdGljZVN1Y2Nlc3MgPSBcIiMxM2MwNjNcIjtcbmV4cG9ydCBjb25zdCBub3RpY2VJbmZvID0gc2xhdGVHcmF5O1xuIiwiY29uc3QgcGFyc2VQeXRob25EYXRlID0gZGF0ZSA9PiB7XG4gIGlmICghaXNOYU4ocGFyc2VJbnQoZGF0ZSwgMTApKSkge1xuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlICogMTAwMCk7XG4gICAgY29uc3QgdGltZSA9IGQuZ2V0VGltZSgpO1xuICAgIGlmICh0aW1lKSB7XG4gICAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGltZSArIGQuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwICogMTAwMCk7XG4gICAgICBjb25zdCBvZmZzZXQgPSBkLmdldFRpbWV6b25lT2Zmc2V0KCkgLyA2MDtcbiAgICAgIGNvbnN0IGhvdXJzID0gZC5nZXRIb3VycygpO1xuICAgICAgbmV3RGF0ZS5zZXRIb3Vycyhob3VycyAtIG9mZnNldCk7XG4gICAgICByZXR1cm4gbmV3RGF0ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBwYXJzZVB5dGhvbkRhdGU7XG4iLCJpbXBvcnQgcGFyc2VQeXRob25EYXRlIGZyb20gXCIuL3BhcnNlLXB5dGhvbi1kYXRlXCI7XG5cbmNvbnN0IGZvcm1hdERhdGUgPSBkYXRlID0+IHtcbiAgY29uc3QgcGFyc2VkRGF0ZSA9IHBhcnNlUHl0aG9uRGF0ZShkYXRlKTtcbiAgaWYgKCFwYXJzZWREYXRlKSByZXR1cm4gXCJOL0FcIjtcbiAgcmV0dXJuIGAke3BhcnNlZERhdGUuZ2V0TW9udGgoKSArXG4gICAgMX0vJHtwYXJzZWREYXRlLmdldERhdGUoKX0vJHtwYXJzZWREYXRlLmdldEZ1bGxZZWFyKCl9YDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREYXRlO1xuIiwiY29uc3QgZm9ybWF0RW1haWwgPSBlbWFpbCA9PiB7XG4gIGlmICh0eXBlb2YgZW1haWwgIT09IFwic3RyaW5nXCIpIHJldHVybiBcIlwiO1xuICByZXR1cm4gZW1haWwucmVwbGFjZSgvXFxzKy9nLCBcIlwiKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdEVtYWlsO1xuIiwiY29uc3QgZm9ybWF0TmFtZSA9IG5hbWUgPT4ge1xuICBpZiAodHlwZW9mIG5hbWUgIT09IFwic3RyaW5nXCIpIHJldHVybiBcIlwiO1xuICByZXR1cm4gbmFtZS5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdE5hbWU7XG4iLCJjb25zdCBmb3JtYXRQaG9uZSA9IChwaG9uZSwgZW5jcnlwdGVkID0gZmFsc2UpID0+IHtcbiAgaWYgKHR5cGVvZiBwaG9uZSAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIFwiTi9BXCI7XG4gIGxldCBwaG9uZU51bWJlciA9IGVuY3J5cHRlZFxuICAgID8gcGhvbmVcbiAgICA6IHBob25lLnJlcGxhY2UoL1xcRC9nLCBcIlwiKS5zdWJzdHJpbmcoMCwgMTEpO1xuICBsZXQgYXJlYUNvZGU7XG4gIGlmIChwaG9uZU51bWJlci5sZW5ndGggPCAxMCkgcmV0dXJuIHBob25lTnVtYmVyO1xuICBpZiAocGhvbmVOdW1iZXIubGVuZ3RoID4gMTApIHtcbiAgICBhcmVhQ29kZSA9IHBob25lTnVtYmVyWzBdO1xuICAgIHBob25lTnVtYmVyID0gcGhvbmVOdW1iZXIuc3Vic3RyaW5nKDEsIDExKTtcbiAgfVxuICBwaG9uZU51bWJlciA9IHBob25lTnVtYmVyLm1hdGNoKC8uezEsM30vZyk7XG4gIHJldHVybiByZW5kZXJQaG9uZSh7IHBob25lOiBwaG9uZU51bWJlciwgZW5jcnlwdGVkLCBhcmVhQ29kZSB9KTtcbn07XG5cbmNvbnN0IHJlbmRlclBob25lID0gKHsgcGhvbmUsIGVuY3J5cHRlZCwgYXJlYUNvZGUgfSkgPT4ge1xuICBsZXQgcGhvbmVOdW1iZXIgPSBlbmNyeXB0ZWRcbiAgICA/IGAoJHtwaG9uZVswXX0pICR7cGhvbmVbMV19ICR7cGhvbmVbMl19JHtwaG9uZVszXX1gXG4gICAgOiBgKCR7cGhvbmVbMF19KSAke3Bob25lWzFdfS0ke3Bob25lWzJdfSR7cGhvbmVbM119YDtcbiAgcGhvbmVOdW1iZXIgPSBhcmVhQ29kZSA/IGAke2FyZWFDb2RlfSAke3Bob25lTnVtYmVyfWAgOiBwaG9uZU51bWJlcjtcbiAgcmV0dXJuIHBob25lTnVtYmVyO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UGhvbmU7XG4iLCJjb25zdCBmb3JtYXRTU04gPSBzc24gPT4ge1xuICBpZiAodHlwZW9mIHNzbiAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIFwiTi9BXCI7XG4gIGNvbnN0IHNzbk51bWJlciA9IHNzbi5yZXBsYWNlKC9cXEQvZywgXCJcIikuc3Vic3RyaW5nKDAsIDkpO1xuICBpZiAoc3NuTnVtYmVyLmxlbmd0aCA8IDkpIHJldHVybiBzc25OdW1iZXI7XG4gIHJldHVybiBgJHtzc25OdW1iZXIuc3Vic3RyaW5nKDAsIDMpfS0ke3Nzbk51bWJlci5zdWJzdHJpbmcoXG4gICAgMyxcbiAgICA1XG4gICl9LSR7c3NuTnVtYmVyLnN1YnN0cmluZyg1LCA5KX1gO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0U1NOO1xuIiwiY29uc3QgZm9ybWF0WmlwY29kZSA9IHppcGNvZGUgPT4ge1xuICBpZiAodHlwZW9mIHppcGNvZGUgIT09IFwic3RyaW5nXCIpIHJldHVybiBcIlwiO1xuICByZXR1cm4gemlwY29kZS5yZXBsYWNlKC9cXEQvZywgXCJcIikuc3Vic3RyaW5nKDAsIDUpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0WmlwY29kZTtcbiIsImNvbnN0IGdldFJlamVjdE1lc3NhZ2UgPSBwYXJ0bmVyX3R5cGUgPT4ge1xuICBpZiAoIVtcIlJJU0tfTUFOQUdFTUVOVFwiLCBcIkZDUkFfRVwiLCBcIkZDUkFfTlwiLCBcIkZDUkFcIl0uaW5jbHVkZXMocGFydG5lcl90eXBlKSlcbiAgICByZXR1cm4gXCJSZWplY3RcIjtcbiAgY29uc3QgcmVqZWN0TWVzc2FnZXMgPSB7XG4gICAgUklTS19NQU5BR0VNRU5UOiBcIlJlamVjdFwiLFxuICAgIEZDUkE6IFwiUHJlLUFkdmVyc2UgQWN0aW9uXCIsXG4gICAgRkNSQV9FOiBcIlByZS1BZHZlcnNlIEFjdGlvblwiLFxuICAgIEZDUkFfTjogXCJBZHZlcnNlIEFjdGlvblwiXG4gIH07XG4gIHJldHVybiByZWplY3RNZXNzYWdlc1twYXJ0bmVyX3R5cGVdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0UmVqZWN0TWVzc2FnZTtcbiIsImV4cG9ydCBjb25zdCBnZXRTdGF0dXMgPSBzdGF0dXMgPT4ge1xuICBjb25zdCBzdGF0dXNNYXAgPSB7XG4gICAgcmV2aWV3OiBcInJldmlld2luZ1wiLFxuICAgIHBlbmRpbmc6IFwiY29uc2lkZXJcIixcbiAgICBcInJldmlld19faWRlbnRpdHlcIjogXCJ2ZXJpZnlpbmdcIixcbiAgICBcInJldmlld19fbXZyXCI6IFwiQ29tcGxpYW5jZSBSZXZpZXdcIixcbiAgICBcInJldmlld19fc29cIjogXCJDb21wbGlhbmNlIFJldmlld1wiLFxuICAgIFwicmV2aWV3X19xYVwiOiBcIkNvbXBsaWFuY2UgUmV2aWV3XCIsXG4gICAgaW5pdGlhdGVkOiBcIlN0b3JlZFwiXG4gIH07XG5cbiAgcmV0dXJuIHN0YXR1c01hcFtzdGF0dXNdIHx8IHN0YXR1cztcbn07XG4iLCJjb25zdCBpc0RhdGUgPSB2YWx1ZSA9PiB7XG4gIGlmIChpc05hTihwYXJzZUludCh2YWx1ZSwgMTApKSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUgKiAxMDAwKTtcbiAgY29uc3QgcmlnaHROb3cgPSBuZXcgRGF0ZSgpO1xuICBpZiAoZGF0ZSA+IHJpZ2h0Tm93KSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBkYXRlLmdldFllYXIoKSA+IDEwMDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGlzRGF0ZTtcbiIsImNvbnN0IGlzT2JqZWN0ID0gZGF0YSA9PiAhIWRhdGEgJiYgZGF0YS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdDtcbiIsImNvbnN0IGlzVXJsID0gdXJsU3RyaW5nID0+IHtcbiAgY29uc3QgcmVnZXhwID0gLyhmdHB8aHR0cHxodHRwcyk6XFwvXFwvKFxcdys6ezAsMX1cXHcqQCk/KFxcUyspKDpbMC05XSspPyhcXC98XFwvKFtcXHcjITouPys9JiVAIVxcLS9dKSk/LztcbiAgcmV0dXJuIHJlZ2V4cC50ZXN0KHVybFN0cmluZyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpc1VybDtcbiIsImNvbnN0IHRlcm1zID0gW1wiVHVybiBUZWNobm9sb2dpZXMgSW5jLlwiLCBcIltDT01QQU5ZXVwiXTtcbmNvbnN0IGxlZ2FsUmVwbGFjZSA9IChvcmlnaW5hbCA9IFwiXCIsIHJlcGxhY2VtZW50ID0gXCJcIikgPT4ge1xuICBpZiAodHlwZW9mIG9yaWdpbmFsICE9PSBcInN0cmluZ1wiKSByZXR1cm4gXCJcIjtcbiAgbGV0IHJldHVyblZhbCA9IG9yaWdpbmFsO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRlcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wbHVzcGx1c1xuICAgIHJldHVyblZhbCA9IHJldHVyblZhbC5yZXBsYWNlKHRlcm1zW2ldLCByZXBsYWNlbWVudCk7XG4gIH1cbiAgcmV0dXJuIHJldHVyblZhbDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxlZ2FsUmVwbGFjZTtcbiIsImNvbnN0IG1hc2tOYW1lID0gbmFtZSA9PlxuICB0eXBlb2YgbmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBuYW1lLmxlbmd0aCA+IDAgPyBgJHtuYW1lLnNsaWNlKDAsIDEpfS5gIDogbmFtZTtcblxuZXhwb3J0IGRlZmF1bHQgbWFza05hbWU7XG4iLCJpbXBvcnQgaXNPYmplY3QgZnJvbSBcIi4vaXMtb2JqZWN0XCI7XG5cbmNvbnN0IG9iamVjdFRvUXVlcnkgPSBxdWVyeSA9PiB7XG4gIGlmICghaXNPYmplY3QocXVlcnkpKSByZXR1cm4gbnVsbDtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHF1ZXJ5KTtcbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcXVlcnlBcnJheSA9IGtleXMubWFwKGtleSA9PiBgJHtrZXl9PSR7cXVlcnlba2V5XX1gKTtcbiAgcmV0dXJuIGA/JHtxdWVyeUFycmF5LmpvaW4oXCImXCIpfWA7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBvYmplY3RUb1F1ZXJ5O1xuIiwiY29uc3QgcGFyc2VRdWVyeSA9IHF1ZXJ5ID0+IHtcbiAgaWYgKHR5cGVvZiBxdWVyeSAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIHF1ZXJ5O1xuICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5LnN0YXJ0c1dpdGgoXCI/XCIpID8gcXVlcnkuc2xpY2UoMSkgOiBxdWVyeSk7XG4gIGNvbnN0IG9iaiA9IHt9O1xuICBwYXJhbXMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH0pO1xuICByZXR1cm4gb2JqO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcGFyc2VRdWVyeTtcbiIsImltcG9ydCAqIGFzIGNvbG9ycyBmcm9tIFwiLi4vc3R5bGVzL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgY29uc3QgcGlja0NvbG9yID0gc3RhdHVzID0+IHtcbiAgc3dpdGNoICh0eXBlb2Ygc3RhdHVzID09PSBcInN0cmluZ1wiID8gc3RhdHVzLnRvTG93ZXJDYXNlKCkgOiBzdGF0dXMpIHtcbiAgICBjYXNlIFwiZmlyc3Rfbm90aWNlXCI6XG4gICAgY2FzZSBcInNlY29uZF9ub3RpY2VcIjpcbiAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgIGNhc2UgXCJjb25zaWRlclwiOlxuICAgICAgcmV0dXJuIGNvbG9ycy5ub3RpY2VXYXJuaW5nO1xuICAgIGNhc2UgXCJ1bnZlcmlmaWVkXCI6XG4gICAgY2FzZSBcIm5vdF92ZXJpZmllZFwiOlxuICAgIGNhc2UgXCJmcmF1ZFwiOlxuICAgIGNhc2UgXCJub3RfbWF0Y2hlZFwiOlxuICAgIGNhc2UgXCJyZWplY3RlZFwiOlxuICAgIGNhc2UgXCJkZWNlYXNlZFwiOlxuICAgIGNhc2UgXCJ3aXRoZHJhd25cIjpcbiAgICAgIHJldHVybiBjb2xvcnMubm90aWNlRXJyb3I7XG4gICAgY2FzZSBcInZlcmlmaWVkXCI6XG4gICAgY2FzZSBcIm1hdGNoZWRcIjpcbiAgICBjYXNlIFwidmFsaWRcIjpcbiAgICBjYXNlIFwicmVhZHlcIjpcbiAgICBjYXNlIFwiY29tcGxldGVcIjpcbiAgICBjYXNlIFwiY2xlYXJcIjpcbiAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgY2FzZSBcInJhbmRvbWl6ZWRcIjpcbiAgICBjYXNlIFwiYXBwcm92ZWRcIjpcbiAgICAgIHJldHVybiBjb2xvcnMubm90aWNlU3VjY2VzcztcbiAgICBjYXNlIFwicHJvY2Vzc2luZ1wiOlxuICAgIGNhc2UgXCJyZXZpZXdpbmdcIjpcbiAgICBjYXNlIFwicmV2aWV3XCI6XG4gICAgY2FzZSBcImNvbnNlbnRcIjpcbiAgICBjYXNlIFwiZW1haWxlZFwiOlxuICAgIGNhc2UgXCJpbml0aWF0ZWRcIjpcbiAgICBjYXNlIFwiYXR0ZW50aW9uXCI6XG4gICAgY2FzZSBcInZlcmlmeWluZ1wiOlxuICAgIGNhc2UgXCJyZXZpZXdfX212clwiOlxuICAgIGNhc2UgXCJyZXZpZXdfX3FhXCI6XG4gICAgICByZXR1cm4gY29sb3JzLm5vdGljZUluZm87XG4gICAgY2FzZSBcIm5vbmVcIjpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwiZ3JheVwiO1xuICB9XG59O1xuIiwiaW1wb3J0ICogYXMgY29sb3JzIGZyb20gXCIuLi9zdHlsZXMvY29uc3RhbnRzXCI7XG5cbmNvbnN0IHBpY2tTY29yZUNvbG9yID0gc2NvcmUgPT4ge1xuICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHNjb3JlLCAxMCk7XG4gIGlmICh2YWx1ZSA+IDg5KSByZXR1cm4gY29sb3JzLm5vdGljZVN1Y2Nlc3M7XG4gIGlmICh2YWx1ZSA+IDY5KSByZXR1cm4gY29sb3JzLm5vdGljZVdhcm5pbmc7XG4gIHJldHVybiBjb2xvcnMubm90aWNlRXJyb3I7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBwaWNrU2NvcmVDb2xvcjsiLCJleHBvcnQgY29uc3QgcHJldHRpZnlEYXRlID0gZGF0ZVN0cmluZyA9PiB7XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgY29uc3QgbW9udGggPSBkLnRvVVRDU3RyaW5nKCkuc2xpY2UoOCwgMTEpO1xuICBjb25zdCBERCA9IGQudG9VVENTdHJpbmcoKS5zbGljZSg1LCA3KTtcbiAgY29uc3QgWVlZWSA9IGQudG9VVENTdHJpbmcoKS5zbGljZSgxMiwgMTYpO1xuICByZXR1cm4gYCR7bW9udGh9ICR7RER9LCAke1lZWVl9YDtcbn07XG4iLCJpbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XG5cbmV4cG9ydCBjb25zdCBmYWxzeVN0cmluZ3MgPSBbXCJOb25lXCIsIFwibm9uZVwiLCBcIk4vQVwiXTtcblxuY29uc3QgdmFsdWVFeGlzdHMgPSB2YWx1ZSA9PiB7XG4gIGlmICghdmFsdWUpIHJldHVybiBmYWxzZTtcbiAgaWYgKF8uaXNBcnJheSh2YWx1ZSkgfHwgXy5pc09iamVjdCh2YWx1ZSkpIHJldHVybiAhXy5pc0VtcHR5KHZhbHVlKTtcbiAgaWYgKF8uaW5kZXhPZihmYWxzeVN0cmluZ3MsIHZhbHVlKSA+IC0xKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgdmFsdWVFeGlzdHM7XG4iLCJpbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQgdmFsdWVFeGlzdHMgZnJvbSBcIi4vdmFsdWUtZXhpc3RzXCI7XG5cbmNvbnN0IHJlbmRlckRldGFpbFZhbHVlID0gKHZhbHVlLCBkZWVwID0gZmFsc2UpID0+IHtcbiAgaWYgKF8uaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBpZiAoZGVlcClcbiAgICAgIHJldHVybiB2YWx1ZS5tYXAoXG4gICAgICAgIHZhbCA9PlxuICAgICAgICAgIF8uaXNPYmplY3QodmFsKVxuICAgICAgICAgICAgPyByZW5kZXJOZXN0ZWRPYmplY3QodmFsLCBkZWVwKVxuICAgICAgICAgICAgOiByZW5kZXJEZXRhaWxWYWx1ZSh2YWwsIGRlZXApXG4gICAgICApO1xuICAgIHJldHVybiB2YWx1ZS5qb2luKFwiIC8gXCIpO1xuICB9XG4gIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkgcmV0dXJuIHJlbmRlck5lc3RlZE9iamVjdCh2YWx1ZSwgZGVlcCk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmNvbnN0IHJlbmRlck5lc3RlZE9iamVjdCA9IChuZXN0ZWQgPSB7fSwgZGVlcCA9IGZhbHNlKSA9PiB7XG4gIGNvbnN0IHZhbHVlcyA9IF8uZmlsdGVyKG5lc3RlZCwgdmFsdWUgPT4gdmFsdWVFeGlzdHModmFsdWUpKTtcbiAgcmV0dXJuIHZhbHVlcy5tYXAodmFsdWUgPT4gcmVuZGVyRGV0YWlsVmFsdWUodmFsdWUsIGRlZXApKS5qb2luKFwiIC8gXCIpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyRGV0YWlsVmFsdWU7XG4iLCJpbXBvcnQgdmFsdWVFeGlzdHMgZnJvbSBcIi4vdmFsdWUtZXhpc3RzXCI7XG5cbmNvbnN0IHNlbGVjdE1hc3RlcktleSA9IChkYXRhLCBwcm9wZXJ0eSkgPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkgfHwgZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBcIlwiO1xuICBsZXQgbWFzdGVyS2V5O1xuICBjb25zdCBibHVlcHJpbnQgPSBkYXRhWzBdO1xuICBpZiAodmFsdWVFeGlzdHMoYmx1ZXByaW50W3Byb3BlcnR5XSkpIHtcbiAgICBtYXN0ZXJLZXkgPSBwcm9wZXJ0eTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwb3NpYmxlS2V5cyA9IE9iamVjdC5rZXlzKGJsdWVwcmludCk7XG4gICAgbWFzdGVyS2V5ID0gcG9zaWJsZUtleXMuZmluZChrZXkgPT4gdmFsdWVFeGlzdHMoYmx1ZXByaW50W2tleV0pKTtcbiAgfVxuICByZXR1cm4gbWFzdGVyS2V5O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgc2VsZWN0TWFzdGVyS2V5O1xuIiwiaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuXG4vKiogQG5hbWVzcGFjZSB1dGlsaXR5X2Z1bmN0aW9ucyAqL1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgdXRpbGl0eV9mdW5jdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gdGhlIHR5cGVvZiB0aGUgdmFsdWUgc2hvdWxkIGJlIHwgc3RyaW5nLCBudW1iZXIsIGJvb2xlYW5cbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSBmYWxsYmFjayAtIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgdmFsdWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gdXBkYXRlIHRoZSBvYmplY3Qga2V5IHdpdGhcbiAqIEBkZXNjIFNldHMgYSB2YWx1ZSBvZiBhIHNwZWNpZmljIHR5cGUgb24gcHJvdmlkZWQgb2JqZWN0J3Mgc3RpcHVsYXRlZCBwcm9wZXJ0eS9rZXkgd2l0aCBhbiBvcHRpb25hbCBkZWZhdWx0L2ZhbGxiYWNrIHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRWYWx1ZSA9ICh0eXBlLCBzZWxmLCBwcm9wZXJ0eSwgZmFsbGJhY2ssIHZhbHVlID0gZmFsbGJhY2spID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gdHlwZSkgcmV0dXJuO1xuICBzZWxmW3Byb3BlcnR5XSA9IHZhbHVlO1xufTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIHV0aWxpdHlfZnVuY3Rpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gdGhlIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7KHN0cmluZ3xhcnJheSl9IG9wdGlvbnMgLSBzdHJpbmcga2V5IG9mIHNlbGYgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIGFycmF5IG9mIGNob2ljZXMgb3IgYW4gYXJyYXkgb2YgY2hvaWNlc1xuICogQHBhcmFtIHsqfSBmYWxsYmFjayAtIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgdmFsdWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gdXBkYXRlIHRoZSBvYmplY3Qga2V5IHdpdGhcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gZmFjdG9yeSB0byBoYXJkIGJha2UgdGhlIHByb3BlcnR5IHRvIGJlIG1vZGlmaWVkIGFuZCBhIGZhbGxiYWNrIChvcHRpb25hbClcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE9wdGlvbiA9IChcbiAgc2VsZixcbiAgcHJvcGVydHksXG4gIG9wdGlvbnMsXG4gIGZhbGxiYWNrLFxuICB2YWx1ZSA9IGZhbGxiYWNrXG4pID0+IHtcbiAgY29uc3QgYWxsb3dlZCA9IEFycmF5LmlzQXJyYXkob3B0aW9ucykgPyBvcHRpb25zIDogc2VsZltvcHRpb25zXTtcbiAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHZhbHVlKSkgcmV0dXJuO1xuICBzZWxmW3Byb3BlcnR5XSA9IHZhbHVlO1xufTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIHV0aWxpdHlfZnVuY3Rpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSB2YWx1ZSAtIHRoZSB0cnV0aHkgdmFsdWUgdG8gYmUgc2V0XG4gKiBAZGVzYyBXaWxsIHNldCBhIHRydXRoeSB2YWx1ZSBhbmQgaWdub3JlIGFueXRoaW5nIHRoYXQgY2FzdHMgdG8gZmFsc2UgKCEhKVxuICovXG5leHBvcnQgY29uc3Qgc2V0VHJ1dGh5ID0gKHNlbGYsIHByb3BlcnR5LCB2YWx1ZSkgPT4ge1xuICBpZiAoIXZhbHVlKSByZXR1cm47XG4gIHNlbGZbcHJvcGVydHldID0gdmFsdWU7XG59O1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgdXRpbGl0eV9mdW5jdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlIHRvXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIGZhbHN5IHZhbHVlIHRvIGJlIHNldFxuICogQGRlc2MgV2lsbCBzZXQgYSBmYWxzeSB2YWx1ZSBhbmQgaWdub3JlIGFueXRoaW5nIHRoYXQgY2FzdHMgdG8gdHJ1ZSAoISEhKVxuICovXG5leHBvcnQgY29uc3Qgc2V0RmFsc3kgPSAoc2VsZiwgcHJvcGVydHksIHZhbHVlKSA9PiB7XG4gIGlmICghdmFsdWUpIHJldHVybjtcbiAgc2VsZltwcm9wZXJ0eV0gPSAhdmFsdWU7XG59O1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgdXRpbGl0eV9mdW5jdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAZGVzYyBUb2dnbGVzIGEgYm9vbGVhbiB2YWx1ZVxuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlQm9vbCA9IChzZWxmLCBwcm9wZXJ0eSkgPT4gKCkgPT4ge1xuICBpZiAodHlwZW9mIHNlbGZbcHJvcGVydHldICE9PSBcImJvb2xlYW5cIikgcmV0dXJuO1xuICBzZWxmW3Byb3BlcnR5XSA9ICFzZWxmW3Byb3BlcnR5XTtcbn07XG5cbi8qKiBAbmFtZXNwYWNlIGZ1bmN0aW9uX2ZhY3RvcmllcyAqL1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgZnVuY3Rpb25fZmFjdG9yaWVzXG4gKiBAaW1wbGVtZW50cyB7c2V0VmFsdWV9XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIGJvb2xlYW4sIHN0cmluZywgb2JqZWN0LCBudWxsLCBldGMuXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSBbZmFsbGJhY2tdIC0gYSBkZWZhdWx0IHZhbHVlIHRvIGJlIHVzZWQgaW4gbGlldSBvZiBhIGZpbmFsIHZhbHVlXG4gKiBAcmV0dXJucyB7c2V0VmFsdWV9IC0gc2V0VmFsdWUgZnVuY3Rpb24gd2l0aCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHNcbiAqIEBkZXNjIEZhY3RvcnkgZm9yIGdlbmVyYXRpbmcgYSB2YWx1ZSBzZXR0ZXJcbiAqL1xuZXhwb3J0IGNvbnN0IHNldHRlckZhY3RvcnkgPSAodHlwZSwgc2VsZiwgcHJvcGVydHksIGZhbGxiYWNrID0gdW5kZWZpbmVkKSA9PlxuICBfLnBhcnRpYWwoc2V0VmFsdWUsIHR5cGUsIHNlbGYsIHByb3BlcnR5LCBmYWxsYmFjayk7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiBmdW5jdGlvbl9mYWN0b3JpZXNcbiAqIEBleHRlbmRzIHtzZXR0ZXJGYWN0b3J5fVxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBib29sZWFuLCBzdHJpbmcsIG9iamVjdCwgbnVsbCwgZXRjLlxuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGEgZGVmYXVsdCB2YWx1ZSB0byBiZSB1c2VkIGluIGxpZXUgb2YgYSBmaW5hbCB2YWx1ZVxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGEgdmFsdWUgc2V0dGVyIHdpdGggYXBwbGllZCBhcmd1bWVudHNcbiAqIEBkZXNjIEEgY3VycmllZCBmYWN0b3J5IGZvciBnZW5lcmF0aW5nIGEgdmFsdWUgc2V0dGVyXG4gKi9cbmV4cG9ydCBjb25zdCBzZXR0ZXJGYWN0b3J5Q3VycmllZCA9IF8uY3Vycnkoc2V0dGVyRmFjdG9yeSk7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiBmdW5jdGlvbl9mYWN0b3JpZXNcbiAqIEBleHRlbmRzIHt0b2dnbGVCb29sfVxuICogQGRlc2MgQSBjdXJyaWVkIGZhY3RvcnkgZm9yIGdlbmVyYXRpbmcgdG9nZ2xlQm9vbCgpIHdpdGggYXBwbGllZCBhcmd1bWVudHNcbiAqIEByZXR1cm5zIHt0b2dnbGVCb29sfSBBIGN1cnJpZWQgdmVyc2lvbiBvZiB0aGUgdG9nZ2xlQm9vbCBmdW5jdGlvblxuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlQm9vbEN1cnJpZWQgPSBfLmN1cnJ5KHRvZ2dsZUJvb2wpO1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgZnVuY3Rpb25fZmFjdG9yaWVzXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSBbZmFsbGJhY2tdIC0gYSBkZWZhdWx0IHZhbHVlIHRvIGJlIHVzZWQgaW4gbGlldSBvZiBhIGZpbmFsIHZhbHVlXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gYSB2YWx1ZSBzZXR0ZXIgd2l0aCBwcmUtcG9wdWxhdGVkIGRlcGVuZGVuY2llc1xuICogQGRlc2MgQSBmYWN0b3J5IGZvciBnZW5lcmF0aW5nIGEgc3RyaW5nIHZhbHVlIHNldHRlciwgaWYgdmFsdWUgaXMgbm90IGEgc3RyaW5nIGV4aXRzIHdpdGhvdXQgc2lkZS1lZmZlY3RzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTdHJpbmdGYWN0b3J5ID0gc2V0dGVyRmFjdG9yeUN1cnJpZWQoXCJzdHJpbmdcIik7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiBmdW5jdGlvbl9mYWN0b3JpZXNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlIHRvXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBhIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgZmluYWwgdmFsdWVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBhIHZhbHVlIHNldHRlciB3aXRoIHByZS1wb3B1bGF0ZWQgZGVwZW5kZW5jaWVzXG4gKiBAZGVzYyBBIGZhY3RvcnkgZm9yIGdlbmVyYXRpbmcgYSBudW1iZXIgdmFsdWUgc2V0dGVyLCBpZiB2YWx1ZSBpcyBub3QgYSBzdHJpbmcgZXhpdHMgd2l0aG91dCBzaWRlLWVmZmVjdHNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE51bWJlckZhY3RvcnkgPSBzZXR0ZXJGYWN0b3J5Q3VycmllZChcIm51bWJlclwiKTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIGZ1bmN0aW9uX2ZhY3Rvcmllc1xuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2UgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGEgZGVmYXVsdCB2YWx1ZSB0byBiZSB1c2VkIGluIGxpZXUgb2YgYSBmaW5hbCB2YWx1ZVxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGEgdmFsdWUgc2V0dGVyIHdpdGggcHJlLXBvcHVsYXRlZCBkZXBlbmRlbmNpZXNcbiAqIEBkZXNjIEEgZmFjdG9yeSBmb3IgZ2VuZXJhdGluZyBhIGJvb2xlYW4gdmFsdWUgc2V0dGVyLCBpZiB2YWx1ZSBpcyBub3QgYSBzdHJpbmcgZXhpdHMgd2l0aG91dCBzaWRlLWVmZmVjdHNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEJvb2xGYWN0b3J5ID0gc2V0dGVyRmFjdG9yeUN1cnJpZWQoXCJib29sZWFuXCIpO1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgZnVuY3Rpb25fZmFjdG9yaWVzXG4gKiBAZXh0ZW5kcyB7c2V0VHJ1dGh5fVxuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2UgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdHJ1dGh5IHZhbHVlIHRvIGJlIHNldFxuICovXG5leHBvcnQgY29uc3Qgc2V0VHJ1dGh5Q3VycmllZCA9IF8uY3Vycnkoc2V0VHJ1dGh5KTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIGZ1bmN0aW9uX2ZhY3Rvcmllc1xuICogQGV4dGVuZHMge3NldFRydXRoeX1cbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlIHRvXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIGZhbHN5IHZhbHVlIHRvIGJlIHNldFxuICovXG5leHBvcnQgY29uc3Qgc2V0RmFsc3lDdXJyaWVkID0gXy5jdXJyeShzZXRGYWxzeSk7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiBmdW5jdGlvbl9mYWN0b3JpZXNcbiAqIEBpbXBsZW1lbnRzIHtzZXRPcHRpb259XG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsoc3RyaW5nfGFycmF5KX0gb3B0aW9ucyAtIHN0cmluZyBrZXkgb2Ygc2VsZiBvYmplY3QgdGhhdCBob2xkcyB0aGUgYXJyYXkgb2YgY2hvaWNlcyBvciBhbiBhcnJheSBvZiBjaG9pY2VzXG4gKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBhIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgZmluYWwgdmFsdWVcbiAqIEByZXR1cm5zIHtzZXRPcHRpb259XG4gKi9cbmV4cG9ydCBjb25zdCBzZXRPcHRpb25GYWN0b3J5ID0gKFxuICBzZWxmLFxuICBwcm9wZXJ0eSxcbiAgb3B0aW9ucyxcbiAgZmFsbGJhY2sgPSB1bmRlZmluZWRcbikgPT4gXy5wYXJ0aWFsKHNldE9wdGlvbiwgc2VsZiwgcHJvcGVydHksIG9wdGlvbnMsIGZhbGxiYWNrKTtcblxuLyoqXG4gKiBAZnVuY1xuICogQGV4dGVuZHMge3NldE9wdGlvbkZhY3Rvcnl9XG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsoc3RyaW5nfGFycmF5KX0gb3B0aW9ucyAtIHN0cmluZyBrZXkgb2Ygc2VsZiBvYmplY3QgdGhhdCBob2xkcyB0aGUgYXJyYXkgb2YgY2hvaWNlcyBvciBhbiBhcnJheSBvZiBjaG9pY2VzXG4gKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBhIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgZmluYWwgdmFsdWVcbiAqIEByZXR1cm5zIHtzZXRPcHRpb259XG4gKi9cbmV4cG9ydCBjb25zdCBzZXRPcHRpb25GYWN0b3J5Q3VycmllZCA9IF8uY3Vycnkoc2V0T3B0aW9uRmFjdG9yeSk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZGVzYyBVc2VkIHRvIGNyZWF0ZSBtb2J4IHJlYWR5IG1vZGVscyB3aXRoIHRoZSBtb3N0IGNvbW1vbiBzZXR0ZXJzIGJvb3RzdHJhcHBlZFxuICovXG5leHBvcnQgY2xhc3MgU2V0dGVyIHtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IHRvIGJlIG1vZGlmaWVkXG4gICAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSByZXR1cm5lZCBmdW5jdGlvbidzIHZhbHVlIGFyZ3VtZW50XG4gICAqIEByZXR1cm5zIHtzZXRWYWx1ZX0gc2V0VmFsdWUgZnVuY3Rpb24gd2l0aCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHNcbiAgICogQGRlc2MgZmFjdG9yeSB0byByZXR1cm4gYSBzdHJpbmcgc2V0dGVyXG4gICAqL1xuICBzZXRTdHJpbmdGYWN0b3J5ID0gc2V0U3RyaW5nRmFjdG9yeSh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IHRvIGJlIG1vZGlmaWVkXG4gICAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSByZXR1cm5lZCBmdW5jdGlvbidzIHZhbHVlIGFyZ3VtZW50XG4gICAqIEByZXR1cm5zIHtzZXRWYWx1ZX0gc2V0VmFsdWUgZnVuY3Rpb24gd2l0aCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHNcbiAgICogQGRlc2MgZmFjdG9yeSB0byByZXR1cm4gYSBudW1iZXIgc2V0dGVyXG4gICAqL1xuICBzZXROdW1iZXJGYWN0b3J5ID0gc2V0TnVtYmVyRmFjdG9yeSh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IHRvIGJlIG1vZGlmaWVkXG4gICAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSByZXR1cm5lZCBmdW5jdGlvbidzIHZhbHVlIGFyZ3VtZW50XG4gICAqIEByZXR1cm5zIHtzZXRWYWx1ZX0gc2V0VmFsdWUgZnVuY3Rpb24gd2l0aCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHNcbiAgICogQGRlc2MgZmFjdG9yeSB0byByZXR1cm4gYSBib29sZWFuIHNldHRlclxuICAgKi9cbiAgc2V0Qm9vbEZhY3RvcnkgPSBzZXRCb29sRmFjdG9yeSh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IChib29sKSB0byBiZSBpbnZlcnRlZFxuICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IGZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgdGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQgYW5kIGFwcGxpZWQgdG8gdGhlIHByb3BlcnR5XG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGEgdHJ1dGh5IHNldHRlclxuICAgXG4gICAqL1xuICBzZXRUcnV0aHlGYWN0b3J5ID0gc2V0VHJ1dGh5Q3VycmllZCh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IChib29sKSB0byBiZSBpbnZlcnRlZFxuICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IGZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgdGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQgYW5kIGFwcGxpZWQgdG8gdGhlIHByb3BlcnR5XG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGEgZmFsc3kgc2V0dGVyXG4gICBcbiAgICovXG4gIHNldEZhbHN5RmFjdG9yeSA9IHNldEZhbHN5Q3VycmllZCh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IHRvIGJlIG1vZGlmaWVkXG4gICAqIEBwYXJhbSB7KHN0cmluZ3xhcnJheSl9IG9wdGlvbnMgLSBzdHJpbmcga2V5IG9mIHNlbGYgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIGFycmF5IG9mIGNob2ljZXMgb3IgYW4gYXJyYXkgb2YgY2hvaWNlc1xuICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IGZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgdGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQgYW5kIGFwcGxpZWQgdG8gdGhlIHByb3BlcnR5XG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGFuIG9wdGlvbiBzZXR0ZXJcbiAgICovXG4gIHNldE9wdGlvbkZhY3RvcnkgPSBzZXRPcHRpb25GYWN0b3J5Q3VycmllZCh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IChib29sKSB0byBiZSBpbnZlcnRlZFxuICAgKiBAcGFyYW0ge2FycmF5fSBvcHRpb25zIC0gYW4gYXJyYXkgb2YgdGhlIHBvc3NpYmxlIGNob2ljZXMgYWxsb3dlZFxuICAgKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgcmV0dXJuZWQgZnVuY3Rpb24ncyB2YWx1ZSBhcmd1bWVudFxuICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IGZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgdGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQgYW5kIGFwcGxpZWQgdG8gdGhlIHByb3BlcnR5XG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGEgYm9vbGVhbiB0b2dnbGVyXG4gICAqL1xuICB0b2dnbGVCb29sRmFjdG9yeSA9IHRvZ2dsZUJvb2xDdXJyaWVkKHRoaXMpO1xufVxuIiwiZnVuY3Rpb24gc3RvcmFnZU1vY2soKSB7XG4gIGNvbnN0IHN0b3JhZ2UgPSB7fTtcblxuICByZXR1cm4ge1xuICAgIHNldEl0ZW0oa2V5LCB2YWx1ZSkge1xuICAgICAgc3RvcmFnZVtrZXldID0gdmFsdWUgfHwgXCJcIjtcbiAgICB9LFxuICAgIGdldEl0ZW0oa2V5KSB7XG4gICAgICByZXR1cm4ga2V5IGluIHN0b3JhZ2UgPyBzdG9yYWdlW2tleV0gOiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlSXRlbShrZXkpIHtcbiAgICAgIGRlbGV0ZSBzdG9yYWdlW2tleV07XG4gICAgfSxcbiAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHN0b3JhZ2UpLmxlbmd0aDtcbiAgICB9LFxuICAgIGtleShpKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc3RvcmFnZSk7XG4gICAgICByZXR1cm4ga2V5c1tpXSB8fCBudWxsO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RvcmFnZU1vY2s7XG4iLCJjb25zdCB0b0Jvb2xlYW4gPSB2YWx1ZSA9PiB7XG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCI7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIHZhbHVlID4gMDtcbiAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUubGVuZ3RoID4gMDtcbiAgICAgIHJldHVybiAhKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKS5sZW5ndGggPT09IDApO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRvQm9vbGVhbjtcbiIsImltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcbmltcG9ydCByZWxhdGl2ZVRpbWUgZnJvbSBcImRheWpzL3BsdWdpbi9yZWxhdGl2ZVRpbWVcIjtcbmltcG9ydCB1dGMgZnJvbSBcImRheWpzL3BsdWdpbi91dGNcIjtcbmltcG9ydCBwYXJzZVB5dGhvbkRhdGUgZnJvbSBcIi4vcGFyc2UtcHl0aG9uLWRhdGVcIjtcblxuZGF5anMuZXh0ZW5kKHJlbGF0aXZlVGltZSk7XG5kYXlqcy5leHRlbmQodXRjKTtcblxuY29uc3QgdG9SZWxhdGl2ZURhdGUgPSBkYXRlID0+IHtcbiAgaWYgKHR5cGVvZiBkYXRlICE9PSBcIm51bWJlclwiKSByZXR1cm4gXCJOL0FcIjtcbiAgY29uc3QgcGFyc2VkRGF0ZSA9IHBhcnNlUHl0aG9uRGF0ZShkYXRlKTtcbiAgaWYgKCFwYXJzZWREYXRlKSByZXR1cm4gXCJOL0FcIjtcbiAgY29uc3QgcmVsYXRpdmVEYXRlID0gZGF5anMocGFyc2VkRGF0ZSk7XG4gIGNvbnN0IG5vdyA9IGRheWpzKCkudXRjT2Zmc2V0KHBhcnNlZERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gIGNvbnN0IGFkanVzdGVkTm93ID0gbm93LnN1YnRyYWN0KHBhcnNlZERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAvIDYwLCBcImhvdXJcIik7XG4gIGlmIChhZGp1c3RlZE5vdy5kaWZmKHJlbGF0aXZlRGF0ZSwgXCJkYXlcIikgPCA4KSByZXR1cm4gcmVsYXRpdmVEYXRlLmZyb20oYWRqdXN0ZWROb3cpO1xuICByZXR1cm4gcmVsYXRpdmVEYXRlLmZvcm1hdChcIk0vREQvWVlZWVwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0b1JlbGF0aXZlRnJvbUlTTyA9IGRhdGUgPT4ge1xuICBpZiAodHlwZW9mIGRhdGUgIT09IFwic3RyaW5nXCIpIHJldHVybiBcIk4vQVwiO1xuICBjb25zdCByZWxhdGl2ZURhdGUgPSBkYXlqcyhkYXRlKTtcbiAgaWYgKCFyZWxhdGl2ZURhdGUuaXNWYWxpZCgpKSByZXR1cm4gXCJOL0FcIjtcbiAgY29uc3Qgbm93ID0gZGF5anMoKS51dGNPZmZzZXQocmVsYXRpdmVEYXRlLnV0Y09mZnNldCgpKTtcbiAgaWYgKG5vdy5kaWZmKHJlbGF0aXZlRGF0ZSwgXCJkYXlcIikgPCA4KSByZXR1cm4gcmVsYXRpdmVEYXRlLmZyb20obm93KTtcbiAgcmV0dXJuIHJlbGF0aXZlRGF0ZS5mb3JtYXQoXCJNL0REL1lZWVlcIik7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB0b1JlbGF0aXZlRGF0ZTtcbiIsImltcG9ydCB7IHVwcGVyRmlyc3QgfSBmcm9tIFwibG9kYXNoXCI7XG5cbmNvbnN0IHRvU2VudGVuY2VDYXNlID0gc3RyID0+IHtcbiAgbGV0IHNlbnRlbmNlID0gc3RyLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHBlcmlvZCA9IFwiLiBcIjtcbiAgY29uc3QgZXhjbGFtYXRpb24gPSBcIiEgXCI7XG4gIGNvbnN0IHF1ZXN0aW9uID0gXCI/IFwiO1xuICBjb25zdCB0ZXJtaW5hdGlvbnMgPSBbcGVyaW9kLCBleGNsYW1hdGlvbiwgcXVlc3Rpb25dO1xuICB0ZXJtaW5hdGlvbnMuZm9yRWFjaCh0ZXJtaW5hdGlvbiA9PiB7XG4gICAgc2VudGVuY2UgPSBzZW50ZW5jZVxuICAgICAgLnNwbGl0KHRlcm1pbmF0aW9uKVxuICAgICAgLm1hcCh1cHBlckZpcnN0KVxuICAgICAgLmpvaW4odGVybWluYXRpb24pO1xuICB9KTtcbiAgcmV0dXJuIHNlbnRlbmNlO1xufTtcbmV4cG9ydCBkZWZhdWx0IHRvU2VudGVuY2VDYXNlO1xuIiwiY29uc3QgdG9UaXRsZUNhc2UgPSBzdHIgPT4ge1xuICBjb25zdCBzdHJpbmcgPSB0eXBlb2Ygc3RyID09PSBcInN0cmluZ1wiID8gc3RyIDogU3RyaW5nKHN0cik7XG4gIGNvbnN0IHN0cl9sb3dlcmNhc2VkID0gc3RyaW5nLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHdvcmRzID0gc3RyX2xvd2VyY2FzZWQuc3BsaXQoXCIgXCIpO1xuICBjb25zdCB0aXRsZUNhc2VkTGlzdCA9IHdvcmRzLm1hcCh3b3JkID0+IHtcbiAgICBjb25zdCBmaXJzdENoYXIgPSB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IHJlbWFpbmluZ0NoYXJzID0gd29yZC5zbGljZSgxKTtcbiAgICByZXR1cm4gYCR7Zmlyc3RDaGFyfSR7cmVtYWluaW5nQ2hhcnN9YDtcbiAgfSk7XG4gIHJldHVybiB0aXRsZUNhc2VkTGlzdC5qb2luKFwiIFwiKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRvVGl0bGVDYXNlO1xuIiwiZXhwb3J0IGNvbnN0IElOSVRJQVRFRCA9IFwiaW5pdGlhdGVkXCI7XG5leHBvcnQgY29uc3QgUEVORElORyA9IFwicGVuZGluZ1wiO1xuZXhwb3J0IGNvbnN0IFdJVEhEUkFXTiA9IFwid2l0aGRyYXduXCI7XG5leHBvcnQgY29uc3QgQVBQUk9WRUQgPSBcImFwcHJvdmVkXCI7XG5leHBvcnQgY29uc3QgUkVKRUNURUQgPSBcInJlamVjdGVkXCI7XG5leHBvcnQgY29uc3QgQ09OU0VOVCA9IFwiY29uc2VudFwiO1xuZXhwb3J0IGNvbnN0IEVNQUlMRUQgPSBcImVtYWlsZWRcIjtcbmV4cG9ydCBjb25zdCBSRVZJRVcgPSBcInJldmlld1wiO1xuZXhwb3J0IGNvbnN0IFJFVklFV0lORyA9IFwicmV2aWV3aW5nXCI7XG5leHBvcnQgY29uc3QgQ09OU0lERVIgPSBcImNvbnNpZGVyXCI7XG5leHBvcnQgY29uc3QgUFJPQ0VTU0lORyA9IFwicHJvY2Vzc2luZ1wiO1xuZXhwb3J0IGNvbnN0IFBFTkRJTkdfRElTUFVURSA9IFwicGVuZGluZ19fZGlzcHV0ZVwiO1xuZXhwb3J0IGNvbnN0IFBFTkRJTkdfRklSU1RfTk9USUNFID0gXCJwZW5kaW5nX19maXJzdF9ub3RpY2VcIjtcbmV4cG9ydCBjb25zdCBQRU5ESU5HX1NFQ09ORF9OT1RJQ0UgPSBcInBlbmRpbmdfX3NlY29uZF9ub3RpY2VcIjtcbmV4cG9ydCBjb25zdCBGSVJTVF9OT1RJQ0UgPSBcImZpcnN0X25vdGljZVwiO1xuZXhwb3J0IGNvbnN0IFNFQ09ORF9OT1RJQ0UgPSBcInNlY29uZF9ub3RpY2VcIjtcbmV4cG9ydCBjb25zdCBTU05fVFJBQ0VfRkFJTEVEID0gXCJyZXZpZXdfX2lkZW50aXR5XCI7XG5leHBvcnQgY29uc3QgTVZSX0ZBSUxFRCA9IFwicmV2aWV3X19tdnJcIjtcbmV4cG9ydCBjb25zdCBDT01QTElBTkNFID0gXCJyZXZpZXdfX3FhXCI7XG5leHBvcnQgY29uc3QgQ09NUExJQU5DRV9TTyA9IFwicmV2aWV3X19zb1wiO1xuZXhwb3J0IGNvbnN0IFZFUklGWUlORyA9IFwidmVyaWZ5aW5nXCI7XG5leHBvcnQgY29uc3QgQ09NUExJQU5DRVJFVklFVyA9IFwiQ29tcGxpYW5jZSBSZXZpZXdcIjtcbmV4cG9ydCBjb25zdCBTVE9SRUQgPSBcIlN0b3JlZFwiO1xuXG5jb25zdCB0cmFuc2xhdGVTdGF0dXMgPSAoc3RhdHVzLCBhZHZlcnNlX2FjdGlvbikgPT4ge1xuICBzd2l0Y2ggKHN0YXR1cykge1xuICAgIGNhc2UgQVBQUk9WRUQ6XG4gICAgICByZXR1cm4gQVBQUk9WRUQ7XG4gICAgY2FzZSBQRU5ESU5HOlxuICAgIGNhc2UgUEVORElOR19ESVNQVVRFOlxuICAgICAgcmV0dXJuIFBFTkRJTkc7XG4gICAgY2FzZSBSRUpFQ1RFRDpcbiAgICAgIHJldHVybiBSRUpFQ1RFRDtcbiAgICBjYXNlIFBFTkRJTkdfRklSU1RfTk9USUNFOlxuICAgICAgaWYgKGFkdmVyc2VfYWN0aW9uKSByZXR1cm4gRklSU1RfTk9USUNFO1xuICAgICAgZWxzZSByZXR1cm4gUkVKRUNURUQ7XG4gICAgY2FzZSBQRU5ESU5HX1NFQ09ORF9OT1RJQ0U6XG4gICAgICBpZiAoYWR2ZXJzZV9hY3Rpb24pIHJldHVybiBTRUNPTkRfTk9USUNFO1xuICAgICAgZWxzZSByZXR1cm4gUkVKRUNURUQ7XG4gICAgY2FzZSBDT05TRU5UOlxuICAgICAgcmV0dXJuIENPTlNFTlQ7XG4gICAgY2FzZSBQUk9DRVNTSU5HOlxuICAgICAgcmV0dXJuIFBST0NFU1NJTkc7XG4gICAgY2FzZSBFTUFJTEVEOlxuICAgICAgcmV0dXJuIEVNQUlMRUQ7XG4gICAgY2FzZSBSRVZJRVc6XG4gICAgICByZXR1cm4gUkVWSUVXO1xuICAgIGNhc2UgUkVWSUVXSU5HOlxuICAgICAgcmV0dXJuIFJFVklFV0lORztcbiAgICBjYXNlIFdJVEhEUkFXTjpcbiAgICAgIHJldHVybiBXSVRIRFJBV047XG4gICAgY2FzZSBJTklUSUFURUQ6XG4gICAgICByZXR1cm4gU1RPUkVEO1xuICAgIGNhc2UgU1NOX1RSQUNFX0ZBSUxFRDpcbiAgICAgIHJldHVybiBWRVJJRllJTkc7XG4gICAgY2FzZSBNVlJfRkFJTEVEOlxuICAgICAgcmV0dXJuIENPTVBMSUFOQ0VSRVZJRVc7XG4gICAgY2FzZSBDT01QTElBTkNFOlxuICAgICAgcmV0dXJuIENPTVBMSUFOQ0VSRVZJRVc7XG4gICAgY2FzZSBDT01QTElBTkNFX1NPOlxuICAgICAgcmV0dXJuIENPTVBMSUFOQ0VSRVZJRVc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBQRU5ESU5HO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCB0cmFuc2xhdGVTdGF0dXM7XG4iLCJpbXBvcnQge1xuICB2YWxpZGF0ZVVTRHJpdmVyc0xpY2Vuc2UsXG4gIGRyaXZlcnNMaWNlbnNlUmVnZXhcbn0gZnJvbSBcIkB0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlXCI7XG5cbmV4cG9ydCBjb25zdCBjdXJyZW50U3RhdGVzID0gT2JqZWN0LmtleXMoZHJpdmVyc0xpY2Vuc2VSZWdleCk7XG5cbmNvbnN0IHZhbGlkYXRlRHJpdmVyc0xpY2Vuc2UgPSAobGljZW5zZSwgc3RhdGUgPSBcIlwiKSA9PiB7XG4gIGlmICh0eXBlb2YgbGljZW5zZSAhPT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Ygc3RhdGUgIT09IFwic3RyaW5nXCIpXG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCByZWFzb25zOiBcIkxpY2Vuc2UgYW5kIFN0YXRlIG11c3QgYmUgU3RyaW5nc1wiIH07XG4gIGlmICghY3VycmVudFN0YXRlcy5pbmNsdWRlcyhzdGF0ZSkpIHJldHVybiB7IHZhbGlkOiB0cnVlLCByZWFzb25zOiBcIlwiIH07XG4gIHJldHVybiB2YWxpZGF0ZVVTRHJpdmVyc0xpY2Vuc2UobGljZW5zZSwgc3RhdGUpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgdmFsaWRhdGVEcml2ZXJzTGljZW5zZTtcbiIsImltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcblxuLyoqXG4gKiBCYXNlZCBvbiBPJ1JlaWxseSdzIFJlZ2V4IENvb2tib29rOlxuICogaHR0cHM6Ly93d3cub3JlaWxseS5jb20vbGlicmFyeS92aWV3L3JlZ3VsYXItZXhwcmVzc2lvbnMtY29va2Jvb2svOTc4MTQ0OTMyNzQ1My9jaDA0czEyLmh0bWxcbiAqIFxuICogRXh0cmEgcnVsZXM6XG4gKiAgMTIzNDU2Nzg5IGlzIGFuIGludmFsaWQgU1NOXG4gKiAgUmVwZWF0aW5nIGRpZ2l0cyBhcmUgaW52YWxpZCAoMTExMTExMTExLCAxMTExMTExMTEsIGV0Yy4pXG4gKiAgOTg2IHByZWZpeCBpcyBhbGxvd2VkIChmb3IgVGVzdCBJZGVudGl0aWVzKVxuICovXG5jb25zdCB2YWxpZFNzblJlZ2V4ID0gL14oOTg2fCg/ITAwMHw2NjZ8MTIzNDU2Nzg5fChcXGQpXFwyezh9KVswLThdWzAtOV17Mn0pKD8hMDApWzAtOV17Mn0oPyEwMDAwKVswLTldezR9JC87XG5cbi8qKlxuICogQmFzZWQgb24gU1NBJ3MgbWlzdXNlZCBhcnRpY2xlOlxuICogaHR0cHM6Ly93d3cuc3NhLmdvdi9oaXN0b3J5L3Nzbi9taXN1c2VkLmh0bWxcbiAqKi9cbmNvbnN0IG1pc3VzZWRSZWdleCA9IC9eMDc4MDUxMTIwfDIxOTA5OTk5OSQvO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVfc3NuID0gc3NuID0+IHtcbiAgaWYgKHR5cGVvZiBzc24gIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgbnVtYmVyU1NOID0gc3NuLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcbiAgcmV0dXJuICFtaXN1c2VkUmVnZXgudGVzdChudW1iZXJTU04pICYmIHZhbGlkU3NuUmVnZXgudGVzdChudW1iZXJTU04pO1xufTtcblxuZXhwb3J0IGNvbnN0IGludmFsaWRGaXJzdFRocmVlID0gXy5yYW5nZSg5MDAsIDEwMDApXG4gIC5tYXAobnVtID0+IGAke251bX1gKVxuICAuY29uY2F0KFtcIjAwMFwiLCBcIjY2NlwiXSk7XG5leHBvcnQgZGVmYXVsdCB2YWxpZGF0ZV9zc247XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby11c2VsZXNzLWVzY2FwZSovXG5pbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XG5cbi8vIER1Y2sgY2hlY2sgZm9yIGFycmF5IG9yIE1vYlggb2JzZXJ2YWJsZSBhcnJheSAoYXZvaWRzIGJ1bmRsaW5nIG1vYngpXG5jb25zdCBpc0FycmF5T3JPYnNlcnZhYmxlQXJyYXkgPSB2YWx1ZSA9PlxuICBBcnJheS5pc0FycmF5KHZhbHVlKSB8fFxuICAhISh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlLmxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgdmFsdWUuc2xpY2UgPT09IFwiZnVuY3Rpb25cIik7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUVtYWlsID0gZW1haWwgPT4ge1xuICBpZiAoIWVtYWlsKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHJlZ2V4ID0gL15bYS16QS1aMC05LiEjJCUmJyorXFwvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlxcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykrJC87XG4gIHJldHVybiByZWdleC50ZXN0KGVtYWlsKTtcbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVBob25lID0gcGhvbmUgPT4ge1xuICBpZiAoIXBob25lKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHJlZ2V4ID0gL14xP1xccz9cXCg/KFxcZHszfSlcXCk/Wy0gXT8oXFxkezN9KVstIF0/KFxcZHs0fSkkLztcbiAgcmV0dXJuIHJlZ2V4LnRlc3QocGhvbmUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQWxwaGFOdW1lcmljID0gY2ggPT4ge1xuICByZXR1cm4gY2gubWF0Y2goL14oW2EtejAtOV0pKy9pKSAhPT0gbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IGlzVmFsaWRDYW5hZGlhblppcGNvZGUgPSB6aXBjb2RlID0+IFxuICB6aXBjb2RlLm1hdGNoKC9eW0EtWmEtel1cXGRbQS1aYS16XSQvKSAhPT0gbnVsbCB8fCB6aXBjb2RlLm1hdGNoKC9eW0EtWmEtel1cXGRbQS1aYS16XVsgLV0/XFxkW0EtWmEtel1cXGQvKSAhPT0gbnVsbFxuXG4vLyBzZWUgdmFsaWRhdGUtc3NuLmpzXG5leHBvcnQgY29uc3QgdmFsaWRhdGVTU04gPSBzc24gPT4ge1xuICBpZiAodHlwZW9mIHNzbiAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBudW1iZXJTU04gPSBzc24ucmVwbGFjZSgvXFxEL2csIFwiXCIpO1xuICByZXR1cm4gbnVtYmVyU1NOLmxlbmd0aCA9PT0gOTtcbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUNoZWNrID0gd29ya2VyX2NoZWNrID0+IHtcbiAgY29uc3QgY2hlY2sgPSB3b3JrZXJfY2hlY2sgPT09IFwiY2xlYXJcIiA/IFtdIDogd29ya2VyX2NoZWNrO1xuICBpZiAoaXNBcnJheU9yT2JzZXJ2YWJsZUFycmF5KGNoZWNrKSkgcmV0dXJuIFsuLi5jaGVja107XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnRhaW5zQXRTeW1ib2wgPSBzdHIgPT4gL0AvLnRlc3Qoc3RyKTtcbmV4cG9ydCBjb25zdCBjb250YWluc051bWJlciA9IHN0ciA9PiAvXFxkLy50ZXN0KHN0cik7XG5leHBvcnQgY29uc3QgdmFsaWRhdGVOYW1lID0gbmFtZSA9PlxuICBuYW1lLnRyaW0oKS5sZW5ndGggIT09IDAgJiYgIWNvbnRhaW5zQXRTeW1ib2wobmFtZSkgJiYgIWNvbnRhaW5zTnVtYmVyKG5hbWUpO1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQWRkcmVzcyA9IGFkZHJlc3MgPT5cbiAgYWRkcmVzcy50cmltKCkubGVuZ3RoICE9PSAwICYmICFjb250YWluc0F0U3ltYm9sKGFkZHJlc3MpOyAgXG5leHBvcnQgY29uc3QgdmFsaWRhdGVDdXN0b21JbnB1dCA9IHZhbHVlID0+IHtcbiAgaWYgKCFfLmlzU3RyaW5nKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdmFsdWUudHJpbSgpLmxlbmd0aCAhPT0gMDtcbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVppcGNvZGUgPSB6aXBjb2RlID0+XG4gIF8uaXNTdHJpbmcoemlwY29kZSkgJiYgemlwY29kZS5sZW5ndGggPj0gNTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQ2FuYWRpYW5aaXBjb2RlID0gemlwY29kZSA9PlxuICBfLmlzU3RyaW5nKHppcGNvZGUpIFxuICAgICYmIGlzQWxwaGFOdW1lcmljKHppcGNvZGUpIFxuICAgICYmIGlzVmFsaWRDYW5hZGlhblppcGNvZGUoemlwY29kZSk7XG5cbmV4cG9ydCBjb25zdCBpc0FycmF5ID0gdmFsdWUgPT5cbiAgaXNBcnJheU9yT2JzZXJ2YWJsZUFycmF5KHZhbHVlKTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlTVZSQ2hlY2sgPSBjaGVjayA9PlxuICBfLmlzT2JqZWN0KGNoZWNrKSB8fCB0eXBlb2YgY2hlY2sgPT09IFwic3RyaW5nXCIgPyBjaGVjayA6IHt9O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVQaG9uZVZlcmlmaWNhdGlvbiA9IHN0YXR1cyA9PiB7XG4gIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgY2FzZSBcInZlcmlmaWVkXCI6XG4gICAgY2FzZSBcIlRydWVcIjpcbiAgICAgIHJldHVybiBcInZlcmlmaWVkXCI7XG4gICAgY2FzZSBcInVudmVyaWZpZWRcIjpcbiAgICBjYXNlIFwiRmFsc2VcIjpcbiAgICAgIHJldHVybiBcInVudmVyaWZpZWRcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwiXCI7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkaXNhYmxlX2NoZWNrID0gZW52X3ZhciA9PlxuICB0eXBlb2YgZW52X3ZhciA9PT0gXCJzdHJpbmdcIiA/IGVudl92YXIudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCIgOiBmYWxzZTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlRW1haWxJZCA9IGlkID0+IF8uaXNTdHJpbmcoaWQpICYmIGlkLmxlbmd0aCA9PT0gMzI7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVR1cm5JZCA9IGlkID0+XG4gIF8uaXNTdHJpbmcoaWQpICYmIC9eQ3sxfVswLTldezEwfSQvLnRlc3QoaWQpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
8
+ var r=n(104),i=n(105),o=n(106);function u(){return a.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(t,e){if(u()<e)throw new RangeError("Invalid typed array length");return a.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e)).__proto__=a.prototype:(null===t&&(t=new a(e)),t.length=e),t}function a(t,e,n){if(!(a.TYPED_ARRAY_SUPPORT||this instanceof a))return new a(t,e,n);if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return l(this,t)}return c(this,t,e,n)}function c(t,e,n,r){if("number"==typeof e)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer?function(t,e,n,r){if(e.byteLength,n<0||e.byteLength<n)throw new RangeError("'offset' is out of bounds");if(e.byteLength<n+(r||0))throw new RangeError("'length' is out of bounds");e=void 0===n&&void 0===r?new Uint8Array(e):void 0===r?new Uint8Array(e,n):new Uint8Array(e,n,r);a.TYPED_ARRAY_SUPPORT?(t=e).__proto__=a.prototype:t=p(t,e);return t}(t,e,n,r):"string"==typeof e?function(t,e,n){"string"==typeof n&&""!==n||(n="utf8");if(!a.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var r=0|d(e,n),i=(t=s(t,r)).write(e,n);i!==r&&(t=t.slice(0,i));return t}(t,e,n):function(t,e){if(a.isBuffer(e)){var n=0|h(e.length);return 0===(t=s(t,n)).length||e.copy(t,0,0,n),t}if(e){if("undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return"number"!=typeof e.length||(r=e.length)!=r?s(t,0):p(t,e);if("Buffer"===e.type&&o(e.data))return p(t,e.data)}var r;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t,e)}function f(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function l(t,e){if(f(e),t=s(t,e<0?0:0|h(e)),!a.TYPED_ARRAY_SUPPORT)for(var n=0;n<e;++n)t[n]=0;return t}function p(t,e){var n=e.length<0?0:0|h(e.length);t=s(t,n);for(var r=0;r<n;r+=1)t[r]=255&e[r];return t}function h(t){if(t>=u())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+u().toString(16)+" bytes");return 0|t}function d(t,e){if(a.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var r=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return k(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return Y(t).length;default:if(r)return k(t).length;e=(""+e).toLowerCase(),r=!0}}function v(t,e,n){var r=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return $(this,e,n);case"utf8":case"utf-8":return E(this,e,n);case"ascii":return S(this,e,n);case"latin1":case"binary":return R(this,e,n);case"base64":return O(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return j(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function g(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function y(t,e,n,r,i){if(0===t.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(i)return-1;n=t.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof e&&(e=a.from(e,r)),a.isBuffer(e))return 0===e.length?-1:b(t,e,n,r,i);if("number"==typeof e)return e&=255,a.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):b(t,[e],n,r,i);throw new TypeError("val must be string, number or Buffer")}function b(t,e,n,r,i){var o,u=1,s=t.length,a=e.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(t.length<2||e.length<2)return-1;u=2,s/=2,a/=2,n/=2}function c(t,e){return 1===u?t[e]:t.readUInt16BE(e*u)}if(i){var f=-1;for(o=n;o<s;o++)if(c(t,o)===c(e,-1===f?0:o-f)){if(-1===f&&(f=o),o-f+1===a)return f*u}else-1!==f&&(o-=o-f),f=-1}else for(n+a>s&&(n=s-a),o=n;o>=0;o--){for(var l=!0,p=0;p<a;p++)if(c(t,o+p)!==c(e,p)){l=!1;break}if(l)return o}return-1}function m(t,e,n,r){n=Number(n)||0;var i=t.length-n;r?(r=Number(r))>i&&(r=i):r=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var u=0;u<r;++u){var s=parseInt(e.substr(2*u,2),16);if(isNaN(s))return u;t[n+u]=s}return u}function w(t,e,n,r){return Z(k(e,t.length-n),t,n,r)}function x(t,e,n,r){return Z(function(t){for(var e=[],n=0;n<t.length;++n)e.push(255&t.charCodeAt(n));return e}(e),t,n,r)}function _(t,e,n,r){return x(t,e,n,r)}function A(t,e,n,r){return Z(Y(e),t,n,r)}function N(t,e,n,r){return Z(function(t,e){for(var n,r,i,o=[],u=0;u<t.length&&!((e-=2)<0);++u)n=t.charCodeAt(u),r=n>>8,i=n%256,o.push(i),o.push(r);return o}(e,t.length-n),t,n,r)}function O(t,e,n){return 0===e&&n===t.length?r.fromByteArray(t):r.fromByteArray(t.slice(e,n))}function E(t,e,n){n=Math.min(t.length,n);for(var r=[],i=e;i<n;){var o,u,s,a,c=t[i],f=null,l=c>239?4:c>223?3:c>191?2:1;if(i+l<=n)switch(l){case 1:c<128&&(f=c);break;case 2:128==(192&(o=t[i+1]))&&(a=(31&c)<<6|63&o)>127&&(f=a);break;case 3:o=t[i+1],u=t[i+2],128==(192&o)&&128==(192&u)&&(a=(15&c)<<12|(63&o)<<6|63&u)>2047&&(a<55296||a>57343)&&(f=a);break;case 4:o=t[i+1],u=t[i+2],s=t[i+3],128==(192&o)&&128==(192&u)&&128==(192&s)&&(a=(15&c)<<18|(63&o)<<12|(63&u)<<6|63&s)>65535&&a<1114112&&(f=a)}null===f?(f=65533,l=1):f>65535&&(f-=65536,r.push(f>>>10&1023|55296),f=56320|1023&f),r.push(f),i+=l}return function(t){var e=t.length;if(e<=4096)return String.fromCharCode.apply(String,t);var n="",r=0;for(;r<e;)n+=String.fromCharCode.apply(String,t.slice(r,r+=4096));return n}(r)}e.Buffer=a,e.SlowBuffer=function(t){+t!=t&&(t=0);return a.alloc(+t)},e.INSPECT_MAX_BYTES=50,a.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(t){return!1}}(),e.kMaxLength=u(),a.poolSize=8192,a._augment=function(t){return t.__proto__=a.prototype,t},a.from=function(t,e,n){return c(null,t,e,n)},a.TYPED_ARRAY_SUPPORT&&(a.prototype.__proto__=Uint8Array.prototype,a.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&a[Symbol.species]===a&&Object.defineProperty(a,Symbol.species,{value:null,configurable:!0})),a.alloc=function(t,e,n){return function(t,e,n,r){return f(e),e<=0?s(t,e):void 0!==n?"string"==typeof r?s(t,e).fill(n,r):s(t,e).fill(n):s(t,e)}(null,t,e,n)},a.allocUnsafe=function(t){return l(null,t)},a.allocUnsafeSlow=function(t){return l(null,t)},a.isBuffer=function(t){return!(null==t||!t._isBuffer)},a.compare=function(t,e){if(!a.isBuffer(t)||!a.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var n=t.length,r=e.length,i=0,o=Math.min(n,r);i<o;++i)if(t[i]!==e[i]){n=t[i],r=e[i];break}return n<r?-1:r<n?1:0},a.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},a.concat=function(t,e){if(!o(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return a.alloc(0);var n;if(void 0===e)for(e=0,n=0;n<t.length;++n)e+=t[n].length;var r=a.allocUnsafe(e),i=0;for(n=0;n<t.length;++n){var u=t[n];if(!a.isBuffer(u))throw new TypeError('"list" argument must be an Array of Buffers');u.copy(r,i),i+=u.length}return r},a.byteLength=d,a.prototype._isBuffer=!0,a.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)g(this,e,e+1);return this},a.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)g(this,e,e+3),g(this,e+1,e+2);return this},a.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)g(this,e,e+7),g(this,e+1,e+6),g(this,e+2,e+5),g(this,e+3,e+4);return this},a.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?E(this,0,t):v.apply(this,arguments)},a.prototype.equals=function(t){if(!a.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===a.compare(this,t)},a.prototype.inspect=function(){var t="",n=e.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(t+=" ... ")),"<Buffer "+t+">"},a.prototype.compare=function(t,e,n,r,i){if(!a.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),e<0||n>t.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&e>=n)return 0;if(r>=i)return-1;if(e>=n)return 1;if(this===t)return 0;for(var o=(i>>>=0)-(r>>>=0),u=(n>>>=0)-(e>>>=0),s=Math.min(o,u),c=this.slice(r,i),f=t.slice(e,n),l=0;l<s;++l)if(c[l]!==f[l]){o=c[l],u=f[l];break}return o<u?-1:u<o?1:0},a.prototype.includes=function(t,e,n){return-1!==this.indexOf(t,e,n)},a.prototype.indexOf=function(t,e,n){return y(this,t,e,n,!0)},a.prototype.lastIndexOf=function(t,e,n){return y(this,t,e,n,!1)},a.prototype.write=function(t,e,n,r){if(void 0===e)r="utf8",n=this.length,e=0;else if(void 0===n&&"string"==typeof e)r=e,n=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e|=0,isFinite(n)?(n|=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}var i=this.length-e;if((void 0===n||n>i)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return m(this,t,e,n);case"utf8":case"utf-8":return w(this,t,e,n);case"ascii":return x(this,t,e,n);case"latin1":case"binary":return _(this,t,e,n);case"base64":return A(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return N(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function S(t,e,n){var r="";n=Math.min(t.length,n);for(var i=e;i<n;++i)r+=String.fromCharCode(127&t[i]);return r}function R(t,e,n){var r="";n=Math.min(t.length,n);for(var i=e;i<n;++i)r+=String.fromCharCode(t[i]);return r}function $(t,e,n){var r=t.length;(!e||e<0)&&(e=0),(!n||n<0||n>r)&&(n=r);for(var i="",o=e;o<n;++o)i+=B(t[o]);return i}function j(t,e,n){for(var r=t.slice(e,n),i="",o=0;o<r.length;o+=2)i+=String.fromCharCode(r[o]+256*r[o+1]);return i}function L(t,e,n){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>n)throw new RangeError("Trying to access beyond buffer length")}function T(t,e,n,r,i,o){if(!a.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||e<o)throw new RangeError('"value" argument is out of bounds');if(n+r>t.length)throw new RangeError("Index out of range")}function M(t,e,n,r){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-n,2);i<o;++i)t[n+i]=(e&255<<8*(r?i:1-i))>>>8*(r?i:1-i)}function C(t,e,n,r){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-n,4);i<o;++i)t[n+i]=e>>>8*(r?i:3-i)&255}function P(t,e,n,r,i,o){if(n+r>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function D(t,e,n,r,o){return o||P(t,0,n,4),i.write(t,e,n,r,23,4),n+4}function U(t,e,n,r,o){return o||P(t,0,n,8),i.write(t,e,n,r,52,8),n+8}a.prototype.slice=function(t,e){var n,r=this.length;if((t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t),a.TYPED_ARRAY_SUPPORT)(n=this.subarray(t,e)).__proto__=a.prototype;else{var i=e-t;n=new a(i,void 0);for(var o=0;o<i;++o)n[o]=this[o+t]}return n},a.prototype.readUIntLE=function(t,e,n){t|=0,e|=0,n||L(t,e,this.length);for(var r=this[t],i=1,o=0;++o<e&&(i*=256);)r+=this[t+o]*i;return r},a.prototype.readUIntBE=function(t,e,n){t|=0,e|=0,n||L(t,e,this.length);for(var r=this[t+--e],i=1;e>0&&(i*=256);)r+=this[t+--e]*i;return r},a.prototype.readUInt8=function(t,e){return e||L(t,1,this.length),this[t]},a.prototype.readUInt16LE=function(t,e){return e||L(t,2,this.length),this[t]|this[t+1]<<8},a.prototype.readUInt16BE=function(t,e){return e||L(t,2,this.length),this[t]<<8|this[t+1]},a.prototype.readUInt32LE=function(t,e){return e||L(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},a.prototype.readUInt32BE=function(t,e){return e||L(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},a.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||L(t,e,this.length);for(var r=this[t],i=1,o=0;++o<e&&(i*=256);)r+=this[t+o]*i;return r>=(i*=128)&&(r-=Math.pow(2,8*e)),r},a.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||L(t,e,this.length);for(var r=e,i=1,o=this[t+--r];r>0&&(i*=256);)o+=this[t+--r]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*e)),o},a.prototype.readInt8=function(t,e){return e||L(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},a.prototype.readInt16LE=function(t,e){e||L(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},a.prototype.readInt16BE=function(t,e){e||L(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},a.prototype.readInt32LE=function(t,e){return e||L(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},a.prototype.readInt32BE=function(t,e){return e||L(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},a.prototype.readFloatLE=function(t,e){return e||L(t,4,this.length),i.read(this,t,!0,23,4)},a.prototype.readFloatBE=function(t,e){return e||L(t,4,this.length),i.read(this,t,!1,23,4)},a.prototype.readDoubleLE=function(t,e){return e||L(t,8,this.length),i.read(this,t,!0,52,8)},a.prototype.readDoubleBE=function(t,e){return e||L(t,8,this.length),i.read(this,t,!1,52,8)},a.prototype.writeUIntLE=function(t,e,n,r){(t=+t,e|=0,n|=0,r)||T(this,t,e,n,Math.pow(2,8*n)-1,0);var i=1,o=0;for(this[e]=255&t;++o<n&&(i*=256);)this[e+o]=t/i&255;return e+n},a.prototype.writeUIntBE=function(t,e,n,r){(t=+t,e|=0,n|=0,r)||T(this,t,e,n,Math.pow(2,8*n)-1,0);var i=n-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+n},a.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||T(this,t,e,1,255,0),a.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},a.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||T(this,t,e,2,65535,0),a.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):M(this,t,e,!0),e+2},a.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||T(this,t,e,2,65535,0),a.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):M(this,t,e,!1),e+2},a.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||T(this,t,e,4,4294967295,0),a.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):C(this,t,e,!0),e+4},a.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||T(this,t,e,4,4294967295,0),a.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):C(this,t,e,!1),e+4},a.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);T(this,t,e,n,i-1,-i)}var o=0,u=1,s=0;for(this[e]=255&t;++o<n&&(u*=256);)t<0&&0===s&&0!==this[e+o-1]&&(s=1),this[e+o]=(t/u>>0)-s&255;return e+n},a.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);T(this,t,e,n,i-1,-i)}var o=n-1,u=1,s=0;for(this[e+o]=255&t;--o>=0&&(u*=256);)t<0&&0===s&&0!==this[e+o+1]&&(s=1),this[e+o]=(t/u>>0)-s&255;return e+n},a.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||T(this,t,e,1,127,-128),a.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},a.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||T(this,t,e,2,32767,-32768),a.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):M(this,t,e,!0),e+2},a.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||T(this,t,e,2,32767,-32768),a.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):M(this,t,e,!1),e+2},a.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||T(this,t,e,4,2147483647,-2147483648),a.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):C(this,t,e,!0),e+4},a.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||T(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),a.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):C(this,t,e,!1),e+4},a.prototype.writeFloatLE=function(t,e,n){return D(this,t,e,!0,n)},a.prototype.writeFloatBE=function(t,e,n){return D(this,t,e,!1,n)},a.prototype.writeDoubleLE=function(t,e,n){return U(this,t,e,!0,n)},a.prototype.writeDoubleBE=function(t,e,n){return U(this,t,e,!1,n)},a.prototype.copy=function(t,e,n,r){if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r<n&&(r=n),r===n)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e<r-n&&(r=t.length-e+n);var i,o=r-n;if(this===t&&n<e&&e<r)for(i=o-1;i>=0;--i)t[i+e]=this[i+n];else if(o<1e3||!a.TYPED_ARRAY_SUPPORT)for(i=0;i<o;++i)t[i+e]=this[i+n];else Uint8Array.prototype.set.call(t,this.subarray(n,n+o),e);return o},a.prototype.fill=function(t,e,n,r){if("string"==typeof t){if("string"==typeof e?(r=e,e=0,n=this.length):"string"==typeof n&&(r=n,n=this.length),1===t.length){var i=t.charCodeAt(0);i<256&&(t=i)}if(void 0!==r&&"string"!=typeof r)throw new TypeError("encoding must be a string");if("string"==typeof r&&!a.isEncoding(r))throw new TypeError("Unknown encoding: "+r)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<n)throw new RangeError("Out of range index");if(n<=e)return this;var o;if(e>>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(o=e;o<n;++o)this[o]=t;else{var u=a.isBuffer(t)?t:k(new a(t,r).toString()),s=u.length;for(o=0;o<n-e;++o)this[o+e]=u[o%s]}return this};var I=/[^+\/0-9A-Za-z-_]/g;function B(t){return t<16?"0"+t.toString(16):t.toString(16)}function k(t,e){var n;e=e||1/0;for(var r=t.length,i=null,o=[],u=0;u<r;++u){if((n=t.charCodeAt(u))>55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(u+1===r){(e-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function Y(t){return r.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(I,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function Z(t,e,n,r){for(var i=0;i<r&&!(i+n>=e.length||i>=t.length);++i)e[i+n]=t[i];return i}}).call(this,n(47))},function(t,e,n){"use strict";e.byteLength=function(t){var e=c(t),n=e[0],r=e[1];return 3*(n+r)/4-r},e.toByteArray=function(t){var e,n,r=c(t),u=r[0],s=r[1],a=new o(function(t,e,n){return 3*(e+n)/4-n}(0,u,s)),f=0,l=s>0?u-4:u;for(n=0;n<l;n+=4)e=i[t.charCodeAt(n)]<<18|i[t.charCodeAt(n+1)]<<12|i[t.charCodeAt(n+2)]<<6|i[t.charCodeAt(n+3)],a[f++]=e>>16&255,a[f++]=e>>8&255,a[f++]=255&e;2===s&&(e=i[t.charCodeAt(n)]<<2|i[t.charCodeAt(n+1)]>>4,a[f++]=255&e);1===s&&(e=i[t.charCodeAt(n)]<<10|i[t.charCodeAt(n+1)]<<4|i[t.charCodeAt(n+2)]>>2,a[f++]=e>>8&255,a[f++]=255&e);return a},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,o=[],u=0,s=n-i;u<s;u+=16383)o.push(f(t,u,u+16383>s?s:u+16383));1===i?(e=t[n-1],o.push(r[e>>2]+r[e<<4&63]+"==")):2===i&&(e=(t[n-2]<<8)+t[n-1],o.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"="));return o.join("")};for(var r=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,a=u.length;s<a;++s)r[s]=u[s],i[u.charCodeAt(s)]=s;function c(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=t.indexOf("=");return-1===n&&(n=e),[n,n===e?0:4-n%4]}function f(t,e,n){for(var i,o,u=[],s=e;s<n;s+=3)i=(t[s]<<16&16711680)+(t[s+1]<<8&65280)+(255&t[s+2]),u.push(r[(o=i)>>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return u.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},function(t,e){
9
+ /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
10
+ e.read=function(t,e,n,r,i){var o,u,s=8*i-r-1,a=(1<<s)-1,c=a>>1,f=-7,l=n?i-1:0,p=n?-1:1,h=t[e+l];for(l+=p,o=h&(1<<-f)-1,h>>=-f,f+=s;f>0;o=256*o+t[e+l],l+=p,f-=8);for(u=o&(1<<-f)-1,o>>=-f,f+=r;f>0;u=256*u+t[e+l],l+=p,f-=8);if(0===o)o=1-c;else{if(o===a)return u?NaN:1/0*(h?-1:1);u+=Math.pow(2,r),o-=c}return(h?-1:1)*u*Math.pow(2,o-r)},e.write=function(t,e,n,r,i,o){var u,s,a,c=8*o-i-1,f=(1<<c)-1,l=f>>1,p=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,h=r?0:o-1,d=r?1:-1,v=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,u=f):(u=Math.floor(Math.log(e)/Math.LN2),e*(a=Math.pow(2,-u))<1&&(u--,a*=2),(e+=u+l>=1?p/a:p*Math.pow(2,1-l))*a>=2&&(u++,a/=2),u+l>=f?(s=0,u=f):u+l>=1?(s=(e*a-1)*Math.pow(2,i),u+=l):(s=e*Math.pow(2,l-1)*Math.pow(2,i),u=0));i>=8;t[n+h]=255&s,h+=d,s/=256,i-=8);for(u=u<<i|s,c+=i;c>0;t[n+h]=255&u,h+=d,u/=256,c-=8);t[n+h-d]|=128*v}},function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},function(t,e,n){"use strict";var r=n(7);t.exports=function(t,e,n){var i=n.config.validateStatus;n.status&&i&&!i(n.status)?e(new r("Request failed with status code "+n.status,[r.ERR_BAD_REQUEST,r.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):t(n)}},function(t,e,n){"use strict";var r=n(0);t.exports=r.isStandardBrowserEnv()?{write:function(t,e,n,i,o,u){var s=[];s.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),r.isString(i)&&s.push("path="+i),r.isString(o)&&s.push("domain="+o),!0===u&&s.push("secure"),document.cookie=s.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(t,e,n){"use strict";t.exports=function(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)}},function(t,e,n){"use strict";t.exports=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}},function(t,e,n){"use strict";var r=n(0),i=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];t.exports=function(t){var e,n,o,u={};return t?(r.forEach(t.split("\n"),(function(t){if(o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e){if(u[e]&&i.indexOf(e)>=0)return;u[e]="set-cookie"===e?(u[e]?u[e]:[]).concat([n]):u[e]?u[e]+", "+n:n}})),u):u}},function(t,e,n){"use strict";var r=n(0);t.exports=r.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function i(t){var r=t;return e&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=i(window.location.href),function(e){var n=r.isString(e)?i(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0}},function(t,e,n){"use strict";t.exports=function(t){var e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(t);return e&&e[1]||""}},function(t,e){t.exports=null},function(t,e,n){"use strict";var r=n(52).version,i=n(7),o={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){o[t]=function(n){return typeof n===t||"a"+(e<1?"n ":" ")+t}}));var u={};o.transitional=function(t,e,n){function o(t,e){return"[Axios v"+r+"] Transitional option '"+t+"'"+e+(n?". "+n:"")}return function(n,r,s){if(!1===t)throw new i(o(r," has been removed"+(e?" in "+e:"")),i.ERR_DEPRECATED);return e&&!u[r]&&(u[r]=!0,console.warn(o(r," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,r,s)}},t.exports={assertOptions:function(t,e,n){if("object"!=typeof t)throw new i("options must be an object",i.ERR_BAD_OPTION_VALUE);for(var r=Object.keys(t),o=r.length;o-- >0;){var u=r[o],s=e[u];if(s){var a=t[u],c=void 0===a||s(a,u,t);if(!0!==c)throw new i("option "+u+" must be "+c,i.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new i("Unknown option "+u,i.ERR_BAD_OPTION)}},validators:o}},function(t,e,n){"use strict";var r=n(11);function i(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;this.promise.then((function(t){if(n._listeners){var e,r=n._listeners.length;for(e=0;e<r;e++)n._listeners[e](t);n._listeners=null}})),this.promise.then=function(t){var e,r=new Promise((function(t){n.subscribe(t),e=t})).then(t);return r.cancel=function(){n.unsubscribe(e)},r},t((function(t){n.reason||(n.reason=new r(t),e(n.reason))}))}i.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},i.prototype.subscribe=function(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]},i.prototype.unsubscribe=function(t){if(this._listeners){var e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}},i.source=function(){var t;return{token:new i((function(e){t=e})),cancel:t}},t.exports=i},function(t,e,n){"use strict";t.exports=function(t){return function(e){return t.apply(null,e)}}},function(t,e,n){"use strict";var r=n(0);t.exports=function(t){return r.isObject(t)&&!0===t.isAxiosError}},function(t,e){(function(e){t.exports=e}).call(this,{})},function(t,e,n){var r=n(121);t.exports=function(t,e){var n=[];return r(t,(function(t,r,i){e(t,r,i)&&n.push(t)})),n}},function(t,e,n){var r=n(122),i=n(136)(r);t.exports=i},function(t,e,n){var r=n(123),i=n(26);t.exports=function(t,e){return t&&r(t,e,i)}},function(t,e,n){var r=n(124)();t.exports=r},function(t,e){t.exports=function(t){return function(e,n,r){for(var i=-1,o=Object(e),u=r(e),s=u.length;s--;){var a=u[t?s:++i];if(!1===n(o[a],a,o))break}return e}}},function(t,e,n){var r=n(126),i=n(27),o=n(1),u=n(28),s=n(13),a=n(29),c=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=o(t),f=!n&&i(t),l=!n&&!f&&u(t),p=!n&&!f&&!l&&a(t),h=n||f||l||p,d=h?r(t.length,String):[],v=d.length;for(var g in t)!e&&!c.call(t,g)||h&&("length"==g||l&&("offset"==g||"parent"==g)||p&&("buffer"==g||"byteLength"==g||"byteOffset"==g)||s(g,v))||d.push(g);return d}},function(t,e){t.exports=function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}},function(t,e,n){var r=n(8),i=n(4);t.exports=function(t){return i(t)&&"[object Arguments]"==r(t)}},function(t,e,n){var r=n(12),i=Object.prototype,o=i.hasOwnProperty,u=i.toString,s=r?r.toStringTag:void 0;t.exports=function(t){var e=o.call(t,s),n=t[s];try{t[s]=void 0;var r=!0}catch(t){}var i=u.call(t);return r&&(e?t[s]=n:delete t[s]),i}},function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},function(t,e){t.exports=function(){return!1}},function(t,e,n){var r=n(8),i=n(30),o=n(4),u={};u["[object Float32Array]"]=u["[object Float64Array]"]=u["[object Int8Array]"]=u["[object Int16Array]"]=u["[object Int32Array]"]=u["[object Uint8Array]"]=u["[object Uint8ClampedArray]"]=u["[object Uint16Array]"]=u["[object Uint32Array]"]=!0,u["[object Arguments]"]=u["[object Array]"]=u["[object ArrayBuffer]"]=u["[object Boolean]"]=u["[object DataView]"]=u["[object Date]"]=u["[object Error]"]=u["[object Function]"]=u["[object Map]"]=u["[object Number]"]=u["[object Object]"]=u["[object RegExp]"]=u["[object Set]"]=u["[object String]"]=u["[object WeakMap]"]=!1,t.exports=function(t){return o(t)&&i(t.length)&&!!u[r(t)]}},function(t,e){t.exports=function(t){return function(e){return t(e)}}},function(t,e,n){(function(t){var r=n(54),i=e&&!e.nodeType&&e,o=i&&"object"==typeof t&&t&&!t.nodeType&&t,u=o&&o.exports===i&&r.process,s=function(){try{var t=o&&o.require&&o.require("util").types;return t||u&&u.binding&&u.binding("util")}catch(t){}}();t.exports=s}).call(this,n(55)(t))},function(t,e,n){var r=n(135)(Object.keys,Object);t.exports=r},function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},function(t,e,n){var r=n(14);t.exports=function(t,e){return function(n,i){if(null==n)return n;if(!r(n))return t(n,i);for(var o=n.length,u=e?o:-1,s=Object(n);(e?u--:++u<o)&&!1!==i(s[u],u,s););return n}}},function(t,e,n){var r=n(138),i=n(186),o=n(21),u=n(1),s=n(196);t.exports=function(t){return"function"==typeof t?t:null==t?o:"object"==typeof t?u(t)?i(t[0],t[1]):r(t):s(t)}},function(t,e,n){var r=n(139),i=n(185),o=n(66);t.exports=function(t){var e=i(t);return 1==e.length&&e[0][2]?o(e[0][0],e[0][1]):function(n){return n===t||r(n,t,e)}}},function(t,e,n){var r=n(59),i=n(61);t.exports=function(t,e,n,o){var u=n.length,s=u,a=!o;if(null==t)return!s;for(t=Object(t);u--;){var c=n[u];if(a&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++u<s;){var f=(c=n[u])[0],l=t[f],p=c[1];if(a&&c[2]){if(void 0===l&&!(f in t))return!1}else{var h=new r;if(o)var d=o(l,p,f,t,e,h);if(!(void 0===d?i(p,l,3,o,h):d))return!1}}return!0}},function(t,e){t.exports=function(){this.__data__=[],this.size=0}},function(t,e,n){var r=n(16),i=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=r(e,t);return!(n<0)&&(n==e.length-1?e.pop():i.call(e,n,1),--this.size,!0)}},function(t,e,n){var r=n(16);t.exports=function(t){var e=this.__data__,n=r(e,t);return n<0?void 0:e[n][1]}},function(t,e,n){var r=n(16);t.exports=function(t){return r(this.__data__,t)>-1}},function(t,e,n){var r=n(16);t.exports=function(t,e){var n=this.__data__,i=r(n,t);return i<0?(++this.size,n.push([t,e])):n[i][1]=e,this}},function(t,e,n){var r=n(15);t.exports=function(){this.__data__=new r,this.size=0}},function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},function(t,e){t.exports=function(t){return this.__data__.get(t)}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e,n){var r=n(15),i=n(32),o=n(33);t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var u=n.__data__;if(!i||u.length<199)return u.push([t,e]),this.size=++n.size,this;n=this.__data__=new o(u)}return n.set(t,e),this.size=n.size,this}},function(t,e,n){var r=n(58),i=n(151),o=n(2),u=n(60),s=/^\[object .+?Constructor\]$/,a=Function.prototype,c=Object.prototype,f=a.toString,l=c.hasOwnProperty,p=RegExp("^"+f.call(l).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!o(t)||i(t))&&(r(t)?p:s).test(u(t))}},function(t,e,n){var r,i=n(152),o=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!o&&o in t}},function(t,e,n){var r=n(3)["__core-js_shared__"];t.exports=r},function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},function(t,e,n){var r=n(155),i=n(15),o=n(32);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(o||i),string:new r}}},function(t,e,n){var r=n(156),i=n(157),o=n(158),u=n(159),s=n(160);function a(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}a.prototype.clear=r,a.prototype.delete=i,a.prototype.get=o,a.prototype.has=u,a.prototype.set=s,t.exports=a},function(t,e,n){var r=n(17);t.exports=function(){this.__data__=r?r(null):{},this.size=0}},function(t,e){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},function(t,e,n){var r=n(17),i=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(r){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return i.call(e,t)?e[t]:void 0}},function(t,e,n){var r=n(17),i=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return r?void 0!==e[t]:i.call(e,t)}},function(t,e,n){var r=n(17);t.exports=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=r&&void 0===e?"__lodash_hash_undefined__":e,this}},function(t,e,n){var r=n(18);t.exports=function(t){var e=r(this,t).delete(t);return this.size-=e?1:0,e}},function(t,e){t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},function(t,e,n){var r=n(18);t.exports=function(t){return r(this,t).get(t)}},function(t,e,n){var r=n(18);t.exports=function(t){return r(this,t).has(t)}},function(t,e,n){var r=n(18);t.exports=function(t,e){var n=r(this,t),i=n.size;return n.set(t,e),this.size+=n.size==i?0:1,this}},function(t,e,n){var r=n(59),i=n(62),o=n(172),u=n(176),s=n(63),a=n(1),c=n(28),f=n(29),l="[object Object]",p=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,h,d,v){var g=a(t),y=a(e),b=g?"[object Array]":s(t),m=y?"[object Array]":s(e),w=(b="[object Arguments]"==b?l:b)==l,x=(m="[object Arguments]"==m?l:m)==l,_=b==m;if(_&&c(t)){if(!c(e))return!1;g=!0,w=!1}if(_&&!w)return v||(v=new r),g||f(t)?i(t,e,n,h,d,v):o(t,e,b,n,h,d,v);if(!(1&n)){var A=w&&p.call(t,"__wrapped__"),N=x&&p.call(e,"__wrapped__");if(A||N){var O=A?t.value():t,E=N?e.value():e;return v||(v=new r),d(O,E,n,h,v)}}return!!_&&(v||(v=new r),u(t,e,n,h,d,v))}},function(t,e,n){var r=n(33),i=n(168),o=n(169);function u(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new r;++e<n;)this.add(t[e])}u.prototype.add=u.prototype.push=i,u.prototype.has=o,t.exports=u},function(t,e){t.exports=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}},function(t,e){t.exports=function(t,e){return t.has(e)}},function(t,e,n){var r=n(12),i=n(173),o=n(31),u=n(62),s=n(174),a=n(175),c=r?r.prototype:void 0,f=c?c.valueOf:void 0;t.exports=function(t,e,n,r,c,l,p){switch(n){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!l(new i(t),new i(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return o(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var h=s;case"[object Set]":var d=1&r;if(h||(h=a),t.size!=e.size&&!d)return!1;var v=p.get(t);if(v)return v==e;r|=2,p.set(t,e);var g=u(h(t),h(e),r,c,l,p);return p.delete(t),g;case"[object Symbol]":if(f)return f.call(t)==f.call(e)}return!1}},function(t,e,n){var r=n(3).Uint8Array;t.exports=r},function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}},function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}},function(t,e,n){var r=n(177),i=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,o,u,s){var a=1&n,c=r(t),f=c.length;if(f!=r(e).length&&!a)return!1;for(var l=f;l--;){var p=c[l];if(!(a?p in e:i.call(e,p)))return!1}var h=s.get(t),d=s.get(e);if(h&&d)return h==e&&d==t;var v=!0;s.set(t,e),s.set(e,t);for(var g=a;++l<f;){var y=t[p=c[l]],b=e[p];if(o)var m=a?o(b,y,p,e,t,s):o(y,b,p,t,e,s);if(!(void 0===m?y===b||u(y,b,n,o,s):m)){v=!1;break}g||(g="constructor"==p)}if(v&&!g){var w=t.constructor,x=e.constructor;w==x||!("constructor"in t)||!("constructor"in e)||"function"==typeof w&&w instanceof w&&"function"==typeof x&&x instanceof x||(v=!1)}return s.delete(t),s.delete(e),v}},function(t,e,n){var r=n(178),i=n(180),o=n(26);t.exports=function(t){return r(t,o,i)}},function(t,e,n){var r=n(179),i=n(1);t.exports=function(t,e,n){var o=e(t);return i(t)?o:r(o,n(t))}},function(t,e){t.exports=function(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}},function(t,e,n){var r=n(53),i=n(181),o=Object.prototype.propertyIsEnumerable,u=Object.getOwnPropertySymbols,s=u?function(t){return null==t?[]:(t=Object(t),r(u(t),(function(e){return o.call(t,e)})))}:i;t.exports=s},function(t,e){t.exports=function(){return[]}},function(t,e,n){var r=n(5)(n(3),"DataView");t.exports=r},function(t,e,n){var r=n(5)(n(3),"Promise");t.exports=r},function(t,e,n){var r=n(5)(n(3),"Set");t.exports=r},function(t,e,n){var r=n(65),i=n(26);t.exports=function(t){for(var e=i(t),n=e.length;n--;){var o=e[n],u=t[o];e[n]=[o,u,r(u)]}return e}},function(t,e,n){var r=n(61),i=n(187),o=n(193),u=n(34),s=n(65),a=n(66),c=n(20);t.exports=function(t,e){return u(t)&&s(e)?a(c(t),e):function(n){var u=i(n,t);return void 0===u&&u===e?o(n,t):r(e,u,3)}}},function(t,e,n){var r=n(67);t.exports=function(t,e,n){var i=null==t?void 0:r(t,e);return void 0===i?n:i}},function(t,e,n){var r=n(189),i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,o=/\\(\\)?/g,u=r((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(i,(function(t,n,r,i){e.push(r?i.replace(o,"$1"):n||t)})),e}));t.exports=u},function(t,e,n){var r=n(190);t.exports=function(t){var e=r(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}},function(t,e,n){var r=n(33);function i(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var u=t.apply(this,r);return n.cache=o.set(i,u)||o,u};return n.cache=new(i.Cache||r),n}i.Cache=r,t.exports=i},function(t,e,n){var r=n(12),i=n(192),o=n(1),u=n(19),s=r?r.prototype:void 0,a=s?s.toString:void 0;t.exports=function t(e){if("string"==typeof e)return e;if(o(e))return i(e,t)+"";if(u(e))return a?a.call(e):"";var n=e+"";return"0"==n&&1/e==-1/0?"-0":n}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}},function(t,e,n){var r=n(194),i=n(195);t.exports=function(t,e){return null!=t&&i(t,e,r)}},function(t,e){t.exports=function(t,e){return null!=t&&e in Object(t)}},function(t,e,n){var r=n(68),i=n(27),o=n(1),u=n(13),s=n(30),a=n(20);t.exports=function(t,e,n){for(var c=-1,f=(e=r(e,t)).length,l=!1;++c<f;){var p=a(e[c]);if(!(l=null!=t&&n(t,p)))break;t=t[p]}return l||++c!=f?l:!!(f=null==t?0:t.length)&&s(f)&&u(p,f)&&(o(t)||i(t))}},function(t,e,n){var r=n(197),i=n(198),o=n(34),u=n(20);t.exports=function(t){return o(t)?r(u(t)):i(t)}},function(t,e){t.exports=function(t){return function(e){return null==e?void 0:e[t]}}},function(t,e,n){var r=n(67);t.exports=function(t){return function(e){return r(e,t)}}},function(t,e){t.exports=function(t,e,n,r){for(var i=t.length,o=n+(r?1:-1);r?o--:++o<i;)if(e(t[o],o,t))return o;return-1}},function(t,e){t.exports=function(t){return t!=t}},function(t,e){t.exports=function(t,e,n){for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}},function(t,e,n){var r=n(203),i=n(2),o=n(19),u=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,a=/^0o[0-7]+$/i,c=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(o(t))return NaN;if(i(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=i(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=r(t);var n=s.test(t);return n||a.test(t)?c(t.slice(2),n?2:8):u.test(t)?NaN:+t}},function(t,e,n){var r=n(204),i=/^\s+/;t.exports=function(t){return t?t.slice(0,r(t)+1).replace(i,""):t}},function(t,e){var n=/\s/;t.exports=function(t){for(var e=t.length;e--&&n.test(t.charAt(e)););return e}},function(t,e,n){var r=n(22),i=n(3);t.exports=function(t,e,n){var o=1&e,u=r(t);return function e(){var r=this&&this!==i&&this instanceof e?u:t;return r.apply(o?n:this,arguments)}}},function(t,e,n){var r=n(36),i=n(22),o=n(76),u=n(79),s=n(39),a=n(23),c=n(3);t.exports=function(t,e,n){var f=i(t);return function i(){for(var l=arguments.length,p=Array(l),h=l,d=s(i);h--;)p[h]=arguments[h];var v=l<3&&p[0]!==d&&p[l-1]!==d?[]:a(p,d);if((l-=v.length)<n)return u(t,e,o,i.placeholder,void 0,p,v,void 0,void 0,n-l);var g=this&&this!==c&&this instanceof i?f:t;return r(g,this,p)}}},function(t,e){t.exports=function(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}},function(t,e,n){var r=n(37),i=n(80),o=n(210),u=n(212);t.exports=function(t){var e=o(t),n=u[e];if("function"!=typeof n||!(e in r.prototype))return!1;if(t===n)return!0;var s=i(n);return!!s&&t===s[0]}},function(t,e){t.exports=function(){}},function(t,e,n){var r=n(211),i=Object.prototype.hasOwnProperty;t.exports=function(t){for(var e=t.name+"",n=r[e],o=i.call(r,e)?n.length:0;o--;){var u=n[o],s=u.func;if(null==s||s==t)return u.name}return e}},function(t,e){t.exports={}},function(t,e,n){var r=n(37),i=n(81),o=n(38),u=n(1),s=n(4),a=n(213),c=Object.prototype.hasOwnProperty;function f(t){if(s(t)&&!u(t)&&!(t instanceof r)){if(t instanceof i)return t;if(c.call(t,"__wrapped__"))return a(t)}return new i(t)}f.prototype=o.prototype,f.prototype.constructor=f,t.exports=f},function(t,e,n){var r=n(37),i=n(81),o=n(82);t.exports=function(t){if(t instanceof r)return t.clone();var e=new i(t.__wrapped__,t.__chain__);return e.__actions__=o(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}},function(t,e){var n=/\{\n\/\* \[wrapped with (.+)\] \*/,r=/,? & /;t.exports=function(t){var e=t.match(n);return e?e[1].split(r):[]}},function(t,e){var n=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;t.exports=function(t,e){var r=e.length;if(!r)return t;var i=r-1;return e[i]=(r>1?"& ":"")+e[i],e=e.join(r>2?", ":" "),t.replace(n,"{\n/* [wrapped with "+e+"] */\n")}},function(t,e,n){var r=n(217),i=n(218),o=n(21),u=i?function(t,e){return i(t,"toString",{configurable:!0,enumerable:!1,value:r(e),writable:!0})}:o;t.exports=u},function(t,e){t.exports=function(t){return function(){return t}}},function(t,e,n){var r=n(5),i=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=i},function(t,e,n){var r=n(220),i=n(221),o=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]];t.exports=function(t,e){return r(o,(function(n){var r="_."+n[0];e&n[1]&&!i(t,r)&&t.push(r)})),t.sort()}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}},function(t,e,n){var r=n(70);t.exports=function(t,e){return!!(null==t?0:t.length)&&r(t,e,0)>-1}},function(t,e,n){var r=n(82),i=n(13),o=Math.min;t.exports=function(t,e){for(var n=t.length,u=o(e.length,n),s=r(t);u--;){var a=e[u];t[u]=i(a,n)?s[a]:void 0}return t}},function(t,e,n){var r=n(36),i=n(22),o=n(3);t.exports=function(t,e,n,u){var s=1&e,a=i(t);return function e(){for(var i=-1,c=arguments.length,f=-1,l=u.length,p=Array(l+c),h=this&&this!==o&&this instanceof e?a:t;++f<l;)p[f]=u[f];for(;c--;)p[f++]=arguments[++i];return r(h,s?n:this,p)}}},function(t,e,n){var r=n(77),i=n(78),o=n(23),u=Math.min;t.exports=function(t,e){var n=t[1],s=e[1],a=n|s,c=a<131,f=128==s&&8==n||128==s&&256==n&&t[7].length<=e[8]||384==s&&e[7].length<=e[8]&&8==n;if(!c&&!f)return t;1&s&&(t[2]=e[2],a|=1&n?0:4);var l=e[3];if(l){var p=t[3];t[3]=p?r(p,l,e[4]):l,t[4]=p?o(t[3],"__lodash_placeholder__"):e[4]}return(l=e[5])&&(p=t[5],t[5]=p?i(p,l,e[6]):l,t[6]=p?o(t[5],"__lodash_placeholder__"):e[6]),(l=e[7])&&(t[7]=l),128&s&&(t[8]=null==t[8]?e[8]:u(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=a,t}},function(t,e,n){var r=n(21),i=n(226),o=n(86);t.exports=function(t,e){return o(i(t,e,r),t+"")}},function(t,e,n){var r=n(36),i=Math.max;t.exports=function(t,e,n){return e=i(void 0===e?t.length-1:e,0),function(){for(var o=arguments,u=-1,s=i(o.length-e,0),a=Array(s);++u<s;)a[u]=o[e+u];u=-1;for(var c=Array(e+1);++u<e;)c[u]=o[u];return c[e]=n(a),r(t,this,c)}}},function(t,e,n){var r=n(228),i=n(87),o=n(230),u=n(69);t.exports=function(t){return function(e){e=u(e);var n=i(e)?o(e):void 0,s=n?n[0]:e.charAt(0),a=n?r(n,1).join(""):e.slice(1);return s[t]()+a}}},function(t,e,n){var r=n(229);t.exports=function(t,e,n){var i=t.length;return n=void 0===n?i:n,!e&&n>=i?t:r(t,e,n)}},function(t,e){t.exports=function(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=Array(i);++r<i;)o[r]=t[r+e];return o}},function(t,e,n){var r=n(231),i=n(87),o=n(232);t.exports=function(t){return i(t)?o(t):r(t)}},function(t,e){t.exports=function(t){return t.split("")}},function(t,e){var n="[\\ud800-\\udfff]",r="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",i="\\ud83c[\\udffb-\\udfff]",o="[^\\ud800-\\udfff]",u="(?:\\ud83c[\\udde6-\\uddff]){2}",s="[\\ud800-\\udbff][\\udc00-\\udfff]",a="(?:"+r+"|"+i+")"+"?",c="[\\ufe0e\\ufe0f]?"+a+("(?:\\u200d(?:"+[o,u,s].join("|")+")[\\ufe0e\\ufe0f]?"+a+")*"),f="(?:"+[o+r+"?",r,u,s,n].join("|")+")",l=RegExp(i+"(?="+i+")|"+f+c,"g");t.exports=function(t){return t.match(l)||[]}},function(t,e,n){var r=n(24);t.exports=function(t,e){if("string"!=typeof t||"string"!=typeof e)return!1;var n=r[e];if(!n)return!1;const i=t.replace(/[\s-]/g,"");return n.filter((function(t){return!t.regex.test(i)})).map((function(t){return t.description})).length<n.length}},function(t,e,n){var r=n(24);t.exports=function(t,e){if("string"!=typeof t||"string"!=typeof e)return{valid:!1,reasons:["License and State must be Strings"]};var n=r[e];if(!n)return{valid:!1,reasons:["Not a valid US State"]};const i=t.replace(/[\s-]/g,"");var o=n.filter((function(t){return!t.regex.test(i)})).map((function(t){return t.description}));return{valid:o.length<n.length,reasons:o}}},function(t,e,n){var r=n(24);t.exports=Object.keys(r)},function(t,e,n){var r=n(237),i=n(238),o=n(72);t.exports=function(t){return function(e,n,u){return u&&"number"!=typeof u&&i(e,n,u)&&(n=u=void 0),e=o(e),void 0===n?(n=e,e=0):n=o(n),u=void 0===u?e<n?1:-1:o(u),r(e,n,u,t)}}},function(t,e){var n=Math.ceil,r=Math.max;t.exports=function(t,e,i,o){for(var u=-1,s=r(n((e-t)/(i||1)),0),a=Array(s);s--;)a[o?s:++u]=t,t+=i;return a}},function(t,e,n){var r=n(31),i=n(14),o=n(13),u=n(2);t.exports=function(t,e,n){if(!u(n))return!1;var s=typeof e;return!!("number"==s?i(n)&&o(e,n.length):"string"==s&&e in n)&&r(n[e],t)}},function(t,e,n){"use strict";n.r(e),n.d(e,"BaseAPI",(function(){return h})),n.d(e,"colors",(function(){return r})),n.d(e,"formatDate",(function(){return V})),n.d(e,"formatEmail",(function(){return q})),n.d(e,"formatName",(function(){return X})),n.d(e,"formatPhone",(function(){return K})),n.d(e,"formatSSN",(function(){return G})),n.d(e,"formatZipcode",(function(){return Q})),n.d(e,"getRejectMessage",(function(){return tt})),n.d(e,"getStatus",(function(){return et})),n.d(e,"isDate",(function(){return nt})),n.d(e,"isObject",(function(){return rt})),n.d(e,"isUrl",(function(){return it})),n.d(e,"maskName",(function(){return st})),n.d(e,"objectToQuery",(function(){return at})),n.d(e,"prettifyDate",(function(){return pt})),n.d(e,"toRelativeDate",(function(){return ie})),n.d(e,"toRelativeFromISO",(function(){return re})),n.d(e,"toBoolean",(function(){return Jt})),n.d(e,"Setter",(function(){return Vt})),n.d(e,"renderDetailValue",(function(){return St})),n.d(e,"validators",(function(){return o})),n.d(e,"legalReplace",(function(){return ut})),n.d(e,"parsePythonDate",(function(){return H})),n.d(e,"parseQuery",(function(){return ct})),n.d(e,"pickColor",(function(){return ft})),n.d(e,"pickScoreColor",(function(){return lt})),n.d(e,"selectMasterKey",(function(){return Rt})),n.d(e,"storageMock",(function(){return qt})),n.d(e,"toSentenceCase",(function(){return se})),n.d(e,"toTitleCase",(function(){return ae})),n.d(e,"translateStatus",(function(){return Te})),n.d(e,"availableStatuses",(function(){return i})),n.d(e,"validateDriversLicense",(function(){return Pe})),n.d(e,"currentStates",(function(){return Ce})),n.d(e,"validate_ssn",(function(){return ke})),n.d(e,"invalidFirstThree",(function(){return Be})),n.d(e,"valueExists",(function(){return Nt}));var r={};n.r(r),n.d(r,"primary",(function(){return d})),n.d(r,"secondary",(function(){return v})),n.d(r,"emerald",(function(){return g})),n.d(r,"tartOrange",(function(){return y})),n.d(r,"yellowOrange",(function(){return b})),n.d(r,"slateGray",(function(){return m})),n.d(r,"cadetBlue",(function(){return w})),n.d(r,"periwinkle",(function(){return x})),n.d(r,"aliceBlue",(function(){return _})),n.d(r,"smokeWhite",(function(){return A})),n.d(r,"alert0",(function(){return N})),n.d(r,"alert1",(function(){return O})),n.d(r,"alert2",(function(){return E})),n.d(r,"alert3",(function(){return S})),n.d(r,"ceruleanBlue",(function(){return R})),n.d(r,"peach",(function(){return $})),n.d(r,"babyPink",(function(){return j})),n.d(r,"spanishPink",(function(){return L})),n.d(r,"beauBlue",(function(){return T})),n.d(r,"cultured",(function(){return M})),n.d(r,"blueBell",(function(){return C})),n.d(r,"babyBlueEyes",(function(){return P})),n.d(r,"powderBlue",(function(){return D})),n.d(r,"honeyDew",(function(){return U})),n.d(r,"buff",(function(){return I})),n.d(r,"black",(function(){return B})),n.d(r,"white",(function(){return k})),n.d(r,"noticeMuted",(function(){return Y})),n.d(r,"noticeError",(function(){return Z})),n.d(r,"noticeWarning",(function(){return F})),n.d(r,"noticeSuccess",(function(){return z})),n.d(r,"noticeInfo",(function(){return W}));var i={};n.r(i),n.d(i,"INITIATED",(function(){return ce})),n.d(i,"PENDING",(function(){return fe})),n.d(i,"WITHDRAWN",(function(){return le})),n.d(i,"APPROVED",(function(){return pe})),n.d(i,"REJECTED",(function(){return he})),n.d(i,"CONSENT",(function(){return de})),n.d(i,"EMAILED",(function(){return ve})),n.d(i,"REVIEW",(function(){return ge})),n.d(i,"REVIEWING",(function(){return ye})),n.d(i,"CONSIDER",(function(){return be})),n.d(i,"PROCESSING",(function(){return me})),n.d(i,"PENDING_DISPUTE",(function(){return we})),n.d(i,"PENDING_FIRST_NOTICE",(function(){return xe})),n.d(i,"PENDING_SECOND_NOTICE",(function(){return _e})),n.d(i,"FIRST_NOTICE",(function(){return Ae})),n.d(i,"SECOND_NOTICE",(function(){return Ne})),n.d(i,"SSN_TRACE_FAILED",(function(){return Oe})),n.d(i,"MVR_FAILED",(function(){return Ee})),n.d(i,"COMPLIANCE",(function(){return Se})),n.d(i,"COMPLIANCE_SO",(function(){return Re})),n.d(i,"VERIFYING",(function(){return $e})),n.d(i,"COMPLIANCEREVIEW",(function(){return je})),n.d(i,"STORED",(function(){return Le})),n.d(i,"default",(function(){return Te}));var o={};n.r(o),n.d(o,"validateEmail",(function(){return Ve})),n.d(o,"validatePhone",(function(){return qe})),n.d(o,"isAlphaNumeric",(function(){return Xe})),n.d(o,"isValidCanadianZipcode",(function(){return Je})),n.d(o,"validateSSN",(function(){return Ke})),n.d(o,"validateCheck",(function(){return Ge})),n.d(o,"containsAtSymbol",(function(){return Qe})),n.d(o,"containsNumber",(function(){return tn})),n.d(o,"validateName",(function(){return en})),n.d(o,"validateAddress",(function(){return nn})),n.d(o,"validateCustomInput",(function(){return rn})),n.d(o,"validateZipcode",(function(){return on})),n.d(o,"validateCanadianZipcode",(function(){return un})),n.d(o,"isArray",(function(){return sn})),n.d(o,"validateMVRCheck",(function(){return an})),n.d(o,"validatePhoneVerification",(function(){return cn})),n.d(o,"disable_check",(function(){return fn})),n.d(o,"validateEmailId",(function(){return ln})),n.d(o,"validateTurnId",(function(){return pn}));var u=n(88),s=n.n(u),a=n(40);function c(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function f(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function l(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?f(Object(n),!0).forEach((function(e){p(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):f(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function p(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var h=function(){function t(e,n){var r=this;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),p(this,"approveWorker",(function(t,e){return r.api.put("/partners/me/workers/".concat(t,"/approve"),e)})),p(this,"withdrawWorker",(function(t,e){return r.api.post("/partners/me/workers/".concat(t,"/withdraw"),e)})),p(this,"rejectWorker",(function(t,e){return r.api.put("/partners/me/workers/".concat(t,"/reject"),e)})),p(this,"getMember",(function(){return r.api.get("/partners/me")})),p(this,"getSettings",(function(){return r.api.get("/partners/settings")})),p(this,"getWorkers",(function(t){return r.api.get("/partners/me/workers?query=".concat(JSON.stringify(t)))})),p(this,"getPendingWorkers",(function(t){return r.api.get("/cohort/candidates?query=".concat(JSON.stringify(t)))})),p(this,"getWorker",(function(t){return r.api.get("/partners/me/workers/".concat(t,"?full=false"))})),p(this,"checkWorker",(function(t){return r.api.post("/partners/workers",t)})),p(this,"validatePhone",(function(t){return r.api.get("PhoneNumbers/".concat(t,"?Type=carrier&CountryCode=US"),null,{headers:{Authorization:"Basic ".concat(Object(a.btoa)(r.twilioKey||""))}})})),p(this,"validateEmail",(function(t){return r.api.get("/verify_email?email=".concat(encodeURIComponent(t)))})),p(this,"validateSSN",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t,"/validate"),{ssn:e})})),p(this,"validateCandidateEmail",(function(t,e){return r.api.get("/candidate_verify_email/".concat(t,"?email=").concat(encodeURIComponent(e)))})),p(this,"getCandidateData",(function(t){return r.api.get("/candidate_consent_email/candidate/".concat(t))})),p(this,"getInterests",(function(){return r.api.get("/interests")})),p(this,"getTransports",(function(){return r.api.get("/transports")})),p(this,"getPaymetMethod",(function(){return r.api.get("/payment_settings/partner_methods")})),p(this,"getBackgroundReport",(function(t,e){return r.api.get("/candidate_consent_email/candidate/".concat(t,"/report?token=").concat(e))})),p(this,"provideCandidateConsent",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t),e)})),p(this,"provideCandidateConsentAsync",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t,"/async"),e)})),p(this,"getTrialStatus",(function(){return r.api.get("/organizations/trial_status")})),p(this,"newCandidate",(function(){return r.api.get("/organizations/new_candidate")})),p(this,"getTerms",(function(){return r.api.get("/partners/terms")})),p(this,"consent",(function(t){return r.api.post("/partners/me/consent",t)})),p(this,"apply",(function(t){var e=t.partner_name,n=t.partner_id;return r.api.post("/candidate_consent_email/".concat(e,"/").concat(n),{})})),p(this,"assent",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t,"/assent"),e)})),p(this,"getCohortCount",(function(t){return r.api.get("/cohort/count?query=".concat(JSON.stringify(t)))})),p(this,"createCohort",(function(t){return r.api.post("/cohort",t)})),p(this,"requestCohortWorkers",(function(t,e){return r.api.post("/cohort/".concat(t,"/request"),e)})),p(this,"getNotes",(function(t){return r.api.get("partners/me/workers/".concat(t,"/notes"))})),p(this,"saveNote",(function(t,e){return r.api.put("partners/me/workers/".concat(t,"/notes"),e)})),p(this,"resendEmail",(function(t){return r.api.post("partners/me/workers/".concat(t,"/email/consent/resend"))})),p(this,"postSettings",(function(t,e){return r.api.post(t,e)})),p(this,"btoaTest",(function(t){return Object(a.btoa)(t)})),e&&(this.api=function(t){var e=t.baseURL,n=t.headers,r=void 0===n?{}:n,i=s.a.create({baseURL:e,headers:l({Accept:"application/json"},r),validateStatus:function(){return!0}});i.interceptors.response.use((function(t){return{ok:t.status>=200&&t.status<300,data:t.data,status:t.status,headers:t.headers,config:t.config,problem:t.status>=200&&t.status<300?null:(e=t.status,e>=400&&e<=499?"CLIENT_ERROR":e>=500?"SERVER_ERROR":"UNKNOWN_ERROR"),originalError:null};var e}),(function(t){return{ok:!1,problem:"ECONNABORTED"===t.code?"TIMEOUT_ERROR":"NETWORK_ERROR",data:null,status:null,headers:null,config:t.config,originalError:t}}));var o={getBaseURL:function(){return i.defaults.baseURL||""},setHeaders:function(t){Object.assign(i.defaults.headers.common,t)},get:function(t,e,n){return i.get(t,l(l({},n),{},{params:null==e?void 0:e}))},post:function(t,e,n){return i.post(t,e,n)},put:function(t,e,n){return i.put(t,e,n)}};return Object.defineProperty(o,"headers",{get:function(){return i.defaults.headers.common}}),o}({baseURL:e,headers:{Accept:"application/json"}})),n&&(this.twilioKey=n)}var e,n,r;return e=t,(n=[{key:"setToken",value:function(t){return t?(this.api.setHeaders({Authorization:"Bearer ".concat(t)}),this):this}},{key:"setStatusPreference",value:function(t){return t?(this.api.setHeaders({Prefer:"status=".concat(t)}),this):this}}])&&c(e.prototype,n),r&&c(e,r),Object.defineProperty(e,"prototype",{writable:!1}),t}(),d="#2D3047",v="#00D9CD",g="#0ed067",y="#fb4d49",b="#faa73c",m="#5f7d95",w="#9bb1c8",x="#bfcddd",_="#e1e8f3",A="#f7f9fc",N=m,O=g,E=y,S=b,R="#4357ad",$="#f9cb9c",j="#f4cccc",L="#e6b8af",T="#cfe2f3",M="#e3e9ed",C="#b4a7d6",P="#9fc5e8",D="#b7ecec",U="#d9ead3",I="#ffe599",B="#000",k="#fff",Y=m,Z="#ff6c69",F="#faa03c",z="#13c063",W=m,H=function(t){if(!isNaN(parseInt(t,10))){var e=new Date(1e3*t),n=e.getTime();if(n){var r=new Date(n+60*e.getTimezoneOffset()*1e3),i=e.getTimezoneOffset()/60,o=e.getHours();return r.setHours(o-i),r}}return null},V=function(t){var e=H(t);return e?"".concat(e.getMonth()+1,"/").concat(e.getDate(),"/").concat(e.getFullYear()):"N/A"},q=function(t){return"string"!=typeof t?"":t.replace(/\s+/g,"")},X=function(t){return"string"!=typeof t?"":t.replace(/\s\s+/g," ")},J=function(t){var e=t.phone,n=t.encrypted,r=t.areaCode,i=n?"(".concat(e[0],") ").concat(e[1]," ").concat(e[2]).concat(e[3]):"(".concat(e[0],") ").concat(e[1],"-").concat(e[2]).concat(e[3]);return i=r?"".concat(r," ").concat(i):i},K=function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if("string"!=typeof t)return"N/A";var n,r=e?t:t.replace(/\D/g,"").substring(0,11);return r.length<10?r:(r.length>10&&(n=r[0],r=r.substring(1,11)),r=r.match(/.{1,3}/g),J({phone:r,encrypted:e,areaCode:n}))},G=function(t){if("string"!=typeof t)return"N/A";var e=t.replace(/\D/g,"").substring(0,9);return e.length<9?e:"".concat(e.substring(0,3),"-").concat(e.substring(3,5),"-").concat(e.substring(5,9))},Q=function(t){return"string"!=typeof t?"":t.replace(/\D/g,"").substring(0,5)},tt=function(t){if(!["RISK_MANAGEMENT","FCRA_E","FCRA_N","FCRA"].includes(t))return"Reject";return{RISK_MANAGEMENT:"Reject",FCRA:"Pre-Adverse Action",FCRA_E:"Pre-Adverse Action",FCRA_N:"Adverse Action"}[t]},et=function(t){return{review:"reviewing",pending:"consider",review__identity:"verifying",review__mvr:"Compliance Review",review__so:"Compliance Review",review__qa:"Compliance Review",initiated:"Stored"}[t]||t},nt=function(t){if(isNaN(parseInt(t,10)))return!1;var e=new Date(1e3*t);return!(e>new Date)&&e.getYear()>100},rt=function(t){return!!t&&t.constructor===Object},it=function(t){return/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(t)},ot=["Turn Technologies Inc.","[COMPANY]"],ut=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if("string"!=typeof t)return"";for(var n=t,r=0;r<ot.length;r++)n=n.replace(ot[r],e);return n},st=function(t){return"string"==typeof t&&t.length>0?"".concat(t.slice(0,1),"."):t},at=function(t){if(!rt(t))return null;var e=Object.keys(t);if(0===e.length)return null;var n=e.map((function(e){return"".concat(e,"=").concat(t[e])}));return"?".concat(n.join("&"))},ct=function(t){if("string"!=typeof t)return t;var e=new URLSearchParams(t.startsWith("?")?t.slice(1):t),n={};return e.forEach((function(t,e){n[e]=t})),n},ft=function(t){switch("string"==typeof t?t.toLowerCase():t){case"first_notice":case"second_notice":case"pending":case"consider":return F;case"unverified":case"not_verified":case"fraud":case"not_matched":case"rejected":case"deceased":case"withdrawn":return Z;case"verified":case"matched":case"valid":case"ready":case"complete":case"clear":case"fulfilled":case"randomized":case"approved":return z;case"processing":case"reviewing":case"review":case"consent":case"emailed":case"initiated":case"attention":case"verifying":case"review__mvr":case"review__qa":return W;case"none":default:return"gray"}},lt=function(t){var e=parseInt(t,10);return e>89?z:e>69?F:Z},pt=function(t){var e=new Date(t),n=e.toUTCString().slice(8,11),r=e.toUTCString().slice(5,7),i=e.toUTCString().slice(12,16);return"".concat(n," ").concat(r,", ").concat(i)},ht=n(89),dt=n.n(ht),vt=n(2),gt=n.n(vt),yt=n(1),bt=n.n(yt),mt=n(90),wt=n.n(mt),xt=n(91),_t=n.n(xt),At=["None","none","N/A"],Nt=function(t){return!!t&&(bt()(t)||gt()(t)?!_t()(t):!(wt()(At,t)>-1))},Ot=function t(e){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return bt()(e)?n?e.map((function(e){return gt()(e)?Et(e,n):t(e,n)})):e.join(" / "):gt()(e)?Et(e,n):e},Et=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=dt()(t,(function(t){return Nt(t)}));return n.map((function(t){return Ot(t,e)})).join(" / ")},St=Ot,Rt=function(t,e){if(!Array.isArray(t)||0===t.length)return"";var n,r=t[0];Nt(r[e])?n=e:n=Object.keys(r).find((function(t){return Nt(r[t])}));return n},$t=n(9),jt=n.n($t),Lt=n(41),Tt=n.n(Lt);function Mt(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function Ct(t,e,n){return e&&Mt(t.prototype,e),n&&Mt(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}function Pt(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Dt(t){return(Dt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Ut=function(t,e,n,r){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:r;Dt(i)===t&&(e[n]=i)},It=function(t,e,n,r){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:r,o=Array.isArray(n)?n:t[n];o.includes(i)&&(t[e]=i)},Bt=jt()((function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;return Tt()(Ut,t,e,n,r)})),kt=jt()((function(t,e){return function(){"boolean"==typeof t[e]&&(t[e]=!t[e])}})),Yt=Bt("string"),Zt=Bt("number"),Ft=Bt("boolean"),zt=jt()((function(t,e,n){n&&(t[e]=n)})),Wt=jt()((function(t,e,n){n&&(t[e]=!n)})),Ht=jt()((function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;return Tt()(It,t,e,n,r)})),Vt=Ct((function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),Pt(this,"setStringFactory",Yt(this)),Pt(this,"setNumberFactory",Zt(this)),Pt(this,"setBoolFactory",Ft(this)),Pt(this,"setTruthyFactory",zt(this)),Pt(this,"setFalsyFactory",Wt(this)),Pt(this,"setOptionFactory",Ht(this)),Pt(this,"toggleBoolFactory",kt(this))}));var qt=function(){var t={};return{setItem:function(e,n){t[e]=n||""},getItem:function(e){return e in t?t[e]:null},removeItem:function(e){delete t[e]},get length(){return Object.keys(t).length},key:function(e){return Object.keys(t)[e]||null}}};function Xt(t){return(Xt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Jt=function(t){switch(Xt(t)){case"boolean":return t;case"string":return"true"===t.toLowerCase();case"number":return t>0;case"undefined":return!1;case"object":return!!t&&(Array.isArray(t)?t.length>0:!(0===Object.getOwnPropertyNames(t).length));default:return!1}},Kt=n(6),Gt=n.n(Kt),Qt=n(92),te=n.n(Qt),ee=n(93),ne=n.n(ee);Gt.a.extend(te.a),Gt.a.extend(ne.a);var re=function(t){if("string"!=typeof t)return"N/A";var e=Gt()(t);if(!e.isValid())return"N/A";var n=Gt()().utcOffset(e.utcOffset());return n.diff(e,"day")<8?e.from(n):e.format("M/DD/YYYY")},ie=function(t){if("number"!=typeof t)return"N/A";var e=H(t);if(!e)return"N/A";var n=Gt()(e),r=Gt()().utcOffset(e.getTimezoneOffset()).subtract(e.getTimezoneOffset()/60,"hour");return r.diff(n,"day")<8?n.from(r):n.format("M/DD/YYYY")},oe=n(94),ue=n.n(oe),se=function(t){var e=t.toLowerCase();return[". ","! ","? "].forEach((function(t){e=e.split(t).map(ue.a).join(t)})),e},ae=function(t){return("string"==typeof t?t:String(t)).toLowerCase().split(" ").map((function(t){var e=t.charAt(0).toUpperCase(),n=t.slice(1);return"".concat(e).concat(n)})).join(" ")},ce="initiated",fe="pending",le="withdrawn",pe="approved",he="rejected",de="consent",ve="emailed",ge="review",ye="reviewing",be="consider",me="processing",we="pending__dispute",xe="pending__first_notice",_e="pending__second_notice",Ae="first_notice",Ne="second_notice",Oe="review__identity",Ee="review__mvr",Se="review__qa",Re="review__so",$e="verifying",je="Compliance Review",Le="Stored",Te=function(t,e){switch(t){case pe:return pe;case fe:case we:return fe;case he:return he;case xe:return e?Ae:he;case _e:return e?Ne:he;case de:return de;case me:return me;case ve:return ve;case ge:return ge;case ye:return ye;case le:return le;case ce:return Le;case Oe:return $e;case Ee:case Se:case Re:return je;default:return fe}},Me=n(42),Ce=Object.keys(Me.driversLicenseRegex),Pe=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"string"!=typeof t||"string"!=typeof e?{valid:!1,reasons:"License and State must be Strings"}:Ce.includes(e)?Object(Me.validateUSDriversLicense)(t,e):{valid:!0,reasons:""}},De=n(95),Ue=/^(986|(?!000|666|123456789|(\d)\2{8})[0-8][0-9]{2})(?!00)[0-9]{2}(?!0000)[0-9]{4}$/,Ie=/^078051120|219099999$/,Be=n.n(De)()(900,1e3).map((function(t){return"".concat(t)})).concat(["000","666"]),ke=function(t){if("string"!=typeof t)return!1;var e=t.replace(/\D/g,"");return!Ie.test(e)&&Ue.test(e)},Ye=n(10),Ze=n.n(Ye);function Fe(t){return function(t){if(Array.isArray(t))return ze(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"==typeof t)return ze(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ze(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ze(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function We(t){return(We="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var He=function(t){return Array.isArray(t)||!(!t||"object"!==We(t)||"number"!=typeof t.length||"function"!=typeof t.slice)},Ve=function(t){if(!t)return!1;return/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/.test(t)},qe=function(t){if(!t)return!1;return/^1?\s?\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/.test(t)},Xe=function(t){return null!==t.match(/^([a-z0-9])+/i)},Je=function(t){return null!==t.match(/^[A-Za-z]\d[A-Za-z]$/)||null!==t.match(/^[A-Za-z]\d[A-Za-z][ -]?\d[A-Za-z]\d/)},Ke=function(t){return"string"==typeof t&&9===t.replace(/\D/g,"").length},Ge=function(t){var e="clear"===t?[]:t;return He(e)?Fe(e):null},Qe=function(t){return/@/.test(t)},tn=function(t){return/\d/.test(t)},en=function(t){return 0!==t.trim().length&&!Qe(t)&&!tn(t)},nn=function(t){return 0!==t.trim().length&&!Qe(t)},rn=function(t){return!!Ze()(t)&&0!==t.trim().length},on=function(t){return Ze()(t)&&t.length>=5},un=function(t){return Ze()(t)&&Xe(t)&&Je(t)},sn=function(t){return He(t)},an=function(t){return gt()(t)||"string"==typeof t?t:{}},cn=function(t){switch(t){case"verified":case"True":return"verified";case"unverified":case"False":return"unverified";default:return""}},fn=function(t){return"string"==typeof t&&"true"===t.toLowerCase()},ln=function(t){return Ze()(t)&&32===t.length},pn=function(t){return Ze()(t)&&/^C{1}[0-9]{10}$/.test(t)}}])}));
11
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90dXJuLXNoYXJlZC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9kYXlqcy9kYXlqcy5taW4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2N1cnJ5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N0cmluZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0luZGV4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xpc3RDYWNoZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUNyZWF0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU3ltYm9sLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9LZXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lkZW50aXR5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQ3Rvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3JlcGxhY2VIb2xkZXJzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL0B0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlL3NyYy9saWNlbnNlLXJlZ2V4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1R5cGVkQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTGVuZ3RoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9lcS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcENhY2hlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ3JlYXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXBwbHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MYXp5V3JhcHBlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VMb2Rhc2guanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRIb2xkZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvQmFzZTY0L2Jhc2U2NC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvcGFydGlhbC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9AdHVybmFpL3ZhbGlkYXRlLXVzLWRyaXZlcnMtbGljZW5zZS9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvRm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9lbnYvZGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RmlsdGVyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZnJlZUdsb2JhbC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3RhY2suanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRUYWcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19XZWFrTWFwLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNTdHJpY3RDb21wYXJhYmxlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FzdFBhdGguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvU3RyaW5nLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUluZGV4T2YuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvSW50ZWdlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9GaW5pdGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVXcmFwLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldERhdGEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZXRhTWFwLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlSHlicmlkLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29tcG9zZUFyZ3MuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb21wb3NlQXJnc1JpZ2h0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlUmVjdXJyeS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldERhdGEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19Mb2Rhc2hXcmFwcGVyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weUFycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0RGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0V3JhcFRvU3RyaW5nLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNVbmljb2RlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2luZGV4T2YuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRW1wdHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL3JlbGF0aXZlVGltZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9kYXlqcy9wbHVnaW4vdXRjLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC91cHBlckZpcnN0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9yYW5nZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL251bGwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdmFsaWRhdG9yLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8od2VicGFjaykvYnVpbGRpbi9hbWQtb3B0aW9ucy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRWFjaC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3JPd24uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRm9yLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmFzZUZvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVGltZXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRSYXdUYWcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlS2V5cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCYXNlRWFjaC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJdGVyYXRlZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNYXRjaGVzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTWF0Y2guanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVDbGVhci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUdldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrR2V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc05hdGl2ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzTWFza2VkLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoQ2xlYXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlSGFzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbERlZXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXRDYWNoZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldENhY2hlQWRkLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVIYXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsQnlUYWcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19VaW50OEFycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwVG9BcnJheS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbE9iamVjdHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRBbGxLZXlzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldEFsbEtleXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRTeW1ib2xzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19EYXRhVmlldy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1Byb21pc2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRNYXRjaERhdGEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWF0Y2hlc1Byb3BlcnR5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9nZXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb1BhdGguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZW1vaXplQ2FwcGVkLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9tZW1vaXplLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRvU3RyaW5nLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlNYXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2hhc0luLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUhhc0luLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzUGF0aC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHlEZWVwLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc05hTi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmljdEluZGV4T2YuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvTnVtYmVyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRyaW0uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL190cmltbWVkRW5kSW5kZXguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCaW5kLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQ3VycnkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3VudEhvbGRlcnMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0xhemlhYmxlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9ub29wLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0RnVuY05hbWUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yZWFsTmFtZXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL3dyYXBwZXJMb2Rhc2guanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL193cmFwcGVyQ2xvbmUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRXcmFwRGV0YWlscy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luc2VydFdyYXBEZXRhaWxzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdXBkYXRlV3JhcERldGFpbHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUVhY2guanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcmVvcmRlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZVBhcnRpYWwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZXJnZURhdGEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUmVzdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJSZXN0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQ2FzZUZpcnN0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FzdFNsaWNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNsaWNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaW5nVG9BcnJheS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FzY2lpVG9BcnJheS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3VuaWNvZGVUb0FycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL0B0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlL3NyYy9pcy12YWxpZC11cy1saWNlbnNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL0B0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlL3NyYy92YWxpZGF0ZS1kcml2ZXJzLWxpY2Vuc2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvQHR1cm5haS92YWxpZGF0ZS11cy1kcml2ZXJzLWxpY2Vuc2Uvc3JjL3N1cHBvcnRlZC1zdGF0ZXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVSYW5nZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSYW5nZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSXRlcmF0ZWVDYWxsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3NlcnZpY2VzL2FwaS9pbmRleC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy9zdHlsZXMvY29uc3RhbnRzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3BhcnNlLXB5dGhvbi1kYXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2Zvcm1hdC1kYXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2Zvcm1hdC1lbWFpbC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9mb3JtYXQtbmFtZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9mb3JtYXQtcGhvbmUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvZm9ybWF0LXNzbi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9mb3JtYXQtemlwY29kZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9nZXQtcmVqZWN0LW1lc3NhZ2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvZ2V0LXN0YXR1cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9pcy1kYXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9pcy11cmwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvbGVnYWwtcmVwbGFjZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9tYXNrLW5hbWUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvb2JqZWN0LXRvLXF1ZXJ5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3BhcnNlUXVlcnkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvcGljay1jb2xvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9waWNrLXNjb3JlLWNvbG9yLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3ByZXR0aWZ5LWRhdGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvdmFsdWUtZXhpc3RzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3JlbmRlci1kZXRhaWwtdmFsdWUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvc2VsZWN0LW1hc3Rlci1rZXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvc2V0dGVycy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9zdG9yYWdlLW1vY2suanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvdG8tYm9vbGVhbi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy90by1yZWxhdGl2ZS1kYXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3RvLXNlbnRlbmNlLWNhc2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvdG8tdGl0bGUtY2FzZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy90cmFuc2xhdGUtc3RhdHVzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3ZhbGlkYXRlLWRyaXZlcnMtbGljZW5zZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy92YWxpZGF0ZS1zc24uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvdmFsaWRhdG9ycy5qcyJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwidGhpcyIsImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJjYWNoZSIsInRvU3RyaW5nIiwia2luZE9mIiwidGhpbmciLCJzdHIiLCJzbGljZSIsInRvTG93ZXJDYXNlIiwia2luZE9mVGVzdCIsInR5cGUiLCJpc0FycmF5IiwidmFsIiwiQXJyYXkiLCJpc1VuZGVmaW5lZCIsImlzQXJyYXlCdWZmZXIiLCJpc09iamVjdCIsImlzUGxhaW5PYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsImlzRGF0ZSIsImlzRmlsZSIsImlzQmxvYiIsImlzRmlsZUxpc3QiLCJpc0Z1bmN0aW9uIiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJmb3JFYWNoIiwib2JqIiwiZm4iLCJsZW5ndGgiLCJUeXBlZEFycmF5IiwiaXNUeXBlZEFycmF5IiwiVWludDhBcnJheSIsImlzQnVmZmVyIiwiY29uc3RydWN0b3IiLCJpc0Zvcm1EYXRhIiwiRm9ybURhdGEiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiYnVmZmVyIiwiaXNTdHJpbmciLCJpc051bWJlciIsImlzU3RyZWFtIiwicGlwZSIsImlzU3RhbmRhcmRCcm93c2VyRW52IiwibmF2aWdhdG9yIiwicHJvZHVjdCIsIndpbmRvdyIsImRvY3VtZW50IiwibWVyZ2UiLCJyZXN1bHQiLCJhc3NpZ25WYWx1ZSIsImFyZ3VtZW50cyIsImV4dGVuZCIsImEiLCJiIiwidGhpc0FyZyIsInRyaW0iLCJyZXBsYWNlIiwic3RyaXBCT00iLCJjb250ZW50IiwiY2hhckNvZGVBdCIsImluaGVyaXRzIiwic3VwZXJDb25zdHJ1Y3RvciIsInByb3BzIiwiZGVzY3JpcHRvcnMiLCJhc3NpZ24iLCJ0b0ZsYXRPYmplY3QiLCJzb3VyY2VPYmoiLCJkZXN0T2JqIiwiZmlsdGVyIiwicHJvcCIsIm1lcmdlZCIsImdldE93blByb3BlcnR5TmFtZXMiLCJlbmRzV2l0aCIsInNlYXJjaFN0cmluZyIsInBvc2l0aW9uIiwiU3RyaW5nIiwidW5kZWZpbmVkIiwibGFzdEluZGV4IiwiaW5kZXhPZiIsInRvQXJyYXkiLCJhcnIiLCJmcmVlR2xvYmFsIiwiZnJlZVNlbGYiLCJGdW5jdGlvbiIsImJhc2VJc05hdGl2ZSIsImdldFZhbHVlIiwiZSIsInUiLCJmIiwiaCIsIiQiLCJ5IiwiTSIsIndlZWtkYXlzIiwic3BsaXQiLCJtb250aHMiLCJvcmRpbmFsIiwiam9pbiIsInYiLCJ6IiwidXRjT2Zmc2V0IiwiTWF0aCIsImFicyIsImZsb29yIiwiZGF0ZSIsInllYXIiLCJtb250aCIsImNsb25lIiwiYWRkIiwiY2VpbCIsInciLCJEIiwibXMiLCJRIiwiZyIsIlMiLCJfIiwiTyIsImFyZ3MiLCJsb2NhbGUiLCIkTCIsInV0YyIsIiR1IiwieCIsIiR4IiwiJG9mZnNldCIsInBhcnNlIiwiJGQiLCJEYXRlIiwiTmFOIiwidGVzdCIsIm1hdGNoIiwic3Vic3RyaW5nIiwiVVRDIiwiaW5pdCIsIiR5IiwiZ2V0RnVsbFllYXIiLCIkTSIsImdldE1vbnRoIiwiJEQiLCJnZXREYXRlIiwiJFciLCJnZXREYXkiLCIkSCIsImdldEhvdXJzIiwiJG0iLCJnZXRNaW51dGVzIiwiJHMiLCJnZXRTZWNvbmRzIiwiJG1zIiwiZ2V0TWlsbGlzZWNvbmRzIiwiJHV0aWxzIiwiaXNWYWxpZCIsImlzU2FtZSIsInN0YXJ0T2YiLCJlbmRPZiIsImlzQWZ0ZXIiLCJpc0JlZm9yZSIsIiRnIiwic2V0IiwidW5peCIsInZhbHVlT2YiLCJnZXRUaW1lIiwidG9EYXRlIiwiYXBwbHkiLCIkbG9jYWxlIiwid2Vla1N0YXJ0IiwiJHNldCIsIm1pbiIsImRheXNJbk1vbnRoIiwiTnVtYmVyIiwicm91bmQiLCJzdWJ0cmFjdCIsImZvcm1hdCIsImludmFsaWREYXRlIiwibWVyaWRpZW0iLCJtb250aHNTaG9ydCIsIndlZWtkYXlzTWluIiwid2Vla2RheXNTaG9ydCIsImdldFRpbWV6b25lT2Zmc2V0IiwiZGlmZiIsInRvSlNPTiIsInRvSVNPU3RyaW5nIiwidG9VVENTdHJpbmciLCJrIiwiJGkiLCJpc0RheWpzIiwiZW4iLCJMcyIsInV0aWxzIiwiQXhpb3NFcnJvciIsIm1lc3NhZ2UiLCJjb2RlIiwiY29uZmlnIiwicmVxdWVzdCIsInJlc3BvbnNlIiwiRXJyb3IiLCJkZXNjcmlwdGlvbiIsIm51bWJlciIsImZpbGVOYW1lIiwibGluZU51bWJlciIsImNvbHVtbk51bWJlciIsInN0YWNrIiwic3RhdHVzIiwiZGVmaW5lUHJvcGVydGllcyIsImZyb20iLCJlcnJvciIsImN1c3RvbVByb3BzIiwiYXhpb3NFcnJvciIsImdldFJhd1RhZyIsIm9iamVjdFRvU3RyaW5nIiwic3ltVG9TdHJpbmdUYWciLCJjcmVhdGVXcmFwIiwiY3VycnkiLCJmdW5jIiwiYXJpdHkiLCJndWFyZCIsInBsYWNlaG9sZGVyIiwiYmFzZUdldFRhZyIsImlzT2JqZWN0TGlrZSIsIkNhbmNlbGVkRXJyb3IiLCJFUlJfQ0FOQ0VMRUQiLCJfX0NBTkNFTF9fIiwicmVJc1VpbnQiLCJpc0xlbmd0aCIsImxpc3RDYWNoZUNsZWFyIiwibGlzdENhY2hlRGVsZXRlIiwibGlzdENhY2hlR2V0IiwibGlzdENhY2hlSGFzIiwibGlzdENhY2hlU2V0IiwiTGlzdENhY2hlIiwiZW50cmllcyIsImluZGV4IiwiY2xlYXIiLCJlbnRyeSIsImhhcyIsImVxIiwiYXJyYXkiLCJuYXRpdmVDcmVhdGUiLCJnZXROYXRpdmUiLCJpc0tleWFibGUiLCJtYXAiLCJkYXRhIiwiX19kYXRhX18iLCJpc1N5bWJvbCIsImJhc2VDcmVhdGUiLCJDdG9yIiwidGhpc0JpbmRpbmciLCJyZXNJbmRleCIsIkFMIiwicmVnZXgiLCJBSyIsIkFaIiwiQVIiLCJDQSIsIkNPIiwiQ1QiLCJERSIsIkRDIiwiRkwiLCJHQSIsIkdVIiwiSEkiLCJJRCIsIklMIiwiSU4iLCJJQSIsIktTIiwiS1kiLCJMQSIsIk1FIiwiTUQiLCJNQSIsIk1JIiwiTU4iLCJNUyIsIk1PIiwiTVQiLCJORSIsIk5WIiwiTkgiLCJOSiIsIk5NIiwiTlkiLCJOQyIsIk5EIiwiT0giLCJPSyIsIk9SIiwiUEEiLCJSSSIsIlNDIiwiU0QiLCJUTiIsIlRYIiwiVVQiLCJWVCIsIlZBIiwiVkkiLCJXQSIsIldWIiwiV0kiLCJXWSIsIlBSIiwibm9ybWFsaXplSGVhZGVyTmFtZSIsInRyYW5zaXRpb25hbERlZmF1bHRzIiwidG9Gb3JtRGF0YSIsIkRFRkFVTFRfQ09OVEVOVF9UWVBFIiwic2V0Q29udGVudFR5cGVJZlVuc2V0IiwiaGVhZGVycyIsImFkYXB0ZXIiLCJkZWZhdWx0cyIsInRyYW5zaXRpb25hbCIsIlhNTEh0dHBSZXF1ZXN0IiwicHJvY2VzcyIsInRyYW5zZm9ybVJlcXVlc3QiLCJpc09iamVjdFBheWxvYWQiLCJjb250ZW50VHlwZSIsIl9Gb3JtRGF0YSIsImVudiIsInJhd1ZhbHVlIiwicGFyc2VyIiwiZW5jb2RlciIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdHJpbmdpZnlTYWZlbHkiLCJ0cmFuc2Zvcm1SZXNwb25zZSIsInNpbGVudEpTT05QYXJzaW5nIiwiZm9yY2VkSlNPTlBhcnNpbmciLCJzdHJpY3RKU09OUGFyc2luZyIsInJlc3BvbnNlVHlwZSIsIkVSUl9CQURfUkVTUE9OU0UiLCJ0aW1lb3V0IiwieHNyZkNvb2tpZU5hbWUiLCJ4c3JmSGVhZGVyTmFtZSIsIm1heENvbnRlbnRMZW5ndGgiLCJtYXhCb2R5TGVuZ3RoIiwidmFsaWRhdGVTdGF0dXMiLCJjb21tb24iLCJtZXRob2QiLCJhcnJheUxpa2VLZXlzIiwiYmFzZUtleXMiLCJpc0FycmF5TGlrZSIsImJhc2VJc0FyZ3VtZW50cyIsIm9iamVjdFByb3RvIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJpc0FyZ3VtZW50cyIsInN0dWJGYWxzZSIsImZyZWVFeHBvcnRzIiwibm9kZVR5cGUiLCJmcmVlTW9kdWxlIiwiQnVmZmVyIiwiYmFzZUlzVHlwZWRBcnJheSIsImJhc2VVbmFyeSIsIm5vZGVVdGlsIiwibm9kZUlzVHlwZWRBcnJheSIsIm90aGVyIiwiTWFwIiwibWFwQ2FjaGVDbGVhciIsIm1hcENhY2hlRGVsZXRlIiwibWFwQ2FjaGVHZXQiLCJtYXBDYWNoZUhhcyIsIm1hcENhY2hlU2V0IiwiTWFwQ2FjaGUiLCJyZUlzRGVlcFByb3AiLCJyZUlzUGxhaW5Qcm9wIiwib2JqZWN0Q3JlYXRlIiwicHJvdG8iLCJiYXNlTG9kYXNoIiwiTGF6eVdyYXBwZXIiLCJfX3dyYXBwZWRfXyIsIl9fYWN0aW9uc19fIiwiX19kaXJfXyIsIl9fZmlsdGVyZWRfXyIsIl9faXRlcmF0ZWVzX18iLCJfX3Rha2VDb3VudF9fIiwiX192aWV3c19fIiwiYmFzZTY0IiwiZ2xvYmFsIiwiYnRvYSIsImF0b2IiLCJjaGFycyIsIkludmFsaWRDaGFyYWN0ZXJFcnJvciIsImlucHV0IiwiYmxvY2siLCJjaGFyQ29kZSIsImlkeCIsIm91dHB1dCIsImNoYXJBdCIsImJzIiwiYmMiLCJmcm9tQ2hhckNvZGUiLCJiYXNlUmVzdCIsImdldEhvbGRlciIsInJlcGxhY2VIb2xkZXJzIiwicGFydGlhbCIsInBhcnRpYWxzIiwiaG9sZGVycyIsImRyaXZlcnNMaWNlbnNlUmVnZXgiLCJpc1ZhbGlkVVNMaWNlbnNlIiwidmFsaWRhdGVVU0RyaXZlcnNMaWNlbnNlIiwic3VwcG9ydGVkU3RhdGVzIiwiZW5jb2RlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwidXJsIiwicGFyYW1zIiwicGFyYW1zU2VyaWFsaXplciIsInNlcmlhbGl6ZWRQYXJhbXMiLCJwYXJ0cyIsInB1c2giLCJoYXNobWFya0luZGV4IiwiY2xhcmlmeVRpbWVvdXRFcnJvciIsImZvcm1EYXRhIiwiY29udmVydFZhbHVlIiwiQmxvYiIsImJ1aWxkIiwicGFyZW50S2V5IiwiZnVsbEtleSIsImVsIiwiYXBwZW5kIiwicG9wIiwic2V0dGxlIiwiY29va2llcyIsImJ1aWxkVVJMIiwiYnVpbGRGdWxsUGF0aCIsInBhcnNlSGVhZGVycyIsImlzVVJMU2FtZU9yaWdpbiIsInBhcnNlUHJvdG9jb2wiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9uQ2FuY2VsZWQiLCJyZXF1ZXN0RGF0YSIsInJlcXVlc3RIZWFkZXJzIiwiZG9uZSIsImNhbmNlbFRva2VuIiwidW5zdWJzY3JpYmUiLCJzaWduYWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiYXV0aCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJ1bmVzY2FwZSIsIkF1dGhvcml6YXRpb24iLCJmdWxsUGF0aCIsImJhc2VVUkwiLCJvbmxvYWRlbmQiLCJyZXNwb25zZUhlYWRlcnMiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZVRleHQiLCJzdGF0dXNUZXh0IiwiZXJyIiwib3BlbiIsInRvVXBwZXJDYXNlIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwic2V0VGltZW91dCIsIm9uYWJvcnQiLCJFQ09OTkFCT1JURUQiLCJvbmVycm9yIiwiRVJSX05FVFdPUksiLCJvbnRpbWVvdXQiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwiRVRJTUVET1VUIiwieHNyZlZhbHVlIiwid2l0aENyZWRlbnRpYWxzIiwicmVhZCIsInNldFJlcXVlc3RIZWFkZXIiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJhZGRFdmVudExpc3RlbmVyIiwib25VcGxvYWRQcm9ncmVzcyIsInVwbG9hZCIsImNhbmNlbCIsImFib3J0Iiwic3Vic2NyaWJlIiwiYWJvcnRlZCIsInByb3RvY29sIiwiRVJSX0JBRF9SRVFVRVNUIiwic2VuZCIsImlzQWJzb2x1dGVVUkwiLCJjb21iaW5lVVJMcyIsInJlcXVlc3RlZFVSTCIsImNvbmZpZzEiLCJjb25maWcyIiwiZ2V0TWVyZ2VkVmFsdWUiLCJ0YXJnZXQiLCJzb3VyY2UiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJtZXJnZURpcmVjdEtleXMiLCJtZXJnZU1hcCIsImtleXMiLCJjb25jYXQiLCJjb25maWdWYWx1ZSIsInByZWRpY2F0ZSIsIndlYnBhY2tQb2x5ZmlsbCIsImRlcHJlY2F0ZSIsInBhdGhzIiwiY2hpbGRyZW4iLCJpc1Byb3RvdHlwZSIsIm5hdGl2ZUtleXMiLCJ0YWciLCJzdGFja0NsZWFyIiwic3RhY2tEZWxldGUiLCJzdGFja0dldCIsInN0YWNrSGFzIiwic3RhY2tTZXQiLCJTdGFjayIsInNpemUiLCJmdW5jVG9TdHJpbmciLCJiYXNlSXNFcXVhbERlZXAiLCJiYXNlSXNFcXVhbCIsImJpdG1hc2siLCJjdXN0b21pemVyIiwiU2V0Q2FjaGUiLCJhcnJheVNvbWUiLCJjYWNoZUhhcyIsImVxdWFsRnVuYyIsImlzUGFydGlhbCIsImFyckxlbmd0aCIsIm90aExlbmd0aCIsImFyclN0YWNrZWQiLCJvdGhTdGFja2VkIiwic2VlbiIsImFyclZhbHVlIiwib3RoVmFsdWUiLCJjb21wYXJlZCIsIm90aEluZGV4IiwiRGF0YVZpZXciLCJTZXQiLCJXZWFrTWFwIiwidG9Tb3VyY2UiLCJkYXRhVmlld0N0b3JTdHJpbmciLCJtYXBDdG9yU3RyaW5nIiwicHJvbWlzZUN0b3JTdHJpbmciLCJzZXRDdG9yU3RyaW5nIiwid2Vha01hcEN0b3JTdHJpbmciLCJnZXRUYWciLCJjdG9yU3RyaW5nIiwic3JjVmFsdWUiLCJjYXN0UGF0aCIsInRvS2V5IiwicGF0aCIsImlzS2V5Iiwic3RyaW5nVG9QYXRoIiwiYmFzZVRvU3RyaW5nIiwiYmFzZUZpbmRJbmRleCIsImJhc2VJc05hTiIsInN0cmljdEluZGV4T2YiLCJmcm9tSW5kZXgiLCJ0b0Zpbml0ZSIsInJlbWFpbmRlciIsInRvTnVtYmVyIiwiYmFzZVNldERhdGEiLCJjcmVhdGVCaW5kIiwiY3JlYXRlQ3VycnkiLCJjcmVhdGVIeWJyaWQiLCJjcmVhdGVQYXJ0aWFsIiwiZ2V0RGF0YSIsIm1lcmdlRGF0YSIsInNldERhdGEiLCJzZXRXcmFwVG9TdHJpbmciLCJ0b0ludGVnZXIiLCJuYXRpdmVNYXgiLCJtYXgiLCJhcmdQb3MiLCJhcnkiLCJpc0JpbmRLZXkiLCJUeXBlRXJyb3IiLCJwYXJ0aWFsc1JpZ2h0IiwiaG9sZGVyc1JpZ2h0IiwibmV3RGF0YSIsImlkZW50aXR5IiwibWV0YU1hcCIsImNvbXBvc2VBcmdzIiwiY29tcG9zZUFyZ3NSaWdodCIsImNvdW50SG9sZGVycyIsImNyZWF0ZUN0b3IiLCJjcmVhdGVSZWN1cnJ5IiwicmVvcmRlciIsImlzQXJ5IiwiaXNCaW5kIiwiaXNDdXJyaWVkIiwiaXNGbGlwIiwid3JhcHBlciIsImhvbGRlcnNDb3VudCIsIm5ld0hvbGRlcnMiLCJyZXZlcnNlIiwiYXJnc0luZGV4IiwiYXJnc0xlbmd0aCIsImhvbGRlcnNMZW5ndGgiLCJsZWZ0SW5kZXgiLCJsZWZ0TGVuZ3RoIiwicmFuZ2VMZW5ndGgiLCJpc1VuY3VycmllZCIsImhvbGRlcnNJbmRleCIsInJpZ2h0SW5kZXgiLCJyaWdodExlbmd0aCIsIm9mZnNldCIsImlzTGF6aWFibGUiLCJ3cmFwRnVuYyIsImlzQ3VycnkiLCJub29wIiwiTG9kYXNoV3JhcHBlciIsImNoYWluQWxsIiwiX19jaGFpbl9fIiwiX19pbmRleF9fIiwiX192YWx1ZXNfXyIsInNob3J0T3V0IiwibmF0aXZlTm93Iiwibm93IiwiY291bnQiLCJsYXN0Q2FsbGVkIiwic3RhbXAiLCJyZW1haW5pbmciLCJnZXRXcmFwRGV0YWlscyIsImluc2VydFdyYXBEZXRhaWxzIiwic2V0VG9TdHJpbmciLCJ1cGRhdGVXcmFwRGV0YWlscyIsInJlZmVyZW5jZSIsImJhc2VTZXRUb1N0cmluZyIsInJlSGFzVW5pY29kZSIsIlJlZ0V4cCIsInN0cmluZyIsImFycmF5RmlsdGVyIiwiYmFzZUZpbHRlciIsImJhc2VJdGVyYXRlZSIsImNvbGxlY3Rpb24iLCJiYXNlSW5kZXhPZiIsInNwbGljZSIsImZ1dHVyZSIsInBhc3QiLCJtbSIsImhoIiwiZGQiLCJNTSIsInl5IiwiZnJvbVRvQmFzZSIsInJlbGF0aXZlVGltZSIsInRocmVzaG9sZHMiLCJyb3VuZGluZyIsInRvIiwidG9Ob3ciLCJmcm9tTm93IiwibG9jYWwiLCJnZXRVVENGdWxsWWVhciIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImdldFVUQ0RheSIsImdldFVUQ0hvdXJzIiwiZ2V0VVRDTWludXRlcyIsImdldFVUQ1NlY29uZHMiLCJnZXRVVENNaWxsaXNlY29uZHMiLCIkbG9jYWxPZmZzZXQiLCJpc1VUQyIsInVwcGVyRmlyc3QiLCJjcmVhdGVDYXNlRmlyc3QiLCJyYW5nZSIsImNyZWF0ZVJhbmdlIiwiQXhpb3MiLCJtZXJnZUNvbmZpZyIsImF4aW9zIiwiY3JlYXRlSW5zdGFuY2UiLCJkZWZhdWx0Q29uZmlnIiwiY29udGV4dCIsImluc3RhbmNlIiwiaW5zdGFuY2VDb25maWciLCJDYW5jZWxUb2tlbiIsImlzQ2FuY2VsIiwiVkVSU0lPTiIsInZlcnNpb24iLCJDYW5jZWwiLCJhbGwiLCJwcm9taXNlcyIsInNwcmVhZCIsImlzQXhpb3NFcnJvciIsImRlZmF1bHQiLCJJbnRlcmNlcHRvck1hbmFnZXIiLCJkaXNwYXRjaFJlcXVlc3QiLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0b3JzIiwiaW50ZXJjZXB0b3JzIiwiY29uZmlnT3JVcmwiLCJhc3NlcnRPcHRpb25zIiwiYm9vbGVhbiIsInJlcXVlc3RJbnRlcmNlcHRvckNoYWluIiwic3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzIiwiaW50ZXJjZXB0b3IiLCJydW5XaGVuIiwic3luY2hyb25vdXMiLCJ1bnNoaWZ0IiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJwcm9taXNlIiwicmVzcG9uc2VJbnRlcmNlcHRvckNoYWluIiwiY2hhaW4iLCJ0aGVuIiwic2hpZnQiLCJuZXdDb25maWciLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJnZXRVcmkiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJoYW5kbGVycyIsInVzZSIsIm9wdGlvbnMiLCJlamVjdCIsImlkIiwidHJhbnNmb3JtRGF0YSIsInRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQiLCJ0aHJvd0lmUmVxdWVzdGVkIiwicmVhc29uIiwiZm5zIiwiY2FjaGVkU2V0VGltZW91dCIsImNhY2hlZENsZWFyVGltZW91dCIsImRlZmF1bHRTZXRUaW1vdXQiLCJkZWZhdWx0Q2xlYXJUaW1lb3V0IiwicnVuVGltZW91dCIsImZ1biIsImNsZWFyVGltZW91dCIsImN1cnJlbnRRdWV1ZSIsInF1ZXVlIiwiZHJhaW5pbmciLCJxdWV1ZUluZGV4IiwiY2xlYW5VcE5leHRUaWNrIiwiZHJhaW5RdWV1ZSIsImxlbiIsInJ1biIsIm1hcmtlciIsInJ1bkNsZWFyVGltZW91dCIsIkl0ZW0iLCJuZXh0VGljayIsInRpdGxlIiwiYnJvd3NlciIsImFyZ3YiLCJ2ZXJzaW9ucyIsIm9uIiwiYWRkTGlzdGVuZXIiLCJvbmNlIiwib2ZmIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJlbWl0IiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImxpc3RlbmVycyIsImJpbmRpbmciLCJjd2QiLCJjaGRpciIsImRpciIsInVtYXNrIiwibm9ybWFsaXplZE5hbWUiLCJpZWVlNzU0Iiwia01heExlbmd0aCIsIlRZUEVEX0FSUkFZX1NVUFBPUlQiLCJjcmVhdGVCdWZmZXIiLCJ0aGF0IiwiUmFuZ2VFcnJvciIsIl9fcHJvdG9fXyIsImFyZyIsImVuY29kaW5nT3JPZmZzZXQiLCJhbGxvY1Vuc2FmZSIsImJ5dGVPZmZzZXQiLCJieXRlTGVuZ3RoIiwiZnJvbUFycmF5TGlrZSIsImZyb21BcnJheUJ1ZmZlciIsImVuY29kaW5nIiwiaXNFbmNvZGluZyIsImFjdHVhbCIsIndyaXRlIiwiZnJvbVN0cmluZyIsImNoZWNrZWQiLCJjb3B5IiwiZnJvbU9iamVjdCIsImFzc2VydFNpemUiLCJsb3dlcmVkQ2FzZSIsInV0ZjhUb0J5dGVzIiwiYmFzZTY0VG9CeXRlcyIsInNsb3dUb1N0cmluZyIsInN0YXJ0IiwiZW5kIiwiaGV4U2xpY2UiLCJ1dGY4U2xpY2UiLCJhc2NpaVNsaWNlIiwibGF0aW4xU2xpY2UiLCJiYXNlNjRTbGljZSIsInV0ZjE2bGVTbGljZSIsInN3YXAiLCJiaWRpcmVjdGlvbmFsSW5kZXhPZiIsImlzTmFOIiwiYXJyYXlJbmRleE9mIiwibGFzdEluZGV4T2YiLCJpbmRleFNpemUiLCJ2YWxMZW5ndGgiLCJidWYiLCJyZWFkVUludDE2QkUiLCJmb3VuZEluZGV4IiwiZm91bmQiLCJqIiwiaGV4V3JpdGUiLCJzdHJMZW4iLCJwYXJzZWQiLCJwYXJzZUludCIsInN1YnN0ciIsInV0ZjhXcml0ZSIsImJsaXRCdWZmZXIiLCJhc2NpaVdyaXRlIiwiYnl0ZUFycmF5IiwiYXNjaWlUb0J5dGVzIiwibGF0aW4xV3JpdGUiLCJiYXNlNjRXcml0ZSIsInVjczJXcml0ZSIsInVuaXRzIiwiaGkiLCJsbyIsInV0ZjE2bGVUb0J5dGVzIiwiZnJvbUJ5dGVBcnJheSIsInJlcyIsInNlY29uZEJ5dGUiLCJ0aGlyZEJ5dGUiLCJmb3VydGhCeXRlIiwidGVtcENvZGVQb2ludCIsImZpcnN0Qnl0ZSIsImNvZGVQb2ludCIsImJ5dGVzUGVyU2VxdWVuY2UiLCJjb2RlUG9pbnRzIiwiZGVjb2RlQ29kZVBvaW50c0FycmF5IiwiU2xvd0J1ZmZlciIsImFsbG9jIiwiSU5TUEVDVF9NQVhfQllURVMiLCJmb28iLCJzdWJhcnJheSIsInR5cGVkQXJyYXlTdXBwb3J0IiwicG9vbFNpemUiLCJfYXVnbWVudCIsInNwZWNpZXMiLCJjb25maWd1cmFibGUiLCJmaWxsIiwiYWxsb2NVbnNhZmVTbG93IiwiX2lzQnVmZmVyIiwiY29tcGFyZSIsImxpc3QiLCJwb3MiLCJzd2FwMTYiLCJzd2FwMzIiLCJzd2FwNjQiLCJlcXVhbHMiLCJpbnNwZWN0IiwidGhpc1N0YXJ0IiwidGhpc0VuZCIsInRoaXNDb3B5IiwidGFyZ2V0Q29weSIsImluY2x1ZGVzIiwiaXNGaW5pdGUiLCJfYXJyIiwicmV0Iiwib3V0IiwidG9IZXgiLCJieXRlcyIsImNoZWNrT2Zmc2V0IiwiZXh0IiwiY2hlY2tJbnQiLCJvYmplY3RXcml0ZVVJbnQxNiIsImxpdHRsZUVuZGlhbiIsIm9iamVjdFdyaXRlVUludDMyIiwiY2hlY2tJRUVFNzU0Iiwid3JpdGVGbG9hdCIsIm5vQXNzZXJ0Iiwid3JpdGVEb3VibGUiLCJuZXdCdWYiLCJzbGljZUxlbiIsInJlYWRVSW50TEUiLCJtdWwiLCJyZWFkVUludEJFIiwicmVhZFVJbnQ4IiwicmVhZFVJbnQxNkxFIiwicmVhZFVJbnQzMkxFIiwicmVhZFVJbnQzMkJFIiwicmVhZEludExFIiwicG93IiwicmVhZEludEJFIiwicmVhZEludDgiLCJyZWFkSW50MTZMRSIsInJlYWRJbnQxNkJFIiwicmVhZEludDMyTEUiLCJyZWFkSW50MzJCRSIsInJlYWRGbG9hdExFIiwicmVhZEZsb2F0QkUiLCJyZWFkRG91YmxlTEUiLCJyZWFkRG91YmxlQkUiLCJ3cml0ZVVJbnRMRSIsIndyaXRlVUludEJFIiwid3JpdGVVSW50OCIsIndyaXRlVUludDE2TEUiLCJ3cml0ZVVJbnQxNkJFIiwid3JpdGVVSW50MzJMRSIsIndyaXRlVUludDMyQkUiLCJ3cml0ZUludExFIiwibGltaXQiLCJzdWIiLCJ3cml0ZUludEJFIiwid3JpdGVJbnQ4Iiwid3JpdGVJbnQxNkxFIiwid3JpdGVJbnQxNkJFIiwid3JpdGVJbnQzMkxFIiwid3JpdGVJbnQzMkJFIiwid3JpdGVGbG9hdExFIiwid3JpdGVGbG9hdEJFIiwid3JpdGVEb3VibGVMRSIsIndyaXRlRG91YmxlQkUiLCJ0YXJnZXRTdGFydCIsIklOVkFMSURfQkFTRTY0X1JFIiwiSW5maW5pdHkiLCJsZWFkU3Vycm9nYXRlIiwidG9CeXRlQXJyYXkiLCJzdHJpbmd0cmltIiwiYmFzZTY0Y2xlYW4iLCJzcmMiLCJkc3QiLCJiNjQiLCJsZW5zIiwiZ2V0TGVucyIsInZhbGlkTGVuIiwicGxhY2VIb2xkZXJzTGVuIiwidG1wIiwiQXJyIiwiX2J5dGVMZW5ndGgiLCJjdXJCeXRlIiwicmV2TG9va3VwIiwidWludDgiLCJleHRyYUJ5dGVzIiwibGVuMiIsImVuY29kZUNodW5rIiwibG9va3VwIiwibnVtIiwiaXNMRSIsIm1MZW4iLCJuQnl0ZXMiLCJlTGVuIiwiZU1heCIsImVCaWFzIiwibkJpdHMiLCJydCIsImxvZyIsIkxOMiIsImV4cGlyZXMiLCJkb21haW4iLCJzZWN1cmUiLCJjb29raWUiLCJ0b0dNVFN0cmluZyIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsInJlbGF0aXZlVVJMIiwiaWdub3JlRHVwbGljYXRlT2YiLCJsaW5lIiwib3JpZ2luVVJMIiwibXNpZSIsInVzZXJBZ2VudCIsInVybFBhcnNpbmdOb2RlIiwiY3JlYXRlRWxlbWVudCIsInJlc29sdmVVUkwiLCJocmVmIiwic2V0QXR0cmlidXRlIiwiaG9zdCIsInNlYXJjaCIsImhhc2giLCJob3N0bmFtZSIsInBvcnQiLCJwYXRobmFtZSIsImxvY2F0aW9uIiwicmVxdWVzdFVSTCIsImV4ZWMiLCJkZXByZWNhdGVkV2FybmluZ3MiLCJmb3JtYXRNZXNzYWdlIiwib3B0IiwiZGVzYyIsIm9wdHMiLCJFUlJfREVQUkVDQVRFRCIsImNvbnNvbGUiLCJ3YXJuIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsImV4ZWN1dG9yIiwicmVzb2x2ZVByb21pc2UiLCJ0b2tlbiIsIl9saXN0ZW5lcnMiLCJvbmZ1bGZpbGxlZCIsIl9yZXNvbHZlIiwibGlzdGVuZXIiLCJjYWxsYmFjayIsInBheWxvYWQiLCJfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyIsImJhc2VFYWNoIiwiYmFzZUZvck93biIsImNyZWF0ZUJhc2VFYWNoIiwiYmFzZUZvciIsIml0ZXJhdGVlIiwiY3JlYXRlQmFzZUZvciIsImZyb21SaWdodCIsImtleXNGdW5jIiwiaXRlcmFibGUiLCJiYXNlVGltZXMiLCJpc0luZGV4IiwiaW5oZXJpdGVkIiwiaXNBcnIiLCJpc0FyZyIsImlzQnVmZiIsImlzVHlwZSIsInNraXBJbmRleGVzIiwibmF0aXZlT2JqZWN0VG9TdHJpbmciLCJpc093biIsInVubWFza2VkIiwidHlwZWRBcnJheVRhZ3MiLCJmcmVlUHJvY2VzcyIsInR5cGVzIiwicmVxdWlyZSIsIm92ZXJBcmciLCJ0cmFuc2Zvcm0iLCJlYWNoRnVuYyIsImJhc2VNYXRjaGVzIiwiYmFzZU1hdGNoZXNQcm9wZXJ0eSIsImJhc2VJc01hdGNoIiwiZ2V0TWF0Y2hEYXRhIiwibWF0Y2hlc1N0cmljdENvbXBhcmFibGUiLCJtYXRjaERhdGEiLCJub0N1c3RvbWl6ZXIiLCJvYmpWYWx1ZSIsIkNPTVBBUkVfUEFSVElBTF9GTEFHIiwiYXNzb2NJbmRleE9mIiwicGFpcnMiLCJMQVJHRV9BUlJBWV9TSVpFIiwiaXNNYXNrZWQiLCJyZUlzSG9zdEN0b3IiLCJmdW5jUHJvdG8iLCJyZUlzTmF0aXZlIiwidWlkIiwiY29yZUpzRGF0YSIsIm1hc2tTcmNLZXkiLCJJRV9QUk9UTyIsIkhhc2giLCJoYXNoQ2xlYXIiLCJoYXNoRGVsZXRlIiwiaGFzaEdldCIsImhhc2hIYXMiLCJoYXNoU2V0IiwiZ2V0TWFwRGF0YSIsImVxdWFsQXJyYXlzIiwiZXF1YWxCeVRhZyIsImVxdWFsT2JqZWN0cyIsIm9iamVjdFRhZyIsIm9iaklzQXJyIiwib3RoSXNBcnIiLCJvYmpUYWciLCJvdGhUYWciLCJvYmpJc09iaiIsIm90aElzT2JqIiwiaXNTYW1lVGFnIiwib2JqSXNXcmFwcGVkIiwib3RoSXNXcmFwcGVkIiwib2JqVW53cmFwcGVkIiwib3RoVW53cmFwcGVkIiwic2V0Q2FjaGVBZGQiLCJzZXRDYWNoZUhhcyIsInZhbHVlcyIsIm1hcFRvQXJyYXkiLCJzZXRUb0FycmF5Iiwic3ltYm9sUHJvdG8iLCJzeW1ib2xWYWx1ZU9mIiwiY29udmVydCIsInN0YWNrZWQiLCJnZXRBbGxLZXlzIiwib2JqUHJvcHMiLCJvYmpMZW5ndGgiLCJvYmpTdGFja2VkIiwic2tpcEN0b3IiLCJvYmpDdG9yIiwib3RoQ3RvciIsImJhc2VHZXRBbGxLZXlzIiwiZ2V0U3ltYm9scyIsImFycmF5UHVzaCIsInN5bWJvbHNGdW5jIiwic3R1YkFycmF5IiwibmF0aXZlR2V0U3ltYm9scyIsImdldE93blByb3BlcnR5U3ltYm9scyIsInN5bWJvbCIsImlzU3RyaWN0Q29tcGFyYWJsZSIsImhhc0luIiwiYmFzZUdldCIsImRlZmF1bHRWYWx1ZSIsIm1lbW9pemVDYXBwZWQiLCJyZVByb3BOYW1lIiwicmVFc2NhcGVDaGFyIiwicXVvdGUiLCJzdWJTdHJpbmciLCJtZW1vaXplIiwicmVzb2x2ZXIiLCJtZW1vaXplZCIsIkNhY2hlIiwiYXJyYXlNYXAiLCJzeW1ib2xUb1N0cmluZyIsImJhc2VIYXNJbiIsImhhc1BhdGgiLCJoYXNGdW5jIiwiYmFzZVByb3BlcnR5IiwiYmFzZVByb3BlcnR5RGVlcCIsImJhc2VUcmltIiwicmVJc0JhZEhleCIsInJlSXNCaW5hcnkiLCJyZUlzT2N0YWwiLCJmcmVlUGFyc2VJbnQiLCJpc0JpbmFyeSIsInRyaW1tZWRFbmRJbmRleCIsInJlVHJpbVN0YXJ0IiwicmVXaGl0ZXNwYWNlIiwiZ2V0RnVuY05hbWUiLCJsb2Rhc2giLCJmdW5jTmFtZSIsInJlYWxOYW1lcyIsIm90aGVyRnVuYyIsIndyYXBwZXJDbG9uZSIsImNvcHlBcnJheSIsInJlV3JhcERldGFpbHMiLCJyZVNwbGl0RGV0YWlscyIsInJlV3JhcENvbW1lbnQiLCJkZXRhaWxzIiwiY29uc3RhbnQiLCJhcnJheUVhY2giLCJhcnJheUluY2x1ZGVzIiwid3JhcEZsYWdzIiwicGFpciIsInNvcnQiLCJuYXRpdmVNaW4iLCJpbmRleGVzIiwib2xkQXJyYXkiLCJzcmNCaXRtYXNrIiwibmV3Qml0bWFzayIsImlzQ29tbW9uIiwiaXNDb21ibyIsIm92ZXJSZXN0Iiwib3RoZXJBcmdzIiwiY2FzdFNsaWNlIiwiaGFzVW5pY29kZSIsInN0cmluZ1RvQXJyYXkiLCJtZXRob2ROYW1lIiwic3RyU3ltYm9scyIsImNociIsInRyYWlsaW5nIiwiYmFzZVNsaWNlIiwiYXNjaWlUb0FycmF5IiwidW5pY29kZVRvQXJyYXkiLCJyc0FzdHJhbCIsInJzQ29tYm8iLCJyc0ZpdHoiLCJyc05vbkFzdHJhbCIsInJzUmVnaW9uYWwiLCJyc1N1cnJQYWlyIiwicmVPcHRNb2QiLCJyc1NlcSIsInJzU3ltYm9sIiwicmVVbmljb2RlIiwibGljZW5zZSIsInN0YXRlIiwiY2xlYW5MaWNlbnNlIiwidmFsaWQiLCJyZWFzb25zIiwiYmFzZVJhbmdlIiwiaXNJdGVyYXRlZUNhbGwiLCJzdGVwIiwibmF0aXZlQ2VpbCIsIkJhc2VBUEkiLCJ0d2lsaW9LZXkiLCJhcGkiLCJwdXQiLCJwb3N0IiwicGhvbmUiLCJlbWFpbCIsImVtYWlsX2lkIiwic3NuIiwicGFydG5lcl9uYW1lIiwicGFydG5lcl9pZCIsImNvaG9ydF9pZCIsImluaXRpYWxIZWFkZXJzIiwiQWNjZXB0Iiwib2siLCJwcm9ibGVtIiwib3JpZ2luYWxFcnJvciIsImNsaWVudCIsImdldEJhc2VVUkwiLCJzZXRIZWFkZXJzIiwibmV3SGVhZGVycyIsImNyZWF0ZUFwaXNhdWNlQ29tcGF0aWJsZUNsaWVudCIsIlByZWZlciIsInByaW1hcnkiLCJzZWNvbmRhcnkiLCJlbWVyYWxkIiwidGFydE9yYW5nZSIsInllbGxvd09yYW5nZSIsInNsYXRlR3JheSIsImNhZGV0Qmx1ZSIsInBlcml3aW5rbGUiLCJhbGljZUJsdWUiLCJzbW9rZVdoaXRlIiwiYWxlcnQwIiwiYWxlcnQxIiwiYWxlcnQyIiwiYWxlcnQzIiwiY2VydWxlYW5CbHVlIiwicGVhY2giLCJiYWJ5UGluayIsInNwYW5pc2hQaW5rIiwiYmVhdUJsdWUiLCJjdWx0dXJlZCIsImJsdWVCZWxsIiwiYmFieUJsdWVFeWVzIiwicG93ZGVyQmx1ZSIsImhvbmV5RGV3IiwiYnVmZiIsImJsYWNrIiwid2hpdGUiLCJub3RpY2VNdXRlZCIsIm5vdGljZUVycm9yIiwibm90aWNlV2FybmluZyIsIm5vdGljZVN1Y2Nlc3MiLCJub3RpY2VJbmZvIiwicGFyc2VQeXRob25EYXRlIiwidGltZSIsIm5ld0RhdGUiLCJob3VycyIsInNldEhvdXJzIiwiZm9ybWF0RGF0ZSIsInBhcnNlZERhdGUiLCJmb3JtYXRFbWFpbCIsImZvcm1hdE5hbWUiLCJyZW5kZXJQaG9uZSIsImVuY3J5cHRlZCIsImFyZWFDb2RlIiwicGhvbmVOdW1iZXIiLCJmb3JtYXRQaG9uZSIsImZvcm1hdFNTTiIsInNzbk51bWJlciIsImZvcm1hdFppcGNvZGUiLCJ6aXBjb2RlIiwiZ2V0UmVqZWN0TWVzc2FnZSIsInBhcnRuZXJfdHlwZSIsIlJJU0tfTUFOQUdFTUVOVCIsIkZDUkEiLCJGQ1JBX0UiLCJGQ1JBX04iLCJnZXRTdGF0dXMiLCJyZXZpZXciLCJwZW5kaW5nIiwiaW5pdGlhdGVkIiwiZ2V0WWVhciIsImlzVXJsIiwidXJsU3RyaW5nIiwidGVybXMiLCJsZWdhbFJlcGxhY2UiLCJvcmlnaW5hbCIsInJlcGxhY2VtZW50IiwicmV0dXJuVmFsIiwibWFza05hbWUiLCJvYmplY3RUb1F1ZXJ5IiwicXVlcnkiLCJxdWVyeUFycmF5IiwicGFyc2VRdWVyeSIsIlVSTFNlYXJjaFBhcmFtcyIsInN0YXJ0c1dpdGgiLCJwaWNrQ29sb3IiLCJjb2xvcnMiLCJwaWNrU2NvcmVDb2xvciIsInNjb3JlIiwicHJldHRpZnlEYXRlIiwiZGF0ZVN0cmluZyIsIkREIiwiWVlZWSIsImZhbHN5U3RyaW5ncyIsInZhbHVlRXhpc3RzIiwicmVuZGVyRGV0YWlsVmFsdWUiLCJkZWVwIiwicmVuZGVyTmVzdGVkT2JqZWN0IiwibmVzdGVkIiwic2VsZWN0TWFzdGVyS2V5IiwibWFzdGVyS2V5IiwiYmx1ZXByaW50IiwiZmluZCIsInNldFZhbHVlIiwiZmFsbGJhY2siLCJzZXRPcHRpb24iLCJhbGxvd2VkIiwic2V0dGVyRmFjdG9yeUN1cnJpZWQiLCJ0b2dnbGVCb29sQ3VycmllZCIsInNldFN0cmluZ0ZhY3RvcnkiLCJzZXROdW1iZXJGYWN0b3J5Iiwic2V0Qm9vbEZhY3RvcnkiLCJzZXRUcnV0aHlDdXJyaWVkIiwic2V0RmFsc3lDdXJyaWVkIiwic2V0T3B0aW9uRmFjdG9yeUN1cnJpZWQiLCJTZXR0ZXIiLCJzdG9yYWdlTW9jayIsInN0b3JhZ2UiLCJzZXRJdGVtIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJ0b0Jvb2xlYW4iLCJkYXlqcyIsInRvUmVsYXRpdmVGcm9tSVNPIiwicmVsYXRpdmVEYXRlIiwidG9SZWxhdGl2ZURhdGUiLCJhZGp1c3RlZE5vdyIsInRvU2VudGVuY2VDYXNlIiwic2VudGVuY2UiLCJ0ZXJtaW5hdGlvbiIsInRvVGl0bGVDYXNlIiwid29yZCIsImZpcnN0Q2hhciIsInJlbWFpbmluZ0NoYXJzIiwiSU5JVElBVEVEIiwiUEVORElORyIsIldJVEhEUkFXTiIsIkFQUFJPVkVEIiwiUkVKRUNURUQiLCJDT05TRU5UIiwiRU1BSUxFRCIsIlJFVklFVyIsIlJFVklFV0lORyIsIkNPTlNJREVSIiwiUFJPQ0VTU0lORyIsIlBFTkRJTkdfRElTUFVURSIsIlBFTkRJTkdfRklSU1RfTk9USUNFIiwiUEVORElOR19TRUNPTkRfTk9USUNFIiwiRklSU1RfTk9USUNFIiwiU0VDT05EX05PVElDRSIsIlNTTl9UUkFDRV9GQUlMRUQiLCJNVlJfRkFJTEVEIiwiQ09NUExJQU5DRSIsIkNPTVBMSUFOQ0VfU08iLCJWRVJJRllJTkciLCJDT01QTElBTkNFUkVWSUVXIiwiU1RPUkVEIiwidHJhbnNsYXRlU3RhdHVzIiwiYWR2ZXJzZV9hY3Rpb24iLCJjdXJyZW50U3RhdGVzIiwidmFsaWRhdGVEcml2ZXJzTGljZW5zZSIsInZhbGlkU3NuUmVnZXgiLCJtaXN1c2VkUmVnZXgiLCJpbnZhbGlkRmlyc3RUaHJlZSIsInZhbGlkYXRlX3NzbiIsIm51bWJlclNTTiIsImlzQXJyYXlPck9ic2VydmFibGVBcnJheSIsInZhbGlkYXRlRW1haWwiLCJ2YWxpZGF0ZVBob25lIiwiaXNBbHBoYU51bWVyaWMiLCJjaCIsImlzVmFsaWRDYW5hZGlhblppcGNvZGUiLCJ2YWxpZGF0ZVNTTiIsInZhbGlkYXRlQ2hlY2siLCJ3b3JrZXJfY2hlY2siLCJjaGVjayIsImNvbnRhaW5zQXRTeW1ib2wiLCJjb250YWluc051bWJlciIsInZhbGlkYXRlTmFtZSIsInZhbGlkYXRlQWRkcmVzcyIsImFkZHJlc3MiLCJ2YWxpZGF0ZUN1c3RvbUlucHV0IiwidmFsaWRhdGVaaXBjb2RlIiwidmFsaWRhdGVDYW5hZGlhblppcGNvZGUiLCJ2YWxpZGF0ZU1WUkNoZWNrIiwidmFsaWRhdGVQaG9uZVZlcmlmaWNhdGlvbiIsImRpc2FibGVfY2hlY2siLCJlbnZfdmFyIiwidmFsaWRhdGVFbWFpbElkIiwidmFsaWRhdGVUdXJuSWQiXSwibWFwcGluZ3MiOiJDQUFBLFNBQTJDQSxFQUFNQyxHQUMxQixpQkFBWkMsU0FBMEMsaUJBQVhDLE9BQ3hDQSxPQUFPRCxRQUFVRCxJQUNRLG1CQUFYRyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sY0FBZSxHQUFJSCxHQUNBLGlCQUFaQyxRQUNkQSxRQUFRLGVBQWlCRCxJQUV6QkQsRUFBSyxlQUFpQkMsSUFSeEIsQ0FTbUIsb0JBQVRLLEtBQXVCQSxLQUFPQyxNQUFNLFdBQzlDLE8sWUNURSxJQUFJQyxFQUFtQixHQUd2QixTQUFTQyxFQUFvQkMsR0FHNUIsR0FBR0YsRUFBaUJFLEdBQ25CLE9BQU9GLEVBQWlCRSxHQUFVUixRQUduQyxJQUFJQyxFQUFTSyxFQUFpQkUsR0FBWSxDQUN6Q0MsRUFBR0QsRUFDSEUsR0FBRyxFQUNIVixRQUFTLElBVVYsT0FOQVcsRUFBUUgsR0FBVUksS0FBS1gsRUFBT0QsUUFBU0MsRUFBUUEsRUFBT0QsUUFBU08sR0FHL0ROLEVBQU9TLEdBQUksRUFHSlQsRUFBT0QsUUEwRGYsT0FyREFPLEVBQW9CTSxFQUFJRixFQUd4QkosRUFBb0JPLEVBQUlSLEVBR3hCQyxFQUFvQlEsRUFBSSxTQUFTZixFQUFTZ0IsRUFBTUMsR0FDM0NWLEVBQW9CVyxFQUFFbEIsRUFBU2dCLElBQ2xDRyxPQUFPQyxlQUFlcEIsRUFBU2dCLEVBQU0sQ0FBRUssWUFBWSxFQUFNQyxJQUFLTCxLQUtoRVYsRUFBb0JnQixFQUFJLFNBQVN2QixHQUNYLG9CQUFYd0IsUUFBMEJBLE9BQU9DLGFBQzFDTixPQUFPQyxlQUFlcEIsRUFBU3dCLE9BQU9DLFlBQWEsQ0FBRUMsTUFBTyxXQUU3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T0FBTzdCLFFBR1QrekMsR0FBa0IsU0FBQTNILEdBQU8sT0FDcEMsS0FBV0EsSUFBWUEsRUFBUXBzQyxRQUFVLEdBRTlCZzBDLEdBQTBCLFNBQUE1SCxHQUFPLE9BQzVDLEtBQVdBLElBQ044RyxHQUFlOUcsSUFDZmdILEdBQXVCaEgsSUFFakJydEMsR0FBVSxTQUFBeEIsR0FBSyxPQUMxQncxQyxHQUF5QngxQyxJQUVkMDJDLEdBQW1CLFNBQUFULEdBQUssT0FDbkMsS0FBV0EsSUFBMkIsaUJBQVZBLEVBQXFCQSxFQUFRLElBRTlDVSxHQUE0QixTQUFBanBDLEdBQ3ZDLE9BQVFBLEdBQ04sSUFBSyxXQUNMLElBQUssT0FDSCxNQUFPLFdBQ1QsSUFBSyxhQUNMLElBQUssUUFDSCxNQUFPLGFBQ1QsUUFDRSxNQUFPLEtBSUFrcEMsR0FBZ0IsU0FBQUMsR0FBTyxNQUNmLGlCQUFaQSxHQUFpRCxTQUExQkEsRUFBUXgxQyxlQUUzQnkxQyxHQUFrQixTQUFBenBCLEdBQUUsT0FBSSxLQUFXQSxJQUFxQixLQUFkQSxFQUFHNXFCLFFBRTdDczBDLEdBQWlCLFNBQUExcEIsR0FBRSxPQUM5QixLQUFXQSxJQUFPLGtCQUFrQnBrQixLQUFLb2tCIiwiZmlsZSI6InR1cm4tc2hhcmVkLm1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwidHVybi1zaGFyZWRcIiwgW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1widHVybi1zaGFyZWRcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1widHVybi1zaGFyZWRcIl0gPSBmYWN0b3J5KCk7XG59KSh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDIzOSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbnZhciBraW5kT2YgPSAoZnVuY3Rpb24oY2FjaGUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHRoaW5nKSB7XG4gICAgdmFyIHN0ciA9IHRvU3RyaW5nLmNhbGwodGhpbmcpO1xuICAgIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbiAgfTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5mdW5jdGlvbiBraW5kT2ZUZXN0KHR5cGUpIHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzS2luZE9mKHRoaW5nKSB7XG4gICAgcmV0dXJuIGtpbmRPZih0aGluZykgPT09IHR5cGU7XG4gIH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkodmFsKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIHR5cGVvZiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWwpIHtcbiAgaWYgKGtpbmRPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGU7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNEYXRlID0ga2luZE9mVGVzdCgnRGF0ZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGb3JtRGF0YSh0aGluZykge1xuICB2YXIgcGF0dGVybiA9ICdbb2JqZWN0IEZvcm1EYXRhXSc7XG4gIHJldHVybiB0aGluZyAmJiAoXG4gICAgKHR5cGVvZiBGb3JtRGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGluZyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB8fFxuICAgIHRvU3RyaW5nLmNhbGwodGhpbmcpID09PSBwYXR0ZXJuIHx8XG4gICAgKGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09IHBhdHRlcm4pXG4gICk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIudHJpbSA/IHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqL1xuZnVuY3Rpb24gaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAobmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05hdGl2ZVNjcmlwdCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05TJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbiAgKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRba2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5mdW5jdGlvbiBleHRlbmQoYSwgYiwgdGhpc0FyZykge1xuICBmb3JFYWNoKGIsIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKHRoaXNBcmcgJiYgdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGE7XG59XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqIEByZXR1cm4ge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5mdW5jdGlvbiBzdHJpcEJPTShjb250ZW50KSB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICovXG5cbmZ1bmN0aW9uIGluaGVyaXRzKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpIHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZGVzY3JpcHRvcnMpO1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjtcbiAgcHJvcHMgJiYgT2JqZWN0LmFzc2lnbihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3BzKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9iamVjdCB3aXRoIGRlZXAgcHJvdG90eXBlIGNoYWluIHRvIGEgZmxhdCBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VPYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IFtkZXN0T2JqXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZpbHRlcl1cbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gdG9GbGF0T2JqZWN0KHNvdXJjZU9iaiwgZGVzdE9iaiwgZmlsdGVyKSB7XG4gIHZhciBwcm9wcztcbiAgdmFyIGk7XG4gIHZhciBwcm9wO1xuICB2YXIgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG5cbiAgZG8ge1xuICAgIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlT2JqKTtcbiAgICBpID0gcHJvcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICBwcm9wID0gcHJvcHNbaV07XG4gICAgICBpZiAoIW1lcmdlZFtwcm9wXSkge1xuICAgICAgICBkZXN0T2JqW3Byb3BdID0gc291cmNlT2JqW3Byb3BdO1xuICAgICAgICBtZXJnZWRbcHJvcF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VPYmogPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufVxuXG4vKlxuICogZGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZW5kc1dpdGgoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgdmFyIGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufVxuXG5cbi8qKlxuICogUmV0dXJucyBuZXcgYXJyYXkgZnJvbSBhcnJheSBsaWtlIG9iamVjdFxuICogQHBhcmFtIHsqfSBbdGhpbmddXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkodGhpbmcpIHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIG51bGw7XG4gIHZhciBpID0gdGhpbmcubGVuZ3RoO1xuICBpZiAoaXNVbmRlZmluZWQoaSkpIHJldHVybiBudWxsO1xuICB2YXIgYXJyID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGFycltpXSA9IHRoaW5nW2ldO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG52YXIgaXNUeXBlZEFycmF5ID0gKGZ1bmN0aW9uKFR5cGVkQXJyYXkpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHRoaW5nKSB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0FycmF5OiBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyOiBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcjogaXNCdWZmZXIsXG4gIGlzRm9ybURhdGE6IGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3OiBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmc6IGlzU3RyaW5nLFxuICBpc051bWJlcjogaXNOdW1iZXIsXG4gIGlzT2JqZWN0OiBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdDogaXNQbGFpbk9iamVjdCxcbiAgaXNVbmRlZmluZWQ6IGlzVW5kZWZpbmVkLFxuICBpc0RhdGU6IGlzRGF0ZSxcbiAgaXNGaWxlOiBpc0ZpbGUsXG4gIGlzQmxvYjogaXNCbG9iLFxuICBpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbTogaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zOiBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNTdGFuZGFyZEJyb3dzZXJFbnY6IGlzU3RhbmRhcmRCcm93c2VyRW52LFxuICBmb3JFYWNoOiBmb3JFYWNoLFxuICBtZXJnZTogbWVyZ2UsXG4gIGV4dGVuZDogZXh0ZW5kLFxuICB0cmltOiB0cmltLFxuICBzdHJpcEJPTTogc3RyaXBCT00sXG4gIGluaGVyaXRzOiBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0OiB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZjoga2luZE9mLFxuICBraW5kT2ZUZXN0OiBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aDogZW5kc1dpdGgsXG4gIHRvQXJyYXk6IHRvQXJyYXksXG4gIGlzVHlwZWRBcnJheTogaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0OiBpc0ZpbGVMaXN0XG59O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0O1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3RMaWtlO1xuIiwidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCIhZnVuY3Rpb24odCxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShlKToodD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzPWUoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgdD0xZTMsZT02ZTQsbj0zNmU1LHI9XCJtaWxsaXNlY29uZFwiLGk9XCJzZWNvbmRcIixzPVwibWludXRlXCIsdT1cImhvdXJcIixhPVwiZGF5XCIsbz1cIndlZWtcIixjPVwibW9udGhcIixmPVwicXVhcnRlclwiLGg9XCJ5ZWFyXCIsZD1cImRhdGVcIixsPVwiSW52YWxpZCBEYXRlXCIsJD0vXihcXGR7NH0pWy0vXT8oXFxkezEsMn0pP1stL10/KFxcZHswLDJ9KVtUdFxcc10qKFxcZHsxLDJ9KT86PyhcXGR7MSwyfSk/Oj8oXFxkezEsMn0pP1suOl0/KFxcZCspPyQvLHk9L1xcWyhbXlxcXV0rKV18WXsxLDR9fE17MSw0fXxEezEsMn18ZHsxLDR9fEh7MSwyfXxoezEsMn18YXxBfG17MSwyfXxzezEsMn18WnsxLDJ9fFNTUy9nLE09e25hbWU6XCJlblwiLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKHQpe3ZhciBlPVtcInRoXCIsXCJzdFwiLFwibmRcIixcInJkXCJdLG49dCUxMDA7cmV0dXJuXCJbXCIrdCsoZVsobi0yMCklMTBdfHxlW25dfHxlWzBdKStcIl1cIn19LG09ZnVuY3Rpb24odCxlLG4pe3ZhciByPVN0cmluZyh0KTtyZXR1cm4hcnx8ci5sZW5ndGg+PWU/dDpcIlwiK0FycmF5KGUrMS1yLmxlbmd0aCkuam9pbihuKSt0fSx2PXtzOm0sejpmdW5jdGlvbih0KXt2YXIgZT0tdC51dGNPZmZzZXQoKSxuPU1hdGguYWJzKGUpLHI9TWF0aC5mbG9vcihuLzYwKSxpPW4lNjA7cmV0dXJuKGU8PTA/XCIrXCI6XCItXCIpK20ociwyLFwiMFwiKStcIjpcIittKGksMixcIjBcIil9LG06ZnVuY3Rpb24gdChlLG4pe2lmKGUuZGF0ZSgpPG4uZGF0ZSgpKXJldHVybi10KG4sZSk7dmFyIHI9MTIqKG4ueWVhcigpLWUueWVhcigpKSsobi5tb250aCgpLWUubW9udGgoKSksaT1lLmNsb25lKCkuYWRkKHIsYykscz1uLWk8MCx1PWUuY2xvbmUoKS5hZGQocisocz8tMToxKSxjKTtyZXR1cm4rKC0ocisobi1pKS8ocz9pLXU6dS1pKSl8fDApfSxhOmZ1bmN0aW9uKHQpe3JldHVybiB0PDA/TWF0aC5jZWlsKHQpfHwwOk1hdGguZmxvb3IodCl9LHA6ZnVuY3Rpb24odCl7cmV0dXJue006Yyx5OmgsdzpvLGQ6YSxEOmQsaDp1LG06cyxzOmksbXM6cixROmZ9W3RdfHxTdHJpbmcodHx8XCJcIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9zJC8sXCJcIil9LHU6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXR9fSxnPVwiZW5cIixEPXt9O0RbZ109TTt2YXIgcD1cIiRpc0RheWpzT2JqZWN0XCIsUz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIF98fCEoIXR8fCF0W3BdKX0sdz1mdW5jdGlvbiB0KGUsbixyKXt2YXIgaTtpZighZSlyZXR1cm4gZztpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7dmFyIHM9ZS50b0xvd2VyQ2FzZSgpO0Rbc10mJihpPXMpLG4mJihEW3NdPW4saT1zKTt2YXIgdT1lLnNwbGl0KFwiLVwiKTtpZighaSYmdS5sZW5ndGg+MSlyZXR1cm4gdCh1WzBdKX1lbHNle3ZhciBhPWUubmFtZTtEW2FdPWUsaT1hfXJldHVybiFyJiZpJiYoZz1pKSxpfHwhciYmZ30sTz1mdW5jdGlvbih0LGUpe2lmKFModCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgbj1cIm9iamVjdFwiPT10eXBlb2YgZT9lOnt9O3JldHVybiBuLmRhdGU9dCxuLmFyZ3M9YXJndW1lbnRzLG5ldyBfKG4pfSxiPXY7Yi5sPXcsYi5pPVMsYi53PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE8odCx7bG9jYWxlOmUuJEwsdXRjOmUuJHUseDplLiR4LCRvZmZzZXQ6ZS4kb2Zmc2V0fSl9O3ZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gTSh0KXt0aGlzLiRMPXcodC5sb2NhbGUsbnVsbCwhMCksdGhpcy5wYXJzZSh0KSx0aGlzLiR4PXRoaXMuJHh8fHQueHx8e30sdGhpc1twXT0hMH12YXIgbT1NLnByb3RvdHlwZTtyZXR1cm4gbS5wYXJzZT1mdW5jdGlvbih0KXt0aGlzLiRkPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZGF0ZSxuPXQudXRjO2lmKG51bGw9PT1lKXJldHVybiBuZXcgRGF0ZShOYU4pO2lmKGIudShlKSlyZXR1cm4gbmV3IERhdGU7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKGUpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiYhL1okL2kudGVzdChlKSl7dmFyIHI9ZS5tYXRjaCgkKTtpZihyKXt2YXIgaT1yWzJdLTF8fDAscz0ocls3XXx8XCIwXCIpLnN1YnN0cmluZygwLDMpO3JldHVybiBuP25ldyBEYXRlKERhdGUuVVRDKHJbMV0saSxyWzNdfHwxLHJbNF18fDAscls1XXx8MCxyWzZdfHwwLHMpKTpuZXcgRGF0ZShyWzFdLGksclszXXx8MSxyWzRdfHwwLHJbNV18fDAscls2XXx8MCxzKX19cmV0dXJuIG5ldyBEYXRlKGUpfSh0KSx0aGlzLmluaXQoKX0sbS5pbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kZDt0aGlzLiR5PXQuZ2V0RnVsbFllYXIoKSx0aGlzLiRNPXQuZ2V0TW9udGgoKSx0aGlzLiREPXQuZ2V0RGF0ZSgpLHRoaXMuJFc9dC5nZXREYXkoKSx0aGlzLiRIPXQuZ2V0SG91cnMoKSx0aGlzLiRtPXQuZ2V0TWludXRlcygpLHRoaXMuJHM9dC5nZXRTZWNvbmRzKCksdGhpcy4kbXM9dC5nZXRNaWxsaXNlY29uZHMoKX0sbS4kdXRpbHM9ZnVuY3Rpb24oKXtyZXR1cm4gYn0sbS5pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLiRkLnRvU3RyaW5nKCk9PT1sKX0sbS5pc1NhbWU9ZnVuY3Rpb24odCxlKXt2YXIgbj1PKHQpO3JldHVybiB0aGlzLnN0YXJ0T2YoZSk8PW4mJm48PXRoaXMuZW5kT2YoZSl9LG0uaXNBZnRlcj1mdW5jdGlvbih0LGUpe3JldHVybiBPKHQpPHRoaXMuc3RhcnRPZihlKX0sbS5pc0JlZm9yZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVuZE9mKGUpPE8odCl9LG0uJGc9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBiLnUodCk/dGhpc1tlXTp0aGlzLnNldChuLHQpfSxtLnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxtLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC5nZXRUaW1lKCl9LG0uc3RhcnRPZj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj0hIWIudShlKXx8ZSxmPWIucCh0KSxsPWZ1bmN0aW9uKHQsZSl7dmFyIGk9Yi53KG4uJHU/RGF0ZS5VVEMobi4keSxlLHQpOm5ldyBEYXRlKG4uJHksZSx0KSxuKTtyZXR1cm4gcj9pOmkuZW5kT2YoYSl9LCQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYi53KG4udG9EYXRlKClbdF0uYXBwbHkobi50b0RhdGUoXCJzXCIpLChyP1swLDAsMCwwXTpbMjMsNTksNTksOTk5XSkuc2xpY2UoZSkpLG4pfSx5PXRoaXMuJFcsTT10aGlzLiRNLG09dGhpcy4kRCx2PVwic2V0XCIrKHRoaXMuJHU/XCJVVENcIjpcIlwiKTtzd2l0Y2goZil7Y2FzZSBoOnJldHVybiByP2woMSwwKTpsKDMxLDExKTtjYXNlIGM6cmV0dXJuIHI/bCgxLE0pOmwoMCxNKzEpO2Nhc2Ugbzp2YXIgZz10aGlzLiRsb2NhbGUoKS53ZWVrU3RhcnR8fDAsRD0oeTxnP3krNzp5KS1nO3JldHVybiBsKHI/bS1EOm0rKDYtRCksTSk7Y2FzZSBhOmNhc2UgZDpyZXR1cm4gJCh2K1wiSG91cnNcIiwwKTtjYXNlIHU6cmV0dXJuICQoditcIk1pbnV0ZXNcIiwxKTtjYXNlIHM6cmV0dXJuICQoditcIlNlY29uZHNcIiwyKTtjYXNlIGk6cmV0dXJuICQoditcIk1pbGxpc2Vjb25kc1wiLDMpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xvbmUoKX19LG0uZW5kT2Y9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3RhcnRPZih0LCExKX0sbS4kc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG4sbz1iLnAodCksZj1cInNldFwiKyh0aGlzLiR1P1wiVVRDXCI6XCJcIiksbD0obj17fSxuW2FdPWYrXCJEYXRlXCIsbltkXT1mK1wiRGF0ZVwiLG5bY109ZitcIk1vbnRoXCIsbltoXT1mK1wiRnVsbFllYXJcIixuW3VdPWYrXCJIb3Vyc1wiLG5bc109ZitcIk1pbnV0ZXNcIixuW2ldPWYrXCJTZWNvbmRzXCIsbltyXT1mK1wiTWlsbGlzZWNvbmRzXCIsbilbb10sJD1vPT09YT90aGlzLiREKyhlLXRoaXMuJFcpOmU7aWYobz09PWN8fG89PT1oKXt2YXIgeT10aGlzLmNsb25lKCkuc2V0KGQsMSk7eS4kZFtsXSgkKSx5LmluaXQoKSx0aGlzLiRkPXkuc2V0KGQsTWF0aC5taW4odGhpcy4kRCx5LmRheXNJbk1vbnRoKCkpKS4kZH1lbHNlIGwmJnRoaXMuJGRbbF0oJCk7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXN9LG0uc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS4kc2V0KHQsZSl9LG0uZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW2IucCh0KV0oKX0sbS5hZGQ9ZnVuY3Rpb24ocixmKXt2YXIgZCxsPXRoaXM7cj1OdW1iZXIocik7dmFyICQ9Yi5wKGYpLHk9ZnVuY3Rpb24odCl7dmFyIGU9TyhsKTtyZXR1cm4gYi53KGUuZGF0ZShlLmRhdGUoKStNYXRoLnJvdW5kKHQqcikpLGwpfTtpZigkPT09YylyZXR1cm4gdGhpcy5zZXQoYyx0aGlzLiRNK3IpO2lmKCQ9PT1oKXJldHVybiB0aGlzLnNldChoLHRoaXMuJHkrcik7aWYoJD09PWEpcmV0dXJuIHkoMSk7aWYoJD09PW8pcmV0dXJuIHkoNyk7dmFyIE09KGQ9e30sZFtzXT1lLGRbdV09bixkW2ldPXQsZClbJF18fDEsbT10aGlzLiRkLmdldFRpbWUoKStyKk07cmV0dXJuIGIudyhtLHRoaXMpfSxtLnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWRkKC0xKnQsZSl9LG0uZm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG4uaW52YWxpZERhdGV8fGw7dmFyIHI9dHx8XCJZWVlZLU1NLUREVEhIOm1tOnNzWlwiLGk9Yi56KHRoaXMpLHM9dGhpcy4kSCx1PXRoaXMuJG0sYT10aGlzLiRNLG89bi53ZWVrZGF5cyxjPW4ubW9udGhzLGY9bi5tZXJpZGllbSxoPWZ1bmN0aW9uKHQsbixpLHMpe3JldHVybiB0JiYodFtuXXx8dChlLHIpKXx8aVtuXS5zbGljZSgwLHMpfSxkPWZ1bmN0aW9uKHQpe3JldHVybiBiLnMocyUxMnx8MTIsdCxcIjBcIil9LCQ9Znx8ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQ8MTI/XCJBTVwiOlwiUE1cIjtyZXR1cm4gbj9yLnRvTG93ZXJDYXNlKCk6cn07cmV0dXJuIHIucmVwbGFjZSh5LChmdW5jdGlvbih0LHIpe3JldHVybiByfHxmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZVwiWVlcIjpyZXR1cm4gU3RyaW5nKGUuJHkpLnNsaWNlKC0yKTtjYXNlXCJZWVlZXCI6cmV0dXJuIGIucyhlLiR5LDQsXCIwXCIpO2Nhc2VcIk1cIjpyZXR1cm4gYSsxO2Nhc2VcIk1NXCI6cmV0dXJuIGIucyhhKzEsMixcIjBcIik7Y2FzZVwiTU1NXCI6cmV0dXJuIGgobi5tb250aHNTaG9ydCxhLGMsMyk7Y2FzZVwiTU1NTVwiOnJldHVybiBoKGMsYSk7Y2FzZVwiRFwiOnJldHVybiBlLiREO2Nhc2VcIkREXCI6cmV0dXJuIGIucyhlLiRELDIsXCIwXCIpO2Nhc2VcImRcIjpyZXR1cm4gU3RyaW5nKGUuJFcpO2Nhc2VcImRkXCI6cmV0dXJuIGgobi53ZWVrZGF5c01pbixlLiRXLG8sMik7Y2FzZVwiZGRkXCI6cmV0dXJuIGgobi53ZWVrZGF5c1Nob3J0LGUuJFcsbywzKTtjYXNlXCJkZGRkXCI6cmV0dXJuIG9bZS4kV107Y2FzZVwiSFwiOnJldHVybiBTdHJpbmcocyk7Y2FzZVwiSEhcIjpyZXR1cm4gYi5zKHMsMixcIjBcIik7Y2FzZVwiaFwiOnJldHVybiBkKDEpO2Nhc2VcImhoXCI6cmV0dXJuIGQoMik7Y2FzZVwiYVwiOnJldHVybiAkKHMsdSwhMCk7Y2FzZVwiQVwiOnJldHVybiAkKHMsdSwhMSk7Y2FzZVwibVwiOnJldHVybiBTdHJpbmcodSk7Y2FzZVwibW1cIjpyZXR1cm4gYi5zKHUsMixcIjBcIik7Y2FzZVwic1wiOnJldHVybiBTdHJpbmcoZS4kcyk7Y2FzZVwic3NcIjpyZXR1cm4gYi5zKGUuJHMsMixcIjBcIik7Y2FzZVwiU1NTXCI6cmV0dXJuIGIucyhlLiRtcywzLFwiMFwiKTtjYXNlXCJaXCI6cmV0dXJuIGl9cmV0dXJuIG51bGx9KHQpfHxpLnJlcGxhY2UoXCI6XCIsXCJcIil9KSl9LG0udXRjT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIDE1Ki1NYXRoLnJvdW5kKHRoaXMuJGQuZ2V0VGltZXpvbmVPZmZzZXQoKS8xNSl9LG0uZGlmZj1mdW5jdGlvbihyLGQsbCl7dmFyICQseT10aGlzLE09Yi5wKGQpLG09TyhyKSx2PShtLnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKmUsZz10aGlzLW0sRD1mdW5jdGlvbigpe3JldHVybiBiLm0oeSxtKX07c3dpdGNoKE0pe2Nhc2UgaDokPUQoKS8xMjticmVhaztjYXNlIGM6JD1EKCk7YnJlYWs7Y2FzZSBmOiQ9RCgpLzM7YnJlYWs7Y2FzZSBvOiQ9KGctdikvNjA0OGU1O2JyZWFrO2Nhc2UgYTokPShnLXYpLzg2NGU1O2JyZWFrO2Nhc2UgdTokPWcvbjticmVhaztjYXNlIHM6JD1nL2U7YnJlYWs7Y2FzZSBpOiQ9Zy90O2JyZWFrO2RlZmF1bHQ6JD1nfXJldHVybiBsPyQ6Yi5hKCQpfSxtLmRheXNJbk1vbnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kT2YoYykuJER9LG0uJGxvY2FsZT1mdW5jdGlvbigpe3JldHVybiBEW3RoaXMuJExdfSxtLmxvY2FsZT1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiB0aGlzLiRMO3ZhciBuPXRoaXMuY2xvbmUoKSxyPXcodCxlLCEwKTtyZXR1cm4gciYmKG4uJEw9ciksbn0sbS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBiLncodGhpcy4kZCx0aGlzKX0sbS50b0RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSxtLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLnRvSVNPU3RyaW5nKCk6bnVsbH0sbS50b0lTT1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvSVNPU3RyaW5nKCl9LG0udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b1VUQ1N0cmluZygpfSxNfSgpLGs9Xy5wcm90b3R5cGU7cmV0dXJuIE8ucHJvdG90eXBlPWssW1tcIiRtc1wiLHJdLFtcIiRzXCIsaV0sW1wiJG1cIixzXSxbXCIkSFwiLHVdLFtcIiRXXCIsYV0sW1wiJE1cIixjXSxbXCIkeVwiLGhdLFtcIiREXCIsZF1dLmZvckVhY2goKGZ1bmN0aW9uKHQpe2tbdFsxXV09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuJGcoZSx0WzBdLHRbMV0pfX0pKSxPLmV4dGVuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0LiRpfHwodChlLF8sTyksdC4kaT0hMCksT30sTy5sb2NhbGU9dyxPLmlzRGF5anM9UyxPLnVuaXg9ZnVuY3Rpb24odCl7cmV0dXJuIE8oMWUzKnQpfSxPLmVuPURbZ10sTy5Mcz1ELE8ucD17fSxPfSkpOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQXhpb3NFcnJvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgcmVzcG9uc2UgJiYgKHRoaXMucmVzcG9uc2UgPSByZXNwb25zZSk7XG59XG5cbnV0aWxzLmluaGVyaXRzKEF4aW9zRXJyb3IsIEVycm9yLCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnJlc3BvbnNlICYmIHRoaXMucmVzcG9uc2Uuc3RhdHVzID8gdGhpcy5yZXNwb25zZS5zdGF0dXMgOiBudWxsXG4gICAgfTtcbiAgfVxufSk7XG5cbnZhciBwcm90b3R5cGUgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbnZhciBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbl0uZm9yRWFjaChmdW5jdGlvbihjb2RlKSB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSBmdW5jdGlvbihlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpIHtcbiAgdmFyIGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG5cbiAgdXRpbHMudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3NFcnJvcjtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCJ2YXIgY3JlYXRlV3JhcCA9IHJlcXVpcmUoJy4vX2NyZWF0ZVdyYXAnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9DVVJSWV9GTEFHID0gODtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGFyZ3VtZW50cyBvZiBgZnVuY2AgYW5kIGVpdGhlciBpbnZva2VzXG4gKiBgZnVuY2AgcmV0dXJuaW5nIGl0cyByZXN1bHQsIGlmIGF0IGxlYXN0IGBhcml0eWAgbnVtYmVyIG9mIGFyZ3VtZW50cyBoYXZlXG4gKiBiZWVuIHByb3ZpZGVkLCBvciByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSByZW1haW5pbmcgYGZ1bmNgXG4gKiBhcmd1bWVudHMsIGFuZCBzbyBvbi4gVGhlIGFyaXR5IG9mIGBmdW5jYCBtYXkgYmUgc3BlY2lmaWVkIGlmIGBmdW5jLmxlbmd0aGBcbiAqIGlzIG5vdCBzdWZmaWNpZW50LlxuICpcbiAqIFRoZSBgXy5jdXJyeS5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljIGJ1aWxkcyxcbiAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgY3VycmllZCBmdW5jdGlvbnMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjAuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjdXJyeS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHk9ZnVuYy5sZW5ndGhdIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY3VycmllZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFiYyA9IGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAqICAgcmV0dXJuIFthLCBiLCBjXTtcbiAqIH07XG4gKlxuICogdmFyIGN1cnJpZWQgPSBfLmN1cnJ5KGFiYyk7XG4gKlxuICogY3VycmllZCgxKSgyKSgzKTtcbiAqIC8vID0+IFsxLCAyLCAzXVxuICpcbiAqIGN1cnJpZWQoMSwgMikoMyk7XG4gKiAvLyA9PiBbMSwgMiwgM11cbiAqXG4gKiBjdXJyaWVkKDEsIDIsIDMpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKlxuICogLy8gQ3VycmllZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAqIGN1cnJpZWQoMSkoXywgMykoMik7XG4gKiAvLyA9PiBbMSwgMiwgM11cbiAqL1xuZnVuY3Rpb24gY3VycnkoZnVuYywgYXJpdHksIGd1YXJkKSB7XG4gIGFyaXR5ID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBhcml0eTtcbiAgdmFyIHJlc3VsdCA9IGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9DVVJSWV9GTEFHLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYXJpdHkpO1xuICByZXN1bHQucGxhY2Vob2xkZXIgPSBjdXJyeS5wbGFjZWhvbGRlcjtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gQXNzaWduIGRlZmF1bHQgcGxhY2Vob2xkZXJzLlxuY3VycnkucGxhY2Vob2xkZXIgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBjdXJyeTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTdHJpbmdgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzdHJpbmcsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N0cmluZygnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N0cmluZygxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHxcbiAgICAoIWlzQXJyYXkodmFsdWUpICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmluZztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsZWRFcnJvcjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJbmRleDtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N5bWJvbDtcbiIsInZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9LZXk7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgYW4gaW5zdGFuY2Ugb2YgYEN0b3JgIHJlZ2FyZGxlc3Mgb2ZcbiAqIHdoZXRoZXIgaXQgd2FzIGludm9rZWQgYXMgcGFydCBvZiBhIGBuZXdgIGV4cHJlc3Npb24gb3IgYnkgYGNhbGxgIG9yIGBhcHBseWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IEN0b3IgVGhlIGNvbnN0cnVjdG9yIHRvIHdyYXAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDdG9yKEN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIC8vIFVzZSBhIGBzd2l0Y2hgIHN0YXRlbWVudCB0byB3b3JrIHdpdGggY2xhc3MgY29uc3RydWN0b3JzLiBTZWVcbiAgICAvLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWZ1bmN0aW9uLW9iamVjdHMtY2FsbC10aGlzYXJndW1lbnQtYXJndW1lbnRzbGlzdFxuICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEN0b3I7XG4gICAgICBjYXNlIDE6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdKTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICBjYXNlIDQ6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0pO1xuICAgICAgY2FzZSA2OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7XG4gICAgICBjYXNlIDc6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdLCBhcmdzWzZdKTtcbiAgICB9XG4gICAgdmFyIHRoaXNCaW5kaW5nID0gYmFzZUNyZWF0ZShDdG9yLnByb3RvdHlwZSksXG4gICAgICAgIHJlc3VsdCA9IEN0b3IuYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuXG4gICAgLy8gTWltaWMgdGhlIGNvbnN0cnVjdG9yJ3MgYHJldHVybmAgYmVoYXZpb3IuXG4gICAgLy8gU2VlIGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDEzLjIuMiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogdGhpc0JpbmRpbmc7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQ3RvcjtcbiIsIi8qKiBVc2VkIGFzIHRoZSBpbnRlcm5hbCBhcmd1bWVudCBwbGFjZWhvbGRlci4gKi9cbnZhciBQTEFDRUhPTERFUiA9ICdfX2xvZGFzaF9wbGFjZWhvbGRlcl9fJztcblxuLyoqXG4gKiBSZXBsYWNlcyBhbGwgYHBsYWNlaG9sZGVyYCBlbGVtZW50cyBpbiBgYXJyYXlgIHdpdGggYW4gaW50ZXJuYWwgcGxhY2Vob2xkZXJcbiAqIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHRoZWlyIGluZGV4ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB0byByZXBsYWNlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqL1xuZnVuY3Rpb24gcmVwbGFjZUhvbGRlcnMoYXJyYXksIHBsYWNlaG9sZGVyKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKHZhbHVlID09PSBwbGFjZWhvbGRlciB8fCB2YWx1ZSA9PT0gUExBQ0VIT0xERVIpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IFBMQUNFSE9MREVSO1xuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVwbGFjZUhvbGRlcnM7XG4iLCIvKipcbiAqIExpc3Qgb2YgVVMgRHJpdmVyIGxpY2Vuc2VzIHJlZ2V4XG4gKiBBbGwgY3JlZGl0IGZvciBjb21waWxpbmcgdGhpcyBsaXN0IGdvZXMgdG8gZ2l0aHViIHVzZXIgbWlrZW1mbGVtaW5nXG4gKiBZb3UgbWF5IHNlZSBoaXMgb3JpZ2luYWwgQ0xJIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUgaGVyZTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taWtlbWZsZW1pbmcvc3RhdGUtZHJpdmVycy1saWNlbnNlLXJlZ2V4XG4gKiBBbmQgdG8gdGhlIG9yaWdpbmFsIGNvbXBpbGVyIG9mIGFsbCB0aGUgcmVnZXgsIGdpdGh1YiB1c2VyIGFkYW1idWxsbWVyXG4gKiBZb3UgbWF5IHNlZSBoaXMgb3JpZ2luYWwgYXBwcm9hY2ggdG8gdGhpcyBtb2R1bGUgKGluIFBIUCkgaGVyZTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hZGFtYnVsbG1lci9VU0RMUmVnZXhcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQUw6IFtcbiAgICB7XG4gICAgICByZWdleDogL15cXGR7Nyw4fSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTk5OTk5OTk5OIE1pbkxlbmd0aCA9IDcgTWF4TGVuZ3RoID0gOFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl1cXGR7Niw3fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOTk5OTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDhcIixcbiAgICB9LFxuICBdLFxuICBBSzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZHs3fSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTk5OTk5OTk4gTWluTGVuZ3RoID0gNyBNYXhMZW5ndGggPSA3XCIsXG4gICAgfSxcbiAgXSxcbiAgQVo6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZHs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOTk5OTk5OTiBNaW5MZW5ndGggPSA5IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIEFSOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OTiBNaW5MZW5ndGggPSA5IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezh9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQU5OTk5OTk5OIE1pbkxlbmd0aCA9IDkgTWF4TGVuZ3RoID0gOVwiLFxuICAgIH0sXG4gIF0sXG4gIENBOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXs3fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA3IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBDTzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXszLDZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQU5OTk5OTiBtaW4gbGVuZ3RoIDQgbWF4IDdcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezJ9WzAtOV17MSw1fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFBTk5OTk4gbWluIGxlbmd0aCAzIG1heCA3XCIsXG4gICAgfSxcbiAgXSxcbiAgQ1Q6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBERTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZHsxLDd9JC8sXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMS03IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBEQzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDcgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgRkw6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezEyfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSAxMiBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZHsxMX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJBTk5OTk5OTk5OTk4gTWluTGVuZ3RoID0gMTIgTWF4TGVuZ3RoID0gMTJcIixcbiAgICB9LFxuICBdLFxuICBHQTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezcsOX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNy05IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBHVTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZHsxMH0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OTk4gTWluTGVuZ3RoID0gMTAgTWF4TGVuZ3RoID0gMTBcIixcbiAgICB9LFxuICBdLFxuICBISTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17OH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgOCBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBJRDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezJ9WzAtOV17Nn1bQS1aXXsxfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkxpY2Vuc2UgbXVzdCBiZSAyIGxldHRlcnMgZm9sbG93ZWQgYnkgNiBudW1iZXJzIGZvbGxvd2VkIGJ5IDEgbGV0dGVyXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBJTDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17MTF9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDExIG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBJTjogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezksMTB9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDktMTAgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIElBOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXszfVtBLVpdezJ9WzAtOV17NH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJMaWNlbnNlIG11c3QgYmUgMyBudW1iZXJzIGZvbGxvd2VkIGJ5IDIgbGV0dGVycyBmb2xsb3dlZCBieSA0IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBLUzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17OH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgOCBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBLWTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17OCw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA4LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTEE6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXsxLDl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEtOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTUU6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs3fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA3IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezd9W0EtWl17MX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNyBudW1iZXJzIGZvbGxvd2VkIGJ5IDEgbGV0dGVyXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA4IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBNRDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezEsMn1bMC05XXsxMSwxMn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJMaWNlbnNlIG11c3QgYmUgMSBvciAyIGxldHRlcnMgZm9sbG93ZWQgYnkgMTEgb3IgMTIgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE1BOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC8oXltBLVpdezF9WzAtOV17OH0kfF5bQS1aXXsyfVswLTldezd9JCkvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA4IG51bWJlcnMgb3IgMiBsZXR0ZXJzIGZvbGxvd2VkIGJ5IDcgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE1JOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXsxMn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgMTIgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE1OOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXsxMn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgMTIgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE1TOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgLy8gVE9ETzogVGVzdCByZW1haW5pbmcgTGljZW5zZXNcbiAgTU86IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezUsOX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgNS05IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17Nn1bUl17MX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0xpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA2IG51bWJlcnMgZm9sbG93ZWQgYnkgXCJSXCInLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX1bQS1aXXsxfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnMgZm9sbG93ZWQgYnkgMSBsZXR0ZXJcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17M31bQS1aXXsxfVswLTldezZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDMgbnVtYmVycyArIDEgYWxmYW51bWVyaWMgKyA2IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezUsNn1bQS1aXSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkFOTk5OTkEgTWluTGVuZ3RoID0gNyBNYXhMZW5ndGggPSA3IE9SIEFOTk5OTkEgTWluTGVuZ3RoID0gOCBNYXhMZW5ndGggPSA4XCIsXG4gICAgfSxcbiAgXSxcbiAgTVQ6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXsxM30kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMTMgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZChcXGR8W0EtWl0pXFxkezJ9W0EtWl17M31cXGQkL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJBTlhOTkFBQU4gTWluTGVuZ3RoID0gOSBNYXhMZW5ndGggPSA5XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bYS16XXszfVxcZHsxMH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaHJlZSBsZXR0ZXJzIGFuZCAxMCBkaWdpdHNcIixcbiAgICB9LFxuICBdLFxuICBORTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezMsOH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJBTk5OTk5OTk4gTWluTGVuZ3RoID0gNCBNYXhMZW5ndGggPSA5XCIsXG4gICAgfSxcbiAgXSxcbiAgTlY6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5LDEwfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5LTEwIG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezEyfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxMiBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZHs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOTk5OTk5OTiBNaW5MZW5ndGggPSA5IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICBdLFxuICBOSDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvKF5bMC05XXsyfVtBLVpdezN9WzAtOV17NX0kfF5bQS1aXXszfVswLTldezh9JCkvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkxpY2Vuc2UgbXVzdCBiZSAyIG51bWJlcnMgZm9sbG93ZWQgYnkgMyBsZXR0ZXJzIGZvbGxvd2VkIGJ5IDUgbnVtYmVycyBPUiAzIGxldHRlcnMgZm9sbG93ZWQgYnkgOCBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTko6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezE0fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSAxNCBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTk06IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs4LDl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDgtOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTlk6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDcgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXsxNywxOH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgMTctMTggbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OCw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA4LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE5DOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17MSwxMn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMS0xMiBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTkQ6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXszfVswLTldezZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDMgbGV0dGVycyBmb2xsb3dlZCBieSA2IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE9IOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17Mn1bMC05XXs2fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAyIGxldHRlcnMgZm9sbG93ZWQgYnkgNiBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgT0s6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eXFxkezcsOX0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICBdLFxuICBPUjogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezUsOX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNS05IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQU5OTk5OTk4gTWluTGVuZ3RoID0gOCBNYXhMZW5ndGggPSA4XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aMC05XXs2LDl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiWFhYWFhYWFhYIE1pbkxlbmd0aCA9IDYgTWF4TGVuZ3RoID0gOVwiLFxuICAgIH0sXG4gIF0sXG4gIFBBOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOCBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgUkk6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs3LDh9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDcgb3IgOCBudW1iZXJzIHdpdGhvdXQgbGV0dGVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXs2fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA2IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBTQzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezYsMTF9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDYtMTEgbnVtYmVycyAobmV3OiA5LCBvbGQgZm9ybWF0OiA2LTExKVwiLFxuICAgIH0sXG4gIF0sXG4gIFNEOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17Niw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA2LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIFROOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17Nyw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA3LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIFRYOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eXFxkezUsOH0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OIE1pbkxlbmd0aCA9IDUgTWF4TGVuZ3RoID0gOFwiLFxuICAgIH0sXG4gIF0sXG4gIFVUOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17NCwxMH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNC0xMCBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgVlQ6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs3LH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNy04IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezd9W0FdJC9pLFxuICAgICAgZGVzY3JpcHRpb246ICdMaWNlbnNlIG11c3QgYmUgNyBudW1iZXJzIGZvbGxvd2VkIGJ5IFwiQVwiJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZHs3fVtBLVpdPyQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIk5OTk5OTk5BIE1pbkxlbmd0aCA9IDggTWF4TGVuZ3RoID0gOCBPUiBOTk5OTk5OIE1pbkxlbmd0aCA9IDcgTWF4TGVuZ3RoID0gN1wiLFxuICAgIH0sXG4gIF0sXG4gIFZBOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA4IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC8sXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgVkk6IFtcbiAgICB7XG4gICAgICByZWdleDogL15cXGR7MTB9JC8sXG4gICAgICBkZXNjcmlwdGlvbjogXCJOTk5OTk5OTk5OIE1pbkxlbmd0aCA9IDEwIE1heExlbmd0aCA9IDEwXCIsXG4gICAgfSxcbiAgXSxcbiAgV0E6IFtcbiAgICB7XG4gICAgICByZWdleDogL14oPz0uezEyfSQpW0EtWl17MSw3fVtBLVowLTlcXFxcKl17NCwxMX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0xpY2Vuc2UgbXVzdCBiZSAxLTcgbGV0dGVycyBmb2xsb3dlZCBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgbnVtYmVycywgb3IgXCIqXCIgZm9yIGEgdG90YWwgb2YgMTIgY2hhcmFjdGVycycsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aMC05XXsxMn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJYWFhYWFhYWFhYWFggTWluTGVuZ3RoID0gMTIgTWF4TGVuZ3RoID0gMTJcIixcbiAgICB9LFxuICBdLFxuICBXVjogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDcgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17Mn1bMC05XXs1fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAyIGxldHRlcnMgZm9sbG93ZWQgYnkgNSBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxLDJ9WzAtOV17Nn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMS0yIGxldHRlcnMgZm9sbG93ZWQgYnkgNiBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZHs2fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOTk5OTk4gTWluTGVuZ3RoID0gNyBNYXhMZW5ndGggPSA3XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsyfVxcZHs1LDZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiQUFOTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDcgT1IgQUFOTk5OTk4gTWluTGVuZ3RoID0gOCBNYXhMZW5ndGggPSA4XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15cXGRbQS1aXVxcZHs1fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5BTk5OTk4gTWluTGVuZ3RoID0gNyBNYXhMZW5ndGggPSA3XCIsXG4gICAgfSxcbiAgXSxcbiAgV0k6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezEzfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSAxMyBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgV1k6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIFBSOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eXFxkezcsOX0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICBdLFxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBub3JtYWxpemVIZWFkZXJOYW1lID0gcmVxdWlyZSgnLi4vaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lJyk7XG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xudmFyIHRyYW5zaXRpb25hbERlZmF1bHRzID0gcmVxdWlyZSgnLi90cmFuc2l0aW9uYWwnKTtcbnZhciB0b0Zvcm1EYXRhID0gcmVxdWlyZSgnLi4vaGVscGVycy90b0Zvcm1EYXRhJyk7XG5cbnZhciBERUZBVUxUX0NPTlRFTlRfVFlQRSA9IHtcbiAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG59O1xuXG5mdW5jdGlvbiBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgdmFsdWUpIHtcbiAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzKSAmJiB1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzWydDb250ZW50LVR5cGUnXSkpIHtcbiAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRBZGFwdGVyKCkge1xuICB2YXIgYWRhcHRlcjtcbiAgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBGb3IgYnJvd3NlcnMgdXNlIFhIUiBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4uL2FkYXB0ZXJzL3hocicpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3NdJykge1xuICAgIC8vIEZvciBub2RlIHVzZSBIVFRQIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi4vYWRhcHRlcnMvaHR0cCcpO1xuICB9XG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxudmFyIGRlZmF1bHRzID0ge1xuXG4gIHRyYW5zaXRpb25hbDogdHJhbnNpdGlvbmFsRGVmYXVsdHMsXG5cbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQWNjZXB0Jyk7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQmxvYihkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgdmFyIGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzLmlzT2JqZWN0KGRhdGEpO1xuICAgIHZhciBjb250ZW50VHlwZSA9IGhlYWRlcnMgJiYgaGVhZGVyc1snQ29udGVudC1UeXBlJ107XG5cbiAgICB2YXIgaXNGaWxlTGlzdDtcblxuICAgIGlmICgoaXNGaWxlTGlzdCA9IHV0aWxzLmlzRmlsZUxpc3QoZGF0YSkpIHx8IChpc09iamVjdFBheWxvYWQgJiYgY29udGVudFR5cGUgPT09ICdtdWx0aXBhcnQvZm9ybS1kYXRhJykpIHtcbiAgICAgIHZhciBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcbiAgICAgIHJldHVybiB0b0Zvcm1EYXRhKGlzRmlsZUxpc3QgPyB7J2ZpbGVzW10nOiBkYXRhfSA6IGRhdGEsIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCkpO1xuICAgIH0gZWxzZSBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vanNvbicpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgdmFyIHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICB2YXIgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgIHZhciBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgdmFyIHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcgfHwgKGZvcmNlZEpTT05QYXJzaW5nICYmIHV0aWxzLmlzU3RyaW5nKGRhdGEpICYmIGRhdGEubGVuZ3RoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsIHRoaXMsIG51bGwsIHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcmVxdWlyZSgnLi9lbnYvRm9ybURhdGEnKVxuICB9LFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonXG4gICAgfVxuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHV0aWxzLm1lcmdlKERFRkFVTFRfQ09OVEVOVF9UWVBFKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290JyksXG4gICAgc3R1YkZhbHNlID0gcmVxdWlyZSgnLi9zdHViRmFsc2UnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQnVmZmVyO1xuIiwidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNMZW5ndGg7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXA7XG4iLCJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDcmVhdGU7XG4iLCIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBiYXNlTG9kYXNoID0gcmVxdWlyZSgnLi9fYmFzZUxvZGFzaCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB0aGUgbWF4aW11bSBsZW5ndGggYW5kIGluZGV4IG9mIGFuIGFycmF5LiAqL1xudmFyIE1BWF9BUlJBWV9MRU5HVEggPSA0Mjk0OTY3Mjk1O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBsYXp5IHdyYXBwZXIgb2JqZWN0IHdoaWNoIHdyYXBzIGB2YWx1ZWAgdG8gZW5hYmxlIGxhenkgZXZhbHVhdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICovXG5mdW5jdGlvbiBMYXp5V3JhcHBlcih2YWx1ZSkge1xuICB0aGlzLl9fd3JhcHBlZF9fID0gdmFsdWU7XG4gIHRoaXMuX19hY3Rpb25zX18gPSBbXTtcbiAgdGhpcy5fX2Rpcl9fID0gMTtcbiAgdGhpcy5fX2ZpbHRlcmVkX18gPSBmYWxzZTtcbiAgdGhpcy5fX2l0ZXJhdGVlc19fID0gW107XG4gIHRoaXMuX190YWtlQ291bnRfXyA9IE1BWF9BUlJBWV9MRU5HVEg7XG4gIHRoaXMuX192aWV3c19fID0gW107XG59XG5cbi8vIEVuc3VyZSBgTGF6eVdyYXBwZXJgIGlzIGFuIGluc3RhbmNlIG9mIGBiYXNlTG9kYXNoYC5cbkxhenlXcmFwcGVyLnByb3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpO1xuTGF6eVdyYXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGF6eVdyYXBwZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTGF6eVdyYXBwZXI7XG4iLCIvKipcbiAqIFRoZSBmdW5jdGlvbiB3aG9zZSBwcm90b3R5cGUgY2hhaW4gc2VxdWVuY2Ugd3JhcHBlcnMgaW5oZXJpdCBmcm9tLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJhc2VMb2Rhc2goKSB7XG4gIC8vIE5vIG9wZXJhdGlvbiBwZXJmb3JtZWQuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUxvZGFzaDtcbiIsIi8qKlxuICogR2V0cyB0aGUgYXJndW1lbnQgcGxhY2Vob2xkZXIgdmFsdWUgZm9yIGBmdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0SG9sZGVyKGZ1bmMpIHtcbiAgdmFyIG9iamVjdCA9IGZ1bmM7XG4gIHJldHVybiBvYmplY3QucGxhY2Vob2xkZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0SG9sZGVyO1xuIiwiKGZ1bmN0aW9uKGYpIHtcblxuICAndXNlIHN0cmljdCc7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiBleHBvcnRzICE9IG51bGwgJiZcbiAgICAgIHR5cGVvZiBleHBvcnRzLm5vZGVUeXBlICE9PSAnbnVtYmVyJykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZiAoKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgIT0gbnVsbCkge1xuICAgIGRlZmluZSAoW10sIGYpO1xuICB9IGVsc2Uge1xuICAgIHZhciBiYXNlNjQgPSBmICgpO1xuICAgIHZhciBnbG9iYWwgPSB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogJC5nbG9iYWw7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWwuYnRvYSAhPT0gJ2Z1bmN0aW9uJykgZ2xvYmFsLmJ0b2EgPSBiYXNlNjQuYnRvYTtcbiAgICBpZiAodHlwZW9mIGdsb2JhbC5hdG9iICE9PSAnZnVuY3Rpb24nKSBnbG9iYWwuYXRvYiA9IGJhc2U2NC5hdG9iO1xuICB9XG5cbn0gKGZ1bmN0aW9uKCkge1xuXG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nO1xuXG4gIGZ1bmN0aW9uIEludmFsaWRDaGFyYWN0ZXJFcnJvcihtZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgfVxuICBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yICgpO1xuICBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcblxuICAvLyBlbmNvZGVyXG4gIC8vIFtodHRwczovL2dpc3QuZ2l0aHViLmNvbS85OTkxNjZdIGJ5IFtodHRwczovL2dpdGh1Yi5jb20vbmlnbmFnXVxuICBmdW5jdGlvbiBidG9hKGlucHV0KSB7XG4gICAgdmFyIHN0ciA9IFN0cmluZyAoaW5wdXQpO1xuICAgIGZvciAoXG4gICAgICAvLyBpbml0aWFsaXplIHJlc3VsdCBhbmQgY291bnRlclxuICAgICAgdmFyIGJsb2NrLCBjaGFyQ29kZSwgaWR4ID0gMCwgbWFwID0gY2hhcnMsIG91dHB1dCA9ICcnO1xuICAgICAgLy8gaWYgdGhlIG5leHQgc3RyIGluZGV4IGRvZXMgbm90IGV4aXN0OlxuICAgICAgLy8gICBjaGFuZ2UgdGhlIG1hcHBpbmcgdGFibGUgdG8gXCI9XCJcbiAgICAgIC8vICAgY2hlY2sgaWYgZCBoYXMgbm8gZnJhY3Rpb25hbCBkaWdpdHNcbiAgICAgIHN0ci5jaGFyQXQgKGlkeCB8IDApIHx8IChtYXAgPSAnPScsIGlkeCAlIDEpO1xuICAgICAgLy8gXCI4IC0gaWR4ICUgMSAqIDhcIiBnZW5lcmF0ZXMgdGhlIHNlcXVlbmNlIDIsIDQsIDYsIDhcbiAgICAgIG91dHB1dCArPSBtYXAuY2hhckF0ICg2MyAmIGJsb2NrID4+IDggLSBpZHggJSAxICogOClcbiAgICApIHtcbiAgICAgIGNoYXJDb2RlID0gc3RyLmNoYXJDb2RlQXQgKGlkeCArPSAzIC8gNCk7XG4gICAgICBpZiAoY2hhckNvZGUgPiAweEZGKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgKFwiJ2J0b2EnIGZhaWxlZDogVGhlIHN0cmluZyB0byBiZSBlbmNvZGVkIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3V0c2lkZSBvZiB0aGUgTGF0aW4xIHJhbmdlLlwiKTtcbiAgICAgIH1cbiAgICAgIGJsb2NrID0gYmxvY2sgPDwgOCB8IGNoYXJDb2RlO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgLy8gZGVjb2RlclxuICAvLyBbaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTAyMDM5Nl0gYnkgW2h0dHBzOi8vZ2l0aHViLmNvbS9hdGtdXG4gIGZ1bmN0aW9uIGF0b2IoaW5wdXQpIHtcbiAgICB2YXIgc3RyID0gKFN0cmluZyAoaW5wdXQpKS5yZXBsYWNlICgvWz1dKyQvLCAnJyk7IC8vICMzMTogRXh0ZW5kU2NyaXB0IGJhZCBwYXJzZSBvZiAvPVxuICAgIGlmIChzdHIubGVuZ3RoICUgNCA9PT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRDaGFyYWN0ZXJFcnJvciAoXCInYXRvYicgZmFpbGVkOiBUaGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLlwiKTtcbiAgICB9XG4gICAgZm9yIChcbiAgICAgIC8vIGluaXRpYWxpemUgcmVzdWx0IGFuZCBjb3VudGVyc1xuICAgICAgdmFyIGJjID0gMCwgYnMsIGJ1ZmZlciwgaWR4ID0gMCwgb3V0cHV0ID0gJyc7XG4gICAgICAvLyBnZXQgbmV4dCBjaGFyYWN0ZXJcbiAgICAgIGJ1ZmZlciA9IHN0ci5jaGFyQXQgKGlkeCsrKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25kLWFzc2lnblxuICAgICAgLy8gY2hhcmFjdGVyIGZvdW5kIGluIHRhYmxlPyBpbml0aWFsaXplIGJpdCBzdG9yYWdlIGFuZCBhZGQgaXRzIGFzY2lpIHZhbHVlO1xuICAgICAgfmJ1ZmZlciAmJiAoYnMgPSBiYyAlIDQgPyBicyAqIDY0ICsgYnVmZmVyIDogYnVmZmVyLFxuICAgICAgICAvLyBhbmQgaWYgbm90IGZpcnN0IG9mIGVhY2ggNCBjaGFyYWN0ZXJzLFxuICAgICAgICAvLyBjb252ZXJ0IHRoZSBmaXJzdCA4IGJpdHMgdG8gb25lIGFzY2lpIGNoYXJhY3RlclxuICAgICAgICBiYysrICUgNCkgPyBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSAoMjU1ICYgYnMgPj4gKC0yICogYmMgJiA2KSkgOiAwXG4gICAgKSB7XG4gICAgICAvLyB0cnkgdG8gZmluZCBjaGFyYWN0ZXIgaW4gdGFibGUgKDAtNjMsIG5vdCBmb3VuZCA9PiAtMSlcbiAgICAgIGJ1ZmZlciA9IGNoYXJzLmluZGV4T2YgKGJ1ZmZlcik7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICByZXR1cm4ge2J0b2E6IGJ0b2EsIGF0b2I6IGF0b2J9O1xuXG59KSk7XG4iLCJ2YXIgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGNyZWF0ZVdyYXAgPSByZXF1aXJlKCcuL19jcmVhdGVXcmFwJyksXG4gICAgZ2V0SG9sZGVyID0gcmVxdWlyZSgnLi9fZ2V0SG9sZGVyJyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlXG4gKiBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYmluZGAgZXhjZXB0IGl0IGRvZXMgKipub3QqKlxuICogYWx0ZXIgdGhlIGB0aGlzYCBiaW5kaW5nLlxuICpcbiAqIFRoZSBgXy5wYXJ0aWFsLnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBwYXJ0aWFsbHlcbiAqIGFwcGxpZWQgZnVuY3Rpb25zLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4yLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5IGFyZ3VtZW50cyB0by5cbiAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcGFydGlhbGx5IGFwcGxpZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIGdyZWV0KGdyZWV0aW5nLCBuYW1lKSB7XG4gKiAgIHJldHVybiBncmVldGluZyArICcgJyArIG5hbWU7XG4gKiB9XG4gKlxuICogdmFyIHNheUhlbGxvVG8gPSBfLnBhcnRpYWwoZ3JlZXQsICdoZWxsbycpO1xuICogc2F5SGVsbG9UbygnZnJlZCcpO1xuICogLy8gPT4gJ2hlbGxvIGZyZWQnXG4gKlxuICogLy8gUGFydGlhbGx5IGFwcGxpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gKiB2YXIgZ3JlZXRGcmVkID0gXy5wYXJ0aWFsKGdyZWV0LCBfLCAnZnJlZCcpO1xuICogZ3JlZXRGcmVkKCdoaScpO1xuICogLy8gPT4gJ2hpIGZyZWQnXG4gKi9cbnZhciBwYXJ0aWFsID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgcGFydGlhbHMpIHtcbiAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKHBhcnRpYWwpKTtcbiAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9QQVJUSUFMX0ZMQUcsIHVuZGVmaW5lZCwgcGFydGlhbHMsIGhvbGRlcnMpO1xufSk7XG5cbi8vIEFzc2lnbiBkZWZhdWx0IHBsYWNlaG9sZGVycy5cbnBhcnRpYWwucGxhY2Vob2xkZXIgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJ0aWFsO1xuIiwidmFyIGRyaXZlcnNMaWNlbnNlUmVnZXggPSByZXF1aXJlKFwiLi9saWNlbnNlLXJlZ2V4XCIpO1xudmFyIGlzVmFsaWRVU0xpY2Vuc2UgPSByZXF1aXJlKFwiLi9pcy12YWxpZC11cy1saWNlbnNlXCIpO1xudmFyIHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRlLWRyaXZlcnMtbGljZW5zZVwiKTtcbnZhciBzdXBwb3J0ZWRTdGF0ZXMgPSByZXF1aXJlKFwiLi9zdXBwb3J0ZWQtc3RhdGVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZHJpdmVyc0xpY2Vuc2VSZWdleDogZHJpdmVyc0xpY2Vuc2VSZWdleCxcbiAgaXNWYWxpZFVTTGljZW5zZTogaXNWYWxpZFVTTGljZW5zZSxcbiAgdmFsaWRhdGVVU0RyaXZlcnNMaWNlbnNlOiB2YWxpZGF0ZVVTRHJpdmVyc0xpY2Vuc2UsXG4gIHN1cHBvcnRlZFN0YXRlczogc3VwcG9ydGVkU3RhdGVzXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBwYXJhbXNTZXJpYWxpemVyKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZFBhcmFtcztcbiAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zU2VyaWFsaXplcihwYXJhbXMpO1xuICB9IGVsc2UgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHBhcnRzID0gW107XG5cbiAgICB1dGlscy5mb3JFYWNoKHBhcmFtcywgZnVuY3Rpb24gc2VyaWFsaXplKHZhbCwga2V5KSB7XG4gICAgICBpZiAodmFsID09PSBudWxsIHx8IHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHV0aWxzLmlzQXJyYXkodmFsKSkge1xuICAgICAgICBrZXkgPSBrZXkgKyAnW10nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gW3ZhbF07XG4gICAgICB9XG5cbiAgICAgIHV0aWxzLmZvckVhY2godmFsLCBmdW5jdGlvbiBwYXJzZVZhbHVlKHYpIHtcbiAgICAgICAgaWYgKHV0aWxzLmlzRGF0ZSh2KSkge1xuICAgICAgICAgIHYgPSB2LnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QodikpIHtcbiAgICAgICAgICB2ID0gSlNPTi5zdHJpbmdpZnkodik7XG4gICAgICAgIH1cbiAgICAgICAgcGFydHMucHVzaChlbmNvZGUoa2V5KSArICc9JyArIGVuY29kZSh2KSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJ0cy5qb2luKCcmJyk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIHZhciBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoJyMnKTtcbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG5cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2Vcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0gez9PYmplY3R9IFtmb3JtRGF0YV1cbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiovXG5cbmZ1bmN0aW9uIHRvRm9ybURhdGEob2JqLCBmb3JtRGF0YSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgRm9ybURhdGEoKTtcblxuICB2YXIgc3RhY2sgPSBbXTtcblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscy5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGQoZGF0YSwgcGFyZW50S2V5KSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QoZGF0YSkgfHwgdXRpbHMuaXNBcnJheShkYXRhKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2YoZGF0YSkgIT09IC0xKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhcmVudEtleSk7XG4gICAgICB9XG5cbiAgICAgIHN0YWNrLnB1c2goZGF0YSk7XG5cbiAgICAgIHV0aWxzLmZvckVhY2goZGF0YSwgZnVuY3Rpb24gZWFjaCh2YWx1ZSwga2V5KSB7XG4gICAgICAgIGlmICh1dGlscy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcbiAgICAgICAgdmFyIGZ1bGxLZXkgPSBwYXJlbnRLZXkgPyBwYXJlbnRLZXkgKyAnLicgKyBrZXkgOiBrZXk7XG4gICAgICAgIHZhciBhcnI7XG5cbiAgICAgICAgaWYgKHZhbHVlICYmICFwYXJlbnRLZXkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGlmICh1dGlscy5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSAmJiAoYXJyID0gdXRpbHMudG9BcnJheSh2YWx1ZSkpKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24oZWwpIHtcbiAgICAgICAgICAgICAgIXV0aWxzLmlzVW5kZWZpbmVkKGVsKSAmJiBmb3JtRGF0YS5hcHBlbmQoZnVsbEtleSwgY29udmVydFZhbHVlKGVsKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBidWlsZCh2YWx1ZSwgZnVsbEtleSk7XG4gICAgICB9KTtcblxuICAgICAgc3RhY2sucG9wKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChwYXJlbnRLZXksIGNvbnZlcnRWYWx1ZShkYXRhKSk7XG4gICAgfVxuICB9XG5cbiAgYnVpbGQob2JqKTtcblxuICByZXR1cm4gZm9ybURhdGE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Gb3JtRGF0YTtcbiIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHNldHRsZSA9IHJlcXVpcmUoJy4vLi4vY29yZS9zZXR0bGUnKTtcbnZhciBjb29raWVzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2Nvb2tpZXMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuLi9jb3JlL2J1aWxkRnVsbFBhdGgnKTtcbnZhciBwYXJzZUhlYWRlcnMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzJyk7XG52YXIgaXNVUkxTYW1lT3JpZ2luID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbicpO1xudmFyIHRyYW5zaXRpb25hbERlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMvdHJhbnNpdGlvbmFsJyk7XG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xudmFyIENhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvcicpO1xudmFyIHBhcnNlUHJvdG9jb2wgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4aHJBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciByZXF1ZXN0SGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuICAgIHZhciByZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgIHZhciBvbkNhbmNlbGVkO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSAmJiB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpKSB7XG4gICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfVxuXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIHZhciB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgdmFyIHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoY29uZmlnLmF1dGgucGFzc3dvcmQpKSA6ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcblxuICAgIHJlcXVlc3Qub3Blbihjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9ICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgPyBwYXJzZUhlYWRlcnMocmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkgOiBudWxsO1xuICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgIHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0LCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIHZhciB0aW1lb3V0RXJyb3JNZXNzYWdlID0gY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgdmFyIHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZiAodXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lID9cbiAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuIHx8IGNvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gZnVuY3Rpb24oY2FuY2VsKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCAoY2FuY2VsICYmIGNhbmNlbC50eXBlKSA/IG5ldyBDYW5jZWxlZEVycm9yKCkgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuICYmIGNvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBjb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFyZXF1ZXN0RGF0YSkge1xuICAgICAgcmVxdWVzdERhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2woZnVsbFBhdGgpO1xuXG4gICAgaWYgKHByb3RvY29sICYmIFsgJ2h0dHAnLCAnaHR0cHMnLCAnZmlsZScgXS5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sICsgJzonLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgY29uZmlnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNBYnNvbHV0ZVVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTCcpO1xudmFyIGNvbWJpbmVVUkxzID0gcmVxdWlyZSgnLi4vaGVscGVycy9jb21iaW5lVVJMcycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlKSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcxW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMVtwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcxW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMVtwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbWVyZ2VNYXAgPSB7XG4gICAgJ3VybCc6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgJ21ldGhvZCc6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgJ2RhdGEnOiB2YWx1ZUZyb21Db25maWcyLFxuICAgICdiYXNlVVJMJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndHJhbnNmb3JtUmVxdWVzdCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RyYW5zZm9ybVJlc3BvbnNlJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAncGFyYW1zU2VyaWFsaXplcic6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RpbWVvdXQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0aW1lb3V0TWVzc2FnZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3dpdGhDcmVkZW50aWFscyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2FkYXB0ZXInOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdyZXNwb25zZVR5cGUnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd4c3JmQ29va2llTmFtZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3hzcmZIZWFkZXJOYW1lJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnb25VcGxvYWRQcm9ncmVzcyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ29uRG93bmxvYWRQcm9ncmVzcyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2RlY29tcHJlc3MnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdtYXhDb250ZW50TGVuZ3RoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnbWF4Qm9keUxlbmd0aCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2JlZm9yZVJlZGlyZWN0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndHJhbnNwb3J0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnaHR0cEFnZW50JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnaHR0cHNBZ2VudCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2NhbmNlbFRva2VuJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnc29ja2V0UGF0aCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3Jlc3BvbnNlRW5jb2RpbmcnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd2YWxpZGF0ZVN0YXR1cyc6IG1lcmdlRGlyZWN0S2V5c1xuICB9O1xuXG4gIHV0aWxzLmZvckVhY2goT2JqZWN0LmtleXMoY29uZmlnMSkuY29uY2F0KE9iamVjdC5rZXlzKGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICB2YXIgbWVyZ2UgPSBtZXJnZU1hcFtwcm9wXSB8fCBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIHZhciBjb25maWdWYWx1ZSA9IG1lcmdlKHByb3ApO1xuICAgICh1dGlscy5pc1VuZGVmaW5lZChjb25maWdWYWx1ZSkgJiYgbWVyZ2UgIT09IG1lcmdlRGlyZWN0S2V5cykgfHwgKGNvbmZpZ1twcm9wXSA9IGNvbmZpZ1ZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgXCJ2ZXJzaW9uXCI6IFwiMC4yNy4yXCJcbn07IiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RmlsdGVyO1xuIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcblx0aWYgKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XG5cdFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XG5cdFx0bW9kdWxlLnBhdGhzID0gW107XG5cdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XG5cdFx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwibG9hZGVkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmw7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuXHR9XG5cdHJldHVybiBtb2R1bGU7XG59O1xuIiwidmFyIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXM7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIHN0YWNrQ2xlYXIgPSByZXF1aXJlKCcuL19zdGFja0NsZWFyJyksXG4gICAgc3RhY2tEZWxldGUgPSByZXF1aXJlKCcuL19zdGFja0RlbGV0ZScpLFxuICAgIHN0YWNrR2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tHZXQnKSxcbiAgICBzdGFja0hhcyA9IHJlcXVpcmUoJy4vX3N0YWNrSGFzJyksXG4gICAgc3RhY2tTZXQgPSByZXF1aXJlKCcuL19zdGFja1NldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhY2s7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iLCJ2YXIgYmFzZUlzRXF1YWxEZWVwID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWxEZWVwJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWw7XG4iLCJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5U29tZSA9IHJlcXVpcmUoJy4vX2FycmF5U29tZScpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcnJheXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XG5cbiAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc1BhcnRpYWwgJiYgb3RoTGVuZ3RoID4gYXJyTGVuZ3RoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgYXJyU3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKGFyclN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBhcnJTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gYXJyYXk7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiZcbiAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcbiAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQXJyYXlzO1xuIiwidmFyIERhdGFWaWV3ID0gcmVxdWlyZSgnLi9fRGF0YVZpZXcnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBQcm9taXNlID0gcmVxdWlyZSgnLi9fUHJvbWlzZScpLFxuICAgIFNldCA9IHJlcXVpcmUoJy4vX1NldCcpLFxuICAgIFdlYWtNYXAgPSByZXF1aXJlKCcuL19XZWFrTWFwJyksXG4gICAgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VGFnO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2Vha01hcDtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaWN0Q29tcGFyYWJsZTtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBtYXRjaGVzUHJvcGVydHlgIGZvciBzb3VyY2UgdmFsdWVzIHN1aXRhYmxlXG4gKiBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUoa2V5LCBzcmNWYWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Rba2V5XSA9PT0gc3JjVmFsdWUgJiZcbiAgICAgIChzcmNWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gT2JqZWN0KG9iamVjdCkpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZTtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXQ7XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICBzdHJpbmdUb1BhdGggPSByZXF1aXJlKCcuL19zdHJpbmdUb1BhdGgnKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0UGF0aDtcbiIsInZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuIiwidmFyIGJhc2VGaW5kSW5kZXggPSByZXF1aXJlKCcuL19iYXNlRmluZEluZGV4JyksXG4gICAgYmFzZUlzTmFOID0gcmVxdWlyZSgnLi9fYmFzZUlzTmFOJyksXG4gICAgc3RyaWN0SW5kZXhPZiA9IHJlcXVpcmUoJy4vX3N0cmljdEluZGV4T2YnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pbmRleE9mYCB3aXRob3V0IGBmcm9tSW5kZXhgIGJvdW5kcyBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZVxuICAgID8gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleClcbiAgICA6IGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJc05hTiwgZnJvbUluZGV4KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSW5kZXhPZjtcbiIsInZhciB0b0Zpbml0ZSA9IHJlcXVpcmUoJy4vdG9GaW5pdGUnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGludGVnZXIuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9JbnRlZ2VyYF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvaW50ZWdlcikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0ludGVnZXIoMy4yKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLnRvSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDBcbiAqXG4gKiBfLnRvSW50ZWdlcihJbmZpbml0eSk7XG4gKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICpcbiAqIF8udG9JbnRlZ2VyKCczLjInKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gdG9JbnRlZ2VyKHZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSB0b0Zpbml0ZSh2YWx1ZSksXG4gICAgICByZW1haW5kZXIgPSByZXN1bHQgJSAxO1xuXG4gIHJldHVybiByZXN1bHQgPT09IHJlc3VsdCA/IChyZW1haW5kZXIgPyByZXN1bHQgLSByZW1haW5kZXIgOiByZXN1bHQpIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0ludGVnZXI7XG4iLCJ2YXIgdG9OdW1iZXIgPSByZXF1aXJlKCcuL3RvTnVtYmVyJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDAsXG4gICAgTUFYX0lOVEVHRVIgPSAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwODtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgZmluaXRlIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTIuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvRmluaXRlKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvRmluaXRlKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b0Zpbml0ZShJbmZpbml0eSk7XG4gKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICpcbiAqIF8udG9GaW5pdGUoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvRmluaXRlKHZhbHVlKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6IDA7XG4gIH1cbiAgdmFsdWUgPSB0b051bWJlcih2YWx1ZSk7XG4gIGlmICh2YWx1ZSA9PT0gSU5GSU5JVFkgfHwgdmFsdWUgPT09IC1JTkZJTklUWSkge1xuICAgIHZhciBzaWduID0gKHZhbHVlIDwgMCA/IC0xIDogMSk7XG4gICAgcmV0dXJuIHNpZ24gKiBNQVhfSU5URUdFUjtcbiAgfVxuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gdmFsdWUgOiAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvRmluaXRlO1xuIiwidmFyIGJhc2VTZXREYXRhID0gcmVxdWlyZSgnLi9fYmFzZVNldERhdGEnKSxcbiAgICBjcmVhdGVCaW5kID0gcmVxdWlyZSgnLi9fY3JlYXRlQmluZCcpLFxuICAgIGNyZWF0ZUN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3VycnknKSxcbiAgICBjcmVhdGVIeWJyaWQgPSByZXF1aXJlKCcuL19jcmVhdGVIeWJyaWQnKSxcbiAgICBjcmVhdGVQYXJ0aWFsID0gcmVxdWlyZSgnLi9fY3JlYXRlUGFydGlhbCcpLFxuICAgIGdldERhdGEgPSByZXF1aXJlKCcuL19nZXREYXRhJyksXG4gICAgbWVyZ2VEYXRhID0gcmVxdWlyZSgnLi9fbWVyZ2VEYXRhJyksXG4gICAgc2V0RGF0YSA9IHJlcXVpcmUoJy4vX3NldERhdGEnKSxcbiAgICBzZXRXcmFwVG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRXcmFwVG9TdHJpbmcnKSxcbiAgICB0b0ludGVnZXIgPSByZXF1aXJlKCcuL3RvSW50ZWdlcicpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfQ1VSUllfUklHSFRfRkxBRyA9IDE2LFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzIsXG4gICAgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgPSA2NDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGVpdGhlciBjdXJyaWVzIG9yIGludm9rZXMgYGZ1bmNgIHdpdGggb3B0aW9uYWxcbiAqIGB0aGlzYCBiaW5kaW5nIGFuZCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb258c3RyaW5nfSBmdW5jIFRoZSBmdW5jdGlvbiBvciBtZXRob2QgbmFtZSB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgICAxIC0gYF8uYmluZGBcbiAqICAgIDIgLSBgXy5iaW5kS2V5YFxuICogICAgNCAtIGBfLmN1cnJ5YCBvciBgXy5jdXJyeVJpZ2h0YCBvZiBhIGJvdW5kIGZ1bmN0aW9uXG4gKiAgICA4IC0gYF8uY3VycnlgXG4gKiAgIDE2IC0gYF8uY3VycnlSaWdodGBcbiAqICAgMzIgLSBgXy5wYXJ0aWFsYFxuICogICA2NCAtIGBfLnBhcnRpYWxSaWdodGBcbiAqICAxMjggLSBgXy5yZWFyZ2BcbiAqICAyNTYgLSBgXy5hcnlgXG4gKiAgNTEyIC0gYF8uZmxpcGBcbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgdmFyIGlzQmluZEtleSA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfS0VZX0ZMQUc7XG4gIGlmICghaXNCaW5kS2V5ICYmIHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IHBhcnRpYWxzID8gcGFydGlhbHMubGVuZ3RoIDogMDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBiaXRtYXNrICY9IH4oV1JBUF9QQVJUSUFMX0ZMQUcgfCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyk7XG4gICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkO1xuICB9XG4gIGFyeSA9IGFyeSA9PT0gdW5kZWZpbmVkID8gYXJ5IDogbmF0aXZlTWF4KHRvSW50ZWdlcihhcnkpLCAwKTtcbiAgYXJpdHkgPSBhcml0eSA9PT0gdW5kZWZpbmVkID8gYXJpdHkgOiB0b0ludGVnZXIoYXJpdHkpO1xuICBsZW5ndGggLT0gaG9sZGVycyA/IGhvbGRlcnMubGVuZ3RoIDogMDtcblxuICBpZiAoYml0bWFzayAmIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKSB7XG4gICAgdmFyIHBhcnRpYWxzUmlnaHQgPSBwYXJ0aWFscyxcbiAgICAgICAgaG9sZGVyc1JpZ2h0ID0gaG9sZGVycztcblxuICAgIHBhcnRpYWxzID0gaG9sZGVycyA9IHVuZGVmaW5lZDtcbiAgfVxuICB2YXIgZGF0YSA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGdldERhdGEoZnVuYyk7XG5cbiAgdmFyIG5ld0RhdGEgPSBbXG4gICAgZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCxcbiAgICBhcmdQb3MsIGFyeSwgYXJpdHlcbiAgXTtcblxuICBpZiAoZGF0YSkge1xuICAgIG1lcmdlRGF0YShuZXdEYXRhLCBkYXRhKTtcbiAgfVxuICBmdW5jID0gbmV3RGF0YVswXTtcbiAgYml0bWFzayA9IG5ld0RhdGFbMV07XG4gIHRoaXNBcmcgPSBuZXdEYXRhWzJdO1xuICBwYXJ0aWFscyA9IG5ld0RhdGFbM107XG4gIGhvbGRlcnMgPSBuZXdEYXRhWzRdO1xuICBhcml0eSA9IG5ld0RhdGFbOV0gPSBuZXdEYXRhWzldID09PSB1bmRlZmluZWRcbiAgICA/IChpc0JpbmRLZXkgPyAwIDogZnVuYy5sZW5ndGgpXG4gICAgOiBuYXRpdmVNYXgobmV3RGF0YVs5XSAtIGxlbmd0aCwgMCk7XG5cbiAgaWYgKCFhcml0eSAmJiBiaXRtYXNrICYgKFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfQ1VSUllfUklHSFRfRkxBRykpIHtcbiAgICBiaXRtYXNrICY9IH4oV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKTtcbiAgfVxuICBpZiAoIWJpdG1hc2sgfHwgYml0bWFzayA9PSBXUkFQX0JJTkRfRkxBRykge1xuICAgIHZhciByZXN1bHQgPSBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpO1xuICB9IGVsc2UgaWYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHIHx8IGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSB7XG4gICAgcmVzdWx0ID0gY3JlYXRlQ3VycnkoZnVuYywgYml0bWFzaywgYXJpdHkpO1xuICB9IGVsc2UgaWYgKChiaXRtYXNrID09IFdSQVBfUEFSVElBTF9GTEFHIHx8IGJpdG1hc2sgPT0gKFdSQVBfQklORF9GTEFHIHwgV1JBUF9QQVJUSUFMX0ZMQUcpKSAmJiAhaG9sZGVycy5sZW5ndGgpIHtcbiAgICByZXN1bHQgPSBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSBjcmVhdGVIeWJyaWQuYXBwbHkodW5kZWZpbmVkLCBuZXdEYXRhKTtcbiAgfVxuICB2YXIgc2V0dGVyID0gZGF0YSA/IGJhc2VTZXREYXRhIDogc2V0RGF0YTtcbiAgcmV0dXJuIHNldFdyYXBUb1N0cmluZyhzZXR0ZXIocmVzdWx0LCBuZXdEYXRhKSwgZnVuYywgYml0bWFzayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlV3JhcDtcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBtZXRhTWFwID0gcmVxdWlyZSgnLi9fbWV0YU1hcCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXREYXRhYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldERhdGEgPSAhbWV0YU1hcCA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgZGF0YSkge1xuICBtZXRhTWFwLnNldChmdW5jLCBkYXRhKTtcbiAgcmV0dXJuIGZ1bmM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTZXREYXRhO1xuIiwidmFyIFdlYWtNYXAgPSByZXF1aXJlKCcuL19XZWFrTWFwJyk7XG5cbi8qKiBVc2VkIHRvIHN0b3JlIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIG1ldGFNYXAgPSBXZWFrTWFwICYmIG5ldyBXZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1ldGFNYXA7XG4iLCJ2YXIgY29tcG9zZUFyZ3MgPSByZXF1aXJlKCcuL19jb21wb3NlQXJncycpLFxuICAgIGNvbXBvc2VBcmdzUmlnaHQgPSByZXF1aXJlKCcuL19jb21wb3NlQXJnc1JpZ2h0JyksXG4gICAgY291bnRIb2xkZXJzID0gcmVxdWlyZSgnLi9fY291bnRIb2xkZXJzJyksXG4gICAgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICBjcmVhdGVSZWN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlUmVjdXJyeScpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlb3JkZXIgPSByZXF1aXJlKCcuL19yZW9yZGVyJyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9DVVJSWV9SSUdIVF9GTEFHID0gMTYsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX0ZMSVBfRkxBRyA9IDUxMjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggb3B0aW9uYWwgYHRoaXNgXG4gKiBiaW5kaW5nIG9mIGB0aGlzQXJnYCwgcGFydGlhbCBhcHBsaWNhdGlvbiwgYW5kIGN1cnJ5aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNSaWdodF0gVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWRcbiAqICB0byB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNSaWdodF0gVGhlIGBwYXJ0aWFsc1JpZ2h0YCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUh5YnJpZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgdmFyIGlzQXJ5ID0gYml0bWFzayAmIFdSQVBfQVJZX0ZMQUcsXG4gICAgICBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBpc0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0tFWV9GTEFHLFxuICAgICAgaXNDdXJyaWVkID0gYml0bWFzayAmIChXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpLFxuICAgICAgaXNGbGlwID0gYml0bWFzayAmIFdSQVBfRkxJUF9GTEFHLFxuICAgICAgQ3RvciA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuXG4gICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICB9XG4gICAgaWYgKGlzQ3VycmllZCkge1xuICAgICAgdmFyIHBsYWNlaG9sZGVyID0gZ2V0SG9sZGVyKHdyYXBwZXIpLFxuICAgICAgICAgIGhvbGRlcnNDb3VudCA9IGNvdW50SG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG4gICAgfVxuICAgIGlmIChwYXJ0aWFscykge1xuICAgICAgYXJncyA9IGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpO1xuICAgIH1cbiAgICBpZiAocGFydGlhbHNSaWdodCkge1xuICAgICAgYXJncyA9IGNvbXBvc2VBcmdzUmlnaHQoYXJncywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBpc0N1cnJpZWQpO1xuICAgIH1cbiAgICBsZW5ndGggLT0gaG9sZGVyc0NvdW50O1xuICAgIGlmIChpc0N1cnJpZWQgJiYgbGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgIHZhciBuZXdIb2xkZXJzID0gcmVwbGFjZUhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlY3VycnkoXG4gICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhvbGRlciwgdGhpc0FyZyxcbiAgICAgICAgYXJncywgbmV3SG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5IC0gbGVuZ3RoXG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgdGhpc0JpbmRpbmcgPSBpc0JpbmQgPyB0aGlzQXJnIDogdGhpcyxcbiAgICAgICAgZm4gPSBpc0JpbmRLZXkgPyB0aGlzQmluZGluZ1tmdW5jXSA6IGZ1bmM7XG5cbiAgICBsZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgICBpZiAoYXJnUG9zKSB7XG4gICAgICBhcmdzID0gcmVvcmRlcihhcmdzLCBhcmdQb3MpO1xuICAgIH0gZWxzZSBpZiAoaXNGbGlwICYmIGxlbmd0aCA+IDEpIHtcbiAgICAgIGFyZ3MucmV2ZXJzZSgpO1xuICAgIH1cbiAgICBpZiAoaXNBcnkgJiYgYXJ5IDwgbGVuZ3RoKSB7XG4gICAgICBhcmdzLmxlbmd0aCA9IGFyeTtcbiAgICB9XG4gICAgaWYgKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikge1xuICAgICAgZm4gPSBDdG9yIHx8IGNyZWF0ZUN0b3IoZm4pO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUh5YnJpZDtcbiIsIi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cyxcbiAqIHBsYWNlaG9sZGVycywgYW5kIHByb3ZpZGVkIGFyZ3VtZW50cyBpbnRvIGEgc2luZ2xlIGFycmF5IG9mIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICogQHBhcmFtIHtBcnJheX0gaG9sZGVycyBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtcyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3VycmllZCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbXBvc2VkIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gY29tcG9zZUFyZ3MoYXJncywgcGFydGlhbHMsIGhvbGRlcnMsIGlzQ3VycmllZCkge1xuICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGgsXG4gICAgICBob2xkZXJzTGVuZ3RoID0gaG9sZGVycy5sZW5ndGgsXG4gICAgICBsZWZ0SW5kZXggPSAtMSxcbiAgICAgIGxlZnRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICByYW5nZUxlbmd0aCA9IG5hdGl2ZU1heChhcmdzTGVuZ3RoIC0gaG9sZGVyc0xlbmd0aCwgMCksXG4gICAgICByZXN1bHQgPSBBcnJheShsZWZ0TGVuZ3RoICsgcmFuZ2VMZW5ndGgpLFxuICAgICAgaXNVbmN1cnJpZWQgPSAhaXNDdXJyaWVkO1xuXG4gIHdoaWxlICgrK2xlZnRJbmRleCA8IGxlZnRMZW5ndGgpIHtcbiAgICByZXN1bHRbbGVmdEluZGV4XSA9IHBhcnRpYWxzW2xlZnRJbmRleF07XG4gIH1cbiAgd2hpbGUgKCsrYXJnc0luZGV4IDwgaG9sZGVyc0xlbmd0aCkge1xuICAgIGlmIChpc1VuY3VycmllZCB8fCBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoKSB7XG4gICAgICByZXN1bHRbaG9sZGVyc1thcmdzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4XTtcbiAgICB9XG4gIH1cbiAgd2hpbGUgKHJhbmdlTGVuZ3RoLS0pIHtcbiAgICByZXN1bHRbbGVmdEluZGV4KytdID0gYXJnc1thcmdzSW5kZXgrK107XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb21wb3NlQXJncztcbiIsIi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGNvbXBvc2VBcmdzYCBleGNlcHQgdGhhdCB0aGUgYXJndW1lbnRzIGNvbXBvc2l0aW9uXG4gKiBpcyB0YWlsb3JlZCBmb3IgYF8ucGFydGlhbFJpZ2h0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWQuXG4gKiBAcGFyYW0ge0FycmF5fSBob2xkZXJzIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW1zIHtib29sZWFufSBbaXNDdXJyaWVkXSBTcGVjaWZ5IGNvbXBvc2luZyBmb3IgYSBjdXJyaWVkIGZ1bmN0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tcG9zZWQgYXJndW1lbnRzLlxuICovXG5mdW5jdGlvbiBjb21wb3NlQXJnc1JpZ2h0KGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpIHtcbiAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgaG9sZGVyc0luZGV4ID0gLTEsXG4gICAgICBob2xkZXJzTGVuZ3RoID0gaG9sZGVycy5sZW5ndGgsXG4gICAgICByaWdodEluZGV4ID0gLTEsXG4gICAgICByaWdodExlbmd0aCA9IHBhcnRpYWxzLmxlbmd0aCxcbiAgICAgIHJhbmdlTGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3NMZW5ndGggLSBob2xkZXJzTGVuZ3RoLCAwKSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHJhbmdlTGVuZ3RoICsgcmlnaHRMZW5ndGgpLFxuICAgICAgaXNVbmN1cnJpZWQgPSAhaXNDdXJyaWVkO1xuXG4gIHdoaWxlICgrK2FyZ3NJbmRleCA8IHJhbmdlTGVuZ3RoKSB7XG4gICAgcmVzdWx0W2FyZ3NJbmRleF0gPSBhcmdzW2FyZ3NJbmRleF07XG4gIH1cbiAgdmFyIG9mZnNldCA9IGFyZ3NJbmRleDtcbiAgd2hpbGUgKCsrcmlnaHRJbmRleCA8IHJpZ2h0TGVuZ3RoKSB7XG4gICAgcmVzdWx0W29mZnNldCArIHJpZ2h0SW5kZXhdID0gcGFydGlhbHNbcmlnaHRJbmRleF07XG4gIH1cbiAgd2hpbGUgKCsraG9sZGVyc0luZGV4IDwgaG9sZGVyc0xlbmd0aCkge1xuICAgIGlmIChpc1VuY3VycmllZCB8fCBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoKSB7XG4gICAgICByZXN1bHRbb2Zmc2V0ICsgaG9sZGVyc1tob2xkZXJzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBvc2VBcmdzUmlnaHQ7XG4iLCJ2YXIgaXNMYXppYWJsZSA9IHJlcXVpcmUoJy4vX2lzTGF6aWFibGUnKSxcbiAgICBzZXREYXRhID0gcmVxdWlyZSgnLi9fc2V0RGF0YScpLFxuICAgIHNldFdyYXBUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFdyYXBUb1N0cmluZycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICBXUkFQX0NVUlJZX0JPVU5EX0ZMQUcgPSA0LFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMixcbiAgICBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA9IDY0O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBjb250aW51ZSBjdXJyeWluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB3cmFwRnVuYyBUaGUgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBgZnVuY2Agd3JhcHBlci5cbiAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHZhbHVlLlxuICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkIHRvXG4gKiAgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJlY3VycnkoZnVuYywgYml0bWFzaywgd3JhcEZ1bmMsIHBsYWNlaG9sZGVyLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5KSB7XG4gIHZhciBpc0N1cnJ5ID0gYml0bWFzayAmIFdSQVBfQ1VSUllfRkxBRyxcbiAgICAgIG5ld0hvbGRlcnMgPSBpc0N1cnJ5ID8gaG9sZGVycyA6IHVuZGVmaW5lZCxcbiAgICAgIG5ld0hvbGRlcnNSaWdodCA9IGlzQ3VycnkgPyB1bmRlZmluZWQgOiBob2xkZXJzLFxuICAgICAgbmV3UGFydGlhbHMgPSBpc0N1cnJ5ID8gcGFydGlhbHMgOiB1bmRlZmluZWQsXG4gICAgICBuZXdQYXJ0aWFsc1JpZ2h0ID0gaXNDdXJyeSA/IHVuZGVmaW5lZCA6IHBhcnRpYWxzO1xuXG4gIGJpdG1hc2sgfD0gKGlzQ3VycnkgPyBXUkFQX1BBUlRJQUxfRkxBRyA6IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKTtcbiAgYml0bWFzayAmPSB+KGlzQ3VycnkgPyBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA6IFdSQVBfUEFSVElBTF9GTEFHKTtcblxuICBpZiAoIShiaXRtYXNrICYgV1JBUF9DVVJSWV9CT1VORF9GTEFHKSkge1xuICAgIGJpdG1hc2sgJj0gfihXUkFQX0JJTkRfRkxBRyB8IFdSQVBfQklORF9LRVlfRkxBRyk7XG4gIH1cbiAgdmFyIG5ld0RhdGEgPSBbXG4gICAgZnVuYywgYml0bWFzaywgdGhpc0FyZywgbmV3UGFydGlhbHMsIG5ld0hvbGRlcnMsIG5ld1BhcnRpYWxzUmlnaHQsXG4gICAgbmV3SG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHlcbiAgXTtcblxuICB2YXIgcmVzdWx0ID0gd3JhcEZ1bmMuYXBwbHkodW5kZWZpbmVkLCBuZXdEYXRhKTtcbiAgaWYgKGlzTGF6aWFibGUoZnVuYykpIHtcbiAgICBzZXREYXRhKHJlc3VsdCwgbmV3RGF0YSk7XG4gIH1cbiAgcmVzdWx0LnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7XG4gIHJldHVybiBzZXRXcmFwVG9TdHJpbmcocmVzdWx0LCBmdW5jLCBiaXRtYXNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSZWN1cnJ5O1xuIiwidmFyIG1ldGFNYXAgPSByZXF1aXJlKCcuL19tZXRhTWFwJyksXG4gICAgbm9vcCA9IHJlcXVpcmUoJy4vbm9vcCcpO1xuXG4vKipcbiAqIEdldHMgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAqL1xudmFyIGdldERhdGEgPSAhbWV0YU1hcCA/IG5vb3AgOiBmdW5jdGlvbihmdW5jKSB7XG4gIHJldHVybiBtZXRhTWFwLmdldChmdW5jKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RGF0YTtcbiIsInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGJhc2VMb2Rhc2ggPSByZXF1aXJlKCcuL19iYXNlTG9kYXNoJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgY29uc3RydWN0b3IgZm9yIGNyZWF0aW5nIGBsb2Rhc2hgIHdyYXBwZXIgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoYWluQWxsXSBFbmFibGUgZXhwbGljaXQgbWV0aG9kIGNoYWluIHNlcXVlbmNlcy5cbiAqL1xuZnVuY3Rpb24gTG9kYXNoV3JhcHBlcih2YWx1ZSwgY2hhaW5BbGwpIHtcbiAgdGhpcy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICB0aGlzLl9fYWN0aW9uc19fID0gW107XG4gIHRoaXMuX19jaGFpbl9fID0gISFjaGFpbkFsbDtcbiAgdGhpcy5fX2luZGV4X18gPSAwO1xuICB0aGlzLl9fdmFsdWVzX18gPSB1bmRlZmluZWQ7XG59XG5cbkxvZGFzaFdyYXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7XG5Mb2Rhc2hXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvZGFzaFdyYXBwZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTG9kYXNoV3JhcHBlcjtcbiIsIi8qKlxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlBcnJheTtcbiIsInZhciBiYXNlU2V0RGF0YSA9IHJlcXVpcmUoJy4vX2Jhc2VTZXREYXRhJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAqXG4gKiAqKk5vdGU6KiogSWYgdGhpcyBmdW5jdGlvbiBiZWNvbWVzIGhvdCwgaS5lLiBpcyBpbnZva2VkIGEgbG90IGluIGEgc2hvcnRcbiAqIHBlcmlvZCBvZiB0aW1lLCBpdCB3aWxsIHRyaXAgaXRzIGJyZWFrZXIgYW5kIHRyYW5zaXRpb24gdG8gYW4gaWRlbnRpdHlcbiAqIGZ1bmN0aW9uIHRvIGF2b2lkIGdhcmJhZ2UgY29sbGVjdGlvbiBwYXVzZXMgaW4gVjguIFNlZVxuICogW1Y4IGlzc3VlIDIwNzBdKGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTIwNzApXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0RGF0YSA9IHNob3J0T3V0KGJhc2VTZXREYXRhKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXREYXRhO1xuIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3J0T3V0O1xuIiwidmFyIGdldFdyYXBEZXRhaWxzID0gcmVxdWlyZSgnLi9fZ2V0V3JhcERldGFpbHMnKSxcbiAgICBpbnNlcnRXcmFwRGV0YWlscyA9IHJlcXVpcmUoJy4vX2luc2VydFdyYXBEZXRhaWxzJyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpLFxuICAgIHVwZGF0ZVdyYXBEZXRhaWxzID0gcmVxdWlyZSgnLi9fdXBkYXRlV3JhcERldGFpbHMnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgd3JhcHBlcmAgdG8gbWltaWMgdGhlIHNvdXJjZSBvZiBgcmVmZXJlbmNlYFxuICogd2l0aCB3cmFwcGVyIGRldGFpbHMgaW4gYSBjb21tZW50IGF0IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSBib2R5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB3cmFwcGVyIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWZlcmVuY2UgVGhlIHJlZmVyZW5jZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYHdyYXBwZXJgLlxuICovXG5mdW5jdGlvbiBzZXRXcmFwVG9TdHJpbmcod3JhcHBlciwgcmVmZXJlbmNlLCBiaXRtYXNrKSB7XG4gIHZhciBzb3VyY2UgPSAocmVmZXJlbmNlICsgJycpO1xuICByZXR1cm4gc2V0VG9TdHJpbmcod3JhcHBlciwgaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLCB1cGRhdGVXcmFwRGV0YWlscyhnZXRXcmFwRGV0YWlscyhzb3VyY2UpLCBiaXRtYXNrKSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFdyYXBUb1N0cmluZztcbiIsInZhciBiYXNlU2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlU2V0VG9TdHJpbmcnKSxcbiAgICBzaG9ydE91dCA9IHJlcXVpcmUoJy4vX3Nob3J0T3V0Jyk7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9TdHJpbmc7XG4iLCIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNaV0ogPSAnXFxcXHUyMDBkJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHN0cmluZ3Mgd2l0aCBbemVyby13aWR0aCBqb2luZXJzIG9yIGNvZGUgcG9pbnRzIGZyb20gdGhlIGFzdHJhbCBwbGFuZXNdKGh0dHA6Ly9lZXYuZWUvYmxvZy8yMDE1LzA5LzEyL2RhcmstY29ybmVycy1vZi11bmljb2RlLykuICovXG52YXIgcmVIYXNVbmljb2RlID0gUmVnRXhwKCdbJyArIHJzWldKICsgcnNBc3RyYWxSYW5nZSAgKyByc0NvbWJvUmFuZ2UgKyByc1ZhclJhbmdlICsgJ10nKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHN0cmluZ2AgY29udGFpbnMgVW5pY29kZSBzeW1ib2xzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhIHN5bWJvbCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNVbmljb2RlKHN0cmluZykge1xuICByZXR1cm4gcmVIYXNVbmljb2RlLnRlc3Qoc3RyaW5nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNVbmljb2RlO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9heGlvcycpOyIsInZhciBhcnJheUZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5RmlsdGVyJyksXG4gICAgYmFzZUZpbHRlciA9IHJlcXVpcmUoJy4vX2Jhc2VGaWx0ZXInKSxcbiAgICBiYXNlSXRlcmF0ZWUgPSByZXF1aXJlKCcuL19iYXNlSXRlcmF0ZWUnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAsIHJldHVybmluZyBhbiBhcnJheSBvZiBhbGwgZWxlbWVudHNcbiAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8ucmVtb3ZlYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKiBAc2VlIF8ucmVqZWN0XG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfVxuICogXTtcbiAqXG4gKiBfLmZpbHRlcih1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmlsdGVyKHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maWx0ZXIodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbHRlcih1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICpcbiAqIC8vIENvbWJpbmluZyBzZXZlcmFsIHByZWRpY2F0ZXMgdXNpbmcgYF8ub3ZlckV2ZXJ5YCBvciBgXy5vdmVyU29tZWAuXG4gKiBfLmZpbHRlcih1c2VycywgXy5vdmVyU29tZShbeyAnYWdlJzogMzYgfSwgWydhZ2UnLCA0MF1dKSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnLCAnYmFybmV5J11cbiAqL1xuZnVuY3Rpb24gZmlsdGVyKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUZpbHRlciA6IGJhc2VGaWx0ZXI7XG4gIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmaWx0ZXI7XG4iLCJ2YXIgYmFzZUluZGV4T2YgPSByZXF1aXJlKCcuL19iYXNlSW5kZXhPZicpLFxuICAgIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vdG9JbnRlZ2VyJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBgdmFsdWVgIGlzIGZvdW5kIGluIGBhcnJheWBcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIElmIGBmcm9tSW5kZXhgIGlzIG5lZ2F0aXZlLCBpdCdzIHVzZWQgYXMgdGhlXG4gKiBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmluZGV4T2YoWzEsIDIsIDEsIDJdLCAyKTtcbiAqIC8vID0+IDFcbiAqXG4gKiAvLyBTZWFyY2ggZnJvbSB0aGUgYGZyb21JbmRleGAuXG4gKiBfLmluZGV4T2YoWzEsIDIsIDEsIDJdLCAyLCAyKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHZhciBpbmRleCA9IGZyb21JbmRleCA9PSBudWxsID8gMCA6IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgaW5kZXggPSBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApO1xuICB9XG4gIHJldHVybiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGluZGV4KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbmRleE9mO1xuIiwidmFyIGJhc2VLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUtleXMnKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBlbXB0eSBvYmplY3QsIGNvbGxlY3Rpb24sIG1hcCwgb3Igc2V0LlxuICpcbiAqIE9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIG5vIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZFxuICogcHJvcGVydGllcy5cbiAqXG4gKiBBcnJheS1saWtlIHZhbHVlcyBzdWNoIGFzIGBhcmd1bWVudHNgIG9iamVjdHMsIGFycmF5cywgYnVmZmVycywgc3RyaW5ncywgb3JcbiAqIGpRdWVyeS1saWtlIGNvbGxlY3Rpb25zIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBsZW5ndGhgIG9mIGAwYC5cbiAqIFNpbWlsYXJseSwgbWFwcyBhbmQgc2V0cyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgc2l6ZWAgb2YgYDBgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGVtcHR5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNFbXB0eShudWxsKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkodHJ1ZSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KDEpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eShbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzRW1wdHkoeyAnYSc6IDEgfSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJlxuICAgICAgKGlzQXJyYXkodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUuc3BsaWNlID09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgaXNCdWZmZXIodmFsdWUpIHx8IGlzVHlwZWRBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgIHJldHVybiAhdmFsdWUubGVuZ3RoO1xuICB9XG4gIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpO1xuICBpZiAodGFnID09IG1hcFRhZyB8fCB0YWcgPT0gc2V0VGFnKSB7XG4gICAgcmV0dXJuICF2YWx1ZS5zaXplO1xuICB9XG4gIGlmIChpc1Byb3RvdHlwZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gIWJhc2VLZXlzKHZhbHVlKS5sZW5ndGg7XG4gIH1cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNFbXB0eTtcbiIsIiFmdW5jdGlvbihyLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOihyPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6cnx8c2VsZikuZGF5anNfcGx1Z2luX3JlbGF0aXZlVGltZT1lKCl9KHRoaXMsKGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIGZ1bmN0aW9uKHIsZSx0KXtyPXJ8fHt9O3ZhciBuPWUucHJvdG90eXBlLG89e2Z1dHVyZTpcImluICVzXCIscGFzdDpcIiVzIGFnb1wiLHM6XCJhIGZldyBzZWNvbmRzXCIsbTpcImEgbWludXRlXCIsbW06XCIlZCBtaW51dGVzXCIsaDpcImFuIGhvdXJcIixoaDpcIiVkIGhvdXJzXCIsZDpcImEgZGF5XCIsZGQ6XCIlZCBkYXlzXCIsTTpcImEgbW9udGhcIixNTTpcIiVkIG1vbnRoc1wiLHk6XCJhIHllYXJcIix5eTpcIiVkIHllYXJzXCJ9O2Z1bmN0aW9uIGkocixlLHQsbyl7cmV0dXJuIG4uZnJvbVRvQmFzZShyLGUsdCxvKX10LmVuLnJlbGF0aXZlVGltZT1vLG4uZnJvbVRvQmFzZT1mdW5jdGlvbihlLG4saSxkLHUpe2Zvcih2YXIgZixhLHMsbD1pLiRsb2NhbGUoKS5yZWxhdGl2ZVRpbWV8fG8saD1yLnRocmVzaG9sZHN8fFt7bDpcInNcIixyOjQ0LGQ6XCJzZWNvbmRcIn0se2w6XCJtXCIscjo4OX0se2w6XCJtbVwiLHI6NDQsZDpcIm1pbnV0ZVwifSx7bDpcImhcIixyOjg5fSx7bDpcImhoXCIscjoyMSxkOlwiaG91clwifSx7bDpcImRcIixyOjM1fSx7bDpcImRkXCIscjoyNSxkOlwiZGF5XCJ9LHtsOlwiTVwiLHI6NDV9LHtsOlwiTU1cIixyOjEwLGQ6XCJtb250aFwifSx7bDpcInlcIixyOjE3fSx7bDpcInl5XCIsZDpcInllYXJcIn1dLG09aC5sZW5ndGgsYz0wO2M8bTtjKz0xKXt2YXIgeT1oW2NdO3kuZCYmKGY9ZD90KGUpLmRpZmYoaSx5LmQsITApOmkuZGlmZihlLHkuZCwhMCkpO3ZhciBwPShyLnJvdW5kaW5nfHxNYXRoLnJvdW5kKShNYXRoLmFicyhmKSk7aWYocz1mPjAscDw9eS5yfHwheS5yKXtwPD0xJiZjPjAmJih5PWhbYy0xXSk7dmFyIHY9bFt5LmxdO3UmJihwPXUoXCJcIitwKSksYT1cInN0cmluZ1wiPT10eXBlb2Ygdj92LnJlcGxhY2UoXCIlZFwiLHApOnYocCxuLHkubCxzKTticmVha319aWYobilyZXR1cm4gYTt2YXIgTT1zP2wuZnV0dXJlOmwucGFzdDtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBNP00oYSk6TS5yZXBsYWNlKFwiJXNcIixhKX0sbi50bz1mdW5jdGlvbihyLGUpe3JldHVybiBpKHIsZSx0aGlzLCEwKX0sbi5mcm9tPWZ1bmN0aW9uKHIsZSl7cmV0dXJuIGkocixlLHRoaXMpfTt2YXIgZD1mdW5jdGlvbihyKXtyZXR1cm4gci4kdT90LnV0YygpOnQoKX07bi50b05vdz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy50byhkKHRoaXMpLHIpfSxuLmZyb21Ob3c9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuZnJvbShkKHRoaXMpLHIpfX19KSk7IiwiIWZ1bmN0aW9uKHQsaSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9aSgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoaSk6KHQ9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczp0fHxzZWxmKS5kYXlqc19wbHVnaW5fdXRjPWkoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgdD1cIm1pbnV0ZVwiLGk9L1srLV1cXGRcXGQoPzo6P1xcZFxcZCk/L2csZT0vKFsrLV18XFxkXFxkKS9nO3JldHVybiBmdW5jdGlvbihzLGYsbil7dmFyIHU9Zi5wcm90b3R5cGU7bi51dGM9ZnVuY3Rpb24odCl7dmFyIGk9e2RhdGU6dCx1dGM6ITAsYXJnczphcmd1bWVudHN9O3JldHVybiBuZXcgZihpKX0sdS51dGM9ZnVuY3Rpb24oaSl7dmFyIGU9bih0aGlzLnRvRGF0ZSgpLHtsb2NhbGU6dGhpcy4kTCx1dGM6ITB9KTtyZXR1cm4gaT9lLmFkZCh0aGlzLnV0Y09mZnNldCgpLHQpOmV9LHUubG9jYWw9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnRvRGF0ZSgpLHtsb2NhbGU6dGhpcy4kTCx1dGM6ITF9KX07dmFyIHI9dS5wYXJzZTt1LnBhcnNlPWZ1bmN0aW9uKHQpe3QudXRjJiYodGhpcy4kdT0hMCksdGhpcy4kdXRpbHMoKS51KHQuJG9mZnNldCl8fCh0aGlzLiRvZmZzZXQ9dC4kb2Zmc2V0KSxyLmNhbGwodGhpcyx0KX07dmFyIG89dS5pbml0O3UuaW5pdD1mdW5jdGlvbigpe2lmKHRoaXMuJHUpe3ZhciB0PXRoaXMuJGQ7dGhpcy4keT10LmdldFVUQ0Z1bGxZZWFyKCksdGhpcy4kTT10LmdldFVUQ01vbnRoKCksdGhpcy4kRD10LmdldFVUQ0RhdGUoKSx0aGlzLiRXPXQuZ2V0VVRDRGF5KCksdGhpcy4kSD10LmdldFVUQ0hvdXJzKCksdGhpcy4kbT10LmdldFVUQ01pbnV0ZXMoKSx0aGlzLiRzPXQuZ2V0VVRDU2Vjb25kcygpLHRoaXMuJG1zPXQuZ2V0VVRDTWlsbGlzZWNvbmRzKCl9ZWxzZSBvLmNhbGwodGhpcyl9O3ZhciBhPXUudXRjT2Zmc2V0O3UudXRjT2Zmc2V0PWZ1bmN0aW9uKHMsZil7dmFyIG49dGhpcy4kdXRpbHMoKS51O2lmKG4ocykpcmV0dXJuIHRoaXMuJHU/MDpuKHRoaXMuJG9mZnNldCk/YS5jYWxsKHRoaXMpOnRoaXMuJG9mZnNldDtpZihcInN0cmluZ1wiPT10eXBlb2YgcyYmKHM9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9XCJcIik7dmFyIHM9dC5tYXRjaChpKTtpZighcylyZXR1cm4gbnVsbDt2YXIgZj0oXCJcIitzWzBdKS5tYXRjaChlKXx8W1wiLVwiLDAsMF0sbj1mWzBdLHU9NjAqK2ZbMV0rICtmWzJdO3JldHVybiAwPT09dT8wOlwiK1wiPT09bj91Oi11fShzKSxudWxsPT09cykpcmV0dXJuIHRoaXM7dmFyIHU9TWF0aC5hYnMocyk8PTE2PzYwKnM6cztpZigwPT09dSlyZXR1cm4gdGhpcy51dGMoZik7dmFyIHI9dGhpcy5jbG9uZSgpO2lmKGYpcmV0dXJuIHIuJG9mZnNldD11LHIuJHU9ITEscjt2YXIgbz10aGlzLiR1P3RoaXMudG9EYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKTotMSp0aGlzLnV0Y09mZnNldCgpO3JldHVybihyPXRoaXMubG9jYWwoKS5hZGQodStvLHQpKS4kb2Zmc2V0PXUsci4keC4kbG9jYWxPZmZzZXQ9byxyfTt2YXIgaD11LmZvcm1hdDt1LmZvcm1hdD1mdW5jdGlvbih0KXt2YXIgaT10fHwodGhpcy4kdT9cIllZWVktTU0tRERUSEg6bW06c3NbWl1cIjpcIlwiKTtyZXR1cm4gaC5jYWxsKHRoaXMsaSl9LHUudmFsdWVPZj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuJHV0aWxzKCkudSh0aGlzLiRvZmZzZXQpPzA6dGhpcy4kb2Zmc2V0Kyh0aGlzLiR4LiRsb2NhbE9mZnNldHx8dGhpcy4kZC5nZXRUaW1lem9uZU9mZnNldCgpKTtyZXR1cm4gdGhpcy4kZC52YWx1ZU9mKCktNmU0KnR9LHUuaXNVVEM9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuJHV9LHUudG9JU09TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpfSx1LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9EYXRlKCkudG9VVENTdHJpbmcoKX07dmFyIGw9dS50b0RhdGU7dS50b0RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuXCJzXCI9PT10JiZ0aGlzLiRvZmZzZXQ/bih0aGlzLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3M6U1NTXCIpKS50b0RhdGUoKTpsLmNhbGwodGhpcyl9O3ZhciBjPXUuZGlmZjt1LmRpZmY9ZnVuY3Rpb24odCxpLGUpe2lmKHQmJnRoaXMuJHU9PT10LiR1KXJldHVybiBjLmNhbGwodGhpcyx0LGksZSk7dmFyIHM9dGhpcy5sb2NhbCgpLGY9bih0KS5sb2NhbCgpO3JldHVybiBjLmNhbGwocyxmLGksZSl9fX0pKTsiLCJ2YXIgY3JlYXRlQ2FzZUZpcnN0ID0gcmVxdWlyZSgnLi9fY3JlYXRlQ2FzZUZpcnN0Jyk7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBgc3RyaW5nYCB0byB1cHBlciBjYXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnVwcGVyRmlyc3QoJ2ZyZWQnKTtcbiAqIC8vID0+ICdGcmVkJ1xuICpcbiAqIF8udXBwZXJGaXJzdCgnRlJFRCcpO1xuICogLy8gPT4gJ0ZSRUQnXG4gKi9cbnZhciB1cHBlckZpcnN0ID0gY3JlYXRlQ2FzZUZpcnN0KCd0b1VwcGVyQ2FzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVwcGVyRmlyc3Q7XG4iLCJ2YXIgY3JlYXRlUmFuZ2UgPSByZXF1aXJlKCcuL19jcmVhdGVSYW5nZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyAocG9zaXRpdmUgYW5kL29yIG5lZ2F0aXZlKSBwcm9ncmVzc2luZyBmcm9tXG4gKiBgc3RhcnRgIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuIEEgc3RlcCBvZiBgLTFgIGlzIHVzZWQgaWYgYSBuZWdhdGl2ZVxuICogYHN0YXJ0YCBpcyBzcGVjaWZpZWQgd2l0aG91dCBhbiBgZW5kYCBvciBgc3RlcGAuIElmIGBlbmRgIGlzIG5vdCBzcGVjaWZpZWQsXG4gKiBpdCdzIHNldCB0byBgc3RhcnRgIHdpdGggYHN0YXJ0YCB0aGVuIHNldCB0byBgMGAuXG4gKlxuICogKipOb3RlOioqIEphdmFTY3JpcHQgZm9sbG93cyB0aGUgSUVFRS03NTQgc3RhbmRhcmQgZm9yIHJlc29sdmluZ1xuICogZmxvYXRpbmctcG9pbnQgdmFsdWVzIHdoaWNoIGNhbiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0xXSBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy5cbiAqIEBzZWUgXy5pblJhbmdlLCBfLnJhbmdlUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogXy5yYW5nZSg0KTtcbiAqIC8vID0+IFswLCAxLCAyLCAzXVxuICpcbiAqIF8ucmFuZ2UoLTQpO1xuICogLy8gPT4gWzAsIC0xLCAtMiwgLTNdXG4gKlxuICogXy5yYW5nZSgxLCA1KTtcbiAqIC8vID0+IFsxLCAyLCAzLCA0XVxuICpcbiAqIF8ucmFuZ2UoMCwgMjAsIDUpO1xuICogLy8gPT4gWzAsIDUsIDEwLCAxNV1cbiAqXG4gKiBfLnJhbmdlKDAsIC00LCAtMSk7XG4gKiAvLyA9PiBbMCwgLTEsIC0yLCAtM11cbiAqXG4gKiBfLnJhbmdlKDEsIDQsIDApO1xuICogLy8gPT4gWzEsIDEsIDFdXG4gKlxuICogXy5yYW5nZSgwKTtcbiAqIC8vID0+IFtdXG4gKi9cbnZhciByYW5nZSA9IGNyZWF0ZVJhbmdlKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmFuZ2U7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBBeGlvcyA9IHJlcXVpcmUoJy4vY29yZS9BeGlvcycpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9jb3JlL21lcmdlQ29uZmlnJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIHZhciBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICB2YXIgaW5zdGFuY2UgPSBiaW5kKEF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIEF4aW9zLnByb3RvdHlwZSwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxudmFyIGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsZWRFcnJvciA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbGVkRXJyb3InKTtcbmF4aW9zLkNhbmNlbFRva2VuID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsVG9rZW4nKTtcbmF4aW9zLmlzQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvaXNDYW5jZWwnKTtcbmF4aW9zLlZFUlNJT04gPSByZXF1aXJlKCcuL2Vudi9kYXRhJykudmVyc2lvbjtcbmF4aW9zLnRvRm9ybURhdGEgPSByZXF1aXJlKCcuL2hlbHBlcnMvdG9Gb3JtRGF0YScpO1xuXG4vLyBFeHBvc2UgQXhpb3NFcnJvciBjbGFzc1xuYXhpb3MuQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2xpYi9jb3JlL0F4aW9zRXJyb3InKTtcblxuLy8gYWxpYXMgZm9yIENhbmNlbGVkRXJyb3IgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmF4aW9zLkNhbmNlbCA9IGF4aW9zLkNhbmNlbGVkRXJyb3I7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5heGlvcy5zcHJlYWQgPSByZXF1aXJlKCcuL2hlbHBlcnMvc3ByZWFkJyk7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4vaGVscGVycy9pc0F4aW9zRXJyb3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcblxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gYXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBJbnRlcmNlcHRvck1hbmFnZXIgPSByZXF1aXJlKCcuL0ludGVyY2VwdG9yTWFuYWdlcicpO1xudmFyIGRpc3BhdGNoUmVxdWVzdCA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hSZXF1ZXN0Jyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL21lcmdlQ29uZmlnJyk7XG52YXIgYnVpbGRGdWxsUGF0aCA9IHJlcXVpcmUoJy4vYnVpbGRGdWxsUGF0aCcpO1xudmFyIHZhbGlkYXRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvdmFsaWRhdG9yJyk7XG5cbnZhciB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBeGlvcyhpbnN0YW5jZUNvbmZpZykge1xuICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gIH07XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gKi9cbkF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gIGlmICh0eXBlb2YgY29uZmlnT3JVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgfVxuXG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgaWYgKGNvbmZpZy5tZXRob2QpIHtcbiAgICBjb25maWcubWV0aG9kID0gY29uZmlnLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdHMubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IHRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnLm1ldGhvZCA9ICdnZXQnO1xuICB9XG5cbiAgdmFyIHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWw7XG5cbiAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgIH0sIGZhbHNlKTtcbiAgfVxuXG4gIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgdmFyIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHZhciBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdmFyIHByb21pc2U7XG5cbiAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICB2YXIgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LCB1bmRlZmluZWRdO1xuXG4gICAgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICBjaGFpbiA9IGNoYWluLmNvbmNhdChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuXG4gICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuICAgIHdoaWxlIChjaGFpbi5sZW5ndGgpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW4uc2hpZnQoKSwgY2hhaW4uc2hpZnQoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuXG4gIHZhciBuZXdDb25maWcgPSBjb25maWc7XG4gIHdoaWxlIChyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGgpIHtcbiAgICB2YXIgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpO1xuICAgIHZhciBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB0cnkge1xuICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25SZWplY3RlZChlcnJvcik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QobmV3Q29uZmlnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICB9XG5cbiAgd2hpbGUgKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGgpIHtcbiAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cbkF4aW9zLnByb3RvdHlwZS5nZXRVcmkgPSBmdW5jdGlvbiBnZXRVcmkoY29uZmlnKSB7XG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gIHZhciBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbn07XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cblxuICBmdW5jdGlvbiBnZW5lcmF0ZUhUVFBNZXRob2QoaXNGb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGh0dHBNZXRob2QodXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiBpc0Zvcm0gPyB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICB9IDoge30sXG4gICAgICAgIHVybDogdXJsLFxuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBJbnRlcmNlcHRvck1hbmFnZXIoKSB7XG4gIHRoaXMuaGFuZGxlcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICBmdWxmaWxsZWQ6IGZ1bGZpbGxlZCxcbiAgICByZWplY3RlZDogcmVqZWN0ZWQsXG4gICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgfSk7XG4gIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5lamVjdCA9IGZ1bmN0aW9uIGVqZWN0KGlkKSB7XG4gIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICBmbihoKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciB0cmFuc2Zvcm1EYXRhID0gcmVxdWlyZSgnLi90cmFuc2Zvcm1EYXRhJyk7XG52YXIgaXNDYW5jZWwgPSByZXF1aXJlKCcuLi9jYW5jZWwvaXNDYW5jZWwnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzJyk7XG52YXIgQ2FuY2VsZWRFcnJvciA9IHJlcXVpcmUoJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yJyk7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5zaWduYWwgJiYgY29uZmlnLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IENhbmNlbGVkRXJyb3IoKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAvLyBFbnN1cmUgaGVhZGVycyBleGlzdFxuICBjb25maWcuaGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzIHx8IHt9O1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZy5kYXRhLFxuICAgIGNvbmZpZy5oZWFkZXJzLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gIGNvbmZpZy5oZWFkZXJzID0gdXRpbHMubWVyZ2UoXG4gICAgY29uZmlnLmhlYWRlcnMuY29tbW9uIHx8IHt9LFxuICAgIGNvbmZpZy5oZWFkZXJzW2NvbmZpZy5tZXRob2RdIHx8IHt9LFxuICAgIGNvbmZpZy5oZWFkZXJzXG4gICk7XG5cbiAgdXRpbHMuZm9yRWFjaChcbiAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICBmdW5jdGlvbiBjbGVhbkhlYWRlckNvbmZpZyhtZXRob2QpIHtcbiAgICAgIGRlbGV0ZSBjb25maWcuaGVhZGVyc1ttZXRob2RdO1xuICAgIH1cbiAgKTtcblxuICB2YXIgYWRhcHRlciA9IGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXI7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICBjb25maWcsXG4gICAgICByZXNwb25zZS5kYXRhLFxuICAgICAgcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IGhlYWRlcnMgVGhlIGhlYWRlcnMgZm9yIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhLCBoZWFkZXJzLCBmbnMpIHtcbiAgdmFyIGNvbnRleHQgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbnRleHQsIGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgbm9ybWFsaXplZE5hbWUpIHtcbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbiBwcm9jZXNzSGVhZGVyKHZhbHVlLCBuYW1lKSB7XG4gICAgaWYgKG5hbWUgIT09IG5vcm1hbGl6ZWROYW1lICYmIG5hbWUudG9VcHBlckNhc2UoKSA9PT0gbm9ybWFsaXplZE5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgaGVhZGVyc1tub3JtYWxpemVkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW25hbWVdO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKVxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFVzZSBPYmplY3QgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIER1ZSB0byB2YXJpb3VzIGJyb3dzZXIgYnVncywgc29tZXRpbWVzIHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIGV2ZW5cbiAqIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgdHlwZWQgYXJyYXlzLlxuICpcbiAqIE5vdGU6XG4gKlxuICogICAtIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgIGluc3RhbmNlcyxcbiAqICAgICBTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOC5cbiAqXG4gKiAgIC0gQ2hyb21lIDktMTAgaXMgbWlzc2luZyB0aGUgYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbi5cbiAqXG4gKiAgIC0gSUUxMCBoYXMgYSBicm9rZW4gYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFycmF5cyBvZlxuICogICAgIGluY29ycmVjdCBsZW5ndGggaW4gc29tZSBzaXR1YXRpb25zLlxuXG4gKiBXZSBkZXRlY3QgdGhlc2UgYnVnZ3kgYnJvd3NlcnMgYW5kIHNldCBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgIHRvIGBmYWxzZWAgc28gdGhleVxuICogZ2V0IHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHNsb3dlciBidXQgYmVoYXZlcyBjb3JyZWN0bHkuXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlQgIT09IHVuZGVmaW5lZFxuICA/IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gIDogdHlwZWRBcnJheVN1cHBvcnQoKVxuXG4vKlxuICogRXhwb3J0IGtNYXhMZW5ndGggYWZ0ZXIgdHlwZWQgYXJyYXkgc3VwcG9ydCBpcyBkZXRlcm1pbmVkLlxuICovXG5leHBvcnRzLmtNYXhMZW5ndGggPSBrTWF4TGVuZ3RoKClcblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGFyci5fX3Byb3RvX18gPSB7X19wcm90b19fOiBVaW50OEFycmF5LnByb3RvdHlwZSwgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9fVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyICYmIC8vIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkXG4gICAgICAgIHR5cGVvZiBhcnIuc3ViYXJyYXkgPT09ICdmdW5jdGlvbicgJiYgLy8gY2hyb21lIDktMTAgbGFjayBgc3ViYXJyYXlgXG4gICAgICAgIGFyci5zdWJhcnJheSgxLCAxKS5ieXRlTGVuZ3RoID09PSAwIC8vIGllMTAgaGFzIGJyb2tlbiBgc3ViYXJyYXlgXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBrTWF4TGVuZ3RoICgpIHtcbiAgcmV0dXJuIEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gICAgPyAweDdmZmZmZmZmXG4gICAgOiAweDNmZmZmZmZmXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAodGhhdCwgbGVuZ3RoKSB7XG4gIGlmIChrTWF4TGVuZ3RoKCkgPCBsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgnKVxuICB9XG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIGlmICh0aGF0ID09PSBudWxsKSB7XG4gICAgICB0aGF0ID0gbmV3IEJ1ZmZlcihsZW5ndGgpXG4gICAgfVxuICAgIHRoYXQubGVuZ3RoID0gbGVuZ3RoXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiAhKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZSh0aGlzLCBhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20odGhpcywgYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG4vLyBUT0RPOiBMZWdhY3ksIG5vdCBuZWVkZWQgYW55bW9yZS4gUmVtb3ZlIGluIG5leHQgbWFqb3IgdmVyc2lvbi5cbkJ1ZmZlci5fYXVnbWVudCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgYXJyLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiBmcm9tICh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgcmV0dXJuIGZyb21PYmplY3QodGhhdCwgdmFsdWUpXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20obnVsbCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbiAgQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXlcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5zcGVjaWVzICYmXG4gICAgICBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdID09PSBCdWZmZXIpIHtcbiAgICAvLyBGaXggc3ViYXJyYXkoKSBpbiBFUzIwMTYuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC85N1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIsIFN5bWJvbC5zcGVjaWVzLCB7XG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jICh0aGF0LCBzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldHRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhudWxsLCBzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHRoYXQsIHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpIHtcbiAgICAgIHRoYXRbaV0gPSAwXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAodGhhdCwgc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpXG4gIH1cblxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG5cbiAgdmFyIGFjdHVhbCA9IHRoYXQud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIHRoYXQgPSB0aGF0LnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKHRoYXQsIGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGF0W2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKHRoYXQsIGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgYXJyYXkuYnl0ZUxlbmd0aCAvLyB0aGlzIHRocm93cyBpZiBgYXJyYXlgIGlzIG5vdCBhIHZhbGlkIEFycmF5QnVmZmVyXG5cbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ29mZnNldFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnbGVuZ3RoXFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBhcnJheVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICB0aGF0ID0gZnJvbUFycmF5TGlrZSh0aGF0LCBhcnJheSlcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0ICh0aGF0LCBvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgdmFyIGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW4pXG5cbiAgICBpZiAodGhhdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGF0XG4gICAgfVxuXG4gICAgb2JqLmNvcHkodGhhdCwgMCwgMCwgbGVuKVxuICAgIHJldHVybiB0aGF0XG4gIH1cblxuICBpZiAob2JqKSB7XG4gICAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIG9iai5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgfHwgJ2xlbmd0aCcgaW4gb2JqKSB7XG4gICAgICBpZiAodHlwZW9mIG9iai5sZW5ndGggIT09ICdudW1iZXInIHx8IGlzbmFuKG9iai5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgMClcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iailcbiAgICB9XG5cbiAgICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIGlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmouZGF0YSlcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuJylcbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IGtNYXhMZW5ndGgoKWAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBrTWF4TGVuZ3RoKCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsga01heExlbmd0aCgpLnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9XG4gICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAoQXJyYXlCdWZmZXIuaXNWaWV3KHN0cmluZykgfHwgc3RyaW5nIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmdcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcnNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhlIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgYW5kIGBpcy1idWZmZXJgIChpbiBTYWZhcmkgNS03KSB0byBkZXRlY3Rcbi8vIEJ1ZmZlciBpbnN0YW5jZXMuXG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoIHwgMFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkubWF0Y2goLy57Mn0vZykuam9pbignICcpXG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICB9XG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIHZhciB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICB2YXIgeSA9IGVuZCAtIHN0YXJ0XG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuXG4gIHZhciB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICB2YXIgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgIC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChpc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmXG4gICAgICAgIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFsgdmFsIF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIHZhciBpbmRleFNpemUgPSAxXG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIHZhciB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpXG4gIGlmIChkaXIpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICAvLyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0c1xuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAoc3RyTGVuICUgMiAhPT0gMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJylcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGxhdGluMVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoIHwgMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIC8vIGxlZ2FjeSB3cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aCkgLSByZW1vdmUgaW4gdjAuMTNcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgYnl0ZXNbaSArIDFdICogMjU2KVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWZcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAgIG5ld0J1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgdmFyIHNsaWNlTGVuID0gZW5kIC0gc3RhcnRcbiAgICBuZXdCdWYgPSBuZXcgQnVmZmVyKHNsaWNlTGVuLCB1bmRlZmluZWQpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGljZUxlbjsgKytpKSB7XG4gICAgICBuZXdCdWZbaV0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MTYgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgMik7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgJiAoMHhmZiA8PCAoOCAqIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpKSkpID4+PlxuICAgICAgKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkgKiA4XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MzIgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDQpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlID4+PiAobGl0dGxlRW5kaWFuID8gaSA6IDMgLSBpKSAqIDgpICYgMHhmZlxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuICB2YXIgaVxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIGlmIChsZW4gPCAxMDAwIHx8ICFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIGFzY2VuZGluZyBjb3B5IGZyb20gc3RhcnRcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IHV0ZjhUb0J5dGVzKG5ldyBCdWZmZXIodmFsLCBlbmNvZGluZykudG9TdHJpbmcoKSlcbiAgICB2YXIgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rXFwvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyaW5ndHJpbShzdHIpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHN0cmluZ3RyaW0gKHN0cikge1xuICBpZiAoc3RyLnRyaW0pIHJldHVybiBzdHIudHJpbSgpXG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXG59XG5cbmZ1bmN0aW9uIHRvSGV4IChuKSB7XG4gIGlmIChuIDwgMTYpIHJldHVybiAnMCcgKyBuLnRvU3RyaW5nKDE2KVxuICByZXR1cm4gbi50b1N0cmluZygxNilcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gaXNuYW4gKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSB2YWwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIHZhciBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwiLyohIGllZWU3NTQuIEJTRC0zLUNsYXVzZSBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi9cbmV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gKGUgKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gKG0gKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAoKHZhbHVlICogYykgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4vQXhpb3NFcnJvcicpO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIHZhciB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICAgICAgdmFyIGNvb2tpZSA9IFtdO1xuICAgICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICAgIGlmICh1dGlscy5pc051bWJlcihleHBpcmVzKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhwYXRoKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhkb21haW4pKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWN1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobmFtZSkge1xuICAgICAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoKSB7fSxcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLy8gSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbnZhciBpZ25vcmVEdXBsaWNhdGVPZiA9IFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhoZWFkZXJzKSB7XG4gIHZhciBwYXJzZWQgPSB7fTtcbiAgdmFyIGtleTtcbiAgdmFyIHZhbDtcbiAgdmFyIGk7XG5cbiAgaWYgKCFoZWFkZXJzKSB7IHJldHVybiBwYXJzZWQ7IH1cblxuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMuc3BsaXQoJ1xcbicpLCBmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKDAsIGkpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoaSArIDEpKTtcblxuICAgIGlmIChrZXkpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZi5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSAocGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSA6IFtdKS5jb25jYXQoW3ZhbF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3RcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHZhciBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgIHZhciB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXQncyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgICB9XG5cbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZVByb3RvY29sKHVybCkge1xuICB2YXIgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59O1xuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0cmljdFxubW9kdWxlLmV4cG9ydHMgPSBudWxsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2Vudi9kYXRhJykudmVyc2lvbjtcbnZhciBBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi4vY29yZS9BeGlvc0Vycm9yJyk7XG5cbnZhciB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaChmdW5jdGlvbih0eXBlLCBpKSB7XG4gIHZhbGlkYXRvcnNbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG52YXIgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb24gLSBkZXByZWNhdGVkIHZlcnNpb24gLyByZW1vdmVkIHNpbmNlIHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gbWVzc2FnZSAtIHNvbWUgbWVzc2FnZSB3aXRoIGFkZGl0aW9uYWwgaW5mb1xuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvcHQsIG9wdHMpIHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnLCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIHZhciBvcHQgPSBrZXlzW2ldO1xuICAgIHZhciB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICB2YXIgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTik7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhc3NlcnRPcHRpb25zOiBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzOiB2YWxpZGF0b3JzXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ2FuY2VsZWRFcnJvciA9IHJlcXVpcmUoJy4vQ2FuY2VsZWRFcnJvcicpO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIENhbmNlbFRva2VuKGV4ZWN1dG9yKSB7XG4gIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gIH1cblxuICB2YXIgcmVzb2x2ZVByb21pc2U7XG5cbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgdGhpcy5wcm9taXNlLnRoZW4oZnVuY3Rpb24oY2FuY2VsKSB7XG4gICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICB2YXIgaTtcbiAgICB2YXIgbCA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgIH1cbiAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgdGhpcy5wcm9taXNlLnRoZW4gPSBmdW5jdGlvbihvbmZ1bGZpbGxlZCkge1xuICAgIHZhciBfcmVzb2x2ZTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuXG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSk7XG4gICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbkNhbmNlbFRva2VuLnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkID0gZnVuY3Rpb24gdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgdGhyb3cgdGhpcy5yZWFzb247XG4gIH1cbn07XG5cbi8qKlxuICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gKi9cblxuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICB9XG59O1xuXG4vKipcbiAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAqL1xuXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICovXG5DYW5jZWxUb2tlbi5zb3VyY2UgPSBmdW5jdGlvbiBzb3VyY2UoKSB7XG4gIHZhciBjYW5jZWw7XG4gIHZhciB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgY2FuY2VsID0gYztcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdG9rZW46IHRva2VuLFxuICAgIGNhbmNlbDogY2FuY2VsXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbFRva2VuO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gdXRpbHMuaXNPYmplY3QocGF5bG9hZCkgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn07XG4iLCIvKiBnbG9iYWxzIF9fd2VicGFja19hbWRfb3B0aW9uc19fICovXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19hbWRfb3B0aW9uc19fO1xuIiwidmFyIGJhc2VFYWNoID0gcmVxdWlyZSgnLi9fYmFzZUVhY2gnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maWx0ZXJgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZUZpbHRlcihjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGaWx0ZXI7XG4iLCJ2YXIgYmFzZUZvck93biA9IHJlcXVpcmUoJy4vX2Jhc2VGb3JPd24nKSxcbiAgICBjcmVhdGVCYXNlRWFjaCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUJhc2VFYWNoJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yRWFjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyBgY29sbGVjdGlvbmAuXG4gKi9cbnZhciBiYXNlRWFjaCA9IGNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd24pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VFYWNoO1xuIiwidmFyIGJhc2VGb3IgPSByZXF1aXJlKCcuL19iYXNlRm9yJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvck93bmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3Iob2JqZWN0LCBpdGVyYXRlZSwga2V5cyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvck93bjtcbiIsInZhciBjcmVhdGVCYXNlRm9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQmFzZUZvcicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBiYXNlRm9yT3duYCB3aGljaCBpdGVyYXRlcyBvdmVyIGBvYmplY3RgXG4gKiBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGBrZXlzRnVuY2AgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xudmFyIGJhc2VGb3IgPSBjcmVhdGVCYXNlRm9yKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvcjtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIGtleXNGdW5jKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXG4gICAgICAgIHByb3BzID0ga2V5c0Z1bmMob2JqZWN0KSxcbiAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF07XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJhc2VGb3I7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1R5cGVkQXJyYXk7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuYXJ5O1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbm9kZVV0aWw7XG4iLCJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXM7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgYmFzZUVhY2hgIG9yIGBiYXNlRWFjaFJpZ2h0YCBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFYWNoKGVhY2hGdW5jLCBmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgfVxuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgIHJldHVybiBlYWNoRnVuYyhjb2xsZWN0aW9uLCBpdGVyYXRlZSk7XG4gICAgfVxuICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3QoY29sbGVjdGlvbik7XG5cbiAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2luZGV4XSwgaW5kZXgsIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJhc2VFYWNoO1xuIiwidmFyIGJhc2VNYXRjaGVzID0gcmVxdWlyZSgnLi9fYmFzZU1hdGNoZXMnKSxcbiAgICBiYXNlTWF0Y2hlc1Byb3BlcnR5ID0gcmVxdWlyZSgnLi9fYmFzZU1hdGNoZXNQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBwcm9wZXJ0eSA9IHJlcXVpcmUoJy4vcHJvcGVydHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pdGVyYXRlZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gW3ZhbHVlPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGFuIGl0ZXJhdGVlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBpdGVyYXRlZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUl0ZXJhdGVlKHZhbHVlKSB7XG4gIC8vIERvbid0IHN0b3JlIHRoZSBgdHlwZW9mYCByZXN1bHQgaW4gYSB2YXJpYWJsZSB0byBhdm9pZCBhIEpJVCBidWcgaW4gU2FmYXJpIDkuXG4gIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBpZGVudGl0eTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpXG4gICAgICA/IGJhc2VNYXRjaGVzUHJvcGVydHkodmFsdWVbMF0sIHZhbHVlWzFdKVxuICAgICAgOiBiYXNlTWF0Y2hlcyh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXRlcmF0ZWU7XG4iLCJ2YXIgYmFzZUlzTWF0Y2ggPSByZXF1aXJlKCcuL19iYXNlSXNNYXRjaCcpLFxuICAgIGdldE1hdGNoRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hdGNoRGF0YScpLFxuICAgIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzYCB3aGljaCBkb2Vzbid0IGNsb25lIGBzb3VyY2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXMoc291cmNlKSB7XG4gIHZhciBtYXRjaERhdGEgPSBnZXRNYXRjaERhdGEoc291cmNlKTtcbiAgaWYgKG1hdGNoRGF0YS5sZW5ndGggPT0gMSAmJiBtYXRjaERhdGFbMF1bMl0pIHtcbiAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUobWF0Y2hEYXRhWzBdWzBdLCBtYXRjaERhdGFbMF1bMV0pO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09PSBzb3VyY2UgfHwgYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZU1hdGNoZXM7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGJhc2VJc0VxdWFsID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWwnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtBcnJheX0gbWF0Y2hEYXRhIFRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSwgY3VzdG9taXplcikge1xuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxuICAgICAgbGVuZ3RoID0gaW5kZXgsXG4gICAgICBub0N1c3RvbWl6ZXIgPSAhY3VzdG9taXplcjtcblxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gIWxlbmd0aDtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgaWYgKChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSlcbiAgICAgICAgICA/IGRhdGFbMV0gIT09IG9iamVjdFtkYXRhWzBdXVxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcbiAgICAgICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgdmFyIGtleSA9IGRhdGFbMF0sXG4gICAgICAgIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcblxuICAgIGlmIChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSkge1xuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFjayA9IG5ldyBTdGFjaztcbiAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spO1xuICAgICAgfVxuICAgICAgaWYgKCEocmVzdWx0ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgOiByZXN1bHRcbiAgICAgICAgICApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTWF0Y2g7XG4iLCIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVEZWxldGU7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVTZXQ7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0RlbGV0ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0dldDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tIYXM7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja1NldDtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNNYXNrZWQgPSByZXF1aXJlKCcuL19pc01hc2tlZCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYXRpdmU7XG4iLCJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRWYWx1ZTtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hEZWxldGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoR2V0O1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEhhcztcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaFNldDtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlR2V0O1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVIYXM7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlU2V0O1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgZXF1YWxCeVRhZyA9IHJlcXVpcmUoJy4vX2VxdWFsQnlUYWcnKSxcbiAgICBlcXVhbE9iamVjdHMgPSByZXF1aXJlKCcuL19lcXVhbE9iamVjdHMnKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIGNvbXBhcmlzb25zIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgb2JqSXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICBvdGhJc0FyciA9IGlzQXJyYXkob3RoZXIpLFxuICAgICAgb2JqVGFnID0gb2JqSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvYmplY3QpLFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvdGhlcik7XG5cbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XG4gIG90aFRhZyA9IG90aFRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb3RoVGFnO1xuXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBvdGhJc09iaiA9IG90aFRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBpc1NhbWVUYWcgPSBvYmpUYWcgPT0gb3RoVGFnO1xuXG4gIGlmIChpc1NhbWVUYWcgJiYgaXNCdWZmZXIob2JqZWN0KSkge1xuICAgIGlmICghaXNCdWZmZXIob3RoZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG9iaklzQXJyID0gdHJ1ZTtcbiAgICBvYmpJc09iaiA9IGZhbHNlO1xuICB9XG4gIGlmIChpc1NhbWVUYWcgJiYgIW9iaklzT2JqKSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICByZXR1cm4gKG9iaklzQXJyIHx8IGlzVHlwZWRBcnJheShvYmplY3QpKVxuICAgICAgPyBlcXVhbEFycmF5cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxuICAgICAgOiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIG9ialRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gIH1cbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xuICAgIHZhciBvYmpJc1dyYXBwZWQgPSBvYmpJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fd3JhcHBlZF9fJyksXG4gICAgICAgIG90aElzV3JhcHBlZCA9IG90aElzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsICdfX3dyYXBwZWRfXycpO1xuXG4gICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XG5cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICByZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCwgb3RoVW53cmFwcGVkLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTYW1lVGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHJldHVybiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWxEZWVwO1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKSxcbiAgICBzZXRDYWNoZUFkZCA9IHJlcXVpcmUoJy4vX3NldENhY2hlQWRkJyksXG4gICAgc2V0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19zZXRDYWNoZUhhcycpO1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gc2V0Q2FjaGVBZGQ7XG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0Q2FjaGU7XG4iLCIvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgYWRkXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBhbGlhcyBwdXNoXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUFkZDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUhhcztcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlTb21lO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FjaGVIYXM7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgbWFwVG9BcnJheSA9IHJlcXVpcmUoJy4vX21hcFRvQXJyYXknKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAob2JqZWN0LmJ5dGVPZmZzZXQgIT0gb3RoZXIuYnl0ZU9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgIC8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJjZWQgdG8gYE5hTmAuXG4gICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzLCBwcmltaXRpdmVzIGFuZCBvYmplY3RzLFxuICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QgPT0gKG90aGVyICsgJycpO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICAgICAgfVxuICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQnlUYWc7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBUb0FycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb0FycmF5O1xuIiwidmFyIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIG9iamVjdHMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIG9ialByb3BzID0gZ2V0QWxsS2V5cyhvYmplY3QpLFxuICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLFxuICAgICAgb3RoUHJvcHMgPSBnZXRBbGxLZXlzKG90aGVyKSxcbiAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICBpZiAob2JqTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBpbmRleCA9IG9iakxlbmd0aDtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIGlmICghKGlzUGFydGlhbCA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBvYmpTdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKG9ialN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBvYmpTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gb2JqZWN0O1xuICB9XG4gIHZhciByZXN1bHQgPSB0cnVlO1xuICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcblxuICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XG4gICAga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgb2JqVmFsdWUsIGtleSwgb3RoZXIsIG9iamVjdCwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoIShjb21wYXJlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcbiAgICAgICAgICA6IGNvbXBhcmVkXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcbiAgfVxuICBpZiAocmVzdWx0ICYmICFza2lwQ3Rvcikge1xuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgICBvdGhDdG9yID0gb3RoZXIuY29uc3RydWN0b3I7XG5cbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cbiAgICBpZiAob2JqQ3RvciAhPSBvdGhDdG9yICYmXG4gICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcbiAgICAgICAgICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsT2JqZWN0cztcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5cztcbiIsInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXG4gKiBga2V5c0Z1bmNgIGFuZCBgc3ltYm9sc0Z1bmNgIHRvIGdldCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzeW1ib2xzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7XG4gIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0QWxsS2V5cztcbiIsIi8qKlxuICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVB1c2g7XG4iLCJ2YXIgYXJyYXlGaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheUZpbHRlcicpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGFWaWV3O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iLCJ2YXIgaXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9faXNTdHJpY3RDb21wYXJhYmxlJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIEdldHMgdGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGdldE1hdGNoRGF0YShvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXMob2JqZWN0KSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgdmFyIGtleSA9IHJlc3VsdFtsZW5ndGhdLFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgcmVzdWx0W2xlbmd0aF0gPSBba2V5LCB2YWx1ZSwgaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXRjaERhdGE7XG4iLCJ2YXIgYmFzZUlzRXF1YWwgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbCcpLFxuICAgIGdldCA9IHJlcXVpcmUoJy4vZ2V0JyksXG4gICAgaGFzSW4gPSByZXF1aXJlKCcuL2hhc0luJyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIGlzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX2lzU3RyaWN0Q29tcGFyYWJsZScpLFxuICAgIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBzcmNWYWx1ZSkge1xuICBpZiAoaXNLZXkocGF0aCkgJiYgaXNTdHJpY3RDb21wYXJhYmxlKHNyY1ZhbHVlKSkge1xuICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSh0b0tleShwYXRoKSwgc3JjVmFsdWUpO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIgb2JqVmFsdWUgPSBnZXQob2JqZWN0LCBwYXRoKTtcbiAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxuICAgICAgPyBoYXNJbihvYmplY3QsIHBhdGgpXG4gICAgICA6IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWF0Y2hlc1Byb3BlcnR5O1xuIiwidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0Jyk7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKi9cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXQ7XG4iLCJ2YXIgbWVtb2l6ZUNhcHBlZCA9IHJlcXVpcmUoJy4vX21lbW9pemVDYXBwZWQnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1RvUGF0aDtcbiIsInZhciBtZW1vaXplID0gcmVxdWlyZSgnLi9tZW1vaXplJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBtYXhpbXVtIG1lbW9pemUgY2FjaGUgc2l6ZS4gKi9cbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcbiAqIGNhY2hlIHdoZW4gaXQgZXhjZWVkcyBgTUFYX01FTU9JWkVfU0laRWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtZW1vaXplQ2FwcGVkKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IG1lbW9pemUoZnVuYywgZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKGNhY2hlLnNpemUgPT09IE1BWF9NRU1PSVpFX1NJWkUpIHtcbiAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH0pO1xuXG4gIHZhciBjYWNoZSA9IHJlc3VsdC5jYWNoZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplQ2FwcGVkO1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICE9IG51bGwgJiYgdHlwZW9mIHJlc29sdmVyICE9ICdmdW5jdGlvbicpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBtZW1vaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgY2FjaGUgPSBtZW1vaXplZC5jYWNoZTtcblxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCkgfHwgY2FjaGU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgTWFwQ2FjaGUpO1xuICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbi8vIEV4cG9zZSBgTWFwQ2FjaGVgLlxubWVtb2l6ZS5DYWNoZSA9IE1hcENhY2hlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemU7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVG9TdHJpbmc7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TWFwO1xuIiwidmFyIGJhc2VIYXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VIYXNJbicpLFxuICAgIGhhc1BhdGggPSByZXF1aXJlKCcuL19oYXNQYXRoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0gXy5jcmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pO1xuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYS5iJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsIFsnYScsICdiJ10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYicpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaGFzSW4ob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgYmFzZUhhc0luKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNJbjtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYga2V5IGluIE9iamVjdChvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VIYXNJbjtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcGF0aGAgZXhpc3RzIG9uIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrIHByb3BlcnRpZXMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgaGFzRnVuYykge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gdG9LZXkocGF0aFtpbmRleF0pO1xuICAgIGlmICghKHJlc3VsdCA9IG9iamVjdCAhPSBudWxsICYmIGhhc0Z1bmMob2JqZWN0LCBrZXkpKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIG9iamVjdCA9IG9iamVjdFtrZXldO1xuICB9XG4gIGlmIChyZXN1bHQgfHwgKytpbmRleCAhPSBsZW5ndGgpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGxlbmd0aCA9IG9iamVjdCA9PSBudWxsID8gMCA6IG9iamVjdC5sZW5ndGg7XG4gIHJldHVybiAhIWxlbmd0aCAmJiBpc0xlbmd0aChsZW5ndGgpICYmIGlzSW5kZXgoa2V5LCBsZW5ndGgpICYmXG4gICAgKGlzQXJyYXkob2JqZWN0KSB8fCBpc0FyZ3VtZW50cyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNQYXRoO1xuIiwidmFyIGJhc2VQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2Jhc2VQcm9wZXJ0eScpLFxuICAgIGJhc2VQcm9wZXJ0eURlZXAgPSByZXF1aXJlKCcuL19iYXNlUHJvcGVydHlEZWVwJyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbXG4gKiAgIHsgJ2EnOiB7ICdiJzogMiB9IH0sXG4gKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cbiAqIF07XG4gKlxuICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xuICogLy8gPT4gWzIsIDFdXG4gKlxuICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcbiAqIC8vID0+IFsxLCAyXVxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XG4gIHJldHVybiBpc0tleShwYXRoKSA/IGJhc2VQcm9wZXJ0eSh0b0tleShwYXRoKSkgOiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHByb3BlcnR5O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eWAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHkoa2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUHJvcGVydHk7XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VQcm9wZXJ0eWAgd2hpY2ggc3VwcG9ydHMgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVByb3BlcnR5RGVlcDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmluZEluZGV4YCBhbmQgYF8uZmluZExhc3RJbmRleGAgd2l0aG91dFxuICogc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlRmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCwgZnJvbVJpZ2h0KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBpbmRleCA9IGZyb21JbmRleCArIChmcm9tUmlnaHQgPyAxIDogLTEpO1xuXG4gIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGaW5kSW5kZXg7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmFOYCB3aXRob3V0IHN1cHBvcnQgZm9yIG51bWJlciBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hTjtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluZGV4T2ZgIHdoaWNoIHBlcmZvcm1zIHN0cmljdCBlcXVhbGl0eVxuICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4IC0gMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChhcnJheVtpbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpY3RJbmRleE9mO1xuIiwidmFyIGJhc2VUcmltID0gcmVxdWlyZSgnLi9fYmFzZVRyaW0nKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTkFOID0gMCAvIDA7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiYWQgc2lnbmVkIGhleGFkZWNpbWFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JhZEhleCA9IC9eWy0rXTB4WzAtOWEtZl0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmluYXJ5IHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JpbmFyeSA9IC9eMGJbMDFdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG9jdGFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc09jdGFsID0gL14wb1swLTddKyQvaTtcblxuLyoqIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHdpdGhvdXQgYSBkZXBlbmRlbmN5IG9uIGByb290YC4gKi9cbnZhciBmcmVlUGFyc2VJbnQgPSBwYXJzZUludDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgbnVtYmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvTnVtYmVyKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b051bWJlcihJbmZpbml0eSk7XG4gKiAvLyA9PiBJbmZpbml0eVxuICpcbiAqIF8udG9OdW1iZXIoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBOQU47XG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IGlzT2JqZWN0KG90aGVyKSA/IChvdGhlciArICcnKSA6IG90aGVyO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTtcbiAgfVxuICB2YWx1ZSA9IGJhc2VUcmltKHZhbHVlKTtcbiAgdmFyIGlzQmluYXJ5ID0gcmVJc0JpbmFyeS50ZXN0KHZhbHVlKTtcbiAgcmV0dXJuIChpc0JpbmFyeSB8fCByZUlzT2N0YWwudGVzdCh2YWx1ZSkpXG4gICAgPyBmcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIGlzQmluYXJ5ID8gMiA6IDgpXG4gICAgOiAocmVJc0JhZEhleC50ZXN0KHZhbHVlKSA/IE5BTiA6ICt2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9OdW1iZXI7XG4iLCJ2YXIgdHJpbW1lZEVuZEluZGV4ID0gcmVxdWlyZSgnLi9fdHJpbW1lZEVuZEluZGV4Jyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgd2hpdGVzcGFjZS4gKi9cbnZhciByZVRyaW1TdGFydCA9IC9eXFxzKy87XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udHJpbWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byB0cmltLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUcmltKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nXG4gICAgPyBzdHJpbmcuc2xpY2UoMCwgdHJpbW1lZEVuZEluZGV4KHN0cmluZykgKyAxKS5yZXBsYWNlKHJlVHJpbVN0YXJ0LCAnJylcbiAgICA6IHN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVHJpbTtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIGEgc2luZ2xlIHdoaXRlc3BhY2UgY2hhcmFjdGVyLiAqL1xudmFyIHJlV2hpdGVzcGFjZSA9IC9cXHMvO1xuXG4vKipcbiAqIFVzZWQgYnkgYF8udHJpbWAgYW5kIGBfLnRyaW1FbmRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2VcbiAqIGNoYXJhY3RlciBvZiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuXG4gKi9cbmZ1bmN0aW9uIHRyaW1tZWRFbmRJbmRleChzdHJpbmcpIHtcbiAgdmFyIGluZGV4ID0gc3RyaW5nLmxlbmd0aDtcblxuICB3aGlsZSAoaW5kZXgtLSAmJiByZVdoaXRlc3BhY2UudGVzdChzdHJpbmcuY2hhckF0KGluZGV4KSkpIHt9XG4gIHJldHVybiBpbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0cmltbWVkRW5kSW5kZXg7XG4iLCJ2YXIgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGludm9rZSBpdCB3aXRoIHRoZSBvcHRpb25hbCBgdGhpc2BcbiAqIGJpbmRpbmcgb2YgYHRoaXNBcmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpIHtcbiAgdmFyIGlzQmluZCA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyxcbiAgICAgIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICByZXR1cm4gZm4uYXBwbHkoaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmluZDtcbiIsInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5JyksXG4gICAgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICBjcmVhdGVIeWJyaWQgPSByZXF1aXJlKCcuL19jcmVhdGVIeWJyaWQnKSxcbiAgICBjcmVhdGVSZWN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlUmVjdXJyeScpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBlbmFibGUgY3VycnlpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtudW1iZXJ9IGFyaXR5IFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDdXJyeShmdW5jLCBiaXRtYXNrLCBhcml0eSkge1xuICB2YXIgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgIGluZGV4ID0gbGVuZ3RoLFxuICAgICAgICBwbGFjZWhvbGRlciA9IGdldEhvbGRlcih3cmFwcGVyKTtcblxuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgfVxuICAgIHZhciBob2xkZXJzID0gKGxlbmd0aCA8IDMgJiYgYXJnc1swXSAhPT0gcGxhY2Vob2xkZXIgJiYgYXJnc1tsZW5ndGggLSAxXSAhPT0gcGxhY2Vob2xkZXIpXG4gICAgICA/IFtdXG4gICAgICA6IHJlcGxhY2VIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcblxuICAgIGxlbmd0aCAtPSBob2xkZXJzLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVSZWN1cnJ5KFxuICAgICAgICBmdW5jLCBiaXRtYXNrLCBjcmVhdGVIeWJyaWQsIHdyYXBwZXIucGxhY2Vob2xkZXIsIHVuZGVmaW5lZCxcbiAgICAgICAgYXJncywgaG9sZGVycywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5IC0gbGVuZ3RoKTtcbiAgICB9XG4gICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICByZXR1cm4gYXBwbHkoZm4sIHRoaXMsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUN1cnJ5O1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBudW1iZXIgb2YgYHBsYWNlaG9sZGVyYCBvY2N1cnJlbmNlcyBpbiBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciBjb3VudC5cbiAqL1xuZnVuY3Rpb24gY291bnRIb2xkZXJzKGFycmF5LCBwbGFjZWhvbGRlcikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gMDtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoYXJyYXlbbGVuZ3RoXSA9PT0gcGxhY2Vob2xkZXIpIHtcbiAgICAgICsrcmVzdWx0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvdW50SG9sZGVycztcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgZ2V0RGF0YSA9IHJlcXVpcmUoJy4vX2dldERhdGEnKSxcbiAgICBnZXRGdW5jTmFtZSA9IHJlcXVpcmUoJy4vX2dldEZ1bmNOYW1lJyksXG4gICAgbG9kYXNoID0gcmVxdWlyZSgnLi93cmFwcGVyTG9kYXNoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaGFzIGEgbGF6eSBjb3VudGVycGFydCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTGF6aWFibGUoZnVuYykge1xuICB2YXIgZnVuY05hbWUgPSBnZXRGdW5jTmFtZShmdW5jKSxcbiAgICAgIG90aGVyID0gbG9kYXNoW2Z1bmNOYW1lXTtcblxuICBpZiAodHlwZW9mIG90aGVyICE9ICdmdW5jdGlvbicgfHwgIShmdW5jTmFtZSBpbiBMYXp5V3JhcHBlci5wcm90b3R5cGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChmdW5jID09PSBvdGhlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBkYXRhID0gZ2V0RGF0YShvdGhlcik7XG4gIHJldHVybiAhIWRhdGEgJiYgZnVuYyA9PT0gZGF0YVswXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xhemlhYmxlO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4zLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5ub29wKTtcbiAqIC8vID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAqL1xuZnVuY3Rpb24gbm9vcCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBub29wO1xuIiwidmFyIHJlYWxOYW1lcyA9IHJlcXVpcmUoJy4vX3JlYWxOYW1lcycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIG5hbWUgb2YgYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNOYW1lKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IChmdW5jLm5hbWUgKyAnJyksXG4gICAgICBhcnJheSA9IHJlYWxOYW1lc1tyZXN1bHRdLFxuICAgICAgbGVuZ3RoID0gaGFzT3duUHJvcGVydHkuY2FsbChyZWFsTmFtZXMsIHJlc3VsdCkgPyBhcnJheS5sZW5ndGggOiAwO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIHZhciBkYXRhID0gYXJyYXlbbGVuZ3RoXSxcbiAgICAgICAgb3RoZXJGdW5jID0gZGF0YS5mdW5jO1xuICAgIGlmIChvdGhlckZ1bmMgPT0gbnVsbCB8fCBvdGhlckZ1bmMgPT0gZnVuYykge1xuICAgICAgcmV0dXJuIGRhdGEubmFtZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRGdW5jTmFtZTtcbiIsIi8qKiBVc2VkIHRvIGxvb2t1cCB1bm1pbmlmaWVkIGZ1bmN0aW9uIG5hbWVzLiAqL1xudmFyIHJlYWxOYW1lcyA9IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlYWxOYW1lcztcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgTG9kYXNoV3JhcHBlciA9IHJlcXVpcmUoJy4vX0xvZGFzaFdyYXBwZXInKSxcbiAgICBiYXNlTG9kYXNoID0gcmVxdWlyZSgnLi9fYmFzZUxvZGFzaCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpLFxuICAgIHdyYXBwZXJDbG9uZSA9IHJlcXVpcmUoJy4vX3dyYXBwZXJDbG9uZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgbG9kYXNoYCBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgaW1wbGljaXQgbWV0aG9kXG4gKiBjaGFpbiBzZXF1ZW5jZXMuIE1ldGhvZHMgdGhhdCBvcGVyYXRlIG9uIGFuZCByZXR1cm4gYXJyYXlzLCBjb2xsZWN0aW9ucyxcbiAqIGFuZCBmdW5jdGlvbnMgY2FuIGJlIGNoYWluZWQgdG9nZXRoZXIuIE1ldGhvZHMgdGhhdCByZXRyaWV2ZSBhIHNpbmdsZSB2YWx1ZVxuICogb3IgbWF5IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgZW5kIHRoZSBjaGFpbiBzZXF1ZW5jZVxuICogYW5kIHJldHVybiB0aGUgdW53cmFwcGVkIHZhbHVlLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBtdXN0IGJlIHVud3JhcHBlZFxuICogd2l0aCBgXyN2YWx1ZWAuXG4gKlxuICogRXhwbGljaXQgY2hhaW4gc2VxdWVuY2VzLCB3aGljaCBtdXN0IGJlIHVud3JhcHBlZCB3aXRoIGBfI3ZhbHVlYCwgbWF5IGJlXG4gKiBlbmFibGVkIHVzaW5nIGBfLmNoYWluYC5cbiAqXG4gKiBUaGUgZXhlY3V0aW9uIG9mIGNoYWluZWQgbWV0aG9kcyBpcyBsYXp5LCB0aGF0IGlzLCBpdCdzIGRlZmVycmVkIHVudGlsXG4gKiBgXyN2YWx1ZWAgaXMgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGNhbGxlZC5cbiAqXG4gKiBMYXp5IGV2YWx1YXRpb24gYWxsb3dzIHNldmVyYWwgbWV0aG9kcyB0byBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbi5cbiAqIFNob3J0Y3V0IGZ1c2lvbiBpcyBhbiBvcHRpbWl6YXRpb24gdG8gbWVyZ2UgaXRlcmF0ZWUgY2FsbHM7IHRoaXMgYXZvaWRzXG4gKiB0aGUgY3JlYXRpb24gb2YgaW50ZXJtZWRpYXRlIGFycmF5cyBhbmQgY2FuIGdyZWF0bHkgcmVkdWNlIHRoZSBudW1iZXIgb2ZcbiAqIGl0ZXJhdGVlIGV4ZWN1dGlvbnMuIFNlY3Rpb25zIG9mIGEgY2hhaW4gc2VxdWVuY2UgcXVhbGlmeSBmb3Igc2hvcnRjdXRcbiAqIGZ1c2lvbiBpZiB0aGUgc2VjdGlvbiBpcyBhcHBsaWVkIHRvIGFuIGFycmF5IGFuZCBpdGVyYXRlZXMgYWNjZXB0IG9ubHlcbiAqIG9uZSBhcmd1bWVudC4gVGhlIGhldXJpc3RpYyBmb3Igd2hldGhlciBhIHNlY3Rpb24gcXVhbGlmaWVzIGZvciBzaG9ydGN1dFxuICogZnVzaW9uIGlzIHN1YmplY3QgdG8gY2hhbmdlLlxuICpcbiAqIENoYWluaW5nIGlzIHN1cHBvcnRlZCBpbiBjdXN0b20gYnVpbGRzIGFzIGxvbmcgYXMgdGhlIGBfI3ZhbHVlYCBtZXRob2QgaXNcbiAqIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLlxuICpcbiAqIEluIGFkZGl0aW9uIHRvIGxvZGFzaCBtZXRob2RzLCB3cmFwcGVycyBoYXZlIGBBcnJheWAgYW5kIGBTdHJpbmdgIG1ldGhvZHMuXG4gKlxuICogVGhlIHdyYXBwZXIgYEFycmF5YCBtZXRob2RzIGFyZTpcbiAqIGBjb25jYXRgLCBgam9pbmAsIGBwb3BgLCBgcHVzaGAsIGBzaGlmdGAsIGBzb3J0YCwgYHNwbGljZWAsIGFuZCBgdW5zaGlmdGBcbiAqXG4gKiBUaGUgd3JhcHBlciBgU3RyaW5nYCBtZXRob2RzIGFyZTpcbiAqIGByZXBsYWNlYCBhbmQgYHNwbGl0YFxuICpcbiAqIFRoZSB3cmFwcGVyIG1ldGhvZHMgdGhhdCBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbiBhcmU6XG4gKiBgYXRgLCBgY29tcGFjdGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsIGBkcm9wV2hpbGVgLCBgZmlsdGVyYCwgYGZpbmRgLFxuICogYGZpbmRMYXN0YCwgYGhlYWRgLCBgaW5pdGlhbGAsIGBsYXN0YCwgYG1hcGAsIGByZWplY3RgLCBgcmV2ZXJzZWAsIGBzbGljZWAsXG4gKiBgdGFpbGAsIGB0YWtlYCwgYHRha2VSaWdodGAsIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBhbmQgYHRvQXJyYXlgXG4gKlxuICogVGhlIGNoYWluYWJsZSB3cmFwcGVyIG1ldGhvZHMgYXJlOlxuICogYGFmdGVyYCwgYGFyeWAsIGBhc3NpZ25gLCBgYXNzaWduSW5gLCBgYXNzaWduSW5XaXRoYCwgYGFzc2lnbldpdGhgLCBgYXRgLFxuICogYGJlZm9yZWAsIGBiaW5kYCwgYGJpbmRBbGxgLCBgYmluZEtleWAsIGBjYXN0QXJyYXlgLCBgY2hhaW5gLCBgY2h1bmtgLFxuICogYGNvbW1pdGAsIGBjb21wYWN0YCwgYGNvbmNhdGAsIGBjb25mb3Jtc2AsIGBjb25zdGFudGAsIGBjb3VudEJ5YCwgYGNyZWF0ZWAsXG4gKiBgY3VycnlgLCBgZGVib3VuY2VgLCBgZGVmYXVsdHNgLCBgZGVmYXVsdHNEZWVwYCwgYGRlZmVyYCwgYGRlbGF5YCxcbiAqIGBkaWZmZXJlbmNlYCwgYGRpZmZlcmVuY2VCeWAsIGBkaWZmZXJlbmNlV2l0aGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsXG4gKiBgZHJvcFJpZ2h0V2hpbGVgLCBgZHJvcFdoaWxlYCwgYGV4dGVuZGAsIGBleHRlbmRXaXRoYCwgYGZpbGxgLCBgZmlsdGVyYCxcbiAqIGBmbGF0TWFwYCwgYGZsYXRNYXBEZWVwYCwgYGZsYXRNYXBEZXB0aGAsIGBmbGF0dGVuYCwgYGZsYXR0ZW5EZWVwYCxcbiAqIGBmbGF0dGVuRGVwdGhgLCBgZmxpcGAsIGBmbG93YCwgYGZsb3dSaWdodGAsIGBmcm9tUGFpcnNgLCBgZnVuY3Rpb25zYCxcbiAqIGBmdW5jdGlvbnNJbmAsIGBncm91cEJ5YCwgYGluaXRpYWxgLCBgaW50ZXJzZWN0aW9uYCwgYGludGVyc2VjdGlvbkJ5YCxcbiAqIGBpbnRlcnNlY3Rpb25XaXRoYCwgYGludmVydGAsIGBpbnZlcnRCeWAsIGBpbnZva2VNYXBgLCBgaXRlcmF0ZWVgLCBga2V5QnlgLFxuICogYGtleXNgLCBga2V5c0luYCwgYG1hcGAsIGBtYXBLZXlzYCwgYG1hcFZhbHVlc2AsIGBtYXRjaGVzYCwgYG1hdGNoZXNQcm9wZXJ0eWAsXG4gKiBgbWVtb2l6ZWAsIGBtZXJnZWAsIGBtZXJnZVdpdGhgLCBgbWV0aG9kYCwgYG1ldGhvZE9mYCwgYG1peGluYCwgYG5lZ2F0ZWAsXG4gKiBgbnRoQXJnYCwgYG9taXRgLCBgb21pdEJ5YCwgYG9uY2VgLCBgb3JkZXJCeWAsIGBvdmVyYCwgYG92ZXJBcmdzYCxcbiAqIGBvdmVyRXZlcnlgLCBgb3ZlclNvbWVgLCBgcGFydGlhbGAsIGBwYXJ0aWFsUmlnaHRgLCBgcGFydGl0aW9uYCwgYHBpY2tgLFxuICogYHBpY2tCeWAsIGBwbGFudGAsIGBwcm9wZXJ0eWAsIGBwcm9wZXJ0eU9mYCwgYHB1bGxgLCBgcHVsbEFsbGAsIGBwdWxsQWxsQnlgLFxuICogYHB1bGxBbGxXaXRoYCwgYHB1bGxBdGAsIGBwdXNoYCwgYHJhbmdlYCwgYHJhbmdlUmlnaHRgLCBgcmVhcmdgLCBgcmVqZWN0YCxcbiAqIGByZW1vdmVgLCBgcmVzdGAsIGByZXZlcnNlYCwgYHNhbXBsZVNpemVgLCBgc2V0YCwgYHNldFdpdGhgLCBgc2h1ZmZsZWAsXG4gKiBgc2xpY2VgLCBgc29ydGAsIGBzb3J0QnlgLCBgc3BsaWNlYCwgYHNwcmVhZGAsIGB0YWlsYCwgYHRha2VgLCBgdGFrZVJpZ2h0YCxcbiAqIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBgdGFwYCwgYHRocm90dGxlYCwgYHRocnVgLCBgdG9BcnJheWAsXG4gKiBgdG9QYWlyc2AsIGB0b1BhaXJzSW5gLCBgdG9QYXRoYCwgYHRvUGxhaW5PYmplY3RgLCBgdHJhbnNmb3JtYCwgYHVuYXJ5YCxcbiAqIGB1bmlvbmAsIGB1bmlvbkJ5YCwgYHVuaW9uV2l0aGAsIGB1bmlxYCwgYHVuaXFCeWAsIGB1bmlxV2l0aGAsIGB1bnNldGAsXG4gKiBgdW5zaGlmdGAsIGB1bnppcGAsIGB1bnppcFdpdGhgLCBgdXBkYXRlYCwgYHVwZGF0ZVdpdGhgLCBgdmFsdWVzYCxcbiAqIGB2YWx1ZXNJbmAsIGB3aXRob3V0YCwgYHdyYXBgLCBgeG9yYCwgYHhvckJ5YCwgYHhvcldpdGhgLCBgemlwYCxcbiAqIGB6aXBPYmplY3RgLCBgemlwT2JqZWN0RGVlcGAsIGFuZCBgemlwV2l0aGBcbiAqXG4gKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgYXJlICoqbm90KiogY2hhaW5hYmxlIGJ5IGRlZmF1bHQgYXJlOlxuICogYGFkZGAsIGBhdHRlbXB0YCwgYGNhbWVsQ2FzZWAsIGBjYXBpdGFsaXplYCwgYGNlaWxgLCBgY2xhbXBgLCBgY2xvbmVgLFxuICogYGNsb25lRGVlcGAsIGBjbG9uZURlZXBXaXRoYCwgYGNsb25lV2l0aGAsIGBjb25mb3Jtc1RvYCwgYGRlYnVycmAsXG4gKiBgZGVmYXVsdFRvYCwgYGRpdmlkZWAsIGBlYWNoYCwgYGVhY2hSaWdodGAsIGBlbmRzV2l0aGAsIGBlcWAsIGBlc2NhcGVgLFxuICogYGVzY2FwZVJlZ0V4cGAsIGBldmVyeWAsIGBmaW5kYCwgYGZpbmRJbmRleGAsIGBmaW5kS2V5YCwgYGZpbmRMYXN0YCxcbiAqIGBmaW5kTGFzdEluZGV4YCwgYGZpbmRMYXN0S2V5YCwgYGZpcnN0YCwgYGZsb29yYCwgYGZvckVhY2hgLCBgZm9yRWFjaFJpZ2h0YCxcbiAqIGBmb3JJbmAsIGBmb3JJblJpZ2h0YCwgYGZvck93bmAsIGBmb3JPd25SaWdodGAsIGBnZXRgLCBgZ3RgLCBgZ3RlYCwgYGhhc2AsXG4gKiBgaGFzSW5gLCBgaGVhZGAsIGBpZGVudGl0eWAsIGBpbmNsdWRlc2AsIGBpbmRleE9mYCwgYGluUmFuZ2VgLCBgaW52b2tlYCxcbiAqIGBpc0FyZ3VtZW50c2AsIGBpc0FycmF5YCwgYGlzQXJyYXlCdWZmZXJgLCBgaXNBcnJheUxpa2VgLCBgaXNBcnJheUxpa2VPYmplY3RgLFxuICogYGlzQm9vbGVhbmAsIGBpc0J1ZmZlcmAsIGBpc0RhdGVgLCBgaXNFbGVtZW50YCwgYGlzRW1wdHlgLCBgaXNFcXVhbGAsXG4gKiBgaXNFcXVhbFdpdGhgLCBgaXNFcnJvcmAsIGBpc0Zpbml0ZWAsIGBpc0Z1bmN0aW9uYCwgYGlzSW50ZWdlcmAsIGBpc0xlbmd0aGAsXG4gKiBgaXNNYXBgLCBgaXNNYXRjaGAsIGBpc01hdGNoV2l0aGAsIGBpc05hTmAsIGBpc05hdGl2ZWAsIGBpc05pbGAsIGBpc051bGxgLFxuICogYGlzTnVtYmVyYCwgYGlzT2JqZWN0YCwgYGlzT2JqZWN0TGlrZWAsIGBpc1BsYWluT2JqZWN0YCwgYGlzUmVnRXhwYCxcbiAqIGBpc1NhZmVJbnRlZ2VyYCwgYGlzU2V0YCwgYGlzU3RyaW5nYCwgYGlzVW5kZWZpbmVkYCwgYGlzVHlwZWRBcnJheWAsXG4gKiBgaXNXZWFrTWFwYCwgYGlzV2Vha1NldGAsIGBqb2luYCwgYGtlYmFiQ2FzZWAsIGBsYXN0YCwgYGxhc3RJbmRleE9mYCxcbiAqIGBsb3dlckNhc2VgLCBgbG93ZXJGaXJzdGAsIGBsdGAsIGBsdGVgLCBgbWF4YCwgYG1heEJ5YCwgYG1lYW5gLCBgbWVhbkJ5YCxcbiAqIGBtaW5gLCBgbWluQnlgLCBgbXVsdGlwbHlgLCBgbm9Db25mbGljdGAsIGBub29wYCwgYG5vd2AsIGBudGhgLCBgcGFkYCxcbiAqIGBwYWRFbmRgLCBgcGFkU3RhcnRgLCBgcGFyc2VJbnRgLCBgcG9wYCwgYHJhbmRvbWAsIGByZWR1Y2VgLCBgcmVkdWNlUmlnaHRgLFxuICogYHJlcGVhdGAsIGByZXN1bHRgLCBgcm91bmRgLCBgcnVuSW5Db250ZXh0YCwgYHNhbXBsZWAsIGBzaGlmdGAsIGBzaXplYCxcbiAqIGBzbmFrZUNhc2VgLCBgc29tZWAsIGBzb3J0ZWRJbmRleGAsIGBzb3J0ZWRJbmRleEJ5YCwgYHNvcnRlZExhc3RJbmRleGAsXG4gKiBgc29ydGVkTGFzdEluZGV4QnlgLCBgc3RhcnRDYXNlYCwgYHN0YXJ0c1dpdGhgLCBgc3R1YkFycmF5YCwgYHN0dWJGYWxzZWAsXG4gKiBgc3R1Yk9iamVjdGAsIGBzdHViU3RyaW5nYCwgYHN0dWJUcnVlYCwgYHN1YnRyYWN0YCwgYHN1bWAsIGBzdW1CeWAsXG4gKiBgdGVtcGxhdGVgLCBgdGltZXNgLCBgdG9GaW5pdGVgLCBgdG9JbnRlZ2VyYCwgYHRvSlNPTmAsIGB0b0xlbmd0aGAsXG4gKiBgdG9Mb3dlcmAsIGB0b051bWJlcmAsIGB0b1NhZmVJbnRlZ2VyYCwgYHRvU3RyaW5nYCwgYHRvVXBwZXJgLCBgdHJpbWAsXG4gKiBgdHJpbUVuZGAsIGB0cmltU3RhcnRgLCBgdHJ1bmNhdGVgLCBgdW5lc2NhcGVgLCBgdW5pcXVlSWRgLCBgdXBwZXJDYXNlYCxcbiAqIGB1cHBlckZpcnN0YCwgYHZhbHVlYCwgYW5kIGB3b3Jkc2BcbiAqXG4gKiBAbmFtZSBfXG4gKiBAY29uc3RydWN0b3JcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAgaW4gYSBgbG9kYXNoYCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICogICByZXR1cm4gbiAqIG47XG4gKiB9XG4gKlxuICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyLCAzXSk7XG4gKlxuICogLy8gUmV0dXJucyBhbiB1bndyYXBwZWQgdmFsdWUuXG4gKiB3cmFwcGVkLnJlZHVjZShfLmFkZCk7XG4gKiAvLyA9PiA2XG4gKlxuICogLy8gUmV0dXJucyBhIHdyYXBwZWQgdmFsdWUuXG4gKiB2YXIgc3F1YXJlcyA9IHdyYXBwZWQubWFwKHNxdWFyZSk7XG4gKlxuICogXy5pc0FycmF5KHNxdWFyZXMpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoc3F1YXJlcy52YWx1ZSgpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gbG9kYXNoKHZhbHVlKSB7XG4gIGlmIChpc09iamVjdExpa2UodmFsdWUpICYmICFpc0FycmF5KHZhbHVlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTG9kYXNoV3JhcHBlcikge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ19fd3JhcHBlZF9fJykpIHtcbiAgICAgIHJldHVybiB3cmFwcGVyQ2xvbmUodmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodmFsdWUpO1xufVxuXG4vLyBFbnN1cmUgd3JhcHBlcnMgYXJlIGluc3RhbmNlcyBvZiBgYmFzZUxvZGFzaGAuXG5sb2Rhc2gucHJvdG90eXBlID0gYmFzZUxvZGFzaC5wcm90b3R5cGU7XG5sb2Rhc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbG9kYXNoO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxvZGFzaDtcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgTG9kYXNoV3JhcHBlciA9IHJlcXVpcmUoJy4vX0xvZGFzaFdyYXBwZXInKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHdyYXBwZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gd3JhcHBlciBUaGUgd3JhcHBlciB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB3cmFwcGVyLlxuICovXG5mdW5jdGlvbiB3cmFwcGVyQ2xvbmUod3JhcHBlcikge1xuICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB7XG4gICAgcmV0dXJuIHdyYXBwZXIuY2xvbmUoKTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gbmV3IExvZGFzaFdyYXBwZXIod3JhcHBlci5fX3dyYXBwZWRfXywgd3JhcHBlci5fX2NoYWluX18pO1xuICByZXN1bHQuX19hY3Rpb25zX18gPSBjb3B5QXJyYXkod3JhcHBlci5fX2FjdGlvbnNfXyk7XG4gIHJlc3VsdC5fX2luZGV4X18gID0gd3JhcHBlci5fX2luZGV4X187XG4gIHJlc3VsdC5fX3ZhbHVlc19fID0gd3JhcHBlci5fX3ZhbHVlc19fO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXBwZXJDbG9uZTtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIHdyYXAgZGV0YWlsIGNvbW1lbnRzLiAqL1xudmFyIHJlV3JhcERldGFpbHMgPSAvXFx7XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAoLispXFxdIFxcKi8sXG4gICAgcmVTcGxpdERldGFpbHMgPSAvLD8gJiAvO1xuXG4vKipcbiAqIEV4dHJhY3RzIHdyYXBwZXIgZGV0YWlscyBmcm9tIHRoZSBgc291cmNlYCBib2R5IGNvbW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNvdXJjZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3cmFwcGVyIGRldGFpbHMuXG4gKi9cbmZ1bmN0aW9uIGdldFdyYXBEZXRhaWxzKHNvdXJjZSkge1xuICB2YXIgbWF0Y2ggPSBzb3VyY2UubWF0Y2gocmVXcmFwRGV0YWlscyk7XG4gIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdLnNwbGl0KHJlU3BsaXREZXRhaWxzKSA6IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFdyYXBEZXRhaWxzO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggd3JhcCBkZXRhaWwgY29tbWVudHMuICovXG52YXIgcmVXcmFwQ29tbWVudCA9IC9cXHsoPzpcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoIC4rXFxdIFxcKlxcLyk/XFxuPy87XG5cbi8qKlxuICogSW5zZXJ0cyB3cmFwcGVyIGBkZXRhaWxzYCBpbiBhIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgYHNvdXJjZWAgYm9keS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBUaGUgc291cmNlIHRvIG1vZGlmeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gZGV0YWlscyBUaGUgZGV0YWlscyB0byBpbnNlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBtb2RpZmllZCBzb3VyY2UuXG4gKi9cbmZ1bmN0aW9uIGluc2VydFdyYXBEZXRhaWxzKHNvdXJjZSwgZGV0YWlscykge1xuICB2YXIgbGVuZ3RoID0gZGV0YWlscy5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcbiAgZGV0YWlsc1tsYXN0SW5kZXhdID0gKGxlbmd0aCA+IDEgPyAnJiAnIDogJycpICsgZGV0YWlsc1tsYXN0SW5kZXhdO1xuICBkZXRhaWxzID0gZGV0YWlscy5qb2luKGxlbmd0aCA+IDIgPyAnLCAnIDogJyAnKTtcbiAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKHJlV3JhcENvbW1lbnQsICd7XFxuLyogW3dyYXBwZWQgd2l0aCAnICsgZGV0YWlscyArICddICovXFxuJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0V3JhcERldGFpbHM7XG4iLCJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb25zdGFudDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCJ2YXIgYXJyYXlFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXlFYWNoJyksXG4gICAgYXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHID0gNjQsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX1JFQVJHX0ZMQUcgPSAyNTYsXG4gICAgV1JBUF9GTElQX0ZMQUcgPSA1MTI7XG5cbi8qKiBVc2VkIHRvIGFzc29jaWF0ZSB3cmFwIG1ldGhvZHMgd2l0aCB0aGVpciBiaXQgZmxhZ3MuICovXG52YXIgd3JhcEZsYWdzID0gW1xuICBbJ2FyeScsIFdSQVBfQVJZX0ZMQUddLFxuICBbJ2JpbmQnLCBXUkFQX0JJTkRfRkxBR10sXG4gIFsnYmluZEtleScsIFdSQVBfQklORF9LRVlfRkxBR10sXG4gIFsnY3VycnknLCBXUkFQX0NVUlJZX0ZMQUddLFxuICBbJ2N1cnJ5UmlnaHQnLCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUddLFxuICBbJ2ZsaXAnLCBXUkFQX0ZMSVBfRkxBR10sXG4gIFsncGFydGlhbCcsIFdSQVBfUEFSVElBTF9GTEFHXSxcbiAgWydwYXJ0aWFsUmlnaHQnLCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBR10sXG4gIFsncmVhcmcnLCBXUkFQX1JFQVJHX0ZMQUddXG5dO1xuXG4vKipcbiAqIFVwZGF0ZXMgd3JhcHBlciBgZGV0YWlsc2AgYmFzZWQgb24gYGJpdG1hc2tgIGZsYWdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7QXJyYXl9IGRldGFpbHMgVGhlIGRldGFpbHMgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgZGV0YWlsc2AuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVdyYXBEZXRhaWxzKGRldGFpbHMsIGJpdG1hc2spIHtcbiAgYXJyYXlFYWNoKHdyYXBGbGFncywgZnVuY3Rpb24ocGFpcikge1xuICAgIHZhciB2YWx1ZSA9ICdfLicgKyBwYWlyWzBdO1xuICAgIGlmICgoYml0bWFzayAmIHBhaXJbMV0pICYmICFhcnJheUluY2x1ZGVzKGRldGFpbHMsIHZhbHVlKSkge1xuICAgICAgZGV0YWlscy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZGV0YWlscy5zb3J0KCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdXBkYXRlV3JhcERldGFpbHM7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlFYWNoO1xuIiwidmFyIGJhc2VJbmRleE9mID0gcmVxdWlyZSgnLi9fYmFzZUluZGV4T2YnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVkZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogc3BlY2lmeWluZyBhbiBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgMCkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUluY2x1ZGVzO1xuIiwidmFyIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBSZW9yZGVyIGBhcnJheWAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgaW5kZXhlcyB3aGVyZSB0aGUgZWxlbWVudCBhdFxuICogdGhlIGZpcnN0IGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgZWxlbWVudCBhdFxuICogdGhlIHNlY29uZCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHJlb3JkZXIuXG4gKiBAcGFyYW0ge0FycmF5fSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcnJheSBpbmRleGVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIHJlb3JkZXIoYXJyYXksIGluZGV4ZXMpIHtcbiAgdmFyIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihpbmRleGVzLmxlbmd0aCwgYXJyTGVuZ3RoKSxcbiAgICAgIG9sZEFycmF5ID0gY29weUFycmF5KGFycmF5KTtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07XG4gICAgYXJyYXlbbGVuZ3RoXSA9IGlzSW5kZXgoaW5kZXgsIGFyckxlbmd0aCkgPyBvbGRBcnJheVtpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlb3JkZXI7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpLFxuICAgIGNyZWF0ZUN0b3IgPSByZXF1aXJlKCcuL19jcmVhdGVDdG9yJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmdcbiAqIG9mIGB0aGlzQXJnYCBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKSB7XG4gIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgIGxlZnRJbmRleCA9IC0xLFxuICAgICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICBhcmdzID0gQXJyYXkobGVmdExlbmd0aCArIGFyZ3NMZW5ndGgpLFxuICAgICAgICBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG5cbiAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgICBhcmdzW2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdO1xuICAgIH1cbiAgICB3aGlsZSAoYXJnc0xlbmd0aC0tKSB7XG4gICAgICBhcmdzW2xlZnRJbmRleCsrXSA9IGFyZ3VtZW50c1srK2FyZ3NJbmRleF07XG4gICAgfVxuICAgIHJldHVybiBhcHBseShmbiwgaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVBhcnRpYWw7XG4iLCJ2YXIgY29tcG9zZUFyZ3MgPSByZXF1aXJlKCcuL19jb21wb3NlQXJncycpLFxuICAgIGNvbXBvc2VBcmdzUmlnaHQgPSByZXF1aXJlKCcuL19jb21wb3NlQXJnc1JpZ2h0JyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpO1xuXG4vKiogVXNlZCBhcyB0aGUgaW50ZXJuYWwgYXJndW1lbnQgcGxhY2Vob2xkZXIuICovXG52YXIgUExBQ0VIT0xERVIgPSAnX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfQk9VTkRfRkxBRyA9IDQsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0FSWV9GTEFHID0gMTI4LFxuICAgIFdSQVBfUkVBUkdfRkxBRyA9IDI1NjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1pbiA9IE1hdGgubWluO1xuXG4vKipcbiAqIE1lcmdlcyB0aGUgZnVuY3Rpb24gbWV0YWRhdGEgb2YgYHNvdXJjZWAgaW50byBgZGF0YWAuXG4gKlxuICogTWVyZ2luZyBtZXRhZGF0YSByZWR1Y2VzIHRoZSBudW1iZXIgb2Ygd3JhcHBlcnMgdXNlZCB0byBpbnZva2UgYSBmdW5jdGlvbi5cbiAqIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSBtZXRob2RzIGxpa2UgYF8uYmluZGAsIGBfLmN1cnJ5YCwgYW5kIGBfLnBhcnRpYWxgXG4gKiBtYXkgYmUgYXBwbGllZCByZWdhcmRsZXNzIG9mIGV4ZWN1dGlvbiBvcmRlci4gTWV0aG9kcyBsaWtlIGBfLmFyeWAgYW5kXG4gKiBgXy5yZWFyZ2AgbW9kaWZ5IGZ1bmN0aW9uIGFyZ3VtZW50cywgbWFraW5nIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZVxuICogZXhlY3V0ZWQgaW1wb3J0YW50LCBwcmV2ZW50aW5nIHRoZSBtZXJnaW5nIG9mIG1ldGFkYXRhLiBIb3dldmVyLCB3ZSBtYWtlXG4gKiBhbiBleGNlcHRpb24gZm9yIGEgc2FmZSBjb21iaW5lZCBjYXNlIHdoZXJlIGN1cnJpZWQgZnVuY3Rpb25zIGhhdmUgYF8uYXJ5YFxuICogYW5kIG9yIGBfLnJlYXJnYCBhcHBsaWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBkYXRhIFRoZSBkZXN0aW5hdGlvbiBtZXRhZGF0YS5cbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgc291cmNlIG1ldGFkYXRhLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBkYXRhYC5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhKGRhdGEsIHNvdXJjZSkge1xuICB2YXIgYml0bWFzayA9IGRhdGFbMV0sXG4gICAgICBzcmNCaXRtYXNrID0gc291cmNlWzFdLFxuICAgICAgbmV3Qml0bWFzayA9IGJpdG1hc2sgfCBzcmNCaXRtYXNrLFxuICAgICAgaXNDb21tb24gPSBuZXdCaXRtYXNrIDwgKFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHIHwgV1JBUF9BUllfRkxBRyk7XG5cbiAgdmFyIGlzQ29tYm8gPVxuICAgICgoc3JjQml0bWFzayA9PSBXUkFQX0FSWV9GTEFHKSAmJiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcpKSB8fFxuICAgICgoc3JjQml0bWFzayA9PSBXUkFQX0FSWV9GTEFHKSAmJiAoYml0bWFzayA9PSBXUkFQX1JFQVJHX0ZMQUcpICYmIChkYXRhWzddLmxlbmd0aCA8PSBzb3VyY2VbOF0pKSB8fFxuICAgICgoc3JjQml0bWFzayA9PSAoV1JBUF9BUllfRkxBRyB8IFdSQVBfUkVBUkdfRkxBRykpICYmIChzb3VyY2VbN10ubGVuZ3RoIDw9IHNvdXJjZVs4XSkgJiYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHKSk7XG5cbiAgLy8gRXhpdCBlYXJseSBpZiBtZXRhZGF0YSBjYW4ndCBiZSBtZXJnZWQuXG4gIGlmICghKGlzQ29tbW9uIHx8IGlzQ29tYm8pKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgdGhpc0FyZ2AgaWYgYXZhaWxhYmxlLlxuICBpZiAoc3JjQml0bWFzayAmIFdSQVBfQklORF9GTEFHKSB7XG4gICAgZGF0YVsyXSA9IHNvdXJjZVsyXTtcbiAgICAvLyBTZXQgd2hlbiBjdXJyeWluZyBhIGJvdW5kIGZ1bmN0aW9uLlxuICAgIG5ld0JpdG1hc2sgfD0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHID8gMCA6IFdSQVBfQ1VSUllfQk9VTkRfRkxBRztcbiAgfVxuICAvLyBDb21wb3NlIHBhcnRpYWwgYXJndW1lbnRzLlxuICB2YXIgdmFsdWUgPSBzb3VyY2VbM107XG4gIGlmICh2YWx1ZSkge1xuICAgIHZhciBwYXJ0aWFscyA9IGRhdGFbM107XG4gICAgZGF0YVszXSA9IHBhcnRpYWxzID8gY29tcG9zZUFyZ3MocGFydGlhbHMsIHZhbHVlLCBzb3VyY2VbNF0pIDogdmFsdWU7XG4gICAgZGF0YVs0XSA9IHBhcnRpYWxzID8gcmVwbGFjZUhvbGRlcnMoZGF0YVszXSwgUExBQ0VIT0xERVIpIDogc291cmNlWzRdO1xuICB9XG4gIC8vIENvbXBvc2UgcGFydGlhbCByaWdodCBhcmd1bWVudHMuXG4gIHZhbHVlID0gc291cmNlWzVdO1xuICBpZiAodmFsdWUpIHtcbiAgICBwYXJ0aWFscyA9IGRhdGFbNV07XG4gICAgZGF0YVs1XSA9IHBhcnRpYWxzID8gY29tcG9zZUFyZ3NSaWdodChwYXJ0aWFscywgdmFsdWUsIHNvdXJjZVs2XSkgOiB2YWx1ZTtcbiAgICBkYXRhWzZdID0gcGFydGlhbHMgPyByZXBsYWNlSG9sZGVycyhkYXRhWzVdLCBQTEFDRUhPTERFUikgOiBzb3VyY2VbNl07XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgYXJnUG9zYCBpZiBhdmFpbGFibGUuXG4gIHZhbHVlID0gc291cmNlWzddO1xuICBpZiAodmFsdWUpIHtcbiAgICBkYXRhWzddID0gdmFsdWU7XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgYXJ5YCBpZiBpdCdzIHNtYWxsZXIuXG4gIGlmIChzcmNCaXRtYXNrICYgV1JBUF9BUllfRkxBRykge1xuICAgIGRhdGFbOF0gPSBkYXRhWzhdID09IG51bGwgPyBzb3VyY2VbOF0gOiBuYXRpdmVNaW4oZGF0YVs4XSwgc291cmNlWzhdKTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBhcml0eWAgaWYgb25lIGlzIG5vdCBwcm92aWRlZC5cbiAgaWYgKGRhdGFbOV0gPT0gbnVsbCkge1xuICAgIGRhdGFbOV0gPSBzb3VyY2VbOV07XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgZnVuY2AgYW5kIG1lcmdlIGJpdG1hc2tzLlxuICBkYXRhWzBdID0gc291cmNlWzBdO1xuICBkYXRhWzFdID0gbmV3Qml0bWFzaztcblxuICByZXR1cm4gZGF0YTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZXJnZURhdGE7XG4iLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5JyksXG4gICAgb3ZlclJlc3QgPSByZXF1aXJlKCcuL19vdmVyUmVzdCcpLFxuICAgIHNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0VG9TdHJpbmcnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVJlc3Q7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJSZXN0O1xuIiwidmFyIGNhc3RTbGljZSA9IHJlcXVpcmUoJy4vX2Nhc3RTbGljZScpLFxuICAgIGhhc1VuaWNvZGUgPSByZXF1aXJlKCcuL19oYXNVbmljb2RlJyksXG4gICAgc3RyaW5nVG9BcnJheSA9IHJlcXVpcmUoJy4vX3N0cmluZ1RvQXJyYXknKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5sb3dlckZpcnN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGBTdHJpbmdgIGNhc2UgbWV0aG9kIHRvIHVzZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhc2VGaXJzdChtZXRob2ROYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgdmFyIHN0clN5bWJvbHMgPSBoYXNVbmljb2RlKHN0cmluZylcbiAgICAgID8gc3RyaW5nVG9BcnJheShzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHZhciBjaHIgPSBzdHJTeW1ib2xzXG4gICAgICA/IHN0clN5bWJvbHNbMF1cbiAgICAgIDogc3RyaW5nLmNoYXJBdCgwKTtcblxuICAgIHZhciB0cmFpbGluZyA9IHN0clN5bWJvbHNcbiAgICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDEpLmpvaW4oJycpXG4gICAgICA6IHN0cmluZy5zbGljZSgxKTtcblxuICAgIHJldHVybiBjaHJbbWV0aG9kTmFtZV0oKSArIHRyYWlsaW5nO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNhc2VGaXJzdDtcbiIsInZhciBiYXNlU2xpY2UgPSByZXF1aXJlKCcuL19iYXNlU2xpY2UnKTtcblxuLyoqXG4gKiBDYXN0cyBgYXJyYXlgIHRvIGEgc2xpY2UgaWYgaXQncyBuZWVkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBzbGljZS5cbiAqL1xuZnVuY3Rpb24gY2FzdFNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kO1xuICByZXR1cm4gKCFzdGFydCAmJiBlbmQgPj0gbGVuZ3RoKSA/IGFycmF5IDogYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0U2xpY2U7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNsaWNlYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gIH1cbiAgZW5kID0gZW5kID4gbGVuZ3RoID8gbGVuZ3RoIDogZW5kO1xuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5ndGg7XG4gIH1cbiAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKChlbmQgLSBzdGFydCkgPj4+IDApO1xuICBzdGFydCA+Pj49IDA7XG5cbiAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNsaWNlO1xuIiwidmFyIGFzY2lpVG9BcnJheSA9IHJlcXVpcmUoJy4vX2FzY2lpVG9BcnJheScpLFxuICAgIGhhc1VuaWNvZGUgPSByZXF1aXJlKCcuL19oYXNVbmljb2RlJyksXG4gICAgdW5pY29kZVRvQXJyYXkgPSByZXF1aXJlKCcuL191bmljb2RlVG9BcnJheScpO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBzdHJpbmdUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gaGFzVW5pY29kZShzdHJpbmcpXG4gICAgPyB1bmljb2RlVG9BcnJheShzdHJpbmcpXG4gICAgOiBhc2NpaVRvQXJyYXkoc3RyaW5nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpbmdUb0FycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBhbiBBU0NJSSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXNjaWlUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnNwbGl0KCcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc2NpaVRvQXJyYXk7XG4iLCIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBc3RyYWwgPSAnWycgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvUmFuZ2UgKyAnXScsXG4gICAgcnNGaXR6ID0gJ1xcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXScsXG4gICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzUmVnaW9uYWwgPSAnKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfScsXG4gICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSByZWdleGVzLiAqL1xudmFyIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JyxcbiAgICByc09wdFZhciA9ICdbJyArIHJzVmFyUmFuZ2UgKyAnXT8nLFxuICAgIHJzT3B0Sm9pbiA9ICcoPzonICsgcnNaV0ogKyAnKD86JyArIFtyc05vbkFzdHJhbCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNPcHRWYXIgKyByZU9wdE1vZCArICcpKicsXG4gICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgIHJzU3ltYm9sID0gJyg/OicgKyBbcnNOb25Bc3RyYWwgKyByc0NvbWJvICsgJz8nLCByc0NvbWJvLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyLCByc0FzdHJhbF0uam9pbignfCcpICsgJyknO1xuXG4vKiogVXNlZCB0byBtYXRjaCBbc3RyaW5nIHN5bWJvbHNdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUpLiAqL1xudmFyIHJlVW5pY29kZSA9IFJlZ0V4cChyc0ZpdHogKyAnKD89JyArIHJzRml0eiArICcpfCcgKyByc1N5bWJvbCArIHJzU2VxLCAnZycpO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgVW5pY29kZSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gdW5pY29kZVRvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2RlKSB8fCBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1bmljb2RlVG9BcnJheTtcbiIsIi8qKlxuICogVmFsaWRhdGVzIGEgVVMgRHJpdmVycyBMaWNlbnNlIGdpdmVuIGEgdHdvIGxldHRlciBhYmJyZXZpYXRpb24gb2YgdGhlIFVTXG4gKiBTdGF0ZSB0byB2YWxpZGF0ZSBpdCBpbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGljZW5zZSBEcml2ZXJzIExpY2Vuc2UgdG8gdmFsaWRhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RhdGUgVHdvIENoYXJhY3RlciBBYmJyZXZpYXRpb24gZm9yIHRoZSBVUyBTdGF0ZSB0byB2YWxpZGF0ZVxuICogdGhlIGxpY2Vuc2UgaW4uXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGxpY2Vuc2UgaXMgdmFsaWQgb3Igbm90LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IGlzVmFsaWRVU0xpY2Vuc2UgfSA9IHJlcXVpcmUoJ0B0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlJylcbiAqXG4gKiBjb25zdCB2YWxpZCA9IGlzVmFsaWRVU0xpY2Vuc2UoJzEyMzQ1NjcnLCAnQUwnKVxuICogY29uc29sZS5sb2codmFsaWQpIC8vIHRydWVcbiAqXG4gKiBAbmFtZSBpc1ZhbGlkVVNMaWNlbnNlXG4gKi9cblxudmFyIGRyaXZlcnNMaWNlbnNlUmVnZXggPSByZXF1aXJlKFwiLi9saWNlbnNlLXJlZ2V4XCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGxpY2Vuc2UsIHN0YXRlKSB7XG4gIGlmICh0eXBlb2YgbGljZW5zZSAhPT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Ygc3RhdGUgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcbiAgdmFyIHZhbGlkYXRvcnMgPSBkcml2ZXJzTGljZW5zZVJlZ2V4W3N0YXRlXTtcbiAgaWYgKCF2YWxpZGF0b3JzKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGNsZWFuTGljZW5zZSA9IGxpY2Vuc2UucmVwbGFjZSgvW1xccy1dL2csICcnKTtcbiAgdmFyIHJlYXNvbnMgPSB2YWxpZGF0b3JzXG4gICAgLmZpbHRlcihmdW5jdGlvbih2YWwpIHtcbiAgICAgIHJldHVybiAhdmFsLnJlZ2V4LnRlc3QoY2xlYW5MaWNlbnNlKTtcbiAgICB9KVxuICAgIC5tYXAoZnVuY3Rpb24odmFsKSB7XG4gICAgICByZXR1cm4gdmFsLmRlc2NyaXB0aW9uO1xuICAgIH0pO1xuICByZXR1cm4gcmVhc29ucy5sZW5ndGggPCB2YWxpZGF0b3JzLmxlbmd0aDtcbn07XG4iLCIvKipcbiAqIFZhbGlkYXRlcyBhIFVTIERyaXZlcnMgTGljZW5zZSBnaXZlbiBhIHR3byBsZXR0ZXIgYWJicmV2aWF0aW9uIG9mIHRoZSBVU1xuICogU3RhdGUgdG8gdmFsaWRhdGUgaXQgaW4uXG4gKiBTaW1pbGFyIHRvIGlzVmFsaWRVU0xpY2Vuc2UgYnV0IHJldHVybnMgYW4gb2JqZWN0IHdpdGggYSAndmFsaWQnXG4gKiBib29sZWFuIHByb3BlcnR5IGZvciB0aGUgdmFsaWRhdGlvbiBpdHNlbGYsIGFzIHdlbGwgYXMgYSByZWFzb25zIGFycmF5IHRoYXRcbiAqIGF0dGVtcHRzIHRvIGV4cGxhaW4gdGhlIHJlc3VsdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsaWNlbnNlIERyaXZlcnMgTGljZW5zZSB0byB2YWxpZGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSBUd28gQ2hhcmFjdGVyIEFiYnJldmlhdGlvbiBmb3IgdGhlIFVTIFN0YXRlIHRvIHZhbGlkYXRlXG4gKiB0aGUgbGljZW5zZSBpbi5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSB2YWxpZGF0aW9uIGFuZCBhIHJlYXNvbnNcbiAqIGFycmF5LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSB9ID0gcmVxdWlyZSgnQHR1cm5haS92YWxpZGF0ZS11cy1kcml2ZXJzLWxpY2Vuc2UnKVxuICpcbiAqIGNvbnN0IHZhbGlkTGljZW5zZSA9IHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSgnMTIzNDU2NycsICdBTCcpXG4gKiBjb25zb2xlLmxvZyh2YWxpZExpY2Vuc2UudmFsaWQpIC8vIHRydWVcbiAqIGNvbnN0IHZhbGlkTGljZW5zZSA9IHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSgnMTIzNDU2NzgnLCAnQUwnKSAvL1xuICogY29uc29sZS5sb2codmFsaWRMaWNlbnNlLnJlYXNvbnMpIC8vIFsnTGljZW5zZSBtdXN0IGJlIDEtNyBudW1iZXJzJ11cbiAqXG4gKiBAbmFtZSB2YWxpZGF0ZVVTRHJpdmVyc0xpY2Vuc2VcbiAqL1xuXG52YXIgZHJpdmVyc0xpY2Vuc2VSZWdleCA9IHJlcXVpcmUoXCIuL2xpY2Vuc2UtcmVnZXhcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obGljZW5zZSwgc3RhdGUpIHtcbiAgaWYgKHR5cGVvZiBsaWNlbnNlICE9PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBzdGF0ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgcmVhc29uczogWydMaWNlbnNlIGFuZCBTdGF0ZSBtdXN0IGJlIFN0cmluZ3MnXSB9O1xuICB9XG4gIHZhciB2YWxpZGF0b3JzID0gZHJpdmVyc0xpY2Vuc2VSZWdleFtzdGF0ZV07XG4gIGlmICghdmFsaWRhdG9ycykgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCByZWFzb25zOiBbJ05vdCBhIHZhbGlkIFVTIFN0YXRlJ10gfTtcbiAgY29uc3QgY2xlYW5MaWNlbnNlID0gbGljZW5zZS5yZXBsYWNlKC9bXFxzLV0vZywgJycpO1xuICB2YXIgcmVhc29ucyA9IHZhbGlkYXRvcnNcbiAgICAuZmlsdGVyKGZ1bmN0aW9uKHZhbCkge1xuICAgICAgcmV0dXJuICF2YWwucmVnZXgudGVzdChjbGVhbkxpY2Vuc2UpO1xuICAgIH0pXG4gICAgLm1hcChmdW5jdGlvbih2YWwpIHtcbiAgICAgIHJldHVybiB2YWwuZGVzY3JpcHRpb247XG4gICAgfSk7XG4gIHJldHVybiB7IHZhbGlkOiByZWFzb25zLmxlbmd0aCA8IHZhbGlkYXRvcnMubGVuZ3RoLCByZWFzb25zIH1cbn07XG4iLCIvKipcbiAqIExpc3Qgb2Ygc3VwcG9ydGVkIFVTIFN0YXRlcyBhcyBhbiBhcnJheVxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IHN1cHBvcnRlZFN0YXRlcyB9ID0gcmVxdWlyZSgnQHR1cm5haS92YWxpZGF0ZS11cy1kcml2ZXJzLWxpY2Vuc2UnKVxuICpcbiAqIGNvbnN0IGlzU3VwcG9ydGVkID0gY3VycmVudFN0YXRlcy5pbmNsdWRlcygnSUwnKVxuICogY29uc29sZS5sb2coaXNTdXBwb3J0ZWQpIC8vIHRydWVcbiAqXG4gKiBAbmFtZSBzdXBwb3J0ZWRTdGF0ZXNcbiAqL1xuXG52YXIgZHJpdmVyc0xpY2Vuc2VSZWdleCA9IHJlcXVpcmUoXCIuL2xpY2Vuc2UtcmVnZXhcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMoZHJpdmVyc0xpY2Vuc2VSZWdleCk7XG4iLCJ2YXIgYmFzZVJhbmdlID0gcmVxdWlyZSgnLi9fYmFzZVJhbmdlJyksXG4gICAgaXNJdGVyYXRlZUNhbGwgPSByZXF1aXJlKCcuL19pc0l0ZXJhdGVlQ2FsbCcpLFxuICAgIHRvRmluaXRlID0gcmVxdWlyZSgnLi90b0Zpbml0ZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgXy5yYW5nZWAgb3IgYF8ucmFuZ2VSaWdodGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmFuZ2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJhbmdlKGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIGlmIChzdGVwICYmIHR5cGVvZiBzdGVwICE9ICdudW1iZXInICYmIGlzSXRlcmF0ZWVDYWxsKHN0YXJ0LCBlbmQsIHN0ZXApKSB7XG4gICAgICBlbmQgPSBzdGVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBFbnN1cmUgdGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gICAgc3RhcnQgPSB0b0Zpbml0ZShzdGFydCk7XG4gICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmQgPSBzdGFydDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kID0gdG9GaW5pdGUoZW5kKTtcbiAgICB9XG4gICAgc3RlcCA9IHN0ZXAgPT09IHVuZGVmaW5lZCA/IChzdGFydCA8IGVuZCA/IDEgOiAtMSkgOiB0b0Zpbml0ZShzdGVwKTtcbiAgICByZXR1cm4gYmFzZVJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXAsIGZyb21SaWdodCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUmFuZ2U7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlQ2VpbCA9IE1hdGguY2VpbCxcbiAgICBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yYW5nZWAgYW5kIGBfLnJhbmdlUmlnaHRgIHdoaWNoIGRvZXNuJ3RcbiAqIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwIFRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmdlIG9mIG51bWJlcnMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VSYW5nZShzdGFydCwgZW5kLCBzdGVwLCBmcm9tUmlnaHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBuYXRpdmVNYXgobmF0aXZlQ2VpbCgoZW5kIC0gc3RhcnQpIC8gKHN0ZXAgfHwgMSkpLCAwKSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgcmVzdWx0W2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdID0gc3RhcnQ7XG4gICAgc3RhcnQgKz0gc3RlcDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VSYW5nZTtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQgeyBidG9hIH0gZnJvbSBcIkJhc2U2NFwiO1xuXG4vKipcbiAqIE1hcHMgSFRUUCBzdGF0dXMgdG8gYXBpc2F1Y2Utc3R5bGUgYHByb2JsZW1gIHN0cmluZ3MgZm9yIGNvbXBhdGliaWxpdHkuXG4gKi9cbmZ1bmN0aW9uIHByb2JsZW1Gcm9tU3RhdHVzKHN0YXR1cykge1xuICBpZiAoc3RhdHVzID49IDQwMCAmJiBzdGF0dXMgPD0gNDk5KSByZXR1cm4gXCJDTElFTlRfRVJST1JcIjtcbiAgaWYgKHN0YXR1cyA+PSA1MDApIHJldHVybiBcIlNFUlZFUl9FUlJPUlwiO1xuICByZXR1cm4gXCJVTktOT1dOX0VSUk9SXCI7XG59XG5cbi8qKlxuICogQXhpb3MgaW5zdGFuY2Ugd3JhcHBlZCB0byBtYXRjaCBhcGlzYXVjZSByZXNwb25zZSBzaGFwZSB7IG9rLCBkYXRhLCBzdGF0dXMsIHByb2JsZW0sIC4uLiB9XG4gKiBzbyBleGlzdGluZyBjYWxsZXJzIG9mIEJhc2VBUEkga2VlcCB3b3JraW5nLlxuICovXG5mdW5jdGlvbiBjcmVhdGVBcGlzYXVjZUNvbXBhdGlibGVDbGllbnQoeyBiYXNlVVJMLCBoZWFkZXJzOiBpbml0aWFsSGVhZGVycyA9IHt9IH0pIHtcbiAgY29uc3QgaW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoe1xuICAgIGJhc2VVUkwsXG4gICAgaGVhZGVyczoge1xuICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIC4uLmluaXRpYWxIZWFkZXJzXG4gICAgfSxcbiAgICB2YWxpZGF0ZVN0YXR1czogKCkgPT4gdHJ1ZVxuICB9KTtcblxuICBpbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKFxuICAgIHJlc3BvbnNlID0+ICh7XG4gICAgICBvazogcmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXMgPCAzMDAsXG4gICAgICBkYXRhOiByZXNwb25zZS5kYXRhLFxuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnOiByZXNwb25zZS5jb25maWcsXG4gICAgICBwcm9ibGVtOlxuICAgICAgICByZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1cyA8IDMwMFxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogcHJvYmxlbUZyb21TdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSxcbiAgICAgIG9yaWdpbmFsRXJyb3I6IG51bGxcbiAgICB9KSxcbiAgICBlcnJvciA9PiAoe1xuICAgICAgb2s6IGZhbHNlLFxuICAgICAgcHJvYmxlbTpcbiAgICAgICAgZXJyb3IuY29kZSA9PT0gXCJFQ09OTkFCT1JURURcIlxuICAgICAgICAgID8gXCJUSU1FT1VUX0VSUk9SXCJcbiAgICAgICAgICA6IFwiTkVUV09SS19FUlJPUlwiLFxuICAgICAgZGF0YTogbnVsbCxcbiAgICAgIHN0YXR1czogbnVsbCxcbiAgICAgIGhlYWRlcnM6IG51bGwsXG4gICAgICBjb25maWc6IGVycm9yLmNvbmZpZyxcbiAgICAgIG9yaWdpbmFsRXJyb3I6IGVycm9yXG4gICAgfSlcbiAgKTtcblxuICBjb25zdCBjbGllbnQgPSB7XG4gICAgZ2V0QmFzZVVSTDogKCkgPT4gaW5zdGFuY2UuZGVmYXVsdHMuYmFzZVVSTCB8fCBcIlwiLFxuICAgIHNldEhlYWRlcnM6IG5ld0hlYWRlcnMgPT4ge1xuICAgICAgT2JqZWN0LmFzc2lnbihpbnN0YW5jZS5kZWZhdWx0cy5oZWFkZXJzLmNvbW1vbiwgbmV3SGVhZGVycyk7XG4gICAgfSxcbiAgICBnZXQ6ICh1cmwsIHBhcmFtcywgY29uZmlnKSA9PlxuICAgICAgaW5zdGFuY2UuZ2V0KHVybCwge1xuICAgICAgICAuLi5jb25maWcsXG4gICAgICAgIHBhcmFtczogcGFyYW1zID09IG51bGwgPyB1bmRlZmluZWQgOiBwYXJhbXNcbiAgICAgIH0pLFxuICAgIHBvc3Q6ICh1cmwsIGRhdGEsIGNvbmZpZykgPT4gaW5zdGFuY2UucG9zdCh1cmwsIGRhdGEsIGNvbmZpZyksXG4gICAgcHV0OiAodXJsLCBkYXRhLCBjb25maWcpID0+IGluc3RhbmNlLnB1dCh1cmwsIGRhdGEsIGNvbmZpZylcbiAgfTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xpZW50LCBcImhlYWRlcnNcIiwge1xuICAgIGdldDogKCkgPT4gaW5zdGFuY2UuZGVmYXVsdHMuaGVhZGVycy5jb21tb25cbiAgfSk7XG5cbiAgcmV0dXJuIGNsaWVudDtcbn1cblxuY2xhc3MgQmFzZUFQSSB7XG4gIGNvbnN0cnVjdG9yKGJhc2VVUkwsIHR3aWxpb0tleSkge1xuICAgIGlmIChiYXNlVVJMKSB7XG4gICAgICB0aGlzLmFwaSA9IGNyZWF0ZUFwaXNhdWNlQ29tcGF0aWJsZUNsaWVudCh7XG4gICAgICAgIGJhc2VVUkwsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodHdpbGlvS2V5KSB7XG4gICAgICB0aGlzLnR3aWxpb0tleSA9IHR3aWxpb0tleTtcbiAgICB9XG4gIH1cbiAgc2V0VG9rZW4odG9rZW4pIHtcbiAgICBpZiAoIXRva2VuKSByZXR1cm4gdGhpcztcbiAgICB0aGlzLmFwaS5zZXRIZWFkZXJzKHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgc2V0U3RhdHVzUHJlZmVyZW5jZShzdGF0dXMpIHtcbiAgICBpZiAoIXN0YXR1cykgcmV0dXJuIHRoaXM7XG4gICAgdGhpcy5hcGkuc2V0SGVhZGVycyh7IFByZWZlcjogYHN0YXR1cz0ke3N0YXR1c31gIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGFwcHJvdmVXb3JrZXIgPSAoaWQsIHBhcmFtcykgPT5cbiAgICB0aGlzLmFwaS5wdXQoYC9wYXJ0bmVycy9tZS93b3JrZXJzLyR7aWR9L2FwcHJvdmVgLCBwYXJhbXMpO1xuICB3aXRoZHJhd1dvcmtlciA9IChpZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoYC9wYXJ0bmVycy9tZS93b3JrZXJzLyR7aWR9L3dpdGhkcmF3YCwgcGFyYW1zKTtcbiAgcmVqZWN0V29ya2VyID0gKGlkLCBwYXJhbXMpID0+XG4gICAgdGhpcy5hcGkucHV0KGAvcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS9yZWplY3RgLCBwYXJhbXMpO1xuICBnZXRNZW1iZXIgPSAoKSA9PiB0aGlzLmFwaS5nZXQoXCIvcGFydG5lcnMvbWVcIik7XG4gIGdldFNldHRpbmdzID0gKCkgPT4gdGhpcy5hcGkuZ2V0KFwiL3BhcnRuZXJzL3NldHRpbmdzXCIpO1xuICBnZXRXb3JrZXJzID0gcGFyYW1zID0+XG4gICAgdGhpcy5hcGkuZ2V0KGAvcGFydG5lcnMvbWUvd29ya2Vycz9xdWVyeT0ke0pTT04uc3RyaW5naWZ5KHBhcmFtcyl9YCk7XG4gIGdldFBlbmRpbmdXb3JrZXJzID0gcGFyYW1zID0+XG4gICAgdGhpcy5hcGkuZ2V0KGAvY29ob3J0L2NhbmRpZGF0ZXM/cXVlcnk9JHtKU09OLnN0cmluZ2lmeShwYXJhbXMpfWApO1xuICBnZXRXb3JrZXIgPSBpZCA9PiB0aGlzLmFwaS5nZXQoYC9wYXJ0bmVycy9tZS93b3JrZXJzLyR7aWR9P2Z1bGw9ZmFsc2VgKTtcbiAgY2hlY2tXb3JrZXIgPSBwYXJhbXMgPT4gdGhpcy5hcGkucG9zdChcIi9wYXJ0bmVycy93b3JrZXJzXCIsIHBhcmFtcyk7XG4gIHZhbGlkYXRlUGhvbmUgPSBwaG9uZSA9PlxuICAgIHRoaXMuYXBpLmdldChgUGhvbmVOdW1iZXJzLyR7cGhvbmV9P1R5cGU9Y2FycmllciZDb3VudHJ5Q29kZT1VU2AsIG51bGwsIHtcbiAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogYEJhc2ljICR7YnRvYSh0aGlzLnR3aWxpb0tleSB8fCBcIlwiKX1gIH1cbiAgICB9KTtcbiAgdmFsaWRhdGVFbWFpbCA9IGVtYWlsID0+XG4gICAgdGhpcy5hcGkuZ2V0KGAvdmVyaWZ5X2VtYWlsP2VtYWlsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGVtYWlsKX1gKTtcbiAgdmFsaWRhdGVTU04gPSAoZW1haWxfaWQsIHNzbikgPT5cbiAgICB0aGlzLmFwaS5wb3N0KGAvY2FuZGlkYXRlX2NvbnNlbnRfZW1haWwvY2FuZGlkYXRlLyR7ZW1haWxfaWR9L3ZhbGlkYXRlYCwge1xuICAgICAgc3NuXG4gICAgfSk7XG4gIHZhbGlkYXRlQ2FuZGlkYXRlRW1haWwgPSAoZW1haWxfaWQsIGVtYWlsKSA9PlxuICAgIHRoaXMuYXBpLmdldChcbiAgICAgIGAvY2FuZGlkYXRlX3ZlcmlmeV9lbWFpbC8ke2VtYWlsX2lkfT9lbWFpbD0ke2VuY29kZVVSSUNvbXBvbmVudChlbWFpbCl9YFxuICAgICk7XG4gIGdldENhbmRpZGF0ZURhdGEgPSBlbWFpbF9pZCA9PlxuICAgIHRoaXMuYXBpLmdldChgL2NhbmRpZGF0ZV9jb25zZW50X2VtYWlsL2NhbmRpZGF0ZS8ke2VtYWlsX2lkfWApO1xuICBnZXRJbnRlcmVzdHMgPSAoKSA9PiB0aGlzLmFwaS5nZXQoXCIvaW50ZXJlc3RzXCIpO1xuICBnZXRUcmFuc3BvcnRzID0gKCkgPT4gdGhpcy5hcGkuZ2V0KFwiL3RyYW5zcG9ydHNcIik7XG4gIGdldFBheW1ldE1ldGhvZCA9ICgpID0+IHRoaXMuYXBpLmdldChcIi9wYXltZW50X3NldHRpbmdzL3BhcnRuZXJfbWV0aG9kc1wiKTtcbiAgZ2V0QmFja2dyb3VuZFJlcG9ydCA9IChlbWFpbF9pZCwgdG9rZW4pID0+XG4gICAgdGhpcy5hcGkuZ2V0KFxuICAgICAgYC9jYW5kaWRhdGVfY29uc2VudF9lbWFpbC9jYW5kaWRhdGUvJHtlbWFpbF9pZH0vcmVwb3J0P3Rva2VuPSR7dG9rZW59YFxuICAgICk7XG4gIHByb3ZpZGVDYW5kaWRhdGVDb25zZW50ID0gKGVtYWlsX2lkLCBwYXJhbXMpID0+XG4gICAgdGhpcy5hcGkucG9zdChgL2NhbmRpZGF0ZV9jb25zZW50X2VtYWlsL2NhbmRpZGF0ZS8ke2VtYWlsX2lkfWAsIHBhcmFtcyk7XG4gIHByb3ZpZGVDYW5kaWRhdGVDb25zZW50QXN5bmMgPSAoZW1haWxfaWQsIHBhcmFtcykgPT5cbiAgICB0aGlzLmFwaS5wb3N0KFxuICAgICAgYC9jYW5kaWRhdGVfY29uc2VudF9lbWFpbC9jYW5kaWRhdGUvJHtlbWFpbF9pZH0vYXN5bmNgLFxuICAgICAgcGFyYW1zXG4gICAgKTtcbiAgZ2V0VHJpYWxTdGF0dXMgPSAoKSA9PiB0aGlzLmFwaS5nZXQoXCIvb3JnYW5pemF0aW9ucy90cmlhbF9zdGF0dXNcIik7XG4gIG5ld0NhbmRpZGF0ZSA9ICgpID0+IHRoaXMuYXBpLmdldChcIi9vcmdhbml6YXRpb25zL25ld19jYW5kaWRhdGVcIik7XG4gIGdldFRlcm1zID0gKCkgPT4gdGhpcy5hcGkuZ2V0KFwiL3BhcnRuZXJzL3Rlcm1zXCIpO1xuICBjb25zZW50ID0gcGFyYW1zID0+IHRoaXMuYXBpLnBvc3QoXCIvcGFydG5lcnMvbWUvY29uc2VudFwiLCBwYXJhbXMpO1xuICBhcHBseSA9ICh7IHBhcnRuZXJfbmFtZSwgcGFydG5lcl9pZCB9KSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoYC9jYW5kaWRhdGVfY29uc2VudF9lbWFpbC8ke3BhcnRuZXJfbmFtZX0vJHtwYXJ0bmVyX2lkfWAsIHt9KTtcbiAgYXNzZW50ID0gKGVtYWlsX2lkLCBkYXRhKSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoXG4gICAgICBgL2NhbmRpZGF0ZV9jb25zZW50X2VtYWlsL2NhbmRpZGF0ZS8ke2VtYWlsX2lkfS9hc3NlbnRgLFxuICAgICAgZGF0YVxuICAgICk7XG4gIGdldENvaG9ydENvdW50ID0gcGFyYW1zID0+XG4gICAgdGhpcy5hcGkuZ2V0KGAvY29ob3J0L2NvdW50P3F1ZXJ5PSR7SlNPTi5zdHJpbmdpZnkocGFyYW1zKX1gKTtcbiAgY3JlYXRlQ29ob3J0ID0gcGFyYW1zID0+IHRoaXMuYXBpLnBvc3QoXCIvY29ob3J0XCIsIHBhcmFtcyk7XG4gIHJlcXVlc3RDb2hvcnRXb3JrZXJzID0gKGNvaG9ydF9pZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoYC9jb2hvcnQvJHtjb2hvcnRfaWR9L3JlcXVlc3RgLCBwYXJhbXMpO1xuICBnZXROb3RlcyA9IGlkID0+IHRoaXMuYXBpLmdldChgcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS9ub3Rlc2ApO1xuICBzYXZlTm90ZSA9IChpZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnB1dChgcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS9ub3Rlc2AsIHBhcmFtcyk7XG4gIHJlc2VuZEVtYWlsID0gaWQgPT5cbiAgICB0aGlzLmFwaS5wb3N0KGBwYXJ0bmVycy9tZS93b3JrZXJzLyR7aWR9L2VtYWlsL2NvbnNlbnQvcmVzZW5kYCk7XG4gIHBvc3RTZXR0aW5ncyA9ICh1cmwsIHBhcmFtcykgPT4gdGhpcy5hcGkucG9zdCh1cmwsIHBhcmFtcyk7XG4gIGJ0b2FUZXN0ID0gc3RyaW5nID0+IGJ0b2Eoc3RyaW5nKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQmFzZUFQSTtcbiIsIi8vVHVybiBQcmltYXJ5IFBhbGV0dGVcbmV4cG9ydCBjb25zdCBwcmltYXJ5ID0gXCIjMkQzMDQ3XCI7IC8vQ29vbEdyYXkgb3IgU3BhY2VDYWRldFxuZXhwb3J0IGNvbnN0IHNlY29uZGFyeSA9IFwiIzAwRDlDRFwiOyAvL1R1cnF1b2lzZVxuZXhwb3J0IGNvbnN0IGVtZXJhbGQgPSBcIiMwZWQwNjdcIjtcbmV4cG9ydCBjb25zdCB0YXJ0T3JhbmdlID0gXCIjZmI0ZDQ5XCI7XG5leHBvcnQgY29uc3QgeWVsbG93T3JhbmdlID0gXCIjZmFhNzNjXCI7XG5cbi8vVHVybiBHcmV5IFBhbGV0dGVcbmV4cG9ydCBjb25zdCBzbGF0ZUdyYXkgPSBcIiM1ZjdkOTVcIjtcbmV4cG9ydCBjb25zdCBjYWRldEJsdWUgPSBcIiM5YmIxYzhcIjtcbmV4cG9ydCBjb25zdCBwZXJpd2lua2xlID0gXCIjYmZjZGRkXCI7XG5leHBvcnQgY29uc3QgYWxpY2VCbHVlID0gXCIjZTFlOGYzXCI7XG5leHBvcnQgY29uc3Qgc21va2VXaGl0ZSA9IFwiI2Y3ZjlmY1wiO1xuXG4vL1R1cm4gQWxlcnRzIFBhbGV0dGVcbmV4cG9ydCBjb25zdCBhbGVydDAgPSBzbGF0ZUdyYXk7XG5leHBvcnQgY29uc3QgYWxlcnQxID0gZW1lcmFsZDtcbmV4cG9ydCBjb25zdCBhbGVydDIgPSB0YXJ0T3JhbmdlO1xuZXhwb3J0IGNvbnN0IGFsZXJ0MyA9IHllbGxvd09yYW5nZTtcbmV4cG9ydCBjb25zdCBjZXJ1bGVhbkJsdWUgPSBcIiM0MzU3YWRcIjtcblxuLy9UdXJuIFNlY29uZGFyeSBQYWxldHRlIDFcbmV4cG9ydCBjb25zdCBwZWFjaCA9IFwiI2Y5Y2I5Y1wiO1xuZXhwb3J0IGNvbnN0IGJhYnlQaW5rID0gXCIjZjRjY2NjXCI7XG5leHBvcnQgY29uc3Qgc3BhbmlzaFBpbmsgPSBcIiNlNmI4YWZcIjtcbmV4cG9ydCBjb25zdCBiZWF1Qmx1ZSA9IFwiI2NmZTJmM1wiO1xuZXhwb3J0IGNvbnN0IGN1bHR1cmVkID0gXCIjZTNlOWVkXCI7XG5cbi8vVHVybiBTZWNvbmRhcnkgUGFsZXR0ZSAyXG5leHBvcnQgY29uc3QgYmx1ZUJlbGwgPSBcIiNiNGE3ZDZcIjtcbmV4cG9ydCBjb25zdCBiYWJ5Qmx1ZUV5ZXMgPSBcIiM5ZmM1ZThcIjtcbmV4cG9ydCBjb25zdCBwb3dkZXJCbHVlID0gXCIjYjdlY2VjXCI7XG5leHBvcnQgY29uc3QgaG9uZXlEZXcgPSBcIiNkOWVhZDNcIjtcbmV4cG9ydCBjb25zdCBidWZmID0gXCIjZmZlNTk5XCI7XG5cbi8vT3RoZXJzXG5leHBvcnQgY29uc3QgYmxhY2sgPSBcIiMwMDBcIjtcbmV4cG9ydCBjb25zdCB3aGl0ZSA9IFwiI2ZmZlwiO1xuXG4vL05vdGljZSBjb2xvcnNcbmV4cG9ydCBjb25zdCBub3RpY2VNdXRlZCA9IHNsYXRlR3JheTtcbmV4cG9ydCBjb25zdCBub3RpY2VFcnJvciA9IFwiI2ZmNmM2OVwiO1xuZXhwb3J0IGNvbnN0IG5vdGljZVdhcm5pbmcgPSBcIiNmYWEwM2NcIjtcbmV4cG9ydCBjb25zdCBub3RpY2VTdWNjZXNzID0gXCIjMTNjMDYzXCI7XG5leHBvcnQgY29uc3Qgbm90aWNlSW5mbyA9IHNsYXRlR3JheTtcbiIsImNvbnN0IHBhcnNlUHl0aG9uRGF0ZSA9IGRhdGUgPT4ge1xuICBpZiAoIWlzTmFOKHBhcnNlSW50KGRhdGUsIDEwKSkpIHtcbiAgICBjb25zdCBkID0gbmV3IERhdGUoZGF0ZSAqIDEwMDApO1xuICAgIGNvbnN0IHRpbWUgPSBkLmdldFRpbWUoKTtcbiAgICBpZiAodGltZSkge1xuICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKHRpbWUgKyBkLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MCAqIDEwMDApO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZC5nZXRUaW1lem9uZU9mZnNldCgpIC8gNjA7XG4gICAgICBjb25zdCBob3VycyA9IGQuZ2V0SG91cnMoKTtcbiAgICAgIG5ld0RhdGUuc2V0SG91cnMoaG91cnMgLSBvZmZzZXQpO1xuICAgICAgcmV0dXJuIG5ld0RhdGU7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcGFyc2VQeXRob25EYXRlO1xuIiwiaW1wb3J0IHBhcnNlUHl0aG9uRGF0ZSBmcm9tIFwiLi9wYXJzZS1weXRob24tZGF0ZVwiO1xuXG5jb25zdCBmb3JtYXREYXRlID0gZGF0ZSA9PiB7XG4gIGNvbnN0IHBhcnNlZERhdGUgPSBwYXJzZVB5dGhvbkRhdGUoZGF0ZSk7XG4gIGlmICghcGFyc2VkRGF0ZSkgcmV0dXJuIFwiTi9BXCI7XG4gIHJldHVybiBgJHtwYXJzZWREYXRlLmdldE1vbnRoKCkgK1xuICAgIDF9LyR7cGFyc2VkRGF0ZS5nZXREYXRlKCl9LyR7cGFyc2VkRGF0ZS5nZXRGdWxsWWVhcigpfWA7XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0RGF0ZTtcbiIsImNvbnN0IGZvcm1hdEVtYWlsID0gZW1haWwgPT4ge1xuICBpZiAodHlwZW9mIGVtYWlsICE9PSBcInN0cmluZ1wiKSByZXR1cm4gXCJcIjtcbiAgcmV0dXJuIGVtYWlsLnJlcGxhY2UoL1xccysvZywgXCJcIik7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmb3JtYXRFbWFpbDtcbiIsImNvbnN0IGZvcm1hdE5hbWUgPSBuYW1lID0+IHtcbiAgaWYgKHR5cGVvZiBuYW1lICE9PSBcInN0cmluZ1wiKSByZXR1cm4gXCJcIjtcbiAgcmV0dXJuIG5hbWUucmVwbGFjZSgvXFxzXFxzKy9nLCBcIiBcIik7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmb3JtYXROYW1lO1xuIiwiY29uc3QgZm9ybWF0UGhvbmUgPSAocGhvbmUsIGVuY3J5cHRlZCA9IGZhbHNlKSA9PiB7XG4gIGlmICh0eXBlb2YgcGhvbmUgIT09IFwic3RyaW5nXCIpIHJldHVybiBcIk4vQVwiO1xuICBsZXQgcGhvbmVOdW1iZXIgPSBlbmNyeXB0ZWRcbiAgICA/IHBob25lXG4gICAgOiBwaG9uZS5yZXBsYWNlKC9cXEQvZywgXCJcIikuc3Vic3RyaW5nKDAsIDExKTtcbiAgbGV0IGFyZWFDb2RlO1xuICBpZiAocGhvbmVOdW1iZXIubGVuZ3RoIDwgMTApIHJldHVybiBwaG9uZU51bWJlcjtcbiAgaWYgKHBob25lTnVtYmVyLmxlbmd0aCA+IDEwKSB7XG4gICAgYXJlYUNvZGUgPSBwaG9uZU51bWJlclswXTtcbiAgICBwaG9uZU51bWJlciA9IHBob25lTnVtYmVyLnN1YnN0cmluZygxLCAxMSk7XG4gIH1cbiAgcGhvbmVOdW1iZXIgPSBwaG9uZU51bWJlci5tYXRjaCgvLnsxLDN9L2cpO1xuICByZXR1cm4gcmVuZGVyUGhvbmUoeyBwaG9uZTogcGhvbmVOdW1iZXIsIGVuY3J5cHRlZCwgYXJlYUNvZGUgfSk7XG59O1xuXG5jb25zdCByZW5kZXJQaG9uZSA9ICh7IHBob25lLCBlbmNyeXB0ZWQsIGFyZWFDb2RlIH0pID0+IHtcbiAgbGV0IHBob25lTnVtYmVyID0gZW5jcnlwdGVkXG4gICAgPyBgKCR7cGhvbmVbMF19KSAke3Bob25lWzFdfSAke3Bob25lWzJdfSR7cGhvbmVbM119YFxuICAgIDogYCgke3Bob25lWzBdfSkgJHtwaG9uZVsxXX0tJHtwaG9uZVsyXX0ke3Bob25lWzNdfWA7XG4gIHBob25lTnVtYmVyID0gYXJlYUNvZGUgPyBgJHthcmVhQ29kZX0gJHtwaG9uZU51bWJlcn1gIDogcGhvbmVOdW1iZXI7XG4gIHJldHVybiBwaG9uZU51bWJlcjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdFBob25lO1xuIiwiY29uc3QgZm9ybWF0U1NOID0gc3NuID0+IHtcbiAgaWYgKHR5cGVvZiBzc24gIT09IFwic3RyaW5nXCIpIHJldHVybiBcIk4vQVwiO1xuICBjb25zdCBzc25OdW1iZXIgPSBzc24ucmVwbGFjZSgvXFxEL2csIFwiXCIpLnN1YnN0cmluZygwLCA5KTtcbiAgaWYgKHNzbk51bWJlci5sZW5ndGggPCA5KSByZXR1cm4gc3NuTnVtYmVyO1xuICByZXR1cm4gYCR7c3NuTnVtYmVyLnN1YnN0cmluZygwLCAzKX0tJHtzc25OdW1iZXIuc3Vic3RyaW5nKFxuICAgIDMsXG4gICAgNVxuICApfS0ke3Nzbk51bWJlci5zdWJzdHJpbmcoNSwgOSl9YDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdFNTTjtcbiIsImNvbnN0IGZvcm1hdFppcGNvZGUgPSB6aXBjb2RlID0+IHtcbiAgaWYgKHR5cGVvZiB6aXBjb2RlICE9PSBcInN0cmluZ1wiKSByZXR1cm4gXCJcIjtcbiAgcmV0dXJuIHppcGNvZGUucmVwbGFjZSgvXFxEL2csIFwiXCIpLnN1YnN0cmluZygwLCA1KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdFppcGNvZGU7XG4iLCJjb25zdCBnZXRSZWplY3RNZXNzYWdlID0gcGFydG5lcl90eXBlID0+IHtcbiAgaWYgKCFbXCJSSVNLX01BTkFHRU1FTlRcIiwgXCJGQ1JBX0VcIiwgXCJGQ1JBX05cIiwgXCJGQ1JBXCJdLmluY2x1ZGVzKHBhcnRuZXJfdHlwZSkpXG4gICAgcmV0dXJuIFwiUmVqZWN0XCI7XG4gIGNvbnN0IHJlamVjdE1lc3NhZ2VzID0ge1xuICAgIFJJU0tfTUFOQUdFTUVOVDogXCJSZWplY3RcIixcbiAgICBGQ1JBOiBcIlByZS1BZHZlcnNlIEFjdGlvblwiLFxuICAgIEZDUkFfRTogXCJQcmUtQWR2ZXJzZSBBY3Rpb25cIixcbiAgICBGQ1JBX046IFwiQWR2ZXJzZSBBY3Rpb25cIlxuICB9O1xuICByZXR1cm4gcmVqZWN0TWVzc2FnZXNbcGFydG5lcl90eXBlXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGdldFJlamVjdE1lc3NhZ2U7XG4iLCJleHBvcnQgY29uc3QgZ2V0U3RhdHVzID0gc3RhdHVzID0+IHtcbiAgY29uc3Qgc3RhdHVzTWFwID0ge1xuICAgIHJldmlldzogXCJyZXZpZXdpbmdcIixcbiAgICBwZW5kaW5nOiBcImNvbnNpZGVyXCIsXG4gICAgXCJyZXZpZXdfX2lkZW50aXR5XCI6IFwidmVyaWZ5aW5nXCIsXG4gICAgXCJyZXZpZXdfX212clwiOiBcIkNvbXBsaWFuY2UgUmV2aWV3XCIsXG4gICAgXCJyZXZpZXdfX3NvXCI6IFwiQ29tcGxpYW5jZSBSZXZpZXdcIixcbiAgICBcInJldmlld19fcWFcIjogXCJDb21wbGlhbmNlIFJldmlld1wiLFxuICAgIGluaXRpYXRlZDogXCJTdG9yZWRcIlxuICB9O1xuXG4gIHJldHVybiBzdGF0dXNNYXBbc3RhdHVzXSB8fCBzdGF0dXM7XG59O1xuIiwiY29uc3QgaXNEYXRlID0gdmFsdWUgPT4ge1xuICBpZiAoaXNOYU4ocGFyc2VJbnQodmFsdWUsIDEwKSkpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlICogMTAwMCk7XG4gIGNvbnN0IHJpZ2h0Tm93ID0gbmV3IERhdGUoKTtcbiAgaWYgKGRhdGUgPiByaWdodE5vdykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZGF0ZS5nZXRZZWFyKCkgPiAxMDA7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpc0RhdGU7XG4iLCJjb25zdCBpc09iamVjdCA9IGRhdGEgPT4gISFkYXRhICYmIGRhdGEuY29uc3RydWN0b3IgPT09IE9iamVjdDtcblxuZXhwb3J0IGRlZmF1bHQgaXNPYmplY3Q7XG4iLCJjb25zdCBpc1VybCA9IHVybFN0cmluZyA9PiB7XG4gIGNvbnN0IHJlZ2V4cCA9IC8oZnRwfGh0dHB8aHR0cHMpOlxcL1xcLyhcXHcrOnswLDF9XFx3KkApPyhcXFMrKSg6WzAtOV0rKT8oXFwvfFxcLyhbXFx3IyE6Lj8rPSYlQCFcXC0vXSkpPy87XG4gIHJldHVybiByZWdleHAudGVzdCh1cmxTdHJpbmcpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaXNVcmw7XG4iLCJjb25zdCB0ZXJtcyA9IFtcIlR1cm4gVGVjaG5vbG9naWVzIEluYy5cIiwgXCJbQ09NUEFOWV1cIl07XG5jb25zdCBsZWdhbFJlcGxhY2UgPSAob3JpZ2luYWwgPSBcIlwiLCByZXBsYWNlbWVudCA9IFwiXCIpID0+IHtcbiAgaWYgKHR5cGVvZiBvcmlnaW5hbCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIFwiXCI7XG4gIGxldCByZXR1cm5WYWwgPSBvcmlnaW5hbDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXJtcy5sZW5ndGg7IGkrKykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGx1c3BsdXNcbiAgICByZXR1cm5WYWwgPSByZXR1cm5WYWwucmVwbGFjZSh0ZXJtc1tpXSwgcmVwbGFjZW1lbnQpO1xuICB9XG4gIHJldHVybiByZXR1cm5WYWw7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsZWdhbFJlcGxhY2U7XG4iLCJjb25zdCBtYXNrTmFtZSA9IG5hbWUgPT5cbiAgdHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIgJiYgbmFtZS5sZW5ndGggPiAwID8gYCR7bmFtZS5zbGljZSgwLCAxKX0uYCA6IG5hbWU7XG5cbmV4cG9ydCBkZWZhdWx0IG1hc2tOYW1lO1xuIiwiaW1wb3J0IGlzT2JqZWN0IGZyb20gXCIuL2lzLW9iamVjdFwiO1xuXG5jb25zdCBvYmplY3RUb1F1ZXJ5ID0gcXVlcnkgPT4ge1xuICBpZiAoIWlzT2JqZWN0KHF1ZXJ5KSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhxdWVyeSk7XG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHF1ZXJ5QXJyYXkgPSBrZXlzLm1hcChrZXkgPT4gYCR7a2V5fT0ke3F1ZXJ5W2tleV19YCk7XG4gIHJldHVybiBgPyR7cXVlcnlBcnJheS5qb2luKFwiJlwiKX1gO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgb2JqZWN0VG9RdWVyeTtcbiIsImNvbnN0IHBhcnNlUXVlcnkgPSBxdWVyeSA9PiB7XG4gIGlmICh0eXBlb2YgcXVlcnkgIT09IFwic3RyaW5nXCIpIHJldHVybiBxdWVyeTtcbiAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhxdWVyeS5zdGFydHNXaXRoKFwiP1wiKSA/IHF1ZXJ5LnNsaWNlKDEpIDogcXVlcnkpO1xuICBjb25zdCBvYmogPSB7fTtcbiAgcGFyYW1zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIG9iajtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHBhcnNlUXVlcnk7XG4iLCJpbXBvcnQgKiBhcyBjb2xvcnMgZnJvbSBcIi4uL3N0eWxlcy9jb25zdGFudHNcIjtcblxuZXhwb3J0IGNvbnN0IHBpY2tDb2xvciA9IHN0YXR1cyA9PiB7XG4gIHN3aXRjaCAodHlwZW9mIHN0YXR1cyA9PT0gXCJzdHJpbmdcIiA/IHN0YXR1cy50b0xvd2VyQ2FzZSgpIDogc3RhdHVzKSB7XG4gICAgY2FzZSBcImZpcnN0X25vdGljZVwiOlxuICAgIGNhc2UgXCJzZWNvbmRfbm90aWNlXCI6XG4gICAgY2FzZSBcInBlbmRpbmdcIjpcbiAgICBjYXNlIFwiY29uc2lkZXJcIjpcbiAgICAgIHJldHVybiBjb2xvcnMubm90aWNlV2FybmluZztcbiAgICBjYXNlIFwidW52ZXJpZmllZFwiOlxuICAgIGNhc2UgXCJub3RfdmVyaWZpZWRcIjpcbiAgICBjYXNlIFwiZnJhdWRcIjpcbiAgICBjYXNlIFwibm90X21hdGNoZWRcIjpcbiAgICBjYXNlIFwicmVqZWN0ZWRcIjpcbiAgICBjYXNlIFwiZGVjZWFzZWRcIjpcbiAgICBjYXNlIFwid2l0aGRyYXduXCI6XG4gICAgICByZXR1cm4gY29sb3JzLm5vdGljZUVycm9yO1xuICAgIGNhc2UgXCJ2ZXJpZmllZFwiOlxuICAgIGNhc2UgXCJtYXRjaGVkXCI6XG4gICAgY2FzZSBcInZhbGlkXCI6XG4gICAgY2FzZSBcInJlYWR5XCI6XG4gICAgY2FzZSBcImNvbXBsZXRlXCI6XG4gICAgY2FzZSBcImNsZWFyXCI6XG4gICAgY2FzZSBcImZ1bGZpbGxlZFwiOlxuICAgIGNhc2UgXCJyYW5kb21pemVkXCI6XG4gICAgY2FzZSBcImFwcHJvdmVkXCI6XG4gICAgICByZXR1cm4gY29sb3JzLm5vdGljZVN1Y2Nlc3M7XG4gICAgY2FzZSBcInByb2Nlc3NpbmdcIjpcbiAgICBjYXNlIFwicmV2aWV3aW5nXCI6XG4gICAgY2FzZSBcInJldmlld1wiOlxuICAgIGNhc2UgXCJjb25zZW50XCI6XG4gICAgY2FzZSBcImVtYWlsZWRcIjpcbiAgICBjYXNlIFwiaW5pdGlhdGVkXCI6XG4gICAgY2FzZSBcImF0dGVudGlvblwiOlxuICAgIGNhc2UgXCJ2ZXJpZnlpbmdcIjpcbiAgICBjYXNlIFwicmV2aWV3X19tdnJcIjpcbiAgICBjYXNlIFwicmV2aWV3X19xYVwiOlxuICAgICAgcmV0dXJuIGNvbG9ycy5ub3RpY2VJbmZvO1xuICAgIGNhc2UgXCJub25lXCI6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcImdyYXlcIjtcbiAgfVxufTtcbiIsImltcG9ydCAqIGFzIGNvbG9ycyBmcm9tIFwiLi4vc3R5bGVzL2NvbnN0YW50c1wiO1xuXG5jb25zdCBwaWNrU2NvcmVDb2xvciA9IHNjb3JlID0+IHtcbiAgY29uc3QgdmFsdWUgPSBwYXJzZUludChzY29yZSwgMTApO1xuICBpZiAodmFsdWUgPiA4OSkgcmV0dXJuIGNvbG9ycy5ub3RpY2VTdWNjZXNzO1xuICBpZiAodmFsdWUgPiA2OSkgcmV0dXJuIGNvbG9ycy5ub3RpY2VXYXJuaW5nO1xuICByZXR1cm4gY29sb3JzLm5vdGljZUVycm9yO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcGlja1Njb3JlQ29sb3I7IiwiZXhwb3J0IGNvbnN0IHByZXR0aWZ5RGF0ZSA9IGRhdGVTdHJpbmcgPT4ge1xuICBjb25zdCBkID0gbmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gIGNvbnN0IG1vbnRoID0gZC50b1VUQ1N0cmluZygpLnNsaWNlKDgsIDExKTtcbiAgY29uc3QgREQgPSBkLnRvVVRDU3RyaW5nKCkuc2xpY2UoNSwgNyk7XG4gIGNvbnN0IFlZWVkgPSBkLnRvVVRDU3RyaW5nKCkuc2xpY2UoMTIsIDE2KTtcbiAgcmV0dXJuIGAke21vbnRofSAke0REfSwgJHtZWVlZfWA7XG59O1xuIiwiaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuXG5leHBvcnQgY29uc3QgZmFsc3lTdHJpbmdzID0gW1wiTm9uZVwiLCBcIm5vbmVcIiwgXCJOL0FcIl07XG5cbmNvbnN0IHZhbHVlRXhpc3RzID0gdmFsdWUgPT4ge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gZmFsc2U7XG4gIGlmIChfLmlzQXJyYXkodmFsdWUpIHx8IF8uaXNPYmplY3QodmFsdWUpKSByZXR1cm4gIV8uaXNFbXB0eSh2YWx1ZSk7XG4gIGlmIChfLmluZGV4T2YoZmFsc3lTdHJpbmdzLCB2YWx1ZSkgPiAtMSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHZhbHVlRXhpc3RzO1xuIiwiaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHZhbHVlRXhpc3RzIGZyb20gXCIuL3ZhbHVlLWV4aXN0c1wiO1xuXG5jb25zdCByZW5kZXJEZXRhaWxWYWx1ZSA9ICh2YWx1ZSwgZGVlcCA9IGZhbHNlKSA9PiB7XG4gIGlmIChfLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgaWYgKGRlZXApXG4gICAgICByZXR1cm4gdmFsdWUubWFwKFxuICAgICAgICB2YWwgPT5cbiAgICAgICAgICBfLmlzT2JqZWN0KHZhbClcbiAgICAgICAgICAgID8gcmVuZGVyTmVzdGVkT2JqZWN0KHZhbCwgZGVlcClcbiAgICAgICAgICAgIDogcmVuZGVyRGV0YWlsVmFsdWUodmFsLCBkZWVwKVxuICAgICAgKTtcbiAgICByZXR1cm4gdmFsdWUuam9pbihcIiAvIFwiKTtcbiAgfVxuICBpZiAoXy5pc09iamVjdCh2YWx1ZSkpIHJldHVybiByZW5kZXJOZXN0ZWRPYmplY3QodmFsdWUsIGRlZXApO1xuICByZXR1cm4gdmFsdWU7XG59O1xuXG5jb25zdCByZW5kZXJOZXN0ZWRPYmplY3QgPSAobmVzdGVkID0ge30sIGRlZXAgPSBmYWxzZSkgPT4ge1xuICBjb25zdCB2YWx1ZXMgPSBfLmZpbHRlcihuZXN0ZWQsIHZhbHVlID0+IHZhbHVlRXhpc3RzKHZhbHVlKSk7XG4gIHJldHVybiB2YWx1ZXMubWFwKHZhbHVlID0+IHJlbmRlckRldGFpbFZhbHVlKHZhbHVlLCBkZWVwKSkuam9pbihcIiAvIFwiKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlckRldGFpbFZhbHVlO1xuIiwiaW1wb3J0IHZhbHVlRXhpc3RzIGZyb20gXCIuL3ZhbHVlLWV4aXN0c1wiO1xuXG5jb25zdCBzZWxlY3RNYXN0ZXJLZXkgPSAoZGF0YSwgcHJvcGVydHkpID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpIHx8IGRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gXCJcIjtcbiAgbGV0IG1hc3RlcktleTtcbiAgY29uc3QgYmx1ZXByaW50ID0gZGF0YVswXTtcbiAgaWYgKHZhbHVlRXhpc3RzKGJsdWVwcmludFtwcm9wZXJ0eV0pKSB7XG4gICAgbWFzdGVyS2V5ID0gcHJvcGVydHk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcG9zaWJsZUtleXMgPSBPYmplY3Qua2V5cyhibHVlcHJpbnQpO1xuICAgIG1hc3RlcktleSA9IHBvc2libGVLZXlzLmZpbmQoa2V5ID0+IHZhbHVlRXhpc3RzKGJsdWVwcmludFtrZXldKSk7XG4gIH1cbiAgcmV0dXJuIG1hc3RlcktleTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHNlbGVjdE1hc3RlcktleTtcbiIsImltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcblxuLyoqIEBuYW1lc3BhY2UgdXRpbGl0eV9mdW5jdGlvbnMgKi9cblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIHV0aWxpdHlfZnVuY3Rpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIHRoZSB0eXBlb2YgdGhlIHZhbHVlIHNob3VsZCBiZSB8IHN0cmluZywgbnVtYmVyLCBib29sZWFuXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gdGhlIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7Kn0gZmFsbGJhY2sgLSBkZWZhdWx0IHZhbHVlIHRvIGJlIHVzZWQgaW4gbGlldSBvZiBhIHZhbHVlXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIHVwZGF0ZSB0aGUgb2JqZWN0IGtleSB3aXRoXG4gKiBAZGVzYyBTZXRzIGEgdmFsdWUgb2YgYSBzcGVjaWZpYyB0eXBlIG9uIHByb3ZpZGVkIG9iamVjdCdzIHN0aXB1bGF0ZWQgcHJvcGVydHkva2V5IHdpdGggYW4gb3B0aW9uYWwgZGVmYXVsdC9mYWxsYmFjayB2YWx1ZVxuICovXG5leHBvcnQgY29uc3Qgc2V0VmFsdWUgPSAodHlwZSwgc2VsZiwgcHJvcGVydHksIGZhbGxiYWNrLCB2YWx1ZSA9IGZhbGxiYWNrKSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IHR5cGUpIHJldHVybjtcbiAgc2VsZltwcm9wZXJ0eV0gPSB2YWx1ZTtcbn07XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiB1dGlsaXR5X2Z1bmN0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2UgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIHRoZSBvYmplY3Qga2V5XG4gKiBAcGFyYW0geyhzdHJpbmd8YXJyYXkpfSBvcHRpb25zIC0gc3RyaW5nIGtleSBvZiBzZWxmIG9iamVjdCB0aGF0IGhvbGRzIHRoZSBhcnJheSBvZiBjaG9pY2VzIG9yIGFuIGFycmF5IG9mIGNob2ljZXNcbiAqIEBwYXJhbSB7Kn0gZmFsbGJhY2sgLSBkZWZhdWx0IHZhbHVlIHRvIGJlIHVzZWQgaW4gbGlldSBvZiBhIHZhbHVlXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIHVwZGF0ZSB0aGUgb2JqZWN0IGtleSB3aXRoXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IGZhY3RvcnkgdG8gaGFyZCBiYWtlIHRoZSBwcm9wZXJ0eSB0byBiZSBtb2RpZmllZCBhbmQgYSBmYWxsYmFjayAob3B0aW9uYWwpXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRPcHRpb24gPSAoXG4gIHNlbGYsXG4gIHByb3BlcnR5LFxuICBvcHRpb25zLFxuICBmYWxsYmFjayxcbiAgdmFsdWUgPSBmYWxsYmFja1xuKSA9PiB7XG4gIGNvbnN0IGFsbG93ZWQgPSBBcnJheS5pc0FycmF5KG9wdGlvbnMpID8gb3B0aW9ucyA6IHNlbGZbb3B0aW9uc107XG4gIGlmICghYWxsb3dlZC5pbmNsdWRlcyh2YWx1ZSkpIHJldHVybjtcbiAgc2VsZltwcm9wZXJ0eV0gPSB2YWx1ZTtcbn07XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiB1dGlsaXR5X2Z1bmN0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2UgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdHJ1dGh5IHZhbHVlIHRvIGJlIHNldFxuICogQGRlc2MgV2lsbCBzZXQgYSB0cnV0aHkgdmFsdWUgYW5kIGlnbm9yZSBhbnl0aGluZyB0aGF0IGNhc3RzIHRvIGZhbHNlICghISlcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFRydXRoeSA9IChzZWxmLCBwcm9wZXJ0eSwgdmFsdWUpID0+IHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICBzZWxmW3Byb3BlcnR5XSA9IHZhbHVlO1xufTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIHV0aWxpdHlfZnVuY3Rpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSB2YWx1ZSAtIHRoZSBmYWxzeSB2YWx1ZSB0byBiZSBzZXRcbiAqIEBkZXNjIFdpbGwgc2V0IGEgZmFsc3kgdmFsdWUgYW5kIGlnbm9yZSBhbnl0aGluZyB0aGF0IGNhc3RzIHRvIHRydWUgKCEhISlcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZhbHN5ID0gKHNlbGYsIHByb3BlcnR5LCB2YWx1ZSkgPT4ge1xuICBpZiAoIXZhbHVlKSByZXR1cm47XG4gIHNlbGZbcHJvcGVydHldID0gIXZhbHVlO1xufTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIHV0aWxpdHlfZnVuY3Rpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQGRlc2MgVG9nZ2xlcyBhIGJvb2xlYW4gdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUJvb2wgPSAoc2VsZiwgcHJvcGVydHkpID0+ICgpID0+IHtcbiAgaWYgKHR5cGVvZiBzZWxmW3Byb3BlcnR5XSAhPT0gXCJib29sZWFuXCIpIHJldHVybjtcbiAgc2VsZltwcm9wZXJ0eV0gPSAhc2VsZltwcm9wZXJ0eV07XG59O1xuXG4vKiogQG5hbWVzcGFjZSBmdW5jdGlvbl9mYWN0b3JpZXMgKi9cblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIGZ1bmN0aW9uX2ZhY3Rvcmllc1xuICogQGltcGxlbWVudHMge3NldFZhbHVlfVxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBib29sZWFuLCBzdHJpbmcsIG9iamVjdCwgbnVsbCwgZXRjLlxuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGEgZGVmYXVsdCB2YWx1ZSB0byBiZSB1c2VkIGluIGxpZXUgb2YgYSBmaW5hbCB2YWx1ZVxuICogQHJldHVybnMge3NldFZhbHVlfSAtIHNldFZhbHVlIGZ1bmN0aW9uIHdpdGggcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzXG4gKiBAZGVzYyBGYWN0b3J5IGZvciBnZW5lcmF0aW5nIGEgdmFsdWUgc2V0dGVyXG4gKi9cbmV4cG9ydCBjb25zdCBzZXR0ZXJGYWN0b3J5ID0gKHR5cGUsIHNlbGYsIHByb3BlcnR5LCBmYWxsYmFjayA9IHVuZGVmaW5lZCkgPT5cbiAgXy5wYXJ0aWFsKHNldFZhbHVlLCB0eXBlLCBzZWxmLCBwcm9wZXJ0eSwgZmFsbGJhY2spO1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgZnVuY3Rpb25fZmFjdG9yaWVzXG4gKiBAZXh0ZW5kcyB7c2V0dGVyRmFjdG9yeX1cbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gYm9vbGVhbiwgc3RyaW5nLCBvYmplY3QsIG51bGwsIGV0Yy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBhIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgZmluYWwgdmFsdWVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBhIHZhbHVlIHNldHRlciB3aXRoIGFwcGxpZWQgYXJndW1lbnRzXG4gKiBAZGVzYyBBIGN1cnJpZWQgZmFjdG9yeSBmb3IgZ2VuZXJhdGluZyBhIHZhbHVlIHNldHRlclxuICovXG5leHBvcnQgY29uc3Qgc2V0dGVyRmFjdG9yeUN1cnJpZWQgPSBfLmN1cnJ5KHNldHRlckZhY3RvcnkpO1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgZnVuY3Rpb25fZmFjdG9yaWVzXG4gKiBAZXh0ZW5kcyB7dG9nZ2xlQm9vbH1cbiAqIEBkZXNjIEEgY3VycmllZCBmYWN0b3J5IGZvciBnZW5lcmF0aW5nIHRvZ2dsZUJvb2woKSB3aXRoIGFwcGxpZWQgYXJndW1lbnRzXG4gKiBAcmV0dXJucyB7dG9nZ2xlQm9vbH0gQSBjdXJyaWVkIHZlcnNpb24gb2YgdGhlIHRvZ2dsZUJvb2wgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUJvb2xDdXJyaWVkID0gXy5jdXJyeSh0b2dnbGVCb29sKTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIGZ1bmN0aW9uX2ZhY3Rvcmllc1xuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2UgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGEgZGVmYXVsdCB2YWx1ZSB0byBiZSB1c2VkIGluIGxpZXUgb2YgYSBmaW5hbCB2YWx1ZVxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGEgdmFsdWUgc2V0dGVyIHdpdGggcHJlLXBvcHVsYXRlZCBkZXBlbmRlbmNpZXNcbiAqIEBkZXNjIEEgZmFjdG9yeSBmb3IgZ2VuZXJhdGluZyBhIHN0cmluZyB2YWx1ZSBzZXR0ZXIsIGlmIHZhbHVlIGlzIG5vdCBhIHN0cmluZyBleGl0cyB3aXRob3V0IHNpZGUtZWZmZWN0c1xuICovXG5leHBvcnQgY29uc3Qgc2V0U3RyaW5nRmFjdG9yeSA9IHNldHRlckZhY3RvcnlDdXJyaWVkKFwic3RyaW5nXCIpO1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgZnVuY3Rpb25fZmFjdG9yaWVzXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSBbZmFsbGJhY2tdIC0gYSBkZWZhdWx0IHZhbHVlIHRvIGJlIHVzZWQgaW4gbGlldSBvZiBhIGZpbmFsIHZhbHVlXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gYSB2YWx1ZSBzZXR0ZXIgd2l0aCBwcmUtcG9wdWxhdGVkIGRlcGVuZGVuY2llc1xuICogQGRlc2MgQSBmYWN0b3J5IGZvciBnZW5lcmF0aW5nIGEgbnVtYmVyIHZhbHVlIHNldHRlciwgaWYgdmFsdWUgaXMgbm90IGEgc3RyaW5nIGV4aXRzIHdpdGhvdXQgc2lkZS1lZmZlY3RzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXROdW1iZXJGYWN0b3J5ID0gc2V0dGVyRmFjdG9yeUN1cnJpZWQoXCJudW1iZXJcIik7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiBmdW5jdGlvbl9mYWN0b3JpZXNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlIHRvXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBhIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgZmluYWwgdmFsdWVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBhIHZhbHVlIHNldHRlciB3aXRoIHByZS1wb3B1bGF0ZWQgZGVwZW5kZW5jaWVzXG4gKiBAZGVzYyBBIGZhY3RvcnkgZm9yIGdlbmVyYXRpbmcgYSBib29sZWFuIHZhbHVlIHNldHRlciwgaWYgdmFsdWUgaXMgbm90IGEgc3RyaW5nIGV4aXRzIHdpdGhvdXQgc2lkZS1lZmZlY3RzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRCb29sRmFjdG9yeSA9IHNldHRlckZhY3RvcnlDdXJyaWVkKFwiYm9vbGVhblwiKTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIGZ1bmN0aW9uX2ZhY3Rvcmllc1xuICogQGV4dGVuZHMge3NldFRydXRoeX1cbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlIHRvXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHRydXRoeSB2YWx1ZSB0byBiZSBzZXRcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFRydXRoeUN1cnJpZWQgPSBfLmN1cnJ5KHNldFRydXRoeSk7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiBmdW5jdGlvbl9mYWN0b3JpZXNcbiAqIEBleHRlbmRzIHtzZXRUcnV0aHl9XG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSB2YWx1ZSAtIHRoZSBmYWxzeSB2YWx1ZSB0byBiZSBzZXRcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZhbHN5Q3VycmllZCA9IF8uY3Vycnkoc2V0RmFsc3kpO1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgZnVuY3Rpb25fZmFjdG9yaWVzXG4gKiBAaW1wbGVtZW50cyB7c2V0T3B0aW9ufVxuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2UgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7KHN0cmluZ3xhcnJheSl9IG9wdGlvbnMgLSBzdHJpbmcga2V5IG9mIHNlbGYgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIGFycmF5IG9mIGNob2ljZXMgb3IgYW4gYXJyYXkgb2YgY2hvaWNlc1xuICogQHBhcmFtIHsqfSBbZmFsbGJhY2tdIC0gYSBkZWZhdWx0IHZhbHVlIHRvIGJlIHVzZWQgaW4gbGlldSBvZiBhIGZpbmFsIHZhbHVlXG4gKiBAcmV0dXJucyB7c2V0T3B0aW9ufVxuICovXG5leHBvcnQgY29uc3Qgc2V0T3B0aW9uRmFjdG9yeSA9IChcbiAgc2VsZixcbiAgcHJvcGVydHksXG4gIG9wdGlvbnMsXG4gIGZhbGxiYWNrID0gdW5kZWZpbmVkXG4pID0+IF8ucGFydGlhbChzZXRPcHRpb24sIHNlbGYsIHByb3BlcnR5LCBvcHRpb25zLCBmYWxsYmFjayk7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBleHRlbmRzIHtzZXRPcHRpb25GYWN0b3J5fVxuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2UgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7KHN0cmluZ3xhcnJheSl9IG9wdGlvbnMgLSBzdHJpbmcga2V5IG9mIHNlbGYgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIGFycmF5IG9mIGNob2ljZXMgb3IgYW4gYXJyYXkgb2YgY2hvaWNlc1xuICogQHBhcmFtIHsqfSBbZmFsbGJhY2tdIC0gYSBkZWZhdWx0IHZhbHVlIHRvIGJlIHVzZWQgaW4gbGlldSBvZiBhIGZpbmFsIHZhbHVlXG4gKiBAcmV0dXJucyB7c2V0T3B0aW9ufVxuICovXG5leHBvcnQgY29uc3Qgc2V0T3B0aW9uRmFjdG9yeUN1cnJpZWQgPSBfLmN1cnJ5KHNldE9wdGlvbkZhY3RvcnkpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGRlc2MgVXNlZCB0byBjcmVhdGUgbW9ieCByZWFkeSBtb2RlbHMgd2l0aCB0aGUgbW9zdCBjb21tb24gc2V0dGVycyBib290c3RyYXBwZWRcbiAqL1xuZXhwb3J0IGNsYXNzIFNldHRlciB7XG4gIC8qKlxuICAgKiBAZnVuY1xuICAgKiBAaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gdGhlIG9iamVjdCBwcm9wZXJ0eSB0byBiZSBtb2RpZmllZFxuICAgKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgcmV0dXJuZWQgZnVuY3Rpb24ncyB2YWx1ZSBhcmd1bWVudFxuICAgKiBAcmV0dXJucyB7c2V0VmFsdWV9IHNldFZhbHVlIGZ1bmN0aW9uIHdpdGggcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzXG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGEgc3RyaW5nIHNldHRlclxuICAgKi9cbiAgc2V0U3RyaW5nRmFjdG9yeSA9IHNldFN0cmluZ0ZhY3RvcnkodGhpcyk7XG4gIC8qKlxuICAgKiBAZnVuY1xuICAgKiBAaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gdGhlIG9iamVjdCBwcm9wZXJ0eSB0byBiZSBtb2RpZmllZFxuICAgKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgcmV0dXJuZWQgZnVuY3Rpb24ncyB2YWx1ZSBhcmd1bWVudFxuICAgKiBAcmV0dXJucyB7c2V0VmFsdWV9IHNldFZhbHVlIGZ1bmN0aW9uIHdpdGggcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzXG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGEgbnVtYmVyIHNldHRlclxuICAgKi9cbiAgc2V0TnVtYmVyRmFjdG9yeSA9IHNldE51bWJlckZhY3RvcnkodGhpcyk7XG4gIC8qKlxuICAgKiBAZnVuY1xuICAgKiBAaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gdGhlIG9iamVjdCBwcm9wZXJ0eSB0byBiZSBtb2RpZmllZFxuICAgKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgcmV0dXJuZWQgZnVuY3Rpb24ncyB2YWx1ZSBhcmd1bWVudFxuICAgKiBAcmV0dXJucyB7c2V0VmFsdWV9IHNldFZhbHVlIGZ1bmN0aW9uIHdpdGggcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzXG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGEgYm9vbGVhbiBzZXR0ZXJcbiAgICovXG4gIHNldEJvb2xGYWN0b3J5ID0gc2V0Qm9vbEZhY3RvcnkodGhpcyk7XG4gIC8qKlxuICAgKiBAZnVuY1xuICAgKiBAaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gdGhlIG9iamVjdCBwcm9wZXJ0eSAoYm9vbCkgdG8gYmUgaW52ZXJ0ZWRcbiAgICogQHJldHVybnMge2Z1bmN0aW9ufSBmdW5jdGlvbiB3aGljaCBhY2NlcHRzIHRoZSB2YWx1ZSB0byBiZSBjaGVja2VkIGFuZCBhcHBsaWVkIHRvIHRoZSBwcm9wZXJ0eVxuICAgKiBAZGVzYyBmYWN0b3J5IHRvIHJldHVybiBhIHRydXRoeSBzZXR0ZXJcbiAgIFxuICAgKi9cbiAgc2V0VHJ1dGh5RmFjdG9yeSA9IHNldFRydXRoeUN1cnJpZWQodGhpcyk7XG4gIC8qKlxuICAgKiBAZnVuY1xuICAgKiBAaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gdGhlIG9iamVjdCBwcm9wZXJ0eSAoYm9vbCkgdG8gYmUgaW52ZXJ0ZWRcbiAgICogQHJldHVybnMge2Z1bmN0aW9ufSBmdW5jdGlvbiB3aGljaCBhY2NlcHRzIHRoZSB2YWx1ZSB0byBiZSBjaGVja2VkIGFuZCBhcHBsaWVkIHRvIHRoZSBwcm9wZXJ0eVxuICAgKiBAZGVzYyBmYWN0b3J5IHRvIHJldHVybiBhIGZhbHN5IHNldHRlclxuICAgXG4gICAqL1xuICBzZXRGYWxzeUZhY3RvcnkgPSBzZXRGYWxzeUN1cnJpZWQodGhpcyk7XG4gIC8qKlxuICAgKiBAZnVuY1xuICAgKiBAaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gdGhlIG9iamVjdCBwcm9wZXJ0eSB0byBiZSBtb2RpZmllZFxuICAgKiBAcGFyYW0geyhzdHJpbmd8YXJyYXkpfSBvcHRpb25zIC0gc3RyaW5nIGtleSBvZiBzZWxmIG9iamVjdCB0aGF0IGhvbGRzIHRoZSBhcnJheSBvZiBjaG9pY2VzIG9yIGFuIGFycmF5IG9mIGNob2ljZXNcbiAgICogQHJldHVybnMge2Z1bmN0aW9ufSBmdW5jdGlvbiB3aGljaCBhY2NlcHRzIHRoZSB2YWx1ZSB0byBiZSBjaGVja2VkIGFuZCBhcHBsaWVkIHRvIHRoZSBwcm9wZXJ0eVxuICAgKiBAZGVzYyBmYWN0b3J5IHRvIHJldHVybiBhbiBvcHRpb24gc2V0dGVyXG4gICAqL1xuICBzZXRPcHRpb25GYWN0b3J5ID0gc2V0T3B0aW9uRmFjdG9yeUN1cnJpZWQodGhpcyk7XG4gIC8qKlxuICAgKiBAZnVuY1xuICAgKiBAaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gdGhlIG9iamVjdCBwcm9wZXJ0eSAoYm9vbCkgdG8gYmUgaW52ZXJ0ZWRcbiAgICogQHBhcmFtIHthcnJheX0gb3B0aW9ucyAtIGFuIGFycmF5IG9mIHRoZSBwb3NzaWJsZSBjaG9pY2VzIGFsbG93ZWRcbiAgICogQHBhcmFtIHsqfSBbZmFsbGJhY2tdIC0gZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHJldHVybmVkIGZ1bmN0aW9uJ3MgdmFsdWUgYXJndW1lbnRcbiAgICogQHJldHVybnMge2Z1bmN0aW9ufSBmdW5jdGlvbiB3aGljaCBhY2NlcHRzIHRoZSB2YWx1ZSB0byBiZSBjaGVja2VkIGFuZCBhcHBsaWVkIHRvIHRoZSBwcm9wZXJ0eVxuICAgKiBAZGVzYyBmYWN0b3J5IHRvIHJldHVybiBhIGJvb2xlYW4gdG9nZ2xlclxuICAgKi9cbiAgdG9nZ2xlQm9vbEZhY3RvcnkgPSB0b2dnbGVCb29sQ3VycmllZCh0aGlzKTtcbn1cbiIsImZ1bmN0aW9uIHN0b3JhZ2VNb2NrKCkge1xuICBjb25zdCBzdG9yYWdlID0ge307XG5cbiAgcmV0dXJuIHtcbiAgICBzZXRJdGVtKGtleSwgdmFsdWUpIHtcbiAgICAgIHN0b3JhZ2Vba2V5XSA9IHZhbHVlIHx8IFwiXCI7XG4gICAgfSxcbiAgICBnZXRJdGVtKGtleSkge1xuICAgICAgcmV0dXJuIGtleSBpbiBzdG9yYWdlID8gc3RvcmFnZVtrZXldIDogbnVsbDtcbiAgICB9LFxuICAgIHJlbW92ZUl0ZW0oa2V5KSB7XG4gICAgICBkZWxldGUgc3RvcmFnZVtrZXldO1xuICAgIH0sXG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzdG9yYWdlKS5sZW5ndGg7XG4gICAgfSxcbiAgICBrZXkoaSkge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHN0b3JhZ2UpO1xuICAgICAgcmV0dXJuIGtleXNbaV0gfHwgbnVsbDtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0b3JhZ2VNb2NrO1xuIiwiY29uc3QgdG9Cb29sZWFuID0gdmFsdWUgPT4ge1xuICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiO1xuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgIHJldHVybiB2YWx1ZSA+IDA7XG4gICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgIGlmICghdmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlLmxlbmd0aCA+IDA7XG4gICAgICByZXR1cm4gIShPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2YWx1ZSkubGVuZ3RoID09PSAwKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCB0b0Jvb2xlYW47XG4iLCJpbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XG5pbXBvcnQgcmVsYXRpdmVUaW1lIGZyb20gXCJkYXlqcy9wbHVnaW4vcmVsYXRpdmVUaW1lXCI7XG5pbXBvcnQgdXRjIGZyb20gXCJkYXlqcy9wbHVnaW4vdXRjXCI7XG5pbXBvcnQgcGFyc2VQeXRob25EYXRlIGZyb20gXCIuL3BhcnNlLXB5dGhvbi1kYXRlXCI7XG5cbmRheWpzLmV4dGVuZChyZWxhdGl2ZVRpbWUpO1xuZGF5anMuZXh0ZW5kKHV0Yyk7XG5cbmNvbnN0IHRvUmVsYXRpdmVEYXRlID0gZGF0ZSA9PiB7XG4gIGlmICh0eXBlb2YgZGF0ZSAhPT0gXCJudW1iZXJcIikgcmV0dXJuIFwiTi9BXCI7XG4gIGNvbnN0IHBhcnNlZERhdGUgPSBwYXJzZVB5dGhvbkRhdGUoZGF0ZSk7XG4gIGlmICghcGFyc2VkRGF0ZSkgcmV0dXJuIFwiTi9BXCI7XG4gIGNvbnN0IHJlbGF0aXZlRGF0ZSA9IGRheWpzKHBhcnNlZERhdGUpO1xuICBjb25zdCBub3cgPSBkYXlqcygpLnV0Y09mZnNldChwYXJzZWREYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICBjb25zdCBhZGp1c3RlZE5vdyA9IG5vdy5zdWJ0cmFjdChwYXJzZWREYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgLyA2MCwgXCJob3VyXCIpO1xuICBpZiAoYWRqdXN0ZWROb3cuZGlmZihyZWxhdGl2ZURhdGUsIFwiZGF5XCIpIDwgOCkgcmV0dXJuIHJlbGF0aXZlRGF0ZS5mcm9tKGFkanVzdGVkTm93KTtcbiAgcmV0dXJuIHJlbGF0aXZlRGF0ZS5mb3JtYXQoXCJNL0REL1lZWVlcIik7XG59O1xuXG5leHBvcnQgY29uc3QgdG9SZWxhdGl2ZUZyb21JU08gPSBkYXRlID0+IHtcbiAgaWYgKHR5cGVvZiBkYXRlICE9PSBcInN0cmluZ1wiKSByZXR1cm4gXCJOL0FcIjtcbiAgY29uc3QgcmVsYXRpdmVEYXRlID0gZGF5anMoZGF0ZSk7XG4gIGlmICghcmVsYXRpdmVEYXRlLmlzVmFsaWQoKSkgcmV0dXJuIFwiTi9BXCI7XG4gIGNvbnN0IG5vdyA9IGRheWpzKCkudXRjT2Zmc2V0KHJlbGF0aXZlRGF0ZS51dGNPZmZzZXQoKSk7XG4gIGlmIChub3cuZGlmZihyZWxhdGl2ZURhdGUsIFwiZGF5XCIpIDwgOCkgcmV0dXJuIHJlbGF0aXZlRGF0ZS5mcm9tKG5vdyk7XG4gIHJldHVybiByZWxhdGl2ZURhdGUuZm9ybWF0KFwiTS9ERC9ZWVlZXCIpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgdG9SZWxhdGl2ZURhdGU7XG4iLCJpbXBvcnQgeyB1cHBlckZpcnN0IH0gZnJvbSBcImxvZGFzaFwiO1xuXG5jb25zdCB0b1NlbnRlbmNlQ2FzZSA9IHN0ciA9PiB7XG4gIGxldCBzZW50ZW5jZSA9IHN0ci50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBwZXJpb2QgPSBcIi4gXCI7XG4gIGNvbnN0IGV4Y2xhbWF0aW9uID0gXCIhIFwiO1xuICBjb25zdCBxdWVzdGlvbiA9IFwiPyBcIjtcbiAgY29uc3QgdGVybWluYXRpb25zID0gW3BlcmlvZCwgZXhjbGFtYXRpb24sIHF1ZXN0aW9uXTtcbiAgdGVybWluYXRpb25zLmZvckVhY2godGVybWluYXRpb24gPT4ge1xuICAgIHNlbnRlbmNlID0gc2VudGVuY2VcbiAgICAgIC5zcGxpdCh0ZXJtaW5hdGlvbilcbiAgICAgIC5tYXAodXBwZXJGaXJzdClcbiAgICAgIC5qb2luKHRlcm1pbmF0aW9uKTtcbiAgfSk7XG4gIHJldHVybiBzZW50ZW5jZTtcbn07XG5leHBvcnQgZGVmYXVsdCB0b1NlbnRlbmNlQ2FzZTtcbiIsImNvbnN0IHRvVGl0bGVDYXNlID0gc3RyID0+IHtcbiAgY29uc3Qgc3RyaW5nID0gdHlwZW9mIHN0ciA9PT0gXCJzdHJpbmdcIiA/IHN0ciA6IFN0cmluZyhzdHIpO1xuICBjb25zdCBzdHJfbG93ZXJjYXNlZCA9IHN0cmluZy50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCB3b3JkcyA9IHN0cl9sb3dlcmNhc2VkLnNwbGl0KFwiIFwiKTtcbiAgY29uc3QgdGl0bGVDYXNlZExpc3QgPSB3b3Jkcy5tYXAod29yZCA9PiB7XG4gICAgY29uc3QgZmlyc3RDaGFyID0gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCByZW1haW5pbmdDaGFycyA9IHdvcmQuc2xpY2UoMSk7XG4gICAgcmV0dXJuIGAke2ZpcnN0Q2hhcn0ke3JlbWFpbmluZ0NoYXJzfWA7XG4gIH0pO1xuICByZXR1cm4gdGl0bGVDYXNlZExpc3Quam9pbihcIiBcIik7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB0b1RpdGxlQ2FzZTtcbiIsImV4cG9ydCBjb25zdCBJTklUSUFURUQgPSBcImluaXRpYXRlZFwiO1xuZXhwb3J0IGNvbnN0IFBFTkRJTkcgPSBcInBlbmRpbmdcIjtcbmV4cG9ydCBjb25zdCBXSVRIRFJBV04gPSBcIndpdGhkcmF3blwiO1xuZXhwb3J0IGNvbnN0IEFQUFJPVkVEID0gXCJhcHByb3ZlZFwiO1xuZXhwb3J0IGNvbnN0IFJFSkVDVEVEID0gXCJyZWplY3RlZFwiO1xuZXhwb3J0IGNvbnN0IENPTlNFTlQgPSBcImNvbnNlbnRcIjtcbmV4cG9ydCBjb25zdCBFTUFJTEVEID0gXCJlbWFpbGVkXCI7XG5leHBvcnQgY29uc3QgUkVWSUVXID0gXCJyZXZpZXdcIjtcbmV4cG9ydCBjb25zdCBSRVZJRVdJTkcgPSBcInJldmlld2luZ1wiO1xuZXhwb3J0IGNvbnN0IENPTlNJREVSID0gXCJjb25zaWRlclwiO1xuZXhwb3J0IGNvbnN0IFBST0NFU1NJTkcgPSBcInByb2Nlc3NpbmdcIjtcbmV4cG9ydCBjb25zdCBQRU5ESU5HX0RJU1BVVEUgPSBcInBlbmRpbmdfX2Rpc3B1dGVcIjtcbmV4cG9ydCBjb25zdCBQRU5ESU5HX0ZJUlNUX05PVElDRSA9IFwicGVuZGluZ19fZmlyc3Rfbm90aWNlXCI7XG5leHBvcnQgY29uc3QgUEVORElOR19TRUNPTkRfTk9USUNFID0gXCJwZW5kaW5nX19zZWNvbmRfbm90aWNlXCI7XG5leHBvcnQgY29uc3QgRklSU1RfTk9USUNFID0gXCJmaXJzdF9ub3RpY2VcIjtcbmV4cG9ydCBjb25zdCBTRUNPTkRfTk9USUNFID0gXCJzZWNvbmRfbm90aWNlXCI7XG5leHBvcnQgY29uc3QgU1NOX1RSQUNFX0ZBSUxFRCA9IFwicmV2aWV3X19pZGVudGl0eVwiO1xuZXhwb3J0IGNvbnN0IE1WUl9GQUlMRUQgPSBcInJldmlld19fbXZyXCI7XG5leHBvcnQgY29uc3QgQ09NUExJQU5DRSA9IFwicmV2aWV3X19xYVwiO1xuZXhwb3J0IGNvbnN0IENPTVBMSUFOQ0VfU08gPSBcInJldmlld19fc29cIjtcbmV4cG9ydCBjb25zdCBWRVJJRllJTkcgPSBcInZlcmlmeWluZ1wiO1xuZXhwb3J0IGNvbnN0IENPTVBMSUFOQ0VSRVZJRVcgPSBcIkNvbXBsaWFuY2UgUmV2aWV3XCI7XG5leHBvcnQgY29uc3QgU1RPUkVEID0gXCJTdG9yZWRcIjtcblxuY29uc3QgdHJhbnNsYXRlU3RhdHVzID0gKHN0YXR1cywgYWR2ZXJzZV9hY3Rpb24pID0+IHtcbiAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICBjYXNlIEFQUFJPVkVEOlxuICAgICAgcmV0dXJuIEFQUFJPVkVEO1xuICAgIGNhc2UgUEVORElORzpcbiAgICBjYXNlIFBFTkRJTkdfRElTUFVURTpcbiAgICAgIHJldHVybiBQRU5ESU5HO1xuICAgIGNhc2UgUkVKRUNURUQ6XG4gICAgICByZXR1cm4gUkVKRUNURUQ7XG4gICAgY2FzZSBQRU5ESU5HX0ZJUlNUX05PVElDRTpcbiAgICAgIGlmIChhZHZlcnNlX2FjdGlvbikgcmV0dXJuIEZJUlNUX05PVElDRTtcbiAgICAgIGVsc2UgcmV0dXJuIFJFSkVDVEVEO1xuICAgIGNhc2UgUEVORElOR19TRUNPTkRfTk9USUNFOlxuICAgICAgaWYgKGFkdmVyc2VfYWN0aW9uKSByZXR1cm4gU0VDT05EX05PVElDRTtcbiAgICAgIGVsc2UgcmV0dXJuIFJFSkVDVEVEO1xuICAgIGNhc2UgQ09OU0VOVDpcbiAgICAgIHJldHVybiBDT05TRU5UO1xuICAgIGNhc2UgUFJPQ0VTU0lORzpcbiAgICAgIHJldHVybiBQUk9DRVNTSU5HO1xuICAgIGNhc2UgRU1BSUxFRDpcbiAgICAgIHJldHVybiBFTUFJTEVEO1xuICAgIGNhc2UgUkVWSUVXOlxuICAgICAgcmV0dXJuIFJFVklFVztcbiAgICBjYXNlIFJFVklFV0lORzpcbiAgICAgIHJldHVybiBSRVZJRVdJTkc7XG4gICAgY2FzZSBXSVRIRFJBV046XG4gICAgICByZXR1cm4gV0lUSERSQVdOO1xuICAgIGNhc2UgSU5JVElBVEVEOlxuICAgICAgcmV0dXJuIFNUT1JFRDtcbiAgICBjYXNlIFNTTl9UUkFDRV9GQUlMRUQ6XG4gICAgICByZXR1cm4gVkVSSUZZSU5HO1xuICAgIGNhc2UgTVZSX0ZBSUxFRDpcbiAgICAgIHJldHVybiBDT01QTElBTkNFUkVWSUVXO1xuICAgIGNhc2UgQ09NUExJQU5DRTpcbiAgICAgIHJldHVybiBDT01QTElBTkNFUkVWSUVXO1xuICAgIGNhc2UgQ09NUExJQU5DRV9TTzpcbiAgICAgIHJldHVybiBDT01QTElBTkNFUkVWSUVXO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gUEVORElORztcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgdHJhbnNsYXRlU3RhdHVzO1xuIiwiaW1wb3J0IHtcbiAgdmFsaWRhdGVVU0RyaXZlcnNMaWNlbnNlLFxuICBkcml2ZXJzTGljZW5zZVJlZ2V4XG59IGZyb20gXCJAdHVybmFpL3ZhbGlkYXRlLXVzLWRyaXZlcnMtbGljZW5zZVwiO1xuXG5leHBvcnQgY29uc3QgY3VycmVudFN0YXRlcyA9IE9iamVjdC5rZXlzKGRyaXZlcnNMaWNlbnNlUmVnZXgpO1xuXG5jb25zdCB2YWxpZGF0ZURyaXZlcnNMaWNlbnNlID0gKGxpY2Vuc2UsIHN0YXRlID0gXCJcIikgPT4ge1xuICBpZiAodHlwZW9mIGxpY2Vuc2UgIT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHN0YXRlICE9PSBcInN0cmluZ1wiKVxuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgcmVhc29uczogXCJMaWNlbnNlIGFuZCBTdGF0ZSBtdXN0IGJlIFN0cmluZ3NcIiB9O1xuICBpZiAoIWN1cnJlbnRTdGF0ZXMuaW5jbHVkZXMoc3RhdGUpKSByZXR1cm4geyB2YWxpZDogdHJ1ZSwgcmVhc29uczogXCJcIiB9O1xuICByZXR1cm4gdmFsaWRhdGVVU0RyaXZlcnNMaWNlbnNlKGxpY2Vuc2UsIHN0YXRlKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHZhbGlkYXRlRHJpdmVyc0xpY2Vuc2U7XG4iLCJpbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XG5cbi8qKlxuICogQmFzZWQgb24gTydSZWlsbHkncyBSZWdleCBDb29rYm9vazpcbiAqIGh0dHBzOi8vd3d3Lm9yZWlsbHkuY29tL2xpYnJhcnkvdmlldy9yZWd1bGFyLWV4cHJlc3Npb25zLWNvb2tib29rLzk3ODE0NDkzMjc0NTMvY2gwNHMxMi5odG1sXG4gKiBcbiAqIEV4dHJhIHJ1bGVzOlxuICogIDEyMzQ1Njc4OSBpcyBhbiBpbnZhbGlkIFNTTlxuICogIFJlcGVhdGluZyBkaWdpdHMgYXJlIGludmFsaWQgKDExMTExMTExMSwgMTExMTExMTExLCBldGMuKVxuICogIDk4NiBwcmVmaXggaXMgYWxsb3dlZCAoZm9yIFRlc3QgSWRlbnRpdGllcylcbiAqL1xuY29uc3QgdmFsaWRTc25SZWdleCA9IC9eKDk4NnwoPyEwMDB8NjY2fDEyMzQ1Njc4OXwoXFxkKVxcMns4fSlbMC04XVswLTldezJ9KSg/ITAwKVswLTldezJ9KD8hMDAwMClbMC05XXs0fSQvO1xuXG4vKipcbiAqIEJhc2VkIG9uIFNTQSdzIG1pc3VzZWQgYXJ0aWNsZTpcbiAqIGh0dHBzOi8vd3d3LnNzYS5nb3YvaGlzdG9yeS9zc24vbWlzdXNlZC5odG1sXG4gKiovXG5jb25zdCBtaXN1c2VkUmVnZXggPSAvXjA3ODA1MTEyMHwyMTkwOTk5OTkkLztcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlX3NzbiA9IHNzbiA9PiB7XG4gIGlmICh0eXBlb2Ygc3NuICE9PSBcInN0cmluZ1wiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IG51bWJlclNTTiA9IHNzbi5yZXBsYWNlKC9cXEQvZywgXCJcIik7XG4gIHJldHVybiAhbWlzdXNlZFJlZ2V4LnRlc3QobnVtYmVyU1NOKSAmJiB2YWxpZFNzblJlZ2V4LnRlc3QobnVtYmVyU1NOKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnZhbGlkRmlyc3RUaHJlZSA9IF8ucmFuZ2UoOTAwLCAxMDAwKVxuICAubWFwKG51bSA9PiBgJHtudW19YClcbiAgLmNvbmNhdChbXCIwMDBcIiwgXCI2NjZcIl0pO1xuZXhwb3J0IGRlZmF1bHQgdmFsaWRhdGVfc3NuO1xuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdXNlbGVzcy1lc2NhcGUqL1xuaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuXG4vLyBEdWNrIGNoZWNrIGZvciBhcnJheSBvciBNb2JYIG9ic2VydmFibGUgYXJyYXkgKGF2b2lkcyBidW5kbGluZyBtb2J4KVxuY29uc3QgaXNBcnJheU9yT2JzZXJ2YWJsZUFycmF5ID0gdmFsdWUgPT5cbiAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHxcbiAgISEodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHZhbHVlLnNsaWNlID09PSBcImZ1bmN0aW9uXCIpO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVFbWFpbCA9IGVtYWlsID0+IHtcbiAgaWYgKCFlbWFpbCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCByZWdleCA9IC9eW2EtekEtWjAtOS4hIyQlJicqK1xcLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKyQvO1xuICByZXR1cm4gcmVnZXgudGVzdChlbWFpbCk7XG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVQaG9uZSA9IHBob25lID0+IHtcbiAgaWYgKCFwaG9uZSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCByZWdleCA9IC9eMT9cXHM/XFwoPyhcXGR7M30pXFwpP1stIF0/KFxcZHszfSlbLSBdPyhcXGR7NH0pJC87XG4gIHJldHVybiByZWdleC50ZXN0KHBob25lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0FscGhhTnVtZXJpYyA9IGNoID0+IHtcbiAgcmV0dXJuIGNoLm1hdGNoKC9eKFthLXowLTldKSsvaSkgIT09IG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBpc1ZhbGlkQ2FuYWRpYW5aaXBjb2RlID0gemlwY29kZSA9PiBcbiAgemlwY29kZS5tYXRjaCgvXltBLVphLXpdXFxkW0EtWmEtel0kLykgIT09IG51bGwgfHwgemlwY29kZS5tYXRjaCgvXltBLVphLXpdXFxkW0EtWmEtel1bIC1dP1xcZFtBLVphLXpdXFxkLykgIT09IG51bGxcblxuLy8gc2VlIHZhbGlkYXRlLXNzbi5qc1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlU1NOID0gc3NuID0+IHtcbiAgaWYgKHR5cGVvZiBzc24gIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgbnVtYmVyU1NOID0gc3NuLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcbiAgcmV0dXJuIG51bWJlclNTTi5sZW5ndGggPT09IDk7XG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVDaGVjayA9IHdvcmtlcl9jaGVjayA9PiB7XG4gIGNvbnN0IGNoZWNrID0gd29ya2VyX2NoZWNrID09PSBcImNsZWFyXCIgPyBbXSA6IHdvcmtlcl9jaGVjaztcbiAgaWYgKGlzQXJyYXlPck9ic2VydmFibGVBcnJheShjaGVjaykpIHJldHVybiBbLi4uY2hlY2tdO1xuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBjb250YWluc0F0U3ltYm9sID0gc3RyID0+IC9ALy50ZXN0KHN0cik7XG5leHBvcnQgY29uc3QgY29udGFpbnNOdW1iZXIgPSBzdHIgPT4gL1xcZC8udGVzdChzdHIpO1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlTmFtZSA9IG5hbWUgPT5cbiAgbmFtZS50cmltKCkubGVuZ3RoICE9PSAwICYmICFjb250YWluc0F0U3ltYm9sKG5hbWUpICYmICFjb250YWluc051bWJlcihuYW1lKTtcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUFkZHJlc3MgPSBhZGRyZXNzID0+XG4gIGFkZHJlc3MudHJpbSgpLmxlbmd0aCAhPT0gMCAmJiAhY29udGFpbnNBdFN5bWJvbChhZGRyZXNzKTsgIFxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQ3VzdG9tSW5wdXQgPSB2YWx1ZSA9PiB7XG4gIGlmICghXy5pc1N0cmluZyh2YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHZhbHVlLnRyaW0oKS5sZW5ndGggIT09IDA7XG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVaaXBjb2RlID0gemlwY29kZSA9PlxuICBfLmlzU3RyaW5nKHppcGNvZGUpICYmIHppcGNvZGUubGVuZ3RoID49IDU7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUNhbmFkaWFuWmlwY29kZSA9IHppcGNvZGUgPT5cbiAgXy5pc1N0cmluZyh6aXBjb2RlKSBcbiAgICAmJiBpc0FscGhhTnVtZXJpYyh6aXBjb2RlKSBcbiAgICAmJiBpc1ZhbGlkQ2FuYWRpYW5aaXBjb2RlKHppcGNvZGUpO1xuXG5leHBvcnQgY29uc3QgaXNBcnJheSA9IHZhbHVlID0+XG4gIGlzQXJyYXlPck9ic2VydmFibGVBcnJheSh2YWx1ZSk7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU1WUkNoZWNrID0gY2hlY2sgPT5cbiAgXy5pc09iamVjdChjaGVjaykgfHwgdHlwZW9mIGNoZWNrID09PSBcInN0cmluZ1wiID8gY2hlY2sgOiB7fTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlUGhvbmVWZXJpZmljYXRpb24gPSBzdGF0dXMgPT4ge1xuICBzd2l0Y2ggKHN0YXR1cykge1xuICAgIGNhc2UgXCJ2ZXJpZmllZFwiOlxuICAgIGNhc2UgXCJUcnVlXCI6XG4gICAgICByZXR1cm4gXCJ2ZXJpZmllZFwiO1xuICAgIGNhc2UgXCJ1bnZlcmlmaWVkXCI6XG4gICAgY2FzZSBcIkZhbHNlXCI6XG4gICAgICByZXR1cm4gXCJ1bnZlcmlmaWVkXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcIlwiO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZGlzYWJsZV9jaGVjayA9IGVudl92YXIgPT5cbiAgdHlwZW9mIGVudl92YXIgPT09IFwic3RyaW5nXCIgPyBlbnZfdmFyLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiIDogZmFsc2U7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUVtYWlsSWQgPSBpZCA9PiBfLmlzU3RyaW5nKGlkKSAmJiBpZC5sZW5ndGggPT09IDMyO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUdXJuSWQgPSBpZCA9PlxuICBfLmlzU3RyaW5nKGlkKSAmJiAvXkN7MX1bMC05XXsxMH0kLy50ZXN0KGlkKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=