(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{"./node_modules/custom-backbone/backbone-min.js":function(e,t,n){(function(){var e,r=this,i=r.Backbone,o=[],s=o.push,a=o.slice,u=o.splice;(e=t).VERSION="1.0.0";var l=r._;l||(l=n("./node_modules/underscore/underscore.js")),e.$=n("./node_modules/jquery/dist/jquery.js"),e.noConflict=function(){return r.Backbone=i,this},e.emulateHTTP=!1,e.emulateJSON=!1;var c=e.Events={on:function(e,t,n){return h(this,"on",e,[t,n])&&t?(this._events||(this._events={}),(this._events[e]||(this._events[e]=[])).push({callback:t,context:n,ctx:n||this}),this):this},once:function(e,t,n){if(!h(this,"once",e,[t,n])||!t)return this;var r=this,i=l.once((function(){r.off(e,i),t.apply(this,arguments)}));return i._callback=t,this.on(e,i,n)},off:function(e,t,n){var r,i,o,s,a,u,c,f;if(!this._events||!h(this,"off",e,[t,n]))return this;if(!e&&!t&&!n)return this._events={},this;for(a=0,u=(s=e?[e]:l.keys(this._events)).length;a<u;a++)if(e=s[a],o=this._events[e]){if(this._events[e]=r=[],t||n)for(c=0,f=o.length;c<f;c++)i=o[c],(t&&t!==i.callback&&t!==i.callback._callback||n&&n!==i.context)&&r.push(i);r.length||delete this._events[e]}return this},trigger:function(e){if(!this._events)return this;var t=a.call(arguments,1);if(!h(this,"trigger",e,t))return this;var n=this._events[e],r=this._events.all;return n&&p(n,t),r&&p(r,arguments),this},stopListening:function(e,t,n){var r=this._listeners;if(!r)return this;var i=!t&&!n;for(var o in"object"==typeof t&&(n=this),e&&((r={})[e._listenerId]=e),r)r[o].off(t,n,this),i&&delete this._listeners[o];return this}},f=/\s+/,h=function(e,t,n,r){if(!n)return!0;if("object"==typeof n){for(var i in n)e[t].apply(e,[i,n[i]].concat(r));return!1}if(f.test(n)){for(var o=n.split(f),s=0,a=o.length;s<a;s++)e[t].apply(e,[o[s]].concat(r));return!1}return!0},p=function(e,t){var n,r=-1,i=e.length,o=t[0],s=t[1],a=t[2];switch(t.length){case 0:for(;++r<i;)(n=e[r]).callback.call(n.ctx);return;case 1:for(;++r<i;)(n=e[r]).callback.call(n.ctx,o);return;case 2:for(;++r<i;)(n=e[r]).callback.call(n.ctx,o,s);return;case 3:for(;++r<i;)(n=e[r]).callback.call(n.ctx,o,s,a);return;default:for(;++r<i;)(n=e[r]).callback.apply(n.ctx,t)}};l.each({listenTo:"on",listenToOnce:"once"},(function(e,t){c[t]=function(t,n,r){return(this._listeners||(this._listeners={}))[t._listenerId||(t._listenerId=l.uniqueId("l"))]=t,"object"==typeof n&&(r=this),t[e](n,r,this),this}})),c.bind=c.on,c.unbind=c.off,l.extend(e,c);var d=e.Model=function(e,t){var n,r=e||{};t||(t={}),this.cid=l.uniqueId("c"),this.attributes={},l.extend(this,l.pick(t,g)),t.parse&&(r=this.parse(r,t)||{}),(n=l.result(this,"defaults"))&&(r=l.defaults({},r,n)),this.set(r,t),this.changed={},this.initialize.apply(this,arguments)},g=["url","urlRoot","collection"];l.extend(d.prototype,c,{changed:null,validationError:null,idAttribute:"id",initialize:function(){},toJSON:function(e){return l.clone(this.attributes)},sync:function(){return e.sync.apply(this,arguments)},get:function(e){return this.attributes[e]},escape:function(e){return l.escape(this.get(e))},has:function(e){return null!=this.get(e)},set:function(e,t,n){var r,i,o,s,a,u,c,f;if(null==e)return this;if("object"==typeof e?(i=e,n=t):(i={})[e]=t,n||(n={}),!this._validate(i,n))return!1;for(r in o=n.unset,a=n.silent,s=[],u=this._changing,this._changing=!0,u||(this._previousAttributes=l.clone(this.attributes),this.changed={}),f=this.attributes,c=this._previousAttributes,this.idAttribute in i&&(this.id=i[this.idAttribute]),i)t=i[r],l.isEqual(f[r],t)||s.push(r),l.isEqual(c[r],t)?delete this.changed[r]:this.changed[r]=t,o?delete f[r]:f[r]=t;if(!a){s.length&&(this._pending=!0);for(var h=0,p=s.length;h<p;h++)this.trigger("change:"+s[h],this,f[s[h]],n)}if(u)return this;if(!a)for(;this._pending;)this._pending=!1,this.trigger("change",this,n);return this._pending=!1,this._changing=!1,this},unset:function(e,t){return this.set(e,void 0,l.extend({},t,{unset:!0}))},clear:function(e){var t={};for(var n in this.attributes)t[n]=void 0;return this.set(t,l.extend({},e,{unset:!0}))},hasChanged:function(e){return null==e?!l.isEmpty(this.changed):l.has(this.changed,e)},changedAttributes:function(e){if(!e)return!!this.hasChanged()&&l.clone(this.changed);var t,n=!1,r=this._changing?this._previousAttributes:this.attributes;for(var i in e)l.isEqual(r[i],t=e[i])||((n||(n={}))[i]=t);return n},previous:function(e){return null!=e&&this._previousAttributes?this._previousAttributes[e]:null},previousAttributes:function(){return l.clone(this._previousAttributes)},fetch:function(e){void 0===(e=e?l.clone(e):{}).parse&&(e.parse=!0);var t=this,n=e.success;return e.success=function(r){if(!t.set(t.parse(r,e),e))return!1;n&&n(t,r,e),t.trigger("sync",t,r,e)},H(this,e),this.sync("read",this,e)},save:function(e,t,n){var r,i,o,s=this.attributes;if(null==e||"object"==typeof e?(r=e,n=t):(r={})[e]=t,r&&(!n||!n.wait)&&!this.set(r,n))return!1;if(n=l.extend({validate:!0},n),!this._validate(r,n))return!1;r&&n.wait&&(this.attributes=l.extend({},s,r)),void 0===n.parse&&(n.parse=!0);var a=this,u=n.success;return n.success=function(e){a.attributes=s;var t=a.parse(e,n);if(n.wait&&(t=l.extend(r||{},t)),l.isObject(t)&&!a.set(t,n))return!1;u&&u(a,e,n),a.trigger("sync",a,e,n)},H(this,n),"patch"===(i=this.isNew()?"create":n.patch?"patch":"update")&&(n.attrs=r),o=this.sync(i,this,n),r&&n.wait&&(this.attributes=s),o},destroy:function(e){e=e?l.clone(e):{};var t=this,n=e.success,r=function(){t.trigger("destroy",t,t.collection,e)};if(e.success=function(i){(e.wait||t.isNew())&&r(),n&&n(t,i,e),t.isNew()||t.trigger("sync",t,i,e)},this.isNew())return e.success(),!1;H(this,e);var i=this.sync("delete",this,e);return e.wait||r(),i},url:function(){var e=l.result(this,"urlRoot")||l.result(this.collection,"url")||O();return this.isNew()?e:e+("/"===e.charAt(e.length-1)?"":"/")+encodeURIComponent(this.id)},parse:function(e,t){return e},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return null==this.id},isValid:function(e){return this._validate({},l.extend(e||{},{validate:!0}))},_validate:function(e,t){if(!t.validate||!this.validate)return!0;e=l.extend({},this.attributes,e);var n=this.validationError=this.validate(e,t)||null;return!n||(this.trigger("invalid",this,n,l.extend(t||{},{validationError:n})),!1)}});l.each(["keys","values","pairs","invert","pick","omit"],(function(e){d.prototype[e]=function(){var t=a.call(arguments);return t.unshift(this.attributes),l[e].apply(l,t)}}));var v=e.Collection=function(e,t){t||(t={}),t.url&&(this.url=t.url),t.model&&(this.model=t.model),void 0!==t.comparator&&(this.comparator=t.comparator),this._reset(),this.initialize.apply(this,arguments),e&&this.reset(e,l.extend({silent:!0},t))},m={add:!0,remove:!0,merge:!0},y={add:!0,merge:!1,remove:!1};l.extend(v.prototype,c,{model:d,initialize:function(){},toJSON:function(e){return this.map((function(t){return t.toJSON(e)}))},sync:function(){return e.sync.apply(this,arguments)},add:function(e,t){return this.set(e,l.defaults(t||{},y))},remove:function(e,t){var n,r,i,o;for(t||(t={}),n=0,r=(e=l.isArray(e)?e.slice():[e]).length;n<r;n++)(o=this.get(e[n]))&&(delete this._byId[o.id],delete this._byId[o.cid],i=this.indexOf(o),this.models.splice(i,1),this.length--,t.silent||(t.index=i,o.trigger("remove",o,this,t)),this._removeReference(o));return this},set:function(e,t){var n,r,i,o,a;(t=l.defaults(t||{},m)).parse&&(e=this.parse(e,t)),l.isArray(e)||(e=e?[e]:[]);var c=t.at,f=this.comparator&&null==c&&!1!==t.sort,h=l.isString(this.comparator)?this.comparator:null,p=[],d=[],g={};for(n=0,r=e.length;n<r;n++)(i=this._prepareModel(e[n],t))&&((o=this.get(i))?(t.remove&&(g[o.cid]=!0),t.merge&&(o.set(i.attributes,t),f&&!a&&o.hasChanged(h)&&(a=!0))):t.add&&(p.push(i),i.on("all",this._onModelEvent,this),this._byId[i.cid]=i,null!=i.id&&(this._byId[i.id]=i)));if(t.remove){for(n=0,r=this.length;n<r;++n)g[(i=this.models[n]).cid]||d.push(i);d.length&&this.remove(d,t)}if(p.length&&(f&&(a=!0),this.length+=p.length,null!=c?u.apply(this.models,[c,0].concat(p)):s.apply(this.models,p)),a&&this.sort({silent:!0}),t.silent)return this;for(n=0,r=p.length;n<r;n++)(i=p[n]).trigger("add",i,this,t);return a&&this.trigger("sort",this,t),this},reset:function(e,t){t||(t={});for(var n=0,r=this.models.length;n<r;n++)this._removeReference(this.models[n]);return t.previousModels=this.models,this._reset(),this.add(e,l.extend({silent:!0},t)),t.silent||this.trigger("reset",this,t),this},push:function(e,t){return e=this._prepareModel(e,t),this.add(e,l.extend({at:this.length},t)),e},pop:function(e){var t=this.at(this.length-1);return this.remove(t,e),t},unshift:function(e,t){return e=this._prepareModel(e,t),this.add(e,l.extend({at:0},t)),e},shift:function(e){var t=this.at(0);return this.remove(t,e),t},slice:function(e,t){return this.models.slice(e,t)},get:function(e){if(null!=e)return this._byId[null!=e.id?e.id:e.cid||e]},at:function(e){return this.models[e]},where:function(e,t){return l.isEmpty(e)?t?void 0:[]:this[t?"find":"filter"]((function(t){for(var n in e)if(e[n]!==t.get(n))return!1;return!0}))},findWhere:function(e){return this.where(e,!0)},sort:function(e){if(!this.comparator)throw new Error("Cannot sort a set without a comparator");return e||(e={}),l.isString(this.comparator)||1===this.comparator.length?this.models=this.sortBy(this.comparator,this):this.models.sort(l.bind(this.comparator,this)),e.silent||this.trigger("sort",this,e),this},sortedIndex:function(e,t,n){t||(t=this.comparator);var r=l.isFunction(t)?t:function(e){return e.get(t)};return l.sortedIndex(this.models,e,r,n)},pluck:function(e){return l.invoke(this.models,"get",e)},fetch:function(e){void 0===(e=e?l.clone(e):{}).parse&&(e.parse=!0);var t=e.success,n=this;return e.success=function(r){var i=e.reset?"reset":"set";n[i](r,e),t&&t(n,r,e),n.trigger("sync",n,r,e)},H(this,e),this.sync("read",this,e)},create:function(e,t){if(t=t?l.clone(t):{},!(e=this._prepareModel(e,t)))return!1;t.wait||this.add(e,t);var n=this,r=t.success;return t.success=function(i){t.wait&&n.add(e,t),r&&r(e,i,t)},e.save(null,t),e},parse:function(e,t){return e},clone:function(){return new this.constructor(this.models)},_reset:function(){this.length=0,this.models=[],this._byId={}},_prepareModel:function(e,t){if(e instanceof d)return e.collection||(e.collection=this),e;t||(t={}),t.collection=this;var n=new this.model(e,t);return n._validate(e,t)?n:(this.trigger("invalid",this,e,t),!1)},_removeReference:function(e){this===e.collection&&delete e.collection,e.off("all",this._onModelEvent,this)},_onModelEvent:function(e,t,n,r){("add"!==e&&"remove"!==e||n===this)&&("destroy"===e&&this.remove(t,r),t&&e==="change:"+t.idAttribute&&(delete this._byId[t.previous(t.idAttribute)],null!=t.id&&(this._byId[t.id]=t)),this.trigger.apply(this,arguments))}});l.each(["forEach","each","map","collect","reduce","foldl","inject","reduceRight","foldr","find","detect","filter","select","reject","every","all","some","any","include","contains","invoke","max","min","toArray","size","first","head","take","initial","rest","tail","drop","last","without","indexOf","shuffle","lastIndexOf","isEmpty","chain"],(function(e){v.prototype[e]=function(){var t=a.call(arguments);return t.unshift(this.models),l[e].apply(l,t)}}));l.each(["groupBy","countBy","sortBy"],(function(e){v.prototype[e]=function(t,n){var r=l.isFunction(t)?t:function(e){return e.get(t)};return l[e](this.models,r,n)}}));var x=e.View=function(e){this.cid=l.uniqueId("view"),this._configure(e||{}),this._ensureElement(),this.initialize.apply(this,arguments),this.delegateEvents()},b=/^(\S+)\s*(.*)$/,w=["model","collection","el","id","attributes","className","tagName","events"];l.extend(x.prototype,c,{tagName:"div",$:function(e){return this.$el.find(e)},initialize:function(){},render:function(){return this},remove:function(){return this.$el.remove(),this.stopListening(),this},setElement:function(t,n){return this.$el&&this.undelegateEvents(),this.$el=t instanceof e.$?t:e.$(t),this.el=this.$el[0],!1!==n&&this.delegateEvents(),this},delegateEvents:function(e){if(!e&&!(e=l.result(this,"events")))return this;for(var t in this.undelegateEvents(),e){var n=e[t];if(l.isFunction(n)||(n=this[e[t]]),n){var r=t.match(b),i=r[1],o=r[2];n=l.bind(n,this),i+=".delegateEvents"+this.cid,""===o?this.$el.on(i,n):this.$el.on(i,o,n)}}return this},undelegateEvents:function(){return this.$el.off(".delegateEvents"+this.cid),this},_configure:function(e){this.options&&(e=l.extend({},l.result(this,"options"),e)),l.extend(this,l.pick(e,w)),this.options=e},_ensureElement:function(){if(this.el)this.setElement(l.result(this,"el"),!1);else{var t=l.extend({},l.result(this,"attributes"));this.id&&(t.id=l.result(this,"id")),this.className&&(t.class=l.result(this,"className"));var n=e.$("<"+l.result(this,"tagName")+">").attr(t);this.setElement(n,!1)}}}),e.sync=function(t,n,r){var i=T[t];l.defaults(r||(r={}),{emulateHTTP:e.emulateHTTP,emulateJSON:e.emulateJSON});var o={type:i,dataType:"json"};if(r.url||(o.url=l.result(n,"url")||O()),null!=r.data||!n||"create"!==t&&"update"!==t&&"patch"!==t||(o.contentType="application/json",o.data=JSON.stringify(r.attrs||n.toJSON(r))),r.emulateJSON&&(o.contentType="application/x-www-form-urlencoded",o.data=o.data?{model:o.data}:{}),r.emulateHTTP&&("PUT"===i||"DELETE"===i||"PATCH"===i)){o.type="POST",r.emulateJSON&&(o.data._method=i);var s=r.beforeSend;r.beforeSend=function(e){if(e.setRequestHeader("X-HTTP-Method-Override",i),s)return s.apply(this,arguments)}}"GET"===o.type||r.emulateJSON||(o.processData=!1),"PATCH"!==o.type||!window.ActiveXObject||window.external&&window.external.msActiveXFilteringEnabled||(o.xhr=function(){return new ActiveXObject("Microsoft.XMLHTTP")});var a=r.xhr=e.ajax(l.extend(o,r));return n.trigger("request",n,a,r),a};var T={create:"POST",update:"PUT",patch:"PATCH",delete:"DELETE",read:"GET"};e.ajax=function(){return e.$.ajax.apply(e.$,arguments)};var C=e.Router=function(e){e||(e={}),e.routes&&(this.routes=e.routes),this._bindRoutes(),this.initialize.apply(this,arguments)},E=/\((.*?)\)/g,k=/(\(\?)?:\w+/g,S=/\*\w+/g,j=/[\-{}\[\]+?.,\\\^$|#\s]/g;l.extend(C.prototype,c,{initialize:function(){},route:function(t,n,r){l.isRegExp(t)||(t=this._routeToRegExp(t)),l.isFunction(n)&&(r=n,n=""),r||(r=this[n]);var i=this;return e.history.route(t,(function(o){var s=i._extractParameters(t,o);r&&r.apply(i,s),i.trigger.apply(i,["route:"+n].concat(s)),i.trigger("route",n,s),e.history.trigger("route",i,n,s)})),this},navigate:function(t,n){return e.history.navigate(t,n),this},_bindRoutes:function(){if(this.routes){this.routes=l.result(this,"routes");for(var e,t=l.keys(this.routes);null!=(e=t.pop());)this.route(e,this.routes[e])}},_routeToRegExp:function(e){return e=e.replace(j,"\\$&").replace(E,"(?:$1)?").replace(k,(function(e,t){return t?e:"([^/]+)"})).replace(S,"(.*?)"),new RegExp("^"+e+"$")},_extractParameters:function(e,t){var n=e.exec(t).slice(1);return l.map(n,(function(e){return e?decodeURIComponent(e):null}))}});var N=e.History=function(){this.handlers=[],l.bindAll(this,"checkUrl"),"undefined"!=typeof window&&(this.location=window.location,this.history=window.history)},_=/^[#\/]|\s+$/g,A=/^\/+|\/+$/g,D=/msie [\w.]+/,q=/\/$/;N.started=!1,l.extend(N.prototype,c,{interval:50,getHash:function(e){var t=(e||this).location.href.match(/#(.*)$/);return t?t[1]:""},getFragment:function(e,t){if(null==e)if(this._hasPushState||!this._wantsHashChange||t){e=this.location.pathname;var n=this.root.replace(q,"");e.indexOf(n)||(e=e.substr(n.length))}else e=this.getHash();return e.replace(_,"")},start:function(t){if(N.started)throw new Error("Backbone.history has already been started");N.started=!0,this.options=l.extend({},{root:"/"},this.options,t),this.root=this.options.root,this._wantsHashChange=!1!==this.options.hashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!!(this.options.pushState&&this.history&&this.history.pushState);var n=this.getFragment(),r=document.documentMode,i=D.exec(navigator.userAgent.toLowerCase())&&(!r||r<=7);this.root=("/"+this.root+"/").replace(A,"/"),i&&this._wantsHashChange&&(this.iframe=e.$('<iframe src="javascript:0" tabindex="-1" />').hide().appendTo("body")[0].contentWindow,this.navigate(n)),this._hasPushState?e.$(window).on("popstate",this.checkUrl):this._wantsHashChange&&"onhashchange"in window&&!i?e.$(window).on("hashchange",this.checkUrl):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),this.fragment=n;var o=this.location,s=o.pathname.replace(/[^\/]$/,"$&/")===this.root;return this._wantsHashChange&&this._wantsPushState&&!this._hasPushState&&!s?(this.fragment=this.getFragment(null,!0),this.location.replace(this.root+this.location.search+"#"+this.fragment),!0):(this._wantsPushState&&this._hasPushState&&s&&o.hash&&(this.fragment=this.getHash().replace(_,""),this.history.replaceState({},document.title,this.root+this.fragment+o.search)),this.options.silent?void 0:this.loadUrl())},stop:function(){e.$(window).off("popstate",this.checkUrl).off("hashchange",this.checkUrl),clearInterval(this._checkUrlInterval),N.started=!1},route:function(e,t){this.handlers.unshift({route:e,callback:t})},checkUrl:function(e){var t=this.getFragment();if(t===this.fragment&&this.iframe&&(t=this.getFragment(this.getHash(this.iframe))),t===this.fragment)return!1;this.iframe&&this.navigate(t),this.loadUrl()||this.loadUrl(this.getHash())},loadUrl:function(e){var t=this.fragment=this.getFragment(e);return l.any(this.handlers,(function(e){if(e.route.test(t))return e.callback(t),!0}))},navigate:function(e,t){if(!N.started)return!1;if(t&&!0!==t||(t={trigger:t}),e=this.getFragment(e||""),this.fragment!==e){this.fragment=e;var n=this.root+e;if(this._hasPushState)this.history[t.replace?"replaceState":"pushState"]({},document.title,n);else{if(!this._wantsHashChange)return this.location.assign(n);this._updateHash(this.location,e,t.replace),this.iframe&&e!==this.getFragment(this.getHash(this.iframe))&&(t.replace||this.iframe.document.open().close(),this._updateHash(this.iframe.location,e,t.replace))}t.trigger&&this.loadUrl(e)}},_updateHash:function(e,t,n){if(n){var r=e.href.replace(/(javascript:|#).*$/,"");e.replace(r+"#"+t)}else e.hash="#"+t}}),e.history=new N;d.extend=v.extend=C.extend=x.extend=N.extend=function(e,t){var n,r=this;n=e&&l.has(e,"constructor")?e.constructor:function(){return r.apply(this,arguments)},l.extend(n,r,t);var i=function(){this.constructor=n};return i.prototype=r.prototype,n.prototype=new i,e&&l.extend(n.prototype,e),n.__super__=r.prototype,n};var O=function(){throw new Error('A "url" property or function must be specified')},H=function(e,t){var n=t.error;t.error=function(r){n&&n(e,r,t),e.trigger("error",e,r,t)}}}).call(this)},"./node_modules/element-closest-polyfill/index.js":function(e,t){Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),Element.prototype.closest||(Element.prototype.closest=function(e){var t=this;do{if(t.matches(e))return t;t=t.parentElement||t.parentNode}while(null!==t&&1===t.nodeType);return null})},"./node_modules/jquery/dist/jquery.js":function(e,t,n){var r,i,o;i="undefined"!=typeof window?window:this,o=function(n,i){var o=[],s=n.document,a=o.slice,u=o.concat,l=o.push,c=o.indexOf,f={},h=f.toString,p=f.hasOwnProperty,d={},g=function(e,t){return new g.fn.init(e,t)},v=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,m=/^-ms-/,y=/-([\da-z])/gi,x=function(e,t){return t.toUpperCase()};function b(e){var t=!!e&&"length"in e&&e.length,n=g.type(e);return"function"!==n&&!g.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}g.fn=g.prototype={jquery:"2.2.4",constructor:g,selector:"",length:0,toArray:function(){return a.call(this)},get:function(e){return null!=e?e<0?this[e+this.length]:this[e]:a.call(this)},pushStack:function(e){var t=g.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e){return g.each(this,e)},map:function(e){return this.pushStack(g.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return this.pushStack(a.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:l,sort:o.sort,splice:o.splice},g.extend=g.fn.extend=function(){var e,t,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,l=!1;for("boolean"==typeof s&&(l=s,s=arguments[a]||{},a++),"object"==typeof s||g.isFunction(s)||(s={}),a===u&&(s=this,a--);a<u;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],s!==(r=e[t])&&(l&&r&&(g.isPlainObject(r)||(i=g.isArray(r)))?(i?(i=!1,o=n&&g.isArray(n)?n:[]):o=n&&g.isPlainObject(n)?n:{},s[t]=g.extend(l,o,r)):void 0!==r&&(s[t]=r));return s},g.extend({expando:"jQuery"+("2.2.4"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return"function"===g.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){var t=e&&e.toString();return!g.isArray(e)&&t-parseFloat(t)+1>=0},isPlainObject:function(e){var t;if("object"!==g.type(e)||e.nodeType||g.isWindow(e))return!1;if(e.constructor&&!p.call(e,"constructor")&&!p.call(e.constructor.prototype||{},"isPrototypeOf"))return!1;for(t in e);return void 0===t||p.call(e,t)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?f[h.call(e)]||"object":typeof e},globalEval:function(e){var t,n=eval;(e=g.trim(e))&&(1===e.indexOf("use strict")?((t=s.createElement("script")).text=e,s.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(m,"ms-").replace(y,x)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t){var n,r=0;if(b(e))for(n=e.length;r<n&&!1!==t.call(e[r],r,e[r]);r++);else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(v,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(b(Object(e))?g.merge(n,"string"==typeof e?[e]:e):l.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:c.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,s=!n;i<o;i++)!t(e[i],i)!==s&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,s=[];if(b(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&s.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&s.push(i);return u.apply([],s)},guid:1,proxy:function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),g.isFunction(e))return r=a.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(a.call(arguments)))}).guid=e.guid=e.guid||g.guid++,i},now:Date.now,support:d}),"function"==typeof Symbol&&(g.fn[Symbol.iterator]=o[Symbol.iterator]),g.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),(function(e,t){f["[object "+t+"]"]=t.toLowerCase()}));var w=function(e){var t,n,r,i,o,s,a,u,l,c,f,h,p,d,g,v,m,y,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ie(),k=ie(),S=ie(),j=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,_=[],A=_.pop,D=_.push,q=_.push,O=_.slice,H=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",F="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",P="\\["+F+"*("+R+")(?:"+F+"*([*^$|!~]?=)"+F+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+R+"))|)"+F+"*\\]",I=":("+R+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",M=new RegExp(F+"+","g"),$=new RegExp("^"+F+"+|((?:^|[^\\\\])(?:\\\\.)*)"+F+"+$","g"),B=new RegExp("^"+F+"*,"+F+"*"),W=new RegExp("^"+F+"*([>+~]|"+F+")"+F+"*"),z=new RegExp("="+F+"*([^\\]'\"]*?)"+F+"*\\]","g"),U=new RegExp(I),X=new RegExp("^"+R+"$"),J={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+I),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+F+"*(even|odd|(([+-]|)(\\d*)n|)"+F+"*(?:([+-]|)"+F+"*(\\d+)|))"+F+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+F+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+F+"*((?:-\\d)?\\d*)"+F+"*\\)|)(?=[^-]|$)","i")},V=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,G=/^[^{]+\{\s*\[native \w/,Q=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=/'|\\/g,ee=new RegExp("\\\\([\\da-f]{1,6}"+F+"?|("+F+")|.)","ig"),te=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},ne=function(){h()};try{q.apply(_=O.call(w.childNodes),w.childNodes),_[w.childNodes.length].nodeType}catch(e){q={apply:_.length?function(e,t){D.apply(e,O.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function re(e,t,r,i){var o,a,l,c,f,d,m,y,T=t&&t.ownerDocument,C=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==C&&9!==C&&11!==C)return r;if(!i&&((t?t.ownerDocument||t:w)!==p&&h(t),t=t||p,g)){if(11!==C&&(d=Q.exec(e)))if(o=d[1]){if(9===C){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(T&&(l=T.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(d[2])return q.apply(r,t.getElementsByTagName(e)),r;if((o=d[3])&&n.getElementsByClassName&&t.getElementsByClassName)return q.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!v||!v.test(e))){if(1!==C)T=t,y=e;else if("object"!==t.nodeName.toLowerCase()){for((c=t.getAttribute("id"))?c=c.replace(Z,"\\$&"):t.setAttribute("id",c=b),a=(m=s(e)).length,f=X.test(c)?"#"+c:"[id='"+c+"']";a--;)m[a]=f+" "+de(m[a]);y=m.join(","),T=K.test(e)&&he(t.parentNode)||t}if(y)try{return q.apply(r,T.querySelectorAll(y)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace($,"$1"),t,r,i)}function ie(){var e=[];return function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}}function oe(e){return e[b]=!0,e}function se(e){var t=p.createElement("div");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ae(e,t){for(var n=e.split("|"),i=n.length;i--;)r.attrHandle[n[i]]=t}function ue(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||1<<31)-(~e.sourceIndex||1<<31);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function le(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function ce(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function fe(e){return oe((function(t){return t=+t,oe((function(n,r){for(var i,o=e([],n.length,t),s=o.length;s--;)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))}))}))}function he(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=re.support={},o=re.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},h=re.setDocument=function(e){var t,i,s=e?e.ownerDocument||e:w;return s!==p&&9===s.nodeType&&s.documentElement?(d=(p=s).documentElement,g=!o(p),(i=p.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",ne,!1):i.attachEvent&&i.attachEvent("onunload",ne)),n.attributes=se((function(e){return e.className="i",!e.getAttribute("className")})),n.getElementsByTagName=se((function(e){return e.appendChild(p.createComment("")),!e.getElementsByTagName("*").length})),n.getElementsByClassName=G.test(p.getElementsByClassName),n.getById=se((function(e){return d.appendChild(e).id=b,!p.getElementsByName||!p.getElementsByName(b).length})),n.getById?(r.find.ID=function(e,t){if(void 0!==t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}},r.filter.ID=function(e){var t=e.replace(ee,te);return function(e){return e.getAttribute("id")===t}}):(delete r.find.ID,r.filter.ID=function(e){var t=e.replace(ee,te);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}}),r.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&g)return t.getElementsByClassName(e)},m=[],v=[],(n.qsa=G.test(p.querySelectorAll))&&(se((function(e){d.appendChild(e).innerHTML="<a id='"+b+"'></a><select id='"+b+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+F+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+F+"*(?:value|"+L+")"),e.querySelectorAll("[id~="+b+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||v.push(".#.+[+~]")})),se((function(e){var t=p.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+F+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")}))),(n.matchesSelector=G.test(y=d.matches||d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&se((function(e){n.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)})),v=v.length&&new RegExp(v.join("|")),m=m.length&&new RegExp(m.join("|")),t=G.test(d.compareDocumentPosition),x=t||G.test(d.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===p||e.ownerDocument===w&&x(w,e)?-1:t===p||t.ownerDocument===w&&x(w,t)?1:c?H(c,e)-H(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,s=[e],a=[t];if(!i||!o)return e===p?-1:t===p?1:i?-1:o?1:c?H(c,e)-H(c,t):0;if(i===o)return ue(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)a.unshift(n);for(;s[r]===a[r];)r++;return r?ue(s[r],a[r]):s[r]===w?-1:a[r]===w?1:0},p):p},re.matches=function(e,t){return re(e,null,null,t)},re.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&h(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!m||!m.test(t))&&(!v||!v.test(t)))try{var r=y.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return re(t,p,null,[e]).length>0},re.contains=function(e,t){return(e.ownerDocument||e)!==p&&h(e),x(e,t)},re.attr=function(e,t){(e.ownerDocument||e)!==p&&h(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},re.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},re.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(j),f){for(;t=e[o++];)t===e[o]&&(i=r.push(o));for(;i--;)e.splice(r[i],1)}return c=null,e},i=re.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r++];)n+=i(t);return n},(r=re.selectors={cacheLength:50,createPseudo:oe,match:J,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(ee,te),e[3]=(e[3]||e[4]||e[5]||"").replace(ee,te),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||re.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&re.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return J.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&U.test(n)&&(t=s(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(ee,te).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+F+")"+e+"("+F+"|$)"))&&E(e,(function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")}))},ATTR:function(e,t,n){return function(r){var i=re.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace(M," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,h,p,d,g=o!==s?"nextSibling":"previousSibling",v=t.parentNode,m=a&&t.nodeName.toLowerCase(),y=!u&&!a,x=!1;if(v){if(o){for(;g;){for(h=t;h=h[g];)if(a?h.nodeName.toLowerCase()===m:1===h.nodeType)return!1;d=g="only"===e&&!d&&"nextSibling"}return!0}if(d=[s?v.firstChild:v.lastChild],s&&y){for(x=(p=(l=(c=(f=(h=v)[b]||(h[b]={}))[h.uniqueID]||(f[h.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],h=p&&v.childNodes[p];h=++p&&h&&h[g]||(x=p=0)||d.pop();)if(1===h.nodeType&&++x&&h===t){c[e]=[T,p,x];break}}else if(y&&(x=p=(l=(c=(f=(h=t)[b]||(h[b]={}))[h.uniqueID]||(f[h.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)for(;(h=++p&&h&&h[g]||(x=p=0)||d.pop())&&((a?h.nodeName.toLowerCase()!==m:1!==h.nodeType)||!++x||(y&&((c=(f=h[b]||(h[b]={}))[h.uniqueID]||(f[h.uniqueID]={}))[e]=[T,x]),h!==t)););return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||re.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?oe((function(e,n){for(var r,o=i(e,t),s=o.length;s--;)e[r=H(e,o[s])]=!(n[r]=o[s])})):function(e){return i(e,0,n)}):i}},pseudos:{not:oe((function(e){var t=[],n=[],r=a(e.replace($,"$1"));return r[b]?oe((function(e,t,n,i){for(var o,s=r(e,null,i,[]),a=e.length;a--;)(o=s[a])&&(e[a]=!(t[a]=o))})):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}})),has:oe((function(e){return function(t){return re(e,t).length>0}})),contains:oe((function(e){return e=e.replace(ee,te),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}})),lang:oe((function(e){return X.test(e||"")||re.error("unsupported lang: "+e),e=e.replace(ee,te).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}})),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return!1===e.disabled},disabled:function(e){return!0===e.disabled},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return V.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:fe((function(){return[0]})),last:fe((function(e,t){return[t-1]})),eq:fe((function(e,t,n){return[n<0?n+t:n]})),even:fe((function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e})),odd:fe((function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e})),lt:fe((function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e})),gt:fe((function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e}))}}).pseudos.nth=r.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=le(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=ce(t);function pe(){}function de(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function ge(e,t,n){var r=t.dir,i=n&&"parentNode"===r,o=C++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,s){var a,u,l,c=[T,o];if(s){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,s))return!0}else for(;t=t[r];)if(1===t.nodeType||i){if((a=(u=(l=t[b]||(t[b]={}))[t.uniqueID]||(l[t.uniqueID]={}))[r])&&a[0]===T&&a[1]===o)return c[2]=a[2];if(u[r]=c,c[2]=e(t,n,s))return!0}}}function ve(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function me(e,t,n,r,i){for(var o,s=[],a=0,u=e.length,l=null!=t;a<u;a++)(o=e[a])&&(n&&!n(o,r,i)||(s.push(o),l&&t.push(a)));return s}function ye(e,t,n,r,i,o){return r&&!r[b]&&(r=ye(r)),i&&!i[b]&&(i=ye(i,o)),oe((function(o,s,a,u){var l,c,f,h=[],p=[],d=s.length,g=o||function(e,t,n){for(var r=0,i=t.length;r<i;r++)re(e,t[r],n);return n}(t||"*",a.nodeType?[a]:a,[]),v=!e||!o&&t?g:me(g,h,e,a,u),m=n?i||(o?e:d||r)?[]:s:v;if(n&&n(v,m,a,u),r)for(l=me(m,p),r(l,[],a,u),c=l.length;c--;)(f=l[c])&&(m[p[c]]=!(v[p[c]]=f));if(o){if(i||e){if(i){for(l=[],c=m.length;c--;)(f=m[c])&&l.push(v[c]=f);i(null,m=[],l,u)}for(c=m.length;c--;)(f=m[c])&&(l=i?H(o,f):h[c])>-1&&(o[l]=!(s[l]=f))}}else m=me(m===s?m.splice(d,m.length):m),i?i(null,s,m,u):q.apply(s,m)}))}function xe(e){for(var t,n,i,o=e.length,s=r.relative[e[0].type],a=s||r.relative[" "],u=s?1:0,c=ge((function(e){return e===t}),a,!0),f=ge((function(e){return H(t,e)>-1}),a,!0),h=[function(e,n,r){var i=!s&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u<o;u++)if(n=r.relative[e[u].type])h=[ge(ve(h),n)];else{if((n=r.filter[e[u].type].apply(null,e[u].matches))[b]){for(i=++u;i<o&&!r.relative[e[i].type];i++);return ye(u>1&&ve(h),u>1&&de(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace($,"$1"),n,u<i&&xe(e.slice(u,i)),i<o&&xe(e=e.slice(i)),i<o&&de(e))}h.push(n)}return ve(h)}return pe.prototype=r.filters=r.pseudos,r.setFilters=new pe,s=re.tokenize=function(e,t){var n,i,o,s,a,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);for(a=e,u=[],l=r.preFilter;a;){for(s in n&&!(i=B.exec(a))||(i&&(a=a.slice(i[0].length)||a),u.push(o=[])),n=!1,(i=W.exec(a))&&(n=i.shift(),o.push({value:n,type:i[0].replace($," ")}),a=a.slice(n.length)),r.filter)!(i=J[s].exec(a))||l[s]&&!(i=l[s](i))||(n=i.shift(),o.push({value:n,type:s,matches:i}),a=a.slice(n.length));if(!n)break}return t?a.length:a?re.error(e):k(e,u).slice(0)},a=re.compile=function(e,t){var n,i=[],o=[],a=S[e+" "];if(!a){for(t||(t=s(e)),n=t.length;n--;)(a=xe(t[n]))[b]?i.push(a):o.push(a);(a=S(e,function(e,t){var n=t.length>0,i=e.length>0,o=function(o,s,a,u,c){var f,d,v,m=0,y="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=s===p||s||c);y!==k&&null!=(f=C[y]);y++){if(i&&f){for(d=0,s||f.ownerDocument===p||(h(f),a=!g);v=e[d++];)if(v(f,s||p,a)){u.push(f);break}c&&(T=E)}n&&((f=!v&&f)&&m--,o&&x.push(f))}if(m+=y,n&&y!==m){for(d=0;v=t[d++];)v(x,b,s,a);if(o){if(m>0)for(;y--;)x[y]||b[y]||(b[y]=A.call(u));b=me(b)}q.apply(u,b),c&&!o&&b.length>0&&m+t.length>1&&re.uniqueSort(u)}return c&&(T=E,l=w),x};return n?oe(o):o}(o,i))).selector=e}return a},u=re.select=function(e,t,i,o){var u,l,c,f,h,p="function"==typeof e&&e,d=!o&&s(e=p.selector||e);if(i=i||[],1===d.length){if((l=d[0]=d[0].slice(0)).length>2&&"ID"===(c=l[0]).type&&n.getById&&9===t.nodeType&&g&&r.relative[l[1].type]){if(!(t=(r.find.ID(c.matches[0].replace(ee,te),t)||[])[0]))return i;p&&(t=t.parentNode),e=e.slice(l.shift().value.length)}for(u=J.needsContext.test(e)?0:l.length;u--&&(c=l[u],!r.relative[f=c.type]);)if((h=r.find[f])&&(o=h(c.matches[0].replace(ee,te),K.test(l[0].type)&&he(t.parentNode)||t))){if(l.splice(u,1),!(e=o.length&&de(l)))return q.apply(i,o),i;break}}return(p||a(e,d))(o,t,!g,i,!t||K.test(e)&&he(t.parentNode)||t),i},n.sortStable=b.split("").sort(j).join("")===b,n.detectDuplicates=!!f,h(),n.sortDetached=se((function(e){return 1&e.compareDocumentPosition(p.createElement("div"))})),se((function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")}))||ae("type|href|height|width",(function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)})),n.attributes&&se((function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}))||ae("value",(function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue})),se((function(e){return null==e.getAttribute("disabled")}))||ae(L,(function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null})),re}(n);g.find=w,g.expr=w.selectors,g.expr[":"]=g.expr.pseudos,g.uniqueSort=g.unique=w.uniqueSort,g.text=w.getText,g.isXMLDoc=w.isXML,g.contains=w.contains;var T=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&g(e).is(n))break;r.push(e)}return r},C=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},E=g.expr.match.needsContext,k=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,S=/^.[^:#\[\.,]*$/;function j(e,t,n){if(g.isFunction(t))return g.grep(e,(function(e,r){return!!t.call(e,r,e)!==n}));if(t.nodeType)return g.grep(e,(function(e){return e===t!==n}));if("string"==typeof t){if(S.test(t))return g.filter(t,e,n);t=g.filter(t,e)}return g.grep(e,(function(e){return c.call(t,e)>-1!==n}))}g.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?g.find.matchesSelector(r,e)?[r]:[]:g.find.matches(e,g.grep(t,(function(e){return 1===e.nodeType})))},g.fn.extend({find:function(e){var t,n=this.length,r=[],i=this;if("string"!=typeof e)return this.pushStack(g(e).filter((function(){for(t=0;t<n;t++)if(g.contains(i[t],this))return!0})));for(t=0;t<n;t++)g.find(e,i[t],r);return(r=this.pushStack(n>1?g.unique(r):r)).selector=this.selector?this.selector+" "+e:e,r},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&E.test(e)?g(e):e||[],!1).length}});var N,_=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/;(g.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||N,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:_.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof g?t[0]:t,g.merge(this,g.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:s,!0)),k.test(r[1])&&g.isPlainObject(t))for(r in t)g.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=s.getElementById(r[2]))&&i.parentNode&&(this.length=1,this[0]=i),this.context=s,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):g.isFunction(e)?void 0!==n.ready?n.ready(e):e(g):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),g.makeArray(e,this))}).prototype=g.fn,N=g(s);var A=/^(?:parents|prev(?:Until|All))/,D={children:!0,contents:!0,next:!0,prev:!0};function q(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}g.fn.extend({has:function(e){var t=g(e,this),n=t.length;return this.filter((function(){for(var e=0;e<n;e++)if(g.contains(this,t[e]))return!0}))},closest:function(e,t){for(var n,r=0,i=this.length,o=[],s=E.test(e)||"string"!=typeof e?g(e,t||this.context):0;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(s?s.index(n)>-1:1===n.nodeType&&g.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?g.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?c.call(g(e),this[0]):c.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(g.uniqueSort(g.merge(this.get(),g(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),g.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return T(e,"parentNode")},parentsUntil:function(e,t,n){return T(e,"parentNode",n)},next:function(e){return q(e,"nextSibling")},prev:function(e){return q(e,"previousSibling")},nextAll:function(e){return T(e,"nextSibling")},prevAll:function(e){return T(e,"previousSibling")},nextUntil:function(e,t,n){return T(e,"nextSibling",n)},prevUntil:function(e,t,n){return T(e,"previousSibling",n)},siblings:function(e){return C((e.parentNode||{}).firstChild,e)},children:function(e){return C(e.firstChild)},contents:function(e){return e.contentDocument||g.merge([],e.childNodes)}},(function(e,t){g.fn[e]=function(n,r){var i=g.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=g.filter(r,i)),this.length>1&&(D[e]||g.uniqueSort(i),A.test(e)&&i.reverse()),this.pushStack(i)}}));var O,H=/\S+/g;function L(){s.removeEventListener("DOMContentLoaded",L),n.removeEventListener("load",L),g.ready()}g.Callbacks=function(e){e="string"==typeof e?function(e){var t={};return g.each(e.match(H)||[],(function(e,n){t[n]=!0})),t}(e):g.extend({},e);var t,n,r,i,o=[],s=[],a=-1,u=function(){for(i=e.once,r=t=!0;s.length;a=-1)for(n=s.shift();++a<o.length;)!1===o[a].apply(n[0],n[1])&&e.stopOnFalse&&(a=o.length,n=!1);e.memory||(n=!1),t=!1,i&&(o=n?[]:"")},l={add:function(){return o&&(n&&!t&&(a=o.length-1,s.push(n)),function t(n){g.each(n,(function(n,r){g.isFunction(r)?e.unique&&l.has(r)||o.push(r):r&&r.length&&"string"!==g.type(r)&&t(r)}))}(arguments),n&&!t&&u()),this},remove:function(){return g.each(arguments,(function(e,t){for(var n;(n=g.inArray(t,o,n))>-1;)o.splice(n,1),n<=a&&a--})),this},has:function(e){return e?g.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=s=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=s=[],n||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],s.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},g.extend({Deferred:function(e){var t=[["resolve","done",g.Callbacks("once memory"),"resolved"],["reject","fail",g.Callbacks("once memory"),"rejected"],["notify","progress",g.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return g.Deferred((function(n){g.each(t,(function(t,o){var s=g.isFunction(e[t])&&e[t];i[o[1]]((function(){var e=s&&s.apply(this,arguments);e&&g.isFunction(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[o[0]+"With"](this===r?n.promise():this,s?[e]:arguments)}))})),e=null})).promise()},promise:function(e){return null!=e?g.extend(e,r):r}},i={};return r.pipe=r.then,g.each(t,(function(e,o){var s=o[2],a=o[3];r[o[1]]=s.add,a&&s.add((function(){n=a}),t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=s.fireWith})),r.promise(i),e&&e.call(i,i),i},when:function(e){var t,n,r,i=0,o=a.call(arguments),s=o.length,u=1!==s||e&&g.isFunction(e.promise)?s:0,l=1===u?e:g.Deferred(),c=function(e,n,r){return function(i){n[e]=this,r[e]=arguments.length>1?a.call(arguments):i,r===t?l.notifyWith(n,r):--u||l.resolveWith(n,r)}};if(s>1)for(t=new Array(s),n=new Array(s),r=new Array(s);i<s;i++)o[i]&&g.isFunction(o[i].promise)?o[i].promise().progress(c(i,n,t)).done(c(i,r,o)).fail(l.reject):--u;return u||l.resolveWith(r,o),l.promise()}}),g.fn.ready=function(e){return g.ready.promise().done(e),this},g.extend({isReady:!1,readyWait:1,holdReady:function(e){e?g.readyWait++:g.ready(!0)},ready:function(e){(!0===e?--g.readyWait:g.isReady)||(g.isReady=!0,!0!==e&&--g.readyWait>0||(O.resolveWith(s,[g]),g.fn.triggerHandler&&(g(s).triggerHandler("ready"),g(s).off("ready"))))}}),g.ready.promise=function(e){return O||(O=g.Deferred(),"complete"===s.readyState||"loading"!==s.readyState&&!s.documentElement.doScroll?n.setTimeout(g.ready):(s.addEventListener("DOMContentLoaded",L),n.addEventListener("load",L))),O.promise(e)},g.ready.promise();var F=function(e,t,n,r,i,o,s){var a=0,u=e.length,l=null==n;if("object"===g.type(n))for(a in i=!0,n)F(e,t,a,n[a],!0,o,s);else if(void 0!==r&&(i=!0,g.isFunction(r)||(s=!0),l&&(s?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(g(e),n)})),t))for(;a<u;a++)t(e[a],n,s?r:r.call(e[a],a,t(e[a],n)));return i?e:l?t.call(e):u?t(e[0],n):o},R=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function P(){this.expando=g.expando+P.uid++}P.uid=1,P.prototype={register:function(e,t){var n=t||{};return e.nodeType?e[this.expando]=n:Object.defineProperty(e,this.expando,{value:n,writable:!0,configurable:!0}),e[this.expando]},cache:function(e){if(!R(e))return{};var t=e[this.expando];return t||(t={},R(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[t]=n;else for(r in t)i[r]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][t]},access:function(e,t,n){var r;return void 0===t||t&&"string"==typeof t&&void 0===n?void 0!==(r=this.get(e,t))?r:this.get(e,g.camelCase(t)):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r,i,o=e[this.expando];if(void 0!==o){if(void 0===t)this.register(e);else{g.isArray(t)?r=t.concat(t.map(g.camelCase)):(i=g.camelCase(t),r=t in o?[t,i]:(r=i)in o?[r]:r.match(H)||[]),n=r.length;for(;n--;)delete o[r[n]]}(void 0===t||g.isEmptyObject(o))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!g.isEmptyObject(t)}};var I=new P,M=new P,$=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,B=/[A-Z]/g;function W(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(B,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:$.test(n)?g.parseJSON(n):n)}catch(e){}M.set(e,t,n)}else n=void 0;return n}g.extend({hasData:function(e){return M.hasData(e)||I.hasData(e)},data:function(e,t,n){return M.access(e,t,n)},removeData:function(e,t){M.remove(e,t)},_data:function(e,t,n){return I.access(e,t,n)},_removeData:function(e,t){I.remove(e,t)}}),g.fn.extend({data:function(e,t){var n,r,i,o=this[0],s=o&&o.attributes;if(void 0===e){if(this.length&&(i=M.get(o),1===o.nodeType&&!I.get(o,"hasDataAttrs"))){for(n=s.length;n--;)s[n]&&0===(r=s[n].name).indexOf("data-")&&(r=g.camelCase(r.slice(5)),W(o,r,i[r]));I.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof e?this.each((function(){M.set(this,e)})):F(this,(function(t){var n,r;if(o&&void 0===t)return void 0!==(n=M.get(o,e)||M.get(o,e.replace(B,"-$&").toLowerCase()))?n:(r=g.camelCase(e),void 0!==(n=M.get(o,r))||void 0!==(n=W(o,r,void 0))?n:void 0);r=g.camelCase(e),this.each((function(){var n=M.get(this,r);M.set(this,r,t),e.indexOf("-")>-1&&void 0!==n&&M.set(this,e,t)}))}),null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each((function(){M.remove(this,e)}))}}),g.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=I.get(e,t),n&&(!r||g.isArray(n)?r=I.access(e,t,g.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=g.queue(e,t),r=n.length,i=n.shift(),o=g._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,(function(){g.dequeue(e,t)}),o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return I.get(e,n)||I.access(e,n,{empty:g.Callbacks("once memory").add((function(){I.remove(e,[t+"queue",n])}))})}}),g.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?g.queue(this[0],e):void 0===t?this:this.each((function(){var n=g.queue(this,e,t);g._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&g.dequeue(this,e)}))},dequeue:function(e){return this.each((function(){g.dequeue(this,e)}))},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=g.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";s--;)(n=I.get(o[s],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(t)}});var z=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=new RegExp("^(?:([+-])=|)("+z+")([a-z%]*)$","i"),X=["Top","Right","Bottom","Left"],J=function(e,t){return e=t||e,"none"===g.css(e,"display")||!g.contains(e.ownerDocument,e)};function V(e,t,n,r){var i,o=1,s=20,a=r?function(){return r.cur()}:function(){return g.css(e,t,"")},u=a(),l=n&&n[3]||(g.cssNumber[t]?"":"px"),c=(g.cssNumber[t]||"px"!==l&&+u)&&U.exec(g.css(e,t));if(c&&c[3]!==l){l=l||c[3],n=n||[],c=+u||1;do{c/=o=o||".5",g.style(e,t,c+l)}while(o!==(o=a()/u)&&1!==o&&--s)}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var Y=/^(?:checkbox|radio)$/i,G=/<([\w:-]+)/,Q=/^$|\/(?:java|ecma)script/i,K={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function Z(e,t){var n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&g.nodeName(e,t)?g.merge([e],n):n}function ee(e,t){for(var n=0,r=e.length;n<r;n++)I.set(e[n],"globalEval",!t||I.get(t[n],"globalEval"))}K.optgroup=K.option,K.tbody=K.tfoot=K.colgroup=K.caption=K.thead,K.th=K.td;var te,ne,re=/<|&#?\w+;/;function ie(e,t,n,r,i){for(var o,s,a,u,l,c,f=t.createDocumentFragment(),h=[],p=0,d=e.length;p<d;p++)if((o=e[p])||0===o)if("object"===g.type(o))g.merge(h,o.nodeType?[o]:o);else if(re.test(o)){for(s=s||f.appendChild(t.createElement("div")),a=(G.exec(o)||["",""])[1].toLowerCase(),u=K[a]||K._default,s.innerHTML=u[1]+g.htmlPrefilter(o)+u[2],c=u[0];c--;)s=s.lastChild;g.merge(h,s.childNodes),(s=f.firstChild).textContent=""}else h.push(t.createTextNode(o));for(f.textContent="",p=0;o=h[p++];)if(r&&g.inArray(o,r)>-1)i&&i.push(o);else if(l=g.contains(o.ownerDocument,o),s=Z(f.appendChild(o),"script"),l&&ee(s),n)for(c=0;o=s[c++];)Q.test(o.type||"")&&n.push(o);return f}te=s.createDocumentFragment().appendChild(s.createElement("div")),(ne=s.createElement("input")).setAttribute("type","radio"),ne.setAttribute("checked","checked"),ne.setAttribute("name","t"),te.appendChild(ne),d.checkClone=te.cloneNode(!0).cloneNode(!0).lastChild.checked,te.innerHTML="<textarea>x</textarea>",d.noCloneChecked=!!te.cloneNode(!0).lastChild.defaultValue;var oe=/^key/,se=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ae=/^([^.]*)(?:\.(.+)|)/;function ue(){return!0}function le(){return!1}function ce(){try{return s.activeElement}catch(e){}}function fe(e,t,n,r,i,o){var s,a;if("object"==typeof t){for(a in"string"!=typeof n&&(r=r||n,n=void 0),t)fe(e,a,n,r,t[a],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=le;else if(!i)return e;return 1===o&&(s=i,(i=function(e){return g().off(e),s.apply(this,arguments)}).guid=s.guid||(s.guid=g.guid++)),e.each((function(){g.event.add(this,t,i,r,n)}))}g.event={global:{},add:function(e,t,n,r,i){var o,s,a,u,l,c,f,h,p,d,v,m=I.get(e);if(m)for(n.handler&&(n=(o=n).handler,i=o.selector),n.guid||(n.guid=g.guid++),(u=m.events)||(u=m.events={}),(s=m.handle)||(s=m.handle=function(t){return void 0!==g&&g.event.triggered!==t.type?g.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(H)||[""]).length;l--;)p=v=(a=ae.exec(t[l])||[])[1],d=(a[2]||"").split(".").sort(),p&&(f=g.event.special[p]||{},p=(i?f.delegateType:f.bindType)||p,f=g.event.special[p]||{},c=g.extend({type:p,origType:v,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&g.expr.match.needsContext.test(i),namespace:d.join(".")},o),(h=u[p])||((h=u[p]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,d,s)||e.addEventListener&&e.addEventListener(p,s)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?h.splice(h.delegateCount++,0,c):h.push(c),g.event.global[p]=!0)},remove:function(e,t,n,r,i){var o,s,a,u,l,c,f,h,p,d,v,m=I.hasData(e)&&I.get(e);if(m&&(u=m.events)){for(l=(t=(t||"").match(H)||[""]).length;l--;)if(p=v=(a=ae.exec(t[l])||[])[1],d=(a[2]||"").split(".").sort(),p){for(f=g.event.special[p]||{},h=u[p=(r?f.delegateType:f.bindType)||p]||[],a=a[2]&&new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=h.length;o--;)c=h[o],!i&&v!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(h.splice(o,1),c.selector&&h.delegateCount--,f.remove&&f.remove.call(e,c));s&&!h.length&&(f.teardown&&!1!==f.teardown.call(e,d,m.handle)||g.removeEvent(e,p,m.handle),delete u[p])}else for(p in u)g.event.remove(e,p+t[l],n,r,!0);g.isEmptyObject(u)&&I.remove(e,"handle events")}},dispatch:function(e){e=g.event.fix(e);var t,n,r,i,o,s=[],u=a.call(arguments),l=(I.get(this,"events")||{})[e.type]||[],c=g.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,e)){for(s=g.event.handlers.call(this,e,l),t=0;(i=s[t++])&&!e.isPropagationStopped();)for(e.currentTarget=i.elem,n=0;(o=i.handlers[n++])&&!e.isImmediatePropagationStopped();)e.rnamespace&&!e.rnamespace.test(o.namespace)||(e.handleObj=o,e.data=o.data,void 0!==(r=((g.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,u))&&!1===(e.result=r)&&(e.preventDefault(),e.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,s=[],a=t.delegateCount,u=e.target;if(a&&u.nodeType&&("click"!==e.type||isNaN(e.button)||e.button<1))for(;u!==this;u=u.parentNode||this)if(1===u.nodeType&&(!0!==u.disabled||"click"!==e.type)){for(r=[],n=0;n<a;n++)void 0===r[i=(o=t[n]).selector+" "]&&(r[i]=o.needsContext?g(i,this).index(u)>-1:g.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&s.push({elem:u,handlers:r})}return a<t.length&&s.push({elem:this,handlers:t.slice(a)}),s},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,r,i,o=t.button;return null==e.pageX&&null!=t.clientX&&(r=(n=e.target.ownerDocument||s).documentElement,i=n.body,e.pageX=t.clientX+(r&&r.scrollLeft||i&&i.scrollLeft||0)-(r&&r.clientLeft||i&&i.clientLeft||0),e.pageY=t.clientY+(r&&r.scrollTop||i&&i.scrollTop||0)-(r&&r.clientTop||i&&i.clientTop||0)),e.which||void 0===o||(e.which=1&o?1:2&o?3:4&o?2:0),e}},fix:function(e){if(e[g.expando])return e;var t,n,r,i=e.type,o=e,a=this.fixHooks[i];for(a||(this.fixHooks[i]=a=se.test(i)?this.mouseHooks:oe.test(i)?this.keyHooks:{}),r=a.props?this.props.concat(a.props):this.props,e=new g.Event(o),t=r.length;t--;)e[n=r[t]]=o[n];return e.target||(e.target=s),3===e.target.nodeType&&(e.target=e.target.parentNode),a.filter?a.filter(e,o):e},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ce()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===ce()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&g.nodeName(this,"input"))return this.click(),!1},_default:function(e){return g.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},g.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},g.Event=function(e,t){if(!(this instanceof g.Event))return new g.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?ue:le):this.type=e,t&&g.extend(this,t),this.timeStamp=e&&e.timeStamp||g.now(),this[g.expando]=!0},g.Event.prototype={constructor:g.Event,isDefaultPrevented:le,isPropagationStopped:le,isImmediatePropagationStopped:le,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=ue,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=ue,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=ue,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},g.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},(function(e,t){g.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||g.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}})),g.fn.extend({on:function(e,t,n,r){return fe(this,e,t,n,r)},one:function(e,t,n,r){return fe(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,g(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=le),this.each((function(){g.event.remove(this,e,n,t)}))}});var he=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,pe=/<script|<style|<link/i,de=/checked\s*(?:[^=]|=\s*.checked.)/i,ge=/^true\/(.*)/,ve=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function me(e,t){return g.nodeName(e,"table")&&g.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function ye(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function xe(e){var t=ge.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function be(e,t){var n,r,i,o,s,a,u,l;if(1===t.nodeType){if(I.hasData(e)&&(o=I.access(e),s=I.set(t,o),l=o.events))for(i in delete s.handle,s.events={},l)for(n=0,r=l[i].length;n<r;n++)g.event.add(t,i,l[i][n]);M.hasData(e)&&(a=M.access(e),u=g.extend({},a),M.set(t,u))}}function we(e,t,n,r){t=u.apply([],t);var i,o,s,a,l,c,f=0,h=e.length,p=h-1,v=t[0],m=g.isFunction(v);if(m||h>1&&"string"==typeof v&&!d.checkClone&&de.test(v))return e.each((function(i){var o=e.eq(i);m&&(t[0]=v.call(this,i,o.html())),we(o,t,n,r)}));if(h&&(o=(i=ie(t,e[0].ownerDocument,!1,e,r)).firstChild,1===i.childNodes.length&&(i=o),o||r)){for(a=(s=g.map(Z(i,"script"),ye)).length;f<h;f++)l=i,f!==p&&(l=g.clone(l,!0,!0),a&&g.merge(s,Z(l,"script"))),n.call(e[f],l,f);if(a)for(c=s[s.length-1].ownerDocument,g.map(s,xe),f=0;f<a;f++)l=s[f],Q.test(l.type||"")&&!I.access(l,"globalEval")&&g.contains(c,l)&&(l.src?g._evalUrl&&g._evalUrl(l.src):g.globalEval(l.textContent.replace(ve,"")))}return e}function Te(e,t,n){for(var r,i=t?g.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||g.cleanData(Z(r)),r.parentNode&&(n&&g.contains(r.ownerDocument,r)&&ee(Z(r,"script")),r.parentNode.removeChild(r));return e}g.extend({htmlPrefilter:function(e){return e.replace(he,"<$1></$2>")},clone:function(e,t,n){var r,i,o,s,a,u,l,c=e.cloneNode(!0),f=g.contains(e.ownerDocument,e);if(!(d.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||g.isXMLDoc(e)))for(s=Z(c),r=0,i=(o=Z(e)).length;r<i;r++)a=o[r],u=s[r],l=void 0,"input"===(l=u.nodeName.toLowerCase())&&Y.test(a.type)?u.checked=a.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=a.defaultValue);if(t)if(n)for(o=o||Z(e),s=s||Z(c),r=0,i=o.length;r<i;r++)be(o[r],s[r]);else be(e,c);return(s=Z(c,"script")).length>0&&ee(s,!f&&Z(e,"script")),c},cleanData:function(e){for(var t,n,r,i=g.event.special,o=0;void 0!==(n=e[o]);o++)if(R(n)){if(t=n[I.expando]){if(t.events)for(r in t.events)i[r]?g.event.remove(n,r):g.removeEvent(n,r,t.handle);n[I.expando]=void 0}n[M.expando]&&(n[M.expando]=void 0)}}}),g.fn.extend({domManip:we,detach:function(e){return Te(this,e,!0)},remove:function(e){return Te(this,e)},text:function(e){return F(this,(function(e){return void 0===e?g.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)}))}),null,e,arguments.length)},append:function(){return we(this,arguments,(function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||me(this,e).appendChild(e)}))},prepend:function(){return we(this,arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=me(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return we(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this)}))},after:function(){return we(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)}))},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(g.cleanData(Z(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map((function(){return g.clone(this,e,t)}))},html:function(e){return F(this,(function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!pe.test(e)&&!K[(G.exec(e)||["",""])[1].toLowerCase()]){e=g.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(g.cleanData(Z(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)}),null,e,arguments.length)},replaceWith:function(){var e=[];return we(this,arguments,(function(t){var n=this.parentNode;g.inArray(this,e)<0&&(g.cleanData(Z(this)),n&&n.replaceChild(t,this))}),e)}}),g.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},(function(e,t){g.fn[e]=function(e){for(var n,r=[],i=g(e),o=i.length-1,s=0;s<=o;s++)n=s===o?this:this.clone(!0),g(i[s])[t](n),l.apply(r,n.get());return this.pushStack(r)}}));var Ce,Ee={HTML:"block",BODY:"block"};function ke(e,t){var n=g(t.createElement(e)).appendTo(t.body),r=g.css(n[0],"display");return n.detach(),r}function Se(e){var t=s,n=Ee[e];return n||("none"!==(n=ke(e,t))&&n||((t=(Ce=(Ce||g("<iframe frameborder='0' width='0' height='0'/>")).appendTo(t.documentElement))[0].contentDocument).write(),t.close(),n=ke(e,t),Ce.detach()),Ee[e]=n),n}var je=/^margin/,Ne=new RegExp("^("+z+")(?!px)[a-z%]+$","i"),_e=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=n),t.getComputedStyle(e)},Ae=function(e,t,n,r){var i,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];for(o in i=n.apply(e,r||[]),t)e.style[o]=s[o];return i},De=s.documentElement;function qe(e,t,n){var r,i,o,s,a=e.style;return""!==(s=(n=n||_e(e))?n.getPropertyValue(t)||n[t]:void 0)&&void 0!==s||g.contains(e.ownerDocument,e)||(s=g.style(e,t)),n&&!d.pixelMarginRight()&&Ne.test(s)&&je.test(t)&&(r=a.width,i=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=s,s=n.width,a.width=r,a.minWidth=i,a.maxWidth=o),void 0!==s?s+"":s}function Oe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){var e,t,r,i,o=s.createElement("div"),a=s.createElement("div");function u(){a.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",a.innerHTML="",De.appendChild(o);var s=n.getComputedStyle(a);e="1%"!==s.top,i="2px"===s.marginLeft,t="4px"===s.width,a.style.marginRight="50%",r="4px"===s.marginRight,De.removeChild(o)}a.style&&(a.style.backgroundClip="content-box",a.cloneNode(!0).style.backgroundClip="",d.clearCloneStyle="content-box"===a.style.backgroundClip,o.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",o.appendChild(a),g.extend(d,{pixelPosition:function(){return u(),e},boxSizingReliable:function(){return null==t&&u(),t},pixelMarginRight:function(){return null==t&&u(),r},reliableMarginLeft:function(){return null==t&&u(),i},reliableMarginRight:function(){var e,t=a.appendChild(s.createElement("div"));return t.style.cssText=a.style.cssText="-webkit-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",t.style.marginRight=t.style.width="0",a.style.width="1px",De.appendChild(o),e=!parseFloat(n.getComputedStyle(t).marginRight),De.removeChild(o),a.removeChild(t),e}}))}();var He=/^(none|table(?!-c[ea]).+)/,Le={position:"absolute",visibility:"hidden",display:"block"},Fe={letterSpacing:"0",fontWeight:"400"},Re=["Webkit","O","Moz","ms"],Pe=s.createElement("div").style;function Ie(e){if(e in Pe)return e;for(var t=e[0].toUpperCase()+e.slice(1),n=Re.length;n--;)if((e=Re[n]+t)in Pe)return e}function Me(e,t,n){var r=U.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function $e(e,t,n,r,i){for(var o=n===(r?"border":"content")?4:"width"===t?1:0,s=0;o<4;o+=2)"margin"===n&&(s+=g.css(e,n+X[o],!0,i)),r?("content"===n&&(s-=g.css(e,"padding"+X[o],!0,i)),"margin"!==n&&(s-=g.css(e,"border"+X[o]+"Width",!0,i))):(s+=g.css(e,"padding"+X[o],!0,i),"padding"!==n&&(s+=g.css(e,"border"+X[o]+"Width",!0,i)));return s}function Be(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=_e(e),s="border-box"===g.css(e,"boxSizing",!1,o);if(i<=0||null==i){if(((i=qe(e,t,o))<0||null==i)&&(i=e.style[t]),Ne.test(i))return i;r=s&&(d.boxSizingReliable()||i===e.style[t]),i=parseFloat(i)||0}return i+$e(e,t,n||(s?"border":"content"),r,o)+"px"}function We(e,t){for(var n,r,i,o=[],s=0,a=e.length;s<a;s++)(r=e[s]).style&&(o[s]=I.get(r,"olddisplay"),n=r.style.display,t?(o[s]||"none"!==n||(r.style.display=""),""===r.style.display&&J(r)&&(o[s]=I.access(r,"olddisplay",Se(r.nodeName)))):(i=J(r),"none"===n&&i||I.set(r,"olddisplay",i?n:g.css(r,"display"))));for(s=0;s<a;s++)(r=e[s]).style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[s]||"":"none"));return e}function ze(e,t,n,r,i){return new ze.prototype.init(e,t,n,r,i)}g.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=qe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:"cssFloat"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,s,a=g.camelCase(t),u=e.style;if(t=g.cssProps[a]||(g.cssProps[a]=Ie(a)||a),s=g.cssHooks[t]||g.cssHooks[a],void 0===n)return s&&"get"in s&&void 0!==(i=s.get(e,!1,r))?i:u[t];"string"==(o=typeof n)&&(i=U.exec(n))&&i[1]&&(n=V(e,t,i),o="number"),null!=n&&n==n&&("number"===o&&(n+=i&&i[3]||(g.cssNumber[a]?"":"px")),d.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),s&&"set"in s&&void 0===(n=s.set(e,n,r))||(u[t]=n))}},css:function(e,t,n,r){var i,o,s,a=g.camelCase(t);return t=g.cssProps[a]||(g.cssProps[a]=Ie(a)||a),(s=g.cssHooks[t]||g.cssHooks[a])&&"get"in s&&(i=s.get(e,!0,n)),void 0===i&&(i=qe(e,t,r)),"normal"===i&&t in Fe&&(i=Fe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),g.each(["height","width"],(function(e,t){g.cssHooks[t]={get:function(e,n,r){if(n)return He.test(g.css(e,"display"))&&0===e.offsetWidth?Ae(e,Le,(function(){return Be(e,t,r)})):Be(e,t,r)},set:function(e,n,r){var i,o=r&&_e(e),s=r&&$e(e,t,r,"border-box"===g.css(e,"boxSizing",!1,o),o);return s&&(i=U.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=g.css(e,t)),Me(0,n,s)}}})),g.cssHooks.marginLeft=Oe(d.reliableMarginLeft,(function(e,t){if(t)return(parseFloat(qe(e,"marginLeft"))||e.getBoundingClientRect().left-Ae(e,{marginLeft:0},(function(){return e.getBoundingClientRect().left})))+"px"})),g.cssHooks.marginRight=Oe(d.reliableMarginRight,(function(e,t){if(t)return Ae(e,{display:"inline-block"},qe,[e,"marginRight"])})),g.each({margin:"",padding:"",border:"Width"},(function(e,t){g.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+X[r]+t]=o[r]||o[r-2]||o[0];return i}},je.test(e)||(g.cssHooks[e+t].set=Me)})),g.fn.extend({css:function(e,t){return F(this,(function(e,t,n){var r,i,o={},s=0;if(g.isArray(t)){for(r=_e(e),i=t.length;s<i;s++)o[t[s]]=g.css(e,t[s],!1,r);return o}return void 0!==n?g.style(e,t,n):g.css(e,t)}),e,t,arguments.length>1)},show:function(){return We(this,!0)},hide:function(){return We(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each((function(){J(this)?g(this).show():g(this).hide()}))}}),g.Tween=ze,ze.prototype={constructor:ze,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||g.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(g.cssNumber[n]?"":"px")},cur:function(){var e=ze.propHooks[this.prop];return e&&e.get?e.get(this):ze.propHooks._default.get(this)},run:function(e){var t,n=ze.propHooks[this.prop];return this.options.duration?this.pos=t=g.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):ze.propHooks._default.set(this),this}},ze.prototype.init.prototype=ze.prototype,ze.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=g.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){g.fx.step[e.prop]?g.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[g.cssProps[e.prop]]&&!g.cssHooks[e.prop]?e.elem[e.prop]=e.now:g.style(e.elem,e.prop,e.now+e.unit)}}},ze.propHooks.scrollTop=ze.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},g.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},g.fx=ze.prototype.init,g.fx.step={};var Ue,Xe,Je=/^(?:toggle|show|hide)$/,Ve=/queueHooks$/;function Ye(){return n.setTimeout((function(){Ue=void 0})),Ue=g.now()}function Ge(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=X[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function Qe(e,t,n){for(var r,i=(Ke.tweeners[t]||[]).concat(Ke.tweeners["*"]),o=0,s=i.length;o<s;o++)if(r=i[o].call(n,t,e))return r}function Ke(e,t,n){var r,i,o=0,s=Ke.prefilters.length,a=g.Deferred().always((function(){delete u.elem})),u=function(){if(i)return!1;for(var t=Ue||Ye(),n=Math.max(0,l.startTime+l.duration-t),r=1-(n/l.duration||0),o=0,s=l.tweens.length;o<s;o++)l.tweens[o].run(r);return a.notifyWith(e,[l,r,n]),r<1&&s?n:(a.resolveWith(e,[l]),!1)},l=a.promise({elem:e,props:g.extend({},t),opts:g.extend(!0,{specialEasing:{},easing:g.easing._default},n),originalProperties:t,originalOptions:n,startTime:Ue||Ye(),duration:n.duration,tweens:[],createTween:function(t,n){var r=g.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return t?(a.notifyWith(e,[l,1,0]),a.resolveWith(e,[l,t])):a.rejectWith(e,[l,t]),this}}),c=l.props;for(function(e,t){var n,r,i,o,s;for(n in e)if(i=t[r=g.camelCase(n)],o=e[n],g.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(s=g.cssHooks[r])&&"expand"in s)for(n in o=s.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);o<s;o++)if(r=Ke.prefilters[o].call(l,e,c,l.opts))return g.isFunction(r.stop)&&(g._queueHooks(l.elem,l.opts.queue).stop=g.proxy(r.stop,r)),r;return g.map(c,Qe,l),g.isFunction(l.opts.start)&&l.opts.start.call(e,l),g.fx.timer(g.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}g.Animation=g.extend(Ke,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return V(n.elem,e,U.exec(t),n),n}]},tweener:function(e,t){g.isFunction(e)?(t=e,e=["*"]):e=e.match(H);for(var n,r=0,i=e.length;r<i;r++)n=e[r],Ke.tweeners[n]=Ke.tweeners[n]||[],Ke.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,s,a,u,l,c=this,f={},h=e.style,p=e.nodeType&&J(e),d=I.get(e,"fxshow");for(r in n.queue||(null==(a=g._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,u=a.empty.fire,a.empty.fire=function(){a.unqueued||u()}),a.unqueued++,c.always((function(){c.always((function(){a.unqueued--,g.queue(e,"fx").length||a.empty.fire()}))}))),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],"inline"===("none"===(l=g.css(e,"display"))?I.get(e,"olddisplay")||Se(e.nodeName):l)&&"none"===g.css(e,"float")&&(h.display="inline-block")),n.overflow&&(h.overflow="hidden",c.always((function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]}))),t)if(i=t[r],Je.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(p?"hide":"show")){if("show"!==i||!d||void 0===d[r])continue;p=!0}f[r]=d&&d[r]||g.style(e,r)}else l=void 0;if(g.isEmptyObject(f))"inline"===("none"===l?Se(e.nodeName):l)&&(h.display=l);else for(r in d?"hidden"in d&&(p=d.hidden):d=I.access(e,"fxshow",{}),o&&(d.hidden=!p),p?g(e).show():c.done((function(){g(e).hide()})),c.done((function(){var t;for(t in I.remove(e,"fxshow"),f)g.style(e,t,f[t])})),f)s=Qe(p?d[r]:0,r,c),r in d||(d[r]=s.start,p&&(s.end=s.start,s.start="width"===r||"height"===r?1:0))}],prefilter:function(e,t){t?Ke.prefilters.unshift(e):Ke.prefilters.push(e)}}),g.speed=function(e,t,n){var r=e&&"object"==typeof e?g.extend({},e):{complete:n||!n&&t||g.isFunction(e)&&e,duration:e,easing:n&&t||t&&!g.isFunction(t)&&t};return r.duration=g.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in g.fx.speeds?g.fx.speeds[r.duration]:g.fx.speeds._default,null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){g.isFunction(r.old)&&r.old.call(this),r.queue&&g.dequeue(this,r.queue)},r},g.fn.extend({fadeTo:function(e,t,n,r){return this.filter(J).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=g.isEmptyObject(e),o=g.speed(t,n,r),s=function(){var t=Ke(this,g.extend({},e),o);(i||I.get(this,"finish"))&&t.stop(!0)};return s.finish=s,i||!1===o.queue?this.each(s):this.queue(o.queue,s)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||"fx",[]),this.each((function(){var t=!0,i=null!=e&&e+"queueHooks",o=g.timers,s=I.get(this);if(i)s[i]&&s[i].stop&&r(s[i]);else for(i in s)s[i]&&s[i].stop&&Ve.test(i)&&r(s[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||g.dequeue(this,e)}))},finish:function(e){return!1!==e&&(e=e||"fx"),this.each((function(){var t,n=I.get(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=g.timers,s=r?r.length:0;for(n.finish=!0,g.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<s;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish}))}}),g.each(["toggle","show","hide"],(function(e,t){var n=g.fn[t];g.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(Ge(t,!0),e,r,i)}})),g.each({slideDown:Ge("show"),slideUp:Ge("hide"),slideToggle:Ge("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},(function(e,t){g.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}})),g.timers=[],g.fx.tick=function(){var e,t=0,n=g.timers;for(Ue=g.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||g.fx.stop(),Ue=void 0},g.fx.timer=function(e){g.timers.push(e),e()?g.fx.start():g.timers.pop()},g.fx.interval=13,g.fx.start=function(){Xe||(Xe=n.setInterval(g.fx.tick,g.fx.interval))},g.fx.stop=function(){n.clearInterval(Xe),Xe=null},g.fx.speeds={slow:600,fast:200,_default:400},g.fn.delay=function(e,t){return e=g.fx&&g.fx.speeds[e]||e,t=t||"fx",this.queue(t,(function(t,r){var i=n.setTimeout(t,e);r.stop=function(){n.clearTimeout(i)}}))},function(){var e=s.createElement("input"),t=s.createElement("select"),n=t.appendChild(s.createElement("option"));e.type="checkbox",d.checkOn=""!==e.value,d.optSelected=n.selected,t.disabled=!0,d.optDisabled=!n.disabled,(e=s.createElement("input")).value="t",e.type="radio",d.radioValue="t"===e.value}();var Ze,et=g.expr.attrHandle;g.fn.extend({attr:function(e,t){return F(this,g.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each((function(){g.removeAttr(this,e)}))}}),g.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===e.getAttribute?g.prop(e,t,n):(1===o&&g.isXMLDoc(e)||(t=t.toLowerCase(),i=g.attrHooks[t]||(g.expr.match.bool.test(t)?Ze:void 0)),void 0!==n?null===n?void g.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=g.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!d.radioValue&&"radio"===t&&g.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(H);if(o&&1===e.nodeType)for(;n=o[i++];)r=g.propFix[n]||n,g.expr.match.bool.test(n)&&(e[r]=!1),e.removeAttribute(n)}}),Ze={set:function(e,t,n){return!1===t?g.removeAttr(e,n):e.setAttribute(n,n),n}},g.each(g.expr.match.bool.source.match(/\w+/g),(function(e,t){var n=et[t]||g.find.attr;et[t]=function(e,t,r){var i,o;return r||(o=et[t],et[t]=i,i=null!=n(e,t,r)?t.toLowerCase():null,et[t]=o),i}}));var tt=/^(?:input|select|textarea|button)$/i,nt=/^(?:a|area)$/i;g.fn.extend({prop:function(e,t){return F(this,g.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each((function(){delete this[g.propFix[e]||e]}))}}),g.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&g.isXMLDoc(e)||(t=g.propFix[t]||t,i=g.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=g.find.attr(e,"tabindex");return t?parseInt(t,10):tt.test(e.nodeName)||nt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),d.optSelected||(g.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),g.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){g.propFix[this.toLowerCase()]=this}));var rt=/[\t\r\n\f]/g;function it(e){return e.getAttribute&&e.getAttribute("class")||""}g.fn.extend({addClass:function(e){var t,n,r,i,o,s,a,u=0;if(g.isFunction(e))return this.each((function(t){g(this).addClass(e.call(this,t,it(this)))}));if("string"==typeof e&&e)for(t=e.match(H)||[];n=this[u++];)if(i=it(n),r=1===n.nodeType&&(" "+i+" ").replace(rt," ")){for(s=0;o=t[s++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(a=g.trim(r))&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,r,i,o,s,a,u=0;if(g.isFunction(e))return this.each((function(t){g(this).removeClass(e.call(this,t,it(this)))}));if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(H)||[];n=this[u++];)if(i=it(n),r=1===n.nodeType&&(" "+i+" ").replace(rt," ")){for(s=0;o=t[s++];)for(;r.indexOf(" "+o+" ")>-1;)r=r.replace(" "+o+" "," ");i!==(a=g.trim(r))&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):g.isFunction(e)?this.each((function(n){g(this).toggleClass(e.call(this,n,it(this),t),t)})):this.each((function(){var t,r,i,o;if("string"===n)for(r=0,i=g(this),o=e.match(H)||[];t=o[r++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&"boolean"!==n||((t=it(this))&&I.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":I.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+it(n)+" ").replace(rt," ").indexOf(t)>-1)return!0;return!1}});var ot=/\r/g,st=/[\x20\t\r\n\f]+/g;g.fn.extend({val:function(e){var t,n,r,i=this[0];return arguments.length?(r=g.isFunction(e),this.each((function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,g(this).val()):e)?i="":"number"==typeof i?i+="":g.isArray(i)&&(i=g.map(i,(function(e){return null==e?"":e+""}))),(t=g.valHooks[this.type]||g.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))}))):i?(t=g.valHooks[i.type]||g.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(ot,""):null==n?"":n:void 0}}),g.extend({valHooks:{option:{get:function(e){var t=g.find.attr(e,"value");return null!=t?t:g.trim(g.text(e)).replace(st," ")}},select:{get:function(e){for(var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||i<0,s=o?null:[],a=o?i+1:r.length,u=i<0?a:o?i:0;u<a;u++)if(((n=r[u]).selected||u===i)&&(d.optDisabled?!n.disabled:null===n.getAttribute("disabled"))&&(!n.parentNode.disabled||!g.nodeName(n.parentNode,"optgroup"))){if(t=g(n).val(),o)return t;s.push(t)}return s},set:function(e,t){for(var n,r,i=e.options,o=g.makeArray(t),s=i.length;s--;)((r=i[s]).selected=g.inArray(g.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),g.each(["radio","checkbox"],(function(){g.valHooks[this]={set:function(e,t){if(g.isArray(t))return e.checked=g.inArray(g(e).val(),t)>-1}},d.checkOn||(g.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}));var at=/^(?:focusinfocus|focusoutblur)$/;g.extend(g.event,{trigger:function(e,t,r,i){var o,a,u,l,c,f,h,d=[r||s],v=p.call(e,"type")?e.type:e,m=p.call(e,"namespace")?e.namespace.split("."):[];if(a=u=r=r||s,3!==r.nodeType&&8!==r.nodeType&&!at.test(v+g.event.triggered)&&(v.indexOf(".")>-1&&(m=v.split("."),v=m.shift(),m.sort()),c=v.indexOf(":")<0&&"on"+v,(e=e[g.expando]?e:new g.Event(v,"object"==typeof e&&e)).isTrigger=i?2:3,e.namespace=m.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=r),t=null==t?[e]:g.makeArray(t,[e]),h=g.event.special[v]||{},i||!h.trigger||!1!==h.trigger.apply(r,t))){if(!i&&!h.noBubble&&!g.isWindow(r)){for(l=h.delegateType||v,at.test(l+v)||(a=a.parentNode);a;a=a.parentNode)d.push(a),u=a;u===(r.ownerDocument||s)&&d.push(u.defaultView||u.parentWindow||n)}for(o=0;(a=d[o++])&&!e.isPropagationStopped();)e.type=o>1?l:h.bindType||v,(f=(I.get(a,"events")||{})[e.type]&&I.get(a,"handle"))&&f.apply(a,t),(f=c&&a[c])&&f.apply&&R(a)&&(e.result=f.apply(a,t),!1===e.result&&e.preventDefault());return e.type=v,i||e.isDefaultPrevented()||h._default&&!1!==h._default.apply(d.pop(),t)||!R(r)||c&&g.isFunction(r[v])&&!g.isWindow(r)&&((u=r[c])&&(r[c]=null),g.event.triggered=v,r[v](),g.event.triggered=void 0,u&&(r[c]=u)),e.result}},simulate:function(e,t,n){var r=g.extend(new g.Event,n,{type:e,isSimulated:!0});g.event.trigger(r,null,t)}}),g.fn.extend({trigger:function(e,t){return this.each((function(){g.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n=this[0];if(n)return g.event.trigger(e,t,n,!0)}}),g.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),(function(e,t){g.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}})),g.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),d.focusin="onfocusin"in n,d.focusin||g.each({focus:"focusin",blur:"focusout"},(function(e,t){var n=function(e){g.event.simulate(t,e.target,g.event.fix(e))};g.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=I.access(r,t);i||r.addEventListener(e,n,!0),I.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=I.access(r,t)-1;i?I.access(r,t,i):(r.removeEventListener(e,n,!0),I.remove(r,t))}}}));var ut=n.location,lt=g.now(),ct=/\?/;g.parseJSON=function(e){return JSON.parse(e+"")},g.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new n.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||g.error("Invalid XML: "+e),t};var ft=/#.*$/,ht=/([?&])_=[^&]*/,pt=/^(.*?):[ \t]*([^\r\n]*)$/gm,dt=/^(?:GET|HEAD)$/,gt=/^\/\//,vt={},mt={},yt="*/".concat("*"),xt=s.createElement("a");function bt(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(H)||[];if(g.isFunction(n))for(;r=o[i++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function wt(e,t,n,r){var i={},o=e===mt;function s(a){var u;return i[a]=!0,g.each(e[a]||[],(function(e,a){var l=a(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),s(l),!1)})),u}return s(t.dataTypes[0])||!i["*"]&&s("*")}function Tt(e,t){var n,r,i=g.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&g.extend(!0,e,r),e}xt.href=ut.href,g.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ut.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(ut.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":yt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":g.parseJSON,"text xml":g.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Tt(Tt(e,g.ajaxSettings),t):Tt(g.ajaxSettings,e)},ajaxPrefilter:bt(vt),ajaxTransport:bt(mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var r,i,o,a,u,l,c,f,h=g.ajaxSetup({},t),p=h.context||h,d=h.context&&(p.nodeType||p.jquery)?g(p):g.event,v=g.Deferred(),m=g.Callbacks("once memory"),y=h.statusCode||{},x={},b={},w=0,T="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===w){if(!a)for(a={};t=pt.exec(o);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===w?o:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return w||(e=b[n]=b[n]||e,x[e]=t),this},overrideMimeType:function(e){return w||(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(w<2)for(t in e)y[t]=[y[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||T;return r&&r.abort(t),E(0,t),this}};if(v.promise(C).complete=m.add,C.success=C.done,C.error=C.fail,h.url=((e||h.url||ut.href)+"").replace(ft,"").replace(gt,ut.protocol+"//"),h.type=t.method||t.type||h.method||h.type,h.dataTypes=g.trim(h.dataType||"*").toLowerCase().match(H)||[""],null==h.crossDomain){l=s.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=xt.protocol+"//"+xt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=g.param(h.data,h.traditional)),wt(vt,h,t,C),2===w)return C;for(f in(c=g.event&&h.global)&&0==g.active++&&g.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!dt.test(h.type),i=h.url,h.hasContent||(h.data&&(i=h.url+=(ct.test(i)?"&":"?")+h.data,delete h.data),!1===h.cache&&(h.url=ht.test(i)?i.replace(ht,"$1_="+lt++):i+(ct.test(i)?"&":"?")+"_="+lt++)),h.ifModified&&(g.lastModified[i]&&C.setRequestHeader("If-Modified-Since",g.lastModified[i]),g.etag[i]&&C.setRequestHeader("If-None-Match",g.etag[i])),(h.data&&h.hasContent&&!1!==h.contentType||t.contentType)&&C.setRequestHeader("Content-Type",h.contentType),C.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+yt+"; q=0.01":""):h.accepts["*"]),h.headers)C.setRequestHeader(f,h.headers[f]);if(h.beforeSend&&(!1===h.beforeSend.call(p,C,h)||2===w))return C.abort();for(f in T="abort",{success:1,error:1,complete:1})C[f](h[f]);if(r=wt(mt,h,t,C)){if(C.readyState=1,c&&d.trigger("ajaxSend",[C,h]),2===w)return C;h.async&&h.timeout>0&&(u=n.setTimeout((function(){C.abort("timeout")}),h.timeout));try{w=1,r.send(x,E)}catch(e){if(!(w<2))throw e;E(-1,e)}}else E(-1,"No Transport");function E(e,t,s,a){var l,f,x,b,T,E=t;2!==w&&(w=2,u&&n.clearTimeout(u),r=void 0,o=a||"",C.readyState=e>0?4:0,l=e>=200&&e<300||304===e,s&&(b=function(e,t,n){for(var r,i,o,s,a=e.contents,u=e.dataTypes;"*"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in a)if(a[i]&&a[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}s||(s=i)}o=o||s}if(o)return o!==u[0]&&u.unshift(o),n[o]}(h,C,s)),b=function(e,t,n,r){var i,o,s,a,u,l={},c=e.dataTypes.slice();if(c[1])for(s in e.converters)l[s.toLowerCase()]=e.converters[s];for(o=c.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(s=l[u+" "+o]||l["* "+o]))for(i in l)if((a=i.split(" "))[1]===o&&(s=l[u+" "+a[0]]||l["* "+a[0]])){!0===s?s=l[i]:!0!==l[i]&&(o=a[0],c.unshift(a[1]));break}if(!0!==s)if(s&&e.throws)t=s(t);else try{t=s(t)}catch(e){return{state:"parsererror",error:s?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(h,b,C,l),l?(h.ifModified&&((T=C.getResponseHeader("Last-Modified"))&&(g.lastModified[i]=T),(T=C.getResponseHeader("etag"))&&(g.etag[i]=T)),204===e||"HEAD"===h.type?E="nocontent":304===e?E="notmodified":(E=b.state,f=b.data,l=!(x=b.error))):(x=E,!e&&E||(E="error",e<0&&(e=0))),C.status=e,C.statusText=(t||E)+"",l?v.resolveWith(p,[f,E,C]):v.rejectWith(p,[C,E,x]),C.statusCode(y),y=void 0,c&&d.trigger(l?"ajaxSuccess":"ajaxError",[C,h,l?f:x]),m.fireWith(p,[C,E]),c&&(d.trigger("ajaxComplete",[C,h]),--g.active||g.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return g.get(e,t,n,"json")},getScript:function(e,t){return g.get(e,void 0,t,"script")}}),g.each(["get","post"],(function(e,t){g[t]=function(e,n,r,i){return g.isFunction(n)&&(i=i||r,r=n,n=void 0),g.ajax(g.extend({url:e,type:t,dataType:i,data:n,success:r},g.isPlainObject(e)&&e))}})),g._evalUrl=function(e){return g.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,throws:!0})},g.fn.extend({wrapAll:function(e){var t;return g.isFunction(e)?this.each((function(t){g(this).wrapAll(e.call(this,t))})):(this[0]&&(t=g(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map((function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e})).append(this)),this)},wrapInner:function(e){return g.isFunction(e)?this.each((function(t){g(this).wrapInner(e.call(this,t))})):this.each((function(){var t=g(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)}))},wrap:function(e){var t=g.isFunction(e);return this.each((function(n){g(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(){return this.parent().each((function(){g.nodeName(this,"body")||g(this).replaceWith(this.childNodes)})).end()}}),g.expr.filters.hidden=function(e){return!g.expr.filters.visible(e)},g.expr.filters.visible=function(e){return e.offsetWidth>0||e.offsetHeight>0||e.getClientRects().length>0};var Ct=/%20/g,Et=/\[\]$/,kt=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,jt=/^(?:input|select|textarea|keygen)/i;function Nt(e,t,n,r){var i;if(g.isArray(t))g.each(t,(function(t,i){n||Et.test(e)?r(e,i):Nt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)}));else if(n||"object"!==g.type(t))r(e,t);else for(i in t)Nt(e+"["+i+"]",t[i],n,r)}g.param=function(e,t){var n,r=[],i=function(e,t){t=g.isFunction(t)?t():null==t?"":t,r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(void 0===t&&(t=g.ajaxSettings&&g.ajaxSettings.traditional),g.isArray(e)||e.jquery&&!g.isPlainObject(e))g.each(e,(function(){i(this.name,this.value)}));else for(n in e)Nt(n,e[n],t,i);return r.join("&").replace(Ct,"+")},g.fn.extend({serialize:function(){return g.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=g.prop(this,"elements");return e?g.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!g(this).is(":disabled")&&jt.test(this.nodeName)&&!St.test(e)&&(this.checked||!Y.test(e))})).map((function(e,t){var n=g(this).val();return null==n?null:g.isArray(n)?g.map(n,(function(e){return{name:t.name,value:e.replace(kt,"\r\n")}})):{name:t.name,value:n.replace(kt,"\r\n")}})).get()}}),g.ajaxSettings.xhr=function(){try{return new n.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},At=g.ajaxSettings.xhr();d.cors=!!At&&"withCredentials"in At,d.ajax=At=!!At,g.ajaxTransport((function(e){var t,r;if(d.cors||At&&!e.crossDomain)return{send:function(i,o){var s,a=e.xhr();if(a.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(s in e.xhrFields)a[s]=e.xhrFields[s];for(s in e.mimeType&&a.overrideMimeType&&a.overrideMimeType(e.mimeType),e.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest"),i)a.setRequestHeader(s,i[s]);t=function(e){return function(){t&&(t=r=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?o(0,"error"):o(a.status,a.statusText):o(_t[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=t(),r=a.onerror=t("error"),void 0!==a.onabort?a.onabort=r:a.onreadystatechange=function(){4===a.readyState&&n.setTimeout((function(){t&&r()}))},t=t("abort");try{a.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}})),g.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return g.globalEval(e),e}}}),g.ajaxPrefilter("script",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")})),g.ajaxTransport("script",(function(e){var t,n;if(e.crossDomain)return{send:function(r,i){t=g("<script>").prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&i("error"===e.type?404:200,e.type)}),s.head.appendChild(t[0])},abort:function(){n&&n()}}}));var Dt=[],qt=/(=)\?(?=&|$)|\?\?/;g.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Dt.pop()||g.expando+"_"+lt++;return this[e]=!0,e}}),g.ajaxPrefilter("json jsonp",(function(e,t,r){var i,o,s,a=!1!==e.jsonp&&(qt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&qt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return i=e.jsonpCallback=g.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(qt,"$1"+i):!1!==e.jsonp&&(e.url+=(ct.test(e.url)?"&":"?")+e.jsonp+"="+i),e.converters["script json"]=function(){return s||g.error(i+" was not called"),s[0]},e.dataTypes[0]="json",o=n[i],n[i]=function(){s=arguments},r.always((function(){void 0===o?g(n).removeProp(i):n[i]=o,e[i]&&(e.jsonpCallback=t.jsonpCallback,Dt.push(i)),s&&g.isFunction(o)&&o(s[0]),s=o=void 0})),"script"})),g.parseHTML=function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||s;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=ie([e],t,i),i&&i.length&&g(i).remove(),g.merge([],r.childNodes))};var Ot=g.fn.load;function Ht(e){return g.isWindow(e)?e:9===e.nodeType&&e.defaultView}g.fn.load=function(e,t,n){if("string"!=typeof e&&Ot)return Ot.apply(this,arguments);var r,i,o,s=this,a=e.indexOf(" ");return a>-1&&(r=g.trim(e.slice(a)),e=e.slice(0,a)),g.isFunction(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),s.length>0&&g.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done((function(e){o=arguments,s.html(r?g("<div>").append(g.parseHTML(e)).find(r):e)})).always(n&&function(e,t){s.each((function(){n.apply(this,o||[e.responseText,t,e])}))}),this},g.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],(function(e,t){g.fn[t]=function(e){return this.on(t,e)}})),g.expr.filters.animated=function(e){return g.grep(g.timers,(function(t){return e===t.elem})).length},g.offset={setOffset:function(e,t,n){var r,i,o,s,a,u,l=g.css(e,"position"),c=g(e),f={};"static"===l&&(e.style.position="relative"),a=c.offset(),o=g.css(e,"top"),u=g.css(e,"left"),("absolute"===l||"fixed"===l)&&(o+u).indexOf("auto")>-1?(s=(r=c.position()).top,i=r.left):(s=parseFloat(o)||0,i=parseFloat(u)||0),g.isFunction(t)&&(t=t.call(e,n,g.extend({},a))),null!=t.top&&(f.top=t.top-a.top+s),null!=t.left&&(f.left=t.left-a.left+i),"using"in t?t.using.call(e,f):c.css(f)}},g.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each((function(t){g.offset.setOffset(this,e,t)}));var t,n,r=this[0],i={top:0,left:0},o=r&&r.ownerDocument;return o?(t=o.documentElement,g.contains(t,r)?(i=r.getBoundingClientRect(),n=Ht(o),{top:i.top+n.pageYOffset-t.clientTop,left:i.left+n.pageXOffset-t.clientLeft}):i):void 0},position:function(){if(this[0]){var e,t,n=this[0],r={top:0,left:0};return"fixed"===g.css(n,"position")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),g.nodeName(e[0],"html")||(r=e.offset()),r.top+=g.css(e[0],"borderTopWidth",!0),r.left+=g.css(e[0],"borderLeftWidth",!0)),{top:t.top-r.top-g.css(n,"marginTop",!0),left:t.left-r.left-g.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map((function(){for(var e=this.offsetParent;e&&"static"===g.css(e,"position");)e=e.offsetParent;return e||De}))}}),g.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},(function(e,t){var n="pageYOffset"===t;g.fn[e]=function(r){return F(this,(function(e,r,i){var o=Ht(e);if(void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i}),e,r,arguments.length)}})),g.each(["top","left"],(function(e,t){g.cssHooks[t]=Oe(d.pixelPosition,(function(e,n){if(n)return n=qe(e,t),Ne.test(n)?g(e).position()[t]+"px":n}))})),g.each({Height:"height",Width:"width"},(function(e,t){g.each({padding:"inner"+e,content:t,"":"outer"+e},(function(n,r){g.fn[r]=function(r,i){var o=arguments.length&&(n||"boolean"!=typeof r),s=n||(!0===r||!0===i?"margin":"border");return F(this,(function(t,n,r){var i;return g.isWindow(t)?t.document.documentElement["client"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body["scroll"+e],i["scroll"+e],t.body["offset"+e],i["offset"+e],i["client"+e])):void 0===r?g.css(t,n,s):g.style(t,n,r,s)}),t,o?r:void 0,o,null)}}))})),g.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},size:function(){return this.length}}),g.fn.andSelf=g.fn.addBack,void 0===(r=function(){return g}.apply(t,[]))||(e.exports=r);var Lt=n.jQuery,Ft=n.$;return g.noConflict=function(e){return n.$===g&&(n.$=Ft),e&&n.jQuery===g&&(n.jQuery=Lt),g},i||(n.jQuery=n.$=g),g},"object"==typeof e.exports?e.exports=i.document?o(i,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return o(e)}:o(i)},"./node_modules/underscore/underscore.js":function(e,t,n){(function(){var n=this,r=n._,i={},o=Array.prototype,s=Object.prototype,a=Function.prototype,u=o.push,l=o.slice,c=o.concat,f=s.toString,h=s.hasOwnProperty,p=o.forEach,d=o.map,g=o.reduce,v=o.reduceRight,m=o.filter,y=o.every,x=o.some,b=o.indexOf,w=o.lastIndexOf,T=Array.isArray,C=Object.keys,E=a.bind,k=function(e){return e instanceof k?e:this instanceof k?void(this._wrapped=e):new k(e)};e.exports&&(t=e.exports=k),t._=k,k.VERSION="1.5.1";var S=k.each=k.forEach=function(e,t,n){if(null!=e)if(p&&e.forEach===p)e.forEach(t,n);else if(e.length===+e.length){for(var r=0,o=e.length;r<o;r++)if(t.call(n,e[r],r,e)===i)return}else for(var s in e)if(k.has(e,s)&&t.call(n,e[s],s,e)===i)return};k.map=k.collect=function(e,t,n){var r=[];return null==e?r:d&&e.map===d?e.map(t,n):(S(e,(function(e,i,o){r.push(t.call(n,e,i,o))})),r)};var j="Reduce of empty array with no initial value";k.reduce=k.foldl=k.inject=function(e,t,n,r){var i=arguments.length>2;if(null==e&&(e=[]),g&&e.reduce===g)return r&&(t=k.bind(t,r)),i?e.reduce(t,n):e.reduce(t);if(S(e,(function(e,o,s){i?n=t.call(r,n,e,o,s):(n=e,i=!0)})),!i)throw new TypeError(j);return n},k.reduceRight=k.foldr=function(e,t,n,r){var i=arguments.length>2;if(null==e&&(e=[]),v&&e.reduceRight===v)return r&&(t=k.bind(t,r)),i?e.reduceRight(t,n):e.reduceRight(t);var o=e.length;if(o!==+o){var s=k.keys(e);o=s.length}if(S(e,(function(a,u,l){u=s?s[--o]:--o,i?n=t.call(r,n,e[u],u,l):(n=e[u],i=!0)})),!i)throw new TypeError(j);return n},k.find=k.detect=function(e,t,n){var r;return N(e,(function(e,i,o){if(t.call(n,e,i,o))return r=e,!0})),r},k.filter=k.select=function(e,t,n){var r=[];return null==e?r:m&&e.filter===m?e.filter(t,n):(S(e,(function(e,i,o){t.call(n,e,i,o)&&r.push(e)})),r)},k.reject=function(e,t,n){return k.filter(e,(function(e,r,i){return!t.call(n,e,r,i)}),n)},k.every=k.all=function(e,t,n){t||(t=k.identity);var r=!0;return null==e?r:y&&e.every===y?e.every(t,n):(S(e,(function(e,o,s){if(!(r=r&&t.call(n,e,o,s)))return i})),!!r)};var N=k.some=k.any=function(e,t,n){t||(t=k.identity);var r=!1;return null==e?r:x&&e.some===x?e.some(t,n):(S(e,(function(e,o,s){if(r||(r=t.call(n,e,o,s)))return i})),!!r)};k.contains=k.include=function(e,t){return null!=e&&(b&&e.indexOf===b?-1!=e.indexOf(t):N(e,(function(e){return e===t})))},k.invoke=function(e,t){var n=l.call(arguments,2),r=k.isFunction(t);return k.map(e,(function(e){return(r?t:e[t]).apply(e,n)}))},k.pluck=function(e,t){return k.map(e,(function(e){return e[t]}))},k.where=function(e,t,n){return k.isEmpty(t)?n?void 0:[]:k[n?"find":"filter"](e,(function(e){for(var n in t)if(t[n]!==e[n])return!1;return!0}))},k.findWhere=function(e,t){return k.where(e,t,!0)},k.max=function(e,t,n){if(!t&&k.isArray(e)&&e[0]===+e[0]&&e.length<65535)return Math.max.apply(Math,e);if(!t&&k.isEmpty(e))return-1/0;var r={computed:-1/0,value:-1/0};return S(e,(function(e,i,o){var s=t?t.call(n,e,i,o):e;s>r.computed&&(r={value:e,computed:s})})),r.value},k.min=function(e,t,n){if(!t&&k.isArray(e)&&e[0]===+e[0]&&e.length<65535)return Math.min.apply(Math,e);if(!t&&k.isEmpty(e))return 1/0;var r={computed:1/0,value:1/0};return S(e,(function(e,i,o){var s=t?t.call(n,e,i,o):e;s<r.computed&&(r={value:e,computed:s})})),r.value},k.shuffle=function(e){var t,n=0,r=[];return S(e,(function(e){t=k.random(n++),r[n-1]=r[t],r[t]=e})),r};var _=function(e){return k.isFunction(e)?e:function(t){return t[e]}};k.sortBy=function(e,t,n){var r=_(t);return k.pluck(k.map(e,(function(e,t,i){return{value:e,index:t,criteria:r.call(n,e,t,i)}})).sort((function(e,t){var n=e.criteria,r=t.criteria;if(n!==r){if(n>r||void 0===n)return 1;if(n<r||void 0===r)return-1}return e.index<t.index?-1:1})),"value")};var A=function(e,t,n,r){var i={},o=_(null==t?k.identity:t);return S(e,(function(t,s){var a=o.call(n,t,s,e);r(i,a,t)})),i};k.groupBy=function(e,t,n){return A(e,t,n,(function(e,t,n){(k.has(e,t)?e[t]:e[t]=[]).push(n)}))},k.countBy=function(e,t,n){return A(e,t,n,(function(e,t){k.has(e,t)||(e[t]=0),e[t]++}))},k.sortedIndex=function(e,t,n,r){for(var i=(n=null==n?k.identity:_(n)).call(r,t),o=0,s=e.length;o<s;){var a=o+s>>>1;n.call(r,e[a])<i?o=a+1:s=a}return o},k.toArray=function(e){return e?k.isArray(e)?l.call(e):e.length===+e.length?k.map(e,k.identity):k.values(e):[]},k.size=function(e){return null==e?0:e.length===+e.length?e.length:k.keys(e).length},k.first=k.head=k.take=function(e,t,n){if(null!=e)return null==t||n?e[0]:l.call(e,0,t)},k.initial=function(e,t,n){return l.call(e,0,e.length-(null==t||n?1:t))},k.last=function(e,t,n){if(null!=e)return null==t||n?e[e.length-1]:l.call(e,Math.max(e.length-t,0))},k.rest=k.tail=k.drop=function(e,t,n){return l.call(e,null==t||n?1:t)},k.compact=function(e){return k.filter(e,k.identity)};var D=function(e,t,n){return t&&k.every(e,k.isArray)?c.apply(n,e):(S(e,(function(e){k.isArray(e)||k.isArguments(e)?t?u.apply(n,e):D(e,t,n):n.push(e)})),n)};k.flatten=function(e,t){return D(e,t,[])},k.without=function(e){return k.difference(e,l.call(arguments,1))},k.uniq=k.unique=function(e,t,n,r){k.isFunction(t)&&(r=n,n=t,t=!1);var i=n?k.map(e,n,r):e,o=[],s=[];return S(i,(function(n,r){(t?r&&s[s.length-1]===n:k.contains(s,n))||(s.push(n),o.push(e[r]))})),o},k.union=function(){return k.uniq(k.flatten(arguments,!0))},k.intersection=function(e){var t=l.call(arguments,1);return k.filter(k.uniq(e),(function(e){return k.every(t,(function(t){return k.indexOf(t,e)>=0}))}))},k.difference=function(e){var t=c.apply(o,l.call(arguments,1));return k.filter(e,(function(e){return!k.contains(t,e)}))},k.zip=function(){for(var e=k.max(k.pluck(arguments,"length").concat(0)),t=new Array(e),n=0;n<e;n++)t[n]=k.pluck(arguments,""+n);return t},k.object=function(e,t){if(null==e)return{};for(var n={},r=0,i=e.length;r<i;r++)t?n[e[r]]=t[r]:n[e[r][0]]=e[r][1];return n},k.indexOf=function(e,t,n){if(null==e)return-1;var r=0,i=e.length;if(n){if("number"!=typeof n)return e[r=k.sortedIndex(e,t)]===t?r:-1;r=n<0?Math.max(0,i+n):n}if(b&&e.indexOf===b)return e.indexOf(t,n);for(;r<i;r++)if(e[r]===t)return r;return-1},k.lastIndexOf=function(e,t,n){if(null==e)return-1;var r=null!=n;if(w&&e.lastIndexOf===w)return r?e.lastIndexOf(t,n):e.lastIndexOf(t);for(var i=r?n:e.length;i--;)if(e[i]===t)return i;return-1},k.range=function(e,t,n){arguments.length<=1&&(t=e||0,e=0),n=arguments[2]||1;for(var r=Math.max(Math.ceil((t-e)/n),0),i=0,o=new Array(r);i<r;)o[i++]=e,e+=n;return o};var q=function(){};k.bind=function(e,t){var n,r;if(E&&e.bind===E)return E.apply(e,l.call(arguments,1));if(!k.isFunction(e))throw new TypeError;return n=l.call(arguments,2),r=function(){if(!(this instanceof r))return e.apply(t,n.concat(l.call(arguments)));q.prototype=e.prototype;var i=new q;q.prototype=null;var o=e.apply(i,n.concat(l.call(arguments)));return Object(o)===o?o:i}},k.partial=function(e){var t=l.call(arguments,1);return function(){return e.apply(this,t.concat(l.call(arguments)))}},k.bindAll=function(e){var t=l.call(arguments,1);if(0===t.length)throw new Error("bindAll must be passed function names");return S(t,(function(t){e[t]=k.bind(e[t],e)})),e},k.memoize=function(e,t){var n={};return t||(t=k.identity),function(){var r=t.apply(this,arguments);return k.has(n,r)?n[r]:n[r]=e.apply(this,arguments)}},k.delay=function(e,t){var n=l.call(arguments,2);return setTimeout((function(){return e.apply(null,n)}),t)},k.defer=function(e){return k.delay.apply(k,[e,1].concat(l.call(arguments,1)))},k.throttle=function(e,t,n){var r,i,o,s=null,a=0;n||(n={});var u=function(){a=!1===n.leading?0:new Date,s=null,o=e.apply(r,i)};return function(){var l=new Date;a||!1!==n.leading||(a=l);var c=t-(l-a);return r=this,i=arguments,c<=0?(clearTimeout(s),s=null,a=l,o=e.apply(r,i)):s||!1===n.trailing||(s=setTimeout(u,c)),o}},k.debounce=function(e,t,n){var r,i=null;return function(){var o=this,s=arguments,a=function(){i=null,n||(r=e.apply(o,s))},u=n&&!i;return clearTimeout(i),i=setTimeout(a,t),u&&(r=e.apply(o,s)),r}},k.once=function(e){var t,n=!1;return function(){return n||(n=!0,t=e.apply(this,arguments),e=null),t}},k.wrap=function(e,t){return function(){var n=[e];return u.apply(n,arguments),t.apply(this,n)}},k.compose=function(){var e=arguments;return function(){for(var t=arguments,n=e.length-1;n>=0;n--)t=[e[n].apply(this,t)];return t[0]}},k.after=function(e,t){return function(){if(--e<1)return t.apply(this,arguments)}},k.keys=C||function(e){if(e!==Object(e))throw new TypeError("Invalid object");var t=[];for(var n in e)k.has(e,n)&&t.push(n);return t},k.values=function(e){var t=[];for(var n in e)k.has(e,n)&&t.push(e[n]);return t},k.pairs=function(e){var t=[];for(var n in e)k.has(e,n)&&t.push([n,e[n]]);return t},k.invert=function(e){var t={};for(var n in e)k.has(e,n)&&(t[e[n]]=n);return t},k.functions=k.methods=function(e){var t=[];for(var n in e)k.isFunction(e[n])&&t.push(n);return t.sort()},k.extend=function(e){return S(l.call(arguments,1),(function(t){if(t)for(var n in t)e[n]=t[n]})),e},k.pick=function(e){var t={},n=c.apply(o,l.call(arguments,1));return S(n,(function(n){n in e&&(t[n]=e[n])})),t},k.omit=function(e){var t={},n=c.apply(o,l.call(arguments,1));for(var r in e)k.contains(n,r)||(t[r]=e[r]);return t},k.defaults=function(e){return S(l.call(arguments,1),(function(t){if(t)for(var n in t)void 0===e[n]&&(e[n]=t[n])})),e},k.clone=function(e){return k.isObject(e)?k.isArray(e)?e.slice():k.extend({},e):e},k.tap=function(e,t){return t(e),e};var O=function(e,t,n,r){if(e===t)return 0!==e||1/e==1/t;if(null==e||null==t)return e===t;e instanceof k&&(e=e._wrapped),t instanceof k&&(t=t._wrapped);var i=f.call(e);if(i!=f.call(t))return!1;switch(i){case"[object String]":return e==String(t);case"[object Number]":return e!=+e?t!=+t:0==e?1/e==1/t:e==+t;case"[object Date]":case"[object Boolean]":return+e==+t;case"[object RegExp]":return e.source==t.source&&e.global==t.global&&e.multiline==t.multiline&&e.ignoreCase==t.ignoreCase}if("object"!=typeof e||"object"!=typeof t)return!1;for(var o=n.length;o--;)if(n[o]==e)return r[o]==t;var s=e.constructor,a=t.constructor;if(s!==a&&!(k.isFunction(s)&&s instanceof s&&k.isFunction(a)&&a instanceof a))return!1;n.push(e),r.push(t);var u=0,l=!0;if("[object Array]"==i){if(l=(u=e.length)==t.length)for(;u--&&(l=O(e[u],t[u],n,r)););}else{for(var c in e)if(k.has(e,c)&&(u++,!(l=k.has(t,c)&&O(e[c],t[c],n,r))))break;if(l){for(c in t)if(k.has(t,c)&&!u--)break;l=!u}}return n.pop(),r.pop(),l};k.isEqual=function(e,t){return O(e,t,[],[])},k.isEmpty=function(e){if(null==e)return!0;if(k.isArray(e)||k.isString(e))return 0===e.length;for(var t in e)if(k.has(e,t))return!1;return!0},k.isElement=function(e){return!(!e||1!==e.nodeType)},k.isArray=T||function(e){return"[object Array]"==f.call(e)},k.isObject=function(e){return e===Object(e)},S(["Arguments","Function","String","Number","Date","RegExp"],(function(e){k["is"+e]=function(t){return f.call(t)=="[object "+e+"]"}})),k.isArguments(arguments)||(k.isArguments=function(e){return!(!e||!k.has(e,"callee"))}),k.isFunction=function(e){return"function"==typeof e},k.isFinite=function(e){return isFinite(e)&&!isNaN(parseFloat(e))},k.isNaN=function(e){return k.isNumber(e)&&e!=+e},k.isBoolean=function(e){return!0===e||!1===e||"[object Boolean]"==f.call(e)},k.isNull=function(e){return null===e},k.isUndefined=function(e){return void 0===e},k.has=function(e,t){return h.call(e,t)},k.noConflict=function(){return n._=r,this},k.identity=function(e){return e},k.times=function(e,t,n){for(var r=Array(Math.max(0,e)),i=0;i<e;i++)r[i]=t.call(n,i);return r},k.random=function(e,t){return null==t&&(t=e,e=0),e+Math.floor(Math.random()*(t-e+1))};var H={escape:{"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"}};H.unescape=k.invert(H.escape);var L={escape:new RegExp("["+k.keys(H.escape).join("")+"]","g"),unescape:new RegExp("("+k.keys(H.unescape).join("|")+")","g")};k.each(["escape","unescape"],(function(e){k[e]=function(t){return null==t?"":(""+t).replace(L[e],(function(t){return H[e][t]}))}})),k.result=function(e,t){if(null!=e){var n=e[t];return k.isFunction(n)?n.call(e):n}},k.mixin=function(e){S(k.functions(e),(function(t){var n=k[t]=e[t];k.prototype[t]=function(){var e=[this._wrapped];return u.apply(e,arguments),M.call(this,n.apply(k,e))}}))};var F=0;k.uniqueId=function(e){var t=++F+"";return e?e+t:t},k.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var R=/(.)^/,P={"'":"'","\\":"\\","\r":"r","\n":"n","\t":"t","\u2028":"u2028","\u2029":"u2029"},I=/\\|'|\r|\n|\t|\u2028|\u2029/g;k.template=function(e,t,n){var r;n=k.defaults({},n,k.templateSettings);var i=new RegExp([(n.escape||R).source,(n.interpolate||R).source,(n.evaluate||R).source].join("|")+"|$","g"),o=0,s="__p+='";e.replace(i,(function(t,n,r,i,a){return s+=e.slice(o,a).replace(I,(function(e){return"\\"+P[e]})),n&&(s+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'"),r&&(s+="'+\n((__t=("+r+"))==null?'':__t)+\n'"),i&&(s+="';\n"+i+"\n__p+='"),o=a+t.length,t})),s+="';\n",n.variable||(s="with(obj||{}){\n"+s+"}\n"),s="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+s+"return __p;\n";try{r=new Function(n.variable||"obj","_",s)}catch(e){throw e.source=s,e}if(t)return r(t,k);var a=function(e){return r.call(this,e,k)};return a.source="function("+(n.variable||"obj")+"){\n"+s+"}",a},k.chain=function(e){return k(e).chain()};var M=function(e){return this._chain?k(e).chain():e};k.mixin(k),S(["pop","push","reverse","shift","sort","splice","unshift"],(function(e){var t=o[e];k.prototype[e]=function(){var n=this._wrapped;return t.apply(n,arguments),"shift"!=e&&"splice"!=e||0!==n.length||delete n[0],M.call(this,n)}})),S(["concat","join","slice"],(function(e){var t=o[e];k.prototype[e]=function(){return M.call(this,t.apply(this._wrapped,arguments))}})),k.extend(k.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(this)}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3VzdG9tLWJhY2tib25lL2JhY2tib25lLW1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC1jbG9zZXN0LXBvbHlmaWxsL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvdW5kZXJzY29yZS5qcyJdLCJuYW1lcyI6WyJCYWNrYm9uZSIsInJvb3QiLCJ0aGlzIiwicHJldmlvdXNCYWNrYm9uZSIsImFycmF5IiwicHVzaCIsInNsaWNlIiwic3BsaWNlIiwiZXhwb3J0cyIsIlZFUlNJT04iLCJfIiwiJCIsIm5vQ29uZmxpY3QiLCJlbXVsYXRlSFRUUCIsImVtdWxhdGVKU09OIiwiRXZlbnRzIiwib24iLCJuYW1lIiwiY2FsbGJhY2siLCJjb250ZXh0IiwiZXZlbnRzQXBpIiwiX2V2ZW50cyIsImN0eCIsIm9uY2UiLCJzZWxmIiwib2ZmIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJfY2FsbGJhY2siLCJyZXRhaW4iLCJldiIsImV2ZW50cyIsIm5hbWVzIiwiaSIsImwiLCJqIiwiayIsImtleXMiLCJsZW5ndGgiLCJ0cmlnZ2VyIiwiYXJncyIsImNhbGwiLCJhbGxFdmVudHMiLCJhbGwiLCJ0cmlnZ2VyRXZlbnRzIiwic3RvcExpc3RlbmluZyIsIm9iaiIsImxpc3RlbmVycyIsIl9saXN0ZW5lcnMiLCJkZWxldGVMaXN0ZW5lciIsImlkIiwiX2xpc3RlbmVySWQiLCJldmVudFNwbGl0dGVyIiwiYWN0aW9uIiwicmVzdCIsImtleSIsImNvbmNhdCIsInRlc3QiLCJzcGxpdCIsImExIiwiYTIiLCJhMyIsImVhY2giLCJsaXN0ZW5UbyIsImxpc3RlblRvT25jZSIsImltcGxlbWVudGF0aW9uIiwibWV0aG9kIiwidW5pcXVlSWQiLCJiaW5kIiwidW5iaW5kIiwiZXh0ZW5kIiwiTW9kZWwiLCJhdHRyaWJ1dGVzIiwib3B0aW9ucyIsImRlZmF1bHRzIiwiYXR0cnMiLCJjaWQiLCJwaWNrIiwibW9kZWxPcHRpb25zIiwicGFyc2UiLCJyZXN1bHQiLCJzZXQiLCJjaGFuZ2VkIiwiaW5pdGlhbGl6ZSIsInByb3RvdHlwZSIsInZhbGlkYXRpb25FcnJvciIsImlkQXR0cmlidXRlIiwidG9KU09OIiwiY2xvbmUiLCJzeW5jIiwiZ2V0IiwiYXR0ciIsImVzY2FwZSIsImhhcyIsInZhbCIsInVuc2V0IiwiY2hhbmdlcyIsInNpbGVudCIsImNoYW5naW5nIiwicHJldiIsImN1cnJlbnQiLCJfdmFsaWRhdGUiLCJfY2hhbmdpbmciLCJfcHJldmlvdXNBdHRyaWJ1dGVzIiwiaXNFcXVhbCIsIl9wZW5kaW5nIiwiY2xlYXIiLCJoYXNDaGFuZ2VkIiwiaXNFbXB0eSIsImNoYW5nZWRBdHRyaWJ1dGVzIiwiZGlmZiIsIm9sZCIsInByZXZpb3VzIiwicHJldmlvdXNBdHRyaWJ1dGVzIiwiZmV0Y2giLCJtb2RlbCIsInN1Y2Nlc3MiLCJyZXNwIiwid3JhcEVycm9yIiwic2F2ZSIsInhociIsIndhaXQiLCJ2YWxpZGF0ZSIsInNlcnZlckF0dHJzIiwiaXNPYmplY3QiLCJpc05ldyIsInBhdGNoIiwiZGVzdHJveSIsImNvbGxlY3Rpb24iLCJ1cmwiLCJiYXNlIiwidXJsRXJyb3IiLCJjaGFyQXQiLCJlbmNvZGVVUklDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsImlzVmFsaWQiLCJlcnJvciIsInVuc2hpZnQiLCJDb2xsZWN0aW9uIiwibW9kZWxzIiwiY29tcGFyYXRvciIsIl9yZXNldCIsInJlc2V0Iiwic2V0T3B0aW9ucyIsImFkZCIsInJlbW92ZSIsIm1lcmdlIiwiYWRkT3B0aW9ucyIsIm1hcCIsImluZGV4IiwiaXNBcnJheSIsIl9ieUlkIiwiaW5kZXhPZiIsIl9yZW1vdmVSZWZlcmVuY2UiLCJleGlzdGluZyIsInNvcnQiLCJhdCIsInNvcnRhYmxlIiwic29ydEF0dHIiLCJpc1N0cmluZyIsInRvQWRkIiwidG9SZW1vdmUiLCJtb2RlbE1hcCIsIl9wcmVwYXJlTW9kZWwiLCJfb25Nb2RlbEV2ZW50IiwicHJldmlvdXNNb2RlbHMiLCJwb3AiLCJzaGlmdCIsImJlZ2luIiwiZW5kIiwid2hlcmUiLCJmaXJzdCIsImZpbmRXaGVyZSIsIkVycm9yIiwic29ydEJ5Iiwic29ydGVkSW5kZXgiLCJ2YWx1ZSIsIml0ZXJhdG9yIiwiaXNGdW5jdGlvbiIsInBsdWNrIiwiaW52b2tlIiwiY3JlYXRlIiwiZXZlbnQiLCJWaWV3IiwiX2NvbmZpZ3VyZSIsIl9lbnN1cmVFbGVtZW50IiwiZGVsZWdhdGVFdmVudHMiLCJkZWxlZ2F0ZUV2ZW50U3BsaXR0ZXIiLCJ2aWV3T3B0aW9ucyIsInRhZ05hbWUiLCJzZWxlY3RvciIsIiRlbCIsImZpbmQiLCJyZW5kZXIiLCJzZXRFbGVtZW50IiwiZWxlbWVudCIsImRlbGVnYXRlIiwidW5kZWxlZ2F0ZUV2ZW50cyIsImVsIiwibWF0Y2giLCJldmVudE5hbWUiLCJjbGFzc05hbWUiLCJ0eXBlIiwibWV0aG9kTWFwIiwicGFyYW1zIiwiZGF0YVR5cGUiLCJkYXRhIiwiY29udGVudFR5cGUiLCJKU09OIiwic3RyaW5naWZ5IiwiX21ldGhvZCIsImJlZm9yZVNlbmQiLCJzZXRSZXF1ZXN0SGVhZGVyIiwicHJvY2Vzc0RhdGEiLCJ3aW5kb3ciLCJBY3RpdmVYT2JqZWN0IiwiZXh0ZXJuYWwiLCJtc0FjdGl2ZVhGaWx0ZXJpbmdFbmFibGVkIiwiYWpheCIsInVwZGF0ZSIsInJlYWQiLCJSb3V0ZXIiLCJyb3V0ZXMiLCJfYmluZFJvdXRlcyIsIm9wdGlvbmFsUGFyYW0iLCJuYW1lZFBhcmFtIiwic3BsYXRQYXJhbSIsImVzY2FwZVJlZ0V4cCIsInJvdXRlIiwiaXNSZWdFeHAiLCJfcm91dGVUb1JlZ0V4cCIsInJvdXRlciIsImhpc3RvcnkiLCJmcmFnbWVudCIsIl9leHRyYWN0UGFyYW1ldGVycyIsIm5hdmlnYXRlIiwicmVwbGFjZSIsIm9wdGlvbmFsIiwiUmVnRXhwIiwiZXhlYyIsInBhcmFtIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiSGlzdG9yeSIsImhhbmRsZXJzIiwiYmluZEFsbCIsImxvY2F0aW9uIiwicm91dGVTdHJpcHBlciIsInJvb3RTdHJpcHBlciIsImlzRXhwbG9yZXIiLCJ0cmFpbGluZ1NsYXNoIiwic3RhcnRlZCIsImludGVydmFsIiwiZ2V0SGFzaCIsImhyZWYiLCJnZXRGcmFnbWVudCIsImZvcmNlUHVzaFN0YXRlIiwiX2hhc1B1c2hTdGF0ZSIsIl93YW50c0hhc2hDaGFuZ2UiLCJwYXRobmFtZSIsInN1YnN0ciIsInN0YXJ0IiwiaGFzaENoYW5nZSIsIl93YW50c1B1c2hTdGF0ZSIsInB1c2hTdGF0ZSIsImRvY01vZGUiLCJkb2N1bWVudCIsImRvY3VtZW50TW9kZSIsIm9sZElFIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJpZnJhbWUiLCJoaWRlIiwiYXBwZW5kVG8iLCJjb250ZW50V2luZG93IiwiY2hlY2tVcmwiLCJfY2hlY2tVcmxJbnRlcnZhbCIsInNldEludGVydmFsIiwibG9jIiwiYXRSb290Iiwic2VhcmNoIiwiaGFzaCIsInJlcGxhY2VTdGF0ZSIsInRpdGxlIiwibG9hZFVybCIsInN0b3AiLCJjbGVhckludGVydmFsIiwiZSIsImZyYWdtZW50T3ZlcnJpZGUiLCJhbnkiLCJoYW5kbGVyIiwiYXNzaWduIiwiX3VwZGF0ZUhhc2giLCJvcGVuIiwiY2xvc2UiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJjaGlsZCIsInBhcmVudCIsIlN1cnJvZ2F0ZSIsIl9fc3VwZXJfXyIsIkVsZW1lbnQiLCJtYXRjaGVzIiwibXNNYXRjaGVzU2VsZWN0b3IiLCJ3ZWJraXRNYXRjaGVzU2VsZWN0b3IiLCJjbG9zZXN0IiwicyIsInBhcmVudEVsZW1lbnQiLCJwYXJlbnROb2RlIiwibm9kZVR5cGUiLCJnbG9iYWwiLCJmYWN0b3J5Iiwibm9HbG9iYWwiLCJhcnIiLCJjbGFzczJ0eXBlIiwidG9TdHJpbmciLCJoYXNPd24iLCJoYXNPd25Qcm9wZXJ0eSIsInN1cHBvcnQiLCJqUXVlcnkiLCJmbiIsImluaXQiLCJydHJpbSIsInJtc1ByZWZpeCIsInJkYXNoQWxwaGEiLCJmY2FtZWxDYXNlIiwibGV0dGVyIiwidG9VcHBlckNhc2UiLCJpc0FycmF5TGlrZSIsImlzV2luZG93IiwianF1ZXJ5IiwidG9BcnJheSIsIm51bSIsInB1c2hTdGFjayIsImVsZW1zIiwicmV0IiwicHJldk9iamVjdCIsImVsZW0iLCJlcSIsImxhc3QiLCJsZW4iLCJzcmMiLCJjb3B5IiwiY29weUlzQXJyYXkiLCJ0YXJnZXQiLCJkZWVwIiwiaXNQbGFpbk9iamVjdCIsInVuZGVmaW5lZCIsImV4cGFuZG8iLCJNYXRoIiwicmFuZG9tIiwiaXNSZWFkeSIsIm1zZyIsIm5vb3AiLCJBcnJheSIsImlzTnVtZXJpYyIsInJlYWxTdHJpbmdPYmoiLCJwYXJzZUZsb2F0IiwiaXNFbXB0eU9iamVjdCIsImdsb2JhbEV2YWwiLCJjb2RlIiwic2NyaXB0IiwiaW5kaXJlY3QiLCJldmFsIiwidHJpbSIsImNyZWF0ZUVsZW1lbnQiLCJ0ZXh0IiwiaGVhZCIsImFwcGVuZENoaWxkIiwicmVtb3ZlQ2hpbGQiLCJjYW1lbENhc2UiLCJzdHJpbmciLCJub2RlTmFtZSIsIm1ha2VBcnJheSIsInJlc3VsdHMiLCJPYmplY3QiLCJpbkFycmF5Iiwic2Vjb25kIiwiZ3JlcCIsImludmVydCIsImNhbGxiYWNrRXhwZWN0IiwiYXJnIiwiZ3VpZCIsInByb3h5IiwidG1wIiwibm93IiwiRGF0ZSIsIlN5bWJvbCIsIlNpenpsZSIsIkV4cHIiLCJnZXRUZXh0IiwiaXNYTUwiLCJ0b2tlbml6ZSIsImNvbXBpbGUiLCJzZWxlY3QiLCJvdXRlcm1vc3RDb250ZXh0Iiwic29ydElucHV0IiwiaGFzRHVwbGljYXRlIiwic2V0RG9jdW1lbnQiLCJkb2NFbGVtIiwiZG9jdW1lbnRJc0hUTUwiLCJyYnVnZ3lRU0EiLCJyYnVnZ3lNYXRjaGVzIiwiY29udGFpbnMiLCJwcmVmZXJyZWREb2MiLCJkaXJydW5zIiwiZG9uZSIsImNsYXNzQ2FjaGUiLCJjcmVhdGVDYWNoZSIsInRva2VuQ2FjaGUiLCJjb21waWxlckNhY2hlIiwic29ydE9yZGVyIiwiYSIsImIiLCJwdXNoX25hdGl2ZSIsImxpc3QiLCJib29sZWFucyIsIndoaXRlc3BhY2UiLCJpZGVudGlmaWVyIiwicHNldWRvcyIsInJ3aGl0ZXNwYWNlIiwicmNvbW1hIiwicmNvbWJpbmF0b3JzIiwicmF0dHJpYnV0ZVF1b3RlcyIsInJwc2V1ZG8iLCJyaWRlbnRpZmllciIsIm1hdGNoRXhwciIsInJpbnB1dHMiLCJyaGVhZGVyIiwicm5hdGl2ZSIsInJxdWlja0V4cHIiLCJyc2libGluZyIsInJlc2NhcGUiLCJydW5lc2NhcGUiLCJmdW5lc2NhcGUiLCJlc2NhcGVkIiwiZXNjYXBlZFdoaXRlc3BhY2UiLCJoaWdoIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwidW5sb2FkSGFuZGxlciIsImNoaWxkTm9kZXMiLCJlbHMiLCJzZWVkIiwibSIsIm5pZCIsIm5pZHNlbGVjdCIsImdyb3VwcyIsIm5ld1NlbGVjdG9yIiwibmV3Q29udGV4dCIsIm93bmVyRG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsInFzYSIsImdldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInRvU2VsZWN0b3IiLCJqb2luIiwidGVzdENvbnRleHQiLCJxdWVyeVNlbGVjdG9yQWxsIiwicXNhRXJyb3IiLCJyZW1vdmVBdHRyaWJ1dGUiLCJjYWNoZSIsImNhY2hlTGVuZ3RoIiwibWFya0Z1bmN0aW9uIiwiYXNzZXJ0IiwiZGl2IiwiYWRkSGFuZGxlIiwiYXR0ckhhbmRsZSIsInNpYmxpbmdDaGVjayIsImN1ciIsInNvdXJjZUluZGV4IiwibmV4dFNpYmxpbmciLCJjcmVhdGVJbnB1dFBzZXVkbyIsImNyZWF0ZUJ1dHRvblBzZXVkbyIsImNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8iLCJhcmd1bWVudCIsIm1hdGNoSW5kZXhlcyIsImRvY3VtZW50RWxlbWVudCIsIm5vZGUiLCJoYXNDb21wYXJlIiwiZG9jIiwiZGVmYXVsdFZpZXciLCJ0b3AiLCJhZGRFdmVudExpc3RlbmVyIiwiYXR0YWNoRXZlbnQiLCJjcmVhdGVDb21tZW50IiwiZ2V0QnlJZCIsImdldEVsZW1lbnRzQnlOYW1lIiwiZmlsdGVyIiwiYXR0cklkIiwiZ2V0QXR0cmlidXRlTm9kZSIsInRhZyIsImlubmVySFRNTCIsImlucHV0IiwibWF0Y2hlc1NlbGVjdG9yIiwibW96TWF0Y2hlc1NlbGVjdG9yIiwib01hdGNoZXNTZWxlY3RvciIsImRpc2Nvbm5lY3RlZE1hdGNoIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJhZG93biIsImJ1cCIsImNvbXBhcmUiLCJzb3J0RGV0YWNoZWQiLCJhdXAiLCJhcCIsImJwIiwiZXhwciIsImVsZW1lbnRzIiwic3BlY2lmaWVkIiwidW5pcXVlU29ydCIsImR1cGxpY2F0ZXMiLCJkZXRlY3REdXBsaWNhdGVzIiwic29ydFN0YWJsZSIsInRleHRDb250ZW50IiwiZmlyc3RDaGlsZCIsIm5vZGVWYWx1ZSIsInNlbGVjdG9ycyIsImNyZWF0ZVBzZXVkbyIsInJlbGF0aXZlIiwiZGlyIiwicHJlRmlsdGVyIiwiZXhjZXNzIiwidW5xdW90ZWQiLCJub2RlTmFtZVNlbGVjdG9yIiwicGF0dGVybiIsIm9wZXJhdG9yIiwiY2hlY2siLCJ3aGF0Iiwic2ltcGxlIiwiZm9yd2FyZCIsIm9mVHlwZSIsInhtbCIsInVuaXF1ZUNhY2hlIiwib3V0ZXJDYWNoZSIsIm5vZGVJbmRleCIsInVzZUNhY2hlIiwibGFzdENoaWxkIiwidW5pcXVlSUQiLCJwc2V1ZG8iLCJzZXRGaWx0ZXJzIiwiaWR4IiwibWF0Y2hlZCIsIm1hdGNoZXIiLCJ1bm1hdGNoZWQiLCJpbm5lclRleHQiLCJsYW5nIiwiZWxlbUxhbmciLCJhY3RpdmVFbGVtZW50IiwiaGFzRm9jdXMiLCJ0YWJJbmRleCIsImRpc2FibGVkIiwiY2hlY2tlZCIsInNlbGVjdGVkIiwic2VsZWN0ZWRJbmRleCIsInJhZGlvIiwiY2hlY2tib3giLCJmaWxlIiwicGFzc3dvcmQiLCJpbWFnZSIsInN1Ym1pdCIsInRva2VucyIsImFkZENvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwiY2hlY2tOb25FbGVtZW50cyIsImRvbmVOYW1lIiwib2xkQ2FjaGUiLCJuZXdDYWNoZSIsImVsZW1lbnRNYXRjaGVyIiwibWF0Y2hlcnMiLCJjb25kZW5zZSIsIm5ld1VubWF0Y2hlZCIsIm1hcHBlZCIsInNldE1hdGNoZXIiLCJwb3N0RmlsdGVyIiwicG9zdEZpbmRlciIsInBvc3RTZWxlY3RvciIsInRlbXAiLCJwcmVNYXAiLCJwb3N0TWFwIiwicHJlZXhpc3RpbmciLCJjb250ZXh0cyIsIm11bHRpcGxlQ29udGV4dHMiLCJtYXRjaGVySW4iLCJtYXRjaGVyT3V0IiwibWF0Y2hlckZyb21Ub2tlbnMiLCJjaGVja0NvbnRleHQiLCJsZWFkaW5nUmVsYXRpdmUiLCJpbXBsaWNpdFJlbGF0aXZlIiwibWF0Y2hDb250ZXh0IiwibWF0Y2hBbnlDb250ZXh0IiwiZmlsdGVycyIsInBhcnNlT25seSIsInNvRmFyIiwicHJlRmlsdGVycyIsImNhY2hlZCIsInNldE1hdGNoZXJzIiwiZWxlbWVudE1hdGNoZXJzIiwiYnlTZXQiLCJieUVsZW1lbnQiLCJzdXBlck1hdGNoZXIiLCJvdXRlcm1vc3QiLCJtYXRjaGVkQ291bnQiLCJzZXRNYXRjaGVkIiwiY29udGV4dEJhY2t1cCIsImRpcnJ1bnNVbmlxdWUiLCJtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMiLCJ0b2tlbiIsImNvbXBpbGVkIiwiZGl2MSIsImRlZmF1bHRWYWx1ZSIsInVuaXF1ZSIsImlzWE1MRG9jIiwidW50aWwiLCJ0cnVuY2F0ZSIsImlzIiwic2libGluZ3MiLCJuIiwicm5lZWRzQ29udGV4dCIsIm5lZWRzQ29udGV4dCIsInJzaW5nbGVUYWciLCJyaXNTaW1wbGUiLCJ3aW5ub3ciLCJxdWFsaWZpZXIiLCJub3QiLCJyb290alF1ZXJ5IiwicGFyc2VIVE1MIiwicmVhZHkiLCJycGFyZW50c3ByZXYiLCJndWFyYW50ZWVkVW5pcXVlIiwiY2hpbGRyZW4iLCJjb250ZW50cyIsIm5leHQiLCJzaWJsaW5nIiwidGFyZ2V0cyIsInBvcyIsInByZXZBbGwiLCJhZGRCYWNrIiwicGFyZW50cyIsInBhcmVudHNVbnRpbCIsIm5leHRBbGwiLCJuZXh0VW50aWwiLCJwcmV2VW50aWwiLCJjb250ZW50RG9jdW1lbnQiLCJyZXZlcnNlIiwicmVhZHlMaXN0Iiwicm5vdHdoaXRlIiwiY29tcGxldGVkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIkNhbGxiYWNrcyIsIm9iamVjdCIsImZsYWciLCJjcmVhdGVPcHRpb25zIiwiZmlyaW5nIiwibWVtb3J5IiwiZmlyZWQiLCJsb2NrZWQiLCJxdWV1ZSIsImZpcmluZ0luZGV4IiwiZmlyZSIsInN0b3BPbkZhbHNlIiwiZW1wdHkiLCJkaXNhYmxlIiwibG9jayIsImZpcmVXaXRoIiwiRGVmZXJyZWQiLCJmdW5jIiwidHVwbGVzIiwic3RhdGUiLCJwcm9taXNlIiwiYWx3YXlzIiwiZGVmZXJyZWQiLCJmYWlsIiwidGhlbiIsImZucyIsIm5ld0RlZmVyIiwidHVwbGUiLCJyZXR1cm5lZCIsInByb2dyZXNzIiwibm90aWZ5IiwicmVzb2x2ZSIsInJlamVjdCIsInBpcGUiLCJzdGF0ZVN0cmluZyIsIndoZW4iLCJzdWJvcmRpbmF0ZSIsInByb2dyZXNzVmFsdWVzIiwicHJvZ3Jlc3NDb250ZXh0cyIsInJlc29sdmVDb250ZXh0cyIsInJlc29sdmVWYWx1ZXMiLCJyZW1haW5pbmciLCJ1cGRhdGVGdW5jIiwidmFsdWVzIiwibm90aWZ5V2l0aCIsInJlc29sdmVXaXRoIiwicmVhZHlXYWl0IiwiaG9sZFJlYWR5IiwiaG9sZCIsInRyaWdnZXJIYW5kbGVyIiwicmVhZHlTdGF0ZSIsImRvU2Nyb2xsIiwic2V0VGltZW91dCIsImFjY2VzcyIsImNoYWluYWJsZSIsImVtcHR5R2V0IiwicmF3IiwiYnVsayIsImFjY2VwdERhdGEiLCJvd25lciIsIkRhdGEiLCJ1aWQiLCJyZWdpc3RlciIsImluaXRpYWwiLCJkZWZpbmVQcm9wZXJ0eSIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwicHJvcCIsInN0b3JlZCIsImNhbWVsIiwiaGFzRGF0YSIsImRhdGFQcml2IiwiZGF0YVVzZXIiLCJyYnJhY2UiLCJybXVsdGlEYXNoIiwiZGF0YUF0dHIiLCJwYXJzZUpTT04iLCJyZW1vdmVEYXRhIiwiX2RhdGEiLCJfcmVtb3ZlRGF0YSIsImNhbWVsS2V5IiwiZGVxdWV1ZSIsInN0YXJ0TGVuZ3RoIiwiaG9va3MiLCJfcXVldWVIb29rcyIsInNldHRlciIsImNsZWFyUXVldWUiLCJjb3VudCIsImRlZmVyIiwicG51bSIsInNvdXJjZSIsInJjc3NOdW0iLCJjc3NFeHBhbmQiLCJpc0hpZGRlbiIsImNzcyIsImFkanVzdENTUyIsInZhbHVlUGFydHMiLCJ0d2VlbiIsImFkanVzdGVkIiwic2NhbGUiLCJtYXhJdGVyYXRpb25zIiwiY3VycmVudFZhbHVlIiwidW5pdCIsImNzc051bWJlciIsImluaXRpYWxJblVuaXQiLCJzdHlsZSIsInJjaGVja2FibGVUeXBlIiwicnRhZ05hbWUiLCJyc2NyaXB0VHlwZSIsIndyYXBNYXAiLCJvcHRpb24iLCJ0aGVhZCIsImNvbCIsInRyIiwidGQiLCJfZGVmYXVsdCIsImdldEFsbCIsInNldEdsb2JhbEV2YWwiLCJyZWZFbGVtZW50cyIsIm9wdGdyb3VwIiwidGJvZHkiLCJ0Zm9vdCIsImNvbGdyb3VwIiwiY2FwdGlvbiIsInRoIiwicmh0bWwiLCJidWlsZEZyYWdtZW50Iiwic2NyaXB0cyIsInNlbGVjdGlvbiIsImlnbm9yZWQiLCJ3cmFwIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsIm5vZGVzIiwiaHRtbFByZWZpbHRlciIsImNyZWF0ZVRleHROb2RlIiwiY2hlY2tDbG9uZSIsImNsb25lTm9kZSIsIm5vQ2xvbmVDaGVja2VkIiwicmtleUV2ZW50Iiwicm1vdXNlRXZlbnQiLCJydHlwZW5hbWVzcGFjZSIsInJldHVyblRydWUiLCJyZXR1cm5GYWxzZSIsInNhZmVBY3RpdmVFbGVtZW50IiwiZXJyIiwidHlwZXMiLCJvbmUiLCJvcmlnRm4iLCJoYW5kbGVPYmpJbiIsImV2ZW50SGFuZGxlIiwidCIsImhhbmRsZU9iaiIsInNwZWNpYWwiLCJuYW1lc3BhY2VzIiwib3JpZ1R5cGUiLCJlbGVtRGF0YSIsImhhbmRsZSIsInRyaWdnZXJlZCIsImRpc3BhdGNoIiwiZGVsZWdhdGVUeXBlIiwiYmluZFR5cGUiLCJuYW1lc3BhY2UiLCJkZWxlZ2F0ZUNvdW50Iiwic2V0dXAiLCJtYXBwZWRUeXBlcyIsIm9yaWdDb3VudCIsInRlYXJkb3duIiwicmVtb3ZlRXZlbnQiLCJmaXgiLCJoYW5kbGVyUXVldWUiLCJkZWxlZ2F0ZVRhcmdldCIsInByZURpc3BhdGNoIiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJjdXJyZW50VGFyZ2V0IiwiaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQiLCJybmFtZXNwYWNlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJwb3N0RGlzcGF0Y2giLCJzZWwiLCJpc05hTiIsImJ1dHRvbiIsInByb3BzIiwiZml4SG9va3MiLCJrZXlIb29rcyIsIm9yaWdpbmFsIiwid2hpY2giLCJjaGFyQ29kZSIsImtleUNvZGUiLCJtb3VzZUhvb2tzIiwiZXZlbnREb2MiLCJib2R5IiwicGFnZVgiLCJjbGllbnRYIiwic2Nyb2xsTGVmdCIsImNsaWVudExlZnQiLCJwYWdlWSIsImNsaWVudFkiLCJzY3JvbGxUb3AiLCJjbGllbnRUb3AiLCJvcmlnaW5hbEV2ZW50IiwiZml4SG9vayIsIkV2ZW50IiwibG9hZCIsIm5vQnViYmxlIiwiZm9jdXMiLCJibHVyIiwiY2xpY2siLCJiZWZvcmV1bmxvYWQiLCJyZXR1cm5WYWx1ZSIsImlzRGVmYXVsdFByZXZlbnRlZCIsImRlZmF1bHRQcmV2ZW50ZWQiLCJ0aW1lU3RhbXAiLCJpc1NpbXVsYXRlZCIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwicG9pbnRlcmVudGVyIiwicG9pbnRlcmxlYXZlIiwib3JpZyIsInJlbGF0ZWQiLCJyZWxhdGVkVGFyZ2V0IiwicnhodG1sVGFnIiwicm5vSW5uZXJodG1sIiwicmNoZWNrZWQiLCJyc2NyaXB0VHlwZU1hc2tlZCIsInJjbGVhblNjcmlwdCIsIm1hbmlwdWxhdGlvblRhcmdldCIsImNvbnRlbnQiLCJkaXNhYmxlU2NyaXB0IiwicmVzdG9yZVNjcmlwdCIsImNsb25lQ29weUV2ZW50IiwiZGVzdCIsInBkYXRhT2xkIiwicGRhdGFDdXIiLCJ1ZGF0YU9sZCIsInVkYXRhQ3VyIiwiZG9tTWFuaXAiLCJoYXNTY3JpcHRzIiwiaU5vQ2xvbmUiLCJodG1sIiwiX2V2YWxVcmwiLCJrZWVwRGF0YSIsImNsZWFuRGF0YSIsImRhdGFBbmRFdmVudHMiLCJkZWVwRGF0YUFuZEV2ZW50cyIsInNyY0VsZW1lbnRzIiwiZGVzdEVsZW1lbnRzIiwiaW5QYWdlIiwiZGV0YWNoIiwiYXBwZW5kIiwicHJlcGVuZCIsImluc2VydEJlZm9yZSIsImJlZm9yZSIsImFmdGVyIiwicmVwbGFjZVdpdGgiLCJyZXBsYWNlQ2hpbGQiLCJwcmVwZW5kVG8iLCJpbnNlcnRBZnRlciIsInJlcGxhY2VBbGwiLCJpbnNlcnQiLCJlbGVtZGlzcGxheSIsIkhUTUwiLCJCT0RZIiwiYWN0dWFsRGlzcGxheSIsImRpc3BsYXkiLCJkZWZhdWx0RGlzcGxheSIsIndyaXRlIiwicm1hcmdpbiIsInJudW1ub25weCIsImdldFN0eWxlcyIsInZpZXciLCJvcGVuZXIiLCJnZXRDb21wdXRlZFN0eWxlIiwic3dhcCIsImN1ckNTUyIsImNvbXB1dGVkIiwid2lkdGgiLCJtaW5XaWR0aCIsIm1heFdpZHRoIiwiZ2V0UHJvcGVydHlWYWx1ZSIsInBpeGVsTWFyZ2luUmlnaHQiLCJhZGRHZXRIb29rSWYiLCJjb25kaXRpb25GbiIsImhvb2tGbiIsInBpeGVsUG9zaXRpb25WYWwiLCJib3hTaXppbmdSZWxpYWJsZVZhbCIsInBpeGVsTWFyZ2luUmlnaHRWYWwiLCJyZWxpYWJsZU1hcmdpbkxlZnRWYWwiLCJjb250YWluZXIiLCJjb21wdXRlU3R5bGVUZXN0cyIsImNzc1RleHQiLCJkaXZTdHlsZSIsIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCIsImJhY2tncm91bmRDbGlwIiwiY2xlYXJDbG9uZVN0eWxlIiwicGl4ZWxQb3NpdGlvbiIsImJveFNpemluZ1JlbGlhYmxlIiwicmVsaWFibGVNYXJnaW5MZWZ0IiwicmVsaWFibGVNYXJnaW5SaWdodCIsIm1hcmdpbkRpdiIsInJkaXNwbGF5c3dhcCIsImNzc1Nob3ciLCJwb3NpdGlvbiIsInZpc2liaWxpdHkiLCJjc3NOb3JtYWxUcmFuc2Zvcm0iLCJsZXR0ZXJTcGFjaW5nIiwiZm9udFdlaWdodCIsImNzc1ByZWZpeGVzIiwiZW1wdHlTdHlsZSIsInZlbmRvclByb3BOYW1lIiwiY2FwTmFtZSIsInNldFBvc2l0aXZlTnVtYmVyIiwic3VidHJhY3QiLCJtYXgiLCJhdWdtZW50V2lkdGhPckhlaWdodCIsImV4dHJhIiwiaXNCb3JkZXJCb3giLCJzdHlsZXMiLCJnZXRXaWR0aE9ySGVpZ2h0IiwidmFsdWVJc0JvcmRlckJveCIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0Iiwic2hvd0hpZGUiLCJzaG93IiwiaGlkZGVuIiwiVHdlZW4iLCJlYXNpbmciLCJjc3NIb29rcyIsIm9wYWNpdHkiLCJjc3NQcm9wcyIsIm9yaWdOYW1lIiwiaXNGaW5pdGUiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJsZWZ0IiwibWFyZ2luIiwicGFkZGluZyIsImJvcmRlciIsInByZWZpeCIsInN1ZmZpeCIsImV4cGFuZCIsImV4cGFuZGVkIiwicGFydHMiLCJ0b2dnbGUiLCJwcm9wSG9va3MiLCJydW4iLCJwZXJjZW50IiwiZWFzZWQiLCJkdXJhdGlvbiIsInN0ZXAiLCJmeCIsImxpbmVhciIsInAiLCJzd2luZyIsImNvcyIsIlBJIiwiZnhOb3ciLCJ0aW1lcklkIiwicmZ4dHlwZXMiLCJycnVuIiwiY3JlYXRlRnhOb3ciLCJnZW5GeCIsImluY2x1ZGVXaWR0aCIsImhlaWdodCIsImNyZWF0ZVR3ZWVuIiwiYW5pbWF0aW9uIiwiQW5pbWF0aW9uIiwidHdlZW5lcnMiLCJwcm9wZXJ0aWVzIiwic3RvcHBlZCIsInByZWZpbHRlcnMiLCJ0aWNrIiwiY3VycmVudFRpbWUiLCJzdGFydFRpbWUiLCJ0d2VlbnMiLCJvcHRzIiwic3BlY2lhbEVhc2luZyIsIm9yaWdpbmFsUHJvcGVydGllcyIsIm9yaWdpbmFsT3B0aW9ucyIsImdvdG9FbmQiLCJyZWplY3RXaXRoIiwicHJvcEZpbHRlciIsInRpbWVyIiwiYW5pbSIsImNvbXBsZXRlIiwidHdlZW5lciIsIm9sZGZpcmUiLCJkYXRhU2hvdyIsInVucXVldWVkIiwib3ZlcmZsb3ciLCJvdmVyZmxvd1giLCJvdmVyZmxvd1kiLCJwcmVmaWx0ZXIiLCJzcGVlZCIsIm9wdCIsInNwZWVkcyIsImZhZGVUbyIsInRvIiwiYW5pbWF0ZSIsIm9wdGFsbCIsImRvQW5pbWF0aW9uIiwiZmluaXNoIiwic3RvcFF1ZXVlIiwidGltZXJzIiwiY3NzRm4iLCJzbGlkZURvd24iLCJzbGlkZVVwIiwic2xpZGVUb2dnbGUiLCJmYWRlSW4iLCJmYWRlT3V0IiwiZmFkZVRvZ2dsZSIsInNsb3ciLCJmYXN0IiwiZGVsYXkiLCJ0aW1lIiwidGltZW91dCIsImNsZWFyVGltZW91dCIsImNoZWNrT24iLCJvcHRTZWxlY3RlZCIsIm9wdERpc2FibGVkIiwicmFkaW9WYWx1ZSIsImJvb2xIb29rIiwicmVtb3ZlQXR0ciIsIm5UeXBlIiwiYXR0ckhvb2tzIiwiYm9vbCIsInByb3BOYW1lIiwiYXR0ck5hbWVzIiwicHJvcEZpeCIsImdldHRlciIsInJmb2N1c2FibGUiLCJyY2xpY2thYmxlIiwicmVtb3ZlUHJvcCIsInRhYmluZGV4IiwicGFyc2VJbnQiLCJyY2xhc3MiLCJnZXRDbGFzcyIsImFkZENsYXNzIiwiY2xhc3NlcyIsImN1clZhbHVlIiwiY2xhenoiLCJmaW5hbFZhbHVlIiwicmVtb3ZlQ2xhc3MiLCJ0b2dnbGVDbGFzcyIsInN0YXRlVmFsIiwiY2xhc3NOYW1lcyIsImhhc0NsYXNzIiwicnJldHVybiIsInJzcGFjZXMiLCJ2YWxIb29rcyIsIm9wdGlvblNldCIsInJmb2N1c01vcnBoIiwib25seUhhbmRsZXJzIiwiYnViYmxlVHlwZSIsIm9udHlwZSIsImV2ZW50UGF0aCIsImlzVHJpZ2dlciIsInBhcmVudFdpbmRvdyIsInNpbXVsYXRlIiwiaG92ZXIiLCJmbk92ZXIiLCJmbk91dCIsImZvY3VzaW4iLCJhdHRhY2hlcyIsIm5vbmNlIiwicnF1ZXJ5IiwicGFyc2VYTUwiLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciLCJyaGFzaCIsInJ0cyIsInJoZWFkZXJzIiwicm5vQ29udGVudCIsInJwcm90b2NvbCIsInRyYW5zcG9ydHMiLCJhbGxUeXBlcyIsIm9yaWdpbkFuY2hvciIsImFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyIsInN0cnVjdHVyZSIsImRhdGFUeXBlRXhwcmVzc2lvbiIsImRhdGFUeXBlcyIsImluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzIiwianFYSFIiLCJpbnNwZWN0ZWQiLCJzZWVraW5nVHJhbnNwb3J0IiwiaW5zcGVjdCIsInByZWZpbHRlck9yRmFjdG9yeSIsImRhdGFUeXBlT3JUcmFuc3BvcnQiLCJhamF4RXh0ZW5kIiwiZmxhdE9wdGlvbnMiLCJhamF4U2V0dGluZ3MiLCJhY3RpdmUiLCJsYXN0TW9kaWZpZWQiLCJldGFnIiwiaXNMb2NhbCIsInByb3RvY29sIiwiYXN5bmMiLCJhY2NlcHRzIiwianNvbiIsInJlc3BvbnNlRmllbGRzIiwiY29udmVydGVycyIsImFqYXhTZXR1cCIsInNldHRpbmdzIiwiYWpheFByZWZpbHRlciIsImFqYXhUcmFuc3BvcnQiLCJ0cmFuc3BvcnQiLCJjYWNoZVVSTCIsInJlc3BvbnNlSGVhZGVyc1N0cmluZyIsInJlc3BvbnNlSGVhZGVycyIsInRpbWVvdXRUaW1lciIsInVybEFuY2hvciIsImZpcmVHbG9iYWxzIiwiY2FsbGJhY2tDb250ZXh0IiwiZ2xvYmFsRXZlbnRDb250ZXh0IiwiY29tcGxldGVEZWZlcnJlZCIsInN0YXR1c0NvZGUiLCJyZXF1ZXN0SGVhZGVycyIsInJlcXVlc3RIZWFkZXJzTmFtZXMiLCJzdHJBYm9ydCIsImdldFJlc3BvbnNlSGVhZGVyIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwibG5hbWUiLCJvdmVycmlkZU1pbWVUeXBlIiwibWltZVR5cGUiLCJzdGF0dXMiLCJhYm9ydCIsInN0YXR1c1RleHQiLCJmaW5hbFRleHQiLCJjcm9zc0RvbWFpbiIsImhvc3QiLCJ0cmFkaXRpb25hbCIsImhhc0NvbnRlbnQiLCJpZk1vZGlmaWVkIiwiaGVhZGVycyIsInNlbmQiLCJuYXRpdmVTdGF0dXNUZXh0IiwicmVzcG9uc2VzIiwiaXNTdWNjZXNzIiwicmVzcG9uc2UiLCJtb2RpZmllZCIsImN0IiwiZmluYWxEYXRhVHlwZSIsImZpcnN0RGF0YVR5cGUiLCJhamF4SGFuZGxlUmVzcG9uc2VzIiwiY29udjIiLCJjb252IiwiZGF0YUZpbHRlciIsInRocm93cyIsImFqYXhDb252ZXJ0IiwiZ2V0SlNPTiIsImdldFNjcmlwdCIsIndyYXBBbGwiLCJmaXJzdEVsZW1lbnRDaGlsZCIsIndyYXBJbm5lciIsInVud3JhcCIsInZpc2libGUiLCJnZXRDbGllbnRSZWN0cyIsInIyMCIsInJicmFja2V0IiwickNSTEYiLCJyc3VibWl0dGVyVHlwZXMiLCJyc3VibWl0dGFibGUiLCJidWlsZFBhcmFtcyIsInYiLCJzZXJpYWxpemUiLCJzZXJpYWxpemVBcnJheSIsIlhNTEh0dHBSZXF1ZXN0IiwieGhyU3VjY2Vzc1N0YXR1cyIsIjAiLCIxMjIzIiwieGhyU3VwcG9ydGVkIiwiY29ycyIsImVycm9yQ2FsbGJhY2siLCJ1c2VybmFtZSIsInhockZpZWxkcyIsIm9ubG9hZCIsIm9uZXJyb3IiLCJvbmFib3J0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VUZXh0IiwiYmluYXJ5IiwiY2hhcnNldCIsInNjcmlwdENoYXJzZXQiLCJldnQiLCJvbGRDYWxsYmFja3MiLCJyanNvbnAiLCJqc29ucCIsImpzb25wQ2FsbGJhY2siLCJvcmlnaW5hbFNldHRpbmdzIiwiY2FsbGJhY2tOYW1lIiwib3ZlcndyaXR0ZW4iLCJyZXNwb25zZUNvbnRhaW5lciIsImpzb25Qcm9wIiwia2VlcFNjcmlwdHMiLCJwYXJzZWQiLCJfbG9hZCIsImdldFdpbmRvdyIsImFuaW1hdGVkIiwib2Zmc2V0Iiwic2V0T2Zmc2V0IiwiY3VyUG9zaXRpb24iLCJjdXJMZWZ0IiwiY3VyQ1NTVG9wIiwiY3VyVG9wIiwiY3VyT2Zmc2V0IiwiY3VyQ1NTTGVmdCIsImN1ckVsZW0iLCJ1c2luZyIsIndpbiIsImJveCIsInBhZ2VZT2Zmc2V0IiwicGFnZVhPZmZzZXQiLCJvZmZzZXRQYXJlbnQiLCJwYXJlbnRPZmZzZXQiLCJzY3JvbGxUbyIsIkhlaWdodCIsIldpZHRoIiwiZGVmYXVsdEV4dHJhIiwiZnVuY05hbWUiLCJ1bmRlbGVnYXRlIiwic2l6ZSIsImFuZFNlbGYiLCJfalF1ZXJ5IiwiXyQiLCJtb2R1bGUiLCJ3IiwicHJldmlvdXNVbmRlcnNjb3JlIiwiYnJlYWtlciIsIkFycmF5UHJvdG8iLCJPYmpQcm90byIsIkZ1bmNQcm90byIsIkZ1bmN0aW9uIiwibmF0aXZlRm9yRWFjaCIsImZvckVhY2giLCJuYXRpdmVNYXAiLCJuYXRpdmVSZWR1Y2UiLCJyZWR1Y2UiLCJuYXRpdmVSZWR1Y2VSaWdodCIsInJlZHVjZVJpZ2h0IiwibmF0aXZlRmlsdGVyIiwibmF0aXZlRXZlcnkiLCJldmVyeSIsIm5hdGl2ZVNvbWUiLCJzb21lIiwibmF0aXZlSW5kZXhPZiIsIm5hdGl2ZUxhc3RJbmRleE9mIiwibGFzdEluZGV4T2YiLCJuYXRpdmVJc0FycmF5IiwibmF0aXZlS2V5cyIsIm5hdGl2ZUJpbmQiLCJfd3JhcHBlZCIsImNvbGxlY3QiLCJyZWR1Y2VFcnJvciIsImZvbGRsIiwiaW5qZWN0IiwibWVtbyIsIlR5cGVFcnJvciIsImZvbGRyIiwiZGV0ZWN0IiwiaWRlbnRpdHkiLCJpbmNsdWRlIiwiaXNGdW5jIiwiSW5maW5pdHkiLCJtaW4iLCJzaHVmZmxlIiwicmFuZCIsInNodWZmbGVkIiwibG9va3VwSXRlcmF0b3IiLCJjcml0ZXJpYSIsInJpZ2h0IiwiZ3JvdXAiLCJiZWhhdmlvciIsImdyb3VwQnkiLCJjb3VudEJ5IiwibG93IiwibWlkIiwidGFrZSIsImd1YXJkIiwidGFpbCIsImRyb3AiLCJjb21wYWN0IiwiZmxhdHRlbiIsInNoYWxsb3ciLCJvdXRwdXQiLCJpc0FyZ3VtZW50cyIsIndpdGhvdXQiLCJkaWZmZXJlbmNlIiwidW5pcSIsImlzU29ydGVkIiwic2VlbiIsInVuaW9uIiwiaW50ZXJzZWN0aW9uIiwiaXRlbSIsIm90aGVyIiwiemlwIiwiZnJvbSIsImhhc0luZGV4IiwicmFuZ2UiLCJjZWlsIiwiY3RvciIsImJvdW5kIiwicGFydGlhbCIsImZ1bmNzIiwiZiIsIm1lbW9pemUiLCJoYXNoZXIiLCJ0aHJvdHRsZSIsImxhdGVyIiwibGVhZGluZyIsInRyYWlsaW5nIiwiZGVib3VuY2UiLCJpbW1lZGlhdGUiLCJjYWxsTm93IiwicmFuIiwid3JhcHBlciIsImNvbXBvc2UiLCJ0aW1lcyIsInBhaXJzIiwiZnVuY3Rpb25zIiwibWV0aG9kcyIsIm9taXQiLCJ0YXAiLCJpbnRlcmNlcHRvciIsImFTdGFjayIsImJTdGFjayIsIm11bHRpbGluZSIsImlnbm9yZUNhc2UiLCJhQ3RvciIsImJDdG9yIiwiaXNFbGVtZW50IiwiaXNOdW1iZXIiLCJpc0Jvb2xlYW4iLCJpc051bGwiLCJpc1VuZGVmaW5lZCIsImFjY3VtIiwiZmxvb3IiLCJlbnRpdHlNYXAiLCJ1bmVzY2FwZSIsImVudGl0eVJlZ2V4ZXMiLCJwcm9wZXJ0eSIsIm1peGluIiwiaWRDb3VudGVyIiwidGVtcGxhdGVTZXR0aW5ncyIsImV2YWx1YXRlIiwiaW50ZXJwb2xhdGUiLCJub01hdGNoIiwiZXNjYXBlcyIsImVzY2FwZXIiLCJ0ZW1wbGF0ZSIs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QUUwRSxVQUFVbkUsR0FBUSxXQUNsQixJQUFJNkIsRUFBTTVDLEtBQUtveEMsU0FHZixPQUZBcHRDLEVBQU94QyxNQUFNb0IsRUFBS25CLFdBQ0wsU0FBUlYsR0FBMkIsVUFBUkEsR0FBb0MsSUFBZjZCLEVBQUlSLGVBQXFCUSxFQUFJLEdBQ25Fa0MsRUFBT3ZDLEtBQUt2QyxLQUFNNEMsT0FLN0JnQixFQUFLLENBQUMsU0FBVSxPQUFRLFVBQVUsU0FBUzdDLEdBQ3pDLElBQUlpRCxFQUFTOHJDLEVBQVcvdUMsR0FDeEJQLEVBQUUwRSxVQUFVbkUsR0FBUSxXQUNsQixPQUFPK0QsRUFBT3ZDLEtBQUt2QyxLQUFNZ0UsRUFBT3hDLE1BQU14QixLQUFLb3hDLFNBQVUzdkMsZ0JBSXpEakIsRUFBRTRELE9BQU81RCxFQUFFMEUsVUFBVyxDQUdwQnN5QyxNQUFPLFdBRUwsT0FEQXgzQyxLQUFLeTNDLFFBQVMsRUFDUHozQyxNQUlUOEssTUFBTyxXQUNMLE9BQU85SyxLQUFLb3hDLGNBS2Y3dUMsS0FBS3ZDIiwiZmlsZSI6IjEuYnVuZGxlLjYuMjQuMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe3ZhciByb290PXRoaXM7dmFyIHByZXZpb3VzQmFja2JvbmU9cm9vdC5CYWNrYm9uZTt2YXIgYXJyYXk9W107dmFyIHB1c2g9YXJyYXkucHVzaDt2YXIgc2xpY2U9YXJyYXkuc2xpY2U7dmFyIHNwbGljZT1hcnJheS5zcGxpY2U7dmFyIEJhY2tib25lO2lmKHR5cGVvZiBleHBvcnRzIT09XCJ1bmRlZmluZWRcIil7QmFja2JvbmU9ZXhwb3J0c31lbHNle0JhY2tib25lPXJvb3QuQmFja2JvbmU9e319QmFja2JvbmUuVkVSU0lPTj1cIjEuMC4wXCI7dmFyIF89cm9vdC5fO2lmKCFfJiZ0eXBlb2YgcmVxdWlyZSE9PVwidW5kZWZpbmVkXCIpXz1yZXF1aXJlKFwidW5kZXJzY29yZVwiKTtCYWNrYm9uZS4kPXJlcXVpcmUoXCJqcXVlcnlcIik7QmFja2JvbmUubm9Db25mbGljdD1mdW5jdGlvbigpe3Jvb3QuQmFja2JvbmU9cHJldmlvdXNCYWNrYm9uZTtyZXR1cm4gdGhpc307QmFja2JvbmUuZW11bGF0ZUhUVFA9ZmFsc2U7QmFja2JvbmUuZW11bGF0ZUpTT049ZmFsc2U7dmFyIEV2ZW50cz1CYWNrYm9uZS5FdmVudHM9e29uOmZ1bmN0aW9uKG5hbWUsY2FsbGJhY2ssY29udGV4dCl7aWYoIWV2ZW50c0FwaSh0aGlzLFwib25cIixuYW1lLFtjYWxsYmFjayxjb250ZXh0XSl8fCFjYWxsYmFjaylyZXR1cm4gdGhpczt0aGlzLl9ldmVudHN8fCh0aGlzLl9ldmVudHM9e30pO3ZhciBldmVudHM9dGhpcy5fZXZlbnRzW25hbWVdfHwodGhpcy5fZXZlbnRzW25hbWVdPVtdKTtldmVudHMucHVzaCh7Y2FsbGJhY2s6Y2FsbGJhY2ssY29udGV4dDpjb250ZXh0LGN0eDpjb250ZXh0fHx0aGlzfSk7cmV0dXJuIHRoaXN9LG9uY2U6ZnVuY3Rpb24obmFtZSxjYWxsYmFjayxjb250ZXh0KXtpZighZXZlbnRzQXBpKHRoaXMsXCJvbmNlXCIsbmFtZSxbY2FsbGJhY2ssY29udGV4dF0pfHwhY2FsbGJhY2spcmV0dXJuIHRoaXM7dmFyIHNlbGY9dGhpczt2YXIgb25jZT1fLm9uY2UoZnVuY3Rpb24oKXtzZWxmLm9mZihuYW1lLG9uY2UpO2NhbGxiYWNrLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pO29uY2UuX2NhbGxiYWNrPWNhbGxiYWNrO3JldHVybiB0aGlzLm9uKG5hbWUsb25jZSxjb250ZXh0KX0sb2ZmOmZ1bmN0aW9uKG5hbWUsY2FsbGJhY2ssY29udGV4dCl7dmFyIHJldGFpbixldixldmVudHMsbmFtZXMsaSxsLGosaztpZighdGhpcy5fZXZlbnRzfHwhZXZlbnRzQXBpKHRoaXMsXCJvZmZcIixuYW1lLFtjYWxsYmFjayxjb250ZXh0XSkpcmV0dXJuIHRoaXM7aWYoIW5hbWUmJiFjYWxsYmFjayYmIWNvbnRleHQpe3RoaXMuX2V2ZW50cz17fTtyZXR1cm4gdGhpc31uYW1lcz1uYW1lP1tuYW1lXTpfLmtleXModGhpcy5fZXZlbnRzKTtmb3IoaT0wLGw9bmFtZXMubGVuZ3RoO2k8bDtpKyspe25hbWU9bmFtZXNbaV07aWYoZXZlbnRzPXRoaXMuX2V2ZW50c1tuYW1lXSl7dGhpcy5fZXZlbnRzW25hbWVdPXJldGFpbj1bXTtpZihjYWxsYmFja3x8Y29udGV4dCl7Zm9yKGo9MCxrPWV2ZW50cy5sZW5ndGg7ajxrO2orKyl7ZXY9ZXZlbnRzW2pdO2lmKGNhbGxiYWNrJiZjYWxsYmFjayE9PWV2LmNhbGxiYWNrJiZjYWxsYmFjayE9PWV2LmNhbGxiYWNrLl9jYWxsYmFja3x8Y29udGV4dCYmY29udGV4dCE9PWV2LmNvbnRleHQpe3JldGFpbi5wdXNoKGV2KX19fWlmKCFyZXRhaW4ubGVuZ3RoKWRlbGV0ZSB0aGlzLl9ldmVudHNbbmFtZV19fXJldHVybiB0aGlzfSx0cmlnZ2VyOmZ1bmN0aW9uKG5hbWUpe2lmKCF0aGlzLl9ldmVudHMpcmV0dXJuIHRoaXM7dmFyIGFyZ3M9c2xpY2UuY2FsbChhcmd1bWVudHMsMSk7aWYoIWV2ZW50c0FwaSh0aGlzLFwidHJpZ2dlclwiLG5hbWUsYXJncykpcmV0dXJuIHRoaXM7dmFyIGV2ZW50cz10aGlzLl9ldmVudHNbbmFtZV07dmFyIGFsbEV2ZW50cz10aGlzLl9ldmVudHMuYWxsO2lmKGV2ZW50cyl0cmlnZ2VyRXZlbnRzKGV2ZW50cyxhcmdzKTtpZihhbGxFdmVudHMpdHJpZ2dlckV2ZW50cyhhbGxFdmVudHMsYXJndW1lbnRzKTtyZXR1cm4gdGhpc30sc3RvcExpc3RlbmluZzpmdW5jdGlvbihvYmosbmFtZSxjYWxsYmFjayl7dmFyIGxpc3RlbmVycz10aGlzLl9saXN0ZW5lcnM7aWYoIWxpc3RlbmVycylyZXR1cm4gdGhpczt2YXIgZGVsZXRlTGlzdGVuZXI9IW5hbWUmJiFjYWxsYmFjaztpZih0eXBlb2YgbmFtZT09PVwib2JqZWN0XCIpY2FsbGJhY2s9dGhpcztpZihvYmopKGxpc3RlbmVycz17fSlbb2JqLl9saXN0ZW5lcklkXT1vYmo7Zm9yKHZhciBpZCBpbiBsaXN0ZW5lcnMpe2xpc3RlbmVyc1tpZF0ub2ZmKG5hbWUsY2FsbGJhY2ssdGhpcyk7aWYoZGVsZXRlTGlzdGVuZXIpZGVsZXRlIHRoaXMuX2xpc3RlbmVyc1tpZF19cmV0dXJuIHRoaXN9fTt2YXIgZXZlbnRTcGxpdHRlcj0vXFxzKy87dmFyIGV2ZW50c0FwaT1mdW5jdGlvbihvYmosYWN0aW9uLG5hbWUscmVzdCl7aWYoIW5hbWUpcmV0dXJuIHRydWU7aWYodHlwZW9mIG5hbWU9PT1cIm9iamVjdFwiKXtmb3IodmFyIGtleSBpbiBuYW1lKXtvYmpbYWN0aW9uXS5hcHBseShvYmosW2tleSxuYW1lW2tleV1dLmNvbmNhdChyZXN0KSl9cmV0dXJuIGZhbHNlfWlmKGV2ZW50U3BsaXR0ZXIudGVzdChuYW1lKSl7dmFyIG5hbWVzPW5hbWUuc3BsaXQoZXZlbnRTcGxpdHRlcik7Zm9yKHZhciBpPTAsbD1uYW1lcy5sZW5ndGg7aTxsO2krKyl7b2JqW2FjdGlvbl0uYXBwbHkob2JqLFtuYW1lc1tpXV0uY29uY2F0KHJlc3QpKX1yZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9O3ZhciB0cmlnZ2VyRXZlbnRzPWZ1bmN0aW9uKGV2ZW50cyxhcmdzKXt2YXIgZXYsaT0tMSxsPWV2ZW50cy5sZW5ndGgsYTE9YXJnc1swXSxhMj1hcmdzWzFdLGEzPWFyZ3NbMl07c3dpdGNoKGFyZ3MubGVuZ3RoKXtjYXNlIDA6d2hpbGUoKytpPGwpKGV2PWV2ZW50c1tpXSkuY2FsbGJhY2suY2FsbChldi5jdHgpO3JldHVybjtjYXNlIDE6d2hpbGUoKytpPGwpKGV2PWV2ZW50c1tpXSkuY2FsbGJhY2suY2FsbChldi5jdHgsYTEpO3JldHVybjtjYXNlIDI6d2hpbGUoKytpPGwpKGV2PWV2ZW50c1tpXSkuY2FsbGJhY2suY2FsbChldi5jdHgsYTEsYTIpO3JldHVybjtjYXNlIDM6d2hpbGUoKytpPGwpKGV2PWV2ZW50c1tpXSkuY2FsbGJhY2suY2FsbChldi5jdHgsYTEsYTIsYTMpO3JldHVybjtkZWZhdWx0OndoaWxlKCsraTxsKShldj1ldmVudHNbaV0pLmNhbGxiYWNrLmFwcGx5KGV2LmN0eCxhcmdzKX19O3ZhciBsaXN0ZW5NZXRob2RzPXtsaXN0ZW5UbzpcIm9uXCIsbGlzdGVuVG9PbmNlOlwib25jZVwifTtfLmVhY2gobGlzdGVuTWV0aG9kcyxmdW5jdGlvbihpbXBsZW1lbnRhdGlvbixtZXRob2Qpe0V2ZW50c1ttZXRob2RdPWZ1bmN0aW9uKG9iaixuYW1lLGNhbGxiYWNrKXt2YXIgbGlzdGVuZXJzPXRoaXMuX2xpc3RlbmVyc3x8KHRoaXMuX2xpc3RlbmVycz17fSk7dmFyIGlkPW9iai5fbGlzdGVuZXJJZHx8KG9iai5fbGlzdGVuZXJJZD1fLnVuaXF1ZUlkKFwibFwiKSk7bGlzdGVuZXJzW2lkXT1vYmo7aWYodHlwZW9mIG5hbWU9PT1cIm9iamVjdFwiKWNhbGxiYWNrPXRoaXM7b2JqW2ltcGxlbWVudGF0aW9uXShuYW1lLGNhbGxiYWNrLHRoaXMpO3JldHVybiB0aGlzfX0pO0V2ZW50cy5iaW5kPUV2ZW50cy5vbjtFdmVudHMudW5iaW5kPUV2ZW50cy5vZmY7Xy5leHRlbmQoQmFja2JvbmUsRXZlbnRzKTt2YXIgTW9kZWw9QmFja2JvbmUuTW9kZWw9ZnVuY3Rpb24oYXR0cmlidXRlcyxvcHRpb25zKXt2YXIgZGVmYXVsdHM7dmFyIGF0dHJzPWF0dHJpYnV0ZXN8fHt9O29wdGlvbnN8fChvcHRpb25zPXt9KTt0aGlzLmNpZD1fLnVuaXF1ZUlkKFwiY1wiKTt0aGlzLmF0dHJpYnV0ZXM9e307Xy5leHRlbmQodGhpcyxfLnBpY2sob3B0aW9ucyxtb2RlbE9wdGlvbnMpKTtpZihvcHRpb25zLnBhcnNlKWF0dHJzPXRoaXMucGFyc2UoYXR0cnMsb3B0aW9ucyl8fHt9O2lmKGRlZmF1bHRzPV8ucmVzdWx0KHRoaXMsXCJkZWZhdWx0c1wiKSl7YXR0cnM9Xy5kZWZhdWx0cyh7fSxhdHRycyxkZWZhdWx0cyl9dGhpcy5zZXQoYXR0cnMsb3B0aW9ucyk7dGhpcy5jaGFuZ2VkPXt9O3RoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3ZhciBtb2RlbE9wdGlvbnM9W1widXJsXCIsXCJ1cmxSb290XCIsXCJjb2xsZWN0aW9uXCJdO18uZXh0ZW5kKE1vZGVsLnByb3RvdHlwZSxFdmVudHMse2NoYW5nZWQ6bnVsbCx2YWxpZGF0aW9uRXJyb3I6bnVsbCxpZEF0dHJpYnV0ZTpcImlkXCIsaW5pdGlhbGl6ZTpmdW5jdGlvbigpe30sdG9KU09OOmZ1bmN0aW9uKG9wdGlvbnMpe3JldHVybiBfLmNsb25lKHRoaXMuYXR0cmlidXRlcyl9LHN5bmM6ZnVuY3Rpb24oKXtyZXR1cm4gQmFja2JvbmUuc3luYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGdldDpmdW5jdGlvbihhdHRyKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW2F0dHJdfSxlc2NhcGU6ZnVuY3Rpb24oYXR0cil7cmV0dXJuIF8uZXNjYXBlKHRoaXMuZ2V0KGF0dHIpKX0saGFzOmZ1bmN0aW9uKGF0dHIpe3JldHVybiB0aGlzLmdldChhdHRyKSE9bnVsbH0sc2V0OmZ1bmN0aW9uKGtleSx2YWwsb3B0aW9ucyl7dmFyIGF0dHIsYXR0cnMsdW5zZXQsY2hhbmdlcyxzaWxlbnQsY2hhbmdpbmcscHJldixjdXJyZW50O2lmKGtleT09bnVsbClyZXR1cm4gdGhpcztpZih0eXBlb2Yga2V5PT09XCJvYmplY3RcIil7YXR0cnM9a2V5O29wdGlvbnM9dmFsfWVsc2V7KGF0dHJzPXt9KVtrZXldPXZhbH1vcHRpb25zfHwob3B0aW9ucz17fSk7aWYoIXRoaXMuX3ZhbGlkYXRlKGF0dHJzLG9wdGlvbnMpKXJldHVybiBmYWxzZTt1bnNldD1vcHRpb25zLnVuc2V0O3NpbGVudD1vcHRpb25zLnNpbGVudDtjaGFuZ2VzPVtdO2NoYW5naW5nPXRoaXMuX2NoYW5naW5nO3RoaXMuX2NoYW5naW5nPXRydWU7aWYoIWNoYW5naW5nKXt0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXM9Xy5jbG9uZSh0aGlzLmF0dHJpYnV0ZXMpO3RoaXMuY2hhbmdlZD17fX1jdXJyZW50PXRoaXMuYXR0cmlidXRlcyxwcmV2PXRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcztpZih0aGlzLmlkQXR0cmlidXRlIGluIGF0dHJzKXRoaXMuaWQ9YXR0cnNbdGhpcy5pZEF0dHJpYnV0ZV07Zm9yKGF0dHIgaW4gYXR0cnMpe3ZhbD1hdHRyc1thdHRyXTtpZighXy5pc0VxdWFsKGN1cnJlbnRbYXR0cl0sdmFsKSljaGFuZ2VzLnB1c2goYXR0cik7aWYoIV8uaXNFcXVhbChwcmV2W2F0dHJdLHZhbCkpe3RoaXMuY2hhbmdlZFthdHRyXT12YWx9ZWxzZXtkZWxldGUgdGhpcy5jaGFuZ2VkW2F0dHJdfXVuc2V0P2RlbGV0ZSBjdXJyZW50W2F0dHJdOmN1cnJlbnRbYXR0cl09dmFsfWlmKCFzaWxlbnQpe2lmKGNoYW5nZXMubGVuZ3RoKXRoaXMuX3BlbmRpbmc9dHJ1ZTtmb3IodmFyIGk9MCxsPWNoYW5nZXMubGVuZ3RoO2k8bDtpKyspe3RoaXMudHJpZ2dlcihcImNoYW5nZTpcIitjaGFuZ2VzW2ldLHRoaXMsY3VycmVudFtjaGFuZ2VzW2ldXSxvcHRpb25zKX19aWYoY2hhbmdpbmcpcmV0dXJuIHRoaXM7aWYoIXNpbGVudCl7d2hpbGUodGhpcy5fcGVuZGluZyl7dGhpcy5fcGVuZGluZz1mYWxzZTt0aGlzLnRyaWdnZXIoXCJjaGFuZ2VcIix0aGlzLG9wdGlvbnMpfX10aGlzLl9wZW5kaW5nPWZhbHNlO3RoaXMuX2NoYW5naW5nPWZhbHNlO3JldHVybiB0aGlzfSx1bnNldDpmdW5jdGlvbihhdHRyLG9wdGlvbnMpe3JldHVybiB0aGlzLnNldChhdHRyLHZvaWQgMCxfLmV4dGVuZCh7fSxvcHRpb25zLHt1bnNldDp0cnVlfSkpfSxjbGVhcjpmdW5jdGlvbihvcHRpb25zKXt2YXIgYXR0cnM9e307Zm9yKHZhciBrZXkgaW4gdGhpcy5hdHRyaWJ1dGVzKWF0dHJzW2tleV09dm9pZCAwO3JldHVybiB0aGlzLnNldChhdHRycyxfLmV4dGVuZCh7fSxvcHRpb25zLHt1bnNldDp0cnVlfSkpfSxoYXNDaGFuZ2VkOmZ1bmN0aW9uKGF0dHIpe2lmKGF0dHI9PW51bGwpcmV0dXJuIV8uaXNFbXB0eSh0aGlzLmNoYW5nZWQpO3JldHVybiBfLmhhcyh0aGlzLmNoYW5nZWQsYXR0cil9LGNoYW5nZWRBdHRyaWJ1dGVzOmZ1bmN0aW9uKGRpZmYpe2lmKCFkaWZmKXJldHVybiB0aGlzLmhhc0NoYW5nZWQoKT9fLmNsb25lKHRoaXMuY2hhbmdlZCk6ZmFsc2U7dmFyIHZhbCxjaGFuZ2VkPWZhbHNlO3ZhciBvbGQ9dGhpcy5fY2hhbmdpbmc/dGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVzOnRoaXMuYXR0cmlidXRlcztmb3IodmFyIGF0dHIgaW4gZGlmZil7aWYoXy5pc0VxdWFsKG9sZFthdHRyXSx2YWw9ZGlmZlthdHRyXSkpY29udGludWU7KGNoYW5nZWR8fChjaGFuZ2VkPXt9KSlbYXR0cl09dmFsfXJldHVybiBjaGFuZ2VkfSxwcmV2aW91czpmdW5jdGlvbihhdHRyKXtpZihhdHRyPT1udWxsfHwhdGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVzKXJldHVybiBudWxsO3JldHVybiB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXNbYXR0cl19LHByZXZpb3VzQXR0cmlidXRlczpmdW5jdGlvbigpe3JldHVybiBfLmNsb25lKHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyl9LGZldGNoOmZ1bmN0aW9uKG9wdGlvbnMpe29wdGlvbnM9b3B0aW9ucz9fLmNsb25lKG9wdGlvbnMpOnt9O2lmKG9wdGlvbnMucGFyc2U9PT12b2lkIDApb3B0aW9ucy5wYXJzZT10cnVlO3ZhciBtb2RlbD10aGlzO3ZhciBzdWNjZXNzPW9wdGlvbnMuc3VjY2VzcztvcHRpb25zLnN1Y2Nlc3M9ZnVuY3Rpb24ocmVzcCl7aWYoIW1vZGVsLnNldChtb2RlbC5wYXJzZShyZXNwLG9wdGlvbnMpLG9wdGlvbnMpKXJldHVybiBmYWxzZTtpZihzdWNjZXNzKXN1Y2Nlc3MobW9kZWwscmVzcCxvcHRpb25zKTttb2RlbC50cmlnZ2VyKFwic3luY1wiLG1vZGVsLHJlc3Asb3B0aW9ucyl9O3dyYXBFcnJvcih0aGlzLG9wdGlvbnMpO3JldHVybiB0aGlzLnN5bmMoXCJyZWFkXCIsdGhpcyxvcHRpb25zKX0sc2F2ZTpmdW5jdGlvbihrZXksdmFsLG9wdGlvbnMpe3ZhciBhdHRycyxtZXRob2QseGhyLGF0dHJpYnV0ZXM9dGhpcy5hdHRyaWJ1dGVzO2lmKGtleT09bnVsbHx8dHlwZW9mIGtleT09PVwib2JqZWN0XCIpe2F0dHJzPWtleTtvcHRpb25zPXZhbH1lbHNleyhhdHRycz17fSlba2V5XT12YWx9aWYoYXR0cnMmJighb3B0aW9uc3x8IW9wdGlvbnMud2FpdCkmJiF0aGlzLnNldChhdHRycyxvcHRpb25zKSlyZXR1cm4gZmFsc2U7b3B0aW9ucz1fLmV4dGVuZCh7dmFsaWRhdGU6dHJ1ZX0sb3B0aW9ucyk7aWYoIXRoaXMuX3ZhbGlkYXRlKGF0dHJzLG9wdGlvbnMpKXJldHVybiBmYWxzZTtpZihhdHRycyYmb3B0aW9ucy53YWl0KXt0aGlzLmF0dHJpYnV0ZXM9Xy5leHRlbmQoe30sYXR0cmlidXRlcyxhdHRycyl9aWYob3B0aW9ucy5wYXJzZT09PXZvaWQgMClvcHRpb25zLnBhcnNlPXRydWU7dmFyIG1vZGVsPXRoaXM7dmFyIHN1Y2Nlc3M9b3B0aW9ucy5zdWNjZXNzO29wdGlvbnMuc3VjY2Vzcz1mdW5jdGlvbihyZXNwKXttb2RlbC5hdHRyaWJ1dGVzPWF0dHJpYnV0ZXM7dmFyIHNlcnZlckF0dHJzPW1vZGVsLnBhcnNlKHJlc3Asb3B0aW9ucyk7aWYob3B0aW9ucy53YWl0KXNlcnZlckF0dHJzPV8uZXh0ZW5kKGF0dHJzfHx7fSxzZXJ2ZXJBdHRycyk7aWYoXy5pc09iamVjdChzZXJ2ZXJBdHRycykmJiFtb2RlbC5zZXQoc2VydmVyQXR0cnMsb3B0aW9ucykpe3JldHVybiBmYWxzZX1pZihzdWNjZXNzKXN1Y2Nlc3MobW9kZWwscmVzcCxvcHRpb25zKTttb2RlbC50cmlnZ2VyKFwic3luY1wiLG1vZGVsLHJlc3Asb3B0aW9ucyl9O3dyYXBFcnJvcih0aGlzLG9wdGlvbnMpO21ldGhvZD10aGlzLmlzTmV3KCk/XCJjcmVhdGVcIjpvcHRpb25zLnBhdGNoP1wicGF0Y2hcIjpcInVwZGF0ZVwiO2lmKG1ldGhvZD09PVwicGF0Y2hcIilvcHRpb25zLmF0dHJzPWF0dHJzO3hocj10aGlzLnN5bmMobWV0aG9kLHRoaXMsb3B0aW9ucyk7aWYoYXR0cnMmJm9wdGlvbnMud2FpdCl0aGlzLmF0dHJpYnV0ZXM9YXR0cmlidXRlcztyZXR1cm4geGhyfSxkZXN0cm95OmZ1bmN0aW9uKG9wdGlvbnMpe29wdGlvbnM9b3B0aW9ucz9fLmNsb25lKG9wdGlvbnMpOnt9O3ZhciBtb2RlbD10aGlzO3ZhciBzdWNjZXNzPW9wdGlvbnMuc3VjY2Vzczt2YXIgZGVzdHJveT1mdW5jdGlvbigpe21vZGVsLnRyaWdnZXIoXCJkZXN0cm95XCIsbW9kZWwsbW9kZWwuY29sbGVjdGlvbixvcHRpb25zKX07b3B0aW9ucy5zdWNjZXNzPWZ1bmN0aW9uKHJlc3Ape2lmKG9wdGlvbnMud2FpdHx8bW9kZWwuaXNOZXcoKSlkZXN0cm95KCk7aWYoc3VjY2VzcylzdWNjZXNzKG1vZGVsLHJlc3Asb3B0aW9ucyk7aWYoIW1vZGVsLmlzTmV3KCkpbW9kZWwudHJpZ2dlcihcInN5bmNcIixtb2RlbCxyZXNwLG9wdGlvbnMpfTtpZih0aGlzLmlzTmV3KCkpe29wdGlvbnMuc3VjY2VzcygpO3JldHVybiBmYWxzZX13cmFwRXJyb3IodGhpcyxvcHRpb25zKTt2YXIgeGhyPXRoaXMuc3luYyhcImRlbGV0ZVwiLHRoaXMsb3B0aW9ucyk7aWYoIW9wdGlvbnMud2FpdClkZXN0cm95KCk7cmV0dXJuIHhocn0sdXJsOmZ1bmN0aW9uKCl7dmFyIGJhc2U9Xy5yZXN1bHQodGhpcyxcInVybFJvb3RcIil8fF8ucmVzdWx0KHRoaXMuY29sbGVjdGlvbixcInVybFwiKXx8dXJsRXJyb3IoKTtpZih0aGlzLmlzTmV3KCkpcmV0dXJuIGJhc2U7cmV0dXJuIGJhc2UrKGJhc2UuY2hhckF0KGJhc2UubGVuZ3RoLTEpPT09XCIvXCI/XCJcIjpcIi9cIikrZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuaWQpfSxwYXJzZTpmdW5jdGlvbihyZXNwLG9wdGlvbnMpe3JldHVybiByZXNwfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmF0dHJpYnV0ZXMpfSxpc05ldzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlkPT1udWxsfSxpc1ZhbGlkOmZ1bmN0aW9uKG9wdGlvbnMpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh7fSxfLmV4dGVuZChvcHRpb25zfHx7fSx7dmFsaWRhdGU6dHJ1ZX0pKX0sX3ZhbGlkYXRlOmZ1bmN0aW9uKGF0dHJzLG9wdGlvbnMpe2lmKCFvcHRpb25zLnZhbGlkYXRlfHwhdGhpcy52YWxpZGF0ZSlyZXR1cm4gdHJ1ZTthdHRycz1fLmV4dGVuZCh7fSx0aGlzLmF0dHJpYnV0ZXMsYXR0cnMpO3ZhciBlcnJvcj10aGlzLnZhbGlkYXRpb25FcnJvcj10aGlzLnZhbGlkYXRlKGF0dHJzLG9wdGlvbnMpfHxudWxsO2lmKCFlcnJvcilyZXR1cm4gdHJ1ZTt0aGlzLnRyaWdnZXIoXCJpbnZhbGlkXCIsdGhpcyxlcnJvcixfLmV4dGVuZChvcHRpb25zfHx7fSx7dmFsaWRhdGlvbkVycm9yOmVycm9yfSkpO3JldHVybiBmYWxzZX19KTt2YXIgbW9kZWxNZXRob2RzPVtcImtleXNcIixcInZhbHVlc1wiLFwicGFpcnNcIixcImludmVydFwiLFwicGlja1wiLFwib21pdFwiXTtfLmVhY2gobW9kZWxNZXRob2RzLGZ1bmN0aW9uKG1ldGhvZCl7TW9kZWwucHJvdG90eXBlW21ldGhvZF09ZnVuY3Rpb24oKXt2YXIgYXJncz1zbGljZS5jYWxsKGFyZ3VtZW50cyk7YXJncy51bnNoaWZ0KHRoaXMuYXR0cmlidXRlcyk7cmV0dXJuIF9bbWV0aG9kXS5hcHBseShfLGFyZ3MpfX0pO3ZhciBDb2xsZWN0aW9uPUJhY2tib25lLkNvbGxlY3Rpb249ZnVuY3Rpb24obW9kZWxzLG9wdGlvbnMpe29wdGlvbnN8fChvcHRpb25zPXt9KTtpZihvcHRpb25zLnVybCl0aGlzLnVybD1vcHRpb25zLnVybDtpZihvcHRpb25zLm1vZGVsKXRoaXMubW9kZWw9b3B0aW9ucy5tb2RlbDtpZihvcHRpb25zLmNvbXBhcmF0b3IhPT12b2lkIDApdGhpcy5jb21wYXJhdG9yPW9wdGlvbnMuY29tcGFyYXRvcjt0aGlzLl9yZXNldCgpO3RoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYobW9kZWxzKXRoaXMucmVzZXQobW9kZWxzLF8uZXh0ZW5kKHtzaWxlbnQ6dHJ1ZX0sb3B0aW9ucykpfTt2YXIgc2V0T3B0aW9ucz17YWRkOnRydWUscmVtb3ZlOnRydWUsbWVyZ2U6dHJ1ZX07dmFyIGFkZE9wdGlvbnM9e2FkZDp0cnVlLG1lcmdlOmZhbHNlLHJlbW92ZTpmYWxzZX07Xy5leHRlbmQoQ29sbGVjdGlvbi5wcm90b3R5cGUsRXZlbnRzLHttb2RlbDpNb2RlbCxpbml0aWFsaXplOmZ1bmN0aW9uKCl7fSx0b0pTT046ZnVuY3Rpb24ob3B0aW9ucyl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKG1vZGVsKXtyZXR1cm4gbW9kZWwudG9KU09OKG9wdGlvbnMpfSl9LHN5bmM6ZnVuY3Rpb24oKXtyZXR1cm4gQmFja2JvbmUuc3luYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGFkZDpmdW5jdGlvbihtb2RlbHMsb3B0aW9ucyl7cmV0dXJuIHRoaXMuc2V0KG1vZGVscyxfLmRlZmF1bHRzKG9wdGlvbnN8fHt9LGFkZE9wdGlvbnMpKX0scmVtb3ZlOmZ1bmN0aW9uKG1vZGVscyxvcHRpb25zKXttb2RlbHM9Xy5pc0FycmF5KG1vZGVscyk/bW9kZWxzLnNsaWNlKCk6W21vZGVsc107b3B0aW9uc3x8KG9wdGlvbnM9e30pO3ZhciBpLGwsaW5kZXgsbW9kZWw7Zm9yKGk9MCxsPW1vZGVscy5sZW5ndGg7aTxsO2krKyl7bW9kZWw9dGhpcy5nZXQobW9kZWxzW2ldKTtpZighbW9kZWwpY29udGludWU7ZGVsZXRlIHRoaXMuX2J5SWRbbW9kZWwuaWRdO2RlbGV0ZSB0aGlzLl9ieUlkW21vZGVsLmNpZF07aW5kZXg9dGhpcy5pbmRleE9mKG1vZGVsKTt0aGlzLm1vZGVscy5zcGxpY2UoaW5kZXgsMSk7dGhpcy5sZW5ndGgtLTtpZighb3B0aW9ucy5zaWxlbnQpe29wdGlvbnMuaW5kZXg9aW5kZXg7bW9kZWwudHJpZ2dlcihcInJlbW92ZVwiLG1vZGVsLHRoaXMsb3B0aW9ucyl9dGhpcy5fcmVtb3ZlUmVmZXJlbmNlKG1vZGVsKX1yZXR1cm4gdGhpc30sc2V0OmZ1bmN0aW9uKG1vZGVscyxvcHRpb25zKXtvcHRpb25zPV8uZGVmYXVsdHMob3B0aW9uc3x8e30sc2V0T3B0aW9ucyk7aWYob3B0aW9ucy5wYXJzZSltb2RlbHM9dGhpcy5wYXJzZShtb2RlbHMsb3B0aW9ucyk7aWYoIV8uaXNBcnJheShtb2RlbHMpKW1vZGVscz1tb2RlbHM/W21vZGVsc106W107dmFyIGksbCxtb2RlbCxhdHRycyxleGlzdGluZyxzb3J0O3ZhciBhdD1vcHRpb25zLmF0O3ZhciBzb3J0YWJsZT10aGlzLmNvbXBhcmF0b3ImJmF0PT1udWxsJiZvcHRpb25zLnNvcnQhPT1mYWxzZTt2YXIgc29ydEF0dHI9Xy5pc1N0cmluZyh0aGlzLmNvbXBhcmF0b3IpP3RoaXMuY29tcGFyYXRvcjpudWxsO3ZhciB0b0FkZD1bXSx0b1JlbW92ZT1bXSxtb2RlbE1hcD17fTtmb3IoaT0wLGw9bW9kZWxzLmxlbmd0aDtpPGw7aSsrKXtpZighKG1vZGVsPXRoaXMuX3ByZXBhcmVNb2RlbChtb2RlbHNbaV0sb3B0aW9ucykpKWNvbnRpbnVlO2lmKGV4aXN0aW5nPXRoaXMuZ2V0KG1vZGVsKSl7aWYob3B0aW9ucy5yZW1vdmUpbW9kZWxNYXBbZXhpc3RpbmcuY2lkXT10cnVlO2lmKG9wdGlvbnMubWVyZ2Upe2V4aXN0aW5nLnNldChtb2RlbC5hdHRyaWJ1dGVzLG9wdGlvbnMpO2lmKHNvcnRhYmxlJiYhc29ydCYmZXhpc3RpbmcuaGFzQ2hhbmdlZChzb3J0QXR0cikpc29ydD10cnVlfX1lbHNlIGlmKG9wdGlvbnMuYWRkKXt0b0FkZC5wdXNoKG1vZGVsKTttb2RlbC5vbihcImFsbFwiLHRoaXMuX29uTW9kZWxFdmVudCx0aGlzKTt0aGlzLl9ieUlkW21vZGVsLmNpZF09bW9kZWw7aWYobW9kZWwuaWQhPW51bGwpdGhpcy5fYnlJZFttb2RlbC5pZF09bW9kZWx9fWlmKG9wdGlvbnMucmVtb3ZlKXtmb3IoaT0wLGw9dGhpcy5sZW5ndGg7aTxsOysraSl7aWYoIW1vZGVsTWFwWyhtb2RlbD10aGlzLm1vZGVsc1tpXSkuY2lkXSl0b1JlbW92ZS5wdXNoKG1vZGVsKX1pZih0b1JlbW92ZS5sZW5ndGgpdGhpcy5yZW1vdmUodG9SZW1vdmUsb3B0aW9ucyl9aWYodG9BZGQubGVuZ3RoKXtpZihzb3J0YWJsZSlzb3J0PXRydWU7dGhpcy5sZW5ndGgrPXRvQWRkLmxlbmd0aDtpZihhdCE9bnVsbCl7c3BsaWNlLmFwcGx5KHRoaXMubW9kZWxzLFthdCwwXS5jb25jYXQodG9BZGQpKX1lbHNle3B1c2guYXBwbHkodGhpcy5tb2RlbHMsdG9BZGQpfX1pZihzb3J0KXRoaXMuc29ydCh7c2lsZW50OnRydWV9KTtpZihvcHRpb25zLnNpbGVudClyZXR1cm4gdGhpcztmb3IoaT0wLGw9dG9BZGQubGVuZ3RoO2k8bDtpKyspeyhtb2RlbD10b0FkZFtpXSkudHJpZ2dlcihcImFkZFwiLG1vZGVsLHRoaXMsb3B0aW9ucyl9aWYoc29ydCl0aGlzLnRyaWdnZXIoXCJzb3J0XCIsdGhpcyxvcHRpb25zKTtyZXR1cm4gdGhpc30scmVzZXQ6ZnVuY3Rpb24obW9kZWxzLG9wdGlvbnMpe29wdGlvbnN8fChvcHRpb25zPXt9KTtmb3IodmFyIGk9MCxsPXRoaXMubW9kZWxzLmxlbmd0aDtpPGw7aSsrKXt0aGlzLl9yZW1vdmVSZWZlcmVuY2UodGhpcy5tb2RlbHNbaV0pfW9wdGlvbnMucHJldmlvdXNNb2RlbHM9dGhpcy5tb2RlbHM7dGhpcy5fcmVzZXQoKTt0aGlzLmFkZChtb2RlbHMsXy5leHRlbmQoe3NpbGVudDp0cnVlfSxvcHRpb25zKSk7aWYoIW9wdGlvbnMuc2lsZW50KXRoaXMudHJpZ2dlcihcInJlc2V0XCIsdGhpcyxvcHRpb25zKTtyZXR1cm4gdGhpc30scHVzaDpmdW5jdGlvbihtb2RlbCxvcHRpb25zKXttb2RlbD10aGlzLl9wcmVwYXJlTW9kZWwobW9kZWwsb3B0aW9ucyk7dGhpcy5hZGQobW9kZWwsXy5leHRlbmQoe2F0OnRoaXMubGVuZ3RofSxvcHRpb25zKSk7cmV0dXJuIG1vZGVsfSxwb3A6ZnVuY3Rpb24ob3B0aW9ucyl7dmFyIG1vZGVsPXRoaXMuYXQodGhpcy5sZW5ndGgtMSk7dGhpcy5yZW1vdmUobW9kZWwsb3B0aW9ucyk7cmV0dXJuIG1vZGVsfSx1bnNoaWZ0OmZ1bmN0aW9uKG1vZGVsLG9wdGlvbnMpe21vZGVsPXRoaXMuX3ByZXBhcmVNb2RlbChtb2RlbCxvcHRpb25zKTt0aGlzLmFkZChtb2RlbCxfLmV4dGVuZCh7YXQ6MH0sb3B0aW9ucykpO3JldHVybiBtb2RlbH0sc2hpZnQ6ZnVuY3Rpb24ob3B0aW9ucyl7dmFyIG1vZGVsPXRoaXMuYXQoMCk7dGhpcy5yZW1vdmUobW9kZWwsb3B0aW9ucyk7cmV0dXJuIG1vZGVsfSxzbGljZTpmdW5jdGlvbihiZWdpbixlbmQpe3JldHVybiB0aGlzLm1vZGVscy5zbGljZShiZWdpbixlbmQpfSxnZXQ6ZnVuY3Rpb24ob2JqKXtpZihvYmo9PW51bGwpcmV0dXJuIHZvaWQgMDtyZXR1cm4gdGhpcy5fYnlJZFtvYmouaWQhPW51bGw/b2JqLmlkOm9iai5jaWR8fG9ial19LGF0OmZ1bmN0aW9uKGluZGV4KXtyZXR1cm4gdGhpcy5tb2RlbHNbaW5kZXhdfSx3aGVyZTpmdW5jdGlvbihhdHRycyxmaXJzdCl7aWYoXy5pc0VtcHR5KGF0dHJzKSlyZXR1cm4gZmlyc3Q/dm9pZCAwOltdO3JldHVybiB0aGlzW2ZpcnN0P1wiZmluZFwiOlwiZmlsdGVyXCJdKGZ1bmN0aW9uKG1vZGVsKXtmb3IodmFyIGtleSBpbiBhdHRycyl7aWYoYXR0cnNba2V5XSE9PW1vZGVsLmdldChrZXkpKXJldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX0pfSxmaW5kV2hlcmU6ZnVuY3Rpb24oYXR0cnMpe3JldHVybiB0aGlzLndoZXJlKGF0dHJzLHRydWUpfSxzb3J0OmZ1bmN0aW9uKG9wdGlvbnMpe2lmKCF0aGlzLmNvbXBhcmF0b3IpdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHNvcnQgYSBzZXQgd2l0aG91dCBhIGNvbXBhcmF0b3JcIik7b3B0aW9uc3x8KG9wdGlvbnM9e30pO2lmKF8uaXNTdHJpbmcodGhpcy5jb21wYXJhdG9yKXx8dGhpcy5jb21wYXJhdG9yLmxlbmd0aD09PTEpe3RoaXMubW9kZWxzPXRoaXMuc29ydEJ5KHRoaXMuY29tcGFyYXRvcix0aGlzKX1lbHNle3RoaXMubW9kZWxzLnNvcnQoXy5iaW5kKHRoaXMuY29tcGFyYXRvcix0aGlzKSl9aWYoIW9wdGlvbnMuc2lsZW50KXRoaXMudHJpZ2dlcihcInNvcnRcIix0aGlzLG9wdGlvbnMpO3JldHVybiB0aGlzfSxzb3J0ZWRJbmRleDpmdW5jdGlvbihtb2RlbCx2YWx1ZSxjb250ZXh0KXt2YWx1ZXx8KHZhbHVlPXRoaXMuY29tcGFyYXRvcik7dmFyIGl0ZXJhdG9yPV8uaXNGdW5jdGlvbih2YWx1ZSk/dmFsdWU6ZnVuY3Rpb24obW9kZWwpe3JldHVybiBtb2RlbC5nZXQodmFsdWUpfTtyZXR1cm4gXy5zb3J0ZWRJbmRleCh0aGlzLm1vZGVscyxtb2RlbCxpdGVyYXRvcixjb250ZXh0KX0scGx1Y2s6ZnVuY3Rpb24oYXR0cil7cmV0dXJuIF8uaW52b2tlKHRoaXMubW9kZWxzLFwiZ2V0XCIsYXR0cil9LGZldGNoOmZ1bmN0aW9uKG9wdGlvbnMpe29wdGlvbnM9b3B0aW9ucz9fLmNsb25lKG9wdGlvbnMpOnt9O2lmKG9wdGlvbnMucGFyc2U9PT12b2lkIDApb3B0aW9ucy5wYXJzZT10cnVlO3ZhciBzdWNjZXNzPW9wdGlvbnMuc3VjY2Vzczt2YXIgY29sbGVjdGlvbj10aGlzO29wdGlvbnMuc3VjY2Vzcz1mdW5jdGlvbihyZXNwKXt2YXIgbWV0aG9kPW9wdGlvbnMucmVzZXQ/XCJyZXNldFwiOlwic2V0XCI7Y29sbGVjdGlvblttZXRob2RdKHJlc3Asb3B0aW9ucyk7aWYoc3VjY2VzcylzdWNjZXNzKGNvbGxlY3Rpb24scmVzcCxvcHRpb25zKTtjb2xsZWN0aW9uLnRyaWdnZXIoXCJzeW5jXCIsY29sbGVjdGlvbixyZXNwLG9wdGlvbnMpfTt3cmFwRXJyb3IodGhpcyxvcHRpb25zKTtyZXR1cm4gdGhpcy5zeW5jKFwicmVhZFwiLHRoaXMsb3B0aW9ucyl9LGNyZWF0ZTpmdW5jdGlvbihtb2RlbCxvcHRpb25zKXtvcHRpb25zPW9wdGlvbnM/Xy5jbG9uZShvcHRpb25zKTp7fTtpZighKG1vZGVsPXRoaXMuX3ByZXBhcmVNb2RlbChtb2RlbCxvcHRpb25zKSkpcmV0dXJuIGZhbHNlO2lmKCFvcHRpb25zLndhaXQpdGhpcy5hZGQobW9kZWwsb3B0aW9ucyk7dmFyIGNvbGxlY3Rpb249dGhpczt2YXIgc3VjY2Vzcz1vcHRpb25zLnN1Y2Nlc3M7b3B0aW9ucy5zdWNjZXNzPWZ1bmN0aW9uKHJlc3Ape2lmKG9wdGlvbnMud2FpdCljb2xsZWN0aW9uLmFkZChtb2RlbCxvcHRpb25zKTtpZihzdWNjZXNzKXN1Y2Nlc3MobW9kZWwscmVzcCxvcHRpb25zKX07bW9kZWwuc2F2ZShudWxsLG9wdGlvbnMpO3JldHVybiBtb2RlbH0scGFyc2U6ZnVuY3Rpb24ocmVzcCxvcHRpb25zKXtyZXR1cm4gcmVzcH0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5tb2RlbHMpfSxfcmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aD0wO3RoaXMubW9kZWxzPVtdO3RoaXMuX2J5SWQ9e319LF9wcmVwYXJlTW9kZWw6ZnVuY3Rpb24oYXR0cnMsb3B0aW9ucyl7aWYoYXR0cnMgaW5zdGFuY2VvZiBNb2RlbCl7aWYoIWF0dHJzLmNvbGxlY3Rpb24pYXR0cnMuY29sbGVjdGlvbj10aGlzO3JldHVybiBhdHRyc31vcHRpb25zfHwob3B0aW9ucz17fSk7b3B0aW9ucy5jb2xsZWN0aW9uPXRoaXM7dmFyIG1vZGVsPW5ldyB0aGlzLm1vZGVsKGF0dHJzLG9wdGlvbnMpO2lmKCFtb2RlbC5fdmFsaWRhdGUoYXR0cnMsb3B0aW9ucykpe3RoaXMudHJpZ2dlcihcImludmFsaWRcIix0aGlzLGF0dHJzLG9wdGlvbnMpO3JldHVybiBmYWxzZX1yZXR1cm4gbW9kZWx9LF9yZW1vdmVSZWZlcmVuY2U6ZnVuY3Rpb24obW9kZWwpe2lmKHRoaXM9PT1tb2RlbC5jb2xsZWN0aW9uKWRlbGV0ZSBtb2RlbC5jb2xsZWN0aW9uO21vZGVsLm9mZihcImFsbFwiLHRoaXMuX29uTW9kZWxFdmVudCx0aGlzKX0sX29uTW9kZWxFdmVudDpmdW5jdGlvbihldmVudCxtb2RlbCxjb2xsZWN0aW9uLG9wdGlvbnMpe2lmKChldmVudD09PVwiYWRkXCJ8fGV2ZW50PT09XCJyZW1vdmVcIikmJmNvbGxlY3Rpb24hPT10aGlzKXJldHVybjtpZihldmVudD09PVwiZGVzdHJveVwiKXRoaXMucmVtb3ZlKG1vZGVsLG9wdGlvbnMpO2lmKG1vZGVsJiZldmVudD09PVwiY2hhbmdlOlwiK21vZGVsLmlkQXR0cmlidXRlKXtkZWxldGUgdGhpcy5fYnlJZFttb2RlbC5wcmV2aW91cyhtb2RlbC5pZEF0dHJpYnV0ZSldO2lmKG1vZGVsLmlkIT1udWxsKXRoaXMuX2J5SWRbbW9kZWwuaWRdPW1vZGVsfXRoaXMudHJpZ2dlci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSk7dmFyIG1ldGhvZHM9W1wiZm9yRWFjaFwiLFwiZWFjaFwiLFwibWFwXCIsXCJjb2xsZWN0XCIsXCJyZWR1Y2VcIixcImZvbGRsXCIsXCJpbmplY3RcIixcInJlZHVjZVJpZ2h0XCIsXCJmb2xkclwiLFwiZmluZFwiLFwiZGV0ZWN0XCIsXCJmaWx0ZXJcIixcInNlbGVjdFwiLFwicmVqZWN0XCIsXCJldmVyeVwiLFwiYWxsXCIsXCJzb21lXCIsXCJhbnlcIixcImluY2x1ZGVcIixcImNvbnRhaW5zXCIsXCJpbnZva2VcIixcIm1heFwiLFwibWluXCIsXCJ0b0FycmF5XCIsXCJzaXplXCIsXCJmaXJzdFwiLFwiaGVhZFwiLFwidGFrZVwiLFwiaW5pdGlhbFwiLFwicmVzdFwiLFwidGFpbFwiLFwiZHJvcFwiLFwibGFzdFwiLFwid2l0aG91dFwiLFwiaW5kZXhPZlwiLFwic2h1ZmZsZVwiLFwibGFzdEluZGV4T2ZcIixcImlzRW1wdHlcIixcImNoYWluXCJdO18uZWFjaChtZXRob2RzLGZ1bmN0aW9uKG1ldGhvZCl7Q29sbGVjdGlvbi5wcm90b3R5cGVbbWV0aG9kXT1mdW5jdGlvbigpe3ZhciBhcmdzPXNsaWNlLmNhbGwoYXJndW1lbnRzKTthcmdzLnVuc2hpZnQodGhpcy5tb2RlbHMpO3JldHVybiBfW21ldGhvZF0uYXBwbHkoXyxhcmdzKX19KTt2YXIgYXR0cmlidXRlTWV0aG9kcz1bXCJncm91cEJ5XCIsXCJjb3VudEJ5XCIsXCJzb3J0QnlcIl07Xy5lYWNoKGF0dHJpYnV0ZU1ldGhvZHMsZnVuY3Rpb24obWV0aG9kKXtDb2xsZWN0aW9uLnByb3RvdHlwZVttZXRob2RdPWZ1bmN0aW9uKHZhbHVlLGNvbnRleHQpe3ZhciBpdGVyYXRvcj1fLmlzRnVuY3Rpb24odmFsdWUpP3ZhbHVlOmZ1bmN0aW9uKG1vZGVsKXtyZXR1cm4gbW9kZWwuZ2V0KHZhbHVlKX07cmV0dXJuIF9bbWV0aG9kXSh0aGlzLm1vZGVscyxpdGVyYXRvcixjb250ZXh0KX19KTt2YXIgVmlldz1CYWNrYm9uZS5WaWV3PWZ1bmN0aW9uKG9wdGlvbnMpe3RoaXMuY2lkPV8udW5pcXVlSWQoXCJ2aWV3XCIpO3RoaXMuX2NvbmZpZ3VyZShvcHRpb25zfHx7fSk7dGhpcy5fZW5zdXJlRWxlbWVudCgpO3RoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5kZWxlZ2F0ZUV2ZW50cygpfTt2YXIgZGVsZWdhdGVFdmVudFNwbGl0dGVyPS9eKFxcUyspXFxzKiguKikkLzt2YXIgdmlld09wdGlvbnM9W1wibW9kZWxcIixcImNvbGxlY3Rpb25cIixcImVsXCIsXCJpZFwiLFwiYXR0cmlidXRlc1wiLFwiY2xhc3NOYW1lXCIsXCJ0YWdOYW1lXCIsXCJldmVudHNcIl07Xy5leHRlbmQoVmlldy5wcm90b3R5cGUsRXZlbnRzLHt0YWdOYW1lOlwiZGl2XCIsJDpmdW5jdGlvbihzZWxlY3Rvcil7cmV0dXJuIHRoaXMuJGVsLmZpbmQoc2VsZWN0b3IpfSxpbml0aWFsaXplOmZ1bmN0aW9uKCl7fSxyZW5kZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7dGhpcy4kZWwucmVtb3ZlKCk7dGhpcy5zdG9wTGlzdGVuaW5nKCk7cmV0dXJuIHRoaXN9LHNldEVsZW1lbnQ6ZnVuY3Rpb24oZWxlbWVudCxkZWxlZ2F0ZSl7aWYodGhpcy4kZWwpdGhpcy51bmRlbGVnYXRlRXZlbnRzKCk7dGhpcy4kZWw9ZWxlbWVudCBpbnN0YW5jZW9mIEJhY2tib25lLiQ/ZWxlbWVudDpCYWNrYm9uZS4kKGVsZW1lbnQpO3RoaXMuZWw9dGhpcy4kZWxbMF07aWYoZGVsZWdhdGUhPT1mYWxzZSl0aGlzLmRlbGVnYXRlRXZlbnRzKCk7cmV0dXJuIHRoaXN9LGRlbGVnYXRlRXZlbnRzOmZ1bmN0aW9uKGV2ZW50cyl7aWYoIShldmVudHN8fChldmVudHM9Xy5yZXN1bHQodGhpcyxcImV2ZW50c1wiKSkpKXJldHVybiB0aGlzO3RoaXMudW5kZWxlZ2F0ZUV2ZW50cygpO2Zvcih2YXIga2V5IGluIGV2ZW50cyl7dmFyIG1ldGhvZD1ldmVudHNba2V5XTtpZighXy5pc0Z1bmN0aW9uKG1ldGhvZCkpbWV0aG9kPXRoaXNbZXZlbnRzW2tleV1dO2lmKCFtZXRob2QpY29udGludWU7dmFyIG1hdGNoPWtleS5tYXRjaChkZWxlZ2F0ZUV2ZW50U3BsaXR0ZXIpO3ZhciBldmVudE5hbWU9bWF0Y2hbMV0sc2VsZWN0b3I9bWF0Y2hbMl07bWV0aG9kPV8uYmluZChtZXRob2QsdGhpcyk7ZXZlbnROYW1lKz1cIi5kZWxlZ2F0ZUV2ZW50c1wiK3RoaXMuY2lkO2lmKHNlbGVjdG9yPT09XCJcIil7dGhpcy4kZWwub24oZXZlbnROYW1lLG1ldGhvZCl9ZWxzZXt0aGlzLiRlbC5vbihldmVudE5hbWUsc2VsZWN0b3IsbWV0aG9kKX19cmV0dXJuIHRoaXN9LHVuZGVsZWdhdGVFdmVudHM6ZnVuY3Rpb24oKXt0aGlzLiRlbC5vZmYoXCIuZGVsZWdhdGVFdmVudHNcIit0aGlzLmNpZCk7cmV0dXJuIHRoaXN9LF9jb25maWd1cmU6ZnVuY3Rpb24ob3B0aW9ucyl7aWYodGhpcy5vcHRpb25zKW9wdGlvbnM9Xy5leHRlbmQoe30sXy5yZXN1bHQodGhpcyxcIm9wdGlvbnNcIiksb3B0aW9ucyk7Xy5leHRlbmQodGhpcyxfLnBpY2sob3B0aW9ucyx2aWV3T3B0aW9ucykpO3RoaXMub3B0aW9ucz1vcHRpb25zfSxfZW5zdXJlRWxlbWVudDpmdW5jdGlvbigpe2lmKCF0aGlzLmVsKXt2YXIgYXR0cnM9Xy5leHRlbmQoe30sXy5yZXN1bHQodGhpcyxcImF0dHJpYnV0ZXNcIikpO2lmKHRoaXMuaWQpYXR0cnMuaWQ9Xy5yZXN1bHQodGhpcyxcImlkXCIpO2lmKHRoaXMuY2xhc3NOYW1lKWF0dHJzW1wiY2xhc3NcIl09Xy5yZXN1bHQodGhpcyxcImNsYXNzTmFtZVwiKTt2YXIgJGVsPUJhY2tib25lLiQoXCI8XCIrXy5yZXN1bHQodGhpcyxcInRhZ05hbWVcIikrXCI+XCIpLmF0dHIoYXR0cnMpO3RoaXMuc2V0RWxlbWVudCgkZWwsZmFsc2UpfWVsc2V7dGhpcy5zZXRFbGVtZW50KF8ucmVzdWx0KHRoaXMsXCJlbFwiKSxmYWxzZSl9fX0pO0JhY2tib25lLnN5bmM9ZnVuY3Rpb24obWV0aG9kLG1vZGVsLG9wdGlvbnMpe3ZhciB0eXBlPW1ldGhvZE1hcFttZXRob2RdO18uZGVmYXVsdHMob3B0aW9uc3x8KG9wdGlvbnM9e30pLHtlbXVsYXRlSFRUUDpCYWNrYm9uZS5lbXVsYXRlSFRUUCxlbXVsYXRlSlNPTjpCYWNrYm9uZS5lbXVsYXRlSlNPTn0pO3ZhciBwYXJhbXM9e3R5cGU6dHlwZSxkYXRhVHlwZTpcImpzb25cIn07aWYoIW9wdGlvbnMudXJsKXtwYXJhbXMudXJsPV8ucmVzdWx0KG1vZGVsLFwidXJsXCIpfHx1cmxFcnJvcigpfWlmKG9wdGlvbnMuZGF0YT09bnVsbCYmbW9kZWwmJihtZXRob2Q9PT1cImNyZWF0ZVwifHxtZXRob2Q9PT1cInVwZGF0ZVwifHxtZXRob2Q9PT1cInBhdGNoXCIpKXtwYXJhbXMuY29udGVudFR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCI7cGFyYW1zLmRhdGE9SlNPTi5zdHJpbmdpZnkob3B0aW9ucy5hdHRyc3x8bW9kZWwudG9KU09OKG9wdGlvbnMpKX1pZihvcHRpb25zLmVtdWxhdGVKU09OKXtwYXJhbXMuY29udGVudFR5cGU9XCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIjtwYXJhbXMuZGF0YT1wYXJhbXMuZGF0YT97bW9kZWw6cGFyYW1zLmRhdGF9Ont9fWlmKG9wdGlvbnMuZW11bGF0ZUhUVFAmJih0eXBlPT09XCJQVVRcInx8dHlwZT09PVwiREVMRVRFXCJ8fHR5cGU9PT1cIlBBVENIXCIpKXtwYXJhbXMudHlwZT1cIlBPU1RcIjtpZihvcHRpb25zLmVtdWxhdGVKU09OKXBhcmFtcy5kYXRhLl9tZXRob2Q9dHlwZTt2YXIgYmVmb3JlU2VuZD1vcHRpb25zLmJlZm9yZVNlbmQ7b3B0aW9ucy5iZWZvcmVTZW5kPWZ1bmN0aW9uKHhocil7eGhyLnNldFJlcXVlc3RIZWFkZXIoXCJYLUhUVFAtTWV0aG9kLU92ZXJyaWRlXCIsdHlwZSk7aWYoYmVmb3JlU2VuZClyZXR1cm4gYmVmb3JlU2VuZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWlmKHBhcmFtcy50eXBlIT09XCJHRVRcIiYmIW9wdGlvbnMuZW11bGF0ZUpTT04pe3BhcmFtcy5wcm9jZXNzRGF0YT1mYWxzZX1pZihwYXJhbXMudHlwZT09PVwiUEFUQ0hcIiYmd2luZG93LkFjdGl2ZVhPYmplY3QmJiEod2luZG93LmV4dGVybmFsJiZ3aW5kb3cuZXh0ZXJuYWwubXNBY3RpdmVYRmlsdGVyaW5nRW5hYmxlZCkpe3BhcmFtcy54aHI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoXCJNaWNyb3NvZnQuWE1MSFRUUFwiKX19dmFyIHhocj1vcHRpb25zLnhocj1CYWNrYm9uZS5hamF4KF8uZXh0ZW5kKHBhcmFtcyxvcHRpb25zKSk7bW9kZWwudHJpZ2dlcihcInJlcXVlc3RcIixtb2RlbCx4aHIsb3B0aW9ucyk7cmV0dXJuIHhocn07dmFyIG1ldGhvZE1hcD17Y3JlYXRlOlwiUE9TVFwiLHVwZGF0ZTpcIlBVVFwiLHBhdGNoOlwiUEFUQ0hcIixcImRlbGV0ZVwiOlwiREVMRVRFXCIscmVhZDpcIkdFVFwifTtCYWNrYm9uZS5hamF4PWZ1bmN0aW9uKCl7cmV0dXJuIEJhY2tib25lLiQuYWpheC5hcHBseShCYWNrYm9uZS4kLGFyZ3VtZW50cyl9O3ZhciBSb3V0ZXI9QmFja2JvbmUuUm91dGVyPWZ1bmN0aW9uKG9wdGlvbnMpe29wdGlvbnN8fChvcHRpb25zPXt9KTtpZihvcHRpb25zLnJvdXRlcyl0aGlzLnJvdXRlcz1vcHRpb25zLnJvdXRlczt0aGlzLl9iaW5kUm91dGVzKCk7dGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIG9wdGlvbmFsUGFyYW09L1xcKCguKj8pXFwpL2c7dmFyIG5hbWVkUGFyYW09LyhcXChcXD8pPzpcXHcrL2c7dmFyIHNwbGF0UGFyYW09L1xcKlxcdysvZzt2YXIgZXNjYXBlUmVnRXhwPS9bXFwte31cXFtcXF0rPy4sXFxcXFxcXiR8I1xcc10vZztfLmV4dGVuZChSb3V0ZXIucHJvdG90eXBlLEV2ZW50cyx7aW5pdGlhbGl6ZTpmdW5jdGlvbigpe30scm91dGU6ZnVuY3Rpb24ocm91dGUsbmFtZSxjYWxsYmFjayl7aWYoIV8uaXNSZWdFeHAocm91dGUpKXJvdXRlPXRoaXMuX3JvdXRlVG9SZWdFeHAocm91dGUpO2lmKF8uaXNGdW5jdGlvbihuYW1lKSl7Y2FsbGJhY2s9bmFtZTtuYW1lPVwiXCJ9aWYoIWNhbGxiYWNrKWNhbGxiYWNrPXRoaXNbbmFtZV07dmFyIHJvdXRlcj10aGlzO0JhY2tib25lLmhpc3Rvcnkucm91dGUocm91dGUsZnVuY3Rpb24oZnJhZ21lbnQpe3ZhciBhcmdzPXJvdXRlci5fZXh0cmFjdFBhcmFtZXRlcnMocm91dGUsZnJhZ21lbnQpO2NhbGxiYWNrJiZjYWxsYmFjay5hcHBseShyb3V0ZXIsYXJncyk7cm91dGVyLnRyaWdnZXIuYXBwbHkocm91dGVyLFtcInJvdXRlOlwiK25hbWVdLmNvbmNhdChhcmdzKSk7cm91dGVyLnRyaWdnZXIoXCJyb3V0ZVwiLG5hbWUsYXJncyk7QmFja2JvbmUuaGlzdG9yeS50cmlnZ2VyKFwicm91dGVcIixyb3V0ZXIsbmFtZSxhcmdzKX0pO3JldHVybiB0aGlzfSxuYXZpZ2F0ZTpmdW5jdGlvbihmcmFnbWVudCxvcHRpb25zKXtCYWNrYm9uZS5oaXN0b3J5Lm5hdmlnYXRlKGZyYWdtZW50LG9wdGlvbnMpO3JldHVybiB0aGlzfSxfYmluZFJvdXRlczpmdW5jdGlvbigpe2lmKCF0aGlzLnJvdXRlcylyZXR1cm47dGhpcy5yb3V0ZXM9Xy5yZXN1bHQodGhpcyxcInJvdXRlc1wiKTt2YXIgcm91dGUscm91dGVzPV8ua2V5cyh0aGlzLnJvdXRlcyk7d2hpbGUoKHJvdXRlPXJvdXRlcy5wb3AoKSkhPW51bGwpe3RoaXMucm91dGUocm91dGUsdGhpcy5yb3V0ZXNbcm91dGVdKX19LF9yb3V0ZVRvUmVnRXhwOmZ1bmN0aW9uKHJvdXRlKXtyb3V0ZT1yb3V0ZS5yZXBsYWNlKGVzY2FwZVJlZ0V4cCxcIlxcXFwkJlwiKS5yZXBsYWNlKG9wdGlvbmFsUGFyYW0sXCIoPzokMSk/XCIpLnJlcGxhY2UobmFtZWRQYXJhbSxmdW5jdGlvbihtYXRjaCxvcHRpb25hbCl7cmV0dXJuIG9wdGlvbmFsP21hdGNoOlwiKFteL10rKVwifSkucmVwbGFjZShzcGxhdFBhcmFtLFwiKC4qPylcIik7cmV0dXJuIG5ldyBSZWdFeHAoXCJeXCIrcm91dGUrXCIkXCIpfSxfZXh0cmFjdFBhcmFtZXRlcnM6ZnVuY3Rpb24ocm91dGUsZnJhZ21lbnQpe3ZhciBwYXJhbXM9cm91dGUuZXhlYyhmcmFnbWVudCkuc2xpY2UoMSk7cmV0dXJuIF8ubWFwKHBhcmFtcyxmdW5jdGlvbihwYXJhbSl7cmV0dXJuIHBhcmFtP2RlY29kZVVSSUNvbXBvbmVudChwYXJhbSk6bnVsbH0pfX0pO3ZhciBIaXN0b3J5PUJhY2tib25lLkhpc3Rvcnk9ZnVuY3Rpb24oKXt0aGlzLmhhbmRsZXJzPVtdO18uYmluZEFsbCh0aGlzLFwiY2hlY2tVcmxcIik7aWYodHlwZW9mIHdpbmRvdyE9PVwidW5kZWZpbmVkXCIpe3RoaXMubG9jYXRpb249d2luZG93LmxvY2F0aW9uO3RoaXMuaGlzdG9yeT13aW5kb3cuaGlzdG9yeX19O3ZhciByb3V0ZVN0cmlwcGVyPS9eWyNcXC9dfFxccyskL2c7dmFyIHJvb3RTdHJpcHBlcj0vXlxcLyt8XFwvKyQvZzt2YXIgaXNFeHBsb3Jlcj0vbXNpZSBbXFx3Ll0rLzt2YXIgdHJhaWxpbmdTbGFzaD0vXFwvJC87SGlzdG9yeS5zdGFydGVkPWZhbHNlO18uZXh0ZW5kKEhpc3RvcnkucHJvdG90eXBlLEV2ZW50cyx7aW50ZXJ2YWw6NTAsZ2V0SGFzaDpmdW5jdGlvbih3aW5kb3cpe3ZhciBtYXRjaD0od2luZG93fHx0aGlzKS5sb2NhdGlvbi5ocmVmLm1hdGNoKC8jKC4qKSQvKTtyZXR1cm4gbWF0Y2g/bWF0Y2hbMV06XCJcIn0sZ2V0RnJhZ21lbnQ6ZnVuY3Rpb24oZnJhZ21lbnQsZm9yY2VQdXNoU3RhdGUpe2lmKGZyYWdtZW50PT1udWxsKXtpZih0aGlzLl9oYXNQdXNoU3RhdGV8fCF0aGlzLl93YW50c0hhc2hDaGFuZ2V8fGZvcmNlUHVzaFN0YXRlKXtmcmFnbWVudD10aGlzLmxvY2F0aW9uLnBhdGhuYW1lO3ZhciByb290PXRoaXMucm9vdC5yZXBsYWNlKHRyYWlsaW5nU2xhc2gsXCJcIik7aWYoIWZyYWdtZW50LmluZGV4T2Yocm9vdCkpZnJhZ21lbnQ9ZnJhZ21lbnQuc3Vic3RyKHJvb3QubGVuZ3RoKX1lbHNle2ZyYWdtZW50PXRoaXMuZ2V0SGFzaCgpfX1yZXR1cm4gZnJhZ21lbnQucmVwbGFjZShyb3V0ZVN0cmlwcGVyLFwiXCIpfSxzdGFydDpmdW5jdGlvbihvcHRpb25zKXtpZihIaXN0b3J5LnN0YXJ0ZWQpdGhyb3cgbmV3IEVycm9yKFwiQmFja2JvbmUuaGlzdG9yeSBoYXMgYWxyZWFkeSBiZWVuIHN0YXJ0ZWRcIik7SGlzdG9yeS5zdGFydGVkPXRydWU7dGhpcy5vcHRpb25zPV8uZXh0ZW5kKHt9LHtyb290OlwiL1wifSx0aGlzLm9wdGlvbnMsb3B0aW9ucyk7dGhpcy5yb290PXRoaXMub3B0aW9ucy5yb290O3RoaXMuX3dhbnRzSGFzaENoYW5nZT10aGlzLm9wdGlvbnMuaGFzaENoYW5nZSE9PWZhbHNlO3RoaXMuX3dhbnRzUHVzaFN0YXRlPSEhdGhpcy5vcHRpb25zLnB1c2hTdGF0ZTt0aGlzLl9oYXNQdXNoU3RhdGU9ISEodGhpcy5vcHRpb25zLnB1c2hTdGF0ZSYmdGhpcy5oaXN0b3J5JiZ0aGlzLmhpc3RvcnkucHVzaFN0YXRlKTt2YXIgZnJhZ21lbnQ9dGhpcy5nZXRGcmFnbWVudCgpO3ZhciBkb2NNb2RlPWRvY3VtZW50LmRvY3VtZW50TW9kZTt2YXIgb2xkSUU9aXNFeHBsb3Jlci5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSkmJighZG9jTW9kZXx8ZG9jTW9kZTw9Nyk7dGhpcy5yb290PShcIi9cIit0aGlzLnJvb3QrXCIvXCIpLnJlcGxhY2Uocm9vdFN0cmlwcGVyLFwiL1wiKTtpZihvbGRJRSYmdGhpcy5fd2FudHNIYXNoQ2hhbmdlKXt0aGlzLmlmcmFtZT1CYWNrYm9uZS4kKCc8aWZyYW1lIHNyYz1cImphdmFzY3JpcHQ6MFwiIHRhYmluZGV4PVwiLTFcIiAvPicpLmhpZGUoKS5hcHBlbmRUbyhcImJvZHlcIilbMF0uY29udGVudFdpbmRvdzt0aGlzLm5hdmlnYXRlKGZyYWdtZW50KX1pZih0aGlzLl9oYXNQdXNoU3RhdGUpe0JhY2tib25lLiQod2luZG93KS5vbihcInBvcHN0YXRlXCIsdGhpcy5jaGVja1VybCl9ZWxzZSBpZih0aGlzLl93YW50c0hhc2hDaGFuZ2UmJlwib25oYXNoY2hhbmdlXCJpbiB3aW5kb3cmJiFvbGRJRSl7QmFja2JvbmUuJCh3aW5kb3cpLm9uKFwiaGFzaGNoYW5nZVwiLHRoaXMuY2hlY2tVcmwpfWVsc2UgaWYodGhpcy5fd2FudHNIYXNoQ2hhbmdlKXt0aGlzLl9jaGVja1VybEludGVydmFsPXNldEludGVydmFsKHRoaXMuY2hlY2tVcmwsdGhpcy5pbnRlcnZhbCl9dGhpcy5mcmFnbWVudD1mcmFnbWVudDt2YXIgbG9jPXRoaXMubG9jYXRpb247dmFyIGF0Um9vdD1sb2MucGF0aG5hbWUucmVwbGFjZSgvW15cXC9dJC8sXCIkJi9cIik9PT10aGlzLnJvb3Q7aWYodGhpcy5fd2FudHNIYXNoQ2hhbmdlJiZ0aGlzLl93YW50c1B1c2hTdGF0ZSYmIXRoaXMuX2hhc1B1c2hTdGF0ZSYmIWF0Um9vdCl7dGhpcy5mcmFnbWVudD10aGlzLmdldEZyYWdtZW50KG51bGwsdHJ1ZSk7dGhpcy5sb2NhdGlvbi5yZXBsYWNlKHRoaXMucm9vdCt0aGlzLmxvY2F0aW9uLnNlYXJjaCtcIiNcIit0aGlzLmZyYWdtZW50KTtyZXR1cm4gdHJ1ZX1lbHNlIGlmKHRoaXMuX3dhbnRzUHVzaFN0YXRlJiZ0aGlzLl9oYXNQdXNoU3RhdGUmJmF0Um9vdCYmbG9jLmhhc2gpe3RoaXMuZnJhZ21lbnQ9dGhpcy5nZXRIYXNoKCkucmVwbGFjZShyb3V0ZVN0cmlwcGVyLFwiXCIpO3RoaXMuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sZG9jdW1lbnQudGl0bGUsdGhpcy5yb290K3RoaXMuZnJhZ21lbnQrbG9jLnNlYXJjaCl9aWYoIXRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIHRoaXMubG9hZFVybCgpfSxzdG9wOmZ1bmN0aW9uKCl7QmFja2JvbmUuJCh3aW5kb3cpLm9mZihcInBvcHN0YXRlXCIsdGhpcy5jaGVja1VybCkub2ZmKFwiaGFzaGNoYW5nZVwiLHRoaXMuY2hlY2tVcmwpO2NsZWFySW50ZXJ2YWwodGhpcy5fY2hlY2tVcmxJbnRlcnZhbCk7SGlzdG9yeS5zdGFydGVkPWZhbHNlfSxyb3V0ZTpmdW5jdGlvbihyb3V0ZSxjYWxsYmFjayl7dGhpcy5oYW5kbGVycy51bnNoaWZ0KHtyb3V0ZTpyb3V0ZSxjYWxsYmFjazpjYWxsYmFja30pfSxjaGVja1VybDpmdW5jdGlvbihlKXt2YXIgY3VycmVudD10aGlzLmdldEZyYWdtZW50KCk7aWYoY3VycmVudD09PXRoaXMuZnJhZ21lbnQmJnRoaXMuaWZyYW1lKXtjdXJyZW50PXRoaXMuZ2V0RnJhZ21lbnQodGhpcy5nZXRIYXNoKHRoaXMuaWZyYW1lKSl9aWYoY3VycmVudD09PXRoaXMuZnJhZ21lbnQpcmV0dXJuIGZhbHNlO2lmKHRoaXMuaWZyYW1lKXRoaXMubmF2aWdhdGUoY3VycmVudCk7dGhpcy5sb2FkVXJsKCl8fHRoaXMubG9hZFVybCh0aGlzLmdldEhhc2goKSl9LGxvYWRVcmw6ZnVuY3Rpb24oZnJhZ21lbnRPdmVycmlkZSl7dmFyIGZyYWdtZW50PXRoaXMuZnJhZ21lbnQ9dGhpcy5nZXRGcmFnbWVudChmcmFnbWVudE92ZXJyaWRlKTt2YXIgbWF0Y2hlZD1fLmFueSh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKGhhbmRsZXIpe2lmKGhhbmRsZXIucm91dGUudGVzdChmcmFnbWVudCkpe2hhbmRsZXIuY2FsbGJhY2soZnJhZ21lbnQpO3JldHVybiB0cnVlfX0pO3JldHVybiBtYXRjaGVkfSxuYXZpZ2F0ZTpmdW5jdGlvbihmcmFnbWVudCxvcHRpb25zKXtpZighSGlzdG9yeS5zdGFydGVkKXJldHVybiBmYWxzZTtpZighb3B0aW9uc3x8b3B0aW9ucz09PXRydWUpb3B0aW9ucz17dHJpZ2dlcjpvcHRpb25zfTtmcmFnbWVudD10aGlzLmdldEZyYWdtZW50KGZyYWdtZW50fHxcIlwiKTtpZih0aGlzLmZyYWdtZW50PT09ZnJhZ21lbnQpcmV0dXJuO3RoaXMuZnJhZ21lbnQ9ZnJhZ21lbnQ7dmFyIHVybD10aGlzLnJvb3QrZnJhZ21lbnQ7aWYodGhpcy5faGFzUHVzaFN0YXRlKXt0aGlzLmhpc3Rvcnlbb3B0aW9ucy5yZXBsYWNlP1wicmVwbGFjZVN0YXRlXCI6XCJwdXNoU3RhdGVcIl0oe30sZG9jdW1lbnQudGl0bGUsdXJsKX1lbHNlIGlmKHRoaXMuX3dhbnRzSGFzaENoYW5nZSl7dGhpcy5fdXBkYXRlSGFzaCh0aGlzLmxvY2F0aW9uLGZyYWdtZW50LG9wdGlvbnMucmVwbGFjZSk7aWYodGhpcy5pZnJhbWUmJmZyYWdtZW50IT09dGhpcy5nZXRGcmFnbWVudCh0aGlzLmdldEhhc2godGhpcy5pZnJhbWUpKSl7aWYoIW9wdGlvbnMucmVwbGFjZSl0aGlzLmlmcmFtZS5kb2N1bWVudC5vcGVuKCkuY2xvc2UoKTt0aGlzLl91cGRhdGVIYXNoKHRoaXMuaWZyYW1lLmxvY2F0aW9uLGZyYWdtZW50LG9wdGlvbnMucmVwbGFjZSl9fWVsc2V7cmV0dXJuIHRoaXMubG9jYXRpb24uYXNzaWduKHVybCl9aWYob3B0aW9ucy50cmlnZ2VyKXRoaXMubG9hZFVybChmcmFnbWVudCl9LF91cGRhdGVIYXNoOmZ1bmN0aW9uKGxvY2F0aW9uLGZyYWdtZW50LHJlcGxhY2Upe2lmKHJlcGxhY2Upe3ZhciBocmVmPWxvY2F0aW9uLmhyZWYucmVwbGFjZSgvKGphdmFzY3JpcHQ6fCMpLiokLyxcIlwiKTtsb2NhdGlvbi5yZXBsYWNlKGhyZWYrXCIjXCIrZnJhZ21lbnQpfWVsc2V7bG9jYXRpb24uaGFzaD1cIiNcIitmcmFnbWVudH19fSk7QmFja2JvbmUuaGlzdG9yeT1uZXcgSGlzdG9yeTt2YXIgZXh0ZW5kPWZ1bmN0aW9uKHByb3RvUHJvcHMsc3RhdGljUHJvcHMpe3ZhciBwYXJlbnQ9dGhpczt2YXIgY2hpbGQ7aWYocHJvdG9Qcm9wcyYmXy5oYXMocHJvdG9Qcm9wcyxcImNvbnN0cnVjdG9yXCIpKXtjaGlsZD1wcm90b1Byb3BzLmNvbnN0cnVjdG9yfWVsc2V7Y2hpbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gcGFyZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19Xy5leHRlbmQoY2hpbGQscGFyZW50LHN0YXRpY1Byb3BzKTt2YXIgU3Vycm9nYXRlPWZ1bmN0aW9uKCl7dGhpcy5jb25zdHJ1Y3Rvcj1jaGlsZH07U3Vycm9nYXRlLnByb3RvdHlwZT1wYXJlbnQucHJvdG90eXBlO2NoaWxkLnByb3RvdHlwZT1uZXcgU3Vycm9nYXRlO2lmKHByb3RvUHJvcHMpXy5leHRlbmQoY2hpbGQucHJvdG90eXBlLHByb3RvUHJvcHMpO2NoaWxkLl9fc3VwZXJfXz1wYXJlbnQucHJvdG90eXBlO3JldHVybiBjaGlsZH07TW9kZWwuZXh0ZW5kPUNvbGxlY3Rpb24uZXh0ZW5kPVJvdXRlci5leHRlbmQ9Vmlldy5leHRlbmQ9SGlzdG9yeS5leHRlbmQ9ZXh0ZW5kO3ZhciB1cmxFcnJvcj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcignQSBcInVybFwiIHByb3BlcnR5IG9yIGZ1bmN0aW9uIG11c3QgYmUgc3BlY2lmaWVkJyl9O3ZhciB3cmFwRXJyb3I9ZnVuY3Rpb24obW9kZWwsb3B0aW9ucyl7dmFyIGVycm9yPW9wdGlvbnMuZXJyb3I7b3B0aW9ucy5lcnJvcj1mdW5jdGlvbihyZXNwKXtpZihlcnJvcillcnJvcihtb2RlbCxyZXNwLG9wdGlvbnMpO21vZGVsLnRyaWdnZXIoXCJlcnJvclwiLG1vZGVsLHJlc3Asb3B0aW9ucyl9fX0pLmNhbGwodGhpcyk7XG4vKlxuLy9AIHNvdXJjZU1hcHBpbmdVUkw9YmFja2JvbmUtbWluLm1hcFxuKi8iLCIoZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzKSB7XHJcbiAgICAgICAgRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyA9IEVsZW1lbnQucHJvdG90eXBlLm1zTWF0Y2hlc1NlbGVjdG9yIHx8IEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3RvcjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIUVsZW1lbnQucHJvdG90eXBlLmNsb3Nlc3QpIHtcclxuICAgICAgICBFbGVtZW50LnByb3RvdHlwZS5jbG9zZXN0ID0gZnVuY3Rpb24gKHMpIHtcclxuICAgICAgICAgICAgdmFyIGVsID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICAgIGlmIChlbC5tYXRjaGVzKHMpKSByZXR1cm4gZWw7XHJcbiAgICAgICAgICAgICAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQgfHwgZWwucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgfSB3aGlsZSAoZWwgIT09IG51bGwgJiYgZWwubm9kZVR5cGUgPT09IDEpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59KSgpOyIsIi8qIVxuICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2Mi4yLjRcbiAqIGh0dHA6Ly9qcXVlcnkuY29tL1xuICpcbiAqIEluY2x1ZGVzIFNpenpsZS5qc1xuICogaHR0cDovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAxNi0wNS0yMFQxNzoyM1pcbiAqL1xuXG4oZnVuY3Rpb24oIGdsb2JhbCwgZmFjdG9yeSApIHtcblxuXHRpZiAoIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiICkge1xuXHRcdC8vIEZvciBDb21tb25KUyBhbmQgQ29tbW9uSlMtbGlrZSBlbnZpcm9ubWVudHMgd2hlcmUgYSBwcm9wZXIgYHdpbmRvd2Bcblx0XHQvLyBpcyBwcmVzZW50LCBleGVjdXRlIHRoZSBmYWN0b3J5IGFuZCBnZXQgalF1ZXJ5LlxuXHRcdC8vIEZvciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3QgaGF2ZSBhIGB3aW5kb3dgIHdpdGggYSBgZG9jdW1lbnRgXG5cdFx0Ly8gKHN1Y2ggYXMgTm9kZS5qcyksIGV4cG9zZSBhIGZhY3RvcnkgYXMgbW9kdWxlLmV4cG9ydHMuXG5cdFx0Ly8gVGhpcyBhY2NlbnR1YXRlcyB0aGUgbmVlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGEgcmVhbCBgd2luZG93YC5cblx0XHQvLyBlLmcuIHZhciBqUXVlcnkgPSByZXF1aXJlKFwianF1ZXJ5XCIpKHdpbmRvdyk7XG5cdFx0Ly8gU2VlIHRpY2tldCAjMTQ1NDkgZm9yIG1vcmUgaW5mby5cblx0XHRtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/XG5cdFx0XHRmYWN0b3J5KCBnbG9iYWwsIHRydWUgKSA6XG5cdFx0XHRmdW5jdGlvbiggdyApIHtcblx0XHRcdFx0aWYgKCAhdy5kb2N1bWVudCApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoIFwialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkoIHcgKTtcblx0XHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0ZmFjdG9yeSggZ2xvYmFsICk7XG5cdH1cblxuLy8gUGFzcyB0aGlzIGlmIHdpbmRvdyBpcyBub3QgZGVmaW5lZCB5ZXRcbn0odHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uKCB3aW5kb3csIG5vR2xvYmFsICkge1xuXG4vLyBTdXBwb3J0OiBGaXJlZm94IDE4K1xuLy8gQ2FuJ3QgYmUgaW4gc3RyaWN0IG1vZGUsIHNldmVyYWwgbGlicyBpbmNsdWRpbmcgQVNQLk5FVCB0cmFjZVxuLy8gdGhlIHN0YWNrIHZpYSBhcmd1bWVudHMuY2FsbGVyLmNhbGxlZSBhbmQgRmlyZWZveCBkaWVzIGlmXG4vLyB5b3UgdHJ5IHRvIHRyYWNlIHRocm91Z2ggXCJ1c2Ugc3RyaWN0XCIgY2FsbCBjaGFpbnMuICgjMTMzMzUpXG4vL1widXNlIHN0cmljdFwiO1xudmFyIGFyciA9IFtdO1xuXG52YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG5cbnZhciBzbGljZSA9IGFyci5zbGljZTtcblxudmFyIGNvbmNhdCA9IGFyci5jb25jYXQ7XG5cbnZhciBwdXNoID0gYXJyLnB1c2g7XG5cbnZhciBpbmRleE9mID0gYXJyLmluZGV4T2Y7XG5cbnZhciBjbGFzczJ0eXBlID0ge307XG5cbnZhciB0b1N0cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmc7XG5cbnZhciBoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgc3VwcG9ydCA9IHt9O1xuXG5cblxudmFyXG5cdHZlcnNpb24gPSBcIjIuMi40XCIsXG5cblx0Ly8gRGVmaW5lIGEgbG9jYWwgY29weSBvZiBqUXVlcnlcblx0alF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXG5cdFx0Ly8gVGhlIGpRdWVyeSBvYmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnXG5cdFx0Ly8gTmVlZCBpbml0IGlmIGpRdWVyeSBpcyBjYWxsZWQgKGp1c3QgYWxsb3cgZXJyb3IgdG8gYmUgdGhyb3duIGlmIG5vdCBpbmNsdWRlZClcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCApO1xuXHR9LFxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4xXG5cdC8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUFxuXHRydHJpbSA9IC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZyxcblxuXHQvLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmdcblx0cm1zUHJlZml4ID0gL14tbXMtLyxcblx0cmRhc2hBbHBoYSA9IC8tKFtcXGRhLXpdKS9naSxcblxuXHQvLyBVc2VkIGJ5IGpRdWVyeS5jYW1lbENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpXG5cdGZjYW1lbENhc2UgPSBmdW5jdGlvbiggYWxsLCBsZXR0ZXIgKSB7XG5cdFx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xuXHR9O1xuXG5qUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0ge1xuXG5cdC8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWRcblx0anF1ZXJ5OiB2ZXJzaW9uLFxuXG5cdGNvbnN0cnVjdG9yOiBqUXVlcnksXG5cblx0Ly8gU3RhcnQgd2l0aCBhbiBlbXB0eSBzZWxlY3RvclxuXHRzZWxlY3RvcjogXCJcIixcblxuXHQvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDBcblx0bGVuZ3RoOiAwLFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdH0sXG5cblx0Ly8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUlxuXHQvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheVxuXHRnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7XG5cdFx0cmV0dXJuIG51bSAhPSBudWxsID9cblxuXHRcdFx0Ly8gUmV0dXJuIGp1c3QgdGhlIG9uZSBlbGVtZW50IGZyb20gdGhlIHNldFxuXHRcdFx0KCBudW0gPCAwID8gdGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51bSBdICkgOlxuXG5cdFx0XHQvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5XG5cdFx0XHRzbGljZS5jYWxsKCB0aGlzICk7XG5cdH0sXG5cblx0Ly8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFja1xuXHQvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldClcblx0cHVzaFN0YWNrOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cblx0XHQvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldFxuXHRcdHZhciByZXQgPSBqUXVlcnkubWVyZ2UoIHRoaXMuY29uc3RydWN0b3IoKSwgZWxlbXMgKTtcblxuXHRcdC8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpXG5cdFx0cmV0LnByZXZPYmplY3QgPSB0aGlzO1xuXHRcdHJldC5jb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuXG5cdFx0Ly8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxlbWVudCBzZXRcblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdC8vIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuXG5cdGVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrICk7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKCBlbGVtLCBpLCBlbGVtICk7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0c2xpY2U6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApICk7XG5cdH0sXG5cblx0Zmlyc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAwICk7XG5cdH0sXG5cblx0bGFzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIC0xICk7XG5cdH0sXG5cblx0ZXE6IGZ1bmN0aW9uKCBpICkge1xuXHRcdHZhciBsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdGogPSAraSArICggaSA8IDAgPyBsZW4gOiAwICk7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqID49IDAgJiYgaiA8IGxlbiA/IFsgdGhpc1sgaiBdIF0gOiBbXSApO1xuXHR9LFxuXG5cdGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHJldk9iamVjdCB8fCB0aGlzLmNvbnN0cnVjdG9yKCk7XG5cdH0sXG5cblx0Ly8gRm9yIGludGVybmFsIHVzZSBvbmx5LlxuXHQvLyBCZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRob2QsIG5vdCBsaWtlIGEgalF1ZXJ5IG1ldGhvZC5cblx0cHVzaDogcHVzaCxcblx0c29ydDogYXJyLnNvcnQsXG5cdHNwbGljZTogYXJyLnNwbGljZVxufTtcblxualF1ZXJ5LmV4dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigpIHtcblx0dmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lLFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgMCBdIHx8IHt9LFxuXHRcdGkgPSAxLFxuXHRcdGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cdFx0ZGVlcCA9IGZhbHNlO1xuXG5cdC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb25cblx0aWYgKCB0eXBlb2YgdGFyZ2V0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRkZWVwID0gdGFyZ2V0O1xuXG5cdFx0Ly8gU2tpcCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgaSBdIHx8IHt9O1xuXHRcdGkrKztcblx0fVxuXG5cdC8vIEhhbmRsZSBjYXNlIHdoZW4gdGFyZ2V0IGlzIGEgc3RyaW5nIG9yIHNvbWV0aGluZyAocG9zc2libGUgaW4gZGVlcCBjb3B5KVxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIgJiYgIWpRdWVyeS5pc0Z1bmN0aW9uKCB0YXJnZXQgKSApIHtcblx0XHR0YXJnZXQgPSB7fTtcblx0fVxuXG5cdC8vIEV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZFxuXHRpZiAoIGkgPT09IGxlbmd0aCApIHtcblx0XHR0YXJnZXQgPSB0aGlzO1xuXHRcdGktLTtcblx0fVxuXG5cdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXG5cdFx0Ly8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlc1xuXHRcdGlmICggKCBvcHRpb25zID0gYXJndW1lbnRzWyBpIF0gKSAhPSBudWxsICkge1xuXG5cdFx0XHQvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XG5cdFx0XHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRcdHNyYyA9IHRhcmdldFsgbmFtZSBdO1xuXHRcdFx0XHRjb3B5ID0gb3B0aW9uc1sgbmFtZSBdO1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3Bcblx0XHRcdFx0aWYgKCB0YXJnZXQgPT09IGNvcHkgKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcblx0XHRcdFx0aWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29weSApIHx8XG5cdFx0XHRcdFx0KCBjb3B5SXNBcnJheSA9IGpRdWVyeS5pc0FycmF5KCBjb3B5ICkgKSApICkge1xuXG5cdFx0XHRcdFx0aWYgKCBjb3B5SXNBcnJheSApIHtcblx0XHRcdFx0XHRcdGNvcHlJc0FycmF5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNBcnJheSggc3JjICkgPyBzcmMgOiBbXTtcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggc3JjICkgPyBzcmMgOiB7fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW1cblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBjb3B5ICk7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlc1xuXHRcdFx0XHR9IGVsc2UgaWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBjb3B5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3Rcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBVbmlxdWUgZm9yIGVhY2ggY29weSBvZiBqUXVlcnkgb24gdGhlIHBhZ2Vcblx0ZXhwYW5kbzogXCJqUXVlcnlcIiArICggdmVyc2lvbiArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAvXFxEL2csIFwiXCIgKSxcblxuXHQvLyBBc3N1bWUgalF1ZXJ5IGlzIHJlYWR5IHdpdGhvdXQgdGhlIHJlYWR5IG1vZHVsZVxuXHRpc1JlYWR5OiB0cnVlLFxuXG5cdGVycm9yOiBmdW5jdGlvbiggbXNnICkge1xuXHRcdHRocm93IG5ldyBFcnJvciggbXNnICk7XG5cdH0sXG5cblx0bm9vcDogZnVuY3Rpb24oKSB7fSxcblxuXHRpc0Z1bmN0aW9uOiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHJldHVybiBqUXVlcnkudHlwZSggb2JqICkgPT09IFwiZnVuY3Rpb25cIjtcblx0fSxcblxuXHRpc0FycmF5OiBBcnJheS5pc0FycmF5LFxuXG5cdGlzV2luZG93OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmogPT09IG9iai53aW5kb3c7XG5cdH0sXG5cblx0aXNOdW1lcmljOiBmdW5jdGlvbiggb2JqICkge1xuXG5cdFx0Ly8gcGFyc2VGbG9hdCBOYU5zIG51bWVyaWMtY2FzdCBmYWxzZSBwb3NpdGl2ZXMgKG51bGx8dHJ1ZXxmYWxzZXxcIlwiKVxuXHRcdC8vIC4uLmJ1dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKFwiMHguLi5cIilcblx0XHQvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBOYU5cblx0XHQvLyBhZGRpbmcgMSBjb3JyZWN0cyBsb3NzIG9mIHByZWNpc2lvbiBmcm9tIHBhcnNlRmxvYXQgKCMxNTEwMClcblx0XHR2YXIgcmVhbFN0cmluZ09iaiA9IG9iaiAmJiBvYmoudG9TdHJpbmcoKTtcblx0XHRyZXR1cm4gIWpRdWVyeS5pc0FycmF5KCBvYmogKSAmJiAoIHJlYWxTdHJpbmdPYmogLSBwYXJzZUZsb2F0KCByZWFsU3RyaW5nT2JqICkgKyAxICkgPj0gMDtcblx0fSxcblxuXHRpc1BsYWluT2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBrZXk7XG5cblx0XHQvLyBOb3QgcGxhaW4gb2JqZWN0czpcblx0XHQvLyAtIEFueSBvYmplY3Qgb3IgdmFsdWUgd2hvc2UgaW50ZXJuYWwgW1tDbGFzc11dIHByb3BlcnR5IGlzIG5vdCBcIltvYmplY3QgT2JqZWN0XVwiXG5cdFx0Ly8gLSBET00gbm9kZXNcblx0XHQvLyAtIHdpbmRvd1xuXHRcdGlmICggalF1ZXJ5LnR5cGUoIG9iaiApICE9PSBcIm9iamVjdFwiIHx8IG9iai5ub2RlVHlwZSB8fCBqUXVlcnkuaXNXaW5kb3coIG9iaiApICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIE5vdCBvd24gY29uc3RydWN0b3IgcHJvcGVydHkgbXVzdCBiZSBPYmplY3Rcblx0XHRpZiAoIG9iai5jb25zdHJ1Y3RvciAmJlxuXHRcdFx0XHQhaGFzT3duLmNhbGwoIG9iaiwgXCJjb25zdHJ1Y3RvclwiICkgJiZcblx0XHRcdFx0IWhhc093bi5jYWxsKCBvYmouY29uc3RydWN0b3IucHJvdG90eXBlIHx8IHt9LCBcImlzUHJvdG90eXBlT2ZcIiApICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIE93biBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhdGVkIGZpcnN0bHksIHNvIHRvIHNwZWVkIHVwLFxuXHRcdC8vIGlmIGxhc3Qgb25lIGlzIG93biwgdGhlbiBhbGwgcHJvcGVydGllcyBhcmUgb3duXG5cdFx0Zm9yICgga2V5IGluIG9iaiApIHt9XG5cblx0XHRyZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgfHwgaGFzT3duLmNhbGwoIG9iaiwga2V5ICk7XG5cdH0sXG5cblx0aXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgbmFtZTtcblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0dHlwZTogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRpZiAoIG9iaiA9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIG9iaiArIFwiXCI7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjAsIGlPUzw2IChmdW5jdGlvbmlzaCBSZWdFeHApXG5cdFx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiID9cblx0XHRcdGNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwoIG9iaiApIF0gfHwgXCJvYmplY3RcIiA6XG5cdFx0XHR0eXBlb2Ygb2JqO1xuXHR9LFxuXG5cdC8vIEV2YWx1YXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0XG5cdGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlICkge1xuXHRcdHZhciBzY3JpcHQsXG5cdFx0XHRpbmRpcmVjdCA9IGV2YWw7XG5cblx0XHRjb2RlID0galF1ZXJ5LnRyaW0oIGNvZGUgKTtcblxuXHRcdGlmICggY29kZSApIHtcblxuXHRcdFx0Ly8gSWYgdGhlIGNvZGUgaW5jbHVkZXMgYSB2YWxpZCwgcHJvbG9ndWUgcG9zaXRpb25cblx0XHRcdC8vIHN0cmljdCBtb2RlIHByYWdtYSwgZXhlY3V0ZSBjb2RlIGJ5IGluamVjdGluZyBhXG5cdFx0XHQvLyBzY3JpcHQgdGFnIGludG8gdGhlIGRvY3VtZW50LlxuXHRcdFx0aWYgKCBjb2RlLmluZGV4T2YoIFwidXNlIHN0cmljdFwiICkgPT09IDEgKSB7XG5cdFx0XHRcdHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwic2NyaXB0XCIgKTtcblx0XHRcdFx0c2NyaXB0LnRleHQgPSBjb2RlO1xuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTtcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBhdm9pZCB0aGUgRE9NIG5vZGUgY3JlYXRpb24sIGluc2VydGlvblxuXHRcdFx0XHQvLyBhbmQgcmVtb3ZhbCBieSB1c2luZyBhbiBpbmRpcmVjdCBnbG9iYWwgZXZhbFxuXG5cdFx0XHRcdGluZGlyZWN0KCBjb2RlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8vIENvbnZlcnQgZGFzaGVkIHRvIGNhbWVsQ2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVsZXNcblx0Ly8gU3VwcG9ydDogSUU5LTExK1xuXHQvLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpXG5cdGNhbWVsQ2FzZTogZnVuY3Rpb24oIHN0cmluZyApIHtcblx0XHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoIHJtc1ByZWZpeCwgXCJtcy1cIiApLnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTtcblx0fSxcblxuXHRub2RlTmFtZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdH0sXG5cblx0ZWFjaDogZnVuY3Rpb24oIG9iaiwgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGxlbmd0aCwgaSA9IDA7XG5cblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBvYmogKSApIHtcblx0XHRcdGxlbmd0aCA9IG9iai5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBvYmogKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMVxuXHR0cmltOiBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRyZXR1cm4gdGV4dCA9PSBudWxsID9cblx0XHRcdFwiXCIgOlxuXHRcdFx0KCB0ZXh0ICsgXCJcIiApLnJlcGxhY2UoIHJ0cmltLCBcIlwiICk7XG5cdH0sXG5cblx0Ly8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7XG5cdFx0dmFyIHJldCA9IHJlc3VsdHMgfHwgW107XG5cblx0XHRpZiAoIGFyciAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBpc0FycmF5TGlrZSggT2JqZWN0KCBhcnIgKSApICkge1xuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHJldCxcblx0XHRcdFx0XHR0eXBlb2YgYXJyID09PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRbIGFyciBdIDogYXJyXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmNhbGwoIHJldCwgYXJyICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHRpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyLCBpICkge1xuXHRcdHJldHVybiBhcnIgPT0gbnVsbCA/IC0xIDogaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkgKTtcblx0fSxcblxuXHRtZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7XG5cdFx0dmFyIGxlbiA9ICtzZWNvbmQubGVuZ3RoLFxuXHRcdFx0aiA9IDAsXG5cdFx0XHRpID0gZmlyc3QubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XG5cdFx0XHRmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGogXTtcblx0XHR9XG5cblx0XHRmaXJzdC5sZW5ndGggPSBpO1xuXG5cdFx0cmV0dXJuIGZpcnN0O1xuXHR9LFxuXG5cdGdyZXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGludmVydCApIHtcblx0XHR2YXIgY2FsbGJhY2tJbnZlcnNlLFxuXHRcdFx0bWF0Y2hlcyA9IFtdLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGgsXG5cdFx0XHRjYWxsYmFja0V4cGVjdCA9ICFpbnZlcnQ7XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBzYXZpbmcgdGhlIGl0ZW1zXG5cdFx0Ly8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb25cblx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdGNhbGxiYWNrSW52ZXJzZSA9ICFjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApO1xuXHRcdFx0aWYgKCBjYWxsYmFja0ludmVyc2UgIT09IGNhbGxiYWNrRXhwZWN0ICkge1xuXHRcdFx0XHRtYXRjaGVzLnB1c2goIGVsZW1zWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbWF0Y2hlcztcblx0fSxcblxuXHQvLyBhcmcgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7XG5cdFx0dmFyIGxlbmd0aCwgdmFsdWUsXG5cdFx0XHRpID0gMCxcblx0XHRcdHJldCA9IFtdO1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIHRyYW5zbGF0aW5nIGVhY2ggb2YgdGhlIGl0ZW1zIHRvIHRoZWlyIG5ldyB2YWx1ZXNcblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBlbGVtcyApICkge1xuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVjdCxcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBlbGVtcyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRcdHJldHVybiBjb25jYXQuYXBwbHkoIFtdLCByZXQgKTtcblx0fSxcblxuXHQvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9iamVjdHNcblx0Z3VpZDogMSxcblxuXHQvLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnlcblx0Ly8gYXJndW1lbnRzLlxuXHRwcm94eTogZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkge1xuXHRcdHZhciB0bXAsIGFyZ3MsIHByb3h5O1xuXG5cdFx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHRtcCA9IGZuWyBjb250ZXh0IF07XG5cdFx0XHRjb250ZXh0ID0gZm47XG5cdFx0XHRmbiA9IHRtcDtcblx0XHR9XG5cblx0XHQvLyBRdWljayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlY1xuXHRcdC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuXG5cdFx0aWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24oIGZuICkgKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFNpbXVsYXRlZCBiaW5kXG5cdFx0YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApO1xuXHRcdHByb3h5ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gZm4uYXBwbHkoIGNvbnRleHQgfHwgdGhpcywgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTtcblx0XHR9O1xuXG5cdFx0Ly8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkXG5cdFx0cHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKys7XG5cblx0XHRyZXR1cm4gcHJveHk7XG5cdH0sXG5cblx0bm93OiBEYXRlLm5vdyxcblxuXHQvLyBqUXVlcnkuc3VwcG9ydCBpcyBub3QgdXNlZCBpbiBDb3JlIGJ1dCBvdGhlciBwcm9qZWN0cyBhdHRhY2ggdGhlaXJcblx0Ly8gcHJvcGVydGllcyB0byBpdCBzbyBpdCBuZWVkcyB0byBleGlzdC5cblx0c3VwcG9ydDogc3VwcG9ydFxufSApO1xuXG4vLyBKU0hpbnQgd291bGQgZXJyb3Igb24gdGhpcyBjb2RlIGR1ZSB0byB0aGUgU3ltYm9sIG5vdCBiZWluZyBkZWZpbmVkIGluIEVTNS5cbi8vIERlZmluaW5nIHRoaXMgZ2xvYmFsIGluIC5qc2hpbnRyYyB3b3VsZCBjcmVhdGUgYSBkYW5nZXIgb2YgdXNpbmcgdGhlIGdsb2JhbFxuLy8gdW5ndWFyZGVkIGluIGFub3RoZXIgcGxhY2UsIGl0IHNlZW1zIHNhZmVyIHRvIGp1c3QgZGlzYWJsZSBKU0hpbnQgZm9yIHRoZXNlXG4vLyB0aHJlZSBsaW5lcy5cbi8qIGpzaGludCBpZ25vcmU6IHN0YXJ0ICovXG5pZiAoIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiApIHtcblx0alF1ZXJ5LmZuWyBTeW1ib2wuaXRlcmF0b3IgXSA9IGFyclsgU3ltYm9sLml0ZXJhdG9yIF07XG59XG4vKiBqc2hpbnQgaWdub3JlOiBlbmQgKi9cblxuLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwXG5qUXVlcnkuZWFjaCggXCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbFwiLnNwbGl0KCBcIiBcIiApLFxuZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdGNsYXNzMnR5cGVbIFwiW29iamVjdCBcIiArIG5hbWUgKyBcIl1cIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xufSApO1xuXG5mdW5jdGlvbiBpc0FycmF5TGlrZSggb2JqICkge1xuXG5cdC8vIFN1cHBvcnQ6IGlPUyA4LjIgKG5vdCByZXByb2R1Y2libGUgaW4gc2ltdWxhdG9yKVxuXHQvLyBgaW5gIGNoZWNrIHVzZWQgdG8gcHJldmVudCBKSVQgZXJyb3IgKGdoLTIxNDUpXG5cdC8vIGhhc093biBpc24ndCB1c2VkIGhlcmUgZHVlIHRvIGZhbHNlIG5lZ2F0aXZlc1xuXHQvLyByZWdhcmRpbmcgTm9kZWxpc3QgbGVuZ3RoIGluIElFXG5cdHZhciBsZW5ndGggPSAhIW9iaiAmJiBcImxlbmd0aFwiIGluIG9iaiAmJiBvYmoubGVuZ3RoLFxuXHRcdHR5cGUgPSBqUXVlcnkudHlwZSggb2JqICk7XG5cblx0aWYgKCB0eXBlID09PSBcImZ1bmN0aW9uXCIgfHwgalF1ZXJ5LmlzV2luZG93KCBvYmogKSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHlwZSA9PT0gXCJhcnJheVwiIHx8IGxlbmd0aCA9PT0gMCB8fFxuXHRcdHR5cGVvZiBsZW5ndGggPT09IFwibnVtYmVyXCIgJiYgbGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7XG59XG52YXIgU2l6emxlID1cbi8qIVxuICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUgdjIuMi4xXG4gKiBodHRwOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqXG4gKiBEYXRlOiAyMDE1LTEwLTE3XG4gKi9cbihmdW5jdGlvbiggd2luZG93ICkge1xuXG52YXIgaSxcblx0c3VwcG9ydCxcblx0RXhwcixcblx0Z2V0VGV4dCxcblx0aXNYTUwsXG5cdHRva2VuaXplLFxuXHRjb21waWxlLFxuXHRzZWxlY3QsXG5cdG91dGVybW9zdENvbnRleHQsXG5cdHNvcnRJbnB1dCxcblx0aGFzRHVwbGljYXRlLFxuXG5cdC8vIExvY2FsIGRvY3VtZW50IHZhcnNcblx0c2V0RG9jdW1lbnQsXG5cdGRvY3VtZW50LFxuXHRkb2NFbGVtLFxuXHRkb2N1bWVudElzSFRNTCxcblx0cmJ1Z2d5UVNBLFxuXHRyYnVnZ3lNYXRjaGVzLFxuXHRtYXRjaGVzLFxuXHRjb250YWlucyxcblxuXHQvLyBJbnN0YW5jZS1zcGVjaWZpYyBkYXRhXG5cdGV4cGFuZG8gPSBcInNpenpsZVwiICsgMSAqIG5ldyBEYXRlKCksXG5cdHByZWZlcnJlZERvYyA9IHdpbmRvdy5kb2N1bWVudCxcblx0ZGlycnVucyA9IDAsXG5cdGRvbmUgPSAwLFxuXHRjbGFzc0NhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0dG9rZW5DYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdGNvbXBpbGVyQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHtcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gMDtcblx0fSxcblxuXHQvLyBHZW5lcmFsLXB1cnBvc2UgY29uc3RhbnRzXG5cdE1BWF9ORUdBVElWRSA9IDEgPDwgMzEsXG5cblx0Ly8gSW5zdGFuY2UgbWV0aG9kc1xuXHRoYXNPd24gPSAoe30pLmhhc093blByb3BlcnR5LFxuXHRhcnIgPSBbXSxcblx0cG9wID0gYXJyLnBvcCxcblx0cHVzaF9uYXRpdmUgPSBhcnIucHVzaCxcblx0cHVzaCA9IGFyci5wdXNoLFxuXHRzbGljZSA9IGFyci5zbGljZSxcblx0Ly8gVXNlIGEgc3RyaXBwZWQtZG93biBpbmRleE9mIGFzIGl0J3MgZmFzdGVyIHRoYW4gbmF0aXZlXG5cdC8vIGh0dHA6Ly9qc3BlcmYuY29tL3Rob3ItaW5kZXhvZi12cy1mb3IvNVxuXHRpbmRleE9mID0gZnVuY3Rpb24oIGxpc3QsIGVsZW0gKSB7XG5cdFx0dmFyIGkgPSAwLFxuXHRcdFx0bGVuID0gbGlzdC5sZW5ndGg7XG5cdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRpZiAoIGxpc3RbaV0gPT09IGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5cblx0Ym9vbGVhbnMgPSBcImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkXCIsXG5cblx0Ly8gUmVndWxhciBleHByZXNzaW9uc1xuXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0ZXNwYWNlXG5cdHdoaXRlc3BhY2UgPSBcIltcXFxceDIwXFxcXHRcXFxcclxcXFxuXFxcXGZdXCIsXG5cblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI3ZhbHVlLWRlZi1pZGVudGlmaWVyXG5cdGlkZW50aWZpZXIgPSBcIig/OlxcXFxcXFxcLnxbXFxcXHctXXxbXlxcXFx4MDAtXFxcXHhhMF0pK1wiLFxuXG5cdC8vIEF0dHJpYnV0ZSBzZWxlY3RvcnM6IGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9yc1xuXHRhdHRyaWJ1dGVzID0gXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcIiArIHdoaXRlc3BhY2UgK1xuXHRcdC8vIE9wZXJhdG9yIChjYXB0dXJlIDIpXG5cdFx0XCIqKFsqXiR8IX5dPz0pXCIgKyB3aGl0ZXNwYWNlICtcblx0XHQvLyBcIkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBDU1MgaWRlbnRpZmllcnMgW2NhcHR1cmUgNV0gb3Igc3RyaW5ncyBbY2FwdHVyZSAzIG9yIGNhcHR1cmUgNF1cIlxuXHRcdFwiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIgKyBpZGVudGlmaWVyICsgXCIpKXwpXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIipcXFxcXVwiLFxuXG5cdHBzZXVkb3MgPSBcIjooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XFxcXCgoXCIgK1xuXHRcdC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBwcmVGaWx0ZXIsIHByZWZlciBhcmd1bWVudHM6XG5cdFx0Ly8gMS4gcXVvdGVkIChjYXB0dXJlIDM7IGNhcHR1cmUgNCBvciBjYXB0dXJlIDUpXG5cdFx0XCIoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXxcIiArXG5cdFx0Ly8gMi4gc2ltcGxlIChjYXB0dXJlIDYpXG5cdFx0XCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18XCIgKyBhdHRyaWJ1dGVzICsgXCIpKil8XCIgK1xuXHRcdC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMilcblx0XHRcIi4qXCIgK1xuXHRcdFwiKVxcXFwpfClcIixcblxuXHQvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyXG5cdHJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwiK1wiLCBcImdcIiApLFxuXHRydHJpbSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIiArIHdoaXRlc3BhY2UgKyBcIiskXCIsIFwiZ1wiICksXG5cblx0cmNvbW1hID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqLFwiICsgd2hpdGVzcGFjZSArIFwiKlwiICksXG5cdHJjb21iaW5hdG9ycyA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKihbPit+XXxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXG5cdHJhdHRyaWJ1dGVRdW90ZXMgPSBuZXcgUmVnRXhwKCBcIj1cIiArIHdoaXRlc3BhY2UgKyBcIiooW15cXFxcXSdcXFwiXSo/KVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFxdXCIsIFwiZ1wiICksXG5cblx0cnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3MgKSxcblx0cmlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCBcIl5cIiArIGlkZW50aWZpZXIgKyBcIiRcIiApLFxuXG5cdG1hdGNoRXhwciA9IHtcblx0XHRcIklEXCI6IG5ldyBSZWdFeHAoIFwiXiMoXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIkNMQVNTXCI6IG5ldyBSZWdFeHAoIFwiXlxcXFwuKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJUQUdcIjogbmV3IFJlZ0V4cCggXCJeKFwiICsgaWRlbnRpZmllciArIFwifFsqXSlcIiApLFxuXHRcdFwiQVRUUlwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIGF0dHJpYnV0ZXMgKSxcblx0XHRcIlBTRVVET1wiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHBzZXVkb3MgKSxcblx0XHRcIkNISUxEXCI6IG5ldyBSZWdFeHAoIFwiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFxcXChcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqKGV2ZW58b2RkfCgoWystXXwpKFxcXFxkKilufClcIiArIHdoaXRlc3BhY2UgKyBcIiooPzooWystXXwpXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKihcXFxcZCspfCkpXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KVwiLCBcImlcIiApLFxuXHRcdFwiYm9vbFwiOiBuZXcgUmVnRXhwKCBcIl4oPzpcIiArIGJvb2xlYW5zICsgXCIpJFwiLCBcImlcIiApLFxuXHRcdC8vIEZvciB1c2UgaW4gbGlicmFyaWVzIGltcGxlbWVudGluZyAuaXMoKVxuXHRcdC8vIFdlIHVzZSB0aGlzIGZvciBQT1MgbWF0Y2hpbmcgaW4gYHNlbGVjdGBcblx0XHRcIm5lZWRzQ29udGV4dFwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIgK1xuXHRcdFx0d2hpdGVzcGFjZSArIFwiKigoPzotXFxcXGQpP1xcXFxkKilcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpKD89W14tXXwkKVwiLCBcImlcIiApXG5cdH0sXG5cblx0cmlucHV0cyA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJoZWFkZXIgPSAvXmhcXGQkL2ksXG5cblx0cm5hdGl2ZSA9IC9eW157XStcXHtcXHMqXFxbbmF0aXZlIFxcdy8sXG5cblx0Ly8gRWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzXG5cdHJxdWlja0V4cHIgPSAvXig/OiMoW1xcdy1dKyl8KFxcdyspfFxcLihbXFx3LV0rKSkkLyxcblxuXHRyc2libGluZyA9IC9bK35dLyxcblx0cmVzY2FwZSA9IC8nfFxcXFwvZyxcblxuXHQvLyBDU1MgZXNjYXBlcyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFyYWN0ZXJzXG5cdHJ1bmVzY2FwZSA9IG5ldyBSZWdFeHAoIFwiXFxcXFxcXFwoW1xcXFxkYS1mXXsxLDZ9XCIgKyB3aGl0ZXNwYWNlICsgXCI/fChcIiArIHdoaXRlc3BhY2UgKyBcIil8LilcIiwgXCJpZ1wiICksXG5cdGZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBfLCBlc2NhcGVkLCBlc2NhcGVkV2hpdGVzcGFjZSApIHtcblx0XHR2YXIgaGlnaCA9IFwiMHhcIiArIGVzY2FwZWQgLSAweDEwMDAwO1xuXHRcdC8vIE5hTiBtZWFucyBub24tY29kZXBvaW50XG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveDwyNFxuXHRcdC8vIFdvcmthcm91bmQgZXJyb25lb3VzIG51bWVyaWMgaW50ZXJwcmV0YXRpb24gb2YgK1wiMHhcIlxuXHRcdHJldHVybiBoaWdoICE9PSBoaWdoIHx8IGVzY2FwZWRXaGl0ZXNwYWNlID9cblx0XHRcdGVzY2FwZWQgOlxuXHRcdFx0aGlnaCA8IDAgP1xuXHRcdFx0XHQvLyBCTVAgY29kZXBvaW50XG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOlxuXHRcdFx0XHQvLyBTdXBwbGVtZW50YWwgUGxhbmUgY29kZXBvaW50IChzdXJyb2dhdGUgcGFpcilcblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCA+PiAxMCB8IDB4RDgwMCwgaGlnaCAmIDB4M0ZGIHwgMHhEQzAwICk7XG5cdH0sXG5cblx0Ly8gVXNlZCBmb3IgaWZyYW1lc1xuXHQvLyBTZWUgc2V0RG9jdW1lbnQoKVxuXHQvLyBSZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBjYXVzZXMgYSBcIlBlcm1pc3Npb24gRGVuaWVkXCJcblx0Ly8gZXJyb3IgaW4gSUVcblx0dW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuXHRcdHNldERvY3VtZW50KCk7XG5cdH07XG5cbi8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApXG50cnkge1xuXHRwdXNoLmFwcGx5KFxuXHRcdChhcnIgPSBzbGljZS5jYWxsKCBwcmVmZXJyZWREb2MuY2hpbGROb2RlcyApKSxcblx0XHRwcmVmZXJyZWREb2MuY2hpbGROb2Rlc1xuXHQpO1xuXHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMFxuXHQvLyBEZXRlY3Qgc2lsZW50bHkgZmFpbGluZyBwdXNoLmFwcGx5XG5cdGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7XG59IGNhdGNoICggZSApIHtcblx0cHVzaCA9IHsgYXBwbHk6IGFyci5sZW5ndGggP1xuXG5cdFx0Ly8gTGV2ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGVcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHRwdXNoX25hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKGVscykgKTtcblx0XHR9IDpcblxuXHRcdC8vIFN1cHBvcnQ6IElFPDlcblx0XHQvLyBPdGhlcndpc2UgYXBwZW5kIGRpcmVjdGx5XG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0dmFyIGogPSB0YXJnZXQubGVuZ3RoLFxuXHRcdFx0XHRpID0gMDtcblx0XHRcdC8vIENhbid0IHRydXN0IE5vZGVMaXN0Lmxlbmd0aFxuXHRcdFx0d2hpbGUgKCAodGFyZ2V0W2orK10gPSBlbHNbaSsrXSkgKSB7fVxuXHRcdFx0dGFyZ2V0Lmxlbmd0aCA9IGogLSAxO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gU2l6emxlKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIG0sIGksIGVsZW0sIG5pZCwgbmlkc2VsZWN0LCBtYXRjaCwgZ3JvdXBzLCBuZXdTZWxlY3Rvcixcblx0XHRuZXdDb250ZXh0ID0gY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQsXG5cblx0XHQvLyBub2RlVHlwZSBkZWZhdWx0cyB0byA5LCBzaW5jZSBjb250ZXh0IGRlZmF1bHRzIHRvIGRvY3VtZW50XG5cdFx0bm9kZVR5cGUgPSBjb250ZXh0ID8gY29udGV4dC5ub2RlVHlwZSA6IDk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGZyb20gY2FsbHMgd2l0aCBpbnZhbGlkIHNlbGVjdG9yIG9yIGNvbnRleHRcblx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgfHwgIXNlbGVjdG9yIHx8XG5cdFx0bm9kZVR5cGUgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgJiYgbm9kZVR5cGUgIT09IDExICkge1xuXG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH1cblxuXHQvLyBUcnkgdG8gc2hvcnRjdXQgZmluZCBvcGVyYXRpb25zIChhcyBvcHBvc2VkIHRvIGZpbHRlcnMpIGluIEhUTUwgZG9jdW1lbnRzXG5cdGlmICggIXNlZWQgKSB7XG5cblx0XHRpZiAoICggY29udGV4dCA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogcHJlZmVycmVkRG9jICkgIT09IGRvY3VtZW50ICkge1xuXHRcdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0XHR9XG5cdFx0Y29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7XG5cblx0XHRpZiAoIGRvY3VtZW50SXNIVE1MICkge1xuXG5cdFx0XHQvLyBJZiB0aGUgc2VsZWN0b3IgaXMgc3VmZmljaWVudGx5IHNpbXBsZSwgdHJ5IHVzaW5nIGEgXCJnZXQqQnkqXCIgRE9NIG1ldGhvZFxuXHRcdFx0Ly8gKGV4Y2VwdGluZyBEb2N1bWVudEZyYWdtZW50IGNvbnRleHQsIHdoZXJlIHRoZSBtZXRob2RzIGRvbid0IGV4aXN0KVxuXHRcdFx0aWYgKCBub2RlVHlwZSAhPT0gMTEgJiYgKG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApKSApIHtcblxuXHRcdFx0XHQvLyBJRCBzZWxlY3RvclxuXHRcdFx0XHRpZiAoIChtID0gbWF0Y2hbMV0pICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9jdW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIChlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRcdGlmICggZWxlbS5pZCA9PT0gbSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBFbGVtZW50IGNvbnRleHRcblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdGlmICggbmV3Q29udGV4dCAmJiAoZWxlbSA9IG5ld0NvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgJiZcblx0XHRcdFx0XHRcdFx0Y29udGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJlxuXHRcdFx0XHRcdFx0XHRlbGVtLmlkID09PSBtICkge1xuXG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHlwZSBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFsyXSApIHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdFx0Ly8gQ2xhc3Mgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggKG0gPSBtYXRjaFszXSkgJiYgc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmXG5cdFx0XHRcdFx0Y29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBtICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUYWtlIGFkdmFudGFnZSBvZiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHRpZiAoIHN1cHBvcnQucXNhICYmXG5cdFx0XHRcdCFjb21waWxlckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF0gJiZcblx0XHRcdFx0KCFyYnVnZ3lRU0EgfHwgIXJidWdneVFTQS50ZXN0KCBzZWxlY3RvciApKSApIHtcblxuXHRcdFx0XHRpZiAoIG5vZGVUeXBlICE9PSAxICkge1xuXHRcdFx0XHRcdG5ld0NvbnRleHQgPSBjb250ZXh0O1xuXHRcdFx0XHRcdG5ld1NlbGVjdG9yID0gc2VsZWN0b3I7XG5cblx0XHRcdFx0Ly8gcVNBIGxvb2tzIG91dHNpZGUgRWxlbWVudCBjb250ZXh0LCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50XG5cdFx0XHRcdC8vIFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGlzIHdvcmthcm91bmQgdGVjaG5pcXVlXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OFxuXHRcdFx0XHQvLyBFeGNsdWRlIG9iamVjdCBlbGVtZW50c1xuXHRcdFx0XHR9IGVsc2UgaWYgKCBjb250ZXh0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdFx0XHQvLyBDYXB0dXJlIHRoZSBjb250ZXh0IElELCBzZXR0aW5nIGl0IGZpcnN0IGlmIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdGlmICggKG5pZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCBcImlkXCIgKSkgKSB7XG5cdFx0XHRcdFx0XHRuaWQgPSBuaWQucmVwbGFjZSggcmVzY2FwZSwgXCJcXFxcJCZcIiApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0LnNldEF0dHJpYnV0ZSggXCJpZFwiLCAobmlkID0gZXhwYW5kbykgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmVmaXggZXZlcnkgc2VsZWN0b3IgaW4gdGhlIGxpc3Rcblx0XHRcdFx0XHRncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHRcdFx0XHRpID0gZ3JvdXBzLmxlbmd0aDtcblx0XHRcdFx0XHRuaWRzZWxlY3QgPSByaWRlbnRpZmllci50ZXN0KCBuaWQgKSA/IFwiI1wiICsgbmlkIDogXCJbaWQ9J1wiICsgbmlkICsgXCInXVwiO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0Z3JvdXBzW2ldID0gbmlkc2VsZWN0ICsgXCIgXCIgKyB0b1NlbGVjdG9yKCBncm91cHNbaV0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bmV3U2VsZWN0b3IgPSBncm91cHMuam9pbiggXCIsXCIgKTtcblxuXHRcdFx0XHRcdC8vIEV4cGFuZCBjb250ZXh0IGZvciBzaWJsaW5nIHNlbGVjdG9yc1xuXHRcdFx0XHRcdG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggbmV3U2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsXG5cdFx0XHRcdFx0XHRcdG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0b3IgKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKCBxc2FFcnJvciApIHtcblx0XHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdFx0aWYgKCBuaWQgPT09IGV4cGFuZG8gKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHQucmVtb3ZlQXR0cmlidXRlKCBcImlkXCIgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBbGwgb3RoZXJzXG5cdHJldHVybiBzZWxlY3QoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApO1xufVxuXG4vKipcbiAqIENyZWF0ZSBrZXktdmFsdWUgY2FjaGVzIG9mIGxpbWl0ZWQgc2l6ZVxuICogQHJldHVybnMge2Z1bmN0aW9uKHN0cmluZywgb2JqZWN0KX0gUmV0dXJucyB0aGUgT2JqZWN0IGRhdGEgYWZ0ZXIgc3RvcmluZyBpdCBvbiBpdHNlbGYgd2l0aFxuICpcdHByb3BlcnR5IG5hbWUgdGhlIChzcGFjZS1zdWZmaXhlZCkgc3RyaW5nIGFuZCAoaWYgdGhlIGNhY2hlIGlzIGxhcmdlciB0aGFuIEV4cHIuY2FjaGVMZW5ndGgpXG4gKlx0ZGVsZXRpbmcgdGhlIG9sZGVzdCBlbnRyeVxuICovXG5mdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHtcblx0dmFyIGtleXMgPSBbXTtcblxuXHRmdW5jdGlvbiBjYWNoZSgga2V5LCB2YWx1ZSApIHtcblx0XHQvLyBVc2UgKGtleSArIFwiIFwiKSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgcHJvdG90eXBlIHByb3BlcnRpZXMgKHNlZSBJc3N1ZSAjMTU3KVxuXHRcdGlmICgga2V5cy5wdXNoKCBrZXkgKyBcIiBcIiApID4gRXhwci5jYWNoZUxlbmd0aCApIHtcblx0XHRcdC8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllc1xuXHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlzLnNoaWZ0KCkgXTtcblx0XHR9XG5cdFx0cmV0dXJuIChjYWNoZVsga2V5ICsgXCIgXCIgXSA9IHZhbHVlKTtcblx0fVxuXHRyZXR1cm4gY2FjaGU7XG59XG5cbi8qKlxuICogTWFyayBhIGZ1bmN0aW9uIGZvciBzcGVjaWFsIHVzZSBieSBTaXp6bGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBtYXJrXG4gKi9cbmZ1bmN0aW9uIG1hcmtGdW5jdGlvbiggZm4gKSB7XG5cdGZuWyBleHBhbmRvIF0gPSB0cnVlO1xuXHRyZXR1cm4gZm47XG59XG5cbi8qKlxuICogU3VwcG9ydCB0ZXN0aW5nIHVzaW5nIGFuIGVsZW1lbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFBhc3NlZCB0aGUgY3JlYXRlZCBkaXYgYW5kIGV4cGVjdHMgYSBib29sZWFuIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc3NlcnQoIGZuICkge1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuXHR0cnkge1xuXHRcdHJldHVybiAhIWZuKCBkaXYgKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBmaW5hbGx5IHtcblx0XHQvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHRcblx0XHRpZiAoIGRpdi5wYXJlbnROb2RlICkge1xuXHRcdFx0ZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGRpdiApO1xuXHRcdH1cblx0XHQvLyByZWxlYXNlIG1lbW9yeSBpbiBJRVxuXHRcdGRpdiA9IG51bGw7XG5cdH1cbn1cblxuLyoqXG4gKiBBZGRzIHRoZSBzYW1lIGhhbmRsZXIgZm9yIGFsbCBvZiB0aGUgc3BlY2lmaWVkIGF0dHJzXG4gKiBAcGFyYW0ge1N0cmluZ30gYXR0cnMgUGlwZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGFwcGxpZWRcbiAqL1xuZnVuY3Rpb24gYWRkSGFuZGxlKCBhdHRycywgaGFuZGxlciApIHtcblx0dmFyIGFyciA9IGF0dHJzLnNwbGl0KFwifFwiKSxcblx0XHRpID0gYXJyLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRFeHByLmF0dHJIYW5kbGVbIGFycltpXSBdID0gaGFuZGxlcjtcblx0fVxufVxuXG4vKipcbiAqIENoZWNrcyBkb2N1bWVudCBvcmRlciBvZiB0d28gc2libGluZ3NcbiAqIEBwYXJhbSB7RWxlbWVudH0gYVxuICogQHBhcmFtIHtFbGVtZW50fSBiXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBSZXR1cm5zIGxlc3MgdGhhbiAwIGlmIGEgcHJlY2VkZXMgYiwgZ3JlYXRlciB0aGFuIDAgaWYgYSBmb2xsb3dzIGJcbiAqL1xuZnVuY3Rpb24gc2libGluZ0NoZWNrKCBhLCBiICkge1xuXHR2YXIgY3VyID0gYiAmJiBhLFxuXHRcdGRpZmYgPSBjdXIgJiYgYS5ub2RlVHlwZSA9PT0gMSAmJiBiLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHQoIH5iLnNvdXJjZUluZGV4IHx8IE1BWF9ORUdBVElWRSApIC1cblx0XHRcdCggfmEuc291cmNlSW5kZXggfHwgTUFYX05FR0FUSVZFICk7XG5cblx0Ly8gVXNlIElFIHNvdXJjZUluZGV4IGlmIGF2YWlsYWJsZSBvbiBib3RoIG5vZGVzXG5cdGlmICggZGlmZiApIHtcblx0XHRyZXR1cm4gZGlmZjtcblx0fVxuXG5cdC8vIENoZWNrIGlmIGIgZm9sbG93cyBhXG5cdGlmICggY3VyICkge1xuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5uZXh0U2libGluZykgKSB7XG5cdFx0XHRpZiAoIGN1ciA9PT0gYiApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhID8gMSA6IC0xO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgaW5wdXQgdHlwZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0UHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBidXR0b25zXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gKG5hbWUgPT09IFwiaW5wdXRcIiB8fCBuYW1lID09PSBcImJ1dHRvblwiKSAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFsc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZm4gKSB7XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIGFyZ3VtZW50ICkge1xuXHRcdGFyZ3VtZW50ID0gK2FyZ3VtZW50O1xuXHRcdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHR2YXIgaixcblx0XHRcdFx0bWF0Y2hJbmRleGVzID0gZm4oIFtdLCBzZWVkLmxlbmd0aCwgYXJndW1lbnQgKSxcblx0XHRcdFx0aSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7XG5cblx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlc1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggc2VlZFsgKGogPSBtYXRjaEluZGV4ZXNbaV0pIF0gKSB7XG5cdFx0XHRcdFx0c2VlZFtqXSA9ICEobWF0Y2hlc1tqXSA9IHNlZWRbal0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIENoZWNrcyBhIG5vZGUgZm9yIHZhbGlkaXR5IGFzIGEgU2l6emxlIGNvbnRleHRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3Q9fSBjb250ZXh0XG4gKiBAcmV0dXJucyB7RWxlbWVudHxPYmplY3R8Qm9vbGVhbn0gVGhlIGlucHV0IG5vZGUgaWYgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIGEgZmFsc3kgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdGVzdENvbnRleHQoIGNvbnRleHQgKSB7XG5cdHJldHVybiBjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnRleHQ7XG59XG5cbi8vIEV4cG9zZSBzdXBwb3J0IHZhcnMgZm9yIGNvbnZlbmllbmNlXG5zdXBwb3J0ID0gU2l6emxlLnN1cHBvcnQgPSB7fTtcblxuLyoqXG4gKiBEZXRlY3RzIFhNTCBub2Rlc1xuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gZWxlbSBBbiBlbGVtZW50IG9yIGEgZG9jdW1lbnRcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmZiBlbGVtIGlzIGEgbm9uLUhUTUwgWE1MIG5vZGVcbiAqL1xuaXNYTUwgPSBTaXp6bGUuaXNYTUwgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0Ly8gZG9jdW1lbnRFbGVtZW50IGlzIHZlcmlmaWVkIGZvciBjYXNlcyB3aGVyZSBpdCBkb2Vzbid0IHlldCBleGlzdFxuXHQvLyAoc3VjaCBhcyBsb2FkaW5nIGlmcmFtZXMgaW4gSUUgLSAjNDgzMylcblx0dmFyIGRvY3VtZW50RWxlbWVudCA9IGVsZW0gJiYgKGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtKS5kb2N1bWVudEVsZW1lbnQ7XG5cdHJldHVybiBkb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgIT09IFwiSFRNTFwiIDogZmFsc2U7XG59O1xuXG4vKipcbiAqIFNldHMgZG9jdW1lbnQtcmVsYXRlZCB2YXJpYWJsZXMgb25jZSBiYXNlZCBvbiB0aGUgY3VycmVudCBkb2N1bWVudFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gW2RvY10gQW4gZWxlbWVudCBvciBkb2N1bWVudCBvYmplY3QgdG8gdXNlIHRvIHNldCB0aGUgZG9jdW1lbnRcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqL1xuc2V0RG9jdW1lbnQgPSBTaXp6bGUuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbiggbm9kZSApIHtcblx0dmFyIGhhc0NvbXBhcmUsIHBhcmVudCxcblx0XHRkb2MgPSBub2RlID8gbm9kZS5vd25lckRvY3VtZW50IHx8IG5vZGUgOiBwcmVmZXJyZWREb2M7XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGlmIGRvYyBpcyBpbnZhbGlkIG9yIGFscmVhZHkgc2VsZWN0ZWRcblx0aWYgKCBkb2MgPT09IGRvY3VtZW50IHx8IGRvYy5ub2RlVHlwZSAhPT0gOSB8fCAhZG9jLmRvY3VtZW50RWxlbWVudCApIHtcblx0XHRyZXR1cm4gZG9jdW1lbnQ7XG5cdH1cblxuXHQvLyBVcGRhdGUgZ2xvYmFsIHZhcmlhYmxlc1xuXHRkb2N1bWVudCA9IGRvYztcblx0ZG9jRWxlbSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblx0ZG9jdW1lbnRJc0hUTUwgPSAhaXNYTUwoIGRvY3VtZW50ICk7XG5cblx0Ly8gU3VwcG9ydDogSUUgOS0xMSwgRWRnZVxuXHQvLyBBY2Nlc3NpbmcgaWZyYW1lIGRvY3VtZW50cyBhZnRlciB1bmxvYWQgdGhyb3dzIFwicGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvcnMgKGpRdWVyeSAjMTM5MzYpXG5cdGlmICggKHBhcmVudCA9IGRvY3VtZW50LmRlZmF1bHRWaWV3KSAmJiBwYXJlbnQudG9wICE9PSBwYXJlbnQgKSB7XG5cdFx0Ly8gU3VwcG9ydDogSUUgMTFcblx0XHRpZiAoIHBhcmVudC5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0cGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoIFwidW5sb2FkXCIsIHVubG9hZEhhbmRsZXIsIGZhbHNlICk7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTAgb25seVxuXHRcdH0gZWxzZSBpZiAoIHBhcmVudC5hdHRhY2hFdmVudCApIHtcblx0XHRcdHBhcmVudC5hdHRhY2hFdmVudCggXCJvbnVubG9hZFwiLCB1bmxvYWRIYW5kbGVyICk7XG5cdFx0fVxuXHR9XG5cblx0LyogQXR0cmlidXRlc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gU3VwcG9ydDogSUU8OFxuXHQvLyBWZXJpZnkgdGhhdCBnZXRBdHRyaWJ1dGUgcmVhbGx5IHJldHVybnMgYXR0cmlidXRlcyBhbmQgbm90IHByb3BlcnRpZXNcblx0Ly8gKGV4Y2VwdGluZyBJRTggYm9vbGVhbnMpXG5cdHN1cHBvcnQuYXR0cmlidXRlcyA9IGFzc2VydChmdW5jdGlvbiggZGl2ICkge1xuXHRcdGRpdi5jbGFzc05hbWUgPSBcImlcIjtcblx0XHRyZXR1cm4gIWRpdi5nZXRBdHRyaWJ1dGUoXCJjbGFzc05hbWVcIik7XG5cdH0pO1xuXG5cdC8qIGdldEVsZW1lbnQocylCeSpcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSByZXR1cm5zIG9ubHkgZWxlbWVudHNcblx0c3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGFzc2VydChmdW5jdGlvbiggZGl2ICkge1xuXHRcdGRpdi5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlQ29tbWVudChcIlwiKSApO1xuXHRcdHJldHVybiAhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKS5sZW5ndGg7XG5cdH0pO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDlcblx0c3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICk7XG5cblx0Ly8gU3VwcG9ydDogSUU8MTBcblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudEJ5SWQgcmV0dXJucyBlbGVtZW50cyBieSBuYW1lXG5cdC8vIFRoZSBicm9rZW4gZ2V0RWxlbWVudEJ5SWQgbWV0aG9kcyBkb24ndCBwaWNrIHVwIHByb2dyYW1hdGljYWxseS1zZXQgbmFtZXMsXG5cdC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdFxuXHRzdXBwb3J0LmdldEJ5SWQgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBkaXYgKS5pZCA9IGV4cGFuZG87XG5cdFx0cmV0dXJuICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKS5sZW5ndGg7XG5cdH0pO1xuXG5cdC8vIElEIGZpbmQgYW5kIGZpbHRlclxuXHRpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHtcblx0XHRFeHByLmZpbmRbXCJJRFwiXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblx0XHRcdFx0cmV0dXJuIG0gPyBbIG0gXSA6IFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0RXhwci5maWx0ZXJbXCJJRFwiXSA9IGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoXCJpZFwiKSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdC8vIFN1cHBvcnQ6IElFNi83XG5cdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgaXMgbm90IHJlbGlhYmxlIGFzIGEgZmluZCBzaG9ydGN1dFxuXHRcdGRlbGV0ZSBFeHByLmZpbmRbXCJJRFwiXTtcblxuXHRcdEV4cHIuZmlsdGVyW1wiSURcIl0gPSAgZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO1xuXHRcdFx0XHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cdH1cblxuXHQvLyBUYWdcblx0RXhwci5maW5kW1wiVEFHXCJdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA/XG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdFx0Ly8gRG9jdW1lbnRGcmFnbWVudCBub2RlcyBkb24ndCBoYXZlIGdFQlROXG5cdFx0XHR9IGVsc2UgaWYgKCBzdXBwb3J0LnFzYSApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnICk7XG5cdFx0XHR9XG5cdFx0fSA6XG5cblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdHRtcCA9IFtdLFxuXHRcdFx0XHRpID0gMCxcblx0XHRcdFx0Ly8gQnkgaGFwcHkgY29pbmNpZGVuY2UsIGEgKGJyb2tlbikgZ0VCVE4gYXBwZWFycyBvbiBEb2N1bWVudEZyYWdtZW50IG5vZGVzIHRvb1xuXHRcdFx0XHRyZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHNcblx0XHRcdGlmICggdGFnID09PSBcIipcIiApIHtcblx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IHJlc3VsdHNbaSsrXSkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0dG1wLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdG1wO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0fTtcblxuXHQvLyBDbGFzc1xuXHRFeHByLmZpbmRbXCJDTEFTU1wiXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkge1xuXHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XG5cblx0Ly8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSlcblx0cmJ1Z2d5TWF0Y2hlcyA9IFtdO1xuXG5cdC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChDaHJvbWUgMjEpXG5cdC8vIFdlIGFsbG93IHRoaXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRocm93cyBhbiBlcnJvclxuXHQvLyB3aGVuZXZlciBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGAgaXMgYWNjZXNzZWQgb24gYW4gaWZyYW1lXG5cdC8vIFNvLCB3ZSBhbGxvdyA6Zm9jdXMgdG8gcGFzcyB0aHJvdWdoIFFTQSBhbGwgdGhlIHRpbWUgdG8gYXZvaWQgdGhlIElFIGVycm9yXG5cdC8vIFNlZSBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM3OFxuXHRyYnVnZ3lRU0EgPSBbXTtcblxuXHRpZiAoIChzdXBwb3J0LnFzYSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCApKSApIHtcblx0XHQvLyBCdWlsZCBRU0EgcmVnZXhcblx0XHQvLyBSZWdleCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGllZ28gUGVyaW5pXG5cdFx0YXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XG5cdFx0XHQvLyBTZWxlY3QgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJwb3NlXG5cdFx0XHQvLyBUaGlzIGlzIHRvIHRlc3QgSUUncyB0cmVhdG1lbnQgb2Ygbm90IGV4cGxpY2l0bHlcblx0XHRcdC8vIHNldHRpbmcgYSBib29sZWFuIGNvbnRlbnQgYXR0cmlidXRlLFxuXHRcdFx0Ly8gc2luY2UgaXRzIHByZXNlbmNlIHNob3VsZCBiZSBlbm91Z2hcblx0XHRcdC8vIGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEyMzU5XG5cdFx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBkaXYgKS5pbm5lckhUTUwgPSBcIjxhIGlkPSdcIiArIGV4cGFuZG8gKyBcIic+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGlkPSdcIiArIGV4cGFuZG8gKyBcIi1cXHJcXFxcJyBtc2FsbG93Y2FwdHVyZT0nJz5cIiArXG5cdFx0XHRcdFwiPG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4LCBPcGVyYSAxMS0xMi4xNlxuXHRcdFx0Ly8gTm90aGluZyBzaG91bGQgYmUgc2VsZWN0ZWQgd2hlbiBlbXB0eSBzdHJpbmdzIGZvbGxvdyBePSBvciAkPSBvciAqPVxuXHRcdFx0Ly8gVGhlIHRlc3QgYXR0cmlidXRlIG11c3QgYmUgdW5rbm93biBpbiBPcGVyYSBidXQgXCJzYWZlXCIgZm9yIFdpblJUXG5cdFx0XHQvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvaGg0NjUzODguYXNweCNhdHRyaWJ1dGVfc2VjdGlvblxuXHRcdFx0aWYgKCBkaXYucXVlcnlTZWxlY3RvckFsbChcIlttc2FsbG93Y2FwdHVyZV49JyddXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiWypeJF09XCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBCb29sZWFuIGF0dHJpYnV0ZXMgYW5kIFwidmFsdWVcIiBhcmUgbm90IHRyZWF0ZWQgY29ycmVjdGx5XG5cdFx0XHRpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbChcIltzZWxlY3RlZF1cIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKig/OnZhbHVlfFwiICsgYm9vbGVhbnMgKyBcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWU8MjksIEFuZHJvaWQ8NC40LCBTYWZhcmk8Ny4wKywgaU9TPDcuMCssIFBoYW50b21KUzwxLjkuOCtcblx0XHRcdGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCBcIltpZH49XCIgKyBleHBhbmRvICsgXCItXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaChcIn49XCIpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBXZWJraXQvT3BlcmEgLSA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbiBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXG5cdFx0XHRpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbChcIjpjaGVja2VkXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCI6Y2hlY2tlZFwiKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrLCBpT1MgOCtcblx0XHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTFcblx0XHRcdC8vIEluLXBhZ2UgYHNlbGVjdG9yI2lkIHNpYmluZy1jb21iaW5hdG9yIHNlbGVjdG9yYCBmYWlsc1xuXHRcdFx0aWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIFwiYSNcIiArIGV4cGFuZG8gKyBcIisqXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwiLiMuK1srfl1cIik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcblx0XHRcdC8vIFN1cHBvcnQ6IFdpbmRvd3MgOCBOYXRpdmUgQXBwc1xuXHRcdFx0Ly8gVGhlIHR5cGUgYW5kIG5hbWUgYXR0cmlidXRlcyBhcmUgcmVzdHJpY3RlZCBkdXJpbmcgLmlubmVySFRNTCBhc3NpZ25tZW50XG5cdFx0XHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG5cdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcImhpZGRlblwiICk7XG5cdFx0XHRkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICkuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJEXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBFbmZvcmNlIGNhc2Utc2Vuc2l0aXZpdHkgb2YgbmFtZSBhdHRyaWJ1dGVcblx0XHRcdGlmICggZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbbmFtZT1kXVwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIipbKl4kfCF+XT89XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRkYgMy41IC0gOmVuYWJsZWQvOmRpc2FibGVkIGFuZCBoaWRkZW4gZWxlbWVudHMgKGhpZGRlbiBlbGVtZW50cyBhcmUgc3RpbGwgZW5hYmxlZClcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXG5cdFx0XHRpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbChcIjplbmFibGVkXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPcGVyYSAxMC0xMSBkb2VzIG5vdCB0aHJvdyBvbiBwb3N0LWNvbW1hIGludmFsaWQgcHNldWRvc1xuXHRcdFx0ZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCIqLDp4XCIpO1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCIsLio6XCIpO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKCAoc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgPSBybmF0aXZlLnRlc3QoIChtYXRjaGVzID0gZG9jRWxlbS5tYXRjaGVzIHx8XG5cdFx0ZG9jRWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm1vek1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ub01hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubXNNYXRjaGVzU2VsZWN0b3IpICkpICkge1xuXG5cdFx0YXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XG5cdFx0XHQvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3Jcblx0XHRcdC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpXG5cdFx0XHRzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBkaXYsIFwiZGl2XCIgKTtcblxuXHRcdFx0Ly8gVGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvblxuXHRcdFx0Ly8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2UgaW5zdGVhZFxuXHRcdFx0bWF0Y2hlcy5jYWxsKCBkaXYsIFwiW3MhPScnXTp4XCIgKTtcblx0XHRcdHJidWdneU1hdGNoZXMucHVzaCggXCIhPVwiLCBwc2V1ZG9zICk7XG5cdFx0fSk7XG5cdH1cblxuXHRyYnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKFwifFwiKSApO1xuXHRyYnVnZ3lNYXRjaGVzID0gcmJ1Z2d5TWF0Y2hlcy5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKFwifFwiKSApO1xuXG5cdC8qIENvbnRhaW5zXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblx0aGFzQ29tcGFyZSA9IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApO1xuXG5cdC8vIEVsZW1lbnQgY29udGFpbnMgYW5vdGhlclxuXHQvLyBQdXJwb3NlZnVsbHkgc2VsZi1leGNsdXNpdmVcblx0Ly8gQXMgaW4sIGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBpdHNlbGZcblx0Y29udGFpbnMgPSBoYXNDb21wYXJlIHx8IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb250YWlucyApID9cblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdHZhciBhZG93biA9IGEubm9kZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsXG5cdFx0XHRcdGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlO1xuXHRcdFx0cmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cdFx0XHRcdGFkb3duLmNvbnRhaW5zID9cblx0XHRcdFx0XHRhZG93bi5jb250YWlucyggYnVwICkgOlxuXHRcdFx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYnVwICkgJiAxNlxuXHRcdFx0KSk7XG5cdFx0fSA6XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHRpZiAoIGIgKSB7XG5cdFx0XHRcdHdoaWxlICggKGIgPSBiLnBhcmVudE5vZGUpICkge1xuXHRcdFx0XHRcdGlmICggYiA9PT0gYSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0LyogU29ydGluZ1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gRG9jdW1lbnQgb3JkZXIgc29ydGluZ1xuXHRzb3J0T3JkZXIgPSBoYXNDb21wYXJlID9cblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cblx0XHQvLyBGbGFnIGZvciBkdXBsaWNhdGUgcmVtb3ZhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHQvLyBTb3J0IG9uIG1ldGhvZCBleGlzdGVuY2UgaWYgb25seSBvbmUgaW5wdXQgaGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uXG5cdFx0dmFyIGNvbXBhcmUgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO1xuXHRcdGlmICggY29tcGFyZSApIHtcblx0XHRcdHJldHVybiBjb21wYXJlO1xuXHRcdH1cblxuXHRcdC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBpZiBib3RoIGlucHV0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZG9jdW1lbnRcblx0XHRjb21wYXJlID0gKCBhLm93bmVyRG9jdW1lbnQgfHwgYSApID09PSAoIGIub3duZXJEb2N1bWVudCB8fCBiICkgP1xuXHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYiApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHdlIGtub3cgdGhleSBhcmUgZGlzY29ubmVjdGVkXG5cdFx0XHQxO1xuXG5cdFx0Ly8gRGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0aWYgKCBjb21wYXJlICYgMSB8fFxuXHRcdFx0KCFzdXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUpICkge1xuXG5cdFx0XHQvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnRcblx0XHRcdGlmICggYSA9PT0gZG9jdW1lbnQgfHwgYS5vd25lckRvY3VtZW50ID09PSBwcmVmZXJyZWREb2MgJiYgY29udGFpbnMocHJlZmVycmVkRG9jLCBhKSApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBiID09PSBkb2N1bWVudCB8fCBiLm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGIpICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFpbnRhaW4gb3JpZ2luYWwgb3JkZXJcblx0XHRcdHJldHVybiBzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBhcmUgJiA0ID8gLTEgOiAxO1xuXHR9IDpcblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0Ly8gRXhpdCBlYXJseSBpZiB0aGUgbm9kZXMgYXJlIGlkZW50aWNhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRhdXAgPSBhLnBhcmVudE5vZGUsXG5cdFx0XHRidXAgPSBiLnBhcmVudE5vZGUsXG5cdFx0XHRhcCA9IFsgYSBdLFxuXHRcdFx0YnAgPSBbIGIgXTtcblxuXHRcdC8vIFBhcmVudGxlc3Mgbm9kZXMgYXJlIGVpdGhlciBkb2N1bWVudHMgb3IgZGlzY29ubmVjdGVkXG5cdFx0aWYgKCAhYXVwIHx8ICFidXAgKSB7XG5cdFx0XHRyZXR1cm4gYSA9PT0gZG9jdW1lbnQgPyAtMSA6XG5cdFx0XHRcdGIgPT09IGRvY3VtZW50ID8gMSA6XG5cdFx0XHRcdGF1cCA/IC0xIDpcblx0XHRcdFx0YnVwID8gMSA6XG5cdFx0XHRcdHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblxuXHRcdC8vIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MsIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrXG5cdFx0fSBlbHNlIGlmICggYXVwID09PSBidXAgKSB7XG5cdFx0XHRyZXR1cm4gc2libGluZ0NoZWNrKCBhLCBiICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlIHdlIG5lZWQgZnVsbCBsaXN0cyBvZiB0aGVpciBhbmNlc3RvcnMgZm9yIGNvbXBhcmlzb25cblx0XHRjdXIgPSBhO1xuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHtcblx0XHRcdGFwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblx0XHRjdXIgPSBiO1xuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHtcblx0XHRcdGJwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblxuXHRcdC8vIFdhbGsgZG93biB0aGUgdHJlZSBsb29raW5nIGZvciBhIGRpc2NyZXBhbmN5XG5cdFx0d2hpbGUgKCBhcFtpXSA9PT0gYnBbaV0gKSB7XG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGkgP1xuXHRcdFx0Ly8gRG8gYSBzaWJsaW5nIGNoZWNrIGlmIHRoZSBub2RlcyBoYXZlIGEgY29tbW9uIGFuY2VzdG9yXG5cdFx0XHRzaWJsaW5nQ2hlY2soIGFwW2ldLCBicFtpXSApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIG5vZGVzIGluIG91ciBkb2N1bWVudCBzb3J0IGZpcnN0XG5cdFx0XHRhcFtpXSA9PT0gcHJlZmVycmVkRG9jID8gLTEgOlxuXHRcdFx0YnBbaV0gPT09IHByZWZlcnJlZERvYyA/IDEgOlxuXHRcdFx0MDtcblx0fTtcblxuXHRyZXR1cm4gZG9jdW1lbnQ7XG59O1xuXG5TaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHtcblx0cmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTtcbn07XG5cblNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHtcblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHR9XG5cblx0Ly8gTWFrZSBzdXJlIHRoYXQgYXR0cmlidXRlIHNlbGVjdG9ycyBhcmUgcXVvdGVkXG5cdGV4cHIgPSBleHByLnJlcGxhY2UoIHJhdHRyaWJ1dGVRdW90ZXMsIFwiPSckMSddXCIgKTtcblxuXHRpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0IWNvbXBpbGVyQ2FjaGVbIGV4cHIgKyBcIiBcIiBdICYmXG5cdFx0KCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJlxuXHRcdCggIXJidWdneVFTQSAgICAgfHwgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSApIHtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7XG5cblx0XHRcdC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRcdGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHxcblx0XHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHRcdC8vIGZyYWdtZW50IGluIElFIDlcblx0XHRcdFx0XHRlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cdH1cblxuXHRyZXR1cm4gU2l6emxlKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwO1xufTtcblxuU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0fVxuXHRyZXR1cm4gY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTtcbn07XG5cblNpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKGpRdWVyeSAjMTM4MDcpXG5cdFx0dmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0Zm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElzSFRNTCApIDpcblx0XHRcdHVuZGVmaW5lZDtcblxuXHRyZXR1cm4gdmFsICE9PSB1bmRlZmluZWQgP1xuXHRcdHZhbCA6XG5cdFx0c3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApIDpcblx0XHRcdCh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkpICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xufTtcblxuU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcblx0dGhyb3cgbmV3IEVycm9yKCBcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgbXNnICk7XG59O1xuXG4vKipcbiAqIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzXG4gKi9cblNpenpsZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7XG5cdHZhciBlbGVtLFxuXHRcdGR1cGxpY2F0ZXMgPSBbXSxcblx0XHRqID0gMCxcblx0XHRpID0gMDtcblxuXHQvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlXG5cdGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXM7XG5cdHNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCApO1xuXHRyZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApO1xuXG5cdGlmICggaGFzRHVwbGljYXRlICkge1xuXHRcdHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG4gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW1cbiAqL1xuZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBub2RlLFxuXHRcdHJldCA9IFwiXCIsXG5cdFx0aSA9IDAsXG5cdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdGlmICggIW5vZGVUeXBlICkge1xuXHRcdC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XG5cdFx0d2hpbGUgKCAobm9kZSA9IGVsZW1baSsrXSkgKSB7XG5cdFx0XHQvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlc1xuXHRcdFx0cmV0ICs9IGdldFRleHQoIG5vZGUgKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHtcblx0XHQvLyBVc2UgdGV4dENvbnRlbnQgZm9yIGVsZW1lbnRzXG5cdFx0Ly8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoalF1ZXJ5ICMxMTE1Mylcblx0XHRpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdHJldCArPSBnZXRUZXh0KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdH1cblx0Ly8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzXG5cblx0cmV0dXJuIHJldDtcbn07XG5cbkV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0ge1xuXG5cdC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlclxuXHRjYWNoZUxlbmd0aDogNTAsXG5cblx0Y3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sXG5cblx0bWF0Y2g6IG1hdGNoRXhwcixcblxuXHRhdHRySGFuZGxlOiB7fSxcblxuXHRmaW5kOiB7fSxcblxuXHRyZWxhdGl2ZToge1xuXHRcdFwiPlwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCIgXCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiB9LFxuXHRcdFwiK1wiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIn5cIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIgfVxuXHR9LFxuXG5cdHByZUZpbHRlcjoge1xuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkXG5cdFx0XHRtYXRjaFszXSA9ICggbWF0Y2hbM10gfHwgbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgXCJcIiApLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdGlmICggbWF0Y2hbMl0gPT09IFwifj1cIiApIHtcblx0XHRcdFx0bWF0Y2hbM10gPSBcIiBcIiArIG1hdGNoWzNdICsgXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgNCApO1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbXCJDSElMRFwiXVxuXHRcdFx0XHQxIHR5cGUgKG9ubHl8bnRofC4uLilcblx0XHRcdFx0MiB3aGF0IChjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHQzIGFyZ3VtZW50IChldmVufG9kZHxcXGQqfFxcZCpuKFsrLV1cXGQrKT98Li4uKVxuXHRcdFx0XHQ0IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xcZCpufClcblx0XHRcdFx0NSBzaWduIG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ2IHggb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDcgc2lnbiBvZiB5LWNvbXBvbmVudFxuXHRcdFx0XHQ4IHkgb2YgeS1jb21wb25lbnRcblx0XHRcdCovXG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdGlmICggbWF0Y2hbMV0uc2xpY2UoIDAsIDMgKSA9PT0gXCJudGhcIiApIHtcblx0XHRcdFx0Ly8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnRcblx0XHRcdFx0aWYgKCAhbWF0Y2hbM10gKSB7XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFswXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxEXG5cdFx0XHRcdC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzFcblx0XHRcdFx0bWF0Y2hbNF0gPSArKCBtYXRjaFs0XSA/IG1hdGNoWzVdICsgKG1hdGNoWzZdIHx8IDEpIDogMiAqICggbWF0Y2hbM10gPT09IFwiZXZlblwiIHx8IG1hdGNoWzNdID09PSBcIm9kZFwiICkgKTtcblx0XHRcdFx0bWF0Y2hbNV0gPSArKCAoIG1hdGNoWzddICsgbWF0Y2hbOF0gKSB8fCBtYXRjaFszXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHQvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaDtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbNl0gJiYgbWF0Y2hbMl07XG5cblx0XHRcdGlmICggbWF0Y2hFeHByW1wiQ0hJTERcIl0udGVzdCggbWF0Y2hbMF0gKSApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFjY2VwdCBxdW90ZWQgYXJndW1lbnRzIGFzLWlzXG5cdFx0XHRpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRtYXRjaFsyXSA9IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8IFwiXCI7XG5cblx0XHRcdC8vIFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiZcblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApKSAmJlxuXHRcdFx0XHQvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0KGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoIFwiKVwiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0aCkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHRcdG1hdGNoWzJdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFwiVEFHXCI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkge1xuXHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0gOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lO1xuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNMQVNTXCI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7XG5cdFx0XHR2YXIgcGF0dGVybiA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSArIFwiIFwiIF07XG5cblx0XHRcdHJldHVybiBwYXR0ZXJuIHx8XG5cdFx0XHRcdChwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIGNsYXNzTmFtZSArIFwiKFwiICsgd2hpdGVzcGFjZSArIFwifCQpXCIgKSkgJiZcblx0XHRcdFx0Y2xhc3NDYWNoZSggY2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGF0dGVybi50ZXN0KCB0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09IFwic3RyaW5nXCIgJiYgZWxlbS5jbGFzc05hbWUgfHwgdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBcInVuZGVmaW5lZFwiICYmIGVsZW0uZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgfHwgXCJcIiApO1xuXHRcdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciByZXN1bHQgPSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcblxuXHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiPVwiID8gcmVzdWx0ID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiIT1cIiA/IHJlc3VsdCAhPT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIl49XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMCA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiKj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiQ9XCIgPyBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIn49XCIgPyAoIFwiIFwiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCBcIiBcIiApICsgXCIgXCIgKS5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcInw9XCIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArIFwiLVwiIDpcblx0XHRcdFx0XHRmYWxzZTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIGFyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHtcblx0XHRcdHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09IFwibnRoXCIsXG5cdFx0XHRcdGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSBcImxhc3RcIixcblx0XHRcdFx0b2ZUeXBlID0gd2hhdCA9PT0gXCJvZi10eXBlXCI7XG5cblx0XHRcdHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID9cblxuXHRcdFx0XHQvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdFx0fSA6XG5cblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgY2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcblx0XHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSxcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsXG5cdFx0XHRcdFx0XHRkaWZmID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSBub2RlWyBkaXIgXSkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyBSZXZlcnNlIGRpcmVjdGlvbiBmb3IgOm9ubHktKiAoaWYgd2UgaGF2ZW4ndCB5ZXQgZG9uZSBzbylcblx0XHRcdFx0XHRcdFx0XHRzdGFydCA9IGRpciA9IHR5cGUgPT09IFwib25seVwiICYmICFzdGFydCAmJiBcIm5leHRTaWJsaW5nXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07XG5cblx0XHRcdFx0XHRcdC8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgXG5cdFx0XHRcdFx0XHRpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU2VlayBgZWxlbWAgZnJvbSBhIHByZXZpb3VzbHktY2FjaGVkIGluZGV4XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRub2RlID0gcGFyZW50O1xuXHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBub2RlSW5kZXggJiYgcGFyZW50LmNoaWxkTm9kZXNbIG5vZGVJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRleCBpZiBhdmFpbGFibGVcblx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XG5cdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8geG1sIDpudGgtY2hpbGQoLi4uKVxuXHRcdFx0XHRcdFx0XHQvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pXG5cdFx0XHRcdFx0XHRcdGlmICggZGlmZiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICggKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0KytkaWZmICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNpemVcblx0XHRcdFx0XHRcdGRpZmYgLT0gbGFzdDtcblx0XHRcdFx0XHRcdHJldHVybiBkaWZmID09PSBmaXJzdCB8fCAoIGRpZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIHBzZXVkbywgYXJndW1lbnQgKSB7XG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgcHNldWRvICk7XG5cblx0XHRcdC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXRcblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXG5cdFx0XHQvLyBqdXN0IGFzIFNpenpsZSBkb2VzXG5cdFx0XHRpZiAoIGZuWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHJldHVybiBmbiggYXJndW1lbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzXG5cdFx0XHRpZiAoIGZuLmxlbmd0aCA+IDEgKSB7XG5cdFx0XHRcdGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCBcIlwiLCBhcmd1bWVudCBdO1xuXHRcdFx0XHRyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID9cblx0XHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHRcdFx0XHR2YXIgaWR4LFxuXHRcdFx0XHRcdFx0XHRtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksXG5cdFx0XHRcdFx0XHRcdGkgPSBtYXRjaGVkLmxlbmd0aDtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZHggPSBpbmRleE9mKCBzZWVkLCBtYXRjaGVkW2ldICk7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkW2ldICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkgOlxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZuO1xuXHRcdH1cblx0fSxcblxuXHRwc2V1ZG9zOiB7XG5cdFx0Ly8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zXG5cdFx0XCJub3RcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlXG5cdFx0XHQvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuXHRcdFx0Ly8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzXG5cdFx0XHR2YXIgaW5wdXQgPSBbXSxcblx0XHRcdFx0cmVzdWx0cyA9IFtdLFxuXHRcdFx0XHRtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApICk7XG5cblx0XHRcdHJldHVybiBtYXRjaGVyWyBleHBhbmRvIF0gP1xuXHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0XHRcdHVubWF0Y2hlZCA9IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwgW10gKSxcblx0XHRcdFx0XHRcdGkgPSBzZWVkLmxlbmd0aDtcblxuXHRcdFx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmBcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkge1xuXHRcdFx0XHRcdFx0XHRzZWVkW2ldID0gIShtYXRjaGVzW2ldID0gZWxlbSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0aW5wdXRbMF0gPSBlbGVtO1xuXHRcdFx0XHRcdG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTtcblx0XHRcdFx0XHQvLyBEb24ndCBrZWVwIHRoZSBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0XHRcdGlucHV0WzBdID0gbnVsbDtcblx0XHRcdFx0XHRyZXR1cm4gIXJlc3VsdHMucG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0fSksXG5cblx0XHRcImhhc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7XG5cdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0XCJjb250YWluc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJUZXh0IHx8IGdldFRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdC8vIFwiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvclxuXHRcdC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcblx0XHQvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwiLVwiLlxuXHRcdC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXG5cdFx0XCJsYW5nXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7XG5cdFx0XHQvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyXG5cdFx0XHRpZiAoICFyaWRlbnRpZmllci50ZXN0KGxhbmcgfHwgXCJcIikgKSB7XG5cdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBsYW5nOiBcIiArIGxhbmcgKTtcblx0XHRcdH1cblx0XHRcdGxhbmcgPSBsYW5nLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIGVsZW1MYW5nO1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKCAoZWxlbUxhbmcgPSBkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRcdFx0XHRlbGVtLmxhbmcgOlxuXHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoXCJ4bWw6bGFuZ1wiKSB8fCBlbGVtLmdldEF0dHJpYnV0ZShcImxhbmdcIikpICkge1xuXG5cdFx0XHRcdFx0XHRlbGVtTGFuZyA9IGVsZW1MYW5nLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxlbUxhbmcuaW5kZXhPZiggbGFuZyArIFwiLVwiICkgPT09IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IHdoaWxlICggKGVsZW0gPSBlbGVtLnBhcmVudE5vZGUpICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdC8vIE1pc2NlbGxhbmVvdXNcblx0XHRcInRhcmdldFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRcdFx0cmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSggMSApID09PSBlbGVtLmlkO1xuXHRcdH0sXG5cblx0XHRcInJvb3RcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jRWxlbTtcblx0XHR9LFxuXG5cdFx0XCJmb2N1c1wiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmICghZG9jdW1lbnQuaGFzRm9jdXMgfHwgZG9jdW1lbnQuaGFzRm9jdXMoKSkgJiYgISEoZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCk7XG5cdFx0fSxcblxuXHRcdC8vIEJvb2xlYW4gcHJvcGVydGllc1xuXHRcdFwiZW5hYmxlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBmYWxzZTtcblx0XHR9LFxuXG5cdFx0XCJkaXNhYmxlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlO1xuXHRcdH0sXG5cblx0XHRcImNoZWNrZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHQvLyBJbiBDU1MzLCA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIGJvdGggY2hlY2tlZCBhbmQgc2VsZWN0ZWQgZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHR2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gKG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgISFlbGVtLmNoZWNrZWQpIHx8IChub2RlTmFtZSA9PT0gXCJvcHRpb25cIiAmJiAhIWVsZW0uc2VsZWN0ZWQpO1xuXHRcdH0sXG5cblx0XHRcInNlbGVjdGVkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdFxuXHRcdFx0Ly8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseVxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gQ29udGVudHNcblx0XHRcImVtcHR5XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG9cblx0XHRcdC8vIDplbXB0eSBpcyBuZWdhdGVkIGJ5IGVsZW1lbnQgKDEpIG9yIGNvbnRlbnQgbm9kZXMgKHRleHQ6IDM7IGNkYXRhOiA0OyBlbnRpdHkgcmVmOiA1KSxcblx0XHRcdC8vICAgYnV0IG5vdCBieSBvdGhlcnMgKGNvbW1lbnQ6IDg7IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb246IDc7IGV0Yy4pXG5cdFx0XHQvLyBub2RlVHlwZSA8IDYgd29ya3MgYmVjYXVzZSBhdHRyaWJ1dGVzICgyKSBkbyBub3QgYXBwZWFyIGFzIGNoaWxkcmVuXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlIDwgNiApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRcInBhcmVudFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAhRXhwci5wc2V1ZG9zW1wiZW1wdHlcIl0oIGVsZW0gKTtcblx0XHR9LFxuXG5cdFx0Ly8gRWxlbWVudC9pbnB1dCB0eXBlc1xuXHRcdFwiaGVhZGVyXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImlucHV0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImJ1dHRvblwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IFwiYnV0dG9uXCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIjtcblx0XHR9LFxuXG5cdFx0XCJ0ZXh0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGF0dHI7XG5cdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgJiZcblx0XHRcdFx0ZWxlbS50eXBlID09PSBcInRleHRcIiAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFPDhcblx0XHRcdFx0Ly8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4sIFwic2VhcmNoXCIpIGFwcGVhciB3aXRoIGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCJcblx0XHRcdFx0KCAoYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKFwidHlwZVwiKSkgPT0gbnVsbCB8fCBhdHRyLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiICk7XG5cdFx0fSxcblxuXHRcdC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb25cblx0XHRcImZpcnN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyAwIF07XG5cdFx0fSksXG5cblx0XHRcImxhc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gWyBsZW5ndGggLSAxIF07XG5cdFx0fSksXG5cblx0XHRcImVxXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHJldHVybiBbIGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTtcblx0XHR9KSxcblxuXHRcdFwiZXZlblwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KSxcblxuXHRcdFwib2RkXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAxO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pLFxuXG5cdFx0XCJsdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7IC0taSA+PSAwOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSksXG5cblx0XHRcImd0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgKytpIDwgbGVuZ3RoOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSlcblx0fVxufTtcblxuRXhwci5wc2V1ZG9zW1wibnRoXCJdID0gRXhwci5wc2V1ZG9zW1wiZXFcIl07XG5cbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXG5mb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApO1xufVxuZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTtcbn1cblxuLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cbnNldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zO1xuRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTtcblxudG9rZW5pemUgPSBTaXp6bGUudG9rZW5pemUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIHBhcnNlT25seSApIHtcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcblx0XHRjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCBjYWNoZWQgKSB7XG5cdFx0cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTtcblx0fVxuXG5cdHNvRmFyID0gc2VsZWN0b3I7XG5cdGdyb3VwcyA9IFtdO1xuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XG5cblx0d2hpbGUgKCBzb0ZhciApIHtcblxuXHRcdC8vIENvbW1hIGFuZCBmaXJzdCBydW5cblx0XHRpZiAoICFtYXRjaGVkIHx8IChtYXRjaCA9IHJjb21tYS5leGVjKCBzb0ZhciApKSApIHtcblx0XHRcdGlmICggbWF0Y2ggKSB7XG5cdFx0XHRcdC8vIERvbid0IGNvbnN1bWUgdHJhaWxpbmcgY29tbWFzIGFzIHZhbGlkXG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoWzBdLmxlbmd0aCApIHx8IHNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzLnB1c2goICh0b2tlbnMgPSBbXSkgKTtcblx0XHR9XG5cblx0XHRtYXRjaGVkID0gZmFsc2U7XG5cblx0XHQvLyBDb21iaW5hdG9yc1xuXHRcdGlmICggKG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkpICkge1xuXHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXHRcdFx0XHQvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2Vcblx0XHRcdFx0dHlwZTogbWF0Y2hbMF0ucmVwbGFjZSggcnRyaW0sIFwiIFwiIClcblx0XHRcdH0pO1xuXHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGaWx0ZXJzXG5cdFx0Zm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHtcblx0XHRcdGlmICggKG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSkgJiYgKCFwcmVGaWx0ZXJzWyB0eXBlIF0gfHxcblx0XHRcdFx0KG1hdGNoID0gcHJlRmlsdGVyc1sgdHlwZSBdKCBtYXRjaCApKSkgKSB7XG5cdFx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cdFx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0XHRtYXRjaGVzOiBtYXRjaFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFtYXRjaGVkICkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXG5cdC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZ1xuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcblx0cmV0dXJuIHBhcnNlT25seSA/XG5cdFx0c29GYXIubGVuZ3RoIDpcblx0XHRzb0ZhciA/XG5cdFx0XHRTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOlxuXHRcdFx0Ly8gQ2FjaGUgdGhlIHRva2Vuc1xuXHRcdFx0dG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7XG59O1xuXG5mdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdHNlbGVjdG9yID0gXCJcIjtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0c2VsZWN0b3IgKz0gdG9rZW5zW2ldLnZhbHVlO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rvcjtcbn1cblxuZnVuY3Rpb24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHtcblx0dmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLFxuXHRcdGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGRpciA9PT0gXCJwYXJlbnROb2RlXCIsXG5cdFx0ZG9uZU5hbWUgPSBkb25lKys7XG5cblx0cmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgP1xuXHRcdC8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IDpcblxuXHRcdC8vIENoZWNrIGFnYWluc3QgYWxsIGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50c1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgb2xkQ2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLFxuXHRcdFx0XHRuZXdDYWNoZSA9IFsgZGlycnVucywgZG9uZU5hbWUgXTtcblxuXHRcdFx0Ly8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywgc28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gY29tYmluYXRvciBjYWNoaW5nXG5cdFx0XHRpZiAoIHhtbCApIHtcblx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0gfHwgKGVsZW1bIGV4cGFuZG8gXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSB8fCAob3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRpZiAoIChvbGRDYWNoZSA9IHVuaXF1ZUNhY2hlWyBkaXIgXSkgJiZcblx0XHRcdFx0XHRcdFx0b2xkQ2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFtZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBc3NpZ24gdG8gbmV3Q2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKG5ld0NhY2hlWyAyIF0gPSBvbGRDYWNoZVsgMiBdKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIFJldXNlIG5ld2NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIGRpciBdID0gbmV3Q2FjaGU7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nXG5cdFx0XHRcdFx0XHRcdGlmICggKG5ld0NhY2hlWyAyIF0gPSBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xufVxuXG5mdW5jdGlvbiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSB7XG5cdHJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID9cblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAhbWF0Y2hlcnNbaV0oIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSA6XG5cdFx0bWF0Y2hlcnNbMF07XG59XG5cbmZ1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0U2l6emxlKCBzZWxlY3RvciwgY29udGV4dHNbaV0sIHJlc3VsdHMgKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHtcblx0dmFyIGVsZW0sXG5cdFx0bmV3VW5tYXRjaGVkID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bGVuID0gdW5tYXRjaGVkLmxlbmd0aCxcblx0XHRtYXBwZWQgPSBtYXAgIT0gbnVsbDtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHtcblx0XHRcdGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRuZXdVbm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRpZiAoIG1hcHBlZCApIHtcblx0XHRcdFx0XHRtYXAucHVzaCggaSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG5ld1VubWF0Y2hlZDtcbn1cblxuZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkge1xuXHRpZiAoIHBvc3RGaWx0ZXIgJiYgIXBvc3RGaWx0ZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApO1xuXHR9XG5cdGlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaW5kZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTtcblx0fVxuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0dmFyIHRlbXAsIGksIGVsZW0sXG5cdFx0XHRwcmVNYXAgPSBbXSxcblx0XHRcdHBvc3RNYXAgPSBbXSxcblx0XHRcdHByZWV4aXN0aW5nID0gcmVzdWx0cy5sZW5ndGgsXG5cblx0XHRcdC8vIEdldCBpbml0aWFsIGVsZW1lbnRzIGZyb20gc2VlZCBvciBjb250ZXh0XG5cdFx0XHRlbGVtcyA9IHNlZWQgfHwgbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IgfHwgXCIqXCIsIGNvbnRleHQubm9kZVR5cGUgPyBbIGNvbnRleHQgXSA6IGNvbnRleHQsIFtdICksXG5cblx0XHRcdC8vIFByZWZpbHRlciB0byBnZXQgbWF0Y2hlciBpbnB1dCwgcHJlc2VydmluZyBhIG1hcCBmb3Igc2VlZC1yZXN1bHRzIHN5bmNocm9uaXphdGlvblxuXHRcdFx0bWF0Y2hlckluID0gcHJlRmlsdGVyICYmICggc2VlZCB8fCAhc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGNvbmRlbnNlKCBlbGVtcywgcHJlTWFwLCBwcmVGaWx0ZXIsIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0ZWxlbXMsXG5cblx0XHRcdG1hdGNoZXJPdXQgPSBtYXRjaGVyID9cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIHBvc3RGaW5kZXIsIG9yIGZpbHRlcmVkIHNlZWQsIG9yIG5vbi1zZWVkIHBvc3RGaWx0ZXIgb3IgcHJlZXhpc3RpbmcgcmVzdWx0cyxcblx0XHRcdFx0cG9zdEZpbmRlciB8fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgP1xuXG5cdFx0XHRcdFx0Ly8gLi4uaW50ZXJtZWRpYXRlIHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0W10gOlxuXG5cdFx0XHRcdFx0Ly8gLi4ub3RoZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5XG5cdFx0XHRcdFx0cmVzdWx0cyA6XG5cdFx0XHRcdG1hdGNoZXJJbjtcblxuXHRcdC8vIEZpbmQgcHJpbWFyeSBtYXRjaGVzXG5cdFx0aWYgKCBtYXRjaGVyICkge1xuXHRcdFx0bWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0LCB4bWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwb3N0RmlsdGVyXG5cdFx0aWYgKCBwb3N0RmlsdGVyICkge1xuXHRcdFx0dGVtcCA9IGNvbmRlbnNlKCBtYXRjaGVyT3V0LCBwb3N0TWFwICk7XG5cdFx0XHRwb3N0RmlsdGVyKCB0ZW1wLCBbXSwgY29udGV4dCwgeG1sICk7XG5cblx0XHRcdC8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVudHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW5cblx0XHRcdGkgPSB0ZW1wLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoIChlbGVtID0gdGVtcFtpXSkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlck91dFsgcG9zdE1hcFtpXSBdID0gIShtYXRjaGVySW5bIHBvc3RNYXBbaV0gXSA9IGVsZW0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyIHx8IHByZUZpbHRlciApIHtcblx0XHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRcdC8vIEdldCB0aGUgZmluYWwgbWF0Y2hlck91dCBieSBjb25kZW5zaW5nIHRoaXMgaW50ZXJtZWRpYXRlIGludG8gcG9zdEZpbmRlciBjb250ZXh0c1xuXHRcdFx0XHRcdHRlbXAgPSBbXTtcblx0XHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgKSB7XG5cdFx0XHRcdFx0XHRcdC8vIFJlc3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoXG5cdFx0XHRcdFx0XHRcdHRlbXAucHVzaCggKG1hdGNoZXJJbltpXSA9IGVsZW0pICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsIChtYXRjaGVyT3V0ID0gW10pLCB0ZW1wLCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE1vdmUgbWF0Y2hlZCBlbGVtZW50cyBmcm9tIHNlZWQgdG8gcmVzdWx0cyB0byBrZWVwIHRoZW0gc3luY2hyb25pemVkXG5cdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0aWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICYmXG5cdFx0XHRcdFx0XHQodGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbaV0pID4gLTEgKSB7XG5cblx0XHRcdFx0XHRcdHNlZWRbdGVtcF0gPSAhKHJlc3VsdHNbdGVtcF0gPSBlbGVtKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyT3V0ID0gY29uZGVuc2UoXG5cdFx0XHRcdG1hdGNoZXJPdXQgPT09IHJlc3VsdHMgP1xuXHRcdFx0XHRcdG1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6XG5cdFx0XHRcdFx0bWF0Y2hlck91dFxuXHRcdFx0KTtcblx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91dCwgeG1sICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Ub2tlbnMoIHRva2VucyApIHtcblx0dmFyIGNoZWNrQ29udGV4dCwgbWF0Y2hlciwgaixcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdGxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1swXS50eXBlIF0sXG5cdFx0aW1wbGljaXRSZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlW1wiIFwiXSxcblx0XHRpID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAsXG5cblx0XHQvLyBUaGUgZm91bmRhdGlvbmFsIG1hdGNoZXIgZW5zdXJlcyB0aGF0IGVsZW1lbnRzIGFyZSByZWFjaGFibGUgZnJvbSB0b3AtbGV2ZWwgY29udGV4dChzKVxuXHRcdG1hdGNoQ29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGNoZWNrQ29udGV4dDtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hBbnlDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZiggY2hlY2tDb250ZXh0LCBlbGVtICkgPiAtMTtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgcmV0ID0gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQgIT09IG91dGVybW9zdENvbnRleHQgKSApIHx8IChcblx0XHRcdFx0KGNoZWNrQ29udGV4dCA9IGNvbnRleHQpLm5vZGVUeXBlID9cblx0XHRcdFx0XHRtYXRjaENvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0XHRtYXRjaEFueUNvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApICk7XG5cdFx0XHQvLyBBdm9pZCBoYW5naW5nIG9udG8gZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdGNoZWNrQ29udGV4dCA9IG51bGw7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH0gXTtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoIChtYXRjaGVyID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2ldLnR5cGUgXSkgKSB7XG5cdFx0XHRtYXRjaGVycyA9IFsgYWRkQ29tYmluYXRvcihlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwgbWF0Y2hlcikgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbaV0udHlwZSBdLmFwcGx5KCBudWxsLCB0b2tlbnNbaV0ubWF0Y2hlcyApO1xuXG5cdFx0XHQvLyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlclxuXHRcdFx0aWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZ1xuXHRcdFx0XHRqID0gKytpO1xuXHRcdFx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1tqXS50eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNldE1hdGNoZXIoXG5cdFx0XHRcdFx0aSA+IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksXG5cdFx0XHRcdFx0aSA+IDEgJiYgdG9TZWxlY3Rvcihcblx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcmVjZWRpbmcgdG9rZW4gd2FzIGEgZGVzY2VuZGFudCBjb21iaW5hdG9yLCBpbnNlcnQgYW4gaW1wbGljaXQgYW55LWVsZW1lbnQgYCpgXG5cdFx0XHRcdFx0XHR0b2tlbnMuc2xpY2UoIDAsIGkgLSAxICkuY29uY2F0KHsgdmFsdWU6IHRva2Vuc1sgaSAtIDIgXS50eXBlID09PSBcIiBcIiA/IFwiKlwiIDogXCJcIiB9KVxuXHRcdFx0XHRcdCkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLFxuXHRcdFx0XHRcdG1hdGNoZXIsXG5cdFx0XHRcdFx0aSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKHRva2VucyA9IHRva2Vucy5zbGljZSggaiApKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgdG9TZWxlY3RvciggdG9rZW5zIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdG1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApIHtcblx0dmFyIGJ5U2V0ID0gc2V0TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRzdXBlck1hdGNoZXIgPSBmdW5jdGlvbiggc2VlZCwgY29udGV4dCwgeG1sLCByZXN1bHRzLCBvdXRlcm1vc3QgKSB7XG5cdFx0XHR2YXIgZWxlbSwgaiwgbWF0Y2hlcixcblx0XHRcdFx0bWF0Y2hlZENvdW50ID0gMCxcblx0XHRcdFx0aSA9IFwiMFwiLFxuXHRcdFx0XHR1bm1hdGNoZWQgPSBzZWVkICYmIFtdLFxuXHRcdFx0XHRzZXRNYXRjaGVkID0gW10sXG5cdFx0XHRcdGNvbnRleHRCYWNrdXAgPSBvdXRlcm1vc3RDb250ZXh0LFxuXHRcdFx0XHQvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIGVpdGhlciBzZWVkIGVsZW1lbnRzIG9yIG91dGVybW9zdCBjb250ZXh0XG5cdFx0XHRcdGVsZW1zID0gc2VlZCB8fCBieUVsZW1lbnQgJiYgRXhwci5maW5kW1wiVEFHXCJdKCBcIipcIiwgb3V0ZXJtb3N0ICksXG5cdFx0XHRcdC8vIFVzZSBpbnRlZ2VyIGRpcnJ1bnMgaWZmIHRoaXMgaXMgdGhlIG91dGVybW9zdCBtYXRjaGVyXG5cdFx0XHRcdGRpcnJ1bnNVbmlxdWUgPSAoZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEpLFxuXHRcdFx0XHRsZW4gPSBlbGVtcy5sZW5ndGg7XG5cblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCA9PT0gZG9jdW1lbnQgfHwgY29udGV4dCB8fCBvdXRlcm1vc3Q7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBlbGVtZW50cyBwYXNzaW5nIGVsZW1lbnRNYXRjaGVycyBkaXJlY3RseSB0byByZXN1bHRzXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTw5LCBTYWZhcmlcblx0XHRcdC8vIFRvbGVyYXRlIE5vZGVMaXN0IHByb3BlcnRpZXMgKElFOiBcImxlbmd0aFwiOyBTYWZhcmk6IDxudW1iZXI+KSBtYXRjaGluZyBlbGVtZW50cyBieSBpZFxuXHRcdFx0Zm9yICggOyBpICE9PSBsZW4gJiYgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGJ5RWxlbWVudCAmJiBlbGVtICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdGlmICggIWNvbnRleHQgJiYgZWxlbS5vd25lckRvY3VtZW50ICE9PSBkb2N1bWVudCApIHtcblx0XHRcdFx0XHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdFx0XHRcdFx0XHR4bWwgPSAhZG9jdW1lbnRJc0hUTUw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHdoaWxlICggKG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbaisrXSkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQgfHwgZG9jdW1lbnQsIHhtbCkgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUcmFjayB1bm1hdGNoZWQgZWxlbWVudHMgZm9yIHNldCBmaWx0ZXJzXG5cdFx0XHRcdGlmICggYnlTZXQgKSB7XG5cdFx0XHRcdFx0Ly8gVGhleSB3aWxsIGhhdmUgZ29uZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBtYXRjaGVyc1xuXHRcdFx0XHRcdGlmICggKGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtKSApIHtcblx0XHRcdFx0XHRcdG1hdGNoZWRDb3VudC0tO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIExlbmd0aGVuIHRoZSBhcnJheSBmb3IgZXZlcnkgZWxlbWVudCwgbWF0Y2hlZCBvciBub3Rcblx0XHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBgaWAgaXMgbm93IHRoZSBjb3VudCBvZiBlbGVtZW50cyB2aXNpdGVkIGFib3ZlLCBhbmQgYWRkaW5nIGl0IHRvIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBtYWtlcyB0aGUgbGF0dGVyIG5vbm5lZ2F0aXZlLlxuXHRcdFx0bWF0Y2hlZENvdW50ICs9IGk7XG5cblx0XHRcdC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50c1xuXHRcdFx0Ly8gTk9URTogVGhpcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVyZSBhcmUgbm8gdW5tYXRjaGVkIGVsZW1lbnRzIChpLmUuLCBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gZXF1YWxzIGBpYCksIHVubGVzcyB3ZSBkaWRuJ3QgdmlzaXQgX2FueV8gZWxlbWVudHMgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoYXZlXG5cdFx0XHQvLyBubyBlbGVtZW50IG1hdGNoZXJzIGFuZCBubyBzZWVkLlxuXHRcdFx0Ly8gSW5jcmVtZW50aW5nIGFuIGluaXRpYWxseS1zdHJpbmcgXCIwXCIgYGlgIGFsbG93cyBgaWAgdG8gcmVtYWluIGEgc3RyaW5nIG9ubHkgaW4gdGhhdFxuXHRcdFx0Ly8gY2FzZSwgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBcIjAwXCIgYG1hdGNoZWRDb3VudGAgdGhhdCBkaWZmZXJzIGZyb20gYGlgIGJ1dCBpcyBhbHNvXG5cdFx0XHQvLyBudW1lcmljYWxseSB6ZXJvLlxuXHRcdFx0aWYgKCBieVNldCAmJiBpICE9PSBtYXRjaGVkQ291bnQgKSB7XG5cdFx0XHRcdGogPSAwO1xuXHRcdFx0XHR3aGlsZSAoIChtYXRjaGVyID0gc2V0TWF0Y2hlcnNbaisrXSkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlciggdW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHQvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nXG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkQ291bnQgPiAwICkge1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggISh1bm1hdGNoZWRbaV0gfHwgc2V0TWF0Y2hlZFtpXSkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0TWF0Y2hlZFtpXSA9IHBvcC5jYWxsKCByZXN1bHRzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBEaXNjYXJkIGluZGV4IHBsYWNlaG9sZGVyIHZhbHVlcyB0byBnZXQgb25seSBhY3R1YWwgbWF0Y2hlc1xuXHRcdFx0XHRcdHNldE1hdGNoZWQgPSBjb25kZW5zZSggc2V0TWF0Y2hlZCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQWRkIG1hdGNoZXMgdG8gcmVzdWx0c1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7XG5cblx0XHRcdFx0Ly8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMgc3VjY2VlZGluZyBtdWx0aXBsZSBzdWNjZXNzZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5nXG5cdFx0XHRcdGlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdCggbWF0Y2hlZENvdW50ICsgc2V0TWF0Y2hlcnMubGVuZ3RoICkgPiAxICkge1xuXG5cdFx0XHRcdFx0U2l6emxlLnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdmVycmlkZSBtYW5pcHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnNcblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1bm1hdGNoZWQ7XG5cdFx0fTtcblxuXHRyZXR1cm4gYnlTZXQgP1xuXHRcdG1hcmtGdW5jdGlvbiggc3VwZXJNYXRjaGVyICkgOlxuXHRcdHN1cGVyTWF0Y2hlcjtcbn1cblxuY29tcGlsZSA9IFNpenpsZS5jb21waWxlID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBtYXRjaCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHtcblx0dmFyIGksXG5cdFx0c2V0TWF0Y2hlcnMgPSBbXSxcblx0XHRlbGVtZW50TWF0Y2hlcnMgPSBbXSxcblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCAhY2FjaGVkICkge1xuXHRcdC8vIEdlbmVyYXRlIGEgZnVuY3Rpb24gb2YgcmVjdXJzaXZlIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoZWNrIGVhY2ggZWxlbWVudFxuXHRcdGlmICggIW1hdGNoICkge1xuXHRcdFx0bWF0Y2ggPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHR9XG5cdFx0aSA9IG1hdGNoLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGNhY2hlZCA9IG1hdGNoZXJGcm9tVG9rZW5zKCBtYXRjaFtpXSApO1xuXHRcdFx0aWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0c2V0TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZSggc2VsZWN0b3IsIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApICk7XG5cblx0XHQvLyBTYXZlIHNlbGVjdG9yIGFuZCB0b2tlbml6YXRpb25cblx0XHRjYWNoZWQuc2VsZWN0b3IgPSBzZWxlY3Rvcjtcblx0fVxuXHRyZXR1cm4gY2FjaGVkO1xufTtcblxuLyoqXG4gKiBBIGxvdy1sZXZlbCBzZWxlY3Rpb24gZnVuY3Rpb24gdGhhdCB3b3JrcyB3aXRoIFNpenpsZSdzIGNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb25zXG4gKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gc2VsZWN0b3IgQSBzZWxlY3RvciBvciBhIHByZS1jb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uIGJ1aWx0IHdpdGggU2l6emxlLmNvbXBpbGVcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGV4dFxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdHNdXG4gKiBAcGFyYW0ge0FycmF5fSBbc2VlZF0gQSBzZXQgb2YgZWxlbWVudHMgdG8gbWF0Y2ggYWdhaW5zdFxuICovXG5zZWxlY3QgPSBTaXp6bGUuc2VsZWN0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCxcblx0XHRjb21waWxlZCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICYmIHNlbGVjdG9yLFxuXHRcdG1hdGNoID0gIXNlZWQgJiYgdG9rZW5pemUoIChzZWxlY3RvciA9IGNvbXBpbGVkLnNlbGVjdG9yIHx8IHNlbGVjdG9yKSApO1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlbGVjdG9yIGluIHRoZSBsaXN0IGFuZCBubyBzZWVkXG5cdC8vICh0aGUgbGF0dGVyIG9mIHdoaWNoIGd1YXJhbnRlZXMgdXMgY29udGV4dClcblx0aWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7XG5cblx0XHQvLyBSZWR1Y2UgY29udGV4dCBpZiB0aGUgbGVhZGluZyBjb21wb3VuZCBzZWxlY3RvciBpcyBhbiBJRFxuXHRcdHRva2VucyA9IG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAgKTtcblx0XHRpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICh0b2tlbiA9IHRva2Vuc1swXSkudHlwZSA9PT0gXCJJRFwiICYmXG5cdFx0XHRcdHN1cHBvcnQuZ2V0QnlJZCAmJiBjb250ZXh0Lm5vZGVUeXBlID09PSA5ICYmIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0XHRcdEV4cHIucmVsYXRpdmVbIHRva2Vuc1sxXS50eXBlIF0gKSB7XG5cblx0XHRcdGNvbnRleHQgPSAoIEV4cHIuZmluZFtcIklEXCJdKCB0b2tlbi5tYXRjaGVzWzBdLnJlcGxhY2UocnVuZXNjYXBlLCBmdW5lc2NhcGUpLCBjb250ZXh0ICkgfHwgW10gKVswXTtcblx0XHRcdGlmICggIWNvbnRleHQgKSB7XG5cdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHQvLyBQcmVjb21waWxlZCBtYXRjaGVycyB3aWxsIHN0aWxsIHZlcmlmeSBhbmNlc3RyeSwgc28gc3RlcCB1cCBhIGxldmVsXG5cdFx0XHR9IGVsc2UgaWYgKCBjb21waWxlZCApIHtcblx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSggdG9rZW5zLnNoaWZ0KCkudmFsdWUubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmV0Y2ggYSBzZWVkIHNldCBmb3IgcmlnaHQtdG8tbGVmdCBtYXRjaGluZ1xuXHRcdGkgPSBtYXRjaEV4cHJbXCJuZWVkc0NvbnRleHRcIl0udGVzdCggc2VsZWN0b3IgKSA/IDAgOiB0b2tlbnMubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG9rZW4gPSB0b2tlbnNbaV07XG5cblx0XHRcdC8vIEFib3J0IGlmIHdlIGhpdCBhIGNvbWJpbmF0b3Jcblx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgKHR5cGUgPSB0b2tlbi50eXBlKSBdICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggKGZpbmQgPSBFeHByLmZpbmRbIHR5cGUgXSkgKSB7XG5cdFx0XHRcdC8vIFNlYXJjaCwgZXhwYW5kaW5nIGNvbnRleHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21iaW5hdG9yc1xuXHRcdFx0XHRpZiAoIChzZWVkID0gZmluZChcblx0XHRcdFx0XHR0b2tlbi5tYXRjaGVzWzBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksXG5cdFx0XHRcdFx0cnNpYmxpbmcudGVzdCggdG9rZW5zWzBdLnR5cGUgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dFxuXHRcdFx0XHQpKSApIHtcblxuXHRcdFx0XHRcdC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBlYXJseVxuXHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoIGksIDEgKTtcblx0XHRcdFx0XHRzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyApO1xuXHRcdFx0XHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2VlZCApO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDb21waWxlIGFuZCBleGVjdXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9uIGlmIG9uZSBpcyBub3QgcHJvdmlkZWRcblx0Ly8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZVxuXHQoIGNvbXBpbGVkIHx8IGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCApICkoXG5cdFx0c2VlZCxcblx0XHRjb250ZXh0LFxuXHRcdCFkb2N1bWVudElzSFRNTCxcblx0XHRyZXN1bHRzLFxuXHRcdCFjb250ZXh0IHx8IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0KTtcblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vLyBPbmUtdGltZSBhc3NpZ25tZW50c1xuXG4vLyBTb3J0IHN0YWJpbGl0eVxuc3VwcG9ydC5zb3J0U3RhYmxlID0gZXhwYW5kby5zcGxpdChcIlwiKS5zb3J0KCBzb3J0T3JkZXIgKS5qb2luKFwiXCIpID09PSBleHBhbmRvO1xuXG4vLyBTdXBwb3J0OiBDaHJvbWUgMTQtMzUrXG4vLyBBbHdheXMgYXNzdW1lIGR1cGxpY2F0ZXMgaWYgdGhleSBhcmVuJ3QgcGFzc2VkIHRvIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uXG5zdXBwb3J0LmRldGVjdER1cGxpY2F0ZXMgPSAhIWhhc0R1cGxpY2F0ZTtcblxuLy8gSW5pdGlhbGl6ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IGRvY3VtZW50XG5zZXREb2N1bWVudCgpO1xuXG4vLyBTdXBwb3J0OiBXZWJraXQ8NTM3LjMyIC0gU2FmYXJpIDYuMC4zL0Nocm9tZSAyNSAoZml4ZWQgaW4gQ2hyb21lIDI3KVxuLy8gRGV0YWNoZWQgbm9kZXMgY29uZm91bmRpbmdseSBmb2xsb3cgKmVhY2ggb3RoZXIqXG5zdXBwb3J0LnNvcnREZXRhY2hlZCA9IGFzc2VydChmdW5jdGlvbiggZGl2MSApIHtcblx0Ly8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0IChmb2xsb3dpbmcpXG5cdHJldHVybiBkaXYxLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpICkgJiAxO1xufSk7XG5cbi8vIFN1cHBvcnQ6IElFPDhcbi8vIFByZXZlbnQgYXR0cmlidXRlL3Byb3BlcnR5IFwiaW50ZXJwb2xhdGlvblwiXG4vLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4XG5pZiAoICFhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcblx0ZGl2LmlubmVySFRNTCA9IFwiPGEgaHJlZj0nIyc+PC9hPlwiO1xuXHRyZXR1cm4gZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSA9PT0gXCIjXCIgO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInR5cGVcIiA/IDEgOiAyICk7XG5cdFx0fVxuXHR9KTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGRlZmF1bHRWYWx1ZSBpbiBwbGFjZSBvZiBnZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKVxuaWYgKCAhc3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcblx0ZGl2LmlubmVySFRNTCA9IFwiPGlucHV0Lz5cIjtcblx0ZGl2LmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCBcInZhbHVlXCIsIFwiXCIgKTtcblx0cmV0dXJuIGRpdi5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IFwiXCI7XG59KSApIHtcblx0YWRkSGFuZGxlKCBcInZhbHVlXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLmRlZmF1bHRWYWx1ZTtcblx0XHR9XG5cdH0pO1xufVxuXG4vLyBTdXBwb3J0OiBJRTw5XG4vLyBVc2UgZ2V0QXR0cmlidXRlTm9kZSB0byBmZXRjaCBib29sZWFucyB3aGVuIGdldEF0dHJpYnV0ZSBsaWVzXG5pZiAoICFhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcblx0cmV0dXJuIGRpdi5nZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSA9PSBudWxsO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggYm9vbGVhbnMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgdmFsO1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6XG5cdFx0XHRcdFx0KHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdH1cblx0fSk7XG59XG5cbnJldHVybiBTaXp6bGU7XG5cbn0pKCB3aW5kb3cgKTtcblxuXG5cbmpRdWVyeS5maW5kID0gU2l6emxlO1xualF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzO1xualF1ZXJ5LmV4cHJbIFwiOlwiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zO1xualF1ZXJ5LnVuaXF1ZVNvcnQgPSBqUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7XG5qUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0O1xualF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlzWE1MO1xualF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zO1xuXG5cblxudmFyIGRpciA9IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdLFxuXHRcdHRydW5jYXRlID0gdW50aWwgIT09IHVuZGVmaW5lZDtcblxuXHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgJiYgZWxlbS5ub2RlVHlwZSAhPT0gOSApIHtcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRpZiAoIHRydW5jYXRlICYmIGpRdWVyeSggZWxlbSApLmlzKCB1bnRpbCApICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdG1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHNpYmxpbmdzID0gZnVuY3Rpb24oIG4sIGVsZW0gKSB7XG5cdHZhciBtYXRjaGVkID0gW107XG5cblx0Zm9yICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHtcblx0XHRpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHtcblx0XHRcdG1hdGNoZWQucHVzaCggbiApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtcblxudmFyIHJzaW5nbGVUYWcgPSAoIC9ePChbXFx3LV0rKVxccypcXC8/Pig/OjxcXC9cXDE+fCkkLyApO1xuXG5cblxudmFyIHJpc1NpbXBsZSA9IC9eLlteOiNcXFtcXC4sXSokLztcblxuLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3RcbmZ1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwgbm90ICkge1xuXHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdC8qIGpzaGludCAtVzAxOCAqL1xuXHRcdFx0cmV0dXJuICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKSAhPT0gbm90O1xuXHRcdH0gKTtcblxuXHR9XG5cblx0aWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSAhPT0gbm90O1xuXHRcdH0gKTtcblxuXHR9XG5cblx0aWYgKCB0eXBlb2YgcXVhbGlmaWVyID09PSBcInN0cmluZ1wiICkge1xuXHRcdGlmICggcmlzU2ltcGxlLnRlc3QoIHF1YWxpZmllciApICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZWxlbWVudHMsIG5vdCApO1xuXHRcdH1cblxuXHRcdHF1YWxpZmllciA9IGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZWxlbWVudHMgKTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPiAtMSApICE9PSBub3Q7XG5cdH0gKTtcbn1cblxualF1ZXJ5LmZpbHRlciA9IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkge1xuXHR2YXIgZWxlbSA9IGVsZW1zWyAwIF07XG5cblx0aWYgKCBub3QgKSB7XG5cdFx0ZXhwciA9IFwiOm5vdChcIiArIGV4cHIgKyBcIilcIjtcblx0fVxuXG5cdHJldHVybiBlbGVtcy5sZW5ndGggPT09IDEgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSA/XG5cdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBleHByICkgPyBbIGVsZW0gXSA6IFtdIDpcblx0XHRqUXVlcnkuZmluZC5tYXRjaGVzKCBleHByLCBqUXVlcnkuZ3JlcCggZWxlbXMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7XG5cdFx0fSApICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgaSxcblx0XHRcdGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0cmV0ID0gW10sXG5cdFx0XHRzZWxmID0gdGhpcztcblxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKSApO1xuXHRcdH1cblxuXHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRqUXVlcnkuZmluZCggc2VsZWN0b3IsIHNlbGZbIGkgXSwgcmV0ICk7XG5cdFx0fVxuXG5cdFx0Ly8gTmVlZGVkIGJlY2F1c2UgJCggc2VsZWN0b3IsIGNvbnRleHQgKSBiZWNvbWVzICQoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApXG5cdFx0cmV0ID0gdGhpcy5wdXNoU3RhY2soIGxlbiA+IDEgPyBqUXVlcnkudW5pcXVlKCByZXQgKSA6IHJldCApO1xuXHRcdHJldC5zZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IgPyB0aGlzLnNlbGVjdG9yICsgXCIgXCIgKyBzZWxlY3RvciA6IHNlbGVjdG9yO1xuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cdGZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgZmFsc2UgKSApO1xuXHR9LFxuXHRub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIHRydWUgKSApO1xuXHR9LFxuXHRpczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiAhIXdpbm5vdyhcblx0XHRcdHRoaXMsXG5cblx0XHRcdC8vIElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSByZXR1cm5lZCBzZXRcblx0XHRcdC8vIHNvICQoXCJwOmZpcnN0XCIpLmlzKFwicDpsYXN0XCIpIHdvbid0IHJldHVybiB0cnVlIGZvciBhIGRvYyB3aXRoIHR3byBcInBcIi5cblx0XHRcdHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiAmJiBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICkgP1xuXHRcdFx0XHRqUXVlcnkoIHNlbGVjdG9yICkgOlxuXHRcdFx0XHRzZWxlY3RvciB8fCBbXSxcblx0XHRcdGZhbHNlXG5cdFx0KS5sZW5ndGg7XG5cdH1cbn0gKTtcblxuXG4vLyBJbml0aWFsaXplIGEgalF1ZXJ5IG9iamVjdFxuXG5cbi8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5KGRvY3VtZW50KVxudmFyIHJvb3RqUXVlcnksXG5cblx0Ly8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3Ncblx0Ly8gUHJpb3JpdGl6ZSAjaWQgb3ZlciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKCM5NTIxKVxuXHQvLyBTdHJpY3QgSFRNTCByZWNvZ25pdGlvbiAoIzExMjkwOiBtdXN0IHN0YXJ0IHdpdGggPClcblx0cnF1aWNrRXhwciA9IC9eKD86XFxzKig8W1xcd1xcV10rPilbXj5dKnwjKFtcXHctXSopKSQvLFxuXG5cdGluaXQgPSBqUXVlcnkuZm4uaW5pdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcm9vdCApIHtcblx0XHR2YXIgbWF0Y2gsIGVsZW07XG5cblx0XHQvLyBIQU5ETEU6ICQoXCJcIiksICQobnVsbCksICQodW5kZWZpbmVkKSwgJChmYWxzZSlcblx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdC8vIE1ldGhvZCBpbml0KCkgYWNjZXB0cyBhbiBhbHRlcm5hdGUgcm9vdGpRdWVyeVxuXHRcdC8vIHNvIG1pZ3JhdGUgY2FuIHN1cHBvcnQgalF1ZXJ5LnN1YiAoZ2gtMjEwMSlcblx0XHRyb290ID0gcm9vdCB8fCByb290alF1ZXJ5O1xuXG5cdFx0Ly8gSGFuZGxlIEhUTUwgc3RyaW5nc1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0aWYgKCBzZWxlY3RvclsgMCBdID09PSBcIjxcIiAmJlxuXHRcdFx0XHRzZWxlY3Rvclsgc2VsZWN0b3IubGVuZ3RoIC0gMSBdID09PSBcIj5cIiAmJlxuXHRcdFx0XHRzZWxlY3Rvci5sZW5ndGggPj0gMyApIHtcblxuXHRcdFx0XHQvLyBBc3N1bWUgdGhhdCBzdHJpbmdzIHRoYXQgc3RhcnQgYW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRoZSByZWdleCBjaGVja1xuXHRcdFx0XHRtYXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1hdGNoIGh0bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRleHQgaXMgc3BlY2lmaWVkIGZvciAjaWRcblx0XHRcdGlmICggbWF0Y2ggJiYgKCBtYXRjaFsgMSBdIHx8ICFjb250ZXh0ICkgKSB7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpXG5cdFx0XHRcdGlmICggbWF0Y2hbIDEgXSApIHtcblx0XHRcdFx0XHRjb250ZXh0ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbIDAgXSA6IGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBPcHRpb24gdG8gcnVuIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbGx5IGxldCB0aGUgZXJyb3IgYmUgdGhyb3duIGlmIHBhcnNlSFRNTCBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcywgalF1ZXJ5LnBhcnNlSFRNTChcblx0XHRcdFx0XHRcdG1hdGNoWyAxIF0sXG5cdFx0XHRcdFx0XHRjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50LFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdCkgKTtcblxuXHRcdFx0XHRcdC8vIEhBTkRMRTogJChodG1sLCBwcm9wcylcblx0XHRcdFx0XHRpZiAoIHJzaW5nbGVUYWcudGVzdCggbWF0Y2hbIDEgXSApICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCBtYXRjaCBpbiBjb250ZXh0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFByb3BlcnRpZXMgb2YgY29udGV4dCBhcmUgY2FsbGVkIGFzIG1ldGhvZHMgaWYgcG9zc2libGVcblx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXNbIG1hdGNoIF0oIGNvbnRleHRbIG1hdGNoIF0gKTtcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgb3RoZXJ3aXNlIHNldCBhcyBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hdHRyKCBtYXRjaCwgY29udGV4dFsgbWF0Y2ggXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKCNpZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWyAyIF0gKTtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IEJsYWNrYmVycnkgNC42XG5cdFx0XHRcdFx0Ly8gZ0VCSUQgcmV0dXJucyBub2RlcyBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50ICgjNjk2Mylcblx0XHRcdFx0XHRpZiAoIGVsZW0gJiYgZWxlbS5wYXJlbnROb2RlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdFxuXHRcdFx0XHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0XHRcdFx0dGhpc1sgMCBdID0gZWxlbTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLmNvbnRleHQgPSBkb2N1bWVudDtcblx0XHRcdFx0XHR0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsICQoLi4uKSlcblx0XHRcdH0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkge1xuXHRcdFx0XHRyZXR1cm4gKCBjb250ZXh0IHx8IHJvb3QgKS5maW5kKCBzZWxlY3RvciApO1xuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgY29udGV4dClcblx0XHRcdC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQoY29udGV4dCkuZmluZChleHByKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSEFORExFOiAkKERPTUVsZW1lbnQpXG5cdFx0fSBlbHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7XG5cdFx0XHR0aGlzLmNvbnRleHQgPSB0aGlzWyAwIF0gPSBzZWxlY3Rvcjtcblx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0Ly8gSEFORExFOiAkKGZ1bmN0aW9uKVxuXHRcdC8vIFNob3J0Y3V0IGZvciBkb2N1bWVudCByZWFkeVxuXHRcdH0gZWxzZSBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBzZWxlY3RvciApICkge1xuXHRcdFx0cmV0dXJuIHJvb3QucmVhZHkgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHJvb3QucmVhZHkoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIEV4ZWN1dGUgaW1tZWRpYXRlbHkgaWYgcmVhZHkgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0c2VsZWN0b3IoIGpRdWVyeSApO1xuXHRcdH1cblxuXHRcdGlmICggc2VsZWN0b3Iuc2VsZWN0b3IgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHRoaXMuc2VsZWN0b3IgPSBzZWxlY3Rvci5zZWxlY3Rvcjtcblx0XHRcdHRoaXMuY29udGV4dCA9IHNlbGVjdG9yLmNvbnRleHQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7XG5cdH07XG5cbi8vIEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3RhbnRpYXRpb25cbmluaXQucHJvdG90eXBlID0galF1ZXJ5LmZuO1xuXG4vLyBJbml0aWFsaXplIGNlbnRyYWwgcmVmZXJlbmNlXG5yb290alF1ZXJ5ID0galF1ZXJ5KCBkb2N1bWVudCApO1xuXG5cbnZhciBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxcblxuXHQvLyBNZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldFxuXHRndWFyYW50ZWVkVW5pcXVlID0ge1xuXHRcdGNoaWxkcmVuOiB0cnVlLFxuXHRcdGNvbnRlbnRzOiB0cnVlLFxuXHRcdG5leHQ6IHRydWUsXG5cdFx0cHJldjogdHJ1ZVxuXHR9O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGhhczogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHR2YXIgdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICksXG5cdFx0XHRsID0gdGFyZ2V0cy5sZW5ndGg7XG5cblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFyZ2V0c1sgaSBdICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Y2xvc2VzdDogZnVuY3Rpb24oIHNlbGVjdG9ycywgY29udGV4dCApIHtcblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRtYXRjaGVkID0gW10sXG5cdFx0XHRwb3MgPSBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9ycyApIHx8IHR5cGVvZiBzZWxlY3RvcnMgIT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRqUXVlcnkoIHNlbGVjdG9ycywgY29udGV4dCB8fCB0aGlzLmNvbnRleHQgKSA6XG5cdFx0XHRcdDA7XG5cblx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRmb3IgKCBjdXIgPSB0aGlzWyBpIF07IGN1ciAmJiBjdXIgIT09IGNvbnRleHQ7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXG5cdFx0XHRcdC8vIEFsd2F5cyBza2lwIGRvY3VtZW50IGZyYWdtZW50c1xuXHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA8IDExICYmICggcG9zID9cblx0XHRcdFx0XHRwb3MuaW5kZXgoIGN1ciApID4gLTEgOlxuXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgcGFzcyBub24tZWxlbWVudHMgdG8gU2l6emxlXG5cdFx0XHRcdFx0Y3VyLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGN1ciwgc2VsZWN0b3JzICkgKSApIHtcblxuXHRcdFx0XHRcdG1hdGNoZWQucHVzaCggY3VyICk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQubGVuZ3RoID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICkgOiBtYXRjaGVkICk7XG5cdH0sXG5cblx0Ly8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbiB0aGUgc2V0XG5cdGluZGV4OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5kZXggaW4gcGFyZW50XG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybiAoIHRoaXNbIDAgXSAmJiB0aGlzWyAwIF0ucGFyZW50Tm9kZSApID8gdGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGggOiAtMTtcblx0XHR9XG5cblx0XHQvLyBJbmRleCBpbiBzZWxlY3RvclxuXHRcdGlmICggdHlwZW9mIGVsZW0gPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdGhpc1sgMCBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50XG5cdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggdGhpcyxcblxuXHRcdFx0Ly8gSWYgaXQgcmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0LCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1c2VkXG5cdFx0XHRlbGVtLmpxdWVyeSA/IGVsZW1bIDAgXSA6IGVsZW1cblx0XHQpO1xuXHR9LFxuXG5cdGFkZDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayhcblx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMuZ2V0KCksIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSApXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblxuXHRhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID9cblx0XHRcdHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoIHNlbGVjdG9yIClcblx0XHQpO1xuXHR9XG59ICk7XG5cbmZ1bmN0aW9uIHNpYmxpbmcoIGN1ciwgZGlyICkge1xuXHR3aGlsZSAoICggY3VyID0gY3VyWyBkaXIgXSApICYmIGN1ci5ub2RlVHlwZSAhPT0gMSApIHt9XG5cdHJldHVybiBjdXI7XG59XG5cbmpRdWVyeS5lYWNoKCB7XG5cdHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRyZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBwYXJlbnQgOiBudWxsO1xuXHR9LFxuXHRwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiApO1xuXHR9LFxuXHRwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiwgdW50aWwgKTtcblx0fSxcblx0bmV4dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHByZXZVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoICggZWxlbS5wYXJlbnROb2RlIHx8IHt9ICkuZmlyc3RDaGlsZCwgZWxlbSApO1xuXHR9LFxuXHRjaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCBlbGVtLmZpcnN0Q2hpbGQgKTtcblx0fSxcblx0Y29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudCB8fCBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTtcblx0fVxufSwgZnVuY3Rpb24oIG5hbWUsIGZuICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7XG5cdFx0dmFyIG1hdGNoZWQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTtcblxuXHRcdGlmICggbmFtZS5zbGljZSggLTUgKSAhPT0gXCJVbnRpbFwiICkge1xuXHRcdFx0c2VsZWN0b3IgPSB1bnRpbDtcblx0XHR9XG5cblx0XHRpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5sZW5ndGggPiAxICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgZHVwbGljYXRlc1xuXHRcdFx0aWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkge1xuXHRcdFx0XHRqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXZlcnNlIG9yZGVyIGZvciBwYXJlbnRzKiBhbmQgcHJldi1kZXJpdmF0aXZlc1xuXHRcdFx0aWYgKCBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkge1xuXHRcdFx0XHRtYXRjaGVkLnJldmVyc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQgKTtcblx0fTtcbn0gKTtcbnZhciBybm90d2hpdGUgPSAoIC9cXFMrL2cgKTtcblxuXG5cbi8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25zIGludG8gT2JqZWN0LWZvcm1hdHRlZCBvbmVzXG5mdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkge1xuXHR2YXIgb2JqZWN0ID0ge307XG5cdGpRdWVyeS5lYWNoKCBvcHRpb25zLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXSwgZnVuY3Rpb24oIF8sIGZsYWcgKSB7XG5cdFx0b2JqZWN0WyBmbGFnIF0gPSB0cnVlO1xuXHR9ICk7XG5cdHJldHVybiBvYmplY3Q7XG59XG5cbi8qXG4gKiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcbiAqXG4gKlx0b3B0aW9uczogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0IHdpbGwgY2hhbmdlIGhvd1xuICpcdFx0XHR0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzIG9yIGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2JqZWN0XG4gKlxuICogQnkgZGVmYXVsdCBhIGNhbGxiYWNrIGxpc3Qgd2lsbCBhY3QgbGlrZSBhbiBldmVudCBjYWxsYmFjayBsaXN0IGFuZCBjYW4gYmVcbiAqIFwiZmlyZWRcIiBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBQb3NzaWJsZSBvcHRpb25zOlxuICpcbiAqXHRvbmNlOlx0XHRcdHdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBsaXN0IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0bWVtb3J5Olx0XHRcdHdpbGwga2VlcCB0cmFjayBvZiBwcmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwgY2FsbCBhbnkgY2FsbGJhY2sgYWRkZWRcbiAqXHRcdFx0XHRcdGFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0IFwibWVtb3JpemVkXCJcbiAqXHRcdFx0XHRcdHZhbHVlcyAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHR1bmlxdWU6XHRcdFx0d2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpXG4gKlxuICpcdHN0b3BPbkZhbHNlOlx0aW50ZXJydXB0IGNhbGxpbmdzIHdoZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNlXG4gKlxuICovXG5qUXVlcnkuQ2FsbGJhY2tzID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0Ly8gQ29udmVydCBvcHRpb25zIGZyb20gU3RyaW5nLWZvcm1hdHRlZCB0byBPYmplY3QtZm9ybWF0dGVkIGlmIG5lZWRlZFxuXHQvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpXG5cdG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0Y3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIDpcblx0XHRqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0aW9ucyApO1xuXG5cdHZhciAvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCBpcyBjdXJyZW50bHkgZmlyaW5nXG5cdFx0ZmlyaW5nLFxuXG5cdFx0Ly8gTGFzdCBmaXJlIHZhbHVlIGZvciBub24tZm9yZ2V0dGFibGUgbGlzdHNcblx0XHRtZW1vcnksXG5cblx0XHQvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZFxuXHRcdGZpcmVkLFxuXG5cdFx0Ly8gRmxhZyB0byBwcmV2ZW50IGZpcmluZ1xuXHRcdGxvY2tlZCxcblxuXHRcdC8vIEFjdHVhbCBjYWxsYmFjayBsaXN0XG5cdFx0bGlzdCA9IFtdLFxuXG5cdFx0Ly8gUXVldWUgb2YgZXhlY3V0aW9uIGRhdGEgZm9yIHJlcGVhdGFibGUgbGlzdHNcblx0XHRxdWV1ZSA9IFtdLFxuXG5cdFx0Ly8gSW5kZXggb2YgY3VycmVudGx5IGZpcmluZyBjYWxsYmFjayAobW9kaWZpZWQgYnkgYWRkL3JlbW92ZSBhcyBuZWVkZWQpXG5cdFx0ZmlyaW5nSW5kZXggPSAtMSxcblxuXHRcdC8vIEZpcmUgY2FsbGJhY2tzXG5cdFx0ZmlyZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbmZvcmNlIHNpbmdsZS1maXJpbmdcblx0XHRcdGxvY2tlZCA9IG9wdGlvbnMub25jZTtcblxuXHRcdFx0Ly8gRXhlY3V0ZSBjYWxsYmFja3MgZm9yIGFsbCBwZW5kaW5nIGV4ZWN1dGlvbnMsXG5cdFx0XHQvLyByZXNwZWN0aW5nIGZpcmluZ0luZGV4IG92ZXJyaWRlcyBhbmQgcnVudGltZSBjaGFuZ2VzXG5cdFx0XHRmaXJlZCA9IGZpcmluZyA9IHRydWU7XG5cdFx0XHRmb3IgKCA7IHF1ZXVlLmxlbmd0aDsgZmlyaW5nSW5kZXggPSAtMSApIHtcblx0XHRcdFx0bWVtb3J5ID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdFx0d2hpbGUgKCArK2ZpcmluZ0luZGV4IDwgbGlzdC5sZW5ndGggKSB7XG5cblx0XHRcdFx0XHQvLyBSdW4gY2FsbGJhY2sgYW5kIGNoZWNrIGZvciBlYXJseSB0ZXJtaW5hdGlvblxuXHRcdFx0XHRcdGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggbWVtb3J5WyAwIF0sIG1lbW9yeVsgMSBdICkgPT09IGZhbHNlICYmXG5cdFx0XHRcdFx0XHRvcHRpb25zLnN0b3BPbkZhbHNlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBKdW1wIHRvIGVuZCBhbmQgZm9yZ2V0IHRoZSBkYXRhIHNvIC5hZGQgZG9lc24ndCByZS1maXJlXG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoO1xuXHRcdFx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvcmdldCB0aGUgZGF0YSBpZiB3ZSdyZSBkb25lIHdpdGggaXRcblx0XHRcdGlmICggIW9wdGlvbnMubWVtb3J5ICkge1xuXHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0ZmlyaW5nID0gZmFsc2U7XG5cblx0XHRcdC8vIENsZWFuIHVwIGlmIHdlJ3JlIGRvbmUgZmlyaW5nIGZvciBnb29kXG5cdFx0XHRpZiAoIGxvY2tlZCApIHtcblxuXHRcdFx0XHQvLyBLZWVwIGFuIGVtcHR5IGxpc3QgaWYgd2UgaGF2ZSBkYXRhIGZvciBmdXR1cmUgYWRkIGNhbGxzXG5cdFx0XHRcdGlmICggbWVtb3J5ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIHRoaXMgb2JqZWN0IGlzIHNwZW50XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGlzdCA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3Rcblx0XHRzZWxmID0ge1xuXG5cdFx0XHQvLyBBZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tzIHRvIHRoZSBsaXN0XG5cdFx0XHRhZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBoYXZlIG1lbW9yeSBmcm9tIGEgcGFzdCBydW4sIHdlIHNob3VsZCBmaXJlIGFmdGVyIGFkZGluZ1xuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoIC0gMTtcblx0XHRcdFx0XHRcdHF1ZXVlLnB1c2goIG1lbW9yeSApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCggZnVuY3Rpb24gYWRkKCBhcmdzICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggIW9wdGlvbnMudW5pcXVlIHx8ICFzZWxmLmhhcyggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsaXN0LnB1c2goIGFyZyApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggYXJnICYmIGFyZy5sZW5ndGggJiYgalF1ZXJ5LnR5cGUoIGFyZyApICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSW5zcGVjdCByZWN1cnNpdmVseVxuXHRcdFx0XHRcdFx0XHRcdGFkZCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHR9ICkoIGFyZ3VtZW50cyApO1xuXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBsaXN0XG5cdFx0XHRyZW1vdmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdHZhciBpbmRleDtcblx0XHRcdFx0XHR3aGlsZSAoICggaW5kZXggPSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdGxpc3Quc3BsaWNlKCBpbmRleCwgMSApO1xuXG5cdFx0XHRcdFx0XHQvLyBIYW5kbGUgZmlyaW5nIGluZGV4ZXNcblx0XHRcdFx0XHRcdGlmICggaW5kZXggPD0gZmlyaW5nSW5kZXggKSB7XG5cdFx0XHRcdFx0XHRcdGZpcmluZ0luZGV4LS07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdC5cblx0XHRcdC8vIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tzIGF0dGFjaGVkLlxuXHRcdFx0aGFzOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdHJldHVybiBmbiA/XG5cdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6XG5cdFx0XHRcdFx0bGlzdC5sZW5ndGggPiAwO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGFsbCBjYWxsYmFja3MgZnJvbSB0aGUgbGlzdFxuXHRcdFx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZSBhbmQgLmFkZFxuXHRcdFx0Ly8gQWJvcnQgYW55IGN1cnJlbnQvcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHQvLyBDbGVhciBhbGwgY2FsbGJhY2tzIGFuZCB2YWx1ZXNcblx0XHRcdGRpc2FibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0ZGlzYWJsZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gIWxpc3Q7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlXG5cdFx0XHQvLyBBbHNvIGRpc2FibGUgLmFkZCB1bmxlc3Mgd2UgaGF2ZSBtZW1vcnkgKHNpbmNlIGl0IHdvdWxkIGhhdmUgbm8gZWZmZWN0KVxuXHRcdFx0Ly8gQWJvcnQgYW55IHBlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0bG9jazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGlmICggIW1lbW9yeSApIHtcblx0XHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRsb2NrZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFsb2NrZWQ7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzXG5cdFx0XHRmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7XG5cdFx0XHRcdGlmICggIWxvY2tlZCApIHtcblx0XHRcdFx0XHRhcmdzID0gYXJncyB8fCBbXTtcblx0XHRcdFx0XHRhcmdzID0gWyBjb250ZXh0LCBhcmdzLnNsaWNlID8gYXJncy5zbGljZSgpIDogYXJncyBdO1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGFyZ3MgKTtcblx0XHRcdFx0XHRpZiAoICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHNcblx0XHRcdGZpcmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzZWxmLmZpcmVXaXRoKCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIHRoZSBjYWxsYmFja3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2Vcblx0XHRcdGZpcmVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhZmlyZWQ7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRyZXR1cm4gc2VsZjtcbn07XG5cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdERlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHtcblx0XHR2YXIgdHVwbGVzID0gW1xuXG5cdFx0XHRcdC8vIGFjdGlvbiwgYWRkIGxpc3RlbmVyLCBsaXN0ZW5lciBsaXN0LCBmaW5hbCBzdGF0ZVxuXHRcdFx0XHRbIFwicmVzb2x2ZVwiLCBcImRvbmVcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIFwicmVzb2x2ZWRcIiBdLFxuXHRcdFx0XHRbIFwicmVqZWN0XCIsIFwiZmFpbFwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgXCJyZWplY3RlZFwiIF0sXG5cdFx0XHRcdFsgXCJub3RpZnlcIiwgXCJwcm9ncmVzc1wiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICkgXVxuXHRcdFx0XSxcblx0XHRcdHN0YXRlID0gXCJwZW5kaW5nXCIsXG5cdFx0XHRwcm9taXNlID0ge1xuXHRcdFx0XHRzdGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbHdheXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGVuOiBmdW5jdGlvbiggLyogZm5Eb25lLCBmbkZhaWwsIGZuUHJvZ3Jlc3MgKi8gKSB7XG5cdFx0XHRcdFx0dmFyIGZucyA9IGFyZ3VtZW50cztcblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBmbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBmbnNbIGkgXSApICYmIGZuc1sgaSBdO1xuXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkWyBkb25lIHwgZmFpbCB8IHByb2dyZXNzIF0gZm9yIGZvcndhcmRpbmcgYWN0aW9ucyB0byBuZXdEZWZlclxuXHRcdFx0XHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDEgXSBdKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcmV0dXJuZWQucHJvbWlzZSApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQucHJvbWlzZSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5wcm9ncmVzcyggbmV3RGVmZXIubm90aWZ5IClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmRvbmUoIG5ld0RlZmVyLnJlc29sdmUgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZmFpbCggbmV3RGVmZXIucmVqZWN0ICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXShcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcyA9PT0gcHJvbWlzZSA/IG5ld0RlZmVyLnByb21pc2UoKSA6IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZuID8gWyByZXR1cm5lZCBdIDogYXJndW1lbnRzXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0Zm5zID0gbnVsbDtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWRcblx0XHRcdFx0Ly8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdFxuXHRcdFx0XHRwcm9taXNlOiBmdW5jdGlvbiggb2JqICkge1xuXHRcdFx0XHRcdHJldHVybiBvYmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlzZSApIDogcHJvbWlzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlZmVycmVkID0ge307XG5cblx0XHQvLyBLZWVwIHBpcGUgZm9yIGJhY2stY29tcGF0XG5cdFx0cHJvbWlzZS5waXBlID0gcHJvbWlzZS50aGVuO1xuXG5cdFx0Ly8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kc1xuXHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHtcblx0XHRcdHZhciBsaXN0ID0gdHVwbGVbIDIgXSxcblx0XHRcdFx0c3RhdGVTdHJpbmcgPSB0dXBsZVsgMyBdO1xuXG5cdFx0XHQvLyBwcm9taXNlWyBkb25lIHwgZmFpbCB8IHByb2dyZXNzIF0gPSBsaXN0LmFkZFxuXHRcdFx0cHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5hZGQ7XG5cblx0XHRcdC8vIEhhbmRsZSBzdGF0ZVxuXHRcdFx0aWYgKCBzdGF0ZVN0cmluZyApIHtcblx0XHRcdFx0bGlzdC5hZGQoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0Ly8gc3RhdGUgPSBbIHJlc29sdmVkIHwgcmVqZWN0ZWQgXVxuXHRcdFx0XHRcdHN0YXRlID0gc3RhdGVTdHJpbmc7XG5cblx0XHRcdFx0Ly8gWyByZWplY3RfbGlzdCB8IHJlc29sdmVfbGlzdCBdLmRpc2FibGU7IHByb2dyZXNzX2xpc3QubG9ja1xuXHRcdFx0XHR9LCB0dXBsZXNbIGkgXiAxIF1bIDIgXS5kaXNhYmxlLCB0dXBsZXNbIDIgXVsgMiBdLmxvY2sgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gZGVmZXJyZWRbIHJlc29sdmUgfCByZWplY3QgfCBub3RpZnkgXVxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gcHJvbWlzZSA6IHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH07XG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0gPSBsaXN0LmZpcmVXaXRoO1xuXHRcdH0gKTtcblxuXHRcdC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZVxuXHRcdHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTtcblxuXHRcdC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnlcblx0XHRpZiAoIGZ1bmMgKSB7XG5cdFx0XHRmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBkb25lIVxuXHRcdHJldHVybiBkZWZlcnJlZDtcblx0fSxcblxuXHQvLyBEZWZlcnJlZCBoZWxwZXJcblx0d2hlbjogZnVuY3Rpb24oIHN1Ym9yZGluYXRlIC8qICwgLi4uLCBzdWJvcmRpbmF0ZU4gKi8gKSB7XG5cdFx0dmFyIGkgPSAwLFxuXHRcdFx0cmVzb2x2ZVZhbHVlcyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLFxuXHRcdFx0bGVuZ3RoID0gcmVzb2x2ZVZhbHVlcy5sZW5ndGgsXG5cblx0XHRcdC8vIHRoZSBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXNcblx0XHRcdHJlbWFpbmluZyA9IGxlbmd0aCAhPT0gMSB8fFxuXHRcdFx0XHQoIHN1Ym9yZGluYXRlICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBzdWJvcmRpbmF0ZS5wcm9taXNlICkgKSA/IGxlbmd0aCA6IDAsXG5cblx0XHRcdC8vIHRoZSBtYXN0ZXIgRGVmZXJyZWQuXG5cdFx0XHQvLyBJZiByZXNvbHZlVmFsdWVzIGNvbnNpc3Qgb2Ygb25seSBhIHNpbmdsZSBEZWZlcnJlZCwganVzdCB1c2UgdGhhdC5cblx0XHRcdGRlZmVycmVkID0gcmVtYWluaW5nID09PSAxID8gc3Vib3JkaW5hdGUgOiBqUXVlcnkuRGVmZXJyZWQoKSxcblxuXHRcdFx0Ly8gVXBkYXRlIGZ1bmN0aW9uIGZvciBib3RoIHJlc29sdmUgYW5kIHByb2dyZXNzIHZhbHVlc1xuXHRcdFx0dXBkYXRlRnVuYyA9IGZ1bmN0aW9uKCBpLCBjb250ZXh0cywgdmFsdWVzICkge1xuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdGNvbnRleHRzWyBpIF0gPSB0aGlzO1xuXHRcdFx0XHRcdHZhbHVlc1sgaSBdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSA6IHZhbHVlO1xuXHRcdFx0XHRcdGlmICggdmFsdWVzID09PSBwcm9ncmVzc1ZhbHVlcyApIHtcblx0XHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGNvbnRleHRzLCB2YWx1ZXMgKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAhKCAtLXJlbWFpbmluZyApICkge1xuXHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNvbnRleHRzLCB2YWx1ZXMgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9LFxuXG5cdFx0XHRwcm9ncmVzc1ZhbHVlcywgcHJvZ3Jlc3NDb250ZXh0cywgcmVzb2x2ZUNvbnRleHRzO1xuXG5cdFx0Ly8gQWRkIGxpc3RlbmVycyB0byBEZWZlcnJlZCBzdWJvcmRpbmF0ZXM7IHRyZWF0IG90aGVycyBhcyByZXNvbHZlZFxuXHRcdGlmICggbGVuZ3RoID4gMSApIHtcblx0XHRcdHByb2dyZXNzVmFsdWVzID0gbmV3IEFycmF5KCBsZW5ndGggKTtcblx0XHRcdHByb2dyZXNzQ29udGV4dHMgPSBuZXcgQXJyYXkoIGxlbmd0aCApO1xuXHRcdFx0cmVzb2x2ZUNvbnRleHRzID0gbmV3IEFycmF5KCBsZW5ndGggKTtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIHJlc29sdmVWYWx1ZXNbIGkgXSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdLnByb21pc2UgKSApIHtcblx0XHRcdFx0XHRyZXNvbHZlVmFsdWVzWyBpIF0ucHJvbWlzZSgpXG5cdFx0XHRcdFx0XHQucHJvZ3Jlc3MoIHVwZGF0ZUZ1bmMoIGksIHByb2dyZXNzQ29udGV4dHMsIHByb2dyZXNzVmFsdWVzICkgKVxuXHRcdFx0XHRcdFx0LmRvbmUoIHVwZGF0ZUZ1bmMoIGksIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApIClcblx0XHRcdFx0XHRcdC5mYWlsKCBkZWZlcnJlZC5yZWplY3QgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQtLXJlbWFpbmluZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIHdlJ3JlIG5vdCB3YWl0aW5nIG9uIGFueXRoaW5nLCByZXNvbHZlIHRoZSBtYXN0ZXJcblx0XHRpZiAoICFyZW1haW5pbmcgKSB7XG5cdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlZmVycmVkLnByb21pc2UoKTtcblx0fVxufSApO1xuXG5cbi8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeVxudmFyIHJlYWR5TGlzdDtcblxualF1ZXJ5LmZuLnJlYWR5ID0gZnVuY3Rpb24oIGZuICkge1xuXG5cdC8vIEFkZCB0aGUgY2FsbGJhY2tcblx0alF1ZXJ5LnJlYWR5LnByb21pc2UoKS5kb25lKCBmbiApO1xuXG5cdHJldHVybiB0aGlzO1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuXG5cdGlzUmVhZHk6IGZhbHNlLFxuXG5cdC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmVcblx0Ly8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODFcblx0cmVhZHlXYWl0OiAxLFxuXG5cdC8vIEhvbGQgKG9yIHJlbGVhc2UpIHRoZSByZWFkeSBldmVudFxuXHRob2xkUmVhZHk6IGZ1bmN0aW9uKCBob2xkICkge1xuXHRcdGlmICggaG9sZCApIHtcblx0XHRcdGpRdWVyeS5yZWFkeVdhaXQrKztcblx0XHR9IGVsc2Uge1xuXHRcdFx0alF1ZXJ5LnJlYWR5KCB0cnVlICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHlcblx0cmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkge1xuXG5cdFx0Ly8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeVxuXHRcdGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeVxuXHRcdGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTtcblxuXHRcdC8vIElmIGEgbm9ybWFsIERPTSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlXG5cdFx0aWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZVxuXHRcdHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTtcblxuXHRcdC8vIFRyaWdnZXIgYW55IGJvdW5kIHJlYWR5IGV2ZW50c1xuXHRcdGlmICggalF1ZXJ5LmZuLnRyaWdnZXJIYW5kbGVyICkge1xuXHRcdFx0alF1ZXJ5KCBkb2N1bWVudCApLnRyaWdnZXJIYW5kbGVyKCBcInJlYWR5XCIgKTtcblx0XHRcdGpRdWVyeSggZG9jdW1lbnQgKS5vZmYoIFwicmVhZHlcIiApO1xuXHRcdH1cblx0fVxufSApO1xuXG4vKipcbiAqIFRoZSByZWFkeSBldmVudCBoYW5kbGVyIGFuZCBzZWxmIGNsZWFudXAgbWV0aG9kXG4gKi9cbmZ1bmN0aW9uIGNvbXBsZXRlZCgpIHtcblx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xuXHRqUXVlcnkucmVhZHkoKTtcbn1cblxualF1ZXJ5LnJlYWR5LnByb21pc2UgPSBmdW5jdGlvbiggb2JqICkge1xuXHRpZiAoICFyZWFkeUxpc3QgKSB7XG5cblx0XHRyZWFkeUxpc3QgPSBqUXVlcnkuRGVmZXJyZWQoKTtcblxuXHRcdC8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkXG5cdFx0Ly8gYWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuXG5cdFx0Ly8gU3VwcG9ydDogSUU5LTEwIG9ubHlcblx0XHQvLyBPbGRlciBJRSBzb21ldGltZXMgc2lnbmFscyBcImludGVyYWN0aXZlXCIgdG9vIHNvb25cblx0XHRpZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIiB8fFxuXHRcdFx0KCBkb2N1bWVudC5yZWFkeVN0YXRlICE9PSBcImxvYWRpbmdcIiAmJiAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsICkgKSB7XG5cblx0XHRcdC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeVxuXHRcdFx0d2luZG93LnNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFja1xuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXG5cdFx0XHQvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29ya1xuXHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHJlYWR5TGlzdC5wcm9taXNlKCBvYmogKTtcbn07XG5cbi8vIEtpY2sgb2ZmIHRoZSBET00gcmVhZHkgY2hlY2sgZXZlbiBpZiB0aGUgdXNlciBkb2VzIG5vdFxualF1ZXJ5LnJlYWR5LnByb21pc2UoKTtcblxuXG5cblxuLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMgb2YgYSBjb2xsZWN0aW9uXG4vLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb25cbnZhciBhY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBlbGVtcy5sZW5ndGgsXG5cdFx0YnVsayA9IGtleSA9PSBudWxsO1xuXG5cdC8vIFNldHMgbWFueSB2YWx1ZXNcblx0aWYgKCBqUXVlcnkudHlwZSgga2V5ICkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblx0XHRmb3IgKCBpIGluIGtleSApIHtcblx0XHRcdGFjY2VzcyggZWxlbXMsIGZuLCBpLCBrZXlbIGkgXSwgdHJ1ZSwgZW1wdHlHZXQsIHJhdyApO1xuXHRcdH1cblxuXHQvLyBTZXRzIG9uZSB2YWx1ZVxuXHR9IGVsc2UgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cblx0XHRpZiAoICFqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJhdyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBidWxrICkge1xuXG5cdFx0XHQvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXRcblx0XHRcdGlmICggcmF3ICkge1xuXHRcdFx0XHRmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTtcblx0XHRcdFx0Zm4gPSBudWxsO1xuXG5cdFx0XHQvLyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWxrID0gZm47XG5cdFx0XHRcdGZuID0gZnVuY3Rpb24oIGVsZW0sIGtleSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRmbihcblx0XHRcdFx0XHRlbGVtc1sgaSBdLCBrZXksIHJhdyA/XG5cdFx0XHRcdFx0dmFsdWUgOlxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIGVsZW1zWyBpIF0sIGksIGZuKCBlbGVtc1sgaSBdLCBrZXkgKSApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNoYWluYWJsZSA/XG5cdFx0ZWxlbXMgOlxuXG5cdFx0Ly8gR2V0c1xuXHRcdGJ1bGsgP1xuXHRcdFx0Zm4uY2FsbCggZWxlbXMgKSA6XG5cdFx0XHRsZW4gPyBmbiggZWxlbXNbIDAgXSwga2V5ICkgOiBlbXB0eUdldDtcbn07XG52YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHQvLyBBY2NlcHRzIG9ubHk6XG5cdC8vICAtIE5vZGVcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxuXHQvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERVxuXHQvLyAgLSBPYmplY3Rcblx0Ly8gICAgLSBBbnlcblx0LyoganNoaW50IC1XMDE4ICovXG5cdHJldHVybiBvd25lci5ub2RlVHlwZSA9PT0gMSB8fCBvd25lci5ub2RlVHlwZSA9PT0gOSB8fCAhKCArb3duZXIubm9kZVR5cGUgKTtcbn07XG5cblxuXG5cbmZ1bmN0aW9uIERhdGEoKSB7XG5cdHRoaXMuZXhwYW5kbyA9IGpRdWVyeS5leHBhbmRvICsgRGF0YS51aWQrKztcbn1cblxuRGF0YS51aWQgPSAxO1xuXG5EYXRhLnByb3RvdHlwZSA9IHtcblxuXHRyZWdpc3RlcjogZnVuY3Rpb24oIG93bmVyLCBpbml0aWFsICkge1xuXHRcdHZhciB2YWx1ZSA9IGluaXRpYWwgfHwge307XG5cblx0XHQvLyBJZiBpdCBpcyBhIG5vZGUgdW5saWtlbHkgdG8gYmUgc3RyaW5naWZ5LWVkIG9yIGxvb3BlZCBvdmVyXG5cdFx0Ly8gdXNlIHBsYWluIGFzc2lnbm1lbnRcblx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdmFsdWU7XG5cblx0XHQvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUsIG5vbi13cml0YWJsZSBwcm9wZXJ0eVxuXHRcdC8vIGNvbmZpZ3VyYWJpbGl0eSBtdXN0IGJlIHRydWUgdG8gYWxsb3cgdGhlIHByb3BlcnR5IHRvIGJlXG5cdFx0Ly8gZGVsZXRlZCB3aXRoIHRoZSBkZWxldGUgb3BlcmF0b3Jcblx0XHR9IGVsc2Uge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBvd25lciwgdGhpcy5leHBhbmRvLCB7XG5cdFx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHRcdFx0fSApO1xuXHRcdH1cblx0XHRyZXR1cm4gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHR9LFxuXHRjYWNoZTogZnVuY3Rpb24oIG93bmVyICkge1xuXG5cdFx0Ly8gV2UgY2FuIGFjY2VwdCBkYXRhIGZvciBub24tZWxlbWVudCBub2RlcyBpbiBtb2Rlcm4gYnJvd3NlcnMsXG5cdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS5cblx0XHQvLyBBbHdheXMgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC5cblx0XHRpZiAoICFhY2NlcHREYXRhKCBvd25lciApICkge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH1cblxuXHRcdC8vIENoZWNrIGlmIHRoZSBvd25lciBvYmplY3QgYWxyZWFkeSBoYXMgYSBjYWNoZVxuXHRcdHZhciB2YWx1ZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblxuXHRcdC8vIElmIG5vdCwgY3JlYXRlIG9uZVxuXHRcdGlmICggIXZhbHVlICkge1xuXHRcdFx0dmFsdWUgPSB7fTtcblxuXHRcdFx0Ly8gV2UgY2FuIGFjY2VwdCBkYXRhIGZvciBub24tZWxlbWVudCBub2RlcyBpbiBtb2Rlcm4gYnJvd3NlcnMsXG5cdFx0XHQvLyBidXQgd2Ugc2hvdWxkIG5vdCwgc2VlICM4MzM1LlxuXHRcdFx0Ly8gQWx3YXlzIHJldHVybiBhbiBlbXB0eSBvYmplY3QuXG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIG93bmVyICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgaXQgaXMgYSBub2RlIHVubGlrZWx5IHRvIGJlIHN0cmluZ2lmeS1lZCBvciBsb29wZWQgb3ZlclxuXHRcdFx0XHQvLyB1c2UgcGxhaW4gYXNzaWdubWVudFxuXHRcdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHZhbHVlO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBzZWN1cmUgaXQgaW4gYSBub24tZW51bWVyYWJsZSBwcm9wZXJ0eVxuXHRcdFx0XHQvLyBjb25maWd1cmFibGUgbXVzdCBiZSB0cnVlIHRvIGFsbG93IHRoZSBwcm9wZXJ0eSB0byBiZVxuXHRcdFx0XHQvLyBkZWxldGVkIHdoZW4gZGF0YSBpcyByZW1vdmVkXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBvd25lciwgdGhpcy5leHBhbmRvLCB7XG5cdFx0XHRcdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWVcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24oIG93bmVyLCBkYXRhLCB2YWx1ZSApIHtcblx0XHR2YXIgcHJvcCxcblx0XHRcdGNhY2hlID0gdGhpcy5jYWNoZSggb3duZXIgKTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwga2V5LCB2YWx1ZSBdIGFyZ3Ncblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Y2FjaGVbIGRhdGEgXSA9IHZhbHVlO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCB7IHByb3BlcnRpZXMgfSBdIGFyZ3Ncblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdFxuXHRcdFx0Zm9yICggcHJvcCBpbiBkYXRhICkge1xuXHRcdFx0XHRjYWNoZVsgcHJvcCBdID0gZGF0YVsgcHJvcCBdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY2FjaGU7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0cmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMuY2FjaGUoIG93bmVyICkgOlxuXHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsga2V5IF07XG5cdH0sXG5cdGFjY2VzczogZnVuY3Rpb24oIG93bmVyLCBrZXksIHZhbHVlICkge1xuXHRcdHZhciBzdG9yZWQ7XG5cblx0XHQvLyBJbiBjYXNlcyB3aGVyZSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIE5vIGtleSB3YXMgc3BlY2lmaWVkXG5cdFx0Ly8gICAyLiBBIHN0cmluZyBrZXkgd2FzIHNwZWNpZmllZCwgYnV0IG5vIHZhbHVlIHByb3ZpZGVkXG5cdFx0Ly9cblx0XHQvLyBUYWtlIHRoZSBcInJlYWRcIiBwYXRoIGFuZCBhbGxvdyB0aGUgZ2V0IG1ldGhvZCB0byBkZXRlcm1pbmVcblx0XHQvLyB3aGljaCB2YWx1ZSB0byByZXR1cm4sIHJlc3BlY3RpdmVseSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIFRoZSBlbnRpcmUgY2FjaGUgb2JqZWN0XG5cdFx0Ly8gICAyLiBUaGUgZGF0YSBzdG9yZWQgYXQgdGhlIGtleVxuXHRcdC8vXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHQoICgga2V5ICYmIHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgKSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgKSB7XG5cblx0XHRcdHN0b3JlZCA9IHRoaXMuZ2V0KCBvd25lciwga2V5ICk7XG5cblx0XHRcdHJldHVybiBzdG9yZWQgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHN0b3JlZCA6IHRoaXMuZ2V0KCBvd25lciwgalF1ZXJ5LmNhbWVsQ2FzZSgga2V5ICkgKTtcblx0XHR9XG5cblx0XHQvLyBXaGVuIHRoZSBrZXkgaXMgbm90IGEgc3RyaW5nLCBvciBib3RoIGEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vIGFyZSBzcGVjaWZpZWQsIHNldCBvciBleHRlbmQgKGV4aXN0aW5nIG9iamVjdHMpIHdpdGggZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBBbiBvYmplY3Qgb2YgcHJvcGVydGllc1xuXHRcdC8vICAgMi4gQSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly9cblx0XHR0aGlzLnNldCggb3duZXIsIGtleSwgdmFsdWUgKTtcblxuXHRcdC8vIFNpbmNlIHRoZSBcInNldFwiIHBhdGggY2FuIGhhdmUgdHdvIHBvc3NpYmxlIGVudHJ5IHBvaW50c1xuXHRcdC8vIHJldHVybiB0aGUgZXhwZWN0ZWQgZGF0YSBiYXNlZCBvbiB3aGljaCBwYXRoIHdhcyB0YWtlblsqXVxuXHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBrZXk7XG5cdH0sXG5cdHJlbW92ZTogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGNhbWVsLFxuXHRcdFx0Y2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHRpZiAoIGNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHRoaXMucmVnaXN0ZXIoIG93bmVyICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBTdXBwb3J0IGFycmF5IG9yIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgb2Yga2V5c1xuXHRcdFx0aWYgKCBqUXVlcnkuaXNBcnJheSgga2V5ICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgXCJuYW1lXCIgaXMgYW4gYXJyYXkgb2Yga2V5cy4uLlxuXHRcdFx0XHQvLyBXaGVuIGRhdGEgaXMgaW5pdGlhbGx5IGNyZWF0ZWQsIHZpYSAoXCJrZXlcIiwgXCJ2YWxcIikgc2lnbmF0dXJlLFxuXHRcdFx0XHQvLyBrZXlzIHdpbGwgYmUgY29udmVydGVkIHRvIGNhbWVsQ2FzZS5cblx0XHRcdFx0Ly8gU2luY2UgdGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwgX2hvd18gYSBrZXkgd2FzIGFkZGVkLCByZW1vdmVcblx0XHRcdFx0Ly8gYm90aCBwbGFpbiBrZXkgYW5kIGNhbWVsQ2FzZSBrZXkuICMxMjc4NlxuXHRcdFx0XHQvLyBUaGlzIHdpbGwgb25seSBwZW5hbGl6ZSB0aGUgYXJyYXkgYXJndW1lbnQgcGF0aC5cblx0XHRcdFx0bmFtZSA9IGtleS5jb25jYXQoIGtleS5tYXAoIGpRdWVyeS5jYW1lbENhc2UgKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2FtZWwgPSBqUXVlcnkuY2FtZWxDYXNlKCBrZXkgKTtcblxuXHRcdFx0XHQvLyBUcnkgdGhlIHN0cmluZyBhcyBhIGtleSBiZWZvcmUgYW55IG1hbmlwdWxhdGlvblxuXHRcdFx0XHRpZiAoIGtleSBpbiBjYWNoZSApIHtcblx0XHRcdFx0XHRuYW1lID0gWyBrZXksIGNhbWVsIF07XG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHQvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuXG5cdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBjcmVhdGUgYW4gYXJyYXkgYnkgbWF0Y2hpbmcgbm9uLXdoaXRlc3BhY2Vcblx0XHRcdFx0XHRuYW1lID0gY2FtZWw7XG5cdFx0XHRcdFx0bmFtZSA9IG5hbWUgaW4gY2FjaGUgP1xuXHRcdFx0XHRcdFx0WyBuYW1lIF0gOiAoIG5hbWUubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aSA9IG5hbWUubGVuZ3RoO1xuXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0ZGVsZXRlIGNhY2hlWyBuYW1lWyBpIF0gXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgdGhlcmUncyBubyBtb3JlIGRhdGFcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0gMzUtNDUrXG5cdFx0XHQvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllc1xuXHRcdFx0Ly8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZFxuXHRcdFx0Ly8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM3ODYwN1xuXHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVsZXRlIG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBvd25lciApIHtcblx0XHR2YXIgY2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0cmV0dXJuIGNhY2hlICE9PSB1bmRlZmluZWQgJiYgIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApO1xuXHR9XG59O1xudmFyIGRhdGFQcml2ID0gbmV3IERhdGEoKTtcblxudmFyIGRhdGFVc2VyID0gbmV3IERhdGEoKTtcblxuXG5cbi8vXHRJbXBsZW1lbnRhdGlvbiBTdW1tYXJ5XG4vL1xuLy9cdDEuIEVuZm9yY2UgQVBJIHN1cmZhY2UgYW5kIHNlbWFudGljIGNvbXBhdGliaWxpdHkgd2l0aCAxLjkueCBicmFuY2hcbi8vXHQyLiBJbXByb3ZlIHRoZSBtb2R1bGUncyBtYWludGFpbmFiaWxpdHkgYnkgcmVkdWNpbmcgdGhlIHN0b3JhZ2Vcbi8vXHRcdHBhdGhzIHRvIGEgc2luZ2xlIG1lY2hhbmlzbS5cbi8vXHQzLiBVc2UgdGhlIHNhbWUgc2luZ2xlIG1lY2hhbmlzbSB0byBzdXBwb3J0IFwicHJpdmF0ZVwiIGFuZCBcInVzZXJcIiBkYXRhLlxuLy9cdDQuIF9OZXZlcl8gZXhwb3NlIFwicHJpdmF0ZVwiIGRhdGEgdG8gdXNlciBjb2RlIChUT0RPOiBEcm9wIF9kYXRhLCBfcmVtb3ZlRGF0YSlcbi8vXHQ1LiBBdm9pZCBleHBvc2luZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9uIHVzZXIgb2JqZWN0cyAoZWcuIGV4cGFuZG8gcHJvcGVydGllcylcbi8vXHQ2LiBQcm92aWRlIGEgY2xlYXIgcGF0aCBmb3IgaW1wbGVtZW50YXRpb24gdXBncmFkZSB0byBXZWFrTWFwIGluIDIwMTRcblxudmFyIHJicmFjZSA9IC9eKD86XFx7W1xcd1xcV10qXFx9fFxcW1tcXHdcXFddKlxcXSkkLyxcblx0cm11bHRpRGFzaCA9IC9bQS1aXS9nO1xuXG5mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkge1xuXHR2YXIgbmFtZTtcblxuXHQvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55XG5cdC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZVxuXHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJCZcIiApLnRvTG93ZXJDYXNlKCk7XG5cdFx0ZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0YSA9IGRhdGEgPT09IFwidHJ1ZVwiID8gdHJ1ZSA6XG5cdFx0XHRcdFx0ZGF0YSA9PT0gXCJmYWxzZVwiID8gZmFsc2UgOlxuXHRcdFx0XHRcdGRhdGEgPT09IFwibnVsbFwiID8gbnVsbCA6XG5cblx0XHRcdFx0XHQvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZ1xuXHRcdFx0XHRcdCtkYXRhICsgXCJcIiA9PT0gZGF0YSA/ICtkYXRhIDpcblx0XHRcdFx0XHRyYnJhY2UudGVzdCggZGF0YSApID8galF1ZXJ5LnBhcnNlSlNPTiggZGF0YSApIDpcblx0XHRcdFx0XHRkYXRhO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNoYW5nZWQgbGF0ZXJcblx0XHRcdGRhdGFVc2VyLnNldCggZWxlbSwga2V5LCBkYXRhICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkYXRhO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5oYXNEYXRhKCBlbGVtICkgfHwgZGF0YVByaXYuaGFzRGF0YSggZWxlbSApO1xuXHR9LFxuXG5cdGRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhVXNlci5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fSxcblxuXHQvLyBUT0RPOiBOb3cgdGhhdCBhbGwgY2FsbHMgdG8gX2RhdGEgYW5kIF9yZW1vdmVEYXRhIGhhdmUgYmVlbiByZXBsYWNlZFxuXHQvLyB3aXRoIGRpcmVjdCBjYWxscyB0byBkYXRhUHJpdiBtZXRob2RzLCB0aGVzZSBjYW4gYmUgZGVwcmVjYXRlZC5cblx0X2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRfcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHR2YXIgaSwgbmFtZSwgZGF0YSxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRhdHRycyA9IGVsZW0gJiYgZWxlbS5hdHRyaWJ1dGVzO1xuXG5cdFx0Ly8gR2V0cyBhbGwgdmFsdWVzXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdGhpcy5sZW5ndGggKSB7XG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0gKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWRhdGFQcml2LmdldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiApICkge1xuXHRcdFx0XHRcdGkgPSBhdHRycy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFMTErXG5cdFx0XHRcdFx0XHQvLyBUaGUgYXR0cnMgZWxlbWVudHMgY2FuIGJlIG51bGwgKCMxNDg5NClcblx0XHRcdFx0XHRcdGlmICggYXR0cnNbIGkgXSApIHtcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKCBuYW1lLmluZGV4T2YoIFwiZGF0YS1cIiApID09PSAwICkge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lLnNsaWNlKCA1ICkgKTtcblx0XHRcdFx0XHRcdFx0XHRkYXRhQXR0ciggZWxlbSwgbmFtZSwgZGF0YVsgbmFtZSBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0cyBtdWx0aXBsZSB2YWx1ZXNcblx0XHRpZiAoIHR5cGVvZiBrZXkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZGF0YSwgY2FtZWxLZXk7XG5cblx0XHRcdC8vIFRoZSBjYWxsaW5nIGpRdWVyeSBvYmplY3QgKGVsZW1lbnQgbWF0Y2hlcykgaXMgbm90IGVtcHR5XG5cdFx0XHQvLyAoYW5kIHRoZXJlZm9yZSBoYXMgYW4gZWxlbWVudCBhcHBlYXJzIGF0IHRoaXNbIDAgXSkgYW5kIHRoZVxuXHRcdFx0Ly8gYHZhbHVlYCBwYXJhbWV0ZXIgd2FzIG5vdCB1bmRlZmluZWQuIEFuIGVtcHR5IGpRdWVyeSBvYmplY3Rcblx0XHRcdC8vIHdpbGwgcmVzdWx0IGluIGB1bmRlZmluZWRgIGZvciBlbGVtID0gdGhpc1sgMCBdIHdoaWNoIHdpbGxcblx0XHRcdC8vIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhbiBhdHRlbXB0IHRvIHJlYWQgYSBkYXRhIGNhY2hlIGlzIG1hZGUuXG5cdFx0XHRpZiAoIGVsZW0gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIGdldCBkYXRhIGZyb20gdGhlIGNhY2hlXG5cdFx0XHRcdC8vIHdpdGggdGhlIGtleSBhcy1pc1xuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKSB8fFxuXG5cdFx0XHRcdFx0Ly8gVHJ5IHRvIGZpbmQgZGFzaGVkIGtleSBpZiBpdCBleGlzdHMgKGdoLTI3NzkpXG5cdFx0XHRcdFx0Ly8gVGhpcyBpcyBmb3IgMi4yLnggb25seVxuXHRcdFx0XHRcdGRhdGFVc2VyLmdldCggZWxlbSwga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsIFwiLSQmXCIgKS50b0xvd2VyQ2FzZSgpICk7XG5cblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYW1lbEtleSA9IGpRdWVyeS5jYW1lbENhc2UoIGtleSApO1xuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgY2FjaGVcblx0XHRcdFx0Ly8gd2l0aCB0aGUga2V5IGNhbWVsaXplZFxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBjYW1lbEtleSApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gXCJkaXNjb3ZlclwiIHRoZSBkYXRhIGluXG5cdFx0XHRcdC8vIEhUTUw1IGN1c3RvbSBkYXRhLSogYXR0cnNcblx0XHRcdFx0ZGF0YSA9IGRhdGFBdHRyKCBlbGVtLCBjYW1lbEtleSwgdW5kZWZpbmVkICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCB0aGUgZGF0YS4uLlxuXHRcdFx0Y2FtZWxLZXkgPSBqUXVlcnkuY2FtZWxDYXNlKCBrZXkgKTtcblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gRmlyc3QsIGF0dGVtcHQgdG8gc3RvcmUgYSBjb3B5IG9yIHJlZmVyZW5jZSBvZiBhbnlcblx0XHRcdFx0Ly8gZGF0YSB0aGF0IG1pZ2h0J3ZlIGJlZW4gc3RvcmUgd2l0aCBhIGNhbWVsQ2FzZWQga2V5LlxuXHRcdFx0XHR2YXIgZGF0YSA9IGRhdGFVc2VyLmdldCggdGhpcywgY2FtZWxLZXkgKTtcblxuXHRcdFx0XHQvLyBGb3IgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZSBpbnRlcm9wLCB3ZSBoYXZlIHRvXG5cdFx0XHRcdC8vIHN0b3JlIHByb3BlcnR5IG5hbWVzIHdpdGggZGFzaGVzIGluIGEgY2FtZWxDYXNlIGZvcm0uXG5cdFx0XHRcdC8vIFRoaXMgbWlnaHQgbm90IGFwcGx5IHRvIGFsbCBwcm9wZXJ0aWVzLi4uKlxuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGNhbWVsS2V5LCB2YWx1ZSApO1xuXG5cdFx0XHRcdC8vICouLi4gSW4gdGhlIGNhc2Ugb2YgcHJvcGVydGllcyB0aGF0IG1pZ2h0IF9hY3R1YWxseV9cblx0XHRcdFx0Ly8gaGF2ZSBkYXNoZXMsIHdlIG5lZWQgdG8gYWxzbyBzdG9yZSBhIGNvcHkgb2YgdGhhdFxuXHRcdFx0XHQvLyB1bmNoYW5nZWQgcHJvcGVydHkuXG5cdFx0XHRcdGlmICgga2V5LmluZGV4T2YoIFwiLVwiICkgPiAtMSAmJiBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXksIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGF0YVVzZXIucmVtb3ZlKCB0aGlzLCBrZXkgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgcXVldWU7XG5cblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHR0eXBlID0gKCB0eXBlIHx8IFwiZnhcIiApICsgXCJxdWV1ZVwiO1xuXHRcdFx0cXVldWUgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0Ly8gU3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBhIGxvb2t1cFxuXHRcdFx0aWYgKCBkYXRhICkge1xuXHRcdFx0XHRpZiAoICFxdWV1ZSB8fCBqUXVlcnkuaXNBcnJheSggZGF0YSApICkge1xuXHRcdFx0XHRcdHF1ZXVlID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KCBkYXRhICkgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBkYXRhICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBxdWV1ZSB8fCBbXTtcblx0XHR9XG5cdH0sXG5cblx0ZGVxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCBlbGVtLCB0eXBlICksXG5cdFx0XHRzdGFydExlbmd0aCA9IHF1ZXVlLmxlbmd0aCxcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKSxcblx0XHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCB0eXBlICksXG5cdFx0XHRuZXh0ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7XG5cdFx0XHR9O1xuXG5cdFx0Ly8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMgcmVtb3ZlIHRoZSBwcm9ncmVzcyBzZW50aW5lbFxuXHRcdGlmICggZm4gPT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0c3RhcnRMZW5ndGgtLTtcblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXG5cdFx0XHQvLyBBZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0byBwcmV2ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5nXG5cdFx0XHQvLyBhdXRvbWF0aWNhbGx5IGRlcXVldWVkXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiApIHtcblx0XHRcdFx0cXVldWUudW5zaGlmdCggXCJpbnByb2dyZXNzXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2xlYXIgdXAgdGhlIGxhc3QgcXVldWUgc3RvcCBmdW5jdGlvblxuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRmbi5jYWxsKCBlbGVtLCBuZXh0LCBob29rcyApO1xuXHRcdH1cblxuXHRcdGlmICggIXN0YXJ0TGVuZ3RoICYmIGhvb2tzICkge1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdH1cblx0fSxcblxuXHQvLyBOb3QgcHVibGljIC0gZ2VuZXJhdGUgYSBxdWV1ZUhvb2tzIG9iamVjdCwgb3IgcmV0dXJuIHRoZSBjdXJyZW50IG9uZVxuXHRfcXVldWVIb29rczogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dmFyIGtleSA9IHR5cGUgKyBcInF1ZXVlSG9va3NcIjtcblx0XHRyZXR1cm4gZGF0YVByaXYuZ2V0KCBlbGVtLCBrZXkgKSB8fCBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIGtleSwge1xuXHRcdFx0ZW1wdHk6IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLmFkZCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgWyB0eXBlICsgXCJxdWV1ZVwiLCBrZXkgXSApO1xuXHRcdFx0fSApXG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBzZXR0ZXIgPSAyO1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGRhdGEgPSB0eXBlO1xuXHRcdFx0dHlwZSA9IFwiZnhcIjtcblx0XHRcdHNldHRlci0tO1xuXHRcdH1cblxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCA8IHNldHRlciApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucXVldWUoIHRoaXNbIDAgXSwgdHlwZSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcyA6XG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIGRhdGEgKTtcblxuXHRcdFx0XHQvLyBFbnN1cmUgYSBob29rcyBmb3IgdGhpcyBxdWV1ZVxuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiAmJiBxdWV1ZVsgMCBdICE9PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdH0sXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHR9ICk7XG5cdH0sXG5cdGNsZWFyUXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0fSxcblxuXHQvLyBHZXQgYSBwcm9taXNlIHJlc29sdmVkIHdoZW4gcXVldWVzIG9mIGEgY2VydGFpbiB0eXBlXG5cdC8vIGFyZSBlbXB0aWVkIChmeCBpcyB0aGUgdHlwZSBieSBkZWZhdWx0KVxuXHRwcm9taXNlOiBmdW5jdGlvbiggdHlwZSwgb2JqICkge1xuXHRcdHZhciB0bXAsXG5cdFx0XHRjb3VudCA9IDEsXG5cdFx0XHRkZWZlciA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0ZWxlbWVudHMgPSB0aGlzLFxuXHRcdFx0aSA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0cmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICEoIC0tY291bnQgKSApIHtcblx0XHRcdFx0XHRkZWZlci5yZXNvbHZlV2l0aCggZWxlbWVudHMsIFsgZWxlbWVudHMgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG9iaiA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRtcCA9IGRhdGFQcml2LmdldCggZWxlbWVudHNbIGkgXSwgdHlwZSArIFwicXVldWVIb29rc1wiICk7XG5cdFx0XHRpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7XG5cdFx0XHRcdGNvdW50Kys7XG5cdFx0XHRcdHRtcC5lbXB0eS5hZGQoIHJlc29sdmUgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmVzb2x2ZSgpO1xuXHRcdHJldHVybiBkZWZlci5wcm9taXNlKCBvYmogKTtcblx0fVxufSApO1xudmFyIHBudW0gPSAoIC9bKy1dPyg/OlxcZCpcXC58KVxcZCsoPzpbZUVdWystXT9cXGQrfCkvICkuc291cmNlO1xuXG52YXIgcmNzc051bSA9IG5ldyBSZWdFeHAoIFwiXig/OihbKy1dKT18KShcIiArIHBudW0gKyBcIikoW2EteiVdKikkXCIsIFwiaVwiICk7XG5cblxudmFyIGNzc0V4cGFuZCA9IFsgXCJUb3BcIiwgXCJSaWdodFwiLCBcIkJvdHRvbVwiLCBcIkxlZnRcIiBdO1xuXG52YXIgaXNIaWRkZW4gPSBmdW5jdGlvbiggZWxlbSwgZWwgKSB7XG5cblx0XHQvLyBpc0hpZGRlbiBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xuXHRcdC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudFxuXHRcdGVsZW0gPSBlbCB8fCBlbGVtO1xuXHRcdHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApID09PSBcIm5vbmVcIiB8fFxuXHRcdFx0IWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7XG5cdH07XG5cblxuXG5mdW5jdGlvbiBhZGp1c3RDU1MoIGVsZW0sIHByb3AsIHZhbHVlUGFydHMsIHR3ZWVuICkge1xuXHR2YXIgYWRqdXN0ZWQsXG5cdFx0c2NhbGUgPSAxLFxuXHRcdG1heEl0ZXJhdGlvbnMgPSAyMCxcblx0XHRjdXJyZW50VmFsdWUgPSB0d2VlbiA/XG5cdFx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIHR3ZWVuLmN1cigpOyB9IDpcblx0XHRcdGZ1bmN0aW9uKCkgeyByZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgcHJvcCwgXCJcIiApOyB9LFxuXHRcdGluaXRpYWwgPSBjdXJyZW50VmFsdWUoKSxcblx0XHR1bml0ID0gdmFsdWVQYXJ0cyAmJiB2YWx1ZVBhcnRzWyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICksXG5cblx0XHQvLyBTdGFydGluZyB2YWx1ZSBjb21wdXRhdGlvbiBpcyByZXF1aXJlZCBmb3IgcG90ZW50aWFsIHVuaXQgbWlzbWF0Y2hlc1xuXHRcdGluaXRpYWxJblVuaXQgPSAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSB8fCB1bml0ICE9PSBcInB4XCIgJiYgK2luaXRpYWwgKSAmJlxuXHRcdFx0cmNzc051bS5leGVjKCBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wICkgKTtcblxuXHRpZiAoIGluaXRpYWxJblVuaXQgJiYgaW5pdGlhbEluVW5pdFsgMyBdICE9PSB1bml0ICkge1xuXG5cdFx0Ly8gVHJ1c3QgdW5pdHMgcmVwb3J0ZWQgYnkgalF1ZXJ5LmNzc1xuXHRcdHVuaXQgPSB1bml0IHx8IGluaXRpYWxJblVuaXRbIDMgXTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB3ZSB1cGRhdGUgdGhlIHR3ZWVuIHByb3BlcnRpZXMgbGF0ZXIgb25cblx0XHR2YWx1ZVBhcnRzID0gdmFsdWVQYXJ0cyB8fCBbXTtcblxuXHRcdC8vIEl0ZXJhdGl2ZWx5IGFwcHJveGltYXRlIGZyb20gYSBub256ZXJvIHN0YXJ0aW5nIHBvaW50XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsIHx8IDE7XG5cblx0XHRkbyB7XG5cblx0XHRcdC8vIElmIHByZXZpb3VzIGl0ZXJhdGlvbiB6ZXJvZWQgb3V0LCBkb3VibGUgdW50aWwgd2UgZ2V0ICpzb21ldGhpbmcqLlxuXHRcdFx0Ly8gVXNlIHN0cmluZyBmb3IgZG91Ymxpbmcgc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHNlZSBzY2FsZSBhcyB1bmNoYW5nZWQgYmVsb3dcblx0XHRcdHNjYWxlID0gc2NhbGUgfHwgXCIuNVwiO1xuXG5cdFx0XHQvLyBBZGp1c3QgYW5kIGFwcGx5XG5cdFx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAvIHNjYWxlO1xuXHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXG5cdFx0Ly8gVXBkYXRlIHNjYWxlLCB0b2xlcmF0aW5nIHplcm8gb3IgTmFOIGZyb20gdHdlZW4uY3VyKClcblx0XHQvLyBCcmVhayB0aGUgbG9vcCBpZiBzY2FsZSBpcyB1bmNoYW5nZWQgb3IgcGVyZmVjdCwgb3IgaWYgd2UndmUganVzdCBoYWQgZW5vdWdoLlxuXHRcdH0gd2hpbGUgKFxuXHRcdFx0c2NhbGUgIT09ICggc2NhbGUgPSBjdXJyZW50VmFsdWUoKSAvIGluaXRpYWwgKSAmJiBzY2FsZSAhPT0gMSAmJiAtLW1heEl0ZXJhdGlvbnNcblx0XHQpO1xuXHR9XG5cblx0aWYgKCB2YWx1ZVBhcnRzICkge1xuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbEluVW5pdCB8fCAraW5pdGlhbCB8fCAwO1xuXG5cdFx0Ly8gQXBwbHkgcmVsYXRpdmUgb2Zmc2V0ICgrPS8tPSkgaWYgc3BlY2lmaWVkXG5cdFx0YWRqdXN0ZWQgPSB2YWx1ZVBhcnRzWyAxIF0gP1xuXHRcdFx0aW5pdGlhbEluVW5pdCArICggdmFsdWVQYXJ0c1sgMSBdICsgMSApICogdmFsdWVQYXJ0c1sgMiBdIDpcblx0XHRcdCt2YWx1ZVBhcnRzWyAyIF07XG5cdFx0aWYgKCB0d2VlbiApIHtcblx0XHRcdHR3ZWVuLnVuaXQgPSB1bml0O1xuXHRcdFx0dHdlZW4uc3RhcnQgPSBpbml0aWFsSW5Vbml0O1xuXHRcdFx0dHdlZW4uZW5kID0gYWRqdXN0ZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhZGp1c3RlZDtcbn1cbnZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTtcblxudmFyIHJ0YWdOYW1lID0gKCAvPChbXFx3Oi1dKykvICk7XG5cbnZhciByc2NyaXB0VHlwZSA9ICggL14kfFxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSApO1xuXG5cblxuLy8gV2UgaGF2ZSB0byBjbG9zZSB0aGVzZSB0YWdzIHRvIHN1cHBvcnQgWEhUTUwgKCMxMzIwMClcbnZhciB3cmFwTWFwID0ge1xuXG5cdC8vIFN1cHBvcnQ6IElFOVxuXHRvcHRpb246IFsgMSwgXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsIFwiPC9zZWxlY3Q+XCIgXSxcblxuXHQvLyBYSFRNTCBwYXJzZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZVxuXHQvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBhcnNlcnMgZG8uIFNvIHdlIGNhbm5vdCBzaG9ydGVuXG5cdC8vIHRoaXMgYnkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1aXJlZCBlbGVtZW50cy5cblx0dGhlYWQ6IFsgMSwgXCI8dGFibGU+XCIsIFwiPC90YWJsZT5cIiBdLFxuXHRjb2w6IFsgMiwgXCI8dGFibGU+PGNvbGdyb3VwPlwiLCBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIiBdLFxuXHR0cjogWyAyLCBcIjx0YWJsZT48dGJvZHk+XCIsIFwiPC90Ym9keT48L3RhYmxlPlwiIF0sXG5cdHRkOiBbIDMsIFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsIFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCIgXSxcblxuXHRfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cbn07XG5cbi8vIFN1cHBvcnQ6IElFOVxud3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uO1xuXG53cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkO1xud3JhcE1hcC50aCA9IHdyYXBNYXAudGQ7XG5cblxuZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUU5LTExK1xuXHQvLyBVc2UgdHlwZW9mIHRvIGF2b2lkIHplcm8tYXJndW1lbnQgbWV0aG9kIGludm9jYXRpb24gb24gaG9zdCBvYmplY3RzICgjMTUxNTEpXG5cdHZhciByZXQgPSB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiA/XG5cdFx0XHRjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgXCIqXCIgKSA6XG5cdFx0XHR0eXBlb2YgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiID9cblx0XHRcdFx0Y29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgfHwgXCIqXCIgKSA6XG5cdFx0XHRbXTtcblxuXHRyZXR1cm4gdGFnID09PSB1bmRlZmluZWQgfHwgdGFnICYmIGpRdWVyeS5ub2RlTmFtZSggY29udGV4dCwgdGFnICkgP1xuXHRcdGpRdWVyeS5tZXJnZSggWyBjb250ZXh0IF0sIHJldCApIDpcblx0XHRyZXQ7XG59XG5cblxuLy8gTWFyayBzY3JpcHRzIGFzIGhhdmluZyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkXG5mdW5jdGlvbiBzZXRHbG9iYWxFdmFsKCBlbGVtcywgcmVmRWxlbWVudHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRkYXRhUHJpdi5zZXQoXG5cdFx0XHRlbGVtc1sgaSBdLFxuXHRcdFx0XCJnbG9iYWxFdmFsXCIsXG5cdFx0XHQhcmVmRWxlbWVudHMgfHwgZGF0YVByaXYuZ2V0KCByZWZFbGVtZW50c1sgaSBdLCBcImdsb2JhbEV2YWxcIiApXG5cdFx0KTtcblx0fVxufVxuXG5cbnZhciByaHRtbCA9IC88fCYjP1xcdys7LztcblxuZnVuY3Rpb24gYnVpbGRGcmFnbWVudCggZWxlbXMsIGNvbnRleHQsIHNjcmlwdHMsIHNlbGVjdGlvbiwgaWdub3JlZCApIHtcblx0dmFyIGVsZW0sIHRtcCwgdGFnLCB3cmFwLCBjb250YWlucywgaixcblx0XHRmcmFnbWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdG5vZGVzID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1zWyBpIF07XG5cblx0XHRpZiAoIGVsZW0gfHwgZWxlbSA9PT0gMCApIHtcblxuXHRcdFx0Ly8gQWRkIG5vZGVzIGRpcmVjdGx5XG5cdFx0XHRpZiAoIGpRdWVyeS50eXBlKCBlbGVtICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjEsIFBoYW50b21KUzwyXG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgZWxlbS5ub2RlVHlwZSA/IFsgZWxlbSBdIDogZWxlbSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGVcblx0XHRcdH0gZWxzZSBpZiAoICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7XG5cdFx0XHRcdG5vZGVzLnB1c2goIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIGVsZW0gKSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IGh0bWwgaW50byBET00gbm9kZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRtcCA9IHRtcCB8fCBmcmFnbWVudC5hcHBlbmRDaGlsZCggY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcblxuXHRcdFx0XHQvLyBEZXNlcmlhbGl6ZSBhIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uXG5cdFx0XHRcdHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR3cmFwID0gd3JhcE1hcFsgdGFnIF0gfHwgd3JhcE1hcC5fZGVmYXVsdDtcblx0XHRcdFx0dG1wLmlubmVySFRNTCA9IHdyYXBbIDEgXSArIGpRdWVyeS5odG1sUHJlZmlsdGVyKCBlbGVtICkgKyB3cmFwWyAyIF07XG5cblx0XHRcdFx0Ly8gRGVzY2VuZCB0aHJvdWdoIHdyYXBwZXJzIHRvIHRoZSByaWdodCBjb250ZW50XG5cdFx0XHRcdGogPSB3cmFwWyAwIF07XG5cdFx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRcdHRtcCA9IHRtcC5sYXN0Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMSwgUGhhbnRvbUpTPDJcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCB0bXAuY2hpbGROb2RlcyApO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyXG5cdFx0XHRcdHRtcCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIHRoZSBjcmVhdGVkIG5vZGVzIGFyZSBvcnBoYW5lZCAoIzEyMzkyKVxuXHRcdFx0XHR0bXAudGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJlbW92ZSB3cmFwcGVyIGZyb20gZnJhZ21lbnRcblx0ZnJhZ21lbnQudGV4dENvbnRlbnQgPSBcIlwiO1xuXG5cdGkgPSAwO1xuXHR3aGlsZSAoICggZWxlbSA9IG5vZGVzWyBpKysgXSApICkge1xuXG5cdFx0Ly8gU2tpcCBlbGVtZW50cyBhbHJlYWR5IGluIHRoZSBjb250ZXh0IGNvbGxlY3Rpb24gKHRyYWMtNDA4Nylcblx0XHRpZiAoIHNlbGVjdGlvbiAmJiBqUXVlcnkuaW5BcnJheSggZWxlbSwgc2VsZWN0aW9uICkgPiAtMSApIHtcblx0XHRcdGlmICggaWdub3JlZCApIHtcblx0XHRcdFx0aWdub3JlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb250YWlucyA9IGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7XG5cblx0XHQvLyBBcHBlbmQgdG8gZnJhZ21lbnRcblx0XHR0bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksIFwic2NyaXB0XCIgKTtcblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRpZiAoIGNvbnRhaW5zICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggdG1wICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FwdHVyZSBleGVjdXRhYmxlc1xuXHRcdGlmICggc2NyaXB0cyApIHtcblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0bXBbIGorKyBdICkgKSB7XG5cdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0XHRzY3JpcHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmcmFnbWVudDtcbn1cblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0ZGl2ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApLFxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAtNC4zLCBTYWZhcmk8PTUuMVxuXHQvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAoIzExMjE3KVxuXHQvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChXV0EpXG5cdC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAoIzE0OTAxKVxuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcInJhZGlvXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJ0XCIgKTtcblxuXHRkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cblx0Ly8gU3VwcG9ydDogU2FmYXJpPD01LjEsIEFuZHJvaWQ8NC4yXG5cdC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50c1xuXHRzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUU8PTExK1xuXHQvLyBNYWtlIHN1cmUgdGV4dGFyZWEgKGFuZCBjaGVja2JveCkgZGVmYXVsdFZhbHVlIGlzIHByb3Blcmx5IGNsb25lZFxuXHRkaXYuaW5uZXJIVE1MID0gXCI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+XCI7XG5cdHN1cHBvcnQubm9DbG9uZUNoZWNrZWQgPSAhIWRpdi5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlO1xufSApKCk7XG5cblxudmFyXG5cdHJrZXlFdmVudCA9IC9ea2V5Lyxcblx0cm1vdXNlRXZlbnQgPSAvXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sXG5cdHJ0eXBlbmFtZXNwYWNlID0gL14oW14uXSopKD86XFwuKC4rKXwpLztcblxuZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJldHVybkZhbHNlKCkge1xuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8vIFN1cHBvcnQ6IElFOVxuLy8gU2VlICMxMzM5MyBmb3IgbW9yZSBpbmZvXG5mdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblx0fSBjYXRjaCAoIGVyciApIHsgfVxufVxuXG5mdW5jdGlvbiBvbiggZWxlbSwgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgb25lICkge1xuXHR2YXIgb3JpZ0ZuLCB0eXBlO1xuXG5cdC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xuXHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtT2JqZWN0LCBkYXRhIClcblx0XHRcdGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRvbiggZWxlbSwgdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7XG5cblx0XHQvLyAoIHR5cGVzLCBmbiApXG5cdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vICggdHlwZXMsIGRhdGEsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHR9IGVsc2UgaWYgKCAhZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIG9uZSA9PT0gMSApIHtcblx0XHRvcmlnRm4gPSBmbjtcblx0XHRmbiA9IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0Ly8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvXG5cdFx0XHRqUXVlcnkoKS5vZmYoIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9O1xuXG5cdFx0Ly8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm5cblx0XHRmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTtcblx0fVxuXHRyZXR1cm4gZWxlbS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7XG5cdH0gKTtcbn1cblxuLypcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS5cbiAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuXG4gKi9cbmpRdWVyeS5ldmVudCA9IHtcblxuXHRnbG9iYWw6IHt9LFxuXG5cdGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHtcblxuXHRcdHZhciBoYW5kbGVPYmpJbiwgZXZlbnRIYW5kbGUsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdC8vIERvbid0IGF0dGFjaCBldmVudHMgdG8gbm9EYXRhIG9yIHRleHQvY29tbWVudCBub2RlcyAoYnV0IGFsbG93IHBsYWluIG9iamVjdHMpXG5cdFx0aWYgKCAhZWxlbURhdGEgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyXG5cdFx0aWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7XG5cdFx0XHRoYW5kbGVPYmpJbiA9IGhhbmRsZXI7XG5cdFx0XHRoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjtcblx0XHRcdHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyXG5cdFx0aWYgKCAhaGFuZGxlci5ndWlkICkge1xuXHRcdFx0aGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKztcblx0XHR9XG5cblx0XHQvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XG5cdFx0aWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IHt9O1xuXHRcdH1cblx0XHRpZiAoICEoIGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlICkgKSB7XG5cdFx0XHRldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSA9IGZ1bmN0aW9uKCBlICkge1xuXG5cdFx0XHRcdC8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kXG5cdFx0XHRcdC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWRcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiBqUXVlcnkgIT09IFwidW5kZWZpbmVkXCIgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlID9cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGVsZW0sIGFyZ3VtZW50cyApIDogdW5kZWZpbmVkO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVGhlcmUgKm11c3QqIGJlIGEgdHlwZSwgbm8gYXR0YWNoaW5nIG5hbWVzcGFjZS1vbmx5IGhhbmRsZXJzXG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgZXZlbnQgY2hhbmdlcyBpdHMgdHlwZSwgdXNlIHRoZSBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY2hhbmdlZCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gSWYgc2VsZWN0b3IgZGVmaW5lZCwgZGV0ZXJtaW5lIHNwZWNpYWwgZXZlbnQgYXBpIHR5cGUsIG90aGVyd2lzZSBnaXZlbiB0eXBlXG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cblx0XHRcdC8vIFVwZGF0ZSBzcGVjaWFsIGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBoYW5kbGVPYmogaXMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVyc1xuXHRcdFx0aGFuZGxlT2JqID0galF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRvcmlnVHlwZTogb3JpZ1R5cGUsXG5cdFx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRcdGhhbmRsZXI6IGhhbmRsZXIsXG5cdFx0XHRcdGd1aWQ6IGhhbmRsZXIuZ3VpZCxcblx0XHRcdFx0c2VsZWN0b3I6IHNlbGVjdG9yLFxuXHRcdFx0XHRuZWVkc0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApLFxuXHRcdFx0XHRuYW1lc3BhY2U6IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKVxuXHRcdFx0fSwgaGFuZGxlT2JqSW4gKTtcblxuXHRcdFx0Ly8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZSBpZiB3ZSdyZSB0aGUgZmlyc3Rcblx0XHRcdGlmICggISggaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSApICkge1xuXHRcdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107XG5cdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQgPSAwO1xuXG5cdFx0XHRcdC8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIgaWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZVxuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnNldHVwIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVudEhhbmRsZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHNwZWNpYWwuYWRkICkge1xuXHRcdFx0XHRzcGVjaWFsLmFkZC5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblxuXHRcdFx0XHRpZiAoICFoYW5kbGVPYmouaGFuZGxlci5ndWlkICkge1xuXHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1aWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxlZ2F0ZXMgaW4gZnJvbnRcblx0XHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBLZWVwIHRyYWNrIG9mIHdoaWNoIGV2ZW50cyBoYXZlIGV2ZXIgYmVlbiB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9uXG5cdFx0XHRqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gPSB0cnVlO1xuXHRcdH1cblxuXHR9LFxuXG5cdC8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkge1xuXG5cdFx0dmFyIGosIG9yaWdDb3VudCwgdG1wLFxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXG5cdFx0XHRzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsXG5cdFx0XHRlbGVtRGF0YSA9IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKSAmJiBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdGlmICggIWVsZW1EYXRhIHx8ICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE9uY2UgZm9yIGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJlIG9taXR0ZWRcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhpcyBuYW1lc3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnRcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBlc1sgdCBdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107XG5cdFx0XHR0bXAgPSB0bXBbIDIgXSAmJlxuXHRcdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKTtcblxuXHRcdFx0Ly8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50c1xuXHRcdFx0b3JpZ0NvdW50ID0gaiA9IGhhbmRsZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaiBdO1xuXG5cdFx0XHRcdGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiZcblx0XHRcdFx0XHQoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJlxuXHRcdFx0XHRcdCggIXRtcCB8fCB0bXAudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiZcblx0XHRcdFx0XHQoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8XG5cdFx0XHRcdFx0XHRzZWxlY3RvciA9PT0gXCIqKlwiICYmIGhhbmRsZU9iai5zZWxlY3RvciApICkge1xuXHRcdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaiwgMSApO1xuXG5cdFx0XHRcdFx0aWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc3BlY2lhbC5yZW1vdmUgKSB7XG5cdFx0XHRcdFx0XHRzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdFxuXHRcdFx0Ly8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpXG5cdFx0XHRpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGVsZXRlIGV2ZW50c1sgdHlwZSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSBkYXRhIGFuZCB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkXG5cdFx0aWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cdFx0fVxuXHR9LFxuXG5cdGRpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHQvLyBNYWtlIGEgd3JpdGFibGUgalF1ZXJ5LkV2ZW50IGZyb20gdGhlIG5hdGl2ZSBldmVudCBvYmplY3Rcblx0XHRldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIGV2ZW50ICk7XG5cblx0XHR2YXIgaSwgaiwgcmV0LCBtYXRjaGVkLCBoYW5kbGVPYmosXG5cdFx0XHRoYW5kbGVyUXVldWUgPSBbXSxcblx0XHRcdGFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSxcblx0XHRcdGhhbmRsZXJzID0gKCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZXZlbnRzXCIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gfHwgW10sXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGV2ZW50LnR5cGUgXSB8fCB7fTtcblxuXHRcdC8vIFVzZSB0aGUgZml4LWVkIGpRdWVyeS5FdmVudCByYXRoZXIgdGhhbiB0aGUgKHJlYWQtb25seSkgbmF0aXZlIGV2ZW50XG5cdFx0YXJnc1sgMCBdID0gZXZlbnQ7XG5cdFx0ZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzO1xuXG5cdFx0Ly8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZFxuXHRcdGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBoYW5kbGVyc1xuXHRcdGhhbmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKCB0aGlzLCBldmVudCwgaGFuZGxlcnMgKTtcblxuXHRcdC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtO1xuXG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSApICYmXG5cdFx0XHRcdCFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXG5cdFx0XHRcdC8vIFRyaWdnZXJlZCBldmVudCBtdXN0IGVpdGhlciAxKSBoYXZlIG5vIG5hbWVzcGFjZSwgb3IgMikgaGF2ZSBuYW1lc3BhY2Uocylcblx0XHRcdFx0Ly8gYSBzdWJzZXQgb3IgZXF1YWwgdG8gdGhvc2UgaW4gdGhlIGJvdW5kIGV2ZW50IChib3RoIGNhbiBoYXZlIG5vIG5hbWVzcGFjZSkuXG5cdFx0XHRcdGlmICggIWV2ZW50LnJuYW1lc3BhY2UgfHwgZXZlbnQucm5hbWVzcGFjZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7XG5cblx0XHRcdFx0XHRldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7XG5cdFx0XHRcdFx0ZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhO1xuXG5cdFx0XHRcdFx0cmV0ID0gKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSApLmhhbmRsZSB8fFxuXHRcdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIgKS5hcHBseSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7XG5cblx0XHRcdFx0XHRpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGV2ZW50LnJlc3VsdCA9IHJldCApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbCB0aGUgcG9zdERpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZVxuXHRcdGlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7XG5cdFx0XHRzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0aGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7XG5cdFx0dmFyIGksIG1hdGNoZXMsIHNlbCwgaGFuZGxlT2JqLFxuXHRcdFx0aGFuZGxlclF1ZXVlID0gW10sXG5cdFx0XHRkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCxcblx0XHRcdGN1ciA9IGV2ZW50LnRhcmdldDtcblxuXHRcdC8vIFN1cHBvcnQgKGF0IGxlYXN0KTogQ2hyb21lLCBJRTlcblx0XHQvLyBGaW5kIGRlbGVnYXRlIGhhbmRsZXJzXG5cdFx0Ly8gQmxhY2staG9sZSBTVkcgPHVzZT4gaW5zdGFuY2UgdHJlZXMgKCMxMzE4MClcblx0XHQvL1xuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3g8PTQyK1xuXHRcdC8vIEF2b2lkIG5vbi1sZWZ0LWNsaWNrIGluIEZGIGJ1dCBkb24ndCBibG9jayBJRSByYWRpbyBldmVudHMgKCMzODYxLCBnaC0yMzQzKVxuXHRcdGlmICggZGVsZWdhdGVDb3VudCAmJiBjdXIubm9kZVR5cGUgJiZcblx0XHRcdCggZXZlbnQudHlwZSAhPT0gXCJjbGlja1wiIHx8IGlzTmFOKCBldmVudC5idXR0b24gKSB8fCBldmVudC5idXR0b24gPCAxICkgKSB7XG5cblx0XHRcdGZvciAoIDsgY3VyICE9PSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkge1xuXG5cdFx0XHRcdC8vIERvbid0IGNoZWNrIG5vbi1lbGVtZW50cyAoIzEzMjA4KVxuXHRcdFx0XHQvLyBEb24ndCBwcm9jZXNzIGNsaWNrcyBvbiBkaXNhYmxlZCBlbGVtZW50cyAoIzY5MTEsICM4MTY1LCAjMTEzODIsICMxMTc2NClcblx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgKCBjdXIuZGlzYWJsZWQgIT09IHRydWUgfHwgZXZlbnQudHlwZSAhPT0gXCJjbGlja1wiICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlcyA9IFtdO1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTtcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgY29uZmxpY3Qgd2l0aCBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKCMxMzIwMylcblx0XHRcdFx0XHRcdHNlbCA9IGhhbmRsZU9iai5zZWxlY3RvciArIFwiIFwiO1xuXG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXNbIHNlbCBdID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRcdG1hdGNoZXNbIHNlbCBdID0gaGFuZGxlT2JqLm5lZWRzQ29udGV4dCA/XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5KCBzZWwsIHRoaXMgKS5pbmRleCggY3VyICkgPiAtMSA6XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQoIHNlbCwgdGhpcywgbnVsbCwgWyBjdXIgXSApLmxlbmd0aDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlc1sgc2VsIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG1hdGNoZXMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggbWF0Y2hlcy5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVzIH0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlIHJlbWFpbmluZyAoZGlyZWN0bHktYm91bmQpIGhhbmRsZXJzXG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogdGhpcywgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBoYW5kbGVyUXVldWU7XG5cdH0sXG5cblx0Ly8gSW5jbHVkZXMgc29tZSBldmVudCBwcm9wcyBzaGFyZWQgYnkgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnRcblx0cHJvcHM6ICggXCJhbHRLZXkgYnViYmxlcyBjYW5jZWxhYmxlIGN0cmxLZXkgY3VycmVudFRhcmdldCBkZXRhaWwgZXZlbnRQaGFzZSBcIiArXG5cdFx0XCJtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoXCIgKS5zcGxpdCggXCIgXCIgKSxcblxuXHRmaXhIb29rczoge30sXG5cblx0a2V5SG9va3M6IHtcblx0XHRwcm9wczogXCJjaGFyIGNoYXJDb2RlIGtleSBrZXlDb2RlXCIuc3BsaXQoIFwiIFwiICksXG5cdFx0ZmlsdGVyOiBmdW5jdGlvbiggZXZlbnQsIG9yaWdpbmFsICkge1xuXG5cdFx0XHQvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVudHNcblx0XHRcdGlmICggZXZlbnQud2hpY2ggPT0gbnVsbCApIHtcblx0XHRcdFx0ZXZlbnQud2hpY2ggPSBvcmlnaW5hbC5jaGFyQ29kZSAhPSBudWxsID8gb3JpZ2luYWwuY2hhckNvZGUgOiBvcmlnaW5hbC5rZXlDb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXZlbnQ7XG5cdFx0fVxuXHR9LFxuXG5cdG1vdXNlSG9va3M6IHtcblx0XHRwcm9wczogKCBcImJ1dHRvbiBidXR0b25zIGNsaWVudFggY2xpZW50WSBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgXCIgK1xuXHRcdFx0XCJzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50XCIgKS5zcGxpdCggXCIgXCIgKSxcblx0XHRmaWx0ZXI6IGZ1bmN0aW9uKCBldmVudCwgb3JpZ2luYWwgKSB7XG5cdFx0XHR2YXIgZXZlbnREb2MsIGRvYywgYm9keSxcblx0XHRcdFx0YnV0dG9uID0gb3JpZ2luYWwuYnV0dG9uO1xuXG5cdFx0XHQvLyBDYWxjdWxhdGUgcGFnZVgvWSBpZiBtaXNzaW5nIGFuZCBjbGllbnRYL1kgYXZhaWxhYmxlXG5cdFx0XHRpZiAoIGV2ZW50LnBhZ2VYID09IG51bGwgJiYgb3JpZ2luYWwuY2xpZW50WCAhPSBudWxsICkge1xuXHRcdFx0XHRldmVudERvYyA9IGV2ZW50LnRhcmdldC5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50O1xuXHRcdFx0XHRkb2MgPSBldmVudERvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0XHRcdGJvZHkgPSBldmVudERvYy5ib2R5O1xuXG5cdFx0XHRcdGV2ZW50LnBhZ2VYID0gb3JpZ2luYWwuY2xpZW50WCArXG5cdFx0XHRcdFx0KCBkb2MgJiYgZG9jLnNjcm9sbExlZnQgfHwgYm9keSAmJiBib2R5LnNjcm9sbExlZnQgfHwgMCApIC1cblx0XHRcdFx0XHQoIGRvYyAmJiBkb2MuY2xpZW50TGVmdCB8fCBib2R5ICYmIGJvZHkuY2xpZW50TGVmdCB8fCAwICk7XG5cdFx0XHRcdGV2ZW50LnBhZ2VZID0gb3JpZ2luYWwuY2xpZW50WSArXG5cdFx0XHRcdFx0KCBkb2MgJiYgZG9jLnNjcm9sbFRvcCAgfHwgYm9keSAmJiBib2R5LnNjcm9sbFRvcCAgfHwgMCApIC1cblx0XHRcdFx0XHQoIGRvYyAmJiBkb2MuY2xpZW50VG9wICB8fCBib2R5ICYmIGJvZHkuY2xpZW50VG9wICB8fCAwICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB3aGljaCBmb3IgY2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0gcmlnaHRcblx0XHRcdC8vIE5vdGU6IGJ1dHRvbiBpcyBub3Qgbm9ybWFsaXplZCwgc28gZG9uJ3QgdXNlIGl0XG5cdFx0XHRpZiAoICFldmVudC53aGljaCAmJiBidXR0b24gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0ZXZlbnQud2hpY2ggPSAoIGJ1dHRvbiAmIDEgPyAxIDogKCBidXR0b24gJiAyID8gMyA6ICggYnV0dG9uICYgNCA/IDIgOiAwICkgKSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXZlbnQ7XG5cdFx0fVxuXHR9LFxuXG5cdGZpeDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGlmICggZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gKSB7XG5cdFx0XHRyZXR1cm4gZXZlbnQ7XG5cdFx0fVxuXG5cdFx0Ly8gQ3JlYXRlIGEgd3JpdGFibGUgY29weSBvZiB0aGUgZXZlbnQgb2JqZWN0IGFuZCBub3JtYWxpemUgc29tZSBwcm9wZXJ0aWVzXG5cdFx0dmFyIGksIHByb3AsIGNvcHksXG5cdFx0XHR0eXBlID0gZXZlbnQudHlwZSxcblx0XHRcdG9yaWdpbmFsRXZlbnQgPSBldmVudCxcblx0XHRcdGZpeEhvb2sgPSB0aGlzLmZpeEhvb2tzWyB0eXBlIF07XG5cblx0XHRpZiAoICFmaXhIb29rICkge1xuXHRcdFx0dGhpcy5maXhIb29rc1sgdHlwZSBdID0gZml4SG9vayA9XG5cdFx0XHRcdHJtb3VzZUV2ZW50LnRlc3QoIHR5cGUgKSA/IHRoaXMubW91c2VIb29rcyA6XG5cdFx0XHRcdHJrZXlFdmVudC50ZXN0KCB0eXBlICkgPyB0aGlzLmtleUhvb2tzIDpcblx0XHRcdFx0e307XG5cdFx0fVxuXHRcdGNvcHkgPSBmaXhIb29rLnByb3BzID8gdGhpcy5wcm9wcy5jb25jYXQoIGZpeEhvb2sucHJvcHMgKSA6IHRoaXMucHJvcHM7XG5cblx0XHRldmVudCA9IG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTtcblxuXHRcdGkgPSBjb3B5Lmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHByb3AgPSBjb3B5WyBpIF07XG5cdFx0XHRldmVudFsgcHJvcCBdID0gb3JpZ2luYWxFdmVudFsgcHJvcCBdO1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IENvcmRvdmEgMi41IChXZWJLaXQpICgjMTMyNTUpXG5cdFx0Ly8gQWxsIGV2ZW50cyBzaG91bGQgaGF2ZSBhIHRhcmdldDsgQ29yZG92YSBkZXZpY2VyZWFkeSBkb2Vzbid0XG5cdFx0aWYgKCAhZXZlbnQudGFyZ2V0ICkge1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZG9jdW1lbnQ7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDYuMCssIENocm9tZTwyOFxuXHRcdC8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBub2RlICgjNTA0LCAjMTMxNDMpXG5cdFx0aWYgKCBldmVudC50YXJnZXQubm9kZVR5cGUgPT09IDMgKSB7XG5cdFx0XHRldmVudC50YXJnZXQgPSBldmVudC50YXJnZXQucGFyZW50Tm9kZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZml4SG9vay5maWx0ZXIgPyBmaXhIb29rLmZpbHRlciggZXZlbnQsIG9yaWdpbmFsRXZlbnQgKSA6IGV2ZW50O1xuXHR9LFxuXG5cdHNwZWNpYWw6IHtcblx0XHRsb2FkOiB7XG5cblx0XHRcdC8vIFByZXZlbnQgdHJpZ2dlcmVkIGltYWdlLmxvYWQgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gd2luZG93LmxvYWRcblx0XHRcdG5vQnViYmxlOiB0cnVlXG5cdFx0fSxcblx0XHRmb2N1czoge1xuXG5cdFx0XHQvLyBGaXJlIG5hdGl2ZSBldmVudCBpZiBwb3NzaWJsZSBzbyBibHVyL2ZvY3VzIHNlcXVlbmNlIGlzIGNvcnJlY3Rcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIHRoaXMgIT09IHNhZmVBY3RpdmVFbGVtZW50KCkgJiYgdGhpcy5mb2N1cyApIHtcblx0XHRcdFx0XHR0aGlzLmZvY3VzKCk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVsZWdhdGVUeXBlOiBcImZvY3VzaW5cIlxuXHRcdH0sXG5cdFx0Ymx1cjoge1xuXHRcdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggdGhpcyA9PT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSAmJiB0aGlzLmJsdXIgKSB7XG5cdFx0XHRcdFx0dGhpcy5ibHVyKCk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVsZWdhdGVUeXBlOiBcImZvY3Vzb3V0XCJcblx0XHR9LFxuXHRcdGNsaWNrOiB7XG5cblx0XHRcdC8vIEZvciBjaGVja2JveCwgZmlyZSBuYXRpdmUgZXZlbnQgc28gY2hlY2tlZCBzdGF0ZSB3aWxsIGJlIHJpZ2h0XG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCB0aGlzLnR5cGUgPT09IFwiY2hlY2tib3hcIiAmJiB0aGlzLmNsaWNrICYmIGpRdWVyeS5ub2RlTmFtZSggdGhpcywgXCJpbnB1dFwiICkgKSB7XG5cdFx0XHRcdFx0dGhpcy5jbGljaygpO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRm9yIGNyb3NzLWJyb3dzZXIgY29uc2lzdGVuY3ksIGRvbid0IGZpcmUgbmF0aXZlIC5jbGljaygpIG9uIGxpbmtzXG5cdFx0XHRfZGVmYXVsdDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKCBldmVudC50YXJnZXQsIFwiYVwiICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGJlZm9yZXVubG9hZDoge1xuXHRcdFx0cG9zdERpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCAyMCtcblx0XHRcdFx0Ly8gRmlyZWZveCBkb2Vzbid0IGFsZXJ0IGlmIHRoZSByZXR1cm5WYWx1ZSBmaWVsZCBpcyBub3Qgc2V0LlxuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCAhPT0gdW5kZWZpbmVkICYmIGV2ZW50Lm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0ZXZlbnQub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGV2ZW50LnJlc3VsdDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LnJlbW92ZUV2ZW50ID0gZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHtcblxuXHQvLyBUaGlzIFwiaWZcIiBpcyBuZWVkZWQgZm9yIHBsYWluIG9iamVjdHNcblx0aWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0ZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUgKTtcblx0fVxufTtcblxualF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7XG5cblx0Ly8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkXG5cdGlmICggISggdGhpcyBpbnN0YW5jZW9mIGpRdWVyeS5FdmVudCApICkge1xuXHRcdHJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBFdmVudCBvYmplY3Rcblx0aWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7XG5cdFx0dGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjO1xuXHRcdHRoaXMudHlwZSA9IHNyYy50eXBlO1xuXG5cdFx0Ly8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWRcblx0XHQvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHNyYy5kZWZhdWx0UHJldmVudGVkIHx8XG5cdFx0XHRcdHNyYy5kZWZhdWx0UHJldmVudGVkID09PSB1bmRlZmluZWQgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMFxuXHRcdFx0XHRzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlID9cblx0XHRcdHJldHVyblRydWUgOlxuXHRcdFx0cmV0dXJuRmFsc2U7XG5cblx0Ly8gRXZlbnQgdHlwZVxuXHR9IGVsc2Uge1xuXHRcdHRoaXMudHlwZSA9IHNyYztcblx0fVxuXG5cdC8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0XG5cdGlmICggcHJvcHMgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdGhpcywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUgb25lXG5cdHRoaXMudGltZVN0YW1wID0gc3JjICYmIHNyYy50aW1lU3RhbXAgfHwgalF1ZXJ5Lm5vdygpO1xuXG5cdC8vIE1hcmsgaXQgYXMgZml4ZWRcblx0dGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7XG59O1xuXG4vLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmdcbi8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbFxualF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IGpRdWVyeS5FdmVudCxcblx0aXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcblx0aXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzU2ltdWxhdGVkOiBmYWxzZSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fSxcblx0c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cblx0XHR0aGlzLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9XG59O1xuXG4vLyBDcmVhdGUgbW91c2VlbnRlci9sZWF2ZSBldmVudHMgdXNpbmcgbW91c2VvdmVyL291dCBhbmQgZXZlbnQtdGltZSBjaGVja3Ncbi8vIHNvIHRoYXQgZXZlbnQgZGVsZWdhdGlvbiB3b3JrcyBpbiBqUXVlcnkuXG4vLyBEbyB0aGUgc2FtZSBmb3IgcG9pbnRlcmVudGVyL3BvaW50ZXJsZWF2ZSBhbmQgcG9pbnRlcm92ZXIvcG9pbnRlcm91dFxuLy9cbi8vIFN1cHBvcnQ6IFNhZmFyaSA3IG9ubHlcbi8vIFNhZmFyaSBzZW5kcyBtb3VzZWVudGVyIHRvbyBvZnRlbjsgc2VlOlxuLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ3MDI1OFxuLy8gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYnVnIChpdCBleGlzdGVkIGluIG9sZGVyIENocm9tZSB2ZXJzaW9ucyBhcyB3ZWxsKS5cbmpRdWVyeS5lYWNoKCB7XG5cdG1vdXNlZW50ZXI6IFwibW91c2VvdmVyXCIsXG5cdG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIixcblx0cG9pbnRlcmVudGVyOiBcInBvaW50ZXJvdmVyXCIsXG5cdHBvaW50ZXJsZWF2ZTogXCJwb2ludGVyb3V0XCJcbn0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7XG5cdFx0ZGVsZWdhdGVUeXBlOiBmaXgsXG5cdFx0YmluZFR5cGU6IGZpeCxcblxuXHRcdGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHJldCxcblx0XHRcdFx0dGFyZ2V0ID0gdGhpcyxcblx0XHRcdFx0cmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsXG5cdFx0XHRcdGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajtcblxuXHRcdFx0Ly8gRm9yIG1vdXNlZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC5cblx0XHRcdC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2luZG93XG5cdFx0XHRpZiAoICFyZWxhdGVkIHx8ICggcmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApICkgKSB7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7XG5cdFx0XHRcdHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGZpeDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdG9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0b25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTtcblx0fSxcblx0b2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHtcblx0XHR2YXIgaGFuZGxlT2JqLCB0eXBlO1xuXHRcdGlmICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkge1xuXG5cdFx0XHQvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50XG5cdFx0XHRoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7XG5cdFx0XHRqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKFxuXHRcdFx0XHRoYW5kbGVPYmoubmFtZXNwYWNlID9cblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUgKyBcIi5cIiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOlxuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSxcblx0XHRcdFx0aGFuZGxlT2JqLnNlbGVjdG9yLFxuXHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlclxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdIClcblx0XHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRcdHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzIFssIGZuXSApXG5cdFx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxudmFyXG5cdHJ4aHRtbFRhZyA9IC88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcXHc6LV0rKVtePl0qKVxcLz4vZ2ksXG5cblx0Ly8gU3VwcG9ydDogSUUgMTAtMTEsIEVkZ2UgMTAyNDArXG5cdC8vIEluIElFL0VkZ2UgdXNpbmcgcmVnZXggZ3JvdXBzIGhlcmUgY2F1c2VzIHNldmVyZSBzbG93ZG93bnMuXG5cdC8vIFNlZSBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzE3MzY1MTIvXG5cdHJub0lubmVyaHRtbCA9IC88c2NyaXB0fDxzdHlsZXw8bGluay9pLFxuXG5cdC8vIGNoZWNrZWQ9XCJjaGVja2VkXCIgb3IgY2hlY2tlZFxuXHRyY2hlY2tlZCA9IC9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksXG5cdHJzY3JpcHRUeXBlTWFza2VkID0gL150cnVlXFwvKC4qKS8sXG5cdHJjbGVhblNjcmlwdCA9IC9eXFxzKjwhKD86XFxbQ0RBVEFcXFt8LS0pfCg/OlxcXVxcXXwtLSk+XFxzKiQvZztcblxuLy8gTWFuaXB1bGF0aW5nIHRhYmxlcyByZXF1aXJlcyBhIHRib2R5XG5mdW5jdGlvbiBtYW5pcHVsYXRpb25UYXJnZXQoIGVsZW0sIGNvbnRlbnQgKSB7XG5cdHJldHVybiBqUXVlcnkubm9kZU5hbWUoIGVsZW0sIFwidGFibGVcIiApICYmXG5cdFx0alF1ZXJ5Lm5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsIFwidHJcIiApID9cblxuXHRcdGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwidGJvZHlcIiApWyAwIF0gfHxcblx0XHRcdGVsZW0uYXBwZW5kQ2hpbGQoIGVsZW0ub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInRib2R5XCIgKSApIDpcblx0XHRlbGVtO1xufVxuXG4vLyBSZXBsYWNlL3Jlc3RvcmUgdGhlIHR5cGUgYXR0cmlidXRlIG9mIHNjcmlwdCBlbGVtZW50cyBmb3Igc2FmZSBET00gbWFuaXB1bGF0aW9uXG5mdW5jdGlvbiBkaXNhYmxlU2NyaXB0KCBlbGVtICkge1xuXHRlbGVtLnR5cGUgPSAoIGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApICE9PSBudWxsICkgKyBcIi9cIiArIGVsZW0udHlwZTtcblx0cmV0dXJuIGVsZW07XG59XG5mdW5jdGlvbiByZXN0b3JlU2NyaXB0KCBlbGVtICkge1xuXHR2YXIgbWF0Y2ggPSByc2NyaXB0VHlwZU1hc2tlZC5leGVjKCBlbGVtLnR5cGUgKTtcblxuXHRpZiAoIG1hdGNoICkge1xuXHRcdGVsZW0udHlwZSA9IG1hdGNoWyAxIF07XG5cdH0gZWxzZSB7XG5cdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIFwidHlwZVwiICk7XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHtcblx0dmFyIGksIGwsIHR5cGUsIHBkYXRhT2xkLCBwZGF0YUN1ciwgdWRhdGFPbGQsIHVkYXRhQ3VyLCBldmVudHM7XG5cblx0aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuXG5cdGlmICggZGF0YVByaXYuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0cGRhdGFPbGQgPSBkYXRhUHJpdi5hY2Nlc3MoIHNyYyApO1xuXHRcdHBkYXRhQ3VyID0gZGF0YVByaXYuc2V0KCBkZXN0LCBwZGF0YU9sZCApO1xuXHRcdGV2ZW50cyA9IHBkYXRhT2xkLmV2ZW50cztcblxuXHRcdGlmICggZXZlbnRzICkge1xuXHRcdFx0ZGVsZXRlIHBkYXRhQ3VyLmhhbmRsZTtcblx0XHRcdHBkYXRhQ3VyLmV2ZW50cyA9IHt9O1xuXG5cdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gMi4gQ29weSB1c2VyIGRhdGFcblx0aWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHR1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2Vzcyggc3JjICk7XG5cdFx0dWRhdGFDdXIgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgdWRhdGFPbGQgKTtcblxuXHRcdGRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTtcblx0fVxufVxuXG4vLyBGaXggSUUgYnVncywgc2VlIHN1cHBvcnQgdGVzdHNcbmZ1bmN0aW9uIGZpeElucHV0KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHQvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi5cblx0aWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7XG5cdFx0ZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7XG5cblx0Ly8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnNcblx0fSBlbHNlIGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiB8fCBub2RlTmFtZSA9PT0gXCJ0ZXh0YXJlYVwiICkge1xuXHRcdGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTtcblx0fVxufVxuXG5mdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKSB7XG5cblx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRhcmdzID0gY29uY2F0LmFwcGx5KCBbXSwgYXJncyApO1xuXG5cdHZhciBmcmFnbWVudCwgZmlyc3QsIHNjcmlwdHMsIGhhc1NjcmlwdHMsIG5vZGUsIGRvYyxcblx0XHRpID0gMCxcblx0XHRsID0gY29sbGVjdGlvbi5sZW5ndGgsXG5cdFx0aU5vQ2xvbmUgPSBsIC0gMSxcblx0XHR2YWx1ZSA9IGFyZ3NbIDAgXSxcblx0XHRpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0Ly8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNvbnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0XG5cdGlmICggaXNGdW5jdGlvbiB8fFxuXHRcdFx0KCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7XG5cdFx0cmV0dXJuIGNvbGxlY3Rpb24uZWFjaCggZnVuY3Rpb24oIGluZGV4ICkge1xuXHRcdFx0dmFyIHNlbGYgPSBjb2xsZWN0aW9uLmVxKCBpbmRleCApO1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uICkge1xuXHRcdFx0XHRhcmdzWyAwIF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpbmRleCwgc2VsZi5odG1sKCkgKTtcblx0XHRcdH1cblx0XHRcdGRvbU1hbmlwKCBzZWxmLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApO1xuXHRcdH0gKTtcblx0fVxuXG5cdGlmICggbCApIHtcblx0XHRmcmFnbWVudCA9IGJ1aWxkRnJhZ21lbnQoIGFyZ3MsIGNvbGxlY3Rpb25bIDAgXS5vd25lckRvY3VtZW50LCBmYWxzZSwgY29sbGVjdGlvbiwgaWdub3JlZCApO1xuXHRcdGZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdGlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7XG5cdFx0XHRmcmFnbWVudCA9IGZpcnN0O1xuXHRcdH1cblxuXHRcdC8vIFJlcXVpcmUgZWl0aGVyIG5ldyBjb250ZW50IG9yIGFuIGludGVyZXN0IGluIGlnbm9yZWQgZWxlbWVudHMgdG8gaW52b2tlIHRoZSBjYWxsYmFja1xuXHRcdGlmICggZmlyc3QgfHwgaWdub3JlZCApIHtcblx0XHRcdHNjcmlwdHMgPSBqUXVlcnkubWFwKCBnZXRBbGwoIGZyYWdtZW50LCBcInNjcmlwdFwiICksIGRpc2FibGVTY3JpcHQgKTtcblx0XHRcdGhhc1NjcmlwdHMgPSBzY3JpcHRzLmxlbmd0aDtcblxuXHRcdFx0Ly8gVXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhlIGxhc3QgaXRlbVxuXHRcdFx0Ly8gaW5zdGVhZCBvZiB0aGUgZmlyc3QgYmVjYXVzZSBpdCBjYW4gZW5kIHVwXG5cdFx0XHQvLyBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5IGluIGNlcnRhaW4gc2l0dWF0aW9ucyAoIzgwNzApLlxuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRub2RlID0gZnJhZ21lbnQ7XG5cblx0XHRcdFx0aWYgKCBpICE9PSBpTm9DbG9uZSApIHtcblx0XHRcdFx0XHRub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0cnVlLCB0cnVlICk7XG5cblx0XHRcdFx0XHQvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMSwgUGhhbnRvbUpTPDJcblx0XHRcdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxsYmFjay5jYWxsKCBjb2xsZWN0aW9uWyBpIF0sIG5vZGUsIGkgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXHRcdFx0XHRkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50O1xuXG5cdFx0XHRcdC8vIFJlZW5hYmxlIHNjcmlwdHNcblx0XHRcdFx0alF1ZXJ5Lm1hcCggc2NyaXB0cywgcmVzdG9yZVNjcmlwdCApO1xuXG5cdFx0XHRcdC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb25cblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHNjcmlwdHNbIGkgXTtcblx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCBcIlwiICkgJiZcblx0XHRcdFx0XHRcdCFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsIFwiZ2xvYmFsRXZhbFwiICkgJiZcblx0XHRcdFx0XHRcdGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7XG5cblx0XHRcdFx0XHRcdGlmICggbm9kZS5zcmMgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gT3B0aW9uYWwgQUpBWCBkZXBlbmRlbmN5LCBidXQgd29uJ3QgcnVuIHNjcmlwdHMgaWYgbm90IHByZXNlbnRcblx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuX2V2YWxVcmwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5Ll9ldmFsVXJsKCBub2RlLnNyYyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKCByY2xlYW5TY3JpcHQsIFwiXCIgKSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjb2xsZWN0aW9uO1xufVxuXG5mdW5jdGlvbiByZW1vdmUoIGVsZW0sIHNlbGVjdG9yLCBrZWVwRGF0YSApIHtcblx0dmFyIG5vZGUsXG5cdFx0bm9kZXMgPSBzZWxlY3RvciA/IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBlbGVtICkgOiBlbGVtLFxuXHRcdGkgPSAwO1xuXG5cdGZvciAoIDsgKCBub2RlID0gbm9kZXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRpZiAoICFrZWVwRGF0YSAmJiBub2RlLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBub2RlICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG5vZGUucGFyZW50Tm9kZSApIHtcblx0XHRcdGlmICgga2VlcERhdGEgJiYgalF1ZXJ5LmNvbnRhaW5zKCBub2RlLm93bmVyRG9jdW1lbnQsIG5vZGUgKSApIHtcblx0XHRcdFx0c2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdH1cblx0XHRcdG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggbm9kZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGh0bWxQcmVmaWx0ZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHJldHVybiBodG1sLnJlcGxhY2UoIHJ4aHRtbFRhZywgXCI8JDE+PC8kMj5cIiApO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0dmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsXG5cdFx0XHRjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksXG5cdFx0XHRpblBhZ2UgPSBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXG5cdFx0Ly8gRml4IElFIGNsb25pbmcgaXNzdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCAmJiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEgKSAmJlxuXHRcdFx0XHQhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIFdlIGVzY2hldyBTaXp6bGUgaGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczogaHR0cDovL2pzcGVyZi5jb20vZ2V0YWxsLXZzLXNpenpsZS8yXG5cdFx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7XG5cdFx0XHRzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApO1xuXG5cdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZVxuXHRcdGlmICggZGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRcdHNyY0VsZW1lbnRzID0gc3JjRWxlbWVudHMgfHwgZ2V0QWxsKCBlbGVtICk7XG5cdFx0XHRcdGRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7XG5cblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lLCBcInNjcmlwdFwiICk7XG5cdFx0aWYgKCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sIFwic2NyaXB0XCIgKSApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB0aGUgY2xvbmVkIHNldFxuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblx0XHR2YXIgZGF0YSwgZWxlbSwgdHlwZSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT09IHVuZGVmaW5lZDsgaSsrICkge1xuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRcdGlmICggKCBkYXRhID0gZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdGZvciAoIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbFsgdHlwZSBdICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9IDM1LTQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSApIHtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PSAzNS00NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdC8vIEtlZXAgZG9tTWFuaXAgZXhwb3NlZCB1bnRpbCAzLjAgKGdoLTIyMjUpXG5cdGRvbU1hbmlwOiBkb21NYW5pcCxcblxuXHRkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yICk7XG5cdH0sXG5cblx0dGV4dDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnRleHQoIHRoaXMgKSA6XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHByZXBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoIGVsZW0sIHRhcmdldC5maXJzdENoaWxkICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGJlZm9yZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YWZ0ZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gUHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXNcblx0XHRcdFx0ZWxlbS50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzO1xuXHRcdGRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50cztcblxuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF0gfHwge30sXG5cdFx0XHRcdGkgPSAwLFxuXHRcdFx0XHRsID0gdGhpcy5sZW5ndGg7XG5cblx0XHRcdGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pbm5lckhUTUw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUxcblx0XHRcdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJlxuXHRcdFx0XHQhd3JhcE1hcFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpIF0gKSB7XG5cblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuaHRtbFByZWZpbHRlciggdmFsdWUgKTtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRcdGVsZW0gPSB0aGlzWyBpIF0gfHwge307XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblx0XHRcdFx0XHRcdFx0ZWxlbS5pbm5lckhUTUwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtID0gMDtcblxuXHRcdFx0XHQvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2Rcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7XG5cdFx0XHR9XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRyZXBsYWNlV2l0aDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGlnbm9yZWQgPSBbXTtcblxuXHRcdC8vIE1ha2UgdGhlIGNoYW5nZXMsIHJlcGxhY2luZyBlYWNoIG5vbi1pZ25vcmVkIGNvbnRleHQgZWxlbWVudCB3aXRoIHRoZSBuZXcgY29udGVudFxuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG5cblx0XHRcdGlmICggalF1ZXJ5LmluQXJyYXkoIHRoaXMsIGlnbm9yZWQgKSA8IDAgKSB7XG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggdGhpcyApICk7XG5cdFx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRcdHBhcmVudC5yZXBsYWNlQ2hpbGQoIGVsZW0sIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gRm9yY2UgY2FsbGJhY2sgaW52b2NhdGlvblxuXHRcdH0sIGlnbm9yZWQgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCgge1xuXHRhcHBlbmRUbzogXCJhcHBlbmRcIixcblx0cHJlcGVuZFRvOiBcInByZXBlbmRcIixcblx0aW5zZXJ0QmVmb3JlOiBcImJlZm9yZVwiLFxuXHRpbnNlcnRBZnRlcjogXCJhZnRlclwiLFxuXHRyZXBsYWNlQWxsOiBcInJlcGxhY2VXaXRoXCJcbn0sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGVsZW1zLFxuXHRcdFx0cmV0ID0gW10sXG5cdFx0XHRpbnNlcnQgPSBqUXVlcnkoIHNlbGVjdG9yICksXG5cdFx0XHRsYXN0ID0gaW5zZXJ0Lmxlbmd0aCAtIDEsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7XG5cdFx0XHRlbGVtcyA9IGkgPT09IGxhc3QgPyB0aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApO1xuXHRcdFx0alF1ZXJ5KCBpbnNlcnRbIGkgXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBRdFdlYktpdFxuXHRcdFx0Ly8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93c1xuXHRcdFx0cHVzaC5hcHBseSggcmV0LCBlbGVtcy5nZXQoKSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7XG5cdH07XG59ICk7XG5cblxudmFyIGlmcmFtZSxcblx0ZWxlbWRpc3BsYXkgPSB7XG5cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94XG5cdFx0Ly8gV2UgaGF2ZSB0byBwcmUtZGVmaW5lIHRoZXNlIHZhbHVlcyBmb3IgRkYgKCMxMDIyNylcblx0XHRIVE1MOiBcImJsb2NrXCIsXG5cdFx0Qk9EWTogXCJibG9ja1wiXG5cdH07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGFjdHVhbCBkaXNwbGF5IG9mIGEgZWxlbWVudFxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgbm9kZU5hbWUgb2YgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBkb2MgRG9jdW1lbnQgb2JqZWN0XG4gKi9cblxuLy8gQ2FsbGVkIG9ubHkgZnJvbSB3aXRoaW4gZGVmYXVsdERpc3BsYXlcbmZ1bmN0aW9uIGFjdHVhbERpc3BsYXkoIG5hbWUsIGRvYyApIHtcblx0dmFyIGVsZW0gPSBqUXVlcnkoIGRvYy5jcmVhdGVFbGVtZW50KCBuYW1lICkgKS5hcHBlbmRUbyggZG9jLmJvZHkgKSxcblxuXHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtWyAwIF0sIFwiZGlzcGxheVwiICk7XG5cblx0Ly8gV2UgZG9uJ3QgaGF2ZSBhbnkgZGF0YSBzdG9yZWQgb24gdGhlIGVsZW1lbnQsXG5cdC8vIHNvIHVzZSBcImRldGFjaFwiIG1ldGhvZCBhcyBmYXN0IHdheSB0byBnZXQgcmlkIG9mIHRoZSBlbGVtZW50XG5cdGVsZW0uZGV0YWNoKCk7XG5cblx0cmV0dXJuIGRpc3BsYXk7XG59XG5cbi8qKlxuICogVHJ5IHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBkaXNwbGF5IHZhbHVlIG9mIGFuIGVsZW1lbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBub2RlTmFtZVxuICovXG5mdW5jdGlvbiBkZWZhdWx0RGlzcGxheSggbm9kZU5hbWUgKSB7XG5cdHZhciBkb2MgPSBkb2N1bWVudCxcblx0XHRkaXNwbGF5ID0gZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF07XG5cblx0aWYgKCAhZGlzcGxheSApIHtcblx0XHRkaXNwbGF5ID0gYWN0dWFsRGlzcGxheSggbm9kZU5hbWUsIGRvYyApO1xuXG5cdFx0Ly8gSWYgdGhlIHNpbXBsZSB3YXkgZmFpbHMsIHJlYWQgZnJvbSBpbnNpZGUgYW4gaWZyYW1lXG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiB8fCAhZGlzcGxheSApIHtcblxuXHRcdFx0Ly8gVXNlIHRoZSBhbHJlYWR5LWNyZWF0ZWQgaWZyYW1lIGlmIHBvc3NpYmxlXG5cdFx0XHRpZnJhbWUgPSAoIGlmcmFtZSB8fCBqUXVlcnkoIFwiPGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPlwiICkgKVxuXHRcdFx0XHQuYXBwZW5kVG8oIGRvYy5kb2N1bWVudEVsZW1lbnQgKTtcblxuXHRcdFx0Ly8gQWx3YXlzIHdyaXRlIGEgbmV3IEhUTUwgc2tlbGV0b24gc28gV2Via2l0IGFuZCBGaXJlZm94IGRvbid0IGNob2tlIG9uIHJldXNlXG5cdFx0XHRkb2MgPSBpZnJhbWVbIDAgXS5jb250ZW50RG9jdW1lbnQ7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFXG5cdFx0XHRkb2Mud3JpdGUoKTtcblx0XHRcdGRvYy5jbG9zZSgpO1xuXG5cdFx0XHRkaXNwbGF5ID0gYWN0dWFsRGlzcGxheSggbm9kZU5hbWUsIGRvYyApO1xuXHRcdFx0aWZyYW1lLmRldGFjaCgpO1xuXHRcdH1cblxuXHRcdC8vIFN0b3JlIHRoZSBjb3JyZWN0IGRlZmF1bHQgZGlzcGxheVxuXHRcdGVsZW1kaXNwbGF5WyBub2RlTmFtZSBdID0gZGlzcGxheTtcblx0fVxuXG5cdHJldHVybiBkaXNwbGF5O1xufVxudmFyIHJtYXJnaW4gPSAoIC9ebWFyZ2luLyApO1xuXG52YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggXCJeKFwiICsgcG51bSArIFwiKSg/IXB4KVthLXolXSskXCIsIFwiaVwiICk7XG5cbnZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFPD0xMSssIEZpcmVmb3g8PTMwKyAoIzE1MDk4LCAjMTQxNTApXG5cdFx0Ly8gSUUgdGhyb3dzIG9uIGVsZW1lbnRzIGNyZWF0ZWQgaW4gcG9wdXBzXG5cdFx0Ly8gRkYgbWVhbndoaWxlIHRocm93cyBvbiBmcmFtZSBlbGVtZW50cyB0aHJvdWdoIFwiZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZVwiXG5cdFx0dmFyIHZpZXcgPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cblx0XHRpZiAoICF2aWV3IHx8ICF2aWV3Lm9wZW5lciApIHtcblx0XHRcdHZpZXcgPSB3aW5kb3c7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSApO1xuXHR9O1xuXG52YXIgc3dhcCA9IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBjYWxsYmFjaywgYXJncyApIHtcblx0dmFyIHJldCwgbmFtZSxcblx0XHRvbGQgPSB7fTtcblxuXHQvLyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdG9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdO1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9wdGlvbnNbIG5hbWUgXTtcblx0fVxuXG5cdHJldCA9IGNhbGxiYWNrLmFwcGx5KCBlbGVtLCBhcmdzIHx8IFtdICk7XG5cblx0Ly8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59O1xuXG5cbnZhciBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgcGl4ZWxQb3NpdGlvblZhbCwgYm94U2l6aW5nUmVsaWFibGVWYWwsIHBpeGVsTWFyZ2luUmlnaHRWYWwsIHJlbGlhYmxlTWFyZ2luTGVmdFZhbCxcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICksXG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdC8vIEZpbmlzaCBlYXJseSBpbiBsaW1pdGVkIChub24tYnJvd3NlcikgZW52aXJvbm1lbnRzXG5cdGlmICggIWRpdi5zdHlsZSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRTktMTErXG5cdC8vIFN0eWxlIG9mIGNsb25lZCBlbGVtZW50IGFmZmVjdHMgc291cmNlIGVsZW1lbnQgY2xvbmVkICgjODkwOClcblx0ZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJjb250ZW50LWJveFwiO1xuXHRkaXYuY2xvbmVOb2RlKCB0cnVlICkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcIlwiO1xuXHRzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gXCJjb250ZW50LWJveFwiO1xuXG5cdGNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gXCJib3JkZXI6MDt3aWR0aDo4cHg7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4O1wiICtcblx0XHRcInBhZGRpbmc6MDttYXJnaW4tdG9wOjFweDtwb3NpdGlvbjphYnNvbHV0ZVwiO1xuXHRjb250YWluZXIuYXBwZW5kQ2hpbGQoIGRpdiApO1xuXG5cdC8vIEV4ZWN1dGluZyBib3RoIHBpeGVsUG9zaXRpb24gJiBib3hTaXppbmdSZWxpYWJsZSB0ZXN0cyByZXF1aXJlIG9ubHkgb25lIGxheW91dFxuXHQvLyBzbyB0aGV5J3JlIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSB0aGUgc2Vjb25kIGNvbXB1dGF0aW9uLlxuXHRmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygpIHtcblx0XHRkaXYuc3R5bGUuY3NzVGV4dCA9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3g8MjksIEFuZHJvaWQgMi4zXG5cdFx0XHQvLyBWZW5kb3ItcHJlZml4IGJveC1zaXppbmdcblx0XHRcdFwiLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O1wiICtcblx0XHRcdFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztcIiArXG5cdFx0XHRcIm1hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7XCIgK1xuXHRcdFx0XCJ0b3A6MSU7d2lkdGg6NTAlXCI7XG5cdFx0ZGl2LmlubmVySFRNTCA9IFwiXCI7XG5cdFx0ZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBjb250YWluZXIgKTtcblxuXHRcdHZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTtcblx0XHRwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSBcIjElXCI7XG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gZGl2U3R5bGUubWFyZ2luTGVmdCA9PT0gXCIycHhcIjtcblx0XHRib3hTaXppbmdSZWxpYWJsZVZhbCA9IGRpdlN0eWxlLndpZHRoID09PSBcIjRweFwiO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seVxuXHRcdC8vIFNvbWUgc3R5bGVzIGNvbWUgYmFjayB3aXRoIHBlcmNlbnRhZ2UgdmFsdWVzLCBldmVuIHRob3VnaCB0aGV5IHNob3VsZG4ndFxuXHRcdGRpdi5zdHlsZS5tYXJnaW5SaWdodCA9IFwiNTAlXCI7XG5cdFx0cGl4ZWxNYXJnaW5SaWdodFZhbCA9IGRpdlN0eWxlLm1hcmdpblJpZ2h0ID09PSBcIjRweFwiO1xuXG5cdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTtcblx0fVxuXG5cdGpRdWVyeS5leHRlbmQoIHN1cHBvcnQsIHtcblx0XHRwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gVGhpcyB0ZXN0IGlzIGV4ZWN1dGVkIG9ubHkgb25jZSBidXQgd2Ugc3RpbGwgZG8gbWVtb2l6aW5nXG5cdFx0XHQvLyBzaW5jZSB3ZSBjYW4gdXNlIHRoZSBib3hTaXppbmdSZWxpYWJsZSBwcmUtY29tcHV0aW5nLlxuXHRcdFx0Ly8gTm8gbmVlZCB0byBjaGVjayBpZiB0aGUgdGVzdCB3YXMgYWxyZWFkeSBwZXJmb3JtZWQsIHRob3VnaC5cblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxQb3NpdGlvblZhbDtcblx0XHR9LFxuXHRcdGJveFNpemluZ1JlbGlhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggYm94U2l6aW5nUmVsaWFibGVWYWwgPT0gbnVsbCApIHtcblx0XHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBib3hTaXppbmdSZWxpYWJsZVZhbDtcblx0XHR9LFxuXHRcdHBpeGVsTWFyZ2luUmlnaHQ6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMC00LjNcblx0XHRcdC8vIFdlJ3JlIGNoZWNraW5nIGZvciBib3hTaXppbmdSZWxpYWJsZVZhbCBoZXJlIGluc3RlYWQgb2YgcGl4ZWxNYXJnaW5SaWdodFZhbFxuXHRcdFx0Ly8gc2luY2UgdGhhdCBjb21wcmVzc2VzIGJldHRlciBhbmQgdGhleSdyZSBjb21wdXRlZCB0b2dldGhlciBhbnl3YXkuXG5cdFx0XHRpZiAoIGJveFNpemluZ1JlbGlhYmxlVmFsID09IG51bGwgKSB7XG5cdFx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcGl4ZWxNYXJnaW5SaWdodFZhbDtcblx0XHR9LFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCBvbmx5LCBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBGaXJlZm94IDw9MyAtIDM3XG5cdFx0XHRpZiAoIGJveFNpemluZ1JlbGlhYmxlVmFsID09IG51bGwgKSB7XG5cdFx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsO1xuXHRcdH0sXG5cdFx0cmVsaWFibGVNYXJnaW5SaWdodDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zXG5cdFx0XHQvLyBDaGVjayBpZiBkaXYgd2l0aCBleHBsaWNpdCB3aWR0aCBhbmQgbm8gbWFyZ2luLXJpZ2h0IGluY29ycmVjdGx5XG5cdFx0XHQvLyBnZXRzIGNvbXB1dGVkIG1hcmdpbi1yaWdodCBiYXNlZCBvbiB3aWR0aCBvZiBjb250YWluZXIuICgjMzMzMylcblx0XHRcdC8vIFdlYktpdCBCdWcgMTMzNDMgLSBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgd3JvbmcgdmFsdWUgZm9yIG1hcmdpbi1yaWdodFxuXHRcdFx0Ly8gVGhpcyBzdXBwb3J0IGZ1bmN0aW9uIGlzIG9ubHkgZXhlY3V0ZWQgb25jZSBzbyBubyBtZW1vaXppbmcgaXMgbmVlZGVkLlxuXHRcdFx0dmFyIHJldCxcblx0XHRcdFx0bWFyZ2luRGl2ID0gZGl2LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcblxuXHRcdFx0Ly8gUmVzZXQgQ1NTOiBib3gtc2l6aW5nOyBkaXNwbGF5OyBtYXJnaW47IGJvcmRlcjsgcGFkZGluZ1xuXHRcdFx0bWFyZ2luRGl2LnN0eWxlLmNzc1RleHQgPSBkaXYuc3R5bGUuY3NzVGV4dCA9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCAyLjNcblx0XHRcdFx0Ly8gVmVuZG9yLXByZWZpeCBib3gtc2l6aW5nXG5cdFx0XHRcdFwiLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3g7XCIgK1xuXHRcdFx0XHRcImRpc3BsYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowXCI7XG5cdFx0XHRtYXJnaW5EaXYuc3R5bGUubWFyZ2luUmlnaHQgPSBtYXJnaW5EaXYuc3R5bGUud2lkdGggPSBcIjBcIjtcblx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IFwiMXB4XCI7XG5cdFx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApO1xuXG5cdFx0XHRyZXQgPSAhcGFyc2VGbG9hdCggd2luZG93LmdldENvbXB1dGVkU3R5bGUoIG1hcmdpbkRpdiApLm1hcmdpblJpZ2h0ICk7XG5cblx0XHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7XG5cdFx0XHRkaXYucmVtb3ZlQ2hpbGQoIG1hcmdpbkRpdiApO1xuXG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0fSApO1xufSApKCk7XG5cblxuZnVuY3Rpb24gY3VyQ1NTKCBlbGVtLCBuYW1lLCBjb21wdXRlZCApIHtcblx0dmFyIHdpZHRoLCBtaW5XaWR0aCwgbWF4V2lkdGgsIHJldCxcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0Y29tcHV0ZWQgPSBjb21wdXRlZCB8fCBnZXRTdHlsZXMoIGVsZW0gKTtcblx0cmV0ID0gY29tcHV0ZWQgPyBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRbIG5hbWUgXSA6IHVuZGVmaW5lZDtcblxuXHQvLyBTdXBwb3J0OiBPcGVyYSAxMi4xeCBvbmx5XG5cdC8vIEZhbGwgYmFjayB0byBzdHlsZSBldmVuIHdpdGhvdXQgY29tcHV0ZWRcblx0Ly8gY29tcHV0ZWQgaXMgdW5kZWZpbmVkIGZvciBlbGVtcyBvbiBkb2N1bWVudCBmcmFnbWVudHNcblx0aWYgKCAoIHJldCA9PT0gXCJcIiB8fCByZXQgPT09IHVuZGVmaW5lZCApICYmICFqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApICkge1xuXHRcdHJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUU5XG5cdC8vIGdldFByb3BlcnR5VmFsdWUgaXMgb25seSBuZWVkZWQgZm9yIC5jc3MoJ2ZpbHRlcicpICgjMTI1MzcpXG5cdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHQvLyBBIHRyaWJ1dGUgdG8gdGhlIFwiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkc1wiXG5cdFx0Ly8gQW5kcm9pZCBCcm93c2VyIHJldHVybnMgcGVyY2VudGFnZSBmb3Igc29tZSB2YWx1ZXMsXG5cdFx0Ly8gYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJlbGlhYmx5IHBpeGVscy5cblx0XHQvLyBUaGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNwZWM6XG5cdFx0Ly8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI3Jlc29sdmVkLXZhbHVlc1xuXHRcdGlmICggIXN1cHBvcnQucGl4ZWxNYXJnaW5SaWdodCgpICYmIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiBybWFyZ2luLnRlc3QoIG5hbWUgKSApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlc1xuXHRcdFx0d2lkdGggPSBzdHlsZS53aWR0aDtcblx0XHRcdG1pbldpZHRoID0gc3R5bGUubWluV2lkdGg7XG5cdFx0XHRtYXhXaWR0aCA9IHN0eWxlLm1heFdpZHRoO1xuXG5cdFx0XHQvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7XG5cdFx0XHRyZXQgPSBjb21wdXRlZC53aWR0aDtcblxuXHRcdFx0Ly8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlc1xuXHRcdFx0c3R5bGUud2lkdGggPSB3aWR0aDtcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gbWluV2lkdGg7XG5cdFx0XHRzdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXQgIT09IHVuZGVmaW5lZCA/XG5cblx0XHQvLyBTdXBwb3J0OiBJRTktMTErXG5cdFx0Ly8gSUUgcmV0dXJucyB6SW5kZXggdmFsdWUgYXMgYW4gaW50ZWdlci5cblx0XHRyZXQgKyBcIlwiIDpcblx0XHRyZXQ7XG59XG5cblxuZnVuY3Rpb24gYWRkR2V0SG9va0lmKCBjb25kaXRpb25GbiwgaG9va0ZuICkge1xuXG5cdC8vIERlZmluZSB0aGUgaG9vaywgd2UnbGwgY2hlY2sgb24gdGhlIGZpcnN0IHJ1biBpZiBpdCdzIHJlYWxseSBuZWVkZWQuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggY29uZGl0aW9uRm4oKSApIHtcblxuXHRcdFx0XHQvLyBIb29rIG5vdCBuZWVkZWQgKG9yIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBpdCBkdWVcblx0XHRcdFx0Ly8gdG8gbWlzc2luZyBkZXBlbmRlbmN5KSwgcmVtb3ZlIGl0LlxuXHRcdFx0XHRkZWxldGUgdGhpcy5nZXQ7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSG9vayBuZWVkZWQ7IHJlZGVmaW5lIGl0IHNvIHRoYXQgdGhlIHN1cHBvcnQgdGVzdCBpcyBub3QgZXhlY3V0ZWQgYWdhaW4uXG5cdFx0XHRyZXR1cm4gKCB0aGlzLmdldCA9IGhvb2tGbiApLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9XG5cdH07XG59XG5cblxudmFyXG5cblx0Ly8gU3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZVxuXHQvLyBleGNlcHQgXCJ0YWJsZVwiLCBcInRhYmxlLWNlbGxcIiwgb3IgXCJ0YWJsZS1jYXB0aW9uXCJcblx0Ly8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5XG5cdHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxcblxuXHRjc3NTaG93ID0geyBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLCB2aXNpYmlsaXR5OiBcImhpZGRlblwiLCBkaXNwbGF5OiBcImJsb2NrXCIgfSxcblx0Y3NzTm9ybWFsVHJhbnNmb3JtID0ge1xuXHRcdGxldHRlclNwYWNpbmc6IFwiMFwiLFxuXHRcdGZvbnRXZWlnaHQ6IFwiNDAwXCJcblx0fSxcblxuXHRjc3NQcmVmaXhlcyA9IFsgXCJXZWJraXRcIiwgXCJPXCIsIFwiTW96XCIsIFwibXNcIiBdLFxuXHRlbXB0eVN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLnN0eWxlO1xuXG4vLyBSZXR1cm4gYSBjc3MgcHJvcGVydHkgbWFwcGVkIHRvIGEgcG90ZW50aWFsbHkgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5XG5mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHtcblxuXHQvLyBTaG9ydGN1dCBmb3IgbmFtZXMgdGhhdCBhcmUgbm90IHZlbmRvciBwcmVmaXhlZFxuXHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRyZXR1cm4gbmFtZTtcblx0fVxuXG5cdC8vIENoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXNcblx0dmFyIGNhcE5hbWUgPSBuYW1lWyAwIF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoIDEgKSxcblx0XHRpID0gY3NzUHJlZml4ZXMubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdG5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTtcblx0XHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRcdHJldHVybiBuYW1lO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICkge1xuXG5cdC8vIEFueSByZWxhdGl2ZSAoKy8tKSB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW5cblx0Ly8gbm9ybWFsaXplZCBhdCB0aGlzIHBvaW50XG5cdHZhciBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApO1xuXHRyZXR1cm4gbWF0Y2hlcyA/XG5cblx0XHQvLyBHdWFyZCBhZ2FpbnN0IHVuZGVmaW5lZCBcInN1YnRyYWN0XCIsIGUuZy4sIHdoZW4gdXNlZCBhcyBpbiBjc3NIb29rc1xuXHRcdE1hdGgubWF4KCAwLCBtYXRjaGVzWyAyIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgOlxuXHRcdHZhbHVlO1xufVxuXG5mdW5jdGlvbiBhdWdtZW50V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEsIGlzQm9yZGVyQm94LCBzdHlsZXMgKSB7XG5cdHZhciBpID0gZXh0cmEgPT09ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSA/XG5cblx0XHQvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJpZ2h0IG1lYXN1cmVtZW50LCBhdm9pZCBhdWdtZW50YXRpb25cblx0XHQ0IDpcblxuXHRcdC8vIE90aGVyd2lzZSBpbml0aWFsaXplIGZvciBob3Jpem9udGFsIG9yIHZlcnRpY2FsIHByb3BlcnRpZXNcblx0XHRuYW1lID09PSBcIndpZHRoXCIgPyAxIDogMCxcblxuXHRcdHZhbCA9IDA7XG5cblx0Zm9yICggOyBpIDwgNDsgaSArPSAyICkge1xuXG5cdFx0Ly8gQm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luLCBzbyBhZGQgaXQgaWYgd2Ugd2FudCBpdFxuXHRcdGlmICggZXh0cmEgPT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHR2YWwgKz0galF1ZXJ5LmNzcyggZWxlbSwgZXh0cmEgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0JvcmRlckJveCApIHtcblxuXHRcdFx0Ly8gYm9yZGVyLWJveCBpbmNsdWRlcyBwYWRkaW5nLCBzbyByZW1vdmUgaXQgaWYgd2Ugd2FudCBjb250ZW50XG5cdFx0XHRpZiAoIGV4dHJhID09PSBcImNvbnRlbnRcIiApIHtcblx0XHRcdFx0dmFsIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBib3JkZXIgbm9yIG1hcmdpbiwgc28gcmVtb3ZlIGJvcmRlclxuXHRcdFx0aWYgKCBleHRyYSAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdFx0dmFsIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgY29udGVudCwgc28gYWRkIHBhZGRpbmdcblx0XHRcdHZhbCArPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gQXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgY29udGVudCBub3IgcGFkZGluZywgc28gYWRkIGJvcmRlclxuXHRcdFx0aWYgKCBleHRyYSAhPT0gXCJwYWRkaW5nXCIgKSB7XG5cdFx0XHRcdHZhbCArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB2YWw7XG59XG5cbmZ1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICkge1xuXG5cdC8vIFN0YXJ0IHdpdGggb2Zmc2V0IHByb3BlcnR5LCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIHRoZSBib3JkZXItYm94IHZhbHVlXG5cdHZhciB2YWx1ZUlzQm9yZGVyQm94ID0gdHJ1ZSxcblx0XHR2YWwgPSBuYW1lID09PSBcIndpZHRoXCIgPyBlbGVtLm9mZnNldFdpZHRoIDogZWxlbS5vZmZzZXRIZWlnaHQsXG5cdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cdFx0aXNCb3JkZXJCb3ggPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiO1xuXG5cdC8vIFNvbWUgbm9uLWh0bWwgZWxlbWVudHMgcmV0dXJuIHVuZGVmaW5lZCBmb3Igb2Zmc2V0V2lkdGgsIHNvIGNoZWNrIGZvciBudWxsL3VuZGVmaW5lZFxuXHQvLyBzdmcgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02NDkyODVcblx0Ly8gTWF0aE1MIC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkxNjY4XG5cdGlmICggdmFsIDw9IDAgfHwgdmFsID09IG51bGwgKSB7XG5cblx0XHQvLyBGYWxsIGJhY2sgdG8gY29tcHV0ZWQgdGhlbiB1bmNvbXB1dGVkIGNzcyBpZiBuZWNlc3Nhcnlcblx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApO1xuXHRcdGlmICggdmFsIDwgMCB8fCB2YWwgPT0gbnVsbCApIHtcblx0XHRcdHZhbCA9IGVsZW0uc3R5bGVbIG5hbWUgXTtcblx0XHR9XG5cblx0XHQvLyBDb21wdXRlZCB1bml0IGlzIG5vdCBwaXhlbHMuIFN0b3AgaGVyZSBhbmQgcmV0dXJuLlxuXHRcdGlmICggcm51bW5vbnB4LnRlc3QoIHZhbCApICkge1xuXHRcdFx0cmV0dXJuIHZhbDtcblx0XHR9XG5cblx0XHQvLyBDaGVjayBmb3Igc3R5bGUgaW4gY2FzZSBhIGJyb3dzZXIgd2hpY2ggcmV0dXJucyB1bnJlbGlhYmxlIHZhbHVlc1xuXHRcdC8vIGZvciBnZXRDb21wdXRlZFN0eWxlIHNpbGVudGx5IGZhbGxzIGJhY2sgdG8gdGhlIHJlbGlhYmxlIGVsZW0uc3R5bGVcblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gaXNCb3JkZXJCb3ggJiZcblx0XHRcdCggc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpIHx8IHZhbCA9PT0gZWxlbS5zdHlsZVsgbmFtZSBdICk7XG5cblx0XHQvLyBOb3JtYWxpemUgXCJcIiwgYXV0bywgYW5kIHByZXBhcmUgZm9yIGV4dHJhXG5cdFx0dmFsID0gcGFyc2VGbG9hdCggdmFsICkgfHwgMDtcblx0fVxuXG5cdC8vIFVzZSB0aGUgYWN0aXZlIGJveC1zaXppbmcgbW9kZWwgdG8gYWRkL3N1YnRyYWN0IGlycmVsZXZhbnQgc3R5bGVzXG5cdHJldHVybiAoIHZhbCArXG5cdFx0YXVnbWVudFdpZHRoT3JIZWlnaHQoXG5cdFx0XHRlbGVtLFxuXHRcdFx0bmFtZSxcblx0XHRcdGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSxcblx0XHRcdHZhbHVlSXNCb3JkZXJCb3gsXG5cdFx0XHRzdHlsZXNcblx0XHQpXG5cdCkgKyBcInB4XCI7XG59XG5cbmZ1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHtcblx0dmFyIGRpc3BsYXksIGVsZW0sIGhpZGRlbixcblx0XHR2YWx1ZXMgPSBbXSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdO1xuXHRcdGlmICggIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHR2YWx1ZXNbIGluZGV4IF0gPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwib2xkZGlzcGxheVwiICk7XG5cdFx0ZGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheTtcblx0XHRpZiAoIHNob3cgKSB7XG5cblx0XHRcdC8vIFJlc2V0IHRoZSBpbmxpbmUgZGlzcGxheSBvZiB0aGlzIGVsZW1lbnQgdG8gbGVhcm4gaWYgaXQgaXNcblx0XHRcdC8vIGJlaW5nIGhpZGRlbiBieSBjYXNjYWRlZCBydWxlcyBvciBub3Rcblx0XHRcdGlmICggIXZhbHVlc1sgaW5kZXggXSAmJiBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IGVsZW1lbnRzIHdoaWNoIGhhdmUgYmVlbiBvdmVycmlkZGVuIHdpdGggZGlzcGxheTogbm9uZVxuXHRcdFx0Ly8gaW4gYSBzdHlsZXNoZWV0IHRvIHdoYXRldmVyIHRoZSBkZWZhdWx0IGJyb3dzZXIgc3R5bGUgaXNcblx0XHRcdC8vIGZvciBzdWNoIGFuIGVsZW1lbnRcblx0XHRcdGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmIGlzSGlkZGVuKCBlbGVtICkgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmFjY2Vzcyhcblx0XHRcdFx0XHRlbGVtLFxuXHRcdFx0XHRcdFwib2xkZGlzcGxheVwiLFxuXHRcdFx0XHRcdGRlZmF1bHREaXNwbGF5KCBlbGVtLm5vZGVOYW1lIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aGlkZGVuID0gaXNIaWRkZW4oIGVsZW0gKTtcblxuXHRcdFx0aWYgKCBkaXNwbGF5ICE9PSBcIm5vbmVcIiB8fCAhaGlkZGVuICkge1xuXHRcdFx0XHRkYXRhUHJpdi5zZXQoXG5cdFx0XHRcdFx0ZWxlbSxcblx0XHRcdFx0XHRcIm9sZGRpc3BsYXlcIixcblx0XHRcdFx0XHRoaWRkZW4gPyBkaXNwbGF5IDogalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFNldCB0aGUgZGlzcGxheSBvZiBtb3N0IG9mIHRoZSBlbGVtZW50cyBpbiBhIHNlY29uZCBsb29wXG5cdC8vIHRvIGF2b2lkIHRoZSBjb25zdGFudCByZWZsb3dcblx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRlbGVtID0gZWxlbWVudHNbIGluZGV4IF07XG5cdFx0aWYgKCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRpZiAoICFzaG93IHx8IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIgfHwgZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICkge1xuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID0gc2hvdyA/IHZhbHVlc1sgaW5kZXggXSB8fCBcIlwiIDogXCJub25lXCI7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRzO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQWRkIGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5nIHRoZSBkZWZhdWx0XG5cdC8vIGJlaGF2aW9yIG9mIGdldHRpbmcgYW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0eVxuXHRjc3NIb29rczoge1xuXHRcdG9wYWNpdHk6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdFx0Ly8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHlcblx0XHRcdFx0XHR2YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCBcIm9wYWNpdHlcIiApO1xuXHRcdFx0XHRcdHJldHVybiByZXQgPT09IFwiXCIgPyBcIjFcIiA6IHJldDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvLyBEb24ndCBhdXRvbWF0aWNhbGx5IGFkZCBcInB4XCIgdG8gdGhlc2UgcG9zc2libHktdW5pdGxlc3MgcHJvcGVydGllc1xuXHRjc3NOdW1iZXI6IHtcblx0XHRcImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50XCI6IHRydWUsXG5cdFx0XCJjb2x1bW5Db3VudFwiOiB0cnVlLFxuXHRcdFwiZmlsbE9wYWNpdHlcIjogdHJ1ZSxcblx0XHRcImZsZXhHcm93XCI6IHRydWUsXG5cdFx0XCJmbGV4U2hyaW5rXCI6IHRydWUsXG5cdFx0XCJmb250V2VpZ2h0XCI6IHRydWUsXG5cdFx0XCJsaW5lSGVpZ2h0XCI6IHRydWUsXG5cdFx0XCJvcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJvcmRlclwiOiB0cnVlLFxuXHRcdFwib3JwaGFuc1wiOiB0cnVlLFxuXHRcdFwid2lkb3dzXCI6IHRydWUsXG5cdFx0XCJ6SW5kZXhcIjogdHJ1ZSxcblx0XHRcInpvb21cIjogdHJ1ZVxuXHR9LFxuXG5cdC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmVcblx0Ly8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZVxuXHRjc3NQcm9wczoge1xuXHRcdFwiZmxvYXRcIjogXCJjc3NGbG9hdFwiXG5cdH0sXG5cblx0Ly8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3BlcnR5IG9uIGEgRE9NIE5vZGVcblx0c3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7XG5cblx0XHQvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWVcblx0XHR2YXIgcmV0LCB0eXBlLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdFx0bmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSB8fFxuXHRcdFx0KCBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggb3JpZ05hbWUgKSB8fCBvcmlnTmFtZSApO1xuXG5cdFx0Ly8gR2V0cyBob29rIGZvciB0aGUgcHJlZml4ZWQgdmVyc2lvbiwgdGhlbiB1bnByZWZpeGVkIHZlcnNpb25cblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcblxuXHRcdC8vIENoZWNrIGlmIHdlJ3JlIHNldHRpbmcgYSB2YWx1ZVxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHR5cGUgPSB0eXBlb2YgdmFsdWU7XG5cblx0XHRcdC8vIENvbnZlcnQgXCIrPVwiIG9yIFwiLT1cIiB0byByZWxhdGl2ZSBudW1iZXJzICgjNzM0NSlcblx0XHRcdGlmICggdHlwZSA9PT0gXCJzdHJpbmdcIiAmJiAoIHJldCA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmIHJldFsgMSBdICkge1xuXHRcdFx0XHR2YWx1ZSA9IGFkanVzdENTUyggZWxlbSwgbmFtZSwgcmV0ICk7XG5cblx0XHRcdFx0Ly8gRml4ZXMgYnVnICM5MjM3XG5cdFx0XHRcdHR5cGUgPSBcIm51bWJlclwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCBudWxsIGFuZCBOYU4gdmFsdWVzIGFyZW4ndCBzZXQgKCM3MTE2KVxuXHRcdFx0aWYgKCB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlICE9PSB2YWx1ZSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIG51bWJlciB3YXMgcGFzc2VkIGluLCBhZGQgdGhlIHVuaXQgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJvcGVydGllcylcblx0XHRcdGlmICggdHlwZSA9PT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0dmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU5LTExK1xuXHRcdFx0Ly8gYmFja2dyb3VuZC0qIHByb3BzIGFmZmVjdCBvcmlnaW5hbCBjbG9uZSdzIHZhbHVlc1xuXHRcdFx0aWYgKCAhc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgJiYgdmFsdWUgPT09IFwiXCIgJiYgbmFtZS5pbmRleE9mKCBcImJhY2tncm91bmRcIiApID09PSAwICkge1xuXHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gXCJpbmhlcml0XCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZVxuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8XG5cdFx0XHRcdCggdmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgbm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE90aGVyd2lzZSBqdXN0IGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0XG5cdFx0XHRyZXR1cm4gc3R5bGVbIG5hbWUgXTtcblx0XHR9XG5cdH0sXG5cblx0Y3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZXh0cmEsIHN0eWxlcyApIHtcblx0XHR2YXIgdmFsLCBudW0sIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWVcblx0XHRuYW1lID0galF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdIHx8XG5cdFx0XHQoIGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBvcmlnTmFtZSApIHx8IG9yaWdOYW1lICk7XG5cblx0XHQvLyBUcnkgcHJlZml4ZWQgbmFtZSBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCBuYW1lXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdFxuXHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgXCJub3JtYWxcIiB0byBjb21wdXRlZCB2YWx1ZVxuXHRcdGlmICggdmFsID09PSBcIm5vcm1hbFwiICYmIG5hbWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtICkge1xuXHRcdFx0dmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBudW1lcmljIGlmIGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29rcyBudW1lcmljXG5cdFx0aWYgKCBleHRyYSA9PT0gXCJcIiB8fCBleHRyYSApIHtcblx0XHRcdG51bSA9IHBhcnNlRmxvYXQoIHZhbCApO1xuXHRcdFx0cmV0dXJuIGV4dHJhID09PSB0cnVlIHx8IGlzRmluaXRlKCBudW0gKSA/IG51bSB8fCAwIDogdmFsO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiaGVpZ2h0XCIsIFwid2lkdGhcIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJhICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHQvLyBDZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZvIGlmIHdlIGludmlzaWJseSBzaG93IHRoZW1cblx0XHRcdFx0Ly8gYnV0IGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlzcGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXRcblx0XHRcdFx0cmV0dXJuIHJkaXNwbGF5c3dhcC50ZXN0KCBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApICkgJiZcblx0XHRcdFx0XHRlbGVtLm9mZnNldFdpZHRoID09PSAwID9cblx0XHRcdFx0XHRcdHN3YXAoIGVsZW0sIGNzc1Nob3csIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKTtcblx0XHRcdFx0XHRcdH0gKSA6XG5cdFx0XHRcdFx0XHRnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7XG5cdFx0XHR2YXIgbWF0Y2hlcyxcblx0XHRcdFx0c3R5bGVzID0gZXh0cmEgJiYgZ2V0U3R5bGVzKCBlbGVtICksXG5cdFx0XHRcdHN1YnRyYWN0ID0gZXh0cmEgJiYgYXVnbWVudFdpZHRoT3JIZWlnaHQoXG5cdFx0XHRcdFx0ZWxlbSxcblx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdGV4dHJhLFxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0XHRcdFx0c3R5bGVzXG5cdFx0XHRcdCk7XG5cblx0XHRcdC8vIENvbnZlcnQgdG8gcGl4ZWxzIGlmIHZhbHVlIGFkanVzdG1lbnQgaXMgbmVlZGVkXG5cdFx0XHRpZiAoIHN1YnRyYWN0ICYmICggbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmXG5cdFx0XHRcdCggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApICE9PSBcInB4XCIgKSB7XG5cblx0XHRcdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApO1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmNzc0hvb2tzLm1hcmdpbkxlZnQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5MZWZ0LFxuXHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdHJldHVybiAoIHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIgKSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtXG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgeyBtYXJnaW5MZWZ0OiAwIH0sIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblx0XHRcdFx0XHR9IClcblx0XHRcdFx0KSArIFwicHhcIjtcblx0XHR9XG5cdH1cbik7XG5cbi8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zXG5qUXVlcnkuY3NzSG9va3MubWFyZ2luUmlnaHQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodCxcblx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4gc3dhcCggZWxlbSwgeyBcImRpc3BsYXlcIjogXCJpbmxpbmUtYmxvY2tcIiB9LFxuXHRcdFx0XHRjdXJDU1MsIFsgZWxlbSwgXCJtYXJnaW5SaWdodFwiIF0gKTtcblx0XHR9XG5cdH1cbik7XG5cbi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXNcbmpRdWVyeS5lYWNoKCB7XG5cdG1hcmdpbjogXCJcIixcblx0cGFkZGluZzogXCJcIixcblx0Ym9yZGVyOiBcIldpZHRoXCJcbn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBpID0gMCxcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcblxuXHRcdFx0XHQvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmdcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdCggXCIgXCIgKSA6IFsgdmFsdWUgXTtcblxuXHRcdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xuXHRcdFx0XHRleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9XG5cdFx0XHRcdFx0cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXhwYW5kZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICggIXJtYXJnaW4udGVzdCggcHJlZml4ICkgKSB7XG5cdFx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJlcjtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGNzczogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdHZhciBzdHlsZXMsIGxlbixcblx0XHRcdFx0bWFwID0ge30sXG5cdFx0XHRcdGkgPSAwO1xuXG5cdFx0XHRpZiAoIGpRdWVyeS5pc0FycmF5KCBuYW1lICkgKSB7XG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xuXHRcdFx0XHRsZW4gPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHR9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblx0c2hvdzogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzLCB0cnVlICk7XG5cdH0sXG5cdGhpZGU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcyApO1xuXHR9LFxuXHR0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHtcblx0XHRpZiAoIHR5cGVvZiBzdGF0ZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGUgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBpc0hpZGRlbiggdGhpcyApICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5zaG93KCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxuZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICkge1xuXHRyZXR1cm4gbmV3IFR3ZWVuLnByb3RvdHlwZS5pbml0KCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApO1xufVxualF1ZXJ5LlR3ZWVuID0gVHdlZW47XG5cblR3ZWVuLnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IFR3ZWVuLFxuXHRpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcsIHVuaXQgKSB7XG5cdFx0dGhpcy5lbGVtID0gZWxlbTtcblx0XHR0aGlzLnByb3AgPSBwcm9wO1xuXHRcdHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHQ7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLnN0YXJ0ID0gdGhpcy5ub3cgPSB0aGlzLmN1cigpO1xuXHRcdHRoaXMuZW5kID0gZW5kO1xuXHRcdHRoaXMudW5pdCA9IHVuaXQgfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICk7XG5cdH0sXG5cdGN1cjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcblxuXHRcdHJldHVybiBob29rcyAmJiBob29rcy5nZXQgP1xuXHRcdFx0aG9va3MuZ2V0KCB0aGlzICkgOlxuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyApO1xuXHR9LFxuXHRydW46IGZ1bmN0aW9uKCBwZXJjZW50ICkge1xuXHRcdHZhciBlYXNlZCxcblx0XHRcdGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmR1cmF0aW9uICkge1xuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNpbmdbIHRoaXMuZWFzaW5nIF0oXG5cdFx0XHRcdHBlcmNlbnQsIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIHBlcmNlbnQsIDAsIDEsIHRoaXMub3B0aW9ucy5kdXJhdGlvblxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IHBlcmNlbnQ7XG5cdFx0fVxuXHRcdHRoaXMubm93ID0gKCB0aGlzLmVuZCAtIHRoaXMuc3RhcnQgKSAqIGVhc2VkICsgdGhpcy5zdGFydDtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLnN0ZXAgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMubm93LCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBob29rcy5zZXQgKSB7XG5cdFx0XHRob29rcy5zZXQoIHRoaXMgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyApO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufTtcblxuVHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlID0gVHdlZW4ucHJvdG90eXBlO1xuXG5Ud2Vlbi5wcm9wSG9va3MgPSB7XG5cdF9kZWZhdWx0OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0XHR2YXIgcmVzdWx0O1xuXG5cdFx0XHQvLyBVc2UgYSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBkaXJlY3RseSB3aGVuIGl0IGlzIG5vdCBhIERPTSBlbGVtZW50LFxuXHRcdFx0Ly8gb3Igd2hlbiB0aGVyZSBpcyBubyBtYXRjaGluZyBzdHlsZSBwcm9wZXJ0eSB0aGF0IGV4aXN0cy5cblx0XHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAhPT0gMSB8fFxuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gIT0gbnVsbCAmJiB0d2Vlbi5lbGVtLnN0eWxlWyB0d2Vlbi5wcm9wIF0gPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUGFzc2luZyBhbiBlbXB0eSBzdHJpbmcgYXMgYSAzcmQgcGFyYW1ldGVyIHRvIC5jc3Mgd2lsbCBhdXRvbWF0aWNhbGx5XG5cdFx0XHQvLyBhdHRlbXB0IGEgcGFyc2VGbG9hdCBhbmQgZmFsbGJhY2sgdG8gYSBzdHJpbmcgaWYgdGhlIHBhcnNlIGZhaWxzLlxuXHRcdFx0Ly8gU2ltcGxlIHZhbHVlcyBzdWNoIGFzIFwiMTBweFwiIGFyZSBwYXJzZWQgdG8gRmxvYXQ7XG5cdFx0XHQvLyBjb21wbGV4IHZhbHVlcyBzdWNoIGFzIFwicm90YXRlKDFyYWQpXCIgYXJlIHJldHVybmVkIGFzLWlzLlxuXHRcdFx0cmVzdWx0ID0galF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgXCJcIiApO1xuXG5cdFx0XHQvLyBFbXB0eSBzdHJpbmdzLCBudWxsLCB1bmRlZmluZWQgYW5kIFwiYXV0b1wiIGFyZSBjb252ZXJ0ZWQgdG8gMC5cblx0XHRcdHJldHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gXCJhdXRvXCIgPyAwIDogcmVzdWx0O1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cblx0XHRcdC8vIFVzZSBzdGVwIGhvb2sgZm9yIGJhY2sgY29tcGF0LlxuXHRcdFx0Ly8gVXNlIGNzc0hvb2sgaWYgaXRzIHRoZXJlLlxuXHRcdFx0Ly8gVXNlIC5zdHlsZSBpZiBhdmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZS5cblx0XHRcdGlmICggalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSApIHtcblx0XHRcdFx0alF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSggdHdlZW4gKTtcblx0XHRcdH0gZWxzZSBpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCB0d2Vlbi5lbGVtLnN0eWxlWyBqUXVlcnkuY3NzUHJvcHNbIHR3ZWVuLnByb3AgXSBdICE9IG51bGwgfHxcblx0XHRcdFx0XHRqUXVlcnkuY3NzSG9va3NbIHR3ZWVuLnByb3AgXSApICkge1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIFN1cHBvcnQ6IElFOVxuLy8gUGFuaWMgYmFzZWQgYXBwcm9hY2ggdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29ubmVjdGVkIG5vZGVzXG5Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xsVG9wID0gVHdlZW4ucHJvcEhvb2tzLnNjcm9sbExlZnQgPSB7XG5cdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAmJiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZWFzaW5nID0ge1xuXHRsaW5lYXI6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiBwO1xuXHR9LFxuXHRzd2luZzogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIDAuNSAtIE1hdGguY29zKCBwICogTWF0aC5QSSApIC8gMjtcblx0fSxcblx0X2RlZmF1bHQ6IFwic3dpbmdcIlxufTtcblxualF1ZXJ5LmZ4ID0gVHdlZW4ucHJvdG90eXBlLmluaXQ7XG5cbi8vIEJhY2sgQ29tcGF0IDwxLjggZXh0ZW5zaW9uIHBvaW50XG5qUXVlcnkuZnguc3RlcCA9IHt9O1xuXG5cblxuXG52YXJcblx0ZnhOb3csIHRpbWVySWQsXG5cdHJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLFxuXHRycnVuID0gL3F1ZXVlSG9va3MkLztcblxuLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseVxuZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRmeE5vdyA9IHVuZGVmaW5lZDtcblx0fSApO1xuXHRyZXR1cm4gKCBmeE5vdyA9IGpRdWVyeS5ub3coKSApO1xufVxuXG4vLyBHZW5lcmF0ZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBhIHN0YW5kYXJkIGFuaW1hdGlvblxuZnVuY3Rpb24gZ2VuRngoIHR5cGUsIGluY2x1ZGVXaWR0aCApIHtcblx0dmFyIHdoaWNoLFxuXHRcdGkgPSAwLFxuXHRcdGF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfTtcblxuXHQvLyBJZiB3ZSBpbmNsdWRlIHdpZHRoLCBzdGVwIHZhbHVlIGlzIDEgdG8gZG8gYWxsIGNzc0V4cGFuZCB2YWx1ZXMsXG5cdC8vIG90aGVyd2lzZSBzdGVwIHZhbHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0XG5cdGluY2x1ZGVXaWR0aCA9IGluY2x1ZGVXaWR0aCA/IDEgOiAwO1xuXHRmb3IgKCA7IGkgPCA0IDsgaSArPSAyIC0gaW5jbHVkZVdpZHRoICkge1xuXHRcdHdoaWNoID0gY3NzRXhwYW5kWyBpIF07XG5cdFx0YXR0cnNbIFwibWFyZ2luXCIgKyB3aGljaCBdID0gYXR0cnNbIFwicGFkZGluZ1wiICsgd2hpY2ggXSA9IHR5cGU7XG5cdH1cblxuXHRpZiAoIGluY2x1ZGVXaWR0aCApIHtcblx0XHRhdHRycy5vcGFjaXR5ID0gYXR0cnMud2lkdGggPSB0eXBlO1xuXHR9XG5cblx0cmV0dXJuIGF0dHJzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHByb3AsIGFuaW1hdGlvbiApIHtcblx0dmFyIHR3ZWVuLFxuXHRcdGNvbGxlY3Rpb24gPSAoIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdlZW5lcnNbIFwiKlwiIF0gKSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSApIHtcblxuXHRcdFx0Ly8gV2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHlcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7XG5cdC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cblx0dmFyIHByb3AsIHZhbHVlLCB0b2dnbGUsIHR3ZWVuLCBob29rcywgb2xkZmlyZSwgZGlzcGxheSwgY2hlY2tEaXNwbGF5LFxuXHRcdGFuaW0gPSB0aGlzLFxuXHRcdG9yaWcgPSB7fSxcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGUsXG5cdFx0aGlkZGVuID0gZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbiggZWxlbSApLFxuXHRcdGRhdGFTaG93ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cblx0Ly8gSGFuZGxlIHF1ZXVlOiBmYWxzZSBwcm9taXNlc1xuXHRpZiAoICFvcHRzLnF1ZXVlICkge1xuXHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCBcImZ4XCIgKTtcblx0XHRpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7XG5cdFx0XHRob29rcy51bnF1ZXVlZCA9IDA7XG5cdFx0XHRvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7XG5cdFx0XHRcdFx0b2xkZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRob29rcy51bnF1ZXVlZCsrO1xuXG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbnN1cmUgdGhlIGNvbXBsZXRlIGhhbmRsZXIgaXMgY2FsbGVkIGJlZm9yZSB0aGlzIGNvbXBsZXRlc1xuXHRcdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRob29rcy51bnF1ZXVlZC0tO1xuXHRcdFx0XHRpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sIFwiZnhcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBIZWlnaHQvd2lkdGggb3ZlcmZsb3cgcGFzc1xuXHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBcImhlaWdodFwiIGluIHByb3BzIHx8IFwid2lkdGhcIiBpbiBwcm9wcyApICkge1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbm90aGluZyBzbmVha3Mgb3V0XG5cdFx0Ly8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRTktMTAgZG8gbm90XG5cdFx0Ly8gY2hhbmdlIHRoZSBvdmVyZmxvdyBhdHRyaWJ1dGUgd2hlbiBvdmVyZmxvd1ggYW5kXG5cdFx0Ly8gb3ZlcmZsb3dZIGFyZSBzZXQgdG8gdGhlIHNhbWUgdmFsdWVcblx0XHRvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTtcblxuXHRcdC8vIFNldCBkaXNwbGF5IHByb3BlcnR5IHRvIGlubGluZS1ibG9jayBmb3IgaGVpZ2h0L3dpZHRoXG5cdFx0Ly8gYW5pbWF0aW9ucyBvbiBpbmxpbmUgZWxlbWVudHMgdGhhdCBhcmUgaGF2aW5nIHdpZHRoL2hlaWdodCBhbmltYXRlZFxuXHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXG5cdFx0Ly8gVGVzdCBkZWZhdWx0IGRpc3BsYXkgaWYgZGlzcGxheSBpcyBjdXJyZW50bHkgXCJub25lXCJcblx0XHRjaGVja0Rpc3BsYXkgPSBkaXNwbGF5ID09PSBcIm5vbmVcIiA/XG5cdFx0XHRkYXRhUHJpdi5nZXQoIGVsZW0sIFwib2xkZGlzcGxheVwiICkgfHwgZGVmYXVsdERpc3BsYXkoIGVsZW0ubm9kZU5hbWUgKSA6IGRpc3BsYXk7XG5cblx0XHRpZiAoIGNoZWNrRGlzcGxheSA9PT0gXCJpbmxpbmVcIiAmJiBqUXVlcnkuY3NzKCBlbGVtLCBcImZsb2F0XCIgKSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRzdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcblx0XHR9XG5cdH1cblxuXHRpZiAoIG9wdHMub3ZlcmZsb3cgKSB7XG5cdFx0c3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIHNob3cvaGlkZSBwYXNzXG5cdGZvciAoIHByb3AgaW4gcHJvcHMgKSB7XG5cdFx0dmFsdWUgPSBwcm9wc1sgcHJvcCBdO1xuXHRcdGlmICggcmZ4dHlwZXMuZXhlYyggdmFsdWUgKSApIHtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgcHJvcCBdO1xuXHRcdFx0dG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSBcInRvZ2dsZVwiO1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gKCBoaWRkZW4gPyBcImhpZGVcIiA6IFwic2hvd1wiICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgZGF0YVNob3cgbGVmdCBvdmVyIGZyb20gYSBzdG9wcGVkIGhpZGUgb3Igc2hvd1xuXHRcdFx0XHQvLyBhbmQgd2UgYXJlIGdvaW5nIHRvIHByb2NlZWQgd2l0aCBzaG93LCB3ZSBzaG91bGQgcHJldGVuZCB0byBiZSBoaWRkZW5cblx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gXCJzaG93XCIgJiYgZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IHRydWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG9yaWdbIHByb3AgXSA9IGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wICk7XG5cblx0XHQvLyBBbnkgbm9uLWZ4IHZhbHVlIHN0b3BzIHVzIGZyb20gcmVzdG9yaW5nIHRoZSBvcmlnaW5hbCBkaXNwbGF5IHZhbHVlXG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpc3BsYXkgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIG9yaWcgKSApIHtcblx0XHRpZiAoIGRhdGFTaG93ICkge1xuXHRcdFx0aWYgKCBcImhpZGRlblwiIGluIGRhdGFTaG93ICkge1xuXHRcdFx0XHRoaWRkZW4gPSBkYXRhU2hvdy5oaWRkZW47XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRhdGFTaG93ID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBcImZ4c2hvd1wiLCB7fSApO1xuXHRcdH1cblxuXHRcdC8vIFN0b3JlIHN0YXRlIGlmIGl0cyB0b2dnbGUgLSBlbmFibGVzIC5zdG9wKCkudG9nZ2xlKCkgdG8gXCJyZXZlcnNlXCJcblx0XHRpZiAoIHRvZ2dsZSApIHtcblx0XHRcdGRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47XG5cdFx0fVxuXHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0alF1ZXJ5KCBlbGVtICkuc2hvdygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkoIGVsZW0gKS5oaWRlKCk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgcHJvcDtcblxuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cdFx0XHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHRcdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblx0XHRcdHR3ZWVuID0gY3JlYXRlVHdlZW4oIGhpZGRlbiA/IGRhdGFTaG93WyBwcm9wIF0gOiAwLCBwcm9wLCBhbmltICk7XG5cblx0XHRcdGlmICggISggcHJvcCBpbiBkYXRhU2hvdyApICkge1xuXHRcdFx0XHRkYXRhU2hvd1sgcHJvcCBdID0gdHdlZW4uc3RhcnQ7XG5cdFx0XHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0XHRcdHR3ZWVuLmVuZCA9IHR3ZWVuLnN0YXJ0O1xuXHRcdFx0XHRcdHR3ZWVuLnN0YXJ0ID0gcHJvcCA9PT0gXCJ3aWR0aFwiIHx8IHByb3AgPT09IFwiaGVpZ2h0XCIgPyAxIDogMDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHQvLyBJZiB0aGlzIGlzIGEgbm9vcCBsaWtlIC5oaWRlKCkuaGlkZSgpLCByZXN0b3JlIGFuIG92ZXJ3cml0dGVuIGRpc3BsYXkgdmFsdWVcblx0fSBlbHNlIGlmICggKCBkaXNwbGF5ID09PSBcIm5vbmVcIiA/IGRlZmF1bHREaXNwbGF5KCBlbGVtLm5vZGVOYW1lICkgOiBkaXNwbGF5ICkgPT09IFwiaW5saW5lXCIgKSB7XG5cdFx0c3R5bGUuZGlzcGxheSA9IGRpc3BsYXk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7XG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XG5cblx0Ly8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xuXHRcdG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBpbmRleCApO1xuXHRcdGVhc2luZyA9IHNwZWNpYWxFYXNpbmdbIG5hbWUgXTtcblx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdO1xuXHRcdGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRlYXNpbmcgPSB2YWx1ZVsgMSBdO1xuXHRcdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyAwIF07XG5cdFx0fVxuXG5cdFx0aWYgKCBpbmRleCAhPT0gbmFtZSApIHtcblx0XHRcdHByb3BzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgaW5kZXggXTtcblx0XHR9XG5cblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdO1xuXHRcdGlmICggaG9va3MgJiYgXCJleHBhbmRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbHVlID0gaG9va3MuZXhwYW5kKCB2YWx1ZSApO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBuYW1lIF07XG5cblx0XHRcdC8vIE5vdCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b24ndCBvdmVyd3JpdGUgZXhpc3Rpbmcga2V5cy5cblx0XHRcdC8vIFJldXNpbmcgJ2luZGV4JyBiZWNhdXNlIHdlIGhhdmUgdGhlIGNvcnJlY3QgXCJuYW1lXCJcblx0XHRcdGZvciAoIGluZGV4IGluIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICEoIGluZGV4IGluIHByb3BzICkgKSB7XG5cdFx0XHRcdFx0cHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgaW5kZXggXTtcblx0XHRcdFx0XHRzcGVjaWFsRWFzaW5nWyBpbmRleCBdID0gZWFzaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVhc2luZztcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gQW5pbWF0aW9uKCBlbGVtLCBwcm9wZXJ0aWVzLCBvcHRpb25zICkge1xuXHR2YXIgcmVzdWx0LFxuXHRcdHN0b3BwZWQsXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzLmxlbmd0aCxcblx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIERvbid0IG1hdGNoIGVsZW0gaW4gdGhlIDphbmltYXRlZCBzZWxlY3RvclxuXHRcdFx0ZGVsZXRlIHRpY2suZWxlbTtcblx0XHR9ICksXG5cdFx0dGljayA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR2YXIgY3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0XHRyZW1haW5pbmcgPSBNYXRoLm1heCggMCwgYW5pbWF0aW9uLnN0YXJ0VGltZSArIGFuaW1hdGlvbi5kdXJhdGlvbiAtIGN1cnJlbnRUaW1lICksXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCAyLjNcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAoIzEyNDk3KVxuXHRcdFx0XHR0ZW1wID0gcmVtYWluaW5nIC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsXG5cdFx0XHRcdHBlcmNlbnQgPSAxIC0gdGVtcCxcblx0XHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0XHRsZW5ndGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDtcblxuXHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJjZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1haW5pbmcgXSApO1xuXG5cdFx0XHRpZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHtcblx0XHRcdFx0cmV0dXJuIHJlbWFpbmluZztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiBdICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSxcblx0XHRcdG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHtcblx0XHRcdFx0c3BlY2lhbEVhc2luZzoge30sXG5cdFx0XHRcdGVhc2luZzogalF1ZXJ5LmVhc2luZy5fZGVmYXVsdFxuXHRcdFx0fSwgb3B0aW9ucyApLFxuXHRcdFx0b3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxuXHRcdFx0b3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLFxuXHRcdFx0c3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXG5cdFx0XHR0d2VlbnM6IFtdLFxuXHRcdFx0Y3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQgKSB7XG5cdFx0XHRcdHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCxcblx0XHRcdFx0XHRcdGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0cy5lYXNpbmcgKTtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVucy5wdXNoKCB0d2VlbiApO1xuXHRcdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0XHR9LFxuXHRcdFx0c3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7XG5cdFx0XHRcdHZhciBpbmRleCA9IDAsXG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVuZCwgd2Ugd2FudCB0byBydW4gYWxsIHRoZSB0d2VlbnNcblx0XHRcdFx0XHQvLyBvdGhlcndpc2Ugd2Ugc2tpcCB0aGlzIHBhcnRcblx0XHRcdFx0XHRsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwO1xuXHRcdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3RvcHBlZCA9IHRydWU7XG5cdFx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkge1xuXHRcdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXNvbHZlIHdoZW4gd2UgcGxheWVkIHRoZSBsYXN0IGZyYW1lOyBvdGhlcndpc2UsIHJlamVjdFxuXHRcdFx0XHRpZiAoIGdvdG9FbmQgKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdH0gKSxcblx0XHRwcm9wcyA9IGFuaW1hdGlvbi5wcm9wcztcblxuXHRwcm9wRmlsdGVyKCBwcm9wcywgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZyApO1xuXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkge1xuXHRcdHJlc3VsdCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7XG5cdFx0aWYgKCByZXN1bHQgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXN1bHQuc3RvcCApICkge1xuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIGFuaW1hdGlvbi5lbGVtLCBhbmltYXRpb24ub3B0cy5xdWV1ZSApLnN0b3AgPVxuXHRcdFx0XHRcdGpRdWVyeS5wcm94eSggcmVzdWx0LnN0b3AsIHJlc3VsdCApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHRqUXVlcnkubWFwKCBwcm9wcywgY3JlYXRlVHdlZW4sIGFuaW1hdGlvbiApO1xuXG5cdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0ICkgKSB7XG5cdFx0YW5pbWF0aW9uLm9wdHMuc3RhcnQuY2FsbCggZWxlbSwgYW5pbWF0aW9uICk7XG5cdH1cblxuXHRqUXVlcnkuZngudGltZXIoXG5cdFx0alF1ZXJ5LmV4dGVuZCggdGljaywge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdGFuaW06IGFuaW1hdGlvbixcblx0XHRcdHF1ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1ZVxuXHRcdH0gKVxuXHQpO1xuXG5cdC8vIGF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zXG5cdHJldHVybiBhbmltYXRpb24ucHJvZ3Jlc3MoIGFuaW1hdGlvbi5vcHRzLnByb2dyZXNzIClcblx0XHQuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKVxuXHRcdC5mYWlsKCBhbmltYXRpb24ub3B0cy5mYWlsIClcblx0XHQuYWx3YXlzKCBhbmltYXRpb24ub3B0cy5hbHdheXMgKTtcbn1cblxualF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRlbmQoIEFuaW1hdGlvbiwge1xuXHR0d2VlbmVyczoge1xuXHRcdFwiKlwiOiBbIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHtcblx0XHRcdHZhciB0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4oIHByb3AsIHZhbHVlICk7XG5cdFx0XHRhZGp1c3RDU1MoIHR3ZWVuLmVsZW0sIHByb3AsIHJjc3NOdW0uZXhlYyggdmFsdWUgKSwgdHdlZW4gKTtcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9IF1cblx0fSxcblxuXHR0d2VlbmVyOiBmdW5jdGlvbiggcHJvcHMsIGNhbGxiYWNrICkge1xuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHByb3BzICkgKSB7XG5cdFx0XHRjYWxsYmFjayA9IHByb3BzO1xuXHRcdFx0cHJvcHMgPSBbIFwiKlwiIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3BzID0gcHJvcHMubWF0Y2goIHJub3R3aGl0ZSApO1xuXHRcdH1cblxuXHRcdHZhciBwcm9wLFxuXHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0bGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7XG5cdFx0XHRwcm9wID0gcHJvcHNbIGluZGV4IF07XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSA9IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH0sXG5cblx0cHJlZmlsdGVyczogWyBkZWZhdWx0UHJlZmlsdGVyIF0sXG5cblx0cHJlZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBlbmQgKSB7XG5cdFx0aWYgKCBwcmVwZW5kICkge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkge1xuXHR2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSBcIm9iamVjdFwiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkgOiB7XG5cdFx0Y29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHxcblx0XHRcdGpRdWVyeS5pc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLFxuXHRcdGR1cmF0aW9uOiBzcGVlZCxcblx0XHRlYXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgIWpRdWVyeS5pc0Z1bmN0aW9uKCBlYXNpbmcgKSAmJiBlYXNpbmdcblx0fTtcblxuXHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZngub2ZmID8gMCA6IHR5cGVvZiBvcHQuZHVyYXRpb24gPT09IFwibnVtYmVyXCIgP1xuXHRcdG9wdC5kdXJhdGlvbiA6IG9wdC5kdXJhdGlvbiBpbiBqUXVlcnkuZnguc3BlZWRzID9cblx0XHRcdGpRdWVyeS5meC5zcGVlZHNbIG9wdC5kdXJhdGlvbiBdIDogalF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVsdDtcblxuXHQvLyBOb3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiBcImZ4XCJcblx0aWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUgKSB7XG5cdFx0b3B0LnF1ZXVlID0gXCJmeFwiO1xuXHR9XG5cblx0Ly8gUXVldWVpbmdcblx0b3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTtcblxuXHRvcHQuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7XG5cdFx0XHRvcHQub2xkLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdC5xdWV1ZSApIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIG9wdDtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXG5cdFx0Ly8gU2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbiApLmNzcyggXCJvcGFjaXR5XCIsIDAgKS5zaG93KClcblxuXHRcdFx0Ly8gQW5pbWF0ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVkXG5cdFx0XHQuZW5kKCkuYW5pbWF0ZSggeyBvcGFjaXR5OiB0byB9LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9LFxuXHRhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGVtcHR5ID0galF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSxcblx0XHRcdG9wdGFsbCA9IGpRdWVyeS5zcGVlZCggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSxcblx0XHRcdGRvQW5pbWF0aW9uID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gT3BlcmF0ZSBvbiBhIGNvcHkgb2YgcHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5nIHdvbid0IGJlIGxvc3Rcblx0XHRcdFx0dmFyIGFuaW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApO1xuXG5cdFx0XHRcdC8vIEVtcHR5IGFuaW1hdGlvbnMsIG9yIGZpbmlzaGluZyByZXNvbHZlcyBpbW1lZGlhdGVseVxuXHRcdFx0XHRpZiAoIGVtcHR5IHx8IGRhdGFQcml2LmdldCggdGhpcywgXCJmaW5pc2hcIiApICkge1xuXHRcdFx0XHRcdGFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0ZG9BbmltYXRpb24uZmluaXNoID0gZG9BbmltYXRpb247XG5cblx0XHRyZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/XG5cdFx0XHR0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOlxuXHRcdFx0dGhpcy5xdWV1ZSggb3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiApO1xuXHR9LFxuXHRzdG9wOiBmdW5jdGlvbiggdHlwZSwgY2xlYXJRdWV1ZSwgZ290b0VuZCApIHtcblx0XHR2YXIgc3RvcFF1ZXVlID0gZnVuY3Rpb24oIGhvb2tzICkge1xuXHRcdFx0dmFyIHN0b3AgPSBob29rcy5zdG9wO1xuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRzdG9wKCBnb3RvRW5kICk7XG5cdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRnb3RvRW5kID0gY2xlYXJRdWV1ZTtcblx0XHRcdGNsZWFyUXVldWUgPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBjbGVhclF1ZXVlICYmIHR5cGUgIT09IGZhbHNlICkge1xuXHRcdFx0dGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZGVxdWV1ZSA9IHRydWUsXG5cdFx0XHRcdGluZGV4ID0gdHlwZSAhPSBudWxsICYmIHR5cGUgKyBcInF1ZXVlSG9va3NcIixcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApO1xuXG5cdFx0XHRpZiAoIGluZGV4ICkge1xuXHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICkge1xuXHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKCBpbmRleCBpbiBkYXRhICkge1xuXHRcdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0KCBpbmRleCApICkge1xuXHRcdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiZcblx0XHRcdFx0XHQoIHR5cGUgPT0gbnVsbCB8fCB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSApIHtcblxuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIGdvdG9FbmQgKTtcblx0XHRcdFx0XHRkZXF1ZXVlID0gZmFsc2U7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGFydCB0aGUgbmV4dCBpbiB0aGUgcXVldWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkLlxuXHRcdFx0Ly8gVGltZXJzIGN1cnJlbnRseSB3aWxsIGNhbGwgdGhlaXIgY29tcGxldGUgY2FsbGJhY2tzLCB3aGljaFxuXHRcdFx0Ly8gd2lsbCBkZXF1ZXVlIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kLlxuXHRcdFx0aWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblx0ZmluaXNoOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRpZiAoIHR5cGUgIT09IGZhbHNlICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpbmRleCxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApLFxuXHRcdFx0XHRxdWV1ZSA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlXCIgXSxcblx0XHRcdFx0aG9va3MgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgXSxcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0bGVuZ3RoID0gcXVldWUgPyBxdWV1ZS5sZW5ndGggOiAwO1xuXG5cdFx0XHQvLyBFbmFibGUgZmluaXNoaW5nIGZsYWcgb24gcHJpdmF0ZSBkYXRhXG5cdFx0XHRkYXRhLmZpbmlzaCA9IHRydWU7XG5cblx0XHRcdC8vIEVtcHR5IHRoZSBxdWV1ZSBmaXJzdFxuXHRcdFx0alF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBbXSApO1xuXG5cdFx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnN0b3AgKSB7XG5cdFx0XHRcdGhvb2tzLnN0b3AuY2FsbCggdGhpcywgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYWN0aXZlIGFuaW1hdGlvbnMsIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSB7XG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFuaW1hdGlvbnMgaW4gdGhlIG9sZCBxdWV1ZSBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGlmICggcXVldWVbIGluZGV4IF0gJiYgcXVldWVbIGluZGV4IF0uZmluaXNoICkge1xuXHRcdFx0XHRcdHF1ZXVlWyBpbmRleCBdLmZpbmlzaC5jYWxsKCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVHVybiBvZmYgZmluaXNoaW5nIGZsYWdcblx0XHRcdGRlbGV0ZSBkYXRhLmZpbmlzaDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJ0b2dnbGVcIiwgXCJzaG93XCIsIFwiaGlkZVwiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXHR2YXIgY3NzRm4gPSBqUXVlcnkuZm5bIG5hbWUgXTtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHNwZWVkID09IG51bGwgfHwgdHlwZW9mIHNwZWVkID09PSBcImJvb2xlYW5cIiA/XG5cdFx0XHRjc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOlxuXHRcdFx0dGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG4vLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zXG5qUXVlcnkuZWFjaCgge1xuXHRzbGlkZURvd246IGdlbkZ4KCBcInNob3dcIiApLFxuXHRzbGlkZVVwOiBnZW5GeCggXCJoaWRlXCIgKSxcblx0c2xpZGVUb2dnbGU6IGdlbkZ4KCBcInRvZ2dsZVwiICksXG5cdGZhZGVJbjogeyBvcGFjaXR5OiBcInNob3dcIiB9LFxuXHRmYWRlT3V0OiB7IG9wYWNpdHk6IFwiaGlkZVwiIH0sXG5cdGZhZGVUb2dnbGU6IHsgb3BhY2l0eTogXCJ0b2dnbGVcIiB9XG59LCBmdW5jdGlvbiggbmFtZSwgcHJvcHMgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLmFuaW1hdGUoIHByb3BzLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkudGltZXJzID0gW107XG5qUXVlcnkuZngudGljayA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdGltZXIsXG5cdFx0aSA9IDAsXG5cdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycztcblxuXHRmeE5vdyA9IGpRdWVyeS5ub3coKTtcblxuXHRmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7XG5cdFx0dGltZXIgPSB0aW1lcnNbIGkgXTtcblxuXHRcdC8vIENoZWNrcyB0aGUgdGltZXIgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcmVtb3ZlZFxuXHRcdGlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkge1xuXHRcdFx0dGltZXJzLnNwbGljZSggaS0tLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCAhdGltZXJzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZnguc3RvcCgpO1xuXHR9XG5cdGZ4Tm93ID0gdW5kZWZpbmVkO1xufTtcblxualF1ZXJ5LmZ4LnRpbWVyID0gZnVuY3Rpb24oIHRpbWVyICkge1xuXHRqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICk7XG5cdGlmICggdGltZXIoKSApIHtcblx0XHRqUXVlcnkuZnguc3RhcnQoKTtcblx0fSBlbHNlIHtcblx0XHRqUXVlcnkudGltZXJzLnBvcCgpO1xuXHR9XG59O1xuXG5qUXVlcnkuZnguaW50ZXJ2YWwgPSAxMztcbmpRdWVyeS5meC5zdGFydCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAoICF0aW1lcklkICkge1xuXHRcdHRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoIGpRdWVyeS5meC50aWNrLCBqUXVlcnkuZnguaW50ZXJ2YWwgKTtcblx0fVxufTtcblxualF1ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHtcblx0d2luZG93LmNsZWFySW50ZXJ2YWwoIHRpbWVySWQgKTtcblxuXHR0aW1lcklkID0gbnVsbDtcbn07XG5cbmpRdWVyeS5meC5zcGVlZHMgPSB7XG5cdHNsb3c6IDYwMCxcblx0ZmFzdDogMjAwLFxuXG5cdC8vIERlZmF1bHQgc3BlZWRcblx0X2RlZmF1bHQ6IDQwMFxufTtcblxuXG4vLyBCYXNlZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24uXG4vLyBodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDEwMDMyNDAxNDc0Ny9odHRwOi8vYmxpbmRzaWduYWxzLmNvbS9pbmRleC5waHAvMjAwOS8wNy9qcXVlcnktZGVsYXkvXG5qUXVlcnkuZm4uZGVsYXkgPSBmdW5jdGlvbiggdGltZSwgdHlwZSApIHtcblx0dGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTtcblx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlLCBmdW5jdGlvbiggbmV4dCwgaG9va3MgKSB7XG5cdFx0dmFyIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCggbmV4dCwgdGltZSApO1xuXHRcdGhvb2tzLnN0b3AgPSBmdW5jdGlvbigpIHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcblx0XHR9O1xuXHR9ICk7XG59O1xuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApLFxuXHRcdHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwic2VsZWN0XCIgKSxcblx0XHRvcHQgPSBzZWxlY3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib3B0aW9uXCIgKSApO1xuXG5cdGlucHV0LnR5cGUgPSBcImNoZWNrYm94XCI7XG5cblx0Ly8gU3VwcG9ydDogaU9TPD01LjEsIEFuZHJvaWQ8PTQuMitcblx0Ly8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgXCJvblwiXG5cdHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSBcIlwiO1xuXG5cdC8vIFN1cHBvcnQ6IElFPD0xMStcblx0Ly8gTXVzdCBhY2Nlc3Mgc2VsZWN0ZWRJbmRleCB0byBtYWtlIGRlZmF1bHQgb3B0aW9ucyBzZWxlY3Rcblx0c3VwcG9ydC5vcHRTZWxlY3RlZCA9IG9wdC5zZWxlY3RlZDtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkPD0yLjNcblx0Ly8gT3B0aW9ucyBpbnNpZGUgZGlzYWJsZWQgc2VsZWN0cyBhcmUgaW5jb3JyZWN0bHkgbWFya2VkIGFzIGRpc2FibGVkXG5cdHNlbGVjdC5kaXNhYmxlZCA9IHRydWU7XG5cdHN1cHBvcnQub3B0RGlzYWJsZWQgPSAhb3B0LmRpc2FibGVkO1xuXG5cdC8vIFN1cHBvcnQ6IElFPD0xMStcblx0Ly8gQW4gaW5wdXQgbG9zZXMgaXRzIHZhbHVlIGFmdGVyIGJlY29taW5nIGEgcmFkaW9cblx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0aW5wdXQudmFsdWUgPSBcInRcIjtcblx0aW5wdXQudHlwZSA9IFwicmFkaW9cIjtcblx0c3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09IFwidFwiO1xufSApKCk7XG5cblxudmFyIGJvb2xIb29rLFxuXHRhdHRySGFuZGxlID0galF1ZXJ5LmV4cHIuYXR0ckhhbmRsZTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBuYW1lICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIHRoaXMsIG5hbWUgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdGlmICggdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlID09PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lLCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBhdHRyaWJ1dGVzIGFyZSBsb3dlcmNhc2Vcblx0XHQvLyBHcmFiIG5lY2Vzc2FyeSBob29rIGlmIG9uZSBpcyBkZWZpbmVkXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cdFx0XHRuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0aG9va3MgPSBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0gfHxcblx0XHRcdFx0KCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogdW5kZWZpbmVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0Ly8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWRcblx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG5cdH0sXG5cblx0YXR0ckhvb2tzOiB7XG5cdFx0dHlwZToge1xuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gXCJyYWRpb1wiICYmXG5cdFx0XHRcdFx0alF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSApIHtcblx0XHRcdFx0XHR2YXIgdmFsID0gZWxlbS52YWx1ZTtcblx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIHZhbHVlICk7XG5cdFx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnZhbHVlID0gdmFsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdHZhciBuYW1lLCBwcm9wTmFtZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0YXR0ck5hbWVzID0gdmFsdWUgJiYgdmFsdWUubWF0Y2goIHJub3R3aGl0ZSApO1xuXG5cdFx0aWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkge1xuXHRcdFx0XHRwcm9wTmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTtcblxuXHRcdFx0XHQvLyBCb29sZWFuIGF0dHJpYnV0ZXMgZ2V0IHNwZWNpYWwgdHJlYXRtZW50ICgjMTA4NzApXG5cdFx0XHRcdGlmICggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC50ZXN0KCBuYW1lICkgKSB7XG5cblx0XHRcdFx0XHQvLyBTZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB0byBmYWxzZVxuXHRcdFx0XHRcdGVsZW1bIHByb3BOYW1lIF0gPSBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBuYW1lICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhvb2tzIGZvciBib29sZWFuIGF0dHJpYnV0ZXNcbmJvb2xIb29rID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHtcblx0XHRpZiAoIHZhbHVlID09PSBmYWxzZSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGJvb2xlYW4gYXR0cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZVxuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cbn07XG5qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cXHcrL2cgKSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdHZhciBnZXR0ZXIgPSBhdHRySGFuZGxlWyBuYW1lIF0gfHwgalF1ZXJ5LmZpbmQuYXR0cjtcblxuXHRhdHRySGFuZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHJldCwgaGFuZGxlO1xuXHRcdGlmICggIWlzWE1MICkge1xuXG5cdFx0XHQvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wIGJ5IHRlbXBvcmFyaWx5IHJlbW92aW5nIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgZ2V0dGVyXG5cdFx0XHRoYW5kbGUgPSBhdHRySGFuZGxlWyBuYW1lIF07XG5cdFx0XHRhdHRySGFuZGxlWyBuYW1lIF0gPSByZXQ7XG5cdFx0XHRyZXQgPSBnZXR0ZXIoIGVsZW0sIG5hbWUsIGlzWE1MICkgIT0gbnVsbCA/XG5cdFx0XHRcdG5hbWUudG9Mb3dlckNhc2UoKSA6XG5cdFx0XHRcdG51bGw7XG5cdFx0XHRhdHRySGFuZGxlWyBuYW1lIF0gPSBoYW5kbGU7XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG59ICk7XG5cblxuXG5cbnZhciByZm9jdXNhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmNsaWNrYWJsZSA9IC9eKD86YXxhcmVhKSQvaTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXG5cdHJlbW92ZVByb3A6IGZ1bmN0aW9uKCBuYW1lICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGVsZXRlIHRoaXNbIGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZSBdO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgcHJvcGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzXG5cdFx0XHRuYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lO1xuXHRcdFx0aG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICggZWxlbVsgbmFtZSBdID0gdmFsdWUgKTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZWxlbVsgbmFtZSBdO1xuXHR9LFxuXG5cdHByb3BIb29rczoge1xuXHRcdHRhYkluZGV4OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdC8vIGVsZW0udGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZVxuXHRcdFx0XHQvLyBjb3JyZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXRcblx0XHRcdFx0Ly8gaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvYmxvZy8yMDA4LzAxLzA5L2dldHRpbmctc2V0dGluZy1hbmQtcmVtb3ZpbmctdGFiaW5kZXgtdmFsdWVzLXdpdGgtamF2YXNjcmlwdC9cblx0XHRcdFx0Ly8gVXNlIHByb3BlciBhdHRyaWJ1dGUgcmV0cmlldmFsKCMxMjA3Milcblx0XHRcdFx0dmFyIHRhYmluZGV4ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ0YWJpbmRleFwiICk7XG5cblx0XHRcdFx0cmV0dXJuIHRhYmluZGV4ID9cblx0XHRcdFx0XHRwYXJzZUludCggdGFiaW5kZXgsIDEwICkgOlxuXHRcdFx0XHRcdHJmb2N1c2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8XG5cdFx0XHRcdFx0XHRyY2xpY2thYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJiBlbGVtLmhyZWYgP1xuXHRcdFx0XHRcdFx0XHQwIDpcblx0XHRcdFx0XHRcdFx0LTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHByb3BGaXg6IHtcblx0XHRcImZvclwiOiBcImh0bWxGb3JcIixcblx0XHRcImNsYXNzXCI6IFwiY2xhc3NOYW1lXCJcblx0fVxufSApO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcbi8vIEFjY2Vzc2luZyB0aGUgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eVxuLy8gZm9yY2VzIHRoZSBicm93c2VyIHRvIHJlc3BlY3Qgc2V0dGluZyBzZWxlY3RlZFxuLy8gb24gdGhlIG9wdGlvblxuLy8gVGhlIGdldHRlciBlbnN1cmVzIGEgZGVmYXVsdCBvcHRpb24gaXMgc2VsZWN0ZWRcbi8vIHdoZW4gaW4gYW4gb3B0Z3JvdXBcbmlmICggIXN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7XG5cdGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCAmJiBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0cGFyZW50LnNlbGVjdGVkSW5kZXg7XG5cblx0XHRcdFx0aWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5qUXVlcnkuZWFjaCggW1xuXHRcInRhYkluZGV4XCIsXG5cdFwicmVhZE9ubHlcIixcblx0XCJtYXhMZW5ndGhcIixcblx0XCJjZWxsU3BhY2luZ1wiLFxuXHRcImNlbGxQYWRkaW5nXCIsXG5cdFwicm93U3BhblwiLFxuXHRcImNvbFNwYW5cIixcblx0XCJ1c2VNYXBcIixcblx0XCJmcmFtZUJvcmRlclwiLFxuXHRcImNvbnRlbnRFZGl0YWJsZVwiXG5dLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnByb3BGaXhbIHRoaXMudG9Mb3dlckNhc2UoKSBdID0gdGhpcztcbn0gKTtcblxuXG5cblxudmFyIHJjbGFzcyA9IC9bXFx0XFxyXFxuXFxmXS9nO1xuXG5mdW5jdGlvbiBnZXRDbGFzcyggZWxlbSApIHtcblx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCBcImNsYXNzXCIgKSB8fCBcIlwiO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGFkZENsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZSApIHtcblx0XHRcdGNsYXNzZXMgPSB2YWx1ZS5tYXRjaCggcm5vdHdoaXRlICkgfHwgW107XG5cblx0XHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApO1xuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0KCBcIiBcIiArIGN1clZhbHVlICsgXCIgXCIgKS5yZXBsYWNlKCByY2xhc3MsIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRcdGlmICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhenogKyBcIiBcIiApIDwgMCApIHtcblx0XHRcdFx0XHRcdFx0Y3VyICs9IGNsYXp6ICsgXCIgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy5cblx0XHRcdFx0XHRmaW5hbFZhbHVlID0galF1ZXJ5LnRyaW0oIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hdHRyKCBcImNsYXNzXCIsIFwiXCIgKTtcblx0XHR9XG5cblx0XHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZSApIHtcblx0XHRcdGNsYXNzZXMgPSB2YWx1ZS5tYXRjaCggcm5vdHdoaXRlICkgfHwgW107XG5cblx0XHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApO1xuXG5cdFx0XHRcdC8vIFRoaXMgZXhwcmVzc2lvbiBpcyBoZXJlIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5IChzZWUgYWRkQ2xhc3MpXG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHQoIFwiIFwiICsgY3VyVmFsdWUgKyBcIiBcIiApLnJlcGxhY2UoIHJjbGFzcywgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgKmFsbCogaW5zdGFuY2VzXG5cdFx0XHRcdFx0XHR3aGlsZSAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgPSBjdXIucmVwbGFjZSggXCIgXCIgKyBjbGF6eiArIFwiIFwiLCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IGpRdWVyeS50cmltKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkge1xuXHRcdHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09IFwiYm9vbGVhblwiICYmIHR5cGUgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGVWYWwgPyB0aGlzLmFkZENsYXNzKCB2YWx1ZSApIDogdGhpcy5yZW1vdmVDbGFzcyggdmFsdWUgKTtcblx0XHR9XG5cblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKFxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIHRoaXMsIGksIGdldENsYXNzKCB0aGlzICksIHN0YXRlVmFsICksXG5cdFx0XHRcdFx0c3RhdGVWYWxcblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBjbGFzc05hbWUsIGksIHNlbGYsIGNsYXNzTmFtZXM7XG5cblx0XHRcdGlmICggdHlwZSA9PT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0XHQvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lc1xuXHRcdFx0XHRpID0gMDtcblx0XHRcdFx0c2VsZiA9IGpRdWVyeSggdGhpcyApO1xuXHRcdFx0XHRjbGFzc05hbWVzID0gdmFsdWUubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdO1xuXG5cdFx0XHRcdHdoaWxlICggKCBjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpKysgXSApICkge1xuXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0XG5cdFx0XHRcdFx0aWYgKCBzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKSApIHtcblx0XHRcdFx0XHRcdHNlbGYucmVtb3ZlQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZWxmLmFkZENsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gVG9nZ2xlIHdob2xlIGNsYXNzIG5hbWVcblx0XHRcdH0gZWxzZSBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRcdGNsYXNzTmFtZSA9IGdldENsYXNzKCB0aGlzICk7XG5cdFx0XHRcdGlmICggY2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgY2xhc3NOYW1lIGlmIHNldFxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIsIGNsYXNzTmFtZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGVsZW1lbnQgaGFzIGEgY2xhc3MgbmFtZSBvciBpZiB3ZSdyZSBwYXNzZWQgYGZhbHNlYCxcblx0XHRcdFx0Ly8gdGhlbiByZW1vdmUgdGhlIHdob2xlIGNsYXNzbmFtZSAoaWYgdGhlcmUgd2FzIG9uZSwgdGhlIGFib3ZlIHNhdmVkIGl0KS5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQgKGlmIGFueXRoaW5nKSxcblx0XHRcdFx0Ly8gZmFsbGluZyBiYWNrIHRvIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm90aGluZyB3YXMgc3RvcmVkLlxuXHRcdFx0XHRpZiAoIHRoaXMuc2V0QXR0cmlidXRlICkge1xuXHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlID9cblx0XHRcdFx0XHRcdFwiXCIgOlxuXHRcdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiApIHx8IFwiXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGhhc0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZSwgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Y2xhc3NOYW1lID0gXCIgXCIgKyBzZWxlY3RvciArIFwiIFwiO1xuXHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHQoIFwiIFwiICsgZ2V0Q2xhc3MoIGVsZW0gKSArIFwiIFwiICkucmVwbGFjZSggcmNsYXNzLCBcIiBcIiApXG5cdFx0XHRcdFx0LmluZGV4T2YoIGNsYXNzTmFtZSApID4gLTFcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIHJyZXR1cm4gPSAvXFxyL2csXG5cdHJzcGFjZXMgPSAvW1xceDIwXFx0XFxyXFxuXFxmXSsvZztcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHR2YWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgaG9va3MsIHJldCwgaXNGdW5jdGlvbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHxcblx0XHRcdFx0XHRqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHRcdGlmICggaG9va3MgJiZcblx0XHRcdFx0XHRcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIFwidmFsdWVcIiApICkgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0ID0gZWxlbS52YWx1ZTtcblxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIiA/XG5cblx0XHRcdFx0XHQvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzXG5cdFx0XHRcdFx0cmV0LnJlcGxhY2UoIHJyZXR1cm4sIFwiXCIgKSA6XG5cblx0XHRcdFx0XHQvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXJcblx0XHRcdFx0XHRyZXQgPT0gbnVsbCA/IFwiXCIgOiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdHZhciB2YWw7XG5cblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlLmNhbGwoIHRoaXMsIGksIGpRdWVyeSggdGhpcyApLnZhbCgpICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVHJlYXQgbnVsbC91bmRlZmluZWQgYXMgXCJcIjsgY29udmVydCBudW1iZXJzIHRvIHN0cmluZ1xuXHRcdFx0aWYgKCB2YWwgPT0gbnVsbCApIHtcblx0XHRcdFx0dmFsID0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggdHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0dmFsICs9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0dmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHQvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGluZ1xuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCBcInZhbHVlXCIgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHZhbEhvb2tzOiB7XG5cdFx0b3B0aW9uOiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdHZhciB2YWwgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInZhbHVlXCIgKTtcblx0XHRcdFx0cmV0dXJuIHZhbCAhPSBudWxsID9cblx0XHRcdFx0XHR2YWwgOlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUxMC0xMStcblx0XHRcdFx0XHQvLyBvcHRpb24udGV4dCB0aHJvd3MgZXhjZXB0aW9ucyAoIzE0Njg2LCAjMTQ4NTgpXG5cdFx0XHRcdFx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZVxuXHRcdFx0XHRcdGpRdWVyeS50cmltKCBqUXVlcnkudGV4dCggZWxlbSApICkucmVwbGFjZSggcnNwYWNlcywgXCIgXCIgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlbGVjdDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHZhbHVlLCBvcHRpb24sXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcblx0XHRcdFx0XHRvbmUgPSBlbGVtLnR5cGUgPT09IFwic2VsZWN0LW9uZVwiIHx8IGluZGV4IDwgMCxcblx0XHRcdFx0XHR2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sXG5cdFx0XHRcdFx0bWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGgsXG5cdFx0XHRcdFx0aSA9IGluZGV4IDwgMCA/XG5cdFx0XHRcdFx0XHRtYXggOlxuXHRcdFx0XHRcdFx0b25lID8gaW5kZXggOiAwO1xuXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gSUU4LTkgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAoIzI1NTEpXG5cdFx0XHRcdFx0aWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmXG5cblx0XHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQgb3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0XHRcdFx0XHQoIHN1cHBvcnQub3B0RGlzYWJsZWQgP1xuXHRcdFx0XHRcdFx0XHRcdCFvcHRpb24uZGlzYWJsZWQgOiBvcHRpb24uZ2V0QXR0cmlidXRlKCBcImRpc2FibGVkXCIgKSA9PT0gbnVsbCApICYmXG5cdFx0XHRcdFx0XHRcdCggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8XG5cdFx0XHRcdFx0XHRcdFx0IWpRdWVyeS5ub2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUsIFwib3B0Z3JvdXBcIiApICkgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEdldCB0aGUgc3BlY2lmaWMgdmFsdWUgZm9yIHRoZSBvcHRpb25cblx0XHRcdFx0XHRcdHZhbHVlID0galF1ZXJ5KCBvcHRpb24gKS52YWwoKTtcblxuXHRcdFx0XHRcdFx0Ly8gV2UgZG9uJ3QgbmVlZCBhbiBhcnJheSBmb3Igb25lIHNlbGVjdHNcblx0XHRcdFx0XHRcdGlmICggb25lICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIE11bHRpLVNlbGVjdHMgcmV0dXJuIGFuIGFycmF5XG5cdFx0XHRcdFx0XHR2YWx1ZXMucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdFx0fSxcblxuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBvcHRpb25TZXQsIG9wdGlvbixcblx0XHRcdFx0XHRvcHRpb25zID0gZWxlbS5vcHRpb25zLFxuXHRcdFx0XHRcdHZhbHVlcyA9IGpRdWVyeS5tYWtlQXJyYXkoIHZhbHVlICksXG5cdFx0XHRcdFx0aSA9IG9wdGlvbnMubGVuZ3RoO1xuXG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblx0XHRcdFx0XHRpZiAoIG9wdGlvbi5zZWxlY3RlZCA9XG5cdFx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggalF1ZXJ5LnZhbEhvb2tzLm9wdGlvbi5nZXQoIG9wdGlvbiApLCB2YWx1ZXMgKSA+IC0xXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRvcHRpb25TZXQgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZvcmNlIGJyb3dzZXJzIHRvIGJlaGF2ZSBjb25zaXN0ZW50bHkgd2hlbiBub24tbWF0Y2hpbmcgdmFsdWUgaXMgc2V0XG5cdFx0XHRcdGlmICggIW9wdGlvblNldCApIHtcblx0XHRcdFx0XHRlbGVtLnNlbGVjdGVkSW5kZXggPSAtMTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBSYWRpb3MgYW5kIGNoZWNrYm94ZXMgZ2V0dGVyL3NldHRlclxualF1ZXJ5LmVhY2goIFsgXCJyYWRpb1wiLCBcImNoZWNrYm94XCIgXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS52YWxIb29rc1sgdGhpcyBdID0ge1xuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0aWYgKCBqUXVlcnkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSggZWxlbSApLnZhbCgpLCB2YWx1ZSApID4gLTEgKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmICggIXN1cHBvcnQuY2hlY2tPbiApIHtcblx0XHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXS5nZXQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IG51bGwgPyBcIm9uXCIgOiBlbGVtLnZhbHVlO1xuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmlidXRlcy1vbmx5IGluY2x1c2lvblxuXG5cbnZhciByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLztcblxualF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7XG5cblx0XHR2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFsLFxuXHRcdFx0ZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sXG5cdFx0XHR0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcInR5cGVcIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LFxuXHRcdFx0bmFtZXNwYWNlcyA9IGhhc093bi5jYWxsKCBldmVudCwgXCJuYW1lc3BhY2VcIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCBcIi5cIiApIDogW107XG5cblx0XHRjdXIgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1bWVudDtcblxuXHRcdC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93XG5cdFx0aWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZS5pbmRleE9mKCBcIi5cIiApID4gLTEgKSB7XG5cblx0XHRcdC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKClcblx0XHRcdG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCBcIi5cIiApO1xuXHRcdFx0dHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTtcblx0XHRcdG5hbWVzcGFjZXMuc29ydCgpO1xuXHRcdH1cblx0XHRvbnR5cGUgPSB0eXBlLmluZGV4T2YoIFwiOlwiICkgPCAwICYmIFwib25cIiArIHR5cGU7XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmdcblx0XHRldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdGV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBldmVudCA9PT0gXCJvYmplY3RcIiAmJiBldmVudCApO1xuXG5cdFx0Ly8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKVxuXHRcdGV2ZW50LmlzVHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzO1xuXHRcdGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKTtcblx0XHRldmVudC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlID9cblx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApIDpcblx0XHRcdG51bGw7XG5cblx0XHQvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWRcblx0XHRldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7XG5cdFx0aWYgKCAhZXZlbnQudGFyZ2V0ICkge1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZWxlbTtcblx0XHR9XG5cblx0XHQvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0XG5cdFx0ZGF0YSA9IGRhdGEgPT0gbnVsbCA/XG5cdFx0XHRbIGV2ZW50IF0gOlxuXHRcdFx0alF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7XG5cblx0XHQvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzXG5cdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAoIzk5NTEpXG5cdFx0Ly8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRvdzsgd2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNClcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRidWJibGVUeXBlID0gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgfHwgdHlwZTtcblx0XHRcdGlmICggIXJmb2N1c01vcnBoLnRlc3QoIGJ1YmJsZVR5cGUgKyB0eXBlICkgKSB7XG5cdFx0XHRcdGN1ciA9IGN1ci5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICggOyBjdXI7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRldmVudFBhdGgucHVzaCggY3VyICk7XG5cdFx0XHRcdHRtcCA9IGN1cjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT25seSBhZGQgd2luZG93IGlmIHdlIGdvdCB0byBkb2N1bWVudCAoZS5nLiwgbm90IHBsYWluIG9iaiBvciBkZXRhY2hlZCBET00pXG5cdFx0XHRpZiAoIHRtcCA9PT0gKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQgKSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIHRtcC5kZWZhdWx0VmlldyB8fCB0bXAucGFyZW50V2luZG93IHx8IHdpbmRvdyApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZpcmUgaGFuZGxlcnMgb24gdGhlIGV2ZW50IHBhdGhcblx0XHRpID0gMDtcblx0XHR3aGlsZSAoICggY3VyID0gZXZlbnRQYXRoWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXG5cdFx0XHRldmVudC50eXBlID0gaSA+IDEgP1xuXHRcdFx0XHRidWJibGVUeXBlIDpcblx0XHRcdFx0c3BlY2lhbC5iaW5kVHlwZSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBqUXVlcnkgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gKCBkYXRhUHJpdi5nZXQoIGN1ciwgXCJldmVudHNcIiApIHx8IHt9IClbIGV2ZW50LnR5cGUgXSAmJlxuXHRcdFx0XHRkYXRhUHJpdi5nZXQoIGN1ciwgXCJoYW5kbGVcIiApO1xuXHRcdFx0aWYgKCBoYW5kbGUgKSB7XG5cdFx0XHRcdGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE5hdGl2ZSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSBvbnR5cGUgJiYgY3VyWyBvbnR5cGUgXTtcblx0XHRcdGlmICggaGFuZGxlICYmIGhhbmRsZS5hcHBseSAmJiBhY2NlcHREYXRhKCBjdXIgKSApIHtcblx0XHRcdFx0ZXZlbnQucmVzdWx0ID0gaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZXZlbnQudHlwZSA9IHR5cGU7XG5cblx0XHQvLyBJZiBub2JvZHkgcHJldmVudGVkIHRoZSBkZWZhdWx0IGFjdGlvbiwgZG8gaXQgbm93XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHtcblxuXHRcdFx0aWYgKCAoICFzcGVjaWFsLl9kZWZhdWx0IHx8XG5cdFx0XHRcdHNwZWNpYWwuX2RlZmF1bHQuYXBwbHkoIGV2ZW50UGF0aC5wb3AoKSwgZGF0YSApID09PSBmYWxzZSApICYmXG5cdFx0XHRcdGFjY2VwdERhdGEoIGVsZW0gKSApIHtcblxuXHRcdFx0XHQvLyBDYWxsIGEgbmF0aXZlIERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgbmFtZSBhcyB0aGUgZXZlbnQuXG5cdFx0XHRcdC8vIERvbid0IGRvIGRlZmF1bHQgYWN0aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICgjNjE3MClcblx0XHRcdFx0aWYgKCBvbnR5cGUgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIGVsZW1bIHR5cGUgXSApICYmICFqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hlbiB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2Rcblx0XHRcdFx0XHR0bXAgPSBlbGVtWyBvbnR5cGUgXTtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7XG5cdFx0XHRcdFx0ZWxlbVsgdHlwZSBdKCk7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSB0bXA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHQvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmVcblx0Ly8gVXNlZCBvbmx5IGZvciBgZm9jdXMoaW4gfCBvdXQpYCBldmVudHNcblx0c2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCApIHtcblx0XHR2YXIgZSA9IGpRdWVyeS5leHRlbmQoXG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCksXG5cdFx0XHRldmVudCxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0aXNTaW11bGF0ZWQ6IHRydWVcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGVsZW0gKTtcblx0fVxuXG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7XG5cdFx0fSApO1xuXHR9LFxuXHR0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF07XG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCBlbGVtLCB0cnVlICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cblxualF1ZXJ5LmVhY2goICggXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayBcIiArXG5cdFwibW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgXCIgK1xuXHRcImNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnVcIiApLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggaSwgbmFtZSApIHtcblxuXHQvLyBIYW5kbGUgZXZlbnQgYmluZGluZ1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDAgP1xuXHRcdFx0dGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6XG5cdFx0XHR0aGlzLnRyaWdnZXIoIG5hbWUgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRob3ZlcjogZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7XG5cdFx0cmV0dXJuIHRoaXMubW91c2VlbnRlciggZm5PdmVyICkubW91c2VsZWF2ZSggZm5PdXQgfHwgZm5PdmVyICk7XG5cdH1cbn0gKTtcblxuXG5cblxuc3VwcG9ydC5mb2N1c2luID0gXCJvbmZvY3VzaW5cIiBpbiB3aW5kb3c7XG5cblxuLy8gU3VwcG9ydDogRmlyZWZveFxuLy8gRmlyZWZveCBkb2Vzbid0IGhhdmUgZm9jdXMoaW4gfCBvdXQpIGV2ZW50c1xuLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc3ODdcbi8vXG4vLyBTdXBwb3J0OiBDaHJvbWUsIFNhZmFyaVxuLy8gZm9jdXMoaW4gfCBvdXQpIGV2ZW50cyBmaXJlIGFmdGVyIGZvY3VzICYgYmx1ciBldmVudHMsXG4vLyB3aGljaCBpcyBzcGVjIHZpb2xhdGlvbiAtIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWZvY3VzZXZlbnQtZXZlbnQtb3JkZXJcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ0OTg1N1xuaWYgKCAhc3VwcG9ydC5mb2N1c2luICkge1xuXHRqUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXG5cdFx0Ly8gQXR0YWNoIGEgc2luZ2xlIGNhcHR1cmluZyBoYW5kbGVyIG9uIHRoZSBkb2N1bWVudCB3aGlsZSBzb21lb25lIHdhbnRzIGZvY3VzaW4vZm9jdXNvdXRcblx0XHR2YXIgaGFuZGxlciA9IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC5zaW11bGF0ZSggZml4LCBldmVudC50YXJnZXQsIGpRdWVyeS5ldmVudC5maXgoIGV2ZW50ICkgKTtcblx0XHR9O1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGZpeCBdID0ge1xuXHRcdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICk7XG5cblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0ZG9jLmFkZEV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTtcblx0XHRcdH0sXG5cdFx0XHR0ZWFyZG93bjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKSAtIDE7XG5cblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0ZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGRvYywgZml4ICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCBhdHRhY2hlcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fSApO1xufVxudmFyIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uO1xuXG52YXIgbm9uY2UgPSBqUXVlcnkubm93KCk7XG5cbnZhciBycXVlcnkgPSAoIC9cXD8vICk7XG5cblxuXG4vLyBTdXBwb3J0OiBBbmRyb2lkIDIuM1xuLy8gV29ya2Fyb3VuZCBmYWlsdXJlIHRvIHN0cmluZy1jYXN0IG51bGwgaW5wdXRcbmpRdWVyeS5wYXJzZUpTT04gPSBmdW5jdGlvbiggZGF0YSApIHtcblx0cmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKyBcIlwiICk7XG59O1xuXG5cbi8vIENyb3NzLWJyb3dzZXIgeG1sIHBhcnNpbmdcbmpRdWVyeS5wYXJzZVhNTCA9IGZ1bmN0aW9uKCBkYXRhICkge1xuXHR2YXIgeG1sO1xuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUU5XG5cdHRyeSB7XG5cdFx0eG1sID0gKCBuZXcgd2luZG93LkRPTVBhcnNlcigpICkucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCBcInRleHQveG1sXCIgKTtcblx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0eG1sID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKCAheG1sIHx8IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCJwYXJzZXJlcnJvclwiICkubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5lcnJvciggXCJJbnZhbGlkIFhNTDogXCIgKyBkYXRhICk7XG5cdH1cblx0cmV0dXJuIHhtbDtcbn07XG5cblxudmFyXG5cdHJoYXNoID0gLyMuKiQvLFxuXHRydHMgPSAvKFs/Jl0pXz1bXiZdKi8sXG5cdHJoZWFkZXJzID0gL14oLio/KTpbIFxcdF0qKFteXFxyXFxuXSopJC9tZyxcblxuXHQvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb25cblx0cmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxcblx0cm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sXG5cdHJwcm90b2NvbCA9IC9eXFwvXFwvLyxcblxuXHQvKiBQcmVmaWx0ZXJzXG5cdCAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpXG5cdCAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6XG5cdCAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnRcblx0ICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKVxuXHQgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHByZWZpbHRlcnMgPSB7fSxcblxuXHQvKiBUcmFuc3BvcnRzIGJpbmRpbmdzXG5cdCAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogMikgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHRyYW5zcG9ydHMgPSB7fSxcblxuXHQvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb25cblx0YWxsVHlwZXMgPSBcIiovXCIuY29uY2F0KCBcIipcIiApLFxuXG5cdC8vIEFuY2hvciB0YWcgZm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvcmlnaW5BbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXHRvcmlnaW5BbmNob3IuaHJlZiA9IGxvY2F0aW9uLmhyZWY7XG5cbi8vIEJhc2UgXCJjb25zdHJ1Y3RvclwiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnRcbmZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkge1xuXG5cdC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gXCIqXCJcblx0cmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uO1xuXHRcdFx0ZGF0YVR5cGVFeHByZXNzaW9uID0gXCIqXCI7XG5cdFx0fVxuXG5cdFx0dmFyIGRhdGFUeXBlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdHdoaXRlICkgfHwgW107XG5cblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBmdW5jICkgKSB7XG5cblx0XHRcdC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb25cblx0XHRcdHdoaWxlICggKCBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHQvLyBQcmVwZW5kIGlmIHJlcXVlc3RlZFxuXHRcdFx0XHRpZiAoIGRhdGFUeXBlWyAwIF0gPT09IFwiK1wiICkge1xuXHRcdFx0XHRcdGRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCBcIipcIjtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnVuc2hpZnQoIGZ1bmMgKTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYXBwZW5kXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS5wdXNoKCBmdW5jICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0c1xuZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApIHtcblxuXHR2YXIgaW5zcGVjdGVkID0ge30sXG5cdFx0c2Vla2luZ1RyYW5zcG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFuc3BvcnRzICk7XG5cblx0ZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5cGUgKSB7XG5cdFx0dmFyIHNlbGVjdGVkO1xuXHRcdGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7XG5cdFx0alF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHtcblx0XHRcdHZhciBkYXRhVHlwZU9yVHJhbnNwb3J0ID0gcHJlZmlsdGVyT3JGYWN0b3J5KCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7XG5cdFx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZU9yVHJhbnNwb3J0ID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzZWVraW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHtcblxuXHRcdFx0XHRvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdGluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmICggc2Vla2luZ1RyYW5zcG9ydCApIHtcblx0XHRcdFx0cmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gc2VsZWN0ZWQ7XG5cdH1cblxuXHRyZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0ZWRbIFwiKlwiIF0gJiYgaW5zcGVjdCggXCIqXCIgKTtcbn1cblxuLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zXG4vLyB0aGF0IHRha2VzIFwiZmxhdFwiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKVxuLy8gRml4ZXMgIzk4ODdcbmZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkge1xuXHR2YXIga2V5LCBkZWVwLFxuXHRcdGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTtcblxuXHRmb3IgKCBrZXkgaW4gc3JjICkge1xuXHRcdGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0KCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTtcblx0XHR9XG5cdH1cblx0aWYgKCBkZWVwICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn1cblxuLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OlxuICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSlcbiAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuICovXG5mdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkge1xuXG5cdHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSxcblx0XHRjb250ZW50cyA9IHMuY29udGVudHMsXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXM7XG5cblx0Ly8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3Ncblx0d2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gXCIqXCIgKSB7XG5cdFx0ZGF0YVR5cGVzLnNoaWZ0KCk7XG5cdFx0aWYgKCBjdCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0Y3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlXG5cdGlmICggY3QgKSB7XG5cdFx0Zm9yICggdHlwZSBpbiBjb250ZW50cyApIHtcblx0XHRcdGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7XG5cdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBlY3RlZCBkYXRhVHlwZVxuXHRpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHtcblx0XHRmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07XG5cdH0gZWxzZSB7XG5cblx0XHQvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzXG5cdFx0Zm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7XG5cdFx0XHRpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyBcIiBcIiArIGRhdGFUeXBlc1sgMCBdIF0gKSB7XG5cdFx0XHRcdGZpbmFsRGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggIWZpcnN0RGF0YVR5cGUgKSB7XG5cdFx0XHRcdGZpcnN0RGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZVxuXHRcdGZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7XG5cdH1cblxuXHQvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlXG5cdC8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkXG5cdC8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2Vcblx0aWYgKCBmaW5hbERhdGFUeXBlICkge1xuXHRcdGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7XG5cdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07XG5cdH1cbn1cblxuLyogQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZVxuICogQWxzbyBzZXRzIHRoZSByZXNwb25zZVhYWCBmaWVsZHMgb24gdGhlIGpxWEhSIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApIHtcblx0dmFyIGNvbnYyLCBjdXJyZW50LCBjb252LCB0bXAsIHByZXYsXG5cdFx0Y29udmVydGVycyA9IHt9LFxuXG5cdFx0Ly8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvblxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCk7XG5cblx0Ly8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzXG5cdGlmICggZGF0YVR5cGVzWyAxIF0gKSB7XG5cdFx0Zm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7XG5cdFx0XHRjb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29udiBdO1xuXHRcdH1cblx0fVxuXG5cdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHQvLyBDb252ZXJ0IHRvIGVhY2ggc2VxdWVudGlhbCBkYXRhVHlwZVxuXHR3aGlsZSAoIGN1cnJlbnQgKSB7XG5cblx0XHRpZiAoIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSApIHtcblx0XHRcdGpxWEhSWyBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gXSA9IHJlc3BvbnNlO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkXG5cdFx0aWYgKCAhcHJldiAmJiBpc1N1Y2Nlc3MgJiYgcy5kYXRhRmlsdGVyICkge1xuXHRcdFx0cmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBlICk7XG5cdFx0fVxuXG5cdFx0cHJldiA9IGN1cnJlbnQ7XG5cdFx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdFx0aWYgKCBjdXJyZW50ICkge1xuXG5cdFx0Ly8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBkYXRhVHlwZSBpcyBub24tYXV0b1xuXHRcdFx0aWYgKCBjdXJyZW50ID09PSBcIipcIiApIHtcblxuXHRcdFx0XHRjdXJyZW50ID0gcHJldjtcblxuXHRcdFx0Ly8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudFxuXHRcdFx0fSBlbHNlIGlmICggcHJldiAhPT0gXCIqXCIgJiYgcHJldiAhPT0gY3VycmVudCApIHtcblxuXHRcdFx0XHQvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRlclxuXHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgY3VycmVudCBdIHx8IGNvbnZlcnRlcnNbIFwiKiBcIiArIGN1cnJlbnQgXTtcblxuXHRcdFx0XHQvLyBJZiBub25lIGZvdW5kLCBzZWVrIGEgcGFpclxuXHRcdFx0XHRpZiAoICFjb252ICkge1xuXHRcdFx0XHRcdGZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIElmIGNvbnYyIG91dHB1dHMgY3VycmVudFxuXHRcdFx0XHRcdFx0dG1wID0gY29udjIuc3BsaXQoIFwiIFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIHRtcFsgMSBdID09PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0byBhY2NlcHRlZCBpbnB1dFxuXHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgdG1wWyAwIF0gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlcnNbIFwiKiBcIiArIHRtcFsgMCBdIF07XG5cdFx0XHRcdFx0XHRcdGlmICggY29udiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgPT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgY29udjIgXTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgaW5zZXJ0IHRoZSBpbnRlcm1lZGlhdGUgZGF0YVR5cGVcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudCA9IHRtcFsgMCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpXG5cdFx0XHRcdGlmICggY29udiAhPT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdC8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW1cblx0XHRcdFx0XHRpZiAoIGNvbnYgJiYgcy50aHJvd3MgKSB7XG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlOiBcInBhcnNlcmVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGNvbnYgPyBlIDogXCJObyBjb252ZXJzaW9uIGZyb20gXCIgKyBwcmV2ICsgXCIgdG8gXCIgKyBjdXJyZW50XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgc3RhdGU6IFwic3VjY2Vzc1wiLCBkYXRhOiByZXNwb25zZSB9O1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzXG5cdGFjdGl2ZTogMCxcblxuXHQvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0XG5cdGxhc3RNb2RpZmllZDoge30sXG5cdGV0YWc6IHt9LFxuXG5cdGFqYXhTZXR0aW5nczoge1xuXHRcdHVybDogbG9jYXRpb24uaHJlZixcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGlzTG9jYWw6IHJsb2NhbFByb3RvY29sLnRlc3QoIGxvY2F0aW9uLnByb3RvY29sICksXG5cdFx0Z2xvYmFsOiB0cnVlLFxuXHRcdHByb2Nlc3NEYXRhOiB0cnVlLFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLFxuXHRcdC8qXG5cdFx0dGltZW91dDogMCxcblx0XHRkYXRhOiBudWxsLFxuXHRcdGRhdGFUeXBlOiBudWxsLFxuXHRcdHVzZXJuYW1lOiBudWxsLFxuXHRcdHBhc3N3b3JkOiBudWxsLFxuXHRcdGNhY2hlOiBudWxsLFxuXHRcdHRocm93czogZmFsc2UsXG5cdFx0dHJhZGl0aW9uYWw6IGZhbHNlLFxuXHRcdGhlYWRlcnM6IHt9LFxuXHRcdCovXG5cblx0XHRhY2NlcHRzOiB7XG5cdFx0XHRcIipcIjogYWxsVHlwZXMsXG5cdFx0XHR0ZXh0OiBcInRleHQvcGxhaW5cIixcblx0XHRcdGh0bWw6IFwidGV4dC9odG1sXCIsXG5cdFx0XHR4bWw6IFwiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbFwiLFxuXHRcdFx0anNvbjogXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHRcIlxuXHRcdH0sXG5cblx0XHRjb250ZW50czoge1xuXHRcdFx0eG1sOiAvXFxieG1sXFxiLyxcblx0XHRcdGh0bWw6IC9cXGJodG1sLyxcblx0XHRcdGpzb246IC9cXGJqc29uXFxiL1xuXHRcdH0sXG5cblx0XHRyZXNwb25zZUZpZWxkczoge1xuXHRcdFx0eG1sOiBcInJlc3BvbnNlWE1MXCIsXG5cdFx0XHR0ZXh0OiBcInJlc3BvbnNlVGV4dFwiLFxuXHRcdFx0anNvbjogXCJyZXNwb25zZUpTT05cIlxuXHRcdH0sXG5cblx0XHQvLyBEYXRhIGNvbnZlcnRlcnNcblx0XHQvLyBLZXlzIHNlcGFyYXRlIHNvdXJjZSAob3IgY2F0Y2hhbGwgXCIqXCIpIGFuZCBkZXN0aW5hdGlvbiB0eXBlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG5cdFx0Y29udmVydGVyczoge1xuXG5cdFx0XHQvLyBDb252ZXJ0IGFueXRoaW5nIHRvIHRleHRcblx0XHRcdFwiKiB0ZXh0XCI6IFN0cmluZyxcblxuXHRcdFx0Ly8gVGV4dCB0byBodG1sICh0cnVlID0gbm8gdHJhbnNmb3JtYXRpb24pXG5cdFx0XHRcInRleHQgaHRtbFwiOiB0cnVlLFxuXG5cdFx0XHQvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9uXG5cdFx0XHRcInRleHQganNvblwiOiBqUXVlcnkucGFyc2VKU09OLFxuXG5cdFx0XHQvLyBQYXJzZSB0ZXh0IGFzIHhtbFxuXHRcdFx0XCJ0ZXh0IHhtbFwiOiBqUXVlcnkucGFyc2VYTUxcblx0XHR9LFxuXG5cdFx0Ly8gRm9yIG9wdGlvbnMgdGhhdCBzaG91bGRuJ3QgYmUgZGVlcCBleHRlbmRlZDpcblx0XHQvLyB5b3UgY2FuIGFkZCB5b3VyIG93biBjdXN0b20gb3B0aW9ucyBoZXJlIGlmXG5cdFx0Ly8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmVcblx0XHQvLyBkZWVwIGV4dGVuZGVkIChzZWUgYWpheEV4dGVuZClcblx0XHRmbGF0T3B0aW9uczoge1xuXHRcdFx0dXJsOiB0cnVlLFxuXHRcdFx0Y29udGV4dDogdHJ1ZVxuXHRcdH1cblx0fSxcblxuXHQvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2VkIHNldHRpbmdzIG9iamVjdCBpbnRvIHRhcmdldFxuXHQvLyB3aXRoIGJvdGggYWpheFNldHRpbmdzIGFuZCBzZXR0aW5ncyBmaWVsZHMuXG5cdC8vIElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGluZ3MuXG5cdGFqYXhTZXR1cDogZnVuY3Rpb24oIHRhcmdldCwgc2V0dGluZ3MgKSB7XG5cdFx0cmV0dXJuIHNldHRpbmdzID9cblxuXHRcdFx0Ly8gQnVpbGRpbmcgYSBzZXR0aW5ncyBvYmplY3Rcblx0XHRcdGFqYXhFeHRlbmQoIGFqYXhFeHRlbmQoIHRhcmdldCwgalF1ZXJ5LmFqYXhTZXR0aW5ncyApLCBzZXR0aW5ncyApIDpcblxuXHRcdFx0Ly8gRXh0ZW5kaW5nIGFqYXhTZXR0aW5nc1xuXHRcdFx0YWpheEV4dGVuZCggalF1ZXJ5LmFqYXhTZXR0aW5ncywgdGFyZ2V0ICk7XG5cdH0sXG5cblx0YWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksXG5cdGFqYXhUcmFuc3BvcnQ6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cyApLFxuXG5cdC8vIE1haW4gbWV0aG9kXG5cdGFqYXg6IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBzaW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZVxuXHRcdGlmICggdHlwZW9mIHVybCA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdG9wdGlvbnMgPSB1cmw7XG5cdFx0XHR1cmwgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yY2Ugb3B0aW9ucyB0byBiZSBhbiBvYmplY3Rcblx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRcdHZhciB0cmFuc3BvcnQsXG5cblx0XHRcdC8vIFVSTCB3aXRob3V0IGFudGktY2FjaGUgcGFyYW1cblx0XHRcdGNhY2hlVVJMLFxuXG5cdFx0XHQvLyBSZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcsXG5cdFx0XHRyZXNwb25zZUhlYWRlcnMsXG5cblx0XHRcdC8vIHRpbWVvdXQgaGFuZGxlXG5cdFx0XHR0aW1lb3V0VGltZXIsXG5cblx0XHRcdC8vIFVybCBjbGVhbnVwIHZhclxuXHRcdFx0dXJsQW5jaG9yLFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWRcblx0XHRcdGZpcmVHbG9iYWxzLFxuXG5cdFx0XHQvLyBMb29wIHZhcmlhYmxlXG5cdFx0XHRpLFxuXG5cdFx0XHQvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0XG5cdFx0XHRzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSxcblxuXHRcdFx0Ly8gQ2FsbGJhY2tzIGNvbnRleHRcblx0XHRcdGNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLFxuXG5cdFx0XHQvLyBDb250ZXh0IGZvciBnbG9iYWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBub2RlIG9yIGpRdWVyeSBjb2xsZWN0aW9uXG5cdFx0XHRnbG9iYWxFdmVudENvbnRleHQgPSBzLmNvbnRleHQgJiZcblx0XHRcdFx0KCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID9cblx0XHRcdFx0XHRqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCApIDpcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQsXG5cblx0XHRcdC8vIERlZmVycmVkc1xuXHRcdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sXG5cblx0XHRcdC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpXG5cdFx0XHRyZXF1ZXN0SGVhZGVycyA9IHt9LFxuXHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LFxuXG5cdFx0XHQvLyBUaGUganFYSFIgc3RhdGVcblx0XHRcdHN0YXRlID0gMCxcblxuXHRcdFx0Ly8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlXG5cdFx0XHRzdHJBYm9ydCA9IFwiY2FuY2VsZWRcIixcblxuXHRcdFx0Ly8gRmFrZSB4aHJcblx0XHRcdGpxWEhSID0ge1xuXHRcdFx0XHRyZWFkeVN0YXRlOiAwLFxuXG5cdFx0XHRcdC8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWRcblx0XHRcdFx0Z2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNoO1xuXHRcdFx0XHRcdGlmICggc3RhdGUgPT09IDIgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpIF0gPSBtYXRjaFsgMiBdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJDYXNlKCkgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoID09IG51bGwgPyBudWxsIDogbWF0Y2g7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gUmF3IHN0cmluZ1xuXHRcdFx0XHRnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBzdGF0ZSA9PT0gMiA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FjaGVzIHRoZSBoZWFkZXJcblx0XHRcdFx0c2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0XHRcdHZhciBsbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRpZiAoICFzdGF0ZSApIHtcblx0XHRcdFx0XHRcdG5hbWUgPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBsbmFtZSBdID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbG5hbWUgXSB8fCBuYW1lO1xuXHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlclxuXHRcdFx0XHRvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRpZiAoICFzdGF0ZSApIHtcblx0XHRcdFx0XHRcdHMubWltZVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0XHRzdGF0dXNDb2RlOiBmdW5jdGlvbiggbWFwICkge1xuXHRcdFx0XHRcdHZhciBjb2RlO1xuXHRcdFx0XHRcdGlmICggbWFwICkge1xuXHRcdFx0XHRcdFx0aWYgKCBzdGF0ZSA8IDIgKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAoIGNvZGUgaW4gbWFwICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gTGF6eS1hZGQgdGhlIG5ldyBjYWxsYmFjayBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lc1xuXHRcdFx0XHRcdFx0XHRcdHN0YXR1c0NvZGVbIGNvZGUgXSA9IFsgc3RhdHVzQ29kZVsgY29kZSBdLCBtYXBbIGNvZGUgXSBdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrc1xuXHRcdFx0XHRcdFx0XHRqcVhIUi5hbHdheXMoIG1hcFsganFYSFIuc3RhdHVzIF0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSByZXF1ZXN0XG5cdFx0XHRcdGFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHR2YXIgZmluYWxUZXh0ID0gc3RhdHVzVGV4dCB8fCBzdHJBYm9ydDtcblx0XHRcdFx0XHRpZiAoIHRyYW5zcG9ydCApIHtcblx0XHRcdFx0XHRcdHRyYW5zcG9ydC5hYm9ydCggZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRvbmUoIDAsIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0Ly8gQXR0YWNoIGRlZmVycmVkc1xuXHRcdGRlZmVycmVkLnByb21pc2UoIGpxWEhSICkuY29tcGxldGUgPSBjb21wbGV0ZURlZmVycmVkLmFkZDtcblx0XHRqcVhIUi5zdWNjZXNzID0ganFYSFIuZG9uZTtcblx0XHRqcVhIUi5lcnJvciA9IGpxWEhSLmZhaWw7XG5cblx0XHQvLyBSZW1vdmUgaGFzaCBjaGFyYWN0ZXIgKCM3NTMxOiBhbmQgc3RyaW5nIHByb21vdGlvbilcblx0XHQvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVkIChwcmVmaWx0ZXJzIG1pZ2h0IGV4cGVjdCBpdClcblx0XHQvLyBIYW5kbGUgZmFsc3kgdXJsIGluIHRoZSBzZXR0aW5ncyBvYmplY3QgKCMxMDA5MzogY29uc2lzdGVuY3kgd2l0aCBvbGQgc2lnbmF0dXJlKVxuXHRcdC8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWlsYWJsZVxuXHRcdHMudXJsID0gKCAoIHVybCB8fCBzLnVybCB8fCBsb2NhdGlvbi5ocmVmICkgKyBcIlwiICkucmVwbGFjZSggcmhhc2gsIFwiXCIgKVxuXHRcdFx0LnJlcGxhY2UoIHJwcm90b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKTtcblxuXHRcdC8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0ICMxMjAwNFxuXHRcdHMudHlwZSA9IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBzLnR5cGU7XG5cblx0XHQvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0XG5cdFx0cy5kYXRhVHlwZXMgPSBqUXVlcnkudHJpbSggcy5kYXRhVHlwZSB8fCBcIipcIiApLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3R3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXG5cdFx0Ly8gQSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVuIHRoZSBvcmlnaW4gZG9lc24ndCBtYXRjaCB0aGUgY3VycmVudCBvcmlnaW4uXG5cdFx0aWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7XG5cdFx0XHR1cmxBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTgtMTErXG5cdFx0XHQvLyBJRSB0aHJvd3MgZXhjZXB0aW9uIGlmIHVybCBpcyBtYWxmb3JtZWQsIGUuZy4gaHR0cDovL2V4YW1wbGUuY29tOjgweC9cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gcy51cmw7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUU4LTExK1xuXHRcdFx0XHQvLyBBbmNob3IncyBob3N0IHByb3BlcnR5IGlzbid0IGNvcnJlY3RseSBzZXQgd2hlbiBzLnVybCBpcyByZWxhdGl2ZVxuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHVybEFuY2hvci5ocmVmO1xuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gb3JpZ2luQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgb3JpZ2luQW5jaG9yLmhvc3QgIT09XG5cdFx0XHRcdFx0dXJsQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgdXJsQW5jaG9yLmhvc3Q7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhbiBlcnJvciBwYXJzaW5nIHRoZSBVUkwsIGFzc3VtZSBpdCBpcyBjcm9zc0RvbWFpbixcblx0XHRcdFx0Ly8gaXQgY2FuIGJlIHJlamVjdGVkIGJ5IHRoZSB0cmFuc3BvcnQgaWYgaXQgaXMgaW52YWxpZFxuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmdcblx0XHRpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHByZWZpbHRlcnNcblx0XHRpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGEgcHJlZmlsdGVyLCBzdG9wIHRoZXJlXG5cdFx0aWYgKCBzdGF0ZSA9PT0gMiApIHtcblx0XHRcdHJldHVybiBqcVhIUjtcblx0XHR9XG5cblx0XHQvLyBXZSBjYW4gZmlyZSBnbG9iYWwgZXZlbnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0b1xuXHRcdC8vIERvbid0IGZpcmUgZXZlbnRzIGlmIGpRdWVyeS5ldmVudCBpcyB1bmRlZmluZWQgaW4gYW4gQU1ELXVzYWdlIHNjZW5hcmlvICgjMTUxMTgpXG5cdFx0ZmlyZUdsb2JhbHMgPSBqUXVlcnkuZXZlbnQgJiYgcy5nbG9iYWw7XG5cblx0XHQvLyBXYXRjaCBmb3IgYSBuZXcgc2V0IG9mIHJlcXVlc3RzXG5cdFx0aWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RhcnRcIiApO1xuXHRcdH1cblxuXHRcdC8vIFVwcGVyY2FzZSB0aGUgdHlwZVxuXHRcdHMudHlwZSA9IHMudHlwZS50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRlbnRcblx0XHRzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTtcblxuXHRcdC8vIFNhdmUgdGhlIFVSTCBpbiBjYXNlIHdlJ3JlIHRveWluZyB3aXRoIHRoZSBJZi1Nb2RpZmllZC1TaW5jZVxuXHRcdC8vIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciBsYXRlciBvblxuXHRcdGNhY2hlVVJMID0gcy51cmw7XG5cblx0XHQvLyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudFxuXHRcdGlmICggIXMuaGFzQ29udGVudCApIHtcblxuXHRcdFx0Ly8gSWYgZGF0YSBpcyBhdmFpbGFibGUsIGFwcGVuZCBkYXRhIHRvIHVybFxuXHRcdFx0aWYgKCBzLmRhdGEgKSB7XG5cdFx0XHRcdGNhY2hlVVJMID0gKCBzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgcy5kYXRhICk7XG5cblx0XHRcdFx0Ly8gIzk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBub3QgdXNlZCBpbiBhbiBldmVudHVhbCByZXRyeVxuXHRcdFx0XHRkZWxldGUgcy5kYXRhO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgYW50aS1jYWNoZSBpbiB1cmwgaWYgbmVlZGVkXG5cdFx0XHRpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkge1xuXHRcdFx0XHRzLnVybCA9IHJ0cy50ZXN0KCBjYWNoZVVSTCApID9cblxuXHRcdFx0XHRcdC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSAnXycgcGFyYW1ldGVyLCBzZXQgaXRzIHZhbHVlXG5cdFx0XHRcdFx0Y2FjaGVVUkwucmVwbGFjZSggcnRzLCBcIiQxXz1cIiArIG5vbmNlKysgKSA6XG5cblx0XHRcdFx0XHQvLyBPdGhlcndpc2UgYWRkIG9uZSB0byB0aGUgZW5kXG5cdFx0XHRcdFx0Y2FjaGVVUkwgKyAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgXCJfPVwiICsgbm9uY2UrKztcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0aWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU1vZGlmaWVkLVNpbmNlXCIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHRcdGlmICggalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTm9uZS1NYXRjaFwiLCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudFxuXHRcdGlmICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJDb250ZW50LVR5cGVcIiwgcy5jb250ZW50VHlwZSApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGVcblx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKFxuXHRcdFx0XCJBY2NlcHRcIixcblx0XHRcdHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gP1xuXHRcdFx0XHRzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSArXG5cdFx0XHRcdFx0KCBzLmRhdGFUeXBlc1sgMCBdICE9PSBcIipcIiA/IFwiLCBcIiArIGFsbFR5cGVzICsgXCI7IHE9MC4wMVwiIDogXCJcIiApIDpcblx0XHRcdFx0cy5hY2NlcHRzWyBcIipcIiBdXG5cdFx0KTtcblxuXHRcdC8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvblxuXHRcdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTtcblx0XHR9XG5cblx0XHQvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0XG5cdFx0aWYgKCBzLmJlZm9yZVNlbmQgJiZcblx0XHRcdCggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgc3RhdGUgPT09IDIgKSApIHtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuXG5cdFx0XHRyZXR1cm4ganFYSFIuYWJvcnQoKTtcblx0XHR9XG5cblx0XHQvLyBBYm9ydGluZyBpcyBubyBsb25nZXIgYSBjYW5jZWxsYXRpb25cblx0XHRzdHJBYm9ydCA9IFwiYWJvcnRcIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tzIG9uIGRlZmVycmVkc1xuXHRcdGZvciAoIGkgaW4geyBzdWNjZXNzOiAxLCBlcnJvcjogMSwgY29tcGxldGU6IDEgfSApIHtcblx0XHRcdGpxWEhSWyBpIF0oIHNbIGkgXSApO1xuXHRcdH1cblxuXHRcdC8vIEdldCB0cmFuc3BvcnRcblx0XHR0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydFxuXHRcdGlmICggIXRyYW5zcG9ydCApIHtcblx0XHRcdGRvbmUoIC0xLCBcIk5vIFRyYW5zcG9ydFwiICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSAxO1xuXG5cdFx0XHQvLyBTZW5kIGdsb2JhbCBldmVudFxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheFNlbmRcIiwgWyBqcVhIUiwgcyBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9wIHRoZXJlXG5cdFx0XHRpZiAoIHN0YXRlID09PSAyICkge1xuXHRcdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRpbWVvdXRcblx0XHRcdGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkge1xuXHRcdFx0XHR0aW1lb3V0VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0anFYSFIuYWJvcnQoIFwidGltZW91dFwiICk7XG5cdFx0XHRcdH0sIHMudGltZW91dCApO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRzdGF0ZSA9IDE7XG5cdFx0XHRcdHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gUHJvcGFnYXRlIGV4Y2VwdGlvbiBhcyBlcnJvciBpZiBub3QgZG9uZVxuXHRcdFx0XHRpZiAoIHN0YXRlIDwgMiApIHtcblx0XHRcdFx0XHRkb25lKCAtMSwgZSApO1xuXG5cdFx0XHRcdC8vIFNpbXBseSByZXRocm93IG90aGVyd2lzZVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsYmFjayBmb3Igd2hlbiBldmVyeXRoaW5nIGlzIGRvbmVcblx0XHRmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHtcblx0XHRcdHZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsXG5cdFx0XHRcdHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0O1xuXG5cdFx0XHQvLyBDYWxsZWQgb25jZVxuXHRcdFx0aWYgKCBzdGF0ZSA9PT0gMiApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGF0ZSBpcyBcImRvbmVcIiBub3dcblx0XHRcdHN0YXRlID0gMjtcblxuXHRcdFx0Ly8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHNcblx0XHRcdGlmICggdGltZW91dFRpbWVyICkge1xuXHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb25cblx0XHRcdC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpXG5cdFx0XHR0cmFuc3BvcnQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgXCJcIjtcblxuXHRcdFx0Ly8gU2V0IHJlYWR5U3RhdGVcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7XG5cblx0XHRcdC8vIERldGVybWluZSBpZiBzdWNjZXNzZnVsXG5cdFx0XHRpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNDtcblxuXHRcdFx0Ly8gR2V0IHJlc3BvbnNlIGRhdGFcblx0XHRcdGlmICggcmVzcG9uc2VzICkge1xuXHRcdFx0XHRyZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KVxuXHRcdFx0cmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTtcblxuXHRcdFx0Ly8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmdcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXG5cdFx0XHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0XHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiTGFzdC1Nb2RpZmllZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJldGFnXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBpZiBubyBjb250ZW50XG5cdFx0XHRcdGlmICggc3RhdHVzID09PSAyMDQgfHwgcy50eXBlID09PSBcIkhFQURcIiApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub2NvbnRlbnRcIjtcblxuXHRcdFx0XHQvLyBpZiBub3QgbW9kaWZpZWRcblx0XHRcdFx0fSBlbHNlIGlmICggc3RhdHVzID09PSAzMDQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm90bW9kaWZpZWRcIjtcblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdGU7XG5cdFx0XHRcdFx0c3VjY2VzcyA9IHJlc3BvbnNlLmRhdGE7XG5cdFx0XHRcdFx0ZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRpc1N1Y2Nlc3MgPSAhZXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gRXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5kIG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0c1xuXHRcdFx0XHRlcnJvciA9IHN0YXR1c1RleHQ7XG5cdFx0XHRcdGlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcImVycm9yXCI7XG5cdFx0XHRcdFx0aWYgKCBzdGF0dXMgPCAwICkge1xuXHRcdFx0XHRcdFx0c3RhdHVzID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3Rcblx0XHRcdGpxWEhSLnN0YXR1cyA9IHN0YXR1cztcblx0XHRcdGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgXCJcIjtcblxuXHRcdFx0Ly8gU3VjY2Vzcy9FcnJvclxuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7XG5cdFx0XHRzdGF0dXNDb2RlID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gXCJhamF4U3VjY2Vzc1wiIDogXCJhamF4RXJyb3JcIixcblx0XHRcdFx0XHRbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb21wbGV0ZVxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheENvbXBsZXRlXCIsIFsganFYSFIsIHMgXSApO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlclxuXHRcdFx0XHRpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdG9wXCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBqcVhIUjtcblx0fSxcblxuXHRnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgXCJqc29uXCIgKTtcblx0fSxcblxuXHRnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssIFwic2NyaXB0XCIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImdldFwiLCBcInBvc3RcIiBdLCBmdW5jdGlvbiggaSwgbWV0aG9kICkge1xuXHRqUXVlcnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7XG5cblx0XHQvLyBTaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRlZFxuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGRhdGEgKSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrO1xuXHRcdFx0Y2FsbGJhY2sgPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBUaGUgdXJsIGNhbiBiZSBhbiBvcHRpb25zIG9iamVjdCAod2hpY2ggdGhlbiBtdXN0IGhhdmUgLnVybClcblx0XHRyZXR1cm4galF1ZXJ5LmFqYXgoIGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdHVybDogdXJsLFxuXHRcdFx0dHlwZTogbWV0aG9kLFxuXHRcdFx0ZGF0YVR5cGU6IHR5cGUsXG5cdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0c3VjY2VzczogY2FsbGJhY2tcblx0XHR9LCBqUXVlcnkuaXNQbGFpbk9iamVjdCggdXJsICkgJiYgdXJsICkgKTtcblx0fTtcbn0gKTtcblxuXG5qUXVlcnkuX2V2YWxVcmwgPSBmdW5jdGlvbiggdXJsICkge1xuXHRyZXR1cm4galF1ZXJ5LmFqYXgoIHtcblx0XHR1cmw6IHVybCxcblxuXHRcdC8vIE1ha2UgdGhpcyBleHBsaWNpdCwgc2luY2UgdXNlciBjYW4gb3ZlcnJpZGUgdGhpcyB0aHJvdWdoIGFqYXhTZXR1cCAoIzExMjY0KVxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0ZGF0YVR5cGU6IFwic2NyaXB0XCIsXG5cdFx0YXN5bmM6IGZhbHNlLFxuXHRcdGdsb2JhbDogZmFsc2UsXG5cdFx0XCJ0aHJvd3NcIjogdHJ1ZVxuXHR9ICk7XG59O1xuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0d3JhcEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIHdyYXA7XG5cblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaHRtbC5jYWxsKCB0aGlzLCBpICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXNbIDAgXSApIHtcblxuXHRcdFx0Ly8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmRcblx0XHRcdHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50ICkuZXEoIDAgKS5jbG9uZSggdHJ1ZSApO1xuXG5cdFx0XHRpZiAoIHRoaXNbIDAgXS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR3cmFwLmluc2VydEJlZm9yZSggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHdyYXAubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGVsZW0gPSB0aGlzO1xuXG5cdFx0XHRcdHdoaWxlICggZWxlbS5maXJzdEVsZW1lbnRDaGlsZCApIHtcblx0XHRcdFx0XHRlbGVtID0gZWxlbS5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbGVtO1xuXHRcdFx0fSApLmFwcGVuZCggdGhpcyApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBJbm5lciggaHRtbC5jYWxsKCB0aGlzLCBpICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksXG5cdFx0XHRcdGNvbnRlbnRzID0gc2VsZi5jb250ZW50cygpO1xuXG5cdFx0XHRpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHtcblx0XHRcdFx0Y29udGVudHMud3JhcEFsbCggaHRtbCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLmFwcGVuZCggaHRtbCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHR3cmFwOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgaXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGlzRnVuY3Rpb24gPyBodG1sLmNhbGwoIHRoaXMsIGkgKSA6IGh0bWwgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0dW53cmFwOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggIWpRdWVyeS5ub2RlTmFtZSggdGhpcywgXCJib2R5XCIgKSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApO1xuXHRcdFx0fVxuXHRcdH0gKS5lbmQoKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHByLmZpbHRlcnMuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhalF1ZXJ5LmV4cHIuZmlsdGVycy52aXNpYmxlKCBlbGVtICk7XG59O1xualF1ZXJ5LmV4cHIuZmlsdGVycy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0Ly8gU3VwcG9ydDogT3BlcmEgPD0gMTIuMTJcblx0Ly8gT3BlcmEgcmVwb3J0cyBvZmZzZXRXaWR0aHMgYW5kIG9mZnNldEhlaWdodHMgbGVzcyB0aGFuIHplcm8gb24gc29tZSBlbGVtZW50c1xuXHQvLyBVc2UgT1IgaW5zdGVhZCBvZiBBTkQgYXMgdGhlIGVsZW1lbnQgaXMgbm90IHZpc2libGUgaWYgZWl0aGVyIGlzIHRydWVcblx0Ly8gU2VlIHRpY2tldHMgIzEwNDA2IGFuZCAjMTMxMzJcblx0cmV0dXJuIGVsZW0ub2Zmc2V0V2lkdGggPiAwIHx8IGVsZW0ub2Zmc2V0SGVpZ2h0ID4gMCB8fCBlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoID4gMDtcbn07XG5cblxuXG5cbnZhciByMjAgPSAvJTIwL2csXG5cdHJicmFja2V0ID0gL1xcW1xcXSQvLFxuXHRyQ1JMRiA9IC9cXHI/XFxuL2csXG5cdHJzdWJtaXR0ZXJUeXBlcyA9IC9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxcblx0cnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO1xuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7XG5cdHZhciBuYW1lO1xuXG5cdGlmICggalF1ZXJ5LmlzQXJyYXkoIG9iaiApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIGFycmF5IGl0ZW0uXG5cdFx0alF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7XG5cdFx0XHRpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkge1xuXG5cdFx0XHRcdC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci5cblx0XHRcdFx0YWRkKCBwcmVmaXgsIHYgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBJdGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9iamVjdCksIGVuY29kZSBpdHMgbnVtZXJpYyBpbmRleC5cblx0XHRcdFx0YnVpbGRQYXJhbXMoXG5cdFx0XHRcdFx0cHJlZml4ICsgXCJbXCIgKyAoIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT0gbnVsbCA/IGkgOiBcIlwiICkgKyBcIl1cIixcblx0XHRcdFx0XHR2LFxuXHRcdFx0XHRcdHRyYWRpdGlvbmFsLFxuXHRcdFx0XHRcdGFkZFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHR9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgalF1ZXJ5LnR5cGUoIG9iaiApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIG9iamVjdCBpdGVtLlxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCArIFwiW1wiICsgbmFtZSArIFwiXVwiLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHNjYWxhciBpdGVtLlxuXHRcdGFkZCggcHJlZml4LCBvYmogKTtcblx0fVxufVxuXG4vLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBvZlxuLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nXG5qUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7XG5cdHZhciBwcmVmaXgsXG5cdFx0cyA9IFtdLFxuXHRcdGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXG5cdFx0XHQvLyBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpbnZva2UgaXQgYW5kIHJldHVybiBpdHMgdmFsdWVcblx0XHRcdHZhbHVlID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgPyB2YWx1ZSgpIDogKCB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICk7XG5cdFx0XHRzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9uZW50KCBrZXkgKSArIFwiPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KCB2YWx1ZSApO1xuXHRcdH07XG5cblx0Ly8gU2V0IHRyYWRpdGlvbmFsIHRvIHRydWUgZm9yIGpRdWVyeSA8PSAxLjMuMiBiZWhhdmlvci5cblx0aWYgKCB0cmFkaXRpb25hbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdHRyYWRpdGlvbmFsID0galF1ZXJ5LmFqYXhTZXR0aW5ncyAmJiBqUXVlcnkuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsO1xuXHR9XG5cblx0Ly8gSWYgYW4gYXJyYXkgd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoYXQgaXQgaXMgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cy5cblx0aWYgKCBqUXVlcnkuaXNBcnJheSggYSApIHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSB0aGUgZm9ybSBlbGVtZW50c1xuXHRcdGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHtcblx0XHRcdGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7XG5cdFx0fSApO1xuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSBcIm9sZFwiIHdheSAodGhlIHdheSAxLjMuMiBvciBvbGRlclxuXHRcdC8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LlxuXHRcdGZvciAoIHByZWZpeCBpbiBhICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uXG5cdHJldHVybiBzLmpvaW4oIFwiJlwiICkucmVwbGFjZSggcjIwLCBcIitcIiApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzZXJpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApO1xuXHR9LFxuXHRzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgXCJlbGVtZW50c1wiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50c1xuXHRcdFx0dmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsIFwiZWxlbWVudHNcIiApO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7XG5cdFx0fSApXG5cdFx0LmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuXHRcdFx0Ly8gVXNlIC5pcyggXCI6ZGlzYWJsZWRcIiApIHNvIHRoYXQgZmllbGRzZXRbZGlzYWJsZWRdIHdvcmtzXG5cdFx0XHRyZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggXCI6ZGlzYWJsZWRcIiApICYmXG5cdFx0XHRcdHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgJiYgIXJzdWJtaXR0ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiZcblx0XHRcdFx0KCB0aGlzLmNoZWNrZWQgfHwgIXJjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApO1xuXHRcdH0gKVxuXHRcdC5tYXAoIGZ1bmN0aW9uKCBpLCBlbGVtICkge1xuXHRcdFx0dmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpO1xuXG5cdFx0XHRyZXR1cm4gdmFsID09IG51bGwgP1xuXHRcdFx0XHRudWxsIDpcblx0XHRcdFx0alF1ZXJ5LmlzQXJyYXkoIHZhbCApID9cblx0XHRcdFx0XHRqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdFx0XHRcdH0gKSA6XG5cdFx0XHRcdFx0eyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdH0gKS5nZXQoKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5hamF4U2V0dGluZ3MueGhyID0gZnVuY3Rpb24oKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxufTtcblxudmFyIHhoclN1Y2Nlc3NTdGF0dXMgPSB7XG5cblx0XHQvLyBGaWxlIHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIGNvZGUgMCwgYXNzdW1lIDIwMFxuXHRcdDA6IDIwMCxcblxuXHRcdC8vIFN1cHBvcnQ6IElFOVxuXHRcdC8vICMxNDUwOiBzb21ldGltZXMgSUUgcmV0dXJucyAxMjIzIHdoZW4gaXQgc2hvdWxkIGJlIDIwNFxuXHRcdDEyMjM6IDIwNFxuXHR9LFxuXHR4aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpO1xuXG5zdXBwb3J0LmNvcnMgPSAhIXhoclN1cHBvcnRlZCAmJiAoIFwid2l0aENyZWRlbnRpYWxzXCIgaW4geGhyU3VwcG9ydGVkICk7XG5zdXBwb3J0LmFqYXggPSB4aHJTdXBwb3J0ZWQgPSAhIXhoclN1cHBvcnRlZDtcblxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHR2YXIgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2s7XG5cblx0Ly8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdFxuXHRpZiAoIHN1cHBvcnQuY29ycyB8fCB4aHJTdXBwb3J0ZWQgJiYgIW9wdGlvbnMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0dmFyIGksXG5cdFx0XHRcdFx0eGhyID0gb3B0aW9ucy54aHIoKTtcblxuXHRcdFx0XHR4aHIub3Blbihcblx0XHRcdFx0XHRvcHRpb25zLnR5cGUsXG5cdFx0XHRcdFx0b3B0aW9ucy51cmwsXG5cdFx0XHRcdFx0b3B0aW9ucy5hc3luYyxcblx0XHRcdFx0XHRvcHRpb25zLnVzZXJuYW1lLFxuXHRcdFx0XHRcdG9wdGlvbnMucGFzc3dvcmRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHQvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0Zm9yICggaSBpbiBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRcdHhoclsgaSBdID0gb3B0aW9ucy54aHJGaWVsZHNbIGkgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHtcblx0XHRcdFx0XHR4aHIub3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9ucy5taW1lVHlwZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXJcblx0XHRcdFx0Ly8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZVxuXHRcdFx0XHQvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLlxuXHRcdFx0XHQvLyAoaXQgY2FuIGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cClcblx0XHRcdFx0Ly8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuXG5cdFx0XHRcdGlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gKSB7XG5cdFx0XHRcdFx0aGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSA9IFwiWE1MSHR0cFJlcXVlc3RcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNldCBoZWFkZXJzXG5cdFx0XHRcdGZvciAoIGkgaW4gaGVhZGVycyApIHtcblx0XHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrID0gZXJyb3JDYWxsYmFjayA9IHhoci5vbmxvYWQgPVxuXHRcdFx0XHRcdFx0XHRcdHhoci5vbmVycm9yID0geGhyLm9uYWJvcnQgPSB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiYWJvcnRcIiApIHtcblx0XHRcdFx0XHRcdFx0XHR4aHIuYWJvcnQoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gXCJlcnJvclwiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUU5XG5cdFx0XHRcdFx0XHRcdFx0Ly8gT24gYSBtYW51YWwgbmF0aXZlIGFib3J0LCBJRTkgdGhyb3dzXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZXJyb3JzIG9uIGFueSBwcm9wZXJ0eSBhY2Nlc3MgdGhhdCBpcyBub3QgcmVhZHlTdGF0ZVxuXHRcdFx0XHRcdFx0XHRcdGlmICggdHlwZW9mIHhoci5zdGF0dXMgIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggMCwgXCJlcnJvclwiICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZpbGU6IHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIDA7IHNlZSAjODYwNSwgIzE0MjA3XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblx0XHRcdFx0XHRcdFx0XHRcdHhoclN1Y2Nlc3NTdGF0dXNbIHhoci5zdGF0dXMgXSB8fCB4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHQsXG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFOSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJRTkgaGFzIG5vIFhIUjIgYnV0IHRocm93cyBvbiBiaW5hcnkgKHRyYWMtMTE0MjYpXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBGb3IgWEhSMiBub24tdGV4dCwgbGV0IHRoZSBjYWxsZXIgaGFuZGxlIGl0IChnaC0yNDk4KVxuXHRcdFx0XHRcdFx0XHRcdFx0KCB4aHIucmVzcG9uc2VUeXBlIHx8IFwidGV4dFwiICkgIT09IFwidGV4dFwiICB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHhoci5yZXNwb25zZVRleHQgIT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IGJpbmFyeTogeGhyLnJlc3BvbnNlIH0gOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IHRleHQ6IHhoci5yZXNwb25zZVRleHQgfSxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vIExpc3RlbiB0byBldmVudHNcblx0XHRcdFx0eGhyLm9ubG9hZCA9IGNhbGxiYWNrKCk7XG5cdFx0XHRcdGVycm9yQ2FsbGJhY2sgPSB4aHIub25lcnJvciA9IGNhbGxiYWNrKCBcImVycm9yXCIgKTtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTlcblx0XHRcdFx0Ly8gVXNlIG9ucmVhZHlzdGF0ZWNoYW5nZSB0byByZXBsYWNlIG9uYWJvcnRcblx0XHRcdFx0Ly8gdG8gaGFuZGxlIHVuY2F1Z2h0IGFib3J0c1xuXHRcdFx0XHRpZiAoIHhoci5vbmFib3J0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0eGhyLm9uYWJvcnQgPSBlcnJvckNhbGxiYWNrO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgcmVhZHlTdGF0ZSBiZWZvcmUgdGltZW91dCBhcyBpdCBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRpZiAoIHhoci5yZWFkeVN0YXRlID09PSA0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFsbG93IG9uZXJyb3IgdG8gYmUgY2FsbGVkIGZpcnN0LFxuXHRcdFx0XHRcdFx0XHQvLyBidXQgdGhhdCB3aWxsIG5vdCBoYW5kbGUgYSBuYXRpdmUgYWJvcnRcblx0XHRcdFx0XHRcdFx0Ly8gQWxzbywgc2F2ZSBlcnJvckNhbGxiYWNrIHRvIGEgdmFyaWFibGVcblx0XHRcdFx0XHRcdFx0Ly8gYXMgeGhyLm9uZXJyb3IgY2Fubm90IGJlIGFjY2Vzc2VkXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIGFib3J0IGNhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gY2FsbGJhY2soIFwiYWJvcnRcIiApO1xuXG5cdFx0XHRcdHRyeSB7XG5cblx0XHRcdFx0XHQvLyBEbyBzZW5kIHRoZSByZXF1ZXN0ICh0aGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24pXG5cdFx0XHRcdFx0eGhyLnNlbmQoIG9wdGlvbnMuaGFzQ29udGVudCAmJiBvcHRpb25zLmRhdGEgfHwgbnVsbCApO1xuXHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdC8vICMxNDY4MzogT25seSByZXRocm93IGlmIHRoaXMgaGFzbid0IGJlZW4gbm90aWZpZWQgYXMgYW4gZXJyb3IgeWV0XG5cdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGVcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0YWNjZXB0czoge1xuXHRcdHNjcmlwdDogXCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIFwiICtcblx0XHRcdFwiYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0XCJcblx0fSxcblx0Y29udGVudHM6IHtcblx0XHRzY3JpcHQ6IC9cXGIoPzpqYXZhfGVjbWEpc2NyaXB0XFxiL1xuXHR9LFxuXHRjb252ZXJ0ZXJzOiB7XG5cdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBjcm9zc0RvbWFpblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRzLmNhY2hlID0gZmFsc2U7XG5cdH1cblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMudHlwZSA9IFwiR0VUXCI7XG5cdH1cbn0gKTtcblxuLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0XG5qUXVlcnkuYWpheFRyYW5zcG9ydCggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cblx0Ly8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiByZXF1ZXN0c1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0dmFyIHNjcmlwdCwgY2FsbGJhY2s7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBfLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0c2NyaXB0ID0galF1ZXJ5KCBcIjxzY3JpcHQ+XCIgKS5wcm9wKCB7XG5cdFx0XHRcdFx0Y2hhcnNldDogcy5zY3JpcHRDaGFyc2V0LFxuXHRcdFx0XHRcdHNyYzogcy51cmxcblx0XHRcdFx0fSApLm9uKFxuXHRcdFx0XHRcdFwibG9hZCBlcnJvclwiLFxuXHRcdFx0XHRcdGNhbGxiYWNrID0gZnVuY3Rpb24oIGV2dCApIHtcblx0XHRcdFx0XHRcdHNjcmlwdC5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdGNhbGxiYWNrID0gbnVsbDtcblx0XHRcdFx0XHRcdGlmICggZXZ0ICkge1xuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggZXZ0LnR5cGUgPT09IFwiZXJyb3JcIiA/IDQwNCA6IDIwMCwgZXZ0LnR5cGUgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gVXNlIG5hdGl2ZSBET00gbWFuaXB1bGF0aW9uIHRvIGF2b2lkIG91ciBkb21NYW5pcCBBSkFYIHRyaWNrZXJ5XG5cdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdFsgMCBdICk7XG5cdFx0XHR9LFxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBvbGRDYWxsYmFja3MgPSBbXSxcblx0cmpzb25wID0gLyg9KVxcPyg/PSZ8JCl8XFw/XFw/LztcblxuLy8gRGVmYXVsdCBqc29ucCBzZXR0aW5nc1xualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRqc29ucDogXCJjYWxsYmFja1wiLFxuXHRqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwgKCBqUXVlcnkuZXhwYW5kbyArIFwiX1wiICsgKCBub25jZSsrICkgKTtcblx0XHR0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTtcblx0XHRyZXR1cm4gY2FsbGJhY2s7XG5cdH1cbn0gKTtcblxuLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJqc29uIGpzb25wXCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHtcblxuXHR2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsXG5cdFx0anNvblByb3AgPSBzLmpzb25wICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0KCBzLnVybCApID9cblx0XHRcdFwidXJsXCIgOlxuXHRcdFx0dHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApXG5cdFx0XHRcdFx0LmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCAmJlxuXHRcdFx0XHRyanNvbnAudGVzdCggcy5kYXRhICkgJiYgXCJkYXRhXCJcblx0XHQpO1xuXG5cdC8vIEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyBcImpzb25wXCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXRcblx0aWYgKCBqc29uUHJvcCB8fCBzLmRhdGFUeXBlc1sgMCBdID09PSBcImpzb25wXCIgKSB7XG5cblx0XHQvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0XG5cdFx0Y2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0galF1ZXJ5LmlzRnVuY3Rpb24oIHMuanNvbnBDYWxsYmFjayApID9cblx0XHRcdHMuanNvbnBDYWxsYmFjaygpIDpcblx0XHRcdHMuanNvbnBDYWxsYmFjaztcblxuXHRcdC8vIEluc2VydCBjYWxsYmFjayBpbnRvIHVybCBvciBmb3JtIGRhdGFcblx0XHRpZiAoIGpzb25Qcm9wICkge1xuXHRcdFx0c1sganNvblByb3AgXSA9IHNbIGpzb25Qcm9wIF0ucmVwbGFjZSggcmpzb25wLCBcIiQxXCIgKyBjYWxsYmFja05hbWUgKTtcblx0XHR9IGVsc2UgaWYgKCBzLmpzb25wICE9PSBmYWxzZSApIHtcblx0XHRcdHMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmpzb25wICsgXCI9XCIgKyBjYWxsYmFja05hbWU7XG5cdFx0fVxuXG5cdFx0Ly8gVXNlIGRhdGEgY29udmVydGVyIHRvIHJldHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4ZWN1dGlvblxuXHRcdHMuY29udmVydGVyc1sgXCJzY3JpcHQganNvblwiIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggIXJlc3BvbnNlQ29udGFpbmVyICkge1xuXHRcdFx0XHRqUXVlcnkuZXJyb3IoIGNhbGxiYWNrTmFtZSArIFwiIHdhcyBub3QgY2FsbGVkXCIgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXNwb25zZUNvbnRhaW5lclsgMCBdO1xuXHRcdH07XG5cblx0XHQvLyBGb3JjZSBqc29uIGRhdGFUeXBlXG5cdFx0cy5kYXRhVHlwZXNbIDAgXSA9IFwianNvblwiO1xuXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja1xuXHRcdG92ZXJ3cml0dGVuID0gd2luZG93WyBjYWxsYmFja05hbWUgXTtcblx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IGFyZ3VtZW50cztcblx0XHR9O1xuXG5cdFx0Ly8gQ2xlYW4tdXAgZnVuY3Rpb24gKGZpcmVzIGFmdGVyIGNvbnZlcnRlcnMpXG5cdFx0anFYSFIuYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gSWYgcHJldmlvdXMgdmFsdWUgZGlkbid0IGV4aXN0IC0gcmVtb3ZlIGl0XG5cdFx0XHRpZiAoIG92ZXJ3cml0dGVuID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdGpRdWVyeSggd2luZG93ICkucmVtb3ZlUHJvcCggY2FsbGJhY2tOYW1lICk7XG5cblx0XHRcdC8vIE90aGVyd2lzZSByZXN0b3JlIHByZWV4aXN0aW5nIHZhbHVlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNhdmUgYmFjayBhcyBmcmVlXG5cdFx0XHRpZiAoIHNbIGNhbGxiYWNrTmFtZSBdICkge1xuXG5cdFx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHJlLXVzaW5nIHRoZSBvcHRpb25zIGRvZXNuJ3Qgc2NyZXcgdGhpbmdzIGFyb3VuZFxuXHRcdFx0XHRzLmpzb25wQ2FsbGJhY2sgPSBvcmlnaW5hbFNldHRpbmdzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHRcdFx0Ly8gU2F2ZSB0aGUgY2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZVxuXHRcdFx0XHRvbGRDYWxsYmFja3MucHVzaCggY2FsbGJhY2tOYW1lICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENhbGwgaWYgaXQgd2FzIGEgZnVuY3Rpb24gYW5kIHdlIGhhdmUgYSByZXNwb25zZVxuXHRcdFx0aWYgKCByZXNwb25zZUNvbnRhaW5lciAmJiBqUXVlcnkuaXNGdW5jdGlvbiggb3ZlcndyaXR0ZW4gKSApIHtcblx0XHRcdFx0b3ZlcndyaXR0ZW4oIHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3JpdHRlbiA9IHVuZGVmaW5lZDtcblx0XHR9ICk7XG5cblx0XHQvLyBEZWxlZ2F0ZSB0byBzY3JpcHRcblx0XHRyZXR1cm4gXCJzY3JpcHRcIjtcblx0fVxufSApO1xuXG5cblxuXG4vLyBBcmd1bWVudCBcImRhdGFcIiBzaG91bGQgYmUgc3RyaW5nIG9mIGh0bWxcbi8vIGNvbnRleHQgKG9wdGlvbmFsKTogSWYgc3BlY2lmaWVkLCB0aGUgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkIGluIHRoaXMgY29udGV4dCxcbi8vIGRlZmF1bHRzIHRvIGRvY3VtZW50XG4vLyBrZWVwU2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nXG5qUXVlcnkucGFyc2VIVE1MID0gZnVuY3Rpb24oIGRhdGEsIGNvbnRleHQsIGtlZXBTY3JpcHRzICkge1xuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGtlZXBTY3JpcHRzID0gY29udGV4dDtcblx0XHRjb250ZXh0ID0gZmFsc2U7XG5cdH1cblx0Y29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7XG5cblx0dmFyIHBhcnNlZCA9IHJzaW5nbGVUYWcuZXhlYyggZGF0YSApLFxuXHRcdHNjcmlwdHMgPSAha2VlcFNjcmlwdHMgJiYgW107XG5cblx0Ly8gU2luZ2xlIHRhZ1xuXHRpZiAoIHBhcnNlZCApIHtcblx0XHRyZXR1cm4gWyBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIHBhcnNlZFsgMSBdICkgXTtcblx0fVxuXG5cdHBhcnNlZCA9IGJ1aWxkRnJhZ21lbnQoIFsgZGF0YSBdLCBjb250ZXh0LCBzY3JpcHRzICk7XG5cblx0aWYgKCBzY3JpcHRzICYmIHNjcmlwdHMubGVuZ3RoICkge1xuXHRcdGpRdWVyeSggc2NyaXB0cyApLnJlbW92ZSgpO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIHBhcnNlZC5jaGlsZE5vZGVzICk7XG59O1xuXG5cbi8vIEtlZXAgYSBjb3B5IG9mIHRoZSBvbGQgbG9hZCBtZXRob2RcbnZhciBfbG9hZCA9IGpRdWVyeS5mbi5sb2FkO1xuXG4vKipcbiAqIExvYWQgYSB1cmwgaW50byBhIHBhZ2VcbiAqL1xualF1ZXJ5LmZuLmxvYWQgPSBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkge1xuXHRpZiAoIHR5cGVvZiB1cmwgIT09IFwic3RyaW5nXCIgJiYgX2xvYWQgKSB7XG5cdFx0cmV0dXJuIF9sb2FkLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fVxuXG5cdHZhciBzZWxlY3RvciwgdHlwZSwgcmVzcG9uc2UsXG5cdFx0c2VsZiA9IHRoaXMsXG5cdFx0b2ZmID0gdXJsLmluZGV4T2YoIFwiIFwiICk7XG5cblx0aWYgKCBvZmYgPiAtMSApIHtcblx0XHRzZWxlY3RvciA9IGpRdWVyeS50cmltKCB1cmwuc2xpY2UoIG9mZiApICk7XG5cdFx0dXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTtcblx0fVxuXG5cdC8vIElmIGl0J3MgYSBmdW5jdGlvblxuXHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHtcblxuXHRcdC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrXG5cdFx0Y2FsbGJhY2sgPSBwYXJhbXM7XG5cdFx0cGFyYW1zID0gdW5kZWZpbmVkO1xuXG5cdC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmdcblx0fSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0dHlwZSA9IFwiUE9TVFwiO1xuXHR9XG5cblx0Ly8gSWYgd2UgaGF2ZSBlbGVtZW50cyB0byBtb2RpZnksIG1ha2UgdGhlIHJlcXVlc3Rcblx0aWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7XG5cdFx0alF1ZXJ5LmFqYXgoIHtcblx0XHRcdHVybDogdXJsLFxuXG5cdFx0XHQvLyBJZiBcInR5cGVcIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gXCJHRVRcIiBtZXRob2Qgd2lsbCBiZSB1c2VkLlxuXHRcdFx0Ly8gTWFrZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGV4cGxpY2l0IHNpbmNlXG5cdFx0XHQvLyB1c2VyIGNhbiBvdmVycmlkZSBpdCB0aHJvdWdoIGFqYXhTZXR1cCBtZXRob2Rcblx0XHRcdHR5cGU6IHR5cGUgfHwgXCJHRVRcIixcblx0XHRcdGRhdGFUeXBlOiBcImh0bWxcIixcblx0XHRcdGRhdGE6IHBhcmFtc1xuXHRcdH0gKS5kb25lKCBmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkge1xuXG5cdFx0XHQvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2tcblx0XHRcdHJlc3BvbnNlID0gYXJndW1lbnRzO1xuXG5cdFx0XHRzZWxmLmh0bWwoIHNlbGVjdG9yID9cblxuXHRcdFx0XHQvLyBJZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXZcblx0XHRcdFx0Ly8gRXhjbHVkZSBzY3JpcHRzIHRvIGF2b2lkIElFICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzXG5cdFx0XHRcdGpRdWVyeSggXCI8ZGl2PlwiICkuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCByZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0XG5cdFx0XHRcdHJlc3BvbnNlVGV4dCApO1xuXG5cdFx0Ly8gSWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImRhdGFcIiwgXCJzdGF0dXNcIiwgXCJqcVhIUlwiXG5cdFx0Ly8gYnV0IHRoZXkgYXJlIGlnbm9yZWQgYmVjYXVzZSByZXNwb25zZSB3YXMgc2V0IGFib3ZlLlxuXHRcdC8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJqcVhIUlwiLCBcInN0YXR1c1wiLCBcImVycm9yXCJcblx0XHR9ICkuYWx3YXlzKCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHtcblx0XHRcdHNlbGYuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5cblxuXG4vLyBBdHRhY2ggYSBidW5jaCBvZiBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGNvbW1vbiBBSkFYIGV2ZW50c1xualF1ZXJ5LmVhY2goIFtcblx0XCJhamF4U3RhcnRcIixcblx0XCJhamF4U3RvcFwiLFxuXHRcImFqYXhDb21wbGV0ZVwiLFxuXHRcImFqYXhFcnJvclwiLFxuXHRcImFqYXhTdWNjZXNzXCIsXG5cdFwiYWpheFNlbmRcIlxuXSwgZnVuY3Rpb24oIGksIHR5cGUgKSB7XG5cdGpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlLCBmbiApO1xuXHR9O1xufSApO1xuXG5cblxuXG5qUXVlcnkuZXhwci5maWx0ZXJzLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiBqUXVlcnkuZ3JlcCggalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiBlbGVtID09PSBmbi5lbGVtO1xuXHR9ICkubGVuZ3RoO1xufTtcblxuXG5cblxuLyoqXG4gKiBHZXRzIGEgd2luZG93IGZyb20gYW4gZWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRXaW5kb3coIGVsZW0gKSB7XG5cdHJldHVybiBqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSA/IGVsZW0gOiBlbGVtLm5vZGVUeXBlID09PSA5ICYmIGVsZW0uZGVmYXVsdFZpZXc7XG59XG5cbmpRdWVyeS5vZmZzZXQgPSB7XG5cdHNldE9mZnNldDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGkgKSB7XG5cdFx0dmFyIGN1clBvc2l0aW9uLCBjdXJMZWZ0LCBjdXJDU1NUb3AsIGN1clRvcCwgY3VyT2Zmc2V0LCBjdXJDU1NMZWZ0LCBjYWxjdWxhdGVQb3NpdGlvbixcblx0XHRcdHBvc2l0aW9uID0galF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICksXG5cdFx0XHRjdXJFbGVtID0galF1ZXJ5KCBlbGVtICksXG5cdFx0XHRwcm9wcyA9IHt9O1xuXG5cdFx0Ly8gU2V0IHBvc2l0aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbVxuXHRcdGlmICggcG9zaXRpb24gPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRlbGVtLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuXHRcdH1cblxuXHRcdGN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCk7XG5cdFx0Y3VyQ1NTVG9wID0galF1ZXJ5LmNzcyggZWxlbSwgXCJ0b3BcIiApO1xuXHRcdGN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImxlZnRcIiApO1xuXHRcdGNhbGN1bGF0ZVBvc2l0aW9uID0gKCBwb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiIHx8IHBvc2l0aW9uID09PSBcImZpeGVkXCIgKSAmJlxuXHRcdFx0KCBjdXJDU1NUb3AgKyBjdXJDU1NMZWZ0ICkuaW5kZXhPZiggXCJhdXRvXCIgKSA+IC0xO1xuXG5cdFx0Ly8gTmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXJcblx0XHQvLyB0b3Agb3IgbGVmdCBpcyBhdXRvIGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUgb3IgZml4ZWRcblx0XHRpZiAoIGNhbGN1bGF0ZVBvc2l0aW9uICkge1xuXHRcdFx0Y3VyUG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7XG5cdFx0XHRjdXJUb3AgPSBjdXJQb3NpdGlvbi50b3A7XG5cdFx0XHRjdXJMZWZ0ID0gY3VyUG9zaXRpb24ubGVmdDtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwO1xuXHRcdFx0Y3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwO1xuXHRcdH1cblxuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHtcblxuXHRcdFx0Ly8gVXNlIGpRdWVyeS5leHRlbmQgaGVyZSB0byBhbGxvdyBtb2RpZmljYXRpb24gb2YgY29vcmRpbmF0ZXMgYXJndW1lbnQgKGdoLTE4NDgpXG5cdFx0XHRvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyT2Zmc2V0ICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wO1xuXHRcdH1cblx0XHRpZiAoIG9wdGlvbnMubGVmdCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7XG5cdFx0fVxuXG5cdFx0aWYgKCBcInVzaW5nXCIgaW4gb3B0aW9ucyApIHtcblx0XHRcdG9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJFbGVtLmNzcyggcHJvcHMgKTtcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0b2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0dGhpcyA6XG5cdFx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTtcblx0XHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHZhciBkb2NFbGVtLCB3aW4sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0Ym94ID0geyB0b3A6IDAsIGxlZnQ6IDAgfSxcblx0XHRcdGRvYyA9IGVsZW0gJiYgZWxlbS5vd25lckRvY3VtZW50O1xuXG5cdFx0aWYgKCAhZG9jICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGRvY0VsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuXG5cdFx0Ly8gTWFrZSBzdXJlIGl0J3Mgbm90IGEgZGlzY29ubmVjdGVkIERPTSBub2RlXG5cdFx0aWYgKCAhalF1ZXJ5LmNvbnRhaW5zKCBkb2NFbGVtLCBlbGVtICkgKSB7XG5cdFx0XHRyZXR1cm4gYm94O1xuXHRcdH1cblxuXHRcdGJveCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0d2luID0gZ2V0V2luZG93KCBkb2MgKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBib3gudG9wICsgd2luLnBhZ2VZT2Zmc2V0IC0gZG9jRWxlbS5jbGllbnRUb3AsXG5cdFx0XHRsZWZ0OiBib3gubGVmdCArIHdpbi5wYWdlWE9mZnNldCAtIGRvY0VsZW0uY2xpZW50TGVmdFxuXHRcdH07XG5cdH0sXG5cblx0cG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggIXRoaXNbIDAgXSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgb2Zmc2V0UGFyZW50LCBvZmZzZXQsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0cGFyZW50T2Zmc2V0ID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblxuXHRcdC8vIEZpeGVkIGVsZW1lbnRzIGFyZSBvZmZzZXQgZnJvbSB3aW5kb3cgKHBhcmVudE9mZnNldCA9IHt0b3A6MCwgbGVmdDogMH0sXG5cdFx0Ly8gYmVjYXVzZSBpdCBpcyBpdHMgb25seSBvZmZzZXQgcGFyZW50XG5cdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSA9PT0gXCJmaXhlZFwiICkge1xuXG5cdFx0XHQvLyBBc3N1bWUgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGlzIHRoZXJlIHdoZW4gY29tcHV0ZWQgcG9zaXRpb24gaXMgZml4ZWRcblx0XHRcdG9mZnNldCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBHZXQgKnJlYWwqIG9mZnNldFBhcmVudFxuXHRcdFx0b2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQoKTtcblxuXHRcdFx0Ly8gR2V0IGNvcnJlY3Qgb2Zmc2V0c1xuXHRcdFx0b2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTtcblx0XHRcdGlmICggIWpRdWVyeS5ub2RlTmFtZSggb2Zmc2V0UGFyZW50WyAwIF0sIFwiaHRtbFwiICkgKSB7XG5cdFx0XHRcdHBhcmVudE9mZnNldCA9IG9mZnNldFBhcmVudC5vZmZzZXQoKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIG9mZnNldFBhcmVudCBib3JkZXJzXG5cdFx0XHRwYXJlbnRPZmZzZXQudG9wICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudFsgMCBdLCBcImJvcmRlclRvcFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdHBhcmVudE9mZnNldC5sZWZ0ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudFsgMCBdLCBcImJvcmRlckxlZnRXaWR0aFwiLCB0cnVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2luc1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5Ub3BcIiwgdHJ1ZSApLFxuXHRcdFx0bGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luTGVmdFwiLCB0cnVlIClcblx0XHR9O1xuXHR9LFxuXG5cdC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuXHQvLyAxKSBGb3IgdGhlIGVsZW1lbnQgaW5zaWRlIHRoZSBpZnJhbWUgd2l0aG91dCBvZmZzZXRQYXJlbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuXG5cdC8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUgcGFyZW50IHdpbmRvd1xuXHQvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50XG5cdC8vIDMpIEZvciBib2R5IG9yIGh0bWwgZWxlbWVudCwgaS5lLiBpbiBjYXNlIG9mIHRoZSBodG1sIG5vZGUgLSBpdCB3aWxsIHJldHVybiBpdHNlbGZcblx0Ly9cblx0Ly8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzXG5cdC8vIGFuZCBtaWdodCBiZSBjb25zaWRlcmVkIGFzIG1vcmUgcHJlZmVyYWJsZSByZXN1bHRzLlxuXHQvL1xuXHQvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZVxuXHRvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7XG5cblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50O1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG4vLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6IFwicGFnZVhPZmZzZXRcIiwgc2Nyb2xsVG9wOiBcInBhZ2VZT2Zmc2V0XCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHtcblx0dmFyIHRvcCA9IFwicGFnZVlPZmZzZXRcIiA9PT0gcHJvcDtcblxuXHRqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7XG5cdFx0XHR2YXIgd2luID0gZ2V0V2luZG93KCBlbGVtICk7XG5cblx0XHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiB3aW4gPyB3aW5bIHByb3AgXSA6IGVsZW1bIG1ldGhvZCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHdpbiApIHtcblx0XHRcdFx0d2luLnNjcm9sbFRvKFxuXHRcdFx0XHRcdCF0b3AgPyB2YWwgOiB3aW4ucGFnZVhPZmZzZXQsXG5cdFx0XHRcdFx0dG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0XG5cdFx0XHRcdCk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1bIG1ldGhvZCBdID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH07XG59ICk7XG5cbi8vIFN1cHBvcnQ6IFNhZmFyaTw3LTgrLCBDaHJvbWU8MzctNDQrXG4vLyBBZGQgdGhlIHRvcC9sZWZ0IGNzc0hvb2tzIHVzaW5nIGpRdWVyeS5mbi5wb3NpdGlvblxuLy8gV2Via2l0IGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDg0XG4vLyBCbGluayBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMjkyODBcbi8vIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyBwZXJjZW50IHdoZW4gc3BlY2lmaWVkIGZvciB0b3AvbGVmdC9ib3R0b20vcmlnaHQ7XG4vLyByYXRoZXIgdGhhbiBtYWtlIHRoZSBjc3MgbW9kdWxlIGRlcGVuZCBvbiB0aGUgb2Zmc2V0IG1vZHVsZSwganVzdCBjaGVjayBmb3IgaXQgaGVyZVxualF1ZXJ5LmVhY2goIFsgXCJ0b3BcIiwgXCJsZWZ0XCIgXSwgZnVuY3Rpb24oIGksIHByb3AgKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJvcCBdID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnBpeGVsUG9zaXRpb24sXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdFx0Y29tcHV0ZWQgPSBjdXJDU1MoIGVsZW0sIHByb3AgKTtcblxuXHRcdFx0XHQvLyBJZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50YWdlLCBmYWxsYmFjayB0byBvZmZzZXRcblx0XHRcdFx0cmV0dXJuIHJudW1ub25weC50ZXN0KCBjb21wdXRlZCApID9cblx0XHRcdFx0XHRqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyBcInB4XCIgOlxuXHRcdFx0XHRcdGNvbXB1dGVkO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn0gKTtcblxuXG4vLyBDcmVhdGUgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIGhlaWdodCwgd2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IEhlaWdodDogXCJoZWlnaHRcIiwgV2lkdGg6IFwid2lkdGhcIiB9LCBmdW5jdGlvbiggbmFtZSwgdHlwZSApIHtcblx0alF1ZXJ5LmVhY2goIHsgcGFkZGluZzogXCJpbm5lclwiICsgbmFtZSwgY29udGVudDogdHlwZSwgXCJcIjogXCJvdXRlclwiICsgbmFtZSB9LFxuXHRcdGZ1bmN0aW9uKCBkZWZhdWx0RXh0cmEsIGZ1bmNOYW1lICkge1xuXG5cdFx0Ly8gTWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoXG5cdFx0alF1ZXJ5LmZuWyBmdW5jTmFtZSBdID0gZnVuY3Rpb24oIG1hcmdpbiwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgY2hhaW5hYmxlID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRFeHRyYSB8fCB0eXBlb2YgbWFyZ2luICE9PSBcImJvb2xlYW5cIiApLFxuXHRcdFx0XHRleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/IFwibWFyZ2luXCIgOiBcImJvcmRlclwiICk7XG5cblx0XHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIGRvYztcblxuXHRcdFx0XHRpZiAoIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gQXMgb2YgNS84LzIwMTIgdGhpcyB3aWxsIHlpZWxkIGluY29ycmVjdCByZXN1bHRzIGZvciBNb2JpbGUgU2FmYXJpLCBidXQgdGhlcmVcblx0XHRcdFx0XHQvLyBpc24ndCBhIHdob2xlIGxvdCB3ZSBjYW4gZG8uIFNlZSBwdWxsIHJlcXVlc3QgYXQgdGhpcyBVUkwgZm9yIGRpc2N1c3Npb246XG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC83NjRcblx0XHRcdFx0XHRyZXR1cm4gZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIFwiY2xpZW50XCIgKyBuYW1lIF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDtcblxuXHRcdFx0XHRcdC8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgvSGVpZ2h0XSBvciBjbGllbnRbV2lkdGgvSGVpZ2h0XSxcblx0XHRcdFx0XHQvLyB3aGljaGV2ZXIgaXMgZ3JlYXRlc3Rcblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwic2Nyb2xsXCIgKyBuYW1lIF0sIGRvY1sgXCJzY3JvbGxcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJvZmZzZXRcIiArIG5hbWUgXSwgZG9jWyBcIm9mZnNldFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZG9jWyBcImNsaWVudFwiICsgbmFtZSBdXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblxuXHRcdFx0XHRcdC8vIEdldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNlRmxvYXRcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCBleHRyYSApIDpcblxuXHRcdFx0XHRcdC8vIFNldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnRcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApO1xuXHRcdFx0fSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUsIG51bGwgKTtcblx0XHR9O1xuXHR9ICk7XG59ICk7XG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdGJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub2ZmKCB0eXBlcywgbnVsbCwgZm4gKTtcblx0fSxcblxuXHRkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7XG5cblx0XHQvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZuXSApXG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgP1xuXHRcdFx0dGhpcy5vZmYoIHNlbGVjdG9yLCBcIioqXCIgKSA6XG5cdFx0XHR0aGlzLm9mZiggdHlwZXMsIHNlbGVjdG9yIHx8IFwiKipcIiwgZm4gKTtcblx0fSxcblx0c2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubGVuZ3RoO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5hbmRTZWxmID0galF1ZXJ5LmZuLmFkZEJhY2s7XG5cblxuXG5cbi8vIFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlclxuLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwgYnV0IG5vdCB2aWEgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdFxuLy8gdW5kZXJzdGFuZHMgYW5vbnltb3VzIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0XG4vLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlXG4vLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2Vcbi8vIGZpbGUgbmFtZS4gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50c1xuLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLlxuXG4vLyBOb3RlIHRoYXQgZm9yIG1heGltdW0gcG9ydGFiaWxpdHksIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZFxuLy8gZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBpZiBhblxuLy8gQU1EIGxvYWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVjaWFsIGNhc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcy93aWtpL1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtpLWFub25cblxuaWYgKCB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCApIHtcblx0ZGVmaW5lKCBcImpxdWVyeVwiLCBbXSwgZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeTtcblx0fSApO1xufVxuXG5cblxudmFyXG5cblx0Ly8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LFxuXG5cdC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF8kID0gd2luZG93LiQ7XG5cbmpRdWVyeS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oIGRlZXAgKSB7XG5cdGlmICggd2luZG93LiQgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cuJCA9IF8kO1xuXHR9XG5cblx0aWYgKCBkZWVwICYmIHdpbmRvdy5qUXVlcnkgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnk7XG59O1xuXG4vLyBFeHBvc2UgalF1ZXJ5IGFuZCAkIGlkZW50aWZpZXJzLCBldmVuIGluIEFNRFxuLy8gKCM3MTAyI2NvbW1lbnQ6MTAsIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNTU3KVxuLy8gYW5kIENvbW1vbkpTIGZvciBicm93c2VyIGVtdWxhdG9ycyAoIzEzNTY2KVxuaWYgKCAhbm9HbG9iYWwgKSB7XG5cdHdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTtcbn1cblxucmV0dXJuIGpRdWVyeTtcbn0pKTtcbiIsIi8vICAgICBVbmRlcnNjb3JlLmpzIDEuNS4xXG4vLyAgICAgaHR0cDovL3VuZGVyc2NvcmVqcy5vcmdcbi8vICAgICAoYykgMjAwOS0yMDEzIEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4vLyAgICAgVW5kZXJzY29yZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cblxuKGZ1bmN0aW9uKCkge1xuXG4gIC8vIEJhc2VsaW5lIHNldHVwXG4gIC8vIC0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRXN0YWJsaXNoIHRoZSByb290IG9iamVjdCwgYHdpbmRvd2AgaW4gdGhlIGJyb3dzZXIsIG9yIGBnbG9iYWxgIG9uIHRoZSBzZXJ2ZXIuXG4gIHZhciByb290ID0gdGhpcztcblxuICAvLyBTYXZlIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgYF9gIHZhcmlhYmxlLlxuICB2YXIgcHJldmlvdXNVbmRlcnNjb3JlID0gcm9vdC5fO1xuXG4gIC8vIEVzdGFibGlzaCB0aGUgb2JqZWN0IHRoYXQgZ2V0cyByZXR1cm5lZCB0byBicmVhayBvdXQgb2YgYSBsb29wIGl0ZXJhdGlvbi5cbiAgdmFyIGJyZWFrZXIgPSB7fTtcblxuICAvLyBTYXZlIGJ5dGVzIGluIHRoZSBtaW5pZmllZCAoYnV0IG5vdCBnemlwcGVkKSB2ZXJzaW9uOlxuICB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSwgT2JqUHJvdG8gPSBPYmplY3QucHJvdG90eXBlLCBGdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbiAgLy8gQ3JlYXRlIHF1aWNrIHJlZmVyZW5jZSB2YXJpYWJsZXMgZm9yIHNwZWVkIGFjY2VzcyB0byBjb3JlIHByb3RvdHlwZXMuXG4gIHZhclxuICAgIHB1c2ggICAgICAgICAgICAgPSBBcnJheVByb3RvLnB1c2gsXG4gICAgc2xpY2UgICAgICAgICAgICA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgY29uY2F0ICAgICAgICAgICA9IEFycmF5UHJvdG8uY29uY2F0LFxuICAgIHRvU3RyaW5nICAgICAgICAgPSBPYmpQcm90by50b1N0cmluZyxcbiAgICBoYXNPd25Qcm9wZXJ0eSAgID0gT2JqUHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbiAgLy8gQWxsICoqRUNNQVNjcmlwdCA1KiogbmF0aXZlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyB0aGF0IHdlIGhvcGUgdG8gdXNlXG4gIC8vIGFyZSBkZWNsYXJlZCBoZXJlLlxuICB2YXJcbiAgICBuYXRpdmVGb3JFYWNoICAgICAgPSBBcnJheVByb3RvLmZvckVhY2gsXG4gICAgbmF0aXZlTWFwICAgICAgICAgID0gQXJyYXlQcm90by5tYXAsXG4gICAgbmF0aXZlUmVkdWNlICAgICAgID0gQXJyYXlQcm90by5yZWR1Y2UsXG4gICAgbmF0aXZlUmVkdWNlUmlnaHQgID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodCxcbiAgICBuYXRpdmVGaWx0ZXIgICAgICAgPSBBcnJheVByb3RvLmZpbHRlcixcbiAgICBuYXRpdmVFdmVyeSAgICAgICAgPSBBcnJheVByb3RvLmV2ZXJ5LFxuICAgIG5hdGl2ZVNvbWUgICAgICAgICA9IEFycmF5UHJvdG8uc29tZSxcbiAgICBuYXRpdmVJbmRleE9mICAgICAgPSBBcnJheVByb3RvLmluZGV4T2YsXG4gICAgbmF0aXZlTGFzdEluZGV4T2YgID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZixcbiAgICBuYXRpdmVJc0FycmF5ICAgICAgPSBBcnJheS5pc0FycmF5LFxuICAgIG5hdGl2ZUtleXMgICAgICAgICA9IE9iamVjdC5rZXlzLFxuICAgIG5hdGl2ZUJpbmQgICAgICAgICA9IEZ1bmNQcm90by5iaW5kO1xuXG4gIC8vIENyZWF0ZSBhIHNhZmUgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgdXNlIGJlbG93LlxuICB2YXIgXyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBfKSByZXR1cm4gb2JqO1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBfKSkgcmV0dXJuIG5ldyBfKG9iaik7XG4gICAgdGhpcy5fd3JhcHBlZCA9IG9iajtcbiAgfTtcblxuICAvLyBFeHBvcnQgdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZvciAqKk5vZGUuanMqKiwgd2l0aFxuICAvLyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBmb3IgdGhlIG9sZCBgcmVxdWlyZSgpYCBBUEkuIElmIHdlJ3JlIGluXG4gIC8vIHRoZSBicm93c2VyLCBhZGQgYF9gIGFzIGEgZ2xvYmFsIG9iamVjdCB2aWEgYSBzdHJpbmcgaWRlbnRpZmllcixcbiAgLy8gZm9yIENsb3N1cmUgQ29tcGlsZXIgXCJhZHZhbmNlZFwiIG1vZGUuXG4gIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IF87XG4gICAgfVxuICAgIGV4cG9ydHMuXyA9IF87XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5fID0gXztcbiAgfVxuXG4gIC8vIEN1cnJlbnQgdmVyc2lvbi5cbiAgXy5WRVJTSU9OID0gJzEuNS4xJztcblxuICAvLyBDb2xsZWN0aW9uIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFRoZSBjb3JuZXJzdG9uZSwgYW4gYGVhY2hgIGltcGxlbWVudGF0aW9uLCBha2EgYGZvckVhY2hgLlxuICAvLyBIYW5kbGVzIG9iamVjdHMgd2l0aCB0aGUgYnVpbHQtaW4gYGZvckVhY2hgLCBhcnJheXMsIGFuZCByYXcgb2JqZWN0cy5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYGZvckVhY2hgIGlmIGF2YWlsYWJsZS5cbiAgdmFyIGVhY2ggPSBfLmVhY2ggPSBfLmZvckVhY2ggPSBmdW5jdGlvbihvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm47XG4gICAgaWYgKG5hdGl2ZUZvckVhY2ggJiYgb2JqLmZvckVhY2ggPT09IG5hdGl2ZUZvckVhY2gpIHtcbiAgICAgIG9iai5mb3JFYWNoKGl0ZXJhdG9yLCBjb250ZXh0KTtcbiAgICB9IGVsc2UgaWYgKG9iai5sZW5ndGggPT09ICtvYmoubGVuZ3RoKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopID09PSBicmVha2VyKSByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKF8uaGFzKG9iaiwga2V5KSkge1xuICAgICAgICAgIGlmIChpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtrZXldLCBrZXksIG9iaikgPT09IGJyZWFrZXIpIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdG9yIHRvIGVhY2ggZWxlbWVudC5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYG1hcGAgaWYgYXZhaWxhYmxlLlxuICBfLm1hcCA9IF8uY29sbGVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHJlc3VsdHM7XG4gICAgaWYgKG5hdGl2ZU1hcCAmJiBvYmoubWFwID09PSBuYXRpdmVNYXApIHJldHVybiBvYmoubWFwKGl0ZXJhdG9yLCBjb250ZXh0KTtcbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICB2YXIgcmVkdWNlRXJyb3IgPSAnUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSc7XG5cbiAgLy8gKipSZWR1Y2UqKiBidWlsZHMgdXAgYSBzaW5nbGUgcmVzdWx0IGZyb20gYSBsaXN0IG9mIHZhbHVlcywgYWthIGBpbmplY3RgLFxuICAvLyBvciBgZm9sZGxgLiBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgcmVkdWNlYCBpZiBhdmFpbGFibGUuXG4gIF8ucmVkdWNlID0gXy5mb2xkbCA9IF8uaW5qZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRvciwgbWVtbywgY29udGV4dCkge1xuICAgIHZhciBpbml0aWFsID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gICAgaWYgKG9iaiA9PSBudWxsKSBvYmogPSBbXTtcbiAgICBpZiAobmF0aXZlUmVkdWNlICYmIG9iai5yZWR1Y2UgPT09IG5hdGl2ZVJlZHVjZSkge1xuICAgICAgaWYgKGNvbnRleHQpIGl0ZXJhdG9yID0gXy5iaW5kKGl0ZXJhdG9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBpbml0aWFsID8gb2JqLnJlZHVjZShpdGVyYXRvciwgbWVtbykgOiBvYmoucmVkdWNlKGl0ZXJhdG9yKTtcbiAgICB9XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKCFpbml0aWFsKSB7XG4gICAgICAgIG1lbW8gPSB2YWx1ZTtcbiAgICAgICAgaW5pdGlhbCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZW1vID0gaXRlcmF0b3IuY2FsbChjb250ZXh0LCBtZW1vLCB2YWx1ZSwgaW5kZXgsIGxpc3QpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghaW5pdGlhbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihyZWR1Y2VFcnJvcik7XG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG5cbiAgLy8gVGhlIHJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24gb2YgcmVkdWNlLCBhbHNvIGtub3duIGFzIGBmb2xkcmAuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGByZWR1Y2VSaWdodGAgaWYgYXZhaWxhYmxlLlxuICBfLnJlZHVjZVJpZ2h0ID0gXy5mb2xkciA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0b3IsIG1lbW8sIGNvbnRleHQpIHtcbiAgICB2YXIgaW5pdGlhbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIGlmIChvYmogPT0gbnVsbCkgb2JqID0gW107XG4gICAgaWYgKG5hdGl2ZVJlZHVjZVJpZ2h0ICYmIG9iai5yZWR1Y2VSaWdodCA9PT0gbmF0aXZlUmVkdWNlUmlnaHQpIHtcbiAgICAgIGlmIChjb250ZXh0KSBpdGVyYXRvciA9IF8uYmluZChpdGVyYXRvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gaW5pdGlhbCA/IG9iai5yZWR1Y2VSaWdodChpdGVyYXRvciwgbWVtbykgOiBvYmoucmVkdWNlUmlnaHQoaXRlcmF0b3IpO1xuICAgIH1cbiAgICB2YXIgbGVuZ3RoID0gb2JqLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoICE9PSArbGVuZ3RoKSB7XG4gICAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgfVxuICAgIGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIGluZGV4ID0ga2V5cyA/IGtleXNbLS1sZW5ndGhdIDogLS1sZW5ndGg7XG4gICAgICBpZiAoIWluaXRpYWwpIHtcbiAgICAgICAgbWVtbyA9IG9ialtpbmRleF07XG4gICAgICAgIGluaXRpYWwgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVtbyA9IGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgbWVtbywgb2JqW2luZGV4XSwgaW5kZXgsIGxpc3QpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghaW5pdGlhbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihyZWR1Y2VFcnJvcik7XG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBmaXJzdCB2YWx1ZSB3aGljaCBwYXNzZXMgYSB0cnV0aCB0ZXN0LiBBbGlhc2VkIGFzIGBkZXRlY3RgLlxuICBfLmZpbmQgPSBfLmRldGVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0O1xuICAgIGFueShvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KSkge1xuICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0aGF0IHBhc3MgYSB0cnV0aCB0ZXN0LlxuICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgZmlsdGVyYCBpZiBhdmFpbGFibGUuXG4gIC8vIEFsaWFzZWQgYXMgYHNlbGVjdGAuXG4gIF8uZmlsdGVyID0gXy5zZWxlY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHRzO1xuICAgIGlmIChuYXRpdmVGaWx0ZXIgJiYgb2JqLmZpbHRlciA9PT0gbmF0aXZlRmlsdGVyKSByZXR1cm4gb2JqLmZpbHRlcihpdGVyYXRvciwgY29udGV4dCk7XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KSkgcmVzdWx0cy5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBmb3Igd2hpY2ggYSB0cnV0aCB0ZXN0IGZhaWxzLlxuICBfLnJlamVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIHJldHVybiAhaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpO1xuICAgIH0sIGNvbnRleHQpO1xuICB9O1xuXG4gIC8vIERldGVybWluZSB3aGV0aGVyIGFsbCBvZiB0aGUgZWxlbWVudHMgbWF0Y2ggYSB0cnV0aCB0ZXN0LlxuICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgZXZlcnlgIGlmIGF2YWlsYWJsZS5cbiAgLy8gQWxpYXNlZCBhcyBgYWxsYC5cbiAgXy5ldmVyeSA9IF8uYWxsID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgIGl0ZXJhdG9yIHx8IChpdGVyYXRvciA9IF8uaWRlbnRpdHkpO1xuICAgIHZhciByZXN1bHQgPSB0cnVlO1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcbiAgICBpZiAobmF0aXZlRXZlcnkgJiYgb2JqLmV2ZXJ5ID09PSBuYXRpdmVFdmVyeSkgcmV0dXJuIG9iai5ldmVyeShpdGVyYXRvciwgY29udGV4dCk7XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKCEocmVzdWx0ID0gcmVzdWx0ICYmIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KSkpIHJldHVybiBicmVha2VyO1xuICAgIH0pO1xuICAgIHJldHVybiAhIXJlc3VsdDtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIG9iamVjdCBtYXRjaGVzIGEgdHJ1dGggdGVzdC5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYHNvbWVgIGlmIGF2YWlsYWJsZS5cbiAgLy8gQWxpYXNlZCBhcyBgYW55YC5cbiAgdmFyIGFueSA9IF8uc29tZSA9IF8uYW55ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgIGl0ZXJhdG9yIHx8IChpdGVyYXRvciA9IF8uaWRlbnRpdHkpO1xuICAgIHZhciByZXN1bHQgPSBmYWxzZTtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7XG4gICAgaWYgKG5hdGl2ZVNvbWUgJiYgb2JqLnNvbWUgPT09IG5hdGl2ZVNvbWUpIHJldHVybiBvYmouc29tZShpdGVyYXRvciwgY29udGV4dCk7XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKHJlc3VsdCB8fCAocmVzdWx0ID0gaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpKSkgcmV0dXJuIGJyZWFrZXI7XG4gICAgfSk7XG4gICAgcmV0dXJuICEhcmVzdWx0O1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEgZ2l2ZW4gdmFsdWUgKHVzaW5nIGA9PT1gKS5cbiAgLy8gQWxpYXNlZCBhcyBgaW5jbHVkZWAuXG4gIF8uY29udGFpbnMgPSBfLmluY2x1ZGUgPSBmdW5jdGlvbihvYmosIHRhcmdldCkge1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChuYXRpdmVJbmRleE9mICYmIG9iai5pbmRleE9mID09PSBuYXRpdmVJbmRleE9mKSByZXR1cm4gb2JqLmluZGV4T2YodGFyZ2V0KSAhPSAtMTtcbiAgICByZXR1cm4gYW55KG9iaiwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdGFyZ2V0O1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIEludm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0aW9uLlxuICBfLmludm9rZSA9IGZ1bmN0aW9uKG9iaiwgbWV0aG9kKSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgdmFyIGlzRnVuYyA9IF8uaXNGdW5jdGlvbihtZXRob2QpO1xuICAgIHJldHVybiBfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gKGlzRnVuYyA/IG1ldGhvZCA6IHZhbHVlW21ldGhvZF0pLmFwcGx5KHZhbHVlLCBhcmdzKTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBtYXBgOiBmZXRjaGluZyBhIHByb3BlcnR5LlxuICBfLnBsdWNrID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSl7IHJldHVybiB2YWx1ZVtrZXldOyB9KTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBmaWx0ZXJgOiBzZWxlY3Rpbmcgb25seSBvYmplY3RzXG4gIC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ud2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzLCBmaXJzdCkge1xuICAgIGlmIChfLmlzRW1wdHkoYXR0cnMpKSByZXR1cm4gZmlyc3QgPyB2b2lkIDAgOiBbXTtcbiAgICByZXR1cm4gX1tmaXJzdCA/ICdmaW5kJyA6ICdmaWx0ZXInXShvYmosIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gYXR0cnMpIHtcbiAgICAgICAgaWYgKGF0dHJzW2tleV0gIT09IHZhbHVlW2tleV0pIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbmRgOiBnZXR0aW5nIHRoZSBmaXJzdCBvYmplY3RcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5maW5kV2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8ud2hlcmUob2JqLCBhdHRycywgdHJ1ZSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBtYXhpbXVtIGVsZW1lbnQgb3IgKGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLlxuICAvLyBDYW4ndCBvcHRpbWl6ZSBhcnJheXMgb2YgaW50ZWdlcnMgbG9uZ2VyIHRoYW4gNjUsNTM1IGVsZW1lbnRzLlxuICAvLyBTZWUgW1dlYktpdCBCdWcgODA3OTddKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDc5NylcbiAgXy5tYXggPSBmdW5jdGlvbihvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gICAgaWYgKCFpdGVyYXRvciAmJiBfLmlzQXJyYXkob2JqKSAmJiBvYmpbMF0gPT09ICtvYmpbMF0gJiYgb2JqLmxlbmd0aCA8IDY1NTM1KSB7XG4gICAgICByZXR1cm4gTWF0aC5tYXguYXBwbHkoTWF0aCwgb2JqKTtcbiAgICB9XG4gICAgaWYgKCFpdGVyYXRvciAmJiBfLmlzRW1wdHkob2JqKSkgcmV0dXJuIC1JbmZpbml0eTtcbiAgICB2YXIgcmVzdWx0ID0ge2NvbXB1dGVkIDogLUluZmluaXR5LCB2YWx1ZTogLUluZmluaXR5fTtcbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICB2YXIgY29tcHV0ZWQgPSBpdGVyYXRvciA/IGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KSA6IHZhbHVlO1xuICAgICAgY29tcHV0ZWQgPiByZXN1bHQuY29tcHV0ZWQgJiYgKHJlc3VsdCA9IHt2YWx1ZSA6IHZhbHVlLCBjb21wdXRlZCA6IGNvbXB1dGVkfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG1pbmltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIF8ubWluID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgIGlmICghaXRlcmF0b3IgJiYgXy5pc0FycmF5KG9iaikgJiYgb2JqWzBdID09PSArb2JqWzBdICYmIG9iai5sZW5ndGggPCA2NTUzNSkge1xuICAgICAgcmV0dXJuIE1hdGgubWluLmFwcGx5KE1hdGgsIG9iaik7XG4gICAgfVxuICAgIGlmICghaXRlcmF0b3IgJiYgXy5pc0VtcHR5KG9iaikpIHJldHVybiBJbmZpbml0eTtcbiAgICB2YXIgcmVzdWx0ID0ge2NvbXB1dGVkIDogSW5maW5pdHksIHZhbHVlOiBJbmZpbml0eX07XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgdmFyIGNvbXB1dGVkID0gaXRlcmF0b3IgPyBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCkgOiB2YWx1ZTtcbiAgICAgIGNvbXB1dGVkIDwgcmVzdWx0LmNvbXB1dGVkICYmIChyZXN1bHQgPSB7dmFsdWUgOiB2YWx1ZSwgY29tcHV0ZWQgOiBjb21wdXRlZH0pO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQudmFsdWU7XG4gIH07XG5cbiAgLy8gU2h1ZmZsZSBhbiBhcnJheS5cbiAgXy5zaHVmZmxlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHJhbmQ7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgc2h1ZmZsZWQgPSBbXTtcbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJhbmQgPSBfLnJhbmRvbShpbmRleCsrKTtcbiAgICAgIHNodWZmbGVkW2luZGV4IC0gMV0gPSBzaHVmZmxlZFtyYW5kXTtcbiAgICAgIHNodWZmbGVkW3JhbmRdID0gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNodWZmbGVkO1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGxvb2t1cCBpdGVyYXRvcnMuXG4gIHZhciBsb29rdXBJdGVyYXRvciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIF8uaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1ZSA6IGZ1bmN0aW9uKG9iail7IHJldHVybiBvYmpbdmFsdWVdOyB9O1xuICB9O1xuXG4gIC8vIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRvci5cbiAgXy5zb3J0QnkgPSBmdW5jdGlvbihvYmosIHZhbHVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGl0ZXJhdG9yID0gbG9va3VwSXRlcmF0b3IodmFsdWUpO1xuICAgIHJldHVybiBfLnBsdWNrKF8ubWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZSA6IHZhbHVlLFxuICAgICAgICBpbmRleCA6IGluZGV4LFxuICAgICAgICBjcml0ZXJpYSA6IGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KVxuICAgICAgfTtcbiAgICB9KS5zb3J0KGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWE7XG4gICAgICB2YXIgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgaWYgKGEgPiBiIHx8IGEgPT09IHZvaWQgMCkgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhIDwgYiB8fCBiID09PSB2b2lkIDApIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZWZ0LmluZGV4IDwgcmlnaHQuaW5kZXggPyAtMSA6IDE7XG4gICAgfSksICd2YWx1ZScpO1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHVzZWQgZm9yIGFnZ3JlZ2F0ZSBcImdyb3VwIGJ5XCIgb3BlcmF0aW9ucy5cbiAgdmFyIGdyb3VwID0gZnVuY3Rpb24ob2JqLCB2YWx1ZSwgY29udGV4dCwgYmVoYXZpb3IpIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGl0ZXJhdG9yID0gbG9va3VwSXRlcmF0b3IodmFsdWUgPT0gbnVsbCA/IF8uaWRlbnRpdHkgOiB2YWx1ZSk7XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkge1xuICAgICAgdmFyIGtleSA9IGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBvYmopO1xuICAgICAgYmVoYXZpb3IocmVzdWx0LCBrZXksIHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGVcbiAgLy8gdG8gZ3JvdXAgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjcml0ZXJpb24uXG4gIF8uZ3JvdXBCeSA9IGZ1bmN0aW9uKG9iaiwgdmFsdWUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gZ3JvdXAob2JqLCB2YWx1ZSwgY29udGV4dCwgZnVuY3Rpb24ocmVzdWx0LCBrZXksIHZhbHVlKSB7XG4gICAgICAoXy5oYXMocmVzdWx0LCBrZXkpID8gcmVzdWx0W2tleV0gOiAocmVzdWx0W2tleV0gPSBbXSkpLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIENvdW50cyBpbnN0YW5jZXMgb2YgYW4gb2JqZWN0IHRoYXQgZ3JvdXAgYnkgYSBjZXJ0YWluIGNyaXRlcmlvbi4gUGFzc1xuICAvLyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlIHRvIGNvdW50IGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAgLy8gY3JpdGVyaW9uLlxuICBfLmNvdW50QnkgPSBmdW5jdGlvbihvYmosIHZhbHVlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGdyb3VwKG9iaiwgdmFsdWUsIGNvbnRleHQsIGZ1bmN0aW9uKHJlc3VsdCwga2V5KSB7XG4gICAgICBpZiAoIV8uaGFzKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0gPSAwO1xuICAgICAgcmVzdWx0W2tleV0rKztcbiAgICB9KTtcbiAgfTtcblxuICAvLyBVc2UgYSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRvIGZpZ3VyZSBvdXQgdGhlIHNtYWxsZXN0IGluZGV4IGF0IHdoaWNoXG4gIC8vIGFuIG9iamVjdCBzaG91bGQgYmUgaW5zZXJ0ZWQgc28gYXMgdG8gbWFpbnRhaW4gb3JkZXIuIFVzZXMgYmluYXJ5IHNlYXJjaC5cbiAgXy5zb3J0ZWRJbmRleCA9IGZ1bmN0aW9uKGFycmF5LCBvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYXRvciA9PSBudWxsID8gXy5pZGVudGl0eSA6IGxvb2t1cEl0ZXJhdG9yKGl0ZXJhdG9yKTtcbiAgICB2YXIgdmFsdWUgPSBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9iaik7XG4gICAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBhcnJheS5sZW5ndGg7XG4gICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgIHZhciBtaWQgPSAobG93ICsgaGlnaCkgPj4+IDE7XG4gICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIGFycmF5W21pZF0pIDwgdmFsdWUgPyBsb3cgPSBtaWQgKyAxIDogaGlnaCA9IG1pZDtcbiAgICB9XG4gICAgcmV0dXJuIGxvdztcbiAgfTtcblxuICAvLyBTYWZlbHkgY3JlYXRlIGEgcmVhbCwgbGl2ZSBhcnJheSBmcm9tIGFueXRoaW5nIGl0ZXJhYmxlLlxuICBfLnRvQXJyYXkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIW9iaikgcmV0dXJuIFtdO1xuICAgIGlmIChfLmlzQXJyYXkob2JqKSkgcmV0dXJuIHNsaWNlLmNhbGwob2JqKTtcbiAgICBpZiAob2JqLmxlbmd0aCA9PT0gK29iai5sZW5ndGgpIHJldHVybiBfLm1hcChvYmosIF8uaWRlbnRpdHkpO1xuICAgIHJldHVybiBfLnZhbHVlcyhvYmopO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIG9iamVjdC5cbiAgXy5zaXplID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4gKG9iai5sZW5ndGggPT09ICtvYmoubGVuZ3RoKSA/IG9iai5sZW5ndGggOiBfLmtleXMob2JqKS5sZW5ndGg7XG4gIH07XG5cbiAgLy8gQXJyYXkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgZmlyc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LiBBbGlhc2VkIGFzIGBoZWFkYCBhbmQgYHRha2VgLiBUaGUgKipndWFyZCoqIGNoZWNrXG4gIC8vIGFsbG93cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC5cbiAgXy5maXJzdCA9IF8uaGVhZCA9IF8udGFrZSA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgIHJldHVybiAobiAhPSBudWxsKSAmJiAhZ3VhcmQgPyBzbGljZS5jYWxsKGFycmF5LCAwLCBuKSA6IGFycmF5WzBdO1xuICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGxhc3QgZW50cnkgb2YgdGhlIGFycmF5LiBFc3BlY2lhbGx5IHVzZWZ1bCBvblxuICAvLyB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiBhbGwgdGhlIHZhbHVlcyBpblxuICAvLyB0aGUgYXJyYXksIGV4Y2x1ZGluZyB0aGUgbGFzdCBOLiBUaGUgKipndWFyZCoqIGNoZWNrIGFsbG93cyBpdCB0byB3b3JrIHdpdGhcbiAgLy8gYF8ubWFwYC5cbiAgXy5pbml0aWFsID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAsIGFycmF5Lmxlbmd0aCAtICgobiA9PSBudWxsKSB8fCBndWFyZCA/IDEgOiBuKSk7XG4gIH07XG5cbiAgLy8gR2V0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGxhc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LiBUaGUgKipndWFyZCoqIGNoZWNrIGFsbG93cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC5cbiAgXy5sYXN0ID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgaWYgKChuICE9IG51bGwpICYmICFndWFyZCkge1xuICAgICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIE1hdGgubWF4KGFycmF5Lmxlbmd0aCAtIG4sIDApKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBmaXJzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEFsaWFzZWQgYXMgYHRhaWxgIGFuZCBgZHJvcGAuXG4gIC8vIEVzcGVjaWFsbHkgdXNlZnVsIG9uIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nIGFuICoqbioqIHdpbGwgcmV0dXJuXG4gIC8vIHRoZSByZXN0IE4gdmFsdWVzIGluIHRoZSBhcnJheS4gVGhlICoqZ3VhcmQqKlxuICAvLyBjaGVjayBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXG4gIF8ucmVzdCA9IF8udGFpbCA9IF8uZHJvcCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCAobiA9PSBudWxsKSB8fCBndWFyZCA/IDEgOiBuKTtcbiAgfTtcblxuICAvLyBUcmltIG91dCBhbGwgZmFsc3kgdmFsdWVzIGZyb20gYW4gYXJyYXkuXG4gIF8uY29tcGFjdCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFycmF5LCBfLmlkZW50aXR5KTtcbiAgfTtcblxuICAvLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBhIHJlY3Vyc2l2ZSBgZmxhdHRlbmAgZnVuY3Rpb24uXG4gIHZhciBmbGF0dGVuID0gZnVuY3Rpb24oaW5wdXQsIHNoYWxsb3csIG91dHB1dCkge1xuICAgIGlmIChzaGFsbG93ICYmIF8uZXZlcnkoaW5wdXQsIF8uaXNBcnJheSkpIHtcbiAgICAgIHJldHVybiBjb25jYXQuYXBwbHkob3V0cHV0LCBpbnB1dCk7XG4gICAgfVxuICAgIGVhY2goaW5wdXQsIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICBpZiAoXy5pc0FycmF5KHZhbHVlKSB8fCBfLmlzQXJndW1lbnRzKHZhbHVlKSkge1xuICAgICAgICBzaGFsbG93ID8gcHVzaC5hcHBseShvdXRwdXQsIHZhbHVlKSA6IGZsYXR0ZW4odmFsdWUsIHNoYWxsb3csIG91dHB1dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXQucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSBjb21wbGV0ZWx5IGZsYXR0ZW5lZCB2ZXJzaW9uIG9mIGFuIGFycmF5LlxuICBfLmZsYXR0ZW4gPSBmdW5jdGlvbihhcnJheSwgc2hhbGxvdykge1xuICAgIHJldHVybiBmbGF0dGVuKGFycmF5LCBzaGFsbG93LCBbXSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgdmVyc2lvbiBvZiB0aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQgdmFsdWUocykuXG4gIF8ud2l0aG91dCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShhcnJheSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeVxuICAvLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uXG4gIC8vIEFsaWFzZWQgYXMgYHVuaXF1ZWAuXG4gIF8udW5pcSA9IF8udW5pcXVlID0gZnVuY3Rpb24oYXJyYXksIGlzU29ydGVkLCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgIGlmIChfLmlzRnVuY3Rpb24oaXNTb3J0ZWQpKSB7XG4gICAgICBjb250ZXh0ID0gaXRlcmF0b3I7XG4gICAgICBpdGVyYXRvciA9IGlzU29ydGVkO1xuICAgICAgaXNTb3J0ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGluaXRpYWwgPSBpdGVyYXRvciA/IF8ubWFwKGFycmF5LCBpdGVyYXRvciwgY29udGV4dCkgOiBhcnJheTtcbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgIHZhciBzZWVuID0gW107XG4gICAgZWFjaChpbml0aWFsLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcbiAgICAgIGlmIChpc1NvcnRlZCA/ICghaW5kZXggfHwgc2VlbltzZWVuLmxlbmd0aCAtIDFdICE9PSB2YWx1ZSkgOiAhXy5jb250YWlucyhzZWVuLCB2YWx1ZSkpIHtcbiAgICAgICAgc2Vlbi5wdXNoKHZhbHVlKTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKGFycmF5W2luZGV4XSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSB1bmlvbjogZWFjaCBkaXN0aW5jdCBlbGVtZW50IGZyb20gYWxsIG9mXG4gIC8vIHRoZSBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLnVuaW9uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF8udW5pcShfLmZsYXR0ZW4oYXJndW1lbnRzLCB0cnVlKSk7XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZVxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLmludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3QgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgcmV0dXJuIF8uZmlsdGVyKF8udW5pcShhcnJheSksIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgIHJldHVybiBfLmV2ZXJ5KHJlc3QsIGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgICAgIHJldHVybiBfLmluZGV4T2Yob3RoZXIsIGl0ZW0pID49IDA7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBUYWtlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb25lIGFycmF5IGFuZCBhIG51bWJlciBvZiBvdGhlciBhcnJheXMuXG4gIC8vIE9ubHkgdGhlIGVsZW1lbnRzIHByZXNlbnQgaW4ganVzdCB0aGUgZmlyc3QgYXJyYXkgd2lsbCByZW1haW4uXG4gIF8uZGlmZmVyZW5jZSA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3QgPSBjb25jYXQuYXBwbHkoQXJyYXlQcm90bywgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKXsgcmV0dXJuICFfLmNvbnRhaW5zKHJlc3QsIHZhbHVlKTsgfSk7XG4gIH07XG5cbiAgLy8gWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZVxuICAvLyBhbiBpbmRleCBnbyB0b2dldGhlci5cbiAgXy56aXAgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVuZ3RoID0gXy5tYXgoXy5wbHVjayhhcmd1bWVudHMsIFwibGVuZ3RoXCIpLmNvbmNhdCgwKSk7XG4gICAgdmFyIHJlc3VsdHMgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRzW2ldID0gXy5wbHVjayhhcmd1bWVudHMsICcnICsgaSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBcbiAgLy8gcGFpcnMsIG9yIHR3byBwYXJhbGxlbCBhcnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBrZXlzLCBhbmQgb25lIG9mXG4gIC8vIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgXy5vYmplY3QgPSBmdW5jdGlvbihsaXN0LCB2YWx1ZXMpIHtcbiAgICBpZiAobGlzdCA9PSBudWxsKSByZXR1cm4ge307XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gbGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1bMF1dID0gbGlzdFtpXVsxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBJZiB0aGUgYnJvd3NlciBkb2Vzbid0IHN1cHBseSB1cyB3aXRoIGluZGV4T2YgKEknbSBsb29raW5nIGF0IHlvdSwgKipNU0lFKiopLFxuICAvLyB3ZSBuZWVkIHRoaXMgZnVuY3Rpb24uIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW5cbiAgLy8gaXRlbSBpbiBhbiBhcnJheSwgb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYGluZGV4T2ZgIGlmIGF2YWlsYWJsZS5cbiAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5IGluIHNvcnQgb3JkZXIsIHBhc3MgYHRydWVgXG4gIC8vIGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFyeSBzZWFyY2guXG4gIF8uaW5kZXhPZiA9IGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBpc1NvcnRlZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gLTE7XG4gICAgdmFyIGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoO1xuICAgIGlmIChpc1NvcnRlZCkge1xuICAgICAgaWYgKHR5cGVvZiBpc1NvcnRlZCA9PSAnbnVtYmVyJykge1xuICAgICAgICBpID0gKGlzU29ydGVkIDwgMCA/IE1hdGgubWF4KDAsIGwgKyBpc1NvcnRlZCkgOiBpc1NvcnRlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpID0gXy5zb3J0ZWRJbmRleChhcnJheSwgaXRlbSk7XG4gICAgICAgIHJldHVybiBhcnJheVtpXSA9PT0gaXRlbSA/IGkgOiAtMTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5hdGl2ZUluZGV4T2YgJiYgYXJyYXkuaW5kZXhPZiA9PT0gbmF0aXZlSW5kZXhPZikgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSwgaXNTb3J0ZWQpO1xuICAgIGZvciAoOyBpIDwgbDsgaSsrKSBpZiAoYXJyYXlbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgIHJldHVybiAtMTtcbiAgfTtcblxuICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgbGFzdEluZGV4T2ZgIGlmIGF2YWlsYWJsZS5cbiAgXy5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBmcm9tKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVybiAtMTtcbiAgICB2YXIgaGFzSW5kZXggPSBmcm9tICE9IG51bGw7XG4gICAgaWYgKG5hdGl2ZUxhc3RJbmRleE9mICYmIGFycmF5Lmxhc3RJbmRleE9mID09PSBuYXRpdmVMYXN0SW5kZXhPZikge1xuICAgICAgcmV0dXJuIGhhc0luZGV4ID8gYXJyYXkubGFzdEluZGV4T2YoaXRlbSwgZnJvbSkgOiBhcnJheS5sYXN0SW5kZXhPZihpdGVtKTtcbiAgICB9XG4gICAgdmFyIGkgPSAoaGFzSW5kZXggPyBmcm9tIDogYXJyYXkubGVuZ3RoKTtcbiAgICB3aGlsZSAoaS0tKSBpZiAoYXJyYXlbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgIHJldHVybiAtMTtcbiAgfTtcblxuICAvLyBHZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJpdGhtZXRpYyBwcm9ncmVzc2lvbi4gQSBwb3J0IG9mXG4gIC8vIHRoZSBuYXRpdmUgUHl0aG9uIGByYW5nZSgpYCBmdW5jdGlvbi4gU2VlXG4gIC8vIFt0aGUgUHl0aG9uIGRvY3VtZW50YXRpb25dKGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSkuXG4gIF8ucmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDw9IDEpIHtcbiAgICAgIHN0b3AgPSBzdGFydCB8fCAwO1xuICAgICAgc3RhcnQgPSAwO1xuICAgIH1cbiAgICBzdGVwID0gYXJndW1lbnRzWzJdIHx8IDE7XG5cbiAgICB2YXIgbGVuID0gTWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCksIDApO1xuICAgIHZhciBpZHggPSAwO1xuICAgIHZhciByYW5nZSA9IG5ldyBBcnJheShsZW4pO1xuXG4gICAgd2hpbGUoaWR4IDwgbGVuKSB7XG4gICAgICByYW5nZVtpZHgrK10gPSBzdGFydDtcbiAgICAgIHN0YXJ0ICs9IHN0ZXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9uIChhaGVtKSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gUmV1c2FibGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHByb3RvdHlwZSBzZXR0aW5nLlxuICB2YXIgY3RvciA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbiAgLy8gb3B0aW9uYWxseSkuIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBGdW5jdGlvbi5iaW5kYCBpZlxuICAvLyBhdmFpbGFibGUuXG4gIF8uYmluZCA9IGZ1bmN0aW9uKGZ1bmMsIGNvbnRleHQpIHtcbiAgICB2YXIgYXJncywgYm91bmQ7XG4gICAgaWYgKG5hdGl2ZUJpbmQgJiYgZnVuYy5iaW5kID09PSBuYXRpdmVCaW5kKSByZXR1cm4gbmF0aXZlQmluZC5hcHBseShmdW5jLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgIGlmICghXy5pc0Z1bmN0aW9uKGZ1bmMpKSB0aHJvdyBuZXcgVHlwZUVycm9yO1xuICAgIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgcmV0dXJuIGJvdW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgYm91bmQpKSByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcbiAgICAgIGN0b3IucHJvdG90eXBlID0gZnVuYy5wcm90b3R5cGU7XG4gICAgICB2YXIgc2VsZiA9IG5ldyBjdG9yO1xuICAgICAgY3Rvci5wcm90b3R5cGUgPSBudWxsO1xuICAgICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkoc2VsZiwgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG4gICAgICBpZiAoT2JqZWN0KHJlc3VsdCkgPT09IHJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0c1xuICAvLyBhcmd1bWVudHMgcHJlLWZpbGxlZCwgd2l0aG91dCBjaGFuZ2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC5cbiAgXy5wYXJ0aWFsID0gZnVuY3Rpb24oZnVuYykge1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gQmluZCBhbGwgb2YgYW4gb2JqZWN0J3MgbWV0aG9kcyB0byB0aGF0IG9iamVjdC4gVXNlZnVsIGZvciBlbnN1cmluZyB0aGF0XG4gIC8vIGFsbCBjYWxsYmFja3MgZGVmaW5lZCBvbiBhbiBvYmplY3QgYmVsb25nIHRvIGl0LlxuICBfLmJpbmRBbGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgZnVuY3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKFwiYmluZEFsbCBtdXN0IGJlIHBhc3NlZCBmdW5jdGlvbiBuYW1lc1wiKTtcbiAgICBlYWNoKGZ1bmNzLCBmdW5jdGlvbihmKSB7IG9ialtmXSA9IF8uYmluZChvYmpbZl0sIG9iaik7IH0pO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gTWVtb2l6ZSBhbiBleHBlbnNpdmUgZnVuY3Rpb24gYnkgc3RvcmluZyBpdHMgcmVzdWx0cy5cbiAgXy5tZW1vaXplID0gZnVuY3Rpb24oZnVuYywgaGFzaGVyKSB7XG4gICAgdmFyIG1lbW8gPSB7fTtcbiAgICBoYXNoZXIgfHwgKGhhc2hlciA9IF8uaWRlbnRpdHkpO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiBfLmhhcyhtZW1vLCBrZXkpID8gbWVtb1trZXldIDogKG1lbW9ba2V5XSA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBEZWxheXMgYSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbGxzXG4gIC8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGllZC5cbiAgXy5kZWxheSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpeyByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTsgfSwgd2FpdCk7XG4gIH07XG5cbiAgLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIF8uZGVmZXIgPSBmdW5jdGlvbihmdW5jKSB7XG4gICAgcmV0dXJuIF8uZGVsYXkuYXBwbHkoXywgW2Z1bmMsIDFdLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIHdoZW4gaW52b2tlZCwgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBhdCBtb3N0IG9uY2VcbiAgLy8gZHVyaW5nIGEgZ2l2ZW4gd2luZG93IG9mIHRpbWUuIE5vcm1hbGx5LCB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uIHdpbGwgcnVuXG4gIC8vIGFzIG11Y2ggYXMgaXQgY2FuLCB3aXRob3V0IGV2ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0YCBkdXJhdGlvbjtcbiAgLy8gYnV0IGlmIHlvdSdkIGxpa2UgdG8gZGlzYWJsZSB0aGUgZXhlY3V0aW9uIG9uIHRoZSBsZWFkaW5nIGVkZ2UsIHBhc3NcbiAgLy8gYHtsZWFkaW5nOiBmYWxzZX1gLiBUbyBkaXNhYmxlIGV4ZWN1dGlvbiBvbiB0aGUgdHJhaWxpbmcgZWRnZSwgZGl0dG8uXG4gIF8udGhyb3R0bGUgPSBmdW5jdGlvbihmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gICAgdmFyIGNvbnRleHQsIGFyZ3MsIHJlc3VsdDtcbiAgICB2YXIgdGltZW91dCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzID0gMDtcbiAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pO1xuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IG5ldyBEYXRlO1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlO1xuICAgICAgaWYgKCFwcmV2aW91cyAmJiBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlKSBwcmV2aW91cyA9IG5vdztcbiAgICAgIHZhciByZW1haW5pbmcgPSB3YWl0IC0gKG5vdyAtIHByZXZpb3VzKTtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIGlmIChyZW1haW5pbmcgPD0gMCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICBwcmV2aW91cyA9IG5vdztcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRpbWVvdXQgJiYgb3B0aW9ucy50cmFpbGluZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCBhcyBsb25nIGFzIGl0IGNvbnRpbnVlcyB0byBiZSBpbnZva2VkLCB3aWxsIG5vdFxuICAvLyBiZSB0cmlnZ2VyZWQuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQgZm9yXG4gIC8vIE4gbWlsbGlzZWNvbmRzLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRyaWdnZXIgdGhlIGZ1bmN0aW9uIG9uIHRoZVxuICAvLyBsZWFkaW5nIGVkZ2UsIGluc3RlYWQgb2YgdGhlIHRyYWlsaW5nLlxuICBfLmRlYm91bmNlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICB2YXIgdGltZW91dCA9IG51bGw7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICBpZiAoIWltbWVkaWF0ZSkgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIH07XG4gICAgICB2YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgIGlmIChjYWxsTm93KSByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYXQgbW9zdCBvbmUgdGltZSwgbm8gbWF0dGVyIGhvd1xuICAvLyBvZnRlbiB5b3UgY2FsbCBpdC4gVXNlZnVsIGZvciBsYXp5IGluaXRpYWxpemF0aW9uLlxuICBfLm9uY2UgPSBmdW5jdGlvbihmdW5jKSB7XG4gICAgdmFyIHJhbiA9IGZhbHNlLCBtZW1vO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChyYW4pIHJldHVybiBtZW1vO1xuICAgICAgcmFuID0gdHJ1ZTtcbiAgICAgIG1lbW8gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICBmdW5jID0gbnVsbDtcbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgZnVuY3Rpb24gcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBzZWNvbmQsXG4gIC8vIGFsbG93aW5nIHlvdSB0byBhZGp1c3QgYXJndW1lbnRzLCBydW4gY29kZSBiZWZvcmUgYW5kIGFmdGVyLCBhbmRcbiAgLy8gY29uZGl0aW9uYWxseSBleGVjdXRlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cbiAgXy53cmFwID0gZnVuY3Rpb24oZnVuYywgd3JhcHBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhcmdzID0gW2Z1bmNdO1xuICAgICAgcHVzaC5hcHBseShhcmdzLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIHdyYXBwZXIuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaFxuICAvLyBjb25zdW1pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLlxuICBfLmNvbXBvc2UgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZnVuY3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBmb3IgKHZhciBpID0gZnVuY3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgYXJncyA9IFtmdW5jc1tpXS5hcHBseSh0aGlzLCBhcmdzKV07XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJnc1swXTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCBhZnRlciBiZWluZyBjYWxsZWQgTiB0aW1lcy5cbiAgXy5hZnRlciA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMgPCAxKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICAvLyBPYmplY3QgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGllcy5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5rZXlzYFxuICBfLmtleXMgPSBuYXRpdmVLZXlzIHx8IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChvYmogIT09IE9iamVjdChvYmopKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG9iamVjdCcpO1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikgaWYgKF8uaGFzKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLlxuICBfLnZhbHVlcyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoXy5oYXMob2JqLCBrZXkpKSB2YWx1ZXMucHVzaChvYmpba2V5XSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfTtcblxuICAvLyBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGEgbGlzdCBvZiBgW2tleSwgdmFsdWVdYCBwYWlycy5cbiAgXy5wYWlycyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBwYWlycyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChfLmhhcyhvYmosIGtleSkpIHBhaXJzLnB1c2goW2tleSwgb2JqW2tleV1dKTtcbiAgICByZXR1cm4gcGFpcnM7XG4gIH07XG5cbiAgLy8gSW52ZXJ0IHRoZSBrZXlzIGFuZCB2YWx1ZXMgb2YgYW4gb2JqZWN0LiBUaGUgdmFsdWVzIG11c3QgYmUgc2VyaWFsaXphYmxlLlxuICBfLmludmVydCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoXy5oYXMob2JqLCBrZXkpKSByZXN1bHRbb2JqW2tleV1dID0ga2V5O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgc29ydGVkIGxpc3Qgb2YgdGhlIGZ1bmN0aW9uIG5hbWVzIGF2YWlsYWJsZSBvbiB0aGUgb2JqZWN0LlxuICAvLyBBbGlhc2VkIGFzIGBtZXRob2RzYFxuICBfLmZ1bmN0aW9ucyA9IF8ubWV0aG9kcyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ob2JqW2tleV0pKSBuYW1lcy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lcy5zb3J0KCk7XG4gIH07XG5cbiAgLy8gRXh0ZW5kIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBwcm9wZXJ0aWVzIGluIHBhc3NlZC1pbiBvYmplY3QocykuXG4gIF8uZXh0ZW5kID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgZWFjaChzbGljZS5jYWxsKGFyZ3VtZW50cywgMSksIGZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSkge1xuICAgICAgICAgIG9ialtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgd2hpdGVsaXN0ZWQgcHJvcGVydGllcy5cbiAgXy5waWNrID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGNvcHkgPSB7fTtcbiAgICB2YXIga2V5cyA9IGNvbmNhdC5hcHBseShBcnJheVByb3RvLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgIGVhY2goa2V5cywgZnVuY3Rpb24oa2V5KSB7XG4gICAgICBpZiAoa2V5IGluIG9iaikgY29weVtrZXldID0gb2JqW2tleV07XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvcHk7XG4gIH07XG5cbiAgIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBibGFja2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLm9taXQgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgY29weSA9IHt9O1xuICAgIHZhciBrZXlzID0gY29uY2F0LmFwcGx5KEFycmF5UHJvdG8sIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKCFfLmNvbnRhaW5zKGtleXMsIGtleSkpIGNvcHlba2V5XSA9IG9ialtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gY29weTtcbiAgfTtcblxuICAvLyBGaWxsIGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICBfLmRlZmF1bHRzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgZWFjaChzbGljZS5jYWxsKGFyZ3VtZW50cywgMSksIGZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSkge1xuICAgICAgICAgIGlmIChvYmpbcHJvcF0gPT09IHZvaWQgMCkgb2JqW3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBvYmplY3QuXG4gIF8uY2xvbmUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gXy5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF8uZXh0ZW5kKHt9LCBvYmopO1xuICB9O1xuXG4gIC8vIEludm9rZXMgaW50ZXJjZXB0b3Igd2l0aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai5cbiAgLy8gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4sIGluXG4gIC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICBfLnRhcCA9IGZ1bmN0aW9uKG9iaiwgaW50ZXJjZXB0b3IpIHtcbiAgICBpbnRlcmNlcHRvcihvYmopO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gSW50ZXJuYWwgcmVjdXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBpc0VxdWFsYC5cbiAgdmFyIGVxID0gZnVuY3Rpb24oYSwgYiwgYVN0YWNrLCBiU3RhY2spIHtcbiAgICAvLyBJZGVudGljYWwgb2JqZWN0cyBhcmUgZXF1YWwuIGAwID09PSAtMGAsIGJ1dCB0aGV5IGFyZW4ndCBpZGVudGljYWwuXG4gICAgLy8gU2VlIHRoZSBbSGFybW9ueSBgZWdhbGAgcHJvcG9zYWxdKGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdhbCkuXG4gICAgaWYgKGEgPT09IGIpIHJldHVybiBhICE9PSAwIHx8IDEgLyBhID09IDEgLyBiO1xuICAgIC8vIEEgc3RyaWN0IGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYG51bGwgPT0gdW5kZWZpbmVkYC5cbiAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGEgPT09IGI7XG4gICAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBfKSBhID0gYS5fd3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93cmFwcGVkO1xuICAgIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPSB0b1N0cmluZy5jYWxsKGIpKSByZXR1cm4gZmFsc2U7XG4gICAgc3dpdGNoIChjbGFzc05hbWUpIHtcbiAgICAgIC8vIFN0cmluZ3MsIG51bWJlcnMsIGRhdGVzLCBhbmQgYm9vbGVhbnMgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlLlxuICAgICAgY2FzZSAnW29iamVjdCBTdHJpbmddJzpcbiAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgICByZXR1cm4gYSA9PSBTdHJpbmcoYik7XG4gICAgICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLiBBbiBgZWdhbGAgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQgZm9yXG4gICAgICAgIC8vIG90aGVyIG51bWVyaWMgdmFsdWVzLlxuICAgICAgICByZXR1cm4gYSAhPSArYSA/IGIgIT0gK2IgOiAoYSA9PSAwID8gMSAvIGEgPT0gMSAvIGIgOiBhID09ICtiKTtcbiAgICAgIGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxuICAgICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG4gICAgICAgIC8vIENvZXJjZSBkYXRlcyBhbmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRpdmUgdmFsdWVzLiBEYXRlcyBhcmUgY29tcGFyZWQgYnkgdGhlaXJcbiAgICAgICAgLy8gbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAgICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4gICAgICAgIHJldHVybiArYSA9PSArYjtcbiAgICAgIC8vIFJlZ0V4cHMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIHNvdXJjZSBwYXR0ZXJucyBhbmQgZmxhZ3MuXG4gICAgICBjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOlxuICAgICAgICByZXR1cm4gYS5zb3VyY2UgPT0gYi5zb3VyY2UgJiZcbiAgICAgICAgICAgICAgIGEuZ2xvYmFsID09IGIuZ2xvYmFsICYmXG4gICAgICAgICAgICAgICBhLm11bHRpbGluZSA9PSBiLm11bHRpbGluZSAmJlxuICAgICAgICAgICAgICAgYS5pZ25vcmVDYXNlID09IGIuaWdub3JlQ2FzZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhICE9ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gQXNzdW1lIGVxdWFsaXR5IGZvciBjeWNsaWMgc3RydWN0dXJlcy4gVGhlIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5nIGN5Y2xpY1xuICAgIC8vIHN0cnVjdHVyZXMgaXMgYWRhcHRlZCBmcm9tIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMsIGFic3RyYWN0IG9wZXJhdGlvbiBgSk9gLlxuICAgIHZhciBsZW5ndGggPSBhU3RhY2subGVuZ3RoO1xuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgLy8gTGluZWFyIHNlYXJjaC4gUGVyZm9ybWFuY2UgaXMgaW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mXG4gICAgICAvLyB1bmlxdWUgbmVzdGVkIHN0cnVjdHVyZXMuXG4gICAgICBpZiAoYVN0YWNrW2xlbmd0aF0gPT0gYSkgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09IGI7XG4gICAgfVxuICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3Rgc1xuICAgIC8vIGZyb20gZGlmZmVyZW50IGZyYW1lcyBhcmUuXG4gICAgdmFyIGFDdG9yID0gYS5jb25zdHJ1Y3RvciwgYkN0b3IgPSBiLmNvbnN0cnVjdG9yO1xuICAgIGlmIChhQ3RvciAhPT0gYkN0b3IgJiYgIShfLmlzRnVuY3Rpb24oYUN0b3IpICYmIChhQ3RvciBpbnN0YW5jZW9mIGFDdG9yKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmlzRnVuY3Rpb24oYkN0b3IpICYmIChiQ3RvciBpbnN0YW5jZW9mIGJDdG9yKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wdXNoKGEpO1xuICAgIGJTdGFjay5wdXNoKGIpO1xuICAgIHZhciBzaXplID0gMCwgcmVzdWx0ID0gdHJ1ZTtcbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgYW5kIGFycmF5cy5cbiAgICBpZiAoY2xhc3NOYW1lID09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgIC8vIENvbXBhcmUgYXJyYXkgbGVuZ3RocyB0byBkZXRlcm1pbmUgaWYgYSBkZWVwIGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5LlxuICAgICAgc2l6ZSA9IGEubGVuZ3RoO1xuICAgICAgcmVzdWx0ID0gc2l6ZSA9PSBiLmxlbmd0aDtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgLy8gRGVlcCBjb21wYXJlIHRoZSBjb250ZW50cywgaWdub3Jpbmcgbm9uLW51bWVyaWMgcHJvcGVydGllcy5cbiAgICAgICAgd2hpbGUgKHNpemUtLSkge1xuICAgICAgICAgIGlmICghKHJlc3VsdCA9IGVxKGFbc2l6ZV0sIGJbc2l6ZV0sIGFTdGFjaywgYlN0YWNrKSkpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZXAgY29tcGFyZSBvYmplY3RzLlxuICAgICAgZm9yICh2YXIga2V5IGluIGEpIHtcbiAgICAgICAgaWYgKF8uaGFzKGEsIGtleSkpIHtcbiAgICAgICAgICAvLyBDb3VudCB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIHByb3BlcnRpZXMuXG4gICAgICAgICAgc2l6ZSsrO1xuICAgICAgICAgIC8vIERlZXAgY29tcGFyZSBlYWNoIG1lbWJlci5cbiAgICAgICAgICBpZiAoIShyZXN1bHQgPSBfLmhhcyhiLCBrZXkpICYmIGVxKGFba2V5XSwgYltrZXldLCBhU3RhY2ssIGJTdGFjaykpKSBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMuXG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGZvciAoa2V5IGluIGIpIHtcbiAgICAgICAgICBpZiAoXy5oYXMoYiwga2V5KSAmJiAhKHNpemUtLSkpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9ICFzaXplO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucG9wKCk7XG4gICAgYlN0YWNrLnBvcCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUGVyZm9ybSBhIGRlZXAgY29tcGFyaXNvbiB0byBjaGVjayBpZiB0d28gb2JqZWN0cyBhcmUgZXF1YWwuXG4gIF8uaXNFcXVhbCA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gZXEoYSwgYiwgW10sIFtdKTtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIGFycmF5LCBzdHJpbmcsIG9yIG9iamVjdCBlbXB0eT9cbiAgLy8gQW4gXCJlbXB0eVwiIG9iamVjdCBoYXMgbm8gZW51bWVyYWJsZSBvd24tcHJvcGVydGllcy5cbiAgXy5pc0VtcHR5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoXy5pc0FycmF5KG9iaikgfHwgXy5pc1N0cmluZyhvYmopKSByZXR1cm4gb2JqLmxlbmd0aCA9PT0gMDtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoXy5oYXMob2JqLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIERPTSBlbGVtZW50P1xuICBfLmlzRWxlbWVudCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiAhIShvYmogJiYgb2JqLm5vZGVUeXBlID09PSAxKTtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGFuIGFycmF5P1xuICAvLyBEZWxlZ2F0ZXMgdG8gRUNNQTUncyBuYXRpdmUgQXJyYXkuaXNBcnJheVxuICBfLmlzQXJyYXkgPSBuYXRpdmVJc0FycmF5IHx8IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9iamVjdD9cbiAgXy5pc09iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IE9iamVjdChvYmopO1xuICB9O1xuXG4gIC8vIEFkZCBzb21lIGlzVHlwZSBtZXRob2RzOiBpc0FyZ3VtZW50cywgaXNGdW5jdGlvbiwgaXNTdHJpbmcsIGlzTnVtYmVyLCBpc0RhdGUsIGlzUmVnRXhwLlxuICBlYWNoKFsnQXJndW1lbnRzJywgJ0Z1bmN0aW9uJywgJ1N0cmluZycsICdOdW1iZXInLCAnRGF0ZScsICdSZWdFeHAnXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIF9bJ2lzJyArIG5hbWVdID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09ICdbb2JqZWN0ICcgKyBuYW1lICsgJ10nO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIERlZmluZSBhIGZhbGxiYWNrIHZlcnNpb24gb2YgdGhlIG1ldGhvZCBpbiBicm93c2VycyAoYWhlbSwgSUUpLCB3aGVyZVxuICAvLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgXCJBcmd1bWVudHNcIiB0eXBlLlxuICBpZiAoIV8uaXNBcmd1bWVudHMoYXJndW1lbnRzKSkge1xuICAgIF8uaXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiAhIShvYmogJiYgXy5oYXMob2JqLCAnY2FsbGVlJykpO1xuICAgIH07XG4gIH1cblxuICAvLyBPcHRpbWl6ZSBgaXNGdW5jdGlvbmAgaWYgYXBwcm9wcmlhdGUuXG4gIGlmICh0eXBlb2YgKC8uLykgIT09ICdmdW5jdGlvbicpIHtcbiAgICBfLmlzRnVuY3Rpb24gPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nO1xuICAgIH07XG4gIH1cblxuICAvLyBJcyBhIGdpdmVuIG9iamVjdCBhIGZpbml0ZSBudW1iZXI/XG4gIF8uaXNGaW5pdGUgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChvYmopKTtcbiAgfTtcblxuICAvLyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/IChOYU4gaXMgdGhlIG9ubHkgbnVtYmVyIHdoaWNoIGRvZXMgbm90IGVxdWFsIGl0c2VsZikuXG4gIF8uaXNOYU4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gXy5pc051bWJlcihvYmopICYmIG9iaiAhPSArb2JqO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBib29sZWFuP1xuICBfLmlzQm9vbGVhbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHRydWUgfHwgb2JqID09PSBmYWxzZSB8fCB0b1N0cmluZy5jYWxsKG9iaikgPT0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgZXF1YWwgdG8gbnVsbD9cbiAgXy5pc051bGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSBudWxsO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkP1xuICBfLmlzVW5kZWZpbmVkID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdm9pZCAwO1xuICB9O1xuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHlcbiAgLy8gb24gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS5cbiAgXy5oYXMgPSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbiAgfTtcblxuICAvLyBVdGlsaXR5IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFJ1biBVbmRlcnNjb3JlLmpzIGluICpub0NvbmZsaWN0KiBtb2RlLCByZXR1cm5pbmcgdGhlIGBfYCB2YXJpYWJsZSB0byBpdHNcbiAgLy8gcHJldmlvdXMgb3duZXIuIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm5vQ29uZmxpY3QgPSBmdW5jdGlvbigpIHtcbiAgICByb290Ll8gPSBwcmV2aW91c1VuZGVyc2NvcmU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gS2VlcCB0aGUgaWRlbnRpdHkgZnVuY3Rpb24gYXJvdW5kIGZvciBkZWZhdWx0IGl0ZXJhdG9ycy5cbiAgXy5pZGVudGl0eSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIC8vIFJ1biBhIGZ1bmN0aW9uICoqbioqIHRpbWVzLlxuICBfLnRpbWVzID0gZnVuY3Rpb24obiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgICB2YXIgYWNjdW0gPSBBcnJheShNYXRoLm1heCgwLCBuKSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ldID0gaXRlcmF0b3IuY2FsbChjb250ZXh0LCBpKTtcbiAgICByZXR1cm4gYWNjdW07XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiBtaW4gYW5kIG1heCAoaW5jbHVzaXZlKS5cbiAgXy5yYW5kb20gPSBmdW5jdGlvbihtaW4sIG1heCkge1xuICAgIGlmIChtYXggPT0gbnVsbCkge1xuICAgICAgbWF4ID0gbWluO1xuICAgICAgbWluID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIG1pbiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSk7XG4gIH07XG5cbiAgLy8gTGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy5cbiAgdmFyIGVudGl0eU1hcCA9IHtcbiAgICBlc2NhcGU6IHtcbiAgICAgICcmJzogJyZhbXA7JyxcbiAgICAgICc8JzogJyZsdDsnLFxuICAgICAgJz4nOiAnJmd0OycsXG4gICAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICAgIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgICAgICcvJzogJyYjeDJGOydcbiAgICB9XG4gIH07XG4gIGVudGl0eU1hcC51bmVzY2FwZSA9IF8uaW52ZXJ0KGVudGl0eU1hcC5lc2NhcGUpO1xuXG4gIC8vIFJlZ2V4ZXMgY29udGFpbmluZyB0aGUga2V5cyBhbmQgdmFsdWVzIGxpc3RlZCBpbW1lZGlhdGVseSBhYm92ZS5cbiAgdmFyIGVudGl0eVJlZ2V4ZXMgPSB7XG4gICAgZXNjYXBlOiAgIG5ldyBSZWdFeHAoJ1snICsgXy5rZXlzKGVudGl0eU1hcC5lc2NhcGUpLmpvaW4oJycpICsgJ10nLCAnZycpLFxuICAgIHVuZXNjYXBlOiBuZXcgUmVnRXhwKCcoJyArIF8ua2V5cyhlbnRpdHlNYXAudW5lc2NhcGUpLmpvaW4oJ3wnKSArICcpJywgJ2cnKVxuICB9O1xuXG4gIC8vIEZ1bmN0aW9ucyBmb3IgZXNjYXBpbmcgYW5kIHVuZXNjYXBpbmcgc3RyaW5ncyB0by9mcm9tIEhUTUwgaW50ZXJwb2xhdGlvbi5cbiAgXy5lYWNoKFsnZXNjYXBlJywgJ3VuZXNjYXBlJ10sIGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgIF9bbWV0aG9kXSA9IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgaWYgKHN0cmluZyA9PSBudWxsKSByZXR1cm4gJyc7XG4gICAgICByZXR1cm4gKCcnICsgc3RyaW5nKS5yZXBsYWNlKGVudGl0eVJlZ2V4ZXNbbWV0aG9kXSwgZnVuY3Rpb24obWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIGVudGl0eU1hcFttZXRob2RdW21hdGNoXTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIElmIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgYHByb3BlcnR5YCBpcyBhIGZ1bmN0aW9uIHRoZW4gaW52b2tlIGl0IHdpdGggdGhlXG4gIC8vIGBvYmplY3RgIGFzIGNvbnRleHQ7IG90aGVyd2lzZSwgcmV0dXJuIGl0LlxuICBfLnJlc3VsdCA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgdmFyIHZhbHVlID0gb2JqZWN0W3Byb3BlcnR5XTtcbiAgICByZXR1cm4gXy5pc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlLmNhbGwob2JqZWN0KSA6IHZhbHVlO1xuICB9O1xuXG4gIC8vIEFkZCB5b3VyIG93biBjdXN0b20gZnVuY3Rpb25zIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5taXhpbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGVhY2goXy5mdW5jdGlvbnMob2JqKSwgZnVuY3Rpb24obmFtZSl7XG4gICAgICB2YXIgZnVuYyA9IF9bbmFtZV0gPSBvYmpbbmFtZV07XG4gICAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYXJncyA9IFt0aGlzLl93cmFwcGVkXTtcbiAgICAgICAgcHVzaC5hcHBseShhcmdzLCBhcmd1bWVudHMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0LmNhbGwodGhpcywgZnVuYy5hcHBseShfLCBhcmdzKSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4gIC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuXG4gIHZhciBpZENvdW50ZXIgPSAwO1xuICBfLnVuaXF1ZUlkID0gZnVuY3Rpb24ocHJlZml4KSB7XG4gICAgdmFyIGlkID0gKytpZENvdW50ZXIgKyAnJztcbiAgICByZXR1cm4gcHJlZml4ID8gcHJlZml4ICsgaWQgOiBpZDtcbiAgfTtcblxuICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGVcbiAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG4gICAgZXZhbHVhdGUgICAgOiAvPCUoW1xcc1xcU10rPyklPi9nLFxuICAgIGludGVycG9sYXRlIDogLzwlPShbXFxzXFxTXSs/KSU+L2csXG4gICAgZXNjYXBlICAgICAgOiAvPCUtKFtcXHNcXFNdKz8pJT4vZ1xuICB9O1xuXG4gIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW5cbiAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpc1xuICAvLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC5cbiAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87XG5cbiAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGFcbiAgLy8gc3RyaW5nIGxpdGVyYWwuXG4gIHZhciBlc2NhcGVzID0ge1xuICAgIFwiJ1wiOiAgICAgIFwiJ1wiLFxuICAgICdcXFxcJzogICAgICdcXFxcJyxcbiAgICAnXFxyJzogICAgICdyJyxcbiAgICAnXFxuJzogICAgICduJyxcbiAgICAnXFx0JzogICAgICd0JyxcbiAgICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICAgJ1xcdTIwMjknOiAndTIwMjknXG4gIH07XG5cbiAgdmFyIGVzY2FwZXIgPSAvXFxcXHwnfFxccnxcXG58XFx0fFxcdTIwMjh8XFx1MjAyOS9nO1xuXG4gIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uXG4gIC8vIFVuZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSxcbiAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuXG4gIF8udGVtcGxhdGUgPSBmdW5jdGlvbih0ZXh0LCBkYXRhLCBzZXR0aW5ncykge1xuICAgIHZhciByZW5kZXI7XG4gICAgc2V0dGluZ3MgPSBfLmRlZmF1bHRzKHt9LCBzZXR0aW5ncywgXy50ZW1wbGF0ZVNldHRpbmdzKTtcblxuICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Npb24gdmlhIGFsdGVybmF0aW9uLlxuICAgIHZhciBtYXRjaGVyID0gbmV3IFJlZ0V4cChbXG4gICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlXG4gICAgXS5qb2luKCd8JykgKyAnfCQnLCAnZycpO1xuXG4gICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS5cbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBzb3VyY2UgPSBcIl9fcCs9J1wiO1xuICAgIHRleHQucmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkge1xuICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldClcbiAgICAgICAgLnJlcGxhY2UoZXNjYXBlciwgZnVuY3Rpb24obWF0Y2gpIHsgcmV0dXJuICdcXFxcJyArIGVzY2FwZXNbbWF0Y2hdOyB9KTtcblxuICAgICAgaWYgKGVzY2FwZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGVzY2FwZSArIFwiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXFxuJ1wiO1xuICAgICAgfVxuICAgICAgaWYgKGludGVycG9sYXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wiO1xuICAgICAgfVxuICAgICAgaWYgKGV2YWx1YXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0ZSArIFwiXFxuX19wKz0nXCI7XG4gICAgICB9XG4gICAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDtcbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9KTtcbiAgICBzb3VyY2UgKz0gXCInO1xcblwiO1xuXG4gICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVkLCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS5cbiAgICBpZiAoIXNldHRpbmdzLnZhcmlhYmxlKSBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcXG4nICsgc291cmNlICsgJ31cXG4nO1xuXG4gICAgc291cmNlID0gXCJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sXCIgK1xuICAgICAgXCJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xcblwiICtcbiAgICAgIHNvdXJjZSArIFwicmV0dXJuIF9fcDtcXG5cIjtcblxuICAgIHRyeSB7XG4gICAgICByZW5kZXIgPSBuZXcgRnVuY3Rpb24oc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicsICdfJywgc291cmNlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEpIHJldHVybiByZW5kZXIoZGF0YSwgXyk7XG4gICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pO1xuICAgIH07XG5cbiAgICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbiBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3IgcHJlY29tcGlsYXRpb24uXG4gICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAoc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicpICsgJyl7XFxuJyArIHNvdXJjZSArICd9JztcblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfTtcblxuICAvLyBBZGQgYSBcImNoYWluXCIgZnVuY3Rpb24sIHdoaWNoIHdpbGwgZGVsZWdhdGUgdG8gdGhlIHdyYXBwZXIuXG4gIF8uY2hhaW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gXyhvYmopLmNoYWluKCk7XG4gIH07XG5cbiAgLy8gT09QXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuICAvLyBJZiBVbmRlcnNjb3JlIGlzIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBpdCByZXR1cm5zIGEgd3JhcHBlZCBvYmplY3QgdGhhdFxuICAvLyBjYW4gYmUgdXNlZCBPTy1zdHlsZS4gVGhpcyB3cmFwcGVyIGhvbGRzIGFsdGVyZWQgdmVyc2lvbnMgb2YgYWxsIHRoZVxuICAvLyB1bmRlcnNjb3JlIGZ1bmN0aW9ucy4gV3JhcHBlZCBvYmplY3RzIG1heSBiZSBjaGFpbmVkLlxuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjb250aW51ZSBjaGFpbmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy5cbiAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiB0aGlzLl9jaGFpbiA/IF8ob2JqKS5jaGFpbigpIDogb2JqO1xuICB9O1xuXG4gIC8vIEFkZCBhbGwgb2YgdGhlIFVuZGVyc2NvcmUgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyIG9iamVjdC5cbiAgXy5taXhpbihfKTtcblxuICAvLyBBZGQgYWxsIG11dGF0b3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuICBlYWNoKFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0J10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9iaiA9IHRoaXMuX3dyYXBwZWQ7XG4gICAgICBtZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpO1xuICAgICAgaWYgKChuYW1lID09ICdzaGlmdCcgfHwgbmFtZSA9PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkgZGVsZXRlIG9ialswXTtcbiAgICAgIHJldHVybiByZXN1bHQuY2FsbCh0aGlzLCBvYmopO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIEFkZCBhbGwgYWNjZXNzb3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuICBlYWNoKFsnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcmVzdWx0LmNhbGwodGhpcywgbWV0aG9kLmFwcGx5KHRoaXMuX3dyYXBwZWQsIGFyZ3VtZW50cykpO1xuICAgIH07XG4gIH0pO1xuXG4gIF8uZXh0ZW5kKF8ucHJvdG90eXBlLCB7XG5cbiAgICAvLyBTdGFydCBjaGFpbmluZyBhIHdyYXBwZWQgVW5kZXJzY29yZSBvYmplY3QuXG4gICAgY2hhaW46IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fY2hhaW4gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8vIEV4dHJhY3RzIHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWluZWQgb2JqZWN0LlxuICAgIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl93cmFwcGVkO1xuICAgIH1cblxuICB9KTtcblxufSkuY2FsbCh0aGlzKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=